coreboot-gerrit
Threads by month
- ----- 2025 -----
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
February 2019
- 1 participants
- 1249 discussions

Change in ...coreboot[master]: WIP: libpayload: add initial support for RISC-V
by Philipp Hug (Code Review) Aug. 7, 2023
by Philipp Hug (Code Review) Aug. 7, 2023
Aug. 7, 2023
Philipp Hug has uploaded this change for review. ( https://review.coreboot.org/c/coreboot/+/31356
Change subject: WIP: libpayload: add initial support for RISC-V
......................................................................
WIP: libpayload: add initial support for RISC-V
Parse fdt provided by a2 and extract coreboot tables from it.
Change-Id: I91df02069a0f8fd8771f73de0e866e9cea05cded
Signed-off-by: Philipp Hug <philipp(a)hug.cx>
---
M payloads/libpayload/Kconfig
M payloads/libpayload/Makefile
M payloads/libpayload/Makefile.inc
A payloads/libpayload/arch/riscv/Kconfig
A payloads/libpayload/arch/riscv/Makefile.inc
A payloads/libpayload/arch/riscv/coreboot.c
A payloads/libpayload/arch/riscv/head.S
A payloads/libpayload/arch/riscv/libpayload.ldscript
A payloads/libpayload/arch/riscv/main.c
A payloads/libpayload/arch/riscv/sysinfo.c
A payloads/libpayload/arch/riscv/timer.c
A payloads/libpayload/arch/riscv/util.S
A payloads/libpayload/arch/riscv/virtual.c
M payloads/libpayload/bin/lpgcc
A payloads/libpayload/configs/config.riscv
A payloads/libpayload/configs/defconfig-riscv
A payloads/libpayload/include/riscv/arch/asm.h
A payloads/libpayload/include/riscv/arch/barrier.h
A payloads/libpayload/include/riscv/arch/cache.h
A payloads/libpayload/include/riscv/arch/io.h
A payloads/libpayload/include/riscv/arch/types.h
A payloads/libpayload/include/riscv/arch/virtual.h
22 files changed, 1,094 insertions(+), 1 deletion(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/56/31356/1
diff --git a/payloads/libpayload/Kconfig b/payloads/libpayload/Kconfig
index 5bfbd54..846280d 100644
--- a/payloads/libpayload/Kconfig
+++ b/payloads/libpayload/Kconfig
@@ -119,6 +119,11 @@
help
Support the MIPS architecture
+config ARCH_RISCV
+ bool "RISCV"
+ help
+ Support the RISCV architecture
+
endchoice
config MULTIBOOT
@@ -148,12 +153,13 @@
default 0x04000000 if ARCH_ARM
default 0x80100000 if ARCH_ARM64
default 0x00000000 if ARCH_MIPS
+ default 0x81000000 if ARCH_RISCV
default 0x00100000 if ARCH_X86
help
This is the base address for the payload.
If unsure, set to 0x00100000 on x86, 0x00000000 on MIPS,
- 0x04000000 on ARM or 0x80100000 on ARM64.
+ 0x04000000 on ARM or 0x80100000 on ARM64 or 0x81000000 on RISCV.
endmenu
@@ -451,4 +457,5 @@
source "arch/arm/Kconfig"
source "arch/arm64/Kconfig"
source "arch/mips/Kconfig"
+source "arch/riscv/Kconfig"
source "arch/x86/Kconfig"
diff --git a/payloads/libpayload/Makefile b/payloads/libpayload/Makefile
index 1a0acf1..e01115e 100644
--- a/payloads/libpayload/Makefile
+++ b/payloads/libpayload/Makefile
@@ -96,6 +96,7 @@
ARCHDIR-$(CONFIG_LP_ARCH_ARM) := arm
ARCHDIR-$(CONFIG_LP_ARCH_ARM64) := arm64
ARCHDIR-$(CONFIG_LP_ARCH_MIPS) := mips
+ARCHDIR-$(CONFIG_LP_ARCH_RISCV) := riscv
ARCHDIR-$(CONFIG_LP_ARCH_X86) := x86
ARCH-y := $(ARCHDIR-y)
@@ -105,6 +106,7 @@
ARCH-$(CONFIG_LP_ARCH_ARM) := arm
ARCH-$(CONFIG_LP_ARCH_ARM64) := arm64
ARCH-$(CONFIG_LP_ARCH_X86) := x86_32
+ARCH-$(CONFIG_LP_ARCH_RISCV) := riscv
ARCH-$(CONFIG_LP_ARCH_MIPS) := mips
# Three cases where we don't need fully populated $(obj) lists:
diff --git a/payloads/libpayload/Makefile.inc b/payloads/libpayload/Makefile.inc
index 052a3f0..8ea0810 100644
--- a/payloads/libpayload/Makefile.inc
+++ b/payloads/libpayload/Makefile.inc
@@ -34,6 +34,7 @@
ARCHDIR-$(CONFIG_LP_ARCH_ARM) := arm
ARCHDIR-$(CONFIG_LP_ARCH_ARM64) := arm64
ARCHDIR-$(CONFIG_LP_ARCH_MIPS) := mips
+ARCHDIR-$(CONFIG_LP_ARCH_RISCV) := riscv
ARCHDIR-$(CONFIG_LP_ARCH_X86) := x86
DESTDIR ?= install
@@ -61,12 +62,15 @@
INCLUDES := -Iinclude -Iinclude/$(ARCHDIR-y) -I$(obj) -include include/kconfig.h
+ARCHCFLAGS-$(CONFIG_LP_ARCH_RISCV) := -mcmodel=medany
+
CFLAGS += $(EXTRA_CFLAGS) $(INCLUDES) -Os -pipe -nostdinc -ggdb3
CFLAGS += -nostdlib -fno-builtin -ffreestanding -fomit-frame-pointer
CFLAGS += -ffunction-sections -fdata-sections
CFLAGS += -Wall -Wundef -Wstrict-prototypes -Wmissing-prototypes
CFLAGS += -Wwrite-strings -Wredundant-decls -Wno-trigraphs
CFLAGS += -Wstrict-aliasing -Wshadow -Werror
+CFLAGS += $(ARCHCFLAGS-y)
$(obj)/libpayload-config.h: $(KCONFIG_AUTOHEADER)
cmp $@ $< 2>/dev/null || cp $< $@
diff --git a/payloads/libpayload/arch/riscv/Kconfig b/payloads/libpayload/arch/riscv/Kconfig
new file mode 100644
index 0000000..6352ff0
--- /dev/null
+++ b/payloads/libpayload/arch/riscv/Kconfig
@@ -0,0 +1,37 @@
+##
+## This file is part of the libpayload project.
+##
+## Copyright (c) 2012 Google Inc.
+##
+## Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions
+## are met:
+## 1. Redistributions of source code must retain the above copyright
+## notice, this list of conditions and the following disclaimer.
+## 2. Redistributions in binary form must reproduce the above copyright
+## notice, this list of conditions and the following disclaimer in the
+## documentation and/or other materials provided with the distribution.
+## 3. The name of the author may not be used to endorse or promote products
+## derived from this software without specific prior written permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+## ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+## IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+## ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+## FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+## DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+## OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+## HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+## LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+## OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+## SUCH DAMAGE.
+##
+
+if ARCH_RISCV
+
+config ARCH_SPECIFIC_OPTIONS # dummy
+ def_bool y
+ select LITTLE_ENDIAN
+ select FDT
+
+endif
diff --git a/payloads/libpayload/arch/riscv/Makefile.inc b/payloads/libpayload/arch/riscv/Makefile.inc
new file mode 100644
index 0000000..01d6bd8
--- /dev/null
+++ b/payloads/libpayload/arch/riscv/Makefile.inc
@@ -0,0 +1,34 @@
+##
+## This file is part of the libpayload project.
+##
+## Copyright (C) 2008 Advanced Micro Devices, Inc.
+##
+## Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions
+## are met:
+## 1. Redistributions of source code must retain the above copyright
+## notice, this list of conditions and the following disclaimer.
+## 2. Redistributions in binary form must reproduce the above copyright
+## notice, this list of conditions and the following disclaimer in the
+## documentation and/or other materials provided with the distribution.
+## 3. The name of the author may not be used to endorse or promote products
+## derived from this software without specific prior written permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+## ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+## IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+## ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+## FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+## DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+## OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+## HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+## LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+## OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+## SUCH DAMAGE.
+##
+
+head.o-y += head.S
+
+libc-y += main.c sysinfo.c
+libc-y += timer.c coreboot.c util.S
+libc-y += virtual.c
diff --git a/payloads/libpayload/arch/riscv/coreboot.c b/payloads/libpayload/arch/riscv/coreboot.c
new file mode 100644
index 0000000..ea21c51
--- /dev/null
+++ b/payloads/libpayload/arch/riscv/coreboot.c
@@ -0,0 +1,94 @@
+/*
+ * This file is part of the libpayload project.
+ *
+ * Copyright (C) 2008 Advanced Micro Devices, Inc.
+ * Copyright (C) 2009 coresystems GmbH
+ * Copyright (C) 2019 Philipp Hug <philipp(a)hug.cx>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <libpayload-config.h>
+#include <libpayload.h>
+#include <coreboot_tables.h>
+#include <libfdt.h>
+
+/* This pointer gets set in head.S and is passed in from coreboot. */
+void *fdt_ptr;
+int hart_id;
+
+/* == Architecture specific == */
+
+int cb_parse_arch_specific(struct cb_record *rec, struct sysinfo_t *info)
+{
+ switch (rec->tag) {
+ default:
+ return 0;
+ }
+ return 1;
+}
+
+int get_coreboot_info(struct sysinfo_t *info)
+{
+ void *cb_header_ptr = get_cb_header_ptr();
+ if (cb_header_ptr == NULL)
+ return 1;
+ return cb_parse_header(cb_header_ptr, 1, info);
+}
+
+void *get_cb_header_ptr(void)
+{
+ int offset;
+ int len;
+ const struct fdt_property *prop;
+
+ /*
+ * coreboot tables are provides within the fdt which was passes as
+ * a2 to the entry point
+ */
+
+ if (fdt_check_header(fdt_ptr) != 0) {
+ printf("fdt: invalid header\n");
+ return NULL;
+ }
+
+ // search for coreboot node
+ offset = fdt_node_offset_by_compatible(fdt_ptr, -1, "coreboot");
+ if (offset < 0) {
+ printf("fdt: coreboot node not found\n");
+ return NULL;
+ }
+
+ /*
+ * get reg property and extract the pointer to the coreboot tables
+ * TODO: parse cell info and fix for RV32
+ */
+ prop = fdt_get_property(fdt_ptr, offset, "reg", &len);
+ if (len != 32) {
+ printf("fdt: invalid reg property\n");
+ return NULL;
+ }
+
+ return (void *)fdt64_ld((fdt64_t *)prop->data);
+}
diff --git a/payloads/libpayload/arch/riscv/head.S b/payloads/libpayload/arch/riscv/head.S
new file mode 100644
index 0000000..c46b20b
--- /dev/null
+++ b/payloads/libpayload/arch/riscv/head.S
@@ -0,0 +1,74 @@
+/*
+ * This file is part of the libpayload project.
+ *
+ * Copyright (C) 2008 Advanced Micro Devices, Inc.
+ * Copyright (C) 2019 Philipp Hug <philipp(a)hug.cx>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <arch/asm.h>
+
+/*
+ * Our entry point
+ */
+ENTRY(_entry)
+
+ /* Save off hart id in a0 */
+ la t0, hart_id
+ sd a0, 0(t0)
+
+ /* Save off device tree pointer in a1 */
+ la t0, fdt_ptr
+ sd a1, 0(t0)
+
+ /*
+ * busy-loop for harts != 0
+ * TODO: add support hart > 0
+ */
+ li a3, 0
+ beq a0, a3, _hart_zero
+_hart_loop:
+ j _hart_loop
+_hart_zero:
+
+ /*
+ * Setup new stack
+ * TODO, use stack per hart
+ */
+ la t0, _stack
+ li t1, 0xDEADBEEF
+ sd t1, 0(t0)
+ add sp, t0, 0
+
+ /* Let's rock. */
+ tail start_main
+
+ENDPROC(_entry)
+
+.align 4
+1:
+.quad fdt_ptr
+2:
+.quad _stack
diff --git a/payloads/libpayload/arch/riscv/libpayload.ldscript b/payloads/libpayload/arch/riscv/libpayload.ldscript
new file mode 100644
index 0000000..1929549
--- /dev/null
+++ b/payloads/libpayload/arch/riscv/libpayload.ldscript
@@ -0,0 +1,91 @@
+/*
+ * This file is part of the libpayload project.
+ *
+ * Copyright (C) 2013 Google, Inc.
+ * Copyright (C) 2008 Advanced Micro Devices, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+OUTPUT_FORMAT("elf64-littleriscv", "elf64-littleriscv","elf64-littleriscv")
+OUTPUT_ARCH(riscv)
+
+ENTRY(_entry)
+
+SECTIONS
+{
+ . = CONFIG_LP_BASE_ADDRESS;
+
+ . = ALIGN(16);
+ _start = .;
+
+ .text : {
+ *(.text._entry)
+ *(.text)
+ *(.text.*)
+ }
+
+ .rodata : {
+ *(.rodata)
+ *(.rodata.*)
+ }
+
+ .data : {
+ *(.data)
+ *(.data.*)
+ }
+
+ _edata = .;
+
+ .bss : {
+ *(.sbss)
+ *(.sbss.*)
+ *(.bss)
+ *(.bss.*)
+ *(COMMON)
+
+ /* Stack and heap */
+
+ . = ALIGN(16);
+ _heap = .;
+ . += CONFIG_LP_HEAP_SIZE;
+ . = ALIGN(16);
+ _eheap = .;
+
+ _estack = .;
+ . += CONFIG_LP_STACK_SIZE;
+ . = ALIGN(16);
+ _stack = .;
+ }
+ .debug : {
+ *(.debug)
+ }
+
+ _end = .;
+
+ /DISCARD/ : {
+ *(.comment)
+ *(.note*)
+ }
+}
diff --git a/payloads/libpayload/arch/riscv/main.c b/payloads/libpayload/arch/riscv/main.c
new file mode 100644
index 0000000..83fb841
--- /dev/null
+++ b/payloads/libpayload/arch/riscv/main.c
@@ -0,0 +1,72 @@
+/*
+ * This file is part of the libpayload project.
+ *
+ * Copyright (C) 2008 Advanced Micro Devices, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <libpayload.h>
+
+unsigned int main_argc; /**< The argc value to pass to main() */
+
+/** The argv value to pass to main() */
+char *main_argv[MAX_ARGC_COUNT];
+
+/**
+ * This is our C entry function - set up the system
+ * and jump into the payload entry point.
+ */
+void start_main(void);
+void start_main(void)
+{
+ extern int main(int argc, char **argv);
+
+ /* Gather system information. */
+ lib_get_sysinfo();
+
+#if !IS_ENABLED(CONFIG_LP_SKIP_CONSOLE_INIT)
+ console_init();
+#endif
+
+ // TODO: implement exceptions
+ // exception_init();
+
+ /*
+ * Any other system init that has to happen before the
+ * user gets control goes here.
+ */
+
+ /*
+ * Go to the entry point.
+ * In the future we may care about the return value.
+ */
+
+ (void)main(main_argc, (main_argc != 0) ? main_argv : NULL);
+
+ /*
+ * Returning here will go to the _leave function to return
+ * us to the original context.
+ */
+}
diff --git a/payloads/libpayload/arch/riscv/sysinfo.c b/payloads/libpayload/arch/riscv/sysinfo.c
new file mode 100644
index 0000000..575b7da
--- /dev/null
+++ b/payloads/libpayload/arch/riscv/sysinfo.c
@@ -0,0 +1,79 @@
+/*
+ * This file is part of the libpayload project.
+ *
+ * Copyright (C) 2008 Advanced Micro Devices, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <libpayload-config.h>
+#include <libpayload.h>
+#include <coreboot_tables.h>
+
+/**
+ * This is a global structure that is used through the library - we set it
+ * up initially with some dummy values - hopefully they will be overridden.
+ * Also set some defaults for the console in case the fdt is messed up.
+ */
+struct cb_serial serial_info = {
+ .baseaddr = 0x10000000,
+ .type = CB_SERIAL_TYPE_MEMORY_MAPPED,
+ .regwidth = 1,
+};
+
+struct sysinfo_t lib_sysinfo = {
+ .cpu_khz = 1000,
+ .serial = &serial_info,
+};
+
+int lib_get_sysinfo(void)
+{
+ int ret;
+
+ /* Get the CPU speed (for delays). */
+ lib_sysinfo.cpu_khz = get_cpu_speed();
+
+ /* Get information from the coreboot tables,
+ * if they exist */
+
+ ret = get_coreboot_info(&lib_sysinfo);
+
+ if (!lib_sysinfo.n_memranges) {
+ /* If we can't get a good memory range, use the default. */
+ lib_sysinfo.n_memranges = 1;
+
+ lib_sysinfo.memrange[0].base = 0x80000000u;
+ lib_sysinfo.memrange[0].size = 1024 * 1024;
+ lib_sysinfo.memrange[0].type = CB_MEM_RAM;
+ }
+
+ return ret;
+}
+
+void lib_sysinfo_get_memranges(struct memrange **ranges,
+ uint64_t *nranges)
+{
+ *ranges = &lib_sysinfo.memrange[0];
+ *nranges = lib_sysinfo.n_memranges;
+}
diff --git a/payloads/libpayload/arch/riscv/timer.c b/payloads/libpayload/arch/riscv/timer.c
new file mode 100644
index 0000000..d233ddc
--- /dev/null
+++ b/payloads/libpayload/arch/riscv/timer.c
@@ -0,0 +1,54 @@
+/*
+ * This file is part of the libpayload project.
+ *
+ * Copyright (C) 2008 Advanced Micro Devices, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/**
+ * @file riscv/timer.c
+ * RISC-V specific timer routines
+ */
+
+#include <libpayload.h>
+
+/**
+ * @ingroup arch
+ * Global variable containing the speed of the processor in KHz.
+ */
+u32 cpu_khz;
+
+/**
+ * Calculate the speed of the processor for use in delays.
+ *
+ * @return The CPU speed in kHz.
+ */
+unsigned int get_cpu_speed(void)
+{
+ /* FIXME */
+ cpu_khz = 1000000U;
+
+ return cpu_khz;
+}
diff --git a/payloads/libpayload/arch/riscv/util.S b/payloads/libpayload/arch/riscv/util.S
new file mode 100644
index 0000000..dde2099
--- /dev/null
+++ b/payloads/libpayload/arch/riscv/util.S
@@ -0,0 +1,35 @@
+/*
+ * This file is part of the libpayload project.
+ *
+ * Copyright (C) 2012 Google, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <arch/asm.h>
+
+/* This function puts the system into a halt. */
+ENTRY(halt)
+ j halt
+ENDPROC(halt)
diff --git a/payloads/libpayload/arch/riscv/virtual.c b/payloads/libpayload/arch/riscv/virtual.c
new file mode 100644
index 0000000..c3f4aa7
--- /dev/null
+++ b/payloads/libpayload/arch/riscv/virtual.c
@@ -0,0 +1,40 @@
+/*
+ * This file is part of the libpayload project.
+ *
+ * Copyright (C) 2008 coresystems GmbH
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <libpayload.h>
+#include <assert.h>
+#include <die.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <arch/cache.h>
+#include <arch/virtual.h>
+#include <arch/io.h>
+
+unsigned long virtual_offset = 0;
+extern char _end[];
diff --git a/payloads/libpayload/bin/lpgcc b/payloads/libpayload/bin/lpgcc
index b3ef342..2faf113 100755
--- a/payloads/libpayload/bin/lpgcc
+++ b/payloads/libpayload/bin/lpgcc
@@ -86,6 +86,12 @@
_ARCHEXTRA=""
_ARCH=mips
fi
+if [ "$CONFIG_LP_ARCH_RISCV" = "y" ]; then
+ _ARCHINCDIR=$_INCDIR/riscv
+ _ARCHLIBDIR=$_LIBDIR/riscv
+ _ARCHEXTRA=""
+ _ARCH=riscv
+fi
if [ "$CONFIG_LP_ARCH_X86" = "y" ]; then
_ARCHINCDIR=$_INCDIR/x86
_ARCHLIBDIR=$_LIBDIR/x86
diff --git a/payloads/libpayload/configs/config.riscv b/payloads/libpayload/configs/config.riscv
new file mode 100644
index 0000000..7982b4a
--- /dev/null
+++ b/payloads/libpayload/configs/config.riscv
@@ -0,0 +1,81 @@
+#
+# Automatically generated file; DO NOT EDIT.
+# Libpayload Configuration
+#
+
+#
+# Generic Options
+#
+# CONFIG_LP_GPL is not set
+# CONFIG_LP_EXPERIMENTAL is not set
+# CONFIG_LP_DEVELOPER is not set
+# CONFIG_LP_CHROMEOS is not set
+CONFIG_LP_COMPILER_GCC=y
+# CONFIG_LP_COMPILER_LLVM_CLANG is not set
+# CONFIG_LP_MEMMAP_RAM_ONLY is not set
+
+#
+# Architecture Options
+#
+# CONFIG_LP_ARCH_ARM is not set
+# CONFIG_LP_ARCH_X86 is not set
+# CONFIG_LP_ARCH_ARM64 is not set
+# CONFIG_LP_ARCH_MIPS is not set
+CONFIG_LP_ARCH_RISCV=y
+CONFIG_LP_HEAP_SIZE=131072
+CONFIG_LP_STACK_SIZE=16384
+CONFIG_LP_BASE_ADDRESS=0x80100000
+
+#
+# Standard Libraries
+#
+CONFIG_LP_LIBC=y
+# CONFIG_LP_CURSES is not set
+CONFIG_LP_CBFS=y
+CONFIG_LP_LZMA=y
+CONFIG_LP_LZ4=y
+
+#
+# Console Options
+#
+# CONFIG_LP_SKIP_CONSOLE_INIT is not set
+CONFIG_LP_CBMEM_CONSOLE=y
+# CONFIG_LP_SERIAL_CONSOLE is not set
+CONFIG_LP_VIDEO_CONSOLE=y
+# CONFIG_LP_COREBOOT_VIDEO_CONSOLE is not set
+# CONFIG_LP_PC_I8042 is not set
+# CONFIG_LP_PC_MOUSE is not set
+# CONFIG_LP_PC_KEYBOARD is not set
+
+#
+# Drivers
+#
+# CONFIG_LP_MOUSE_CURSOR is not set
+# CONFIG_LP_RTC_PORT_EXTENDED_VIA is not set
+CONFIG_LP_TIMER_NONE=y
+# CONFIG_LP_TIMER_MCT is not set
+# CONFIG_LP_TIMER_TEGRA_1US is not set
+# CONFIG_LP_TIMER_IPQ806X is not set
+# CONFIG_LP_TIMER_ARMADA38X is not set
+# CONFIG_LP_TIMER_IPQ40XX is not set
+# CONFIG_LP_TIMER_ARM64_ARCH is not set
+# CONFIG_LP_TIMER_RK3288 is not set
+# CONFIG_LP_TIMER_RK3399 is not set
+# CONFIG_LP_TIMER_CYGNUS is not set
+# CONFIG_LP_TIMER_IMG_PISTACHIO is not set
+# CONFIG_LP_TIMER_MTK is not set
+# CONFIG_LP_TIMER_MVMAP2315 is not set
+CONFIG_LP_TIMER_GENERIC_HZ=100000
+CONFIG_LP_TIMER_GENERIC_REG=0x0
+CONFIG_LP_TIMER_GENERIC_HIGH_REG=0x0
+CONFIG_LP_STORAGE=y
+# CONFIG_LP_STORAGE_64BIT_LBA is not set
+CONFIG_LP_STORAGE_ATA=y
+CONFIG_LP_STORAGE_ATAPI=y
+# CONFIG_LP_USB is not set
+# CONFIG_LP_USB_GEN_HUB is not set
+# CONFIG_LP_UDC is not set
+# CONFIG_LP_BIG_ENDIAN is not set
+CONFIG_LP_LITTLE_ENDIAN=y
+# CONFIG_LP_IO_ADDRESS_SPACE is not set
+CONFIG_LP_ARCH_SPECIFIC_OPTIONS=y
diff --git a/payloads/libpayload/configs/defconfig-riscv b/payloads/libpayload/configs/defconfig-riscv
new file mode 100644
index 0000000..2ce2bc5
--- /dev/null
+++ b/payloads/libpayload/configs/defconfig-riscv
@@ -0,0 +1,3 @@
+CONFIG_LP_ARCH_RISCV=y
+CONFIG_LP_TINYCURSES=n
+CONFIG_LP_USB=n
diff --git a/payloads/libpayload/include/riscv/arch/asm.h b/payloads/libpayload/include/riscv/arch/asm.h
new file mode 100644
index 0000000..842fb0d
--- /dev/null
+++ b/payloads/libpayload/include/riscv/arch/asm.h
@@ -0,0 +1,29 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright 2013 Google Inc.
+ *
+ */
+
+#ifndef __RISCV_ASM_H
+#define __RISCV_ASM_H
+
+# define RISCV(x...) x
+# define W(instr) instr
+
+#define ALIGN .align 2
+
+#define ENDPROC(name) \
+ .type name, %function; \
+ END(name)
+
+#define ENTRY(name) \
+ .section .text.name, "ax", %progbits; \
+ .global name; \
+ ALIGN; \
+ name:
+
+#define END(name) \
+ .size name, .-name
+
+#endif /* __RISCV_ASM_H */
diff --git a/payloads/libpayload/include/riscv/arch/barrier.h b/payloads/libpayload/include/riscv/arch/barrier.h
new file mode 100644
index 0000000..0b55df6
--- /dev/null
+++ b/payloads/libpayload/include/riscv/arch/barrier.h
@@ -0,0 +1,61 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright 2014 Google Inc.
+ * Copyright (C) 2003-2004 Olivier Houchard
+ * Copyright (C) 1994-1997 Mark Brinicombe
+ * Copyright (C) 1994 Brini
+ * All rights reserved.
+ *
+ * This code is derived from software written for Brini by Mark Brinicombe
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ */
+
+#ifndef __ARCH_BARRIER_H_
+#define __ARCH_BARRIER_H__
+
+#include <arch/cache.h>
+
+/*
+ * Description of different memory barriers introduced:
+ *
+ * Memory barrier(mb) - Guarantees that all memory accesses specified before the
+ * barrier will happen before all memory accesses specified after the barrier
+ *
+ * Read memory barrier (rmb) - Guarantees that all read memory accesses
+ * specified before the barrier will happen before all read memory accesses
+ * specified after the barrier
+ *
+ * Write memory barrier (wmb) - Guarantees that all write memory accesses
+ * specified before the barrier will happen before all write memory accesses
+ * specified after the barrier
+ */
+
+#define mb()
+#define rmb()
+#define wmb()
+
+#endif /* __ARCH_BARRIER_H__ */
diff --git a/payloads/libpayload/include/riscv/arch/cache.h b/payloads/libpayload/include/riscv/arch/cache.h
new file mode 100644
index 0000000..820bee9
--- /dev/null
+++ b/payloads/libpayload/include/riscv/arch/cache.h
@@ -0,0 +1,83 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright 2013 Google Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * cache.h: Cache maintenance API for RISCV
+ */
+
+#ifndef RISCV_CACHE_H
+#define RISCV_CACHE_H
+
+#include <stddef.h>
+#include <stdint.h>
+
+/*
+ * Cache maintenance API
+ */
+
+/* dcache clean and invalidate all (on current level given by CCSELR) */
+void dcache_clean_invalidate_all(void);
+
+/* dcache clean by virtual address to PoC */
+void dcache_clean_by_mva(void const *addr, size_t len);
+
+/* dcache clean and invalidate by virtual address to PoC */
+void dcache_clean_invalidate_by_mva(void const *addr, size_t len);
+
+/* dcache invalidate by virtual address to PoC */
+void dcache_invalidate_by_mva(void const *addr, size_t len);
+
+void dcache_clean_all(void);
+
+/* dcache invalidate all (on current level given by CCSELR) */
+void dcache_invalidate_all(void);
+
+/* returns number of bytes per cache line */
+unsigned int dcache_line_bytes(void);
+
+/* dcache and MMU disable */
+void dcache_mmu_disable(void);
+
+/* dcache and MMU enable */
+void dcache_mmu_enable(void);
+
+/* perform all icache/dcache maintenance needed after loading new code */
+void cache_sync_instructions(void);
+
+/* Ensure that loaded program segment is synced back from cache to PoC */
+void arch_program_segment_loaded(void const *addr, size_t len);
+
+/* tlb invalidate all */
+void tlb_invalidate_all(void);
+
+/* Invalidate all of the instruction cache for PE to PoU. */
+static inline void icache_invalidate_all(void)
+{
+ return;
+}
+
+#endif /* RISCV_CACHE_H */
diff --git a/payloads/libpayload/include/riscv/arch/io.h b/payloads/libpayload/include/riscv/arch/io.h
new file mode 100644
index 0000000..8413b61
--- /dev/null
+++ b/payloads/libpayload/include/riscv/arch/io.h
@@ -0,0 +1,106 @@
+/*
+ * This file is part of the libpayload project.
+ *
+ * Copyright (C) 2008 Advanced Micro Devices, Inc.
+ * Copyright (C) 2008 coresystems GmbH
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef _ARCH_IO_H
+#define _ARCH_IO_H
+
+#include <stdint.h>
+#include <arch/cache.h>
+//#include <arch/lib_helpers.h>
+
+/*
+ * readb/w/l writeb/w/l are deprecated. use read8/16/32 and write8/16/32
+ * instead for future development.
+ *
+ * TODO: make the existing code use read8/16/32 and write8/16/32 then remove
+ * readb/w/l and writeb/w/l.
+ */
+
+static inline uint8_t readb(volatile const void *_a)
+{
+ return *(volatile const uint8_t *)_a;
+}
+
+static inline uint16_t readw(volatile const void *_a)
+{
+ return *(volatile const uint16_t *)_a;
+}
+
+static inline uint32_t readl(volatile const void *_a)
+{
+ return *(volatile const uint32_t *)_a;
+}
+
+static inline void writeb(uint8_t _v, volatile void *_a)
+{
+ *(volatile uint8_t *)_a = _v;
+}
+
+static inline void writew(uint16_t _v, volatile void *_a)
+{
+ *(volatile uint16_t *)_a = _v;
+}
+
+static inline void writel(uint32_t _v, volatile void *_a)
+{
+ *(volatile uint32_t *)_a = _v;
+}
+
+static inline uint8_t read8(const void *addr)
+{
+ return *(volatile uint8_t *)addr;
+}
+
+static inline uint16_t read16(const void *addr)
+{
+ return *(volatile uint16_t *)addr;
+}
+
+static inline uint32_t read32(const void *addr)
+{
+ return *(volatile uint32_t *)addr;
+}
+
+static inline void write8(void *addr, uint8_t val)
+{
+ *(volatile uint8_t *)addr = val;
+}
+
+static inline void write16(void *addr, uint16_t val)
+{
+ *(volatile uint16_t *)addr = val;
+}
+
+static inline void write32(void *addr, uint32_t val)
+{
+ *(volatile uint32_t *)addr = val;
+}
+
+#endif
diff --git a/payloads/libpayload/include/riscv/arch/types.h b/payloads/libpayload/include/riscv/arch/types.h
new file mode 100644
index 0000000..1bd815b
--- /dev/null
+++ b/payloads/libpayload/include/riscv/arch/types.h
@@ -0,0 +1,60 @@
+/*
+ * This file is part of the libpayload project.
+ *
+ * Copyright (C) 2007 Uwe Hermann <uwe(a)hermann-uwe.de>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef _ARCH_TYPES_H
+#define _ARCH_TYPES_H
+
+typedef unsigned char uint8_t;
+typedef unsigned char u8;
+typedef signed char int8_t;
+typedef signed char s8;
+
+typedef unsigned short uint16_t;
+typedef unsigned short u16;
+typedef signed short int16_t;
+typedef signed short s16;
+
+typedef unsigned int uint32_t;
+typedef unsigned int u32;
+typedef signed int int32_t;
+typedef signed int s32;
+
+typedef unsigned long long uint64_t;
+typedef unsigned long long u64;
+typedef signed long long int64_t;
+typedef signed long long s64;
+
+typedef long time_t;
+typedef long suseconds_t;
+
+#ifndef NULL
+#define NULL ((void *)0)
+#endif
+
+#endif
diff --git a/payloads/libpayload/include/riscv/arch/virtual.h b/payloads/libpayload/include/riscv/arch/virtual.h
new file mode 100644
index 0000000..dac3480
--- /dev/null
+++ b/payloads/libpayload/include/riscv/arch/virtual.h
@@ -0,0 +1,41 @@
+/*
+ * This file is part of the libpayload project.
+ *
+ * Copyright (C) 2008 coresystems GmbH
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef _ARCH_VIRTUAL_H
+#define _ARCH_VIRTUAL_H
+
+extern unsigned long virtual_offset;
+
+#define virt_to_phys(virt) ((unsigned long)(virt) + virtual_offset)
+#define phys_to_virt(phys) ((void *)((unsigned long)(phys)-virtual_offset))
+
+#define virt_to_bus(addr) virt_to_phys(addr)
+#define bus_to_virt(addr) phys_to_virt(addr)
+
+#endif
--
To view, visit https://review.coreboot.org/c/coreboot/+/31356
To unsubscribe, or for help writing mail filters, visit https://review.coreboot.org/settings
Gerrit-Project: coreboot
Gerrit-Branch: master
Gerrit-Change-Id: I91df02069a0f8fd8771f73de0e866e9cea05cded
Gerrit-Change-Number: 31356
Gerrit-PatchSet: 1
Gerrit-Owner: Philipp Hug <philipp(a)hug.cx>
Gerrit-Reviewer: Martin Roth <martinroth(a)google.com>
Gerrit-Reviewer: Patrick Georgi <pgeorgi(a)google.com>
Gerrit-Reviewer: Philipp Hug <philipp(a)hug.cx>
Gerrit-MessageType: newchange
5
6

Change in ...coreboot[master]: configs: add debug config for Dell OptiPlex 7010
by Piotr Król (Code Review) Aug. 7, 2023
by Piotr Król (Code Review) Aug. 7, 2023
Aug. 7, 2023
Piotr Król has uploaded this change for review. ( https://review.coreboot.org/c/coreboot/+/30518
Change subject: configs: add debug config for Dell OptiPlex 7010
......................................................................
configs: add debug config for Dell OptiPlex 7010
Signed-off-by: Piotr Król <piotr.krol(a)3mdeb.com>
Change-Id: I3d90ecd98ca9df7de776797173229993fec25137
---
A configs/config.dell_optiplex_7010.debug
1 file changed, 2 insertions(+), 0 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/18/30518/1
diff --git a/configs/config.dell_optiplex_7010.debug b/configs/config.dell_optiplex_7010.debug
new file mode 100644
index 0000000..426e101
--- /dev/null
+++ b/configs/config.dell_optiplex_7010.debug
@@ -0,0 +1,2 @@
+CONFIG_VENDOR_DELL=y
+CONFIG_CONSOLE_SPI_FLASH=y
--
To view, visit https://review.coreboot.org/c/coreboot/+/30518
To unsubscribe, or for help writing mail filters, visit https://review.coreboot.org/settings
Gerrit-Project: coreboot
Gerrit-Branch: master
Gerrit-Change-Id: I3d90ecd98ca9df7de776797173229993fec25137
Gerrit-Change-Number: 30518
Gerrit-PatchSet: 1
Gerrit-Owner: Piotr Król <piotr.krol(a)3mdeb.com>
Gerrit-MessageType: newchange
2
1

Change in ...coreboot[master]: soc/intel/cannonlake: Adding Kconfig option to disable the eMMC contr...
by V Sowmya (Code Review) Aug. 7, 2023
by V Sowmya (Code Review) Aug. 7, 2023
Aug. 7, 2023
V Sowmya has uploaded this change for review. ( https://review.coreboot.org/c/coreboot/+/30614
Change subject: soc/intel/cannonlake: Adding Kconfig option to disable the eMMC controller
......................................................................
soc/intel/cannonlake: Adding Kconfig option to disable the eMMC controller
This patch adds an Kconfig option to exclude the EMMC interface ACPI
objects for cannonlake based platforms.
BUG=b:120914069
BRANCH=none
TEST=USE="-intel_mrc -bmpblk" emerge-hatch coreboot.
Change-Id: I90c0230e845c8d02386b50b1100faf7064ecf8f6
Signed-off-by: V Sowmya <v.sowmya(a)intel.com>
---
M src/soc/intel/cannonlake/Kconfig
M src/soc/intel/cannonlake/acpi/scs.asl
2 files changed, 9 insertions(+), 0 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/14/30614/1
diff --git a/src/soc/intel/cannonlake/Kconfig b/src/soc/intel/cannonlake/Kconfig
index 9e007b6..121909a 100644
--- a/src/soc/intel/cannonlake/Kconfig
+++ b/src/soc/intel/cannonlake/Kconfig
@@ -208,6 +208,13 @@
default 4 if SOC_INTEL_CANNONLAKE_PCH_H
default 6
+config EXCLUDE_EMMC_INTERFACE
+ bool
+ default n
+ help
+ If you set this option to n, it will not use EMMC controller.
+
+
# Clock divider parameters for 115200 baud rate
config SOC_INTEL_COMMON_LPSS_UART_CLK_M_VAL
hex
diff --git a/src/soc/intel/cannonlake/acpi/scs.asl b/src/soc/intel/cannonlake/acpi/scs.asl
index 896fd77..29939be 100644
--- a/src/soc/intel/cannonlake/acpi/scs.asl
+++ b/src/soc/intel/cannonlake/acpi/scs.asl
@@ -27,6 +27,7 @@
^PCRA (Arg0, 0x4820, 0x0)
}
+#if !IS_ENABLED(CONFIG_EXCLUDE_EMMC_INTERFACE)
/* EMMC */
Device(PEMC) {
Name(_ADR, 0x001A0000)
@@ -77,6 +78,7 @@
}
}
}
+#endif
/* SD CARD */
Device (SDXC)
--
To view, visit https://review.coreboot.org/c/coreboot/+/30614
To unsubscribe, or for help writing mail filters, visit https://review.coreboot.org/settings
Gerrit-Project: coreboot
Gerrit-Branch: master
Gerrit-Change-Id: I90c0230e845c8d02386b50b1100faf7064ecf8f6
Gerrit-Change-Number: 30614
Gerrit-PatchSet: 1
Gerrit-Owner: V Sowmya <v.sowmya(a)intel.com>
Gerrit-MessageType: newchange
7
13

Change in ...coreboot[master]: mb/lenovo/x131e: devicetree updates
by James (Code Review) Aug. 7, 2023
by James (Code Review) Aug. 7, 2023
Aug. 7, 2023
James has uploaded this change for review. ( https://review.coreboot.org/c/coreboot/+/31066
Change subject: mb/lenovo/x131e: devicetree updates
......................................................................
mb/lenovo/x131e: devicetree updates
Enable the mSATA slot and WWAN detection (functionality untested).
Change-Id: I4cfefb06556c9d69bc8e4a4f9d112246885c253a
Signed-off-by: James Ye <jye836(a)gmail.com>
---
M src/mainboard/lenovo/x131e/devicetree.cb
1 file changed, 8 insertions(+), 2 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/66/31066/1
diff --git a/src/mainboard/lenovo/x131e/devicetree.cb b/src/mainboard/lenovo/x131e/devicetree.cb
index 4adc94b..3d0148f 100644
--- a/src/mainboard/lenovo/x131e/devicetree.cb
+++ b/src/mainboard/lenovo/x131e/devicetree.cb
@@ -51,8 +51,8 @@
register "gpi6_routing" = "2"
register "gpi13_routing" = "2"
- # Enable SATA ports
- register "sata_port_map" = "0x1"
+ # Enable SATA ports 0 (2.5 inch) and 1 (mSATA)
+ register "sata_port_map" = "0x3"
# Set max SATA speed to 6.0 Gb/s
register "sata_interface_speed_support" = "0x3"
@@ -131,6 +131,12 @@
register "eventd_enable" = "0xff"
register "evente_enable" = "0xff"
register "eventf_enable" = "0xff"
+
+ register "has_bdc_detection" = "0"
+
+ register "has_wwan_detection" = "1"
+ register "wwan_gpio_num" = "68"
+ register "wwan_gpio_lvl" = "0"
end
end
device pci 1f.2 on end # SATA Controller 1
--
To view, visit https://review.coreboot.org/c/coreboot/+/31066
To unsubscribe, or for help writing mail filters, visit https://review.coreboot.org/settings
Gerrit-Project: coreboot
Gerrit-Branch: master
Gerrit-Change-Id: I4cfefb06556c9d69bc8e4a4f9d112246885c253a
Gerrit-Change-Number: 31066
Gerrit-PatchSet: 1
Gerrit-Owner: James <jye836(a)gmail.com>
Gerrit-MessageType: newchange
4
7

Change in ...coreboot[master]: mb/lenovo/x131e: function key support
by James (Code Review) Aug. 7, 2023
by James (Code Review) Aug. 7, 2023
Aug. 7, 2023
James has uploaded this change for review. ( https://review.coreboot.org/c/coreboot/+/31067
Change subject: mb/lenovo/x131e: function key support
......................................................................
mb/lenovo/x131e: function key support
Enables function keys for X131e.
The IT8518e EC of this board uses some different ACPI methods compared to the
regular Lenovo H8. Add an option to use the alternative set of methods.
Change-Id: Ib3a01f37a8b54889b55e92c501c9350e6c68bd57
Signed-off-by: James Ye <jye836(a)gmail.com>
---
M src/ec/lenovo/h8/Kconfig
M src/ec/lenovo/h8/acpi/ec.asl
M src/mainboard/lenovo/x131e/Kconfig
M src/mainboard/lenovo/x131e/Makefile.inc
M src/mainboard/lenovo/x131e/devicetree.cb
A src/mainboard/lenovo/x131e/ec.h
M src/mainboard/lenovo/x131e/mainboard.c
M src/mainboard/lenovo/x131e/romstage.c
A src/mainboard/lenovo/x131e/smihandler.c
9 files changed, 146 insertions(+), 22 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/67/31067/1
diff --git a/src/ec/lenovo/h8/Kconfig b/src/ec/lenovo/h8/Kconfig
index f9b0b14..3dab615 100644
--- a/src/ec/lenovo/h8/Kconfig
+++ b/src/ec/lenovo/h8/Kconfig
@@ -28,6 +28,12 @@
Disable BDC detection and assume bluetooth is installed. Required for
bluetooth on wifi cards, as it's not possible to detect it in coreboot.
+config H8_ALT_EC_QUERY
+ bool "Alternate ACPI EC query methods"
+ default n
+ help
+ Use alternative EC query methods for X131e
+
endif
config H8_DOCK_EARLY_INIT
diff --git a/src/ec/lenovo/h8/acpi/ec.asl b/src/ec/lenovo/h8/acpi/ec.asl
index 327a2cf..7c96504 100644
--- a/src/ec/lenovo/h8/acpi/ec.asl
+++ b/src/ec/lenovo/h8/acpi/ec.asl
@@ -140,7 +140,11 @@
/* Sleep Button pressed */
Method(_Q13, 0, NotSerialized)
{
+#ifndef CONFIG_H8_ALT_EC_QUERY
Notify(^SLPB, 0x80)
+#else
+ ^HKEY.RHK(0x04)
+#endif
}
/* Brightness up GPE */
@@ -217,9 +221,20 @@
Method (_Q17, 0, NotSerialized)
{
+#ifndef CONFIG_H8_ALT_EC_QUERY
^HKEY.RHK (0x08)
+#else
+ BRIGHTNESS_DOWN()
+#endif
}
+#ifdef CONFIG_H8_ALT_EC_QUERY
+ Method (_Q18, 0, NotSerialized)
+ {
+ BRIGHTNESS_UP()
+ }
+#endif
+
Method (_Q66, 0, NotSerialized)
{
^HKEY.RHK (0x0A)
diff --git a/src/mainboard/lenovo/x131e/Kconfig b/src/mainboard/lenovo/x131e/Kconfig
index 946b945..ee7a83f 100644
--- a/src/mainboard/lenovo/x131e/Kconfig
+++ b/src/mainboard/lenovo/x131e/Kconfig
@@ -8,6 +8,7 @@
select USE_NATIVE_RAMINIT
select SOUTHBRIDGE_INTEL_C216
select EC_LENOVO_H8
+ select H8_ALT_EC_QUERY
select NO_UART_ON_SUPERIO
select BOARD_ROMSIZE_KB_12288
select HAVE_ACPI_TABLES
diff --git a/src/mainboard/lenovo/x131e/Makefile.inc b/src/mainboard/lenovo/x131e/Makefile.inc
index 7a00cce..2dab950 100644
--- a/src/mainboard/lenovo/x131e/Makefile.inc
+++ b/src/mainboard/lenovo/x131e/Makefile.inc
@@ -13,6 +13,7 @@
## GNU General Public License for more details.
##
+smm-$(CONFIG_HAVE_SMI_HANDLER) += smihandler.c
romstage-y += gpio.c
ramstage-$(CONFIG_MAINBOARD_USE_LIBGFXINIT) += gma-mainboard.ads
diff --git a/src/mainboard/lenovo/x131e/devicetree.cb b/src/mainboard/lenovo/x131e/devicetree.cb
index 3d0148f..0a73010 100644
--- a/src/mainboard/lenovo/x131e/devicetree.cb
+++ b/src/mainboard/lenovo/x131e/devicetree.cb
@@ -47,7 +47,8 @@
chip southbridge/intel/bd82x6x
# GPI routing
- register "alt_gp_smi_en" = "0x0000"
+ register "alt_gp_smi_en" = "0x0002"
+ register "gpi1_routing" = "1"
register "gpi6_routing" = "2"
register "gpi13_routing" = "2"
@@ -115,22 +116,10 @@
register "beepmask1" = "0x87"
register "has_power_management_beeps" = "0"
- register "event0_enable" = "0xff"
- register "event1_enable" = "0xff"
- register "event2_enable" = "0xff"
- register "event3_enable" = "0xff"
- register "event4_enable" = "0xff"
- register "event5_enable" = "0xff"
- register "event6_enable" = "0xff"
- register "event7_enable" = "0xff"
- register "event8_enable" = "0xff"
- register "event9_enable" = "0xff"
- register "eventa_enable" = "0xff"
- register "eventb_enable" = "0xff"
- register "eventc_enable" = "0xff"
- register "eventd_enable" = "0xff"
- register "evente_enable" = "0xff"
- register "eventf_enable" = "0xff"
+ register "event2_enable" = "0xc8" # sleep, monitor, brightness down
+ register "event3_enable" = "0x01" # brightness up
+ register "eventc_enable" = "0x30" # airplane, camera
+ register "eventd_enable" = "0x04" # mic
register "has_bdc_detection" = "0"
diff --git a/src/mainboard/lenovo/x131e/ec.h b/src/mainboard/lenovo/x131e/ec.h
new file mode 100644
index 0000000..4a731dc
--- /dev/null
+++ b/src/mainboard/lenovo/x131e/ec.h
@@ -0,0 +1,26 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2011 The Chromium OS Authors. All rights reserved.
+ * Copyright (C) 2019 James Ye <jye836(a)gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ */
+
+#ifndef X131E_EC_H
+#define X131E_EC_H
+
+#define GPE_EC_SCI 6
+#define GPE_EC_WAKE 13
+
+#define EC_CMD_NOTIFY_ACPI_ENTER 0x86
+#define EC_CMD_NOTIFY_ACPI_EXIT 0x87
+
+#endif // X131E_EC_H
diff --git a/src/mainboard/lenovo/x131e/mainboard.c b/src/mainboard/lenovo/x131e/mainboard.c
index 1342aca..9e6a7dd 100644
--- a/src/mainboard/lenovo/x131e/mainboard.c
+++ b/src/mainboard/lenovo/x131e/mainboard.c
@@ -13,9 +13,17 @@
* GNU General Public License for more details.
*/
+#include <arch/acpi.h>
#include <device/device.h>
#include <drivers/intel/gma/int15.h>
+#include <ec/acpi/ec.h>
#include <ec/lenovo/h8/h8.h>
+#include "ec.h"
+
+void mainboard_suspend_resume(void)
+{
+ send_ec_command(EC_CMD_NOTIFY_ACPI_ENTER);
+}
static void mainboard_enable(struct device *dev)
{
diff --git a/src/mainboard/lenovo/x131e/romstage.c b/src/mainboard/lenovo/x131e/romstage.c
index 43e0bd7..30df36f 100644
--- a/src/mainboard/lenovo/x131e/romstage.c
+++ b/src/mainboard/lenovo/x131e/romstage.c
@@ -26,11 +26,6 @@
/* Enable TPM, EC, PS/2 Keyboard/Mouse */
pci_write_config16(PCH_LPC_DEV, LPC_EN,
CNF2_LPC_EN | CNF1_LPC_EN | MC_LPC_EN | KBC_LPC_EN);
-
- pci_write_config32(PCH_LPC_DEV, LPC_GEN1_DEC, 0x007c1611);
- pci_write_config32(PCH_LPC_DEV, LPC_GEN2_DEC, 0x00040069);
- pci_write_config32(PCH_LPC_DEV, LPC_GEN3_DEC, 0x000c0701);
- pci_write_config32(PCH_LPC_DEV, LPC_GEN4_DEC, 0x000c06a1);
}
void mainboard_rcba_config(void)
diff --git a/src/mainboard/lenovo/x131e/smihandler.c b/src/mainboard/lenovo/x131e/smihandler.c
new file mode 100644
index 0000000..a634359
--- /dev/null
+++ b/src/mainboard/lenovo/x131e/smihandler.c
@@ -0,0 +1,83 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2008-2009 coresystems GmbH
+ * Copyright (C) 2014 Vladimir Serbinenko
+ * Copyright (C) 2019 James Ye <jye836(a)gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; version 2 of
+ * the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ */
+
+#include <arch/io.h>
+#include <console/console.h>
+#include <cpu/x86/smm.h>
+#include <ec/acpi/ec.h>
+#include <ec/lenovo/h8/h8.h>
+#include <southbridge/intel/bd82x6x/pch.h>
+#include <southbridge/intel/common/pmutil.h>
+#include "ec.h"
+
+static void mainboard_smi_handle_ec_sci(void)
+{
+ u8 status = ec_status();
+ if (!(status & EC_SCI_EVT))
+ return;
+
+ u8 event = ec_query();
+ printk(BIOS_DEBUG, "EC event %02x\n", event);
+}
+
+void mainboard_smi_gpi(u32 gpi_sts)
+{
+ if (gpi_sts & (1 << GPE_EC_SCI))
+ mainboard_smi_handle_ec_sci();
+}
+
+int mainboard_smi_apmc(u8 data)
+{
+ switch (data) {
+ case APM_CNT_ACPI_ENABLE:
+ send_ec_command(EC_CMD_NOTIFY_ACPI_ENTER);
+ /* use 0x1600/0x1604 to prevent races with userspace */
+ ec_set_ports(0x1604, 0x1600);
+ /* route EC_SCI to SCI */
+ gpi_route_interrupt(GPE_EC_SCI, GPI_IS_SCI);
+ /* discard all events, and enable attention */
+ ec_write(0x80, 0x01);
+ break;
+ case APM_CNT_ACPI_DISABLE:
+ send_ec_command(EC_CMD_NOTIFY_ACPI_EXIT);
+ /* we have to use port 0x62/0x66, as 0x1600/0x1604 doesn't
+ provide a EC query function */
+ ec_set_ports(EC_SC, EC_DATA);
+ /* route EC_SCI to SMI */
+ gpi_route_interrupt(GPE_EC_SCI, GPI_IS_SMI);
+ /* discard all events, and enable attention */
+ ec_write(0x80, 0x01);
+ break;
+ }
+ return 0;
+}
+
+void mainboard_smi_sleep(u8 slp_typ)
+{
+ if (slp_typ == 3) {
+ u8 ec_wake = ec_read(0x32);
+ /* If EC wake events are enabled, enable wake on EC WAKE GPE. */
+ if (ec_wake & 0x14) {
+ /* Redirect EC WAKE GPE to SCI. */
+ gpi_route_interrupt(GPE_EC_WAKE, GPI_IS_SCI);
+ }
+ }
+
+ //outb(0xe9, 0x64); // EC_KBD_CMD_MUTE
+ //ec_set_bit(0xbf, 4); // EC_WAKE_SRC_ENABLE, EC_LID_WAKE_ENABLE
+}
--
To view, visit https://review.coreboot.org/c/coreboot/+/31067
To unsubscribe, or for help writing mail filters, visit https://review.coreboot.org/settings
Gerrit-Project: coreboot
Gerrit-Branch: master
Gerrit-Change-Id: Ib3a01f37a8b54889b55e92c501c9350e6c68bd57
Gerrit-Change-Number: 31067
Gerrit-PatchSet: 1
Gerrit-Owner: James <jye836(a)gmail.com>
Gerrit-MessageType: newchange
5
14

Change in ...coreboot[master]: skylake: Force to use single channel
by Sumeet R Pawnikar (Code Review) Aug. 7, 2023
by Sumeet R Pawnikar (Code Review) Aug. 7, 2023
Aug. 7, 2023
Sumeet R Pawnikar has uploaded this change for review. ( https://review.coreboot.org/c/coreboot/+/31136
Change subject: skylake: Force to use single channel
......................................................................
skylake: Force to use single channel
Change-Id: I5fea8bdb14922f57d05c1388025a458451035132
Signed-off-by: Sumeet Pawnikar <sumeet.r.pawnikar(a)intel.com>
---
M src/vendorcode/intel/fsp/fsp1_1/skylake/FspUpdVpd.h
M src/vendorcode/intel/fsp/fsp2_0/denverton_ns/FspmUpd.h
2 files changed, 2 insertions(+), 2 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/36/31136/1
diff --git a/src/vendorcode/intel/fsp/fsp1_1/skylake/FspUpdVpd.h b/src/vendorcode/intel/fsp/fsp1_1/skylake/FspUpdVpd.h
index fddc168..cfb336b 100644
--- a/src/vendorcode/intel/fsp/fsp1_1/skylake/FspUpdVpd.h
+++ b/src/vendorcode/intel/fsp/fsp1_1/skylake/FspUpdVpd.h
@@ -38,7 +38,7 @@
#define MRC_MAX_RCOMP 3
#define MRC_MAX_RCOMP_TARGETS 5
-#define MAX_CHANNELS_NUM 2
+#define MAX_CHANNELS_NUM 1
#define MAX_DIMMS_NUM 2
typedef struct {
diff --git a/src/vendorcode/intel/fsp/fsp2_0/denverton_ns/FspmUpd.h b/src/vendorcode/intel/fsp/fsp2_0/denverton_ns/FspmUpd.h
index 3aa74a0..b4ba865 100644
--- a/src/vendorcode/intel/fsp/fsp2_0/denverton_ns/FspmUpd.h
+++ b/src/vendorcode/intel/fsp/fsp2_0/denverton_ns/FspmUpd.h
@@ -37,7 +37,7 @@
#pragma pack(1)
-#define MAX_CH 2 /* Maximum Number of Memory Channels */
+#define MAX_CH 1 /* Maximum Number of Memory Channels */
#define MAX_DIMM 2 /* Maximum Number of DIMMs PER Memory Channel */
#define MAX_SPD_BYTES 512 /* Maximum Number of SPD bytes */
--
To view, visit https://review.coreboot.org/c/coreboot/+/31136
To unsubscribe, or for help writing mail filters, visit https://review.coreboot.org/settings
Gerrit-Project: coreboot
Gerrit-Branch: master
Gerrit-Change-Id: I5fea8bdb14922f57d05c1388025a458451035132
Gerrit-Change-Number: 31136
Gerrit-PatchSet: 1
Gerrit-Owner: Sumeet R Pawnikar <sumeet.r.pawnikar(a)intel.com>
Gerrit-MessageType: newchange
6
8

Change in ...coreboot[master]: ec/quanta/it8518: Use ACPI EC code
by James (Code Review) Aug. 7, 2023
by James (Code Review) Aug. 7, 2023
Aug. 7, 2023
James has uploaded this change for review. ( https://review.coreboot.org/c/coreboot/+/31382
Change subject: ec/quanta/it8518: Use ACPI EC code
......................................................................
ec/quanta/it8518: Use ACPI EC code
ec/quanta/it8518 implements its own code for reading and writing the EC. As a
result, it cannot be used with ec/acpi.
ec/quanta/it8518 contains definitions that are useful for mb/thinkpad/x131e,
however, x131e uses ec/acpi.
This replaces functions and definitions in ec/quanta/it8518 with their
equivalents in ec/acpi.
TODO: test on google/stout
Change-Id: I7bea7445f34817cef1602843bbded59230bb8d47
Signed-off-by: James Ye <jye836(a)gmail.com>
---
M src/ec/quanta/it8518/Kconfig
M src/ec/quanta/it8518/ec.c
M src/ec/quanta/it8518/ec.h
M src/mainboard/google/stout/chromeos.c
M src/mainboard/google/stout/ec.c
M src/mainboard/google/stout/mainboard.c
M src/mainboard/google/stout/mainboard_smi.c
M src/mainboard/google/stout/romstage.c
8 files changed, 17 insertions(+), 59 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/82/31382/1
diff --git a/src/ec/quanta/it8518/Kconfig b/src/ec/quanta/it8518/Kconfig
index 24ac36f..caaccd5 100644
--- a/src/ec/quanta/it8518/Kconfig
+++ b/src/ec/quanta/it8518/Kconfig
@@ -1,4 +1,5 @@
config EC_QUANTA_IT8518
+ select EC_ACPI
bool
help
Interface to QUANTA IT8518 Embedded Controller.
diff --git a/src/ec/quanta/it8518/ec.c b/src/ec/quanta/it8518/ec.c
index e293f7c..a27e7b9 100644
--- a/src/ec/quanta/it8518/ec.c
+++ b/src/ec/quanta/it8518/ec.c
@@ -19,6 +19,7 @@
#include <delay.h>
#include <device/device.h>
#include <device/pnp.h>
+#include <ec/acpi/ec.h>
#include <pc80/keyboard.h>
#include <stdlib.h>
@@ -93,48 +94,16 @@
* These functions are for accessing the IT8518 device RAM space via 0x66/0x68
*/
-u8 ec_read_ob(void)
-{
- if (!output_buffer_full(EC_SC)) return 0;
- return inb(EC_DATA);
-}
-
-void ec_write_cmd(u8 cmd)
-{
- if (!input_buffer_empty(EC_SC)) return;
- outb(cmd, EC_SC);
-}
-
-void ec_write_ib(u8 data)
-{
- if (!input_buffer_empty(EC_SC)) return;
- outb(data, EC_DATA);
-}
-
-u8 ec_read(u16 addr)
-{
- ec_write_cmd(RD_EC);
- ec_write_ib(addr);
- return ec_read_ob();
-}
-
-void ec_write(u16 addr, u8 data)
-{
- ec_write_cmd(WR_EC);
- ec_write_ib(addr);
- ec_write_ib(data);
-}
-
#ifndef __PRE_RAM__
u8 ec_it8518_get_event(void)
{
u8 cmd = 0;
u8 status = inb(EC_SC);
- if (status & SCI_EVT) {
- ec_write_cmd(QR_EC);
- cmd = ec_read_ob();
- } else if (status & SMI_EVT) {
+ if (status & EC_SCI_EVT) {
+ send_ec_command(QR_EC);
+ cmd = recv_ec_data();
+ } else if (status & EC_SMI_EVT) {
ec_kbc_write_cmd(EC_KBD_SMI_EVENT);
cmd = ec_kbc_read_ob();
}
diff --git a/src/ec/quanta/it8518/ec.h b/src/ec/quanta/it8518/ec.h
index 6fca3b9..27f9137 100644
--- a/src/ec/quanta/it8518/ec.h
+++ b/src/ec/quanta/it8518/ec.h
@@ -43,17 +43,6 @@
void ec_kbc_write_cmd(u8 cmd);
void ec_kbc_write_ib(u8 data);
-// 62h/66h Command Interface
-#define EC_DATA 0x62
-#define EC_SC 0x66 // Status & Control Register
-#define SMI_EVT (1 << 6) // 1: SMI event was triggered
-#define SCI_EVT (1 << 5) // 1: SCI event was triggered
-
-// EC Commands (defined in ec_function_spec v3.12)
-#define RD_EC 0x80
-#define WR_EC 0x81
-#define QR_EC 0x84
-
#define EC_CMD_EXIT_BOOT_BLOCK 0x85
#define EC_CMD_NOTIFY_ACPI_ENTER 0x86
#define EC_CMD_NOTIFY_ACPI_EXIT 0x87
@@ -63,13 +52,13 @@
#define EC_PERIPH_CNTL_3 0x0D
#define EC_USB_S3_EN 0x26
#define EC_PERIPH_STAT_3 0x35
+#define EC_MBAT_STATUS 0x38
#define EC_THERM_0 0x78
#define EC_WAKE_SRC_ENABLE 0xBF
#define EC_FW_VER 0xE8 // 2 Bytes
#define EC_IF_MIN_VER 0xEB
#define EC_STATUS_REG 0xEC
#define EC_IF_MAJ_VER 0xEF
-#define EC_MBAT_STATUS 0x0138
// EC 0.83b added status bits:
@@ -81,12 +70,6 @@
// EC 0.86a added enable bit:
#define EC_LID_WAKE_ENABLE 0x4
-u8 ec_read_ob(void);
-void ec_write_cmd(u8 cmd);
-void ec_write_ib(u8 data);
-
-u8 ec_read(u16 addr);
-void ec_write(u16 addr, u8 data);
u8 ec_it8518_get_event(void);
void ec_it8518_enable_wake_events(void);
diff --git a/src/mainboard/google/stout/chromeos.c b/src/mainboard/google/stout/chromeos.c
index 5301d30..f7f54c1 100644
--- a/src/mainboard/google/stout/chromeos.c
+++ b/src/mainboard/google/stout/chromeos.c
@@ -24,6 +24,7 @@
#include <southbridge/intel/common/gpio.h>
#include <vendorcode/google/chromeos/chromeos.h>
#include "ec.h"
+#include <ec/acpi/ec.h>
#include <ec/quanta/it8518/ec.h>
#ifndef __PRE_RAM__
diff --git a/src/mainboard/google/stout/ec.c b/src/mainboard/google/stout/ec.c
index 229f919..11cdc2a 100644
--- a/src/mainboard/google/stout/ec.c
+++ b/src/mainboard/google/stout/ec.c
@@ -18,6 +18,7 @@
#include <bootmode.h>
#include <types.h>
#include <console/console.h>
+#include <ec/acpi/ec.h>
#include <ec/quanta/it8518/ec.h>
#include <device/device.h>
#include <device/pci.h>
diff --git a/src/mainboard/google/stout/mainboard.c b/src/mainboard/google/stout/mainboard.c
index b63083f..63cc67b 100644
--- a/src/mainboard/google/stout/mainboard.c
+++ b/src/mainboard/google/stout/mainboard.c
@@ -29,13 +29,14 @@
#include <southbridge/intel/bd82x6x/pch.h>
#include <smbios.h>
#include <device/pci.h>
+#include <ec/acpi/ec.h>
#include <ec/quanta/it8518/ec.h>
#include <vendorcode/google/chromeos/chromeos.h>
void mainboard_suspend_resume(void)
{
/* Stout EC needs to be put back in ACPI mode */
- ec_write_cmd(EC_CMD_NOTIFY_ACPI_ENTER);
+ send_ec_command(EC_CMD_NOTIFY_ACPI_ENTER);
}
diff --git a/src/mainboard/google/stout/mainboard_smi.c b/src/mainboard/google/stout/mainboard_smi.c
index 6a51645..27eae19 100644
--- a/src/mainboard/google/stout/mainboard_smi.c
+++ b/src/mainboard/google/stout/mainboard_smi.c
@@ -24,6 +24,7 @@
#include <cpu/intel/model_206ax/model_206ax.h>
/* Include EC functions */
+#include <ec/acpi/ec.h>
#include <ec/quanta/it8518/ec.h>
#include "ec.h"
@@ -96,13 +97,13 @@
/*
* TODO(kimarie) Clear all pending events and enable SCI.
*/
- ec_write_cmd(EC_CMD_NOTIFY_ACPI_ENTER);
+ send_ec_command(EC_CMD_NOTIFY_ACPI_ENTER);
break;
case APMC_ACPI_DIS:
/*
* TODO(kimarie) Clear all pending events and enable SMI.
*/
- ec_write_cmd(EC_CMD_NOTIFY_ACPI_EXIT);
+ send_ec_command(EC_CMD_NOTIFY_ACPI_EXIT);
break;
}
return 0;
diff --git a/src/mainboard/google/stout/romstage.c b/src/mainboard/google/stout/romstage.c
index d212951..66eb953 100644
--- a/src/mainboard/google/stout/romstage.c
+++ b/src/mainboard/google/stout/romstage.c
@@ -29,6 +29,7 @@
#include <southbridge/intel/common/gpio.h>
#include <halt.h>
#include <bootmode.h>
+#include <ec/acpi/ec.h>
#include <ec/quanta/it8518/ec.h>
#include "ec.h"
#include "onboard.h"
@@ -121,12 +122,12 @@
* Tell EC to exit RO mode
*/
printk(BIOS_DEBUG, "EC will exit RO mode and boot normally\n");
- ec_write_cmd(EC_CMD_EXIT_BOOT_BLOCK);
+ send_ec_command(EC_CMD_EXIT_BOOT_BLOCK);
die("wait for ec to reset");
}
} else {
printk(BIOS_DEBUG, "EC Warm Boot Detected\n");
- ec_write_cmd(EC_CMD_WARM_RESET);
+ send_ec_command(EC_CMD_WARM_RESET);
}
}
--
To view, visit https://review.coreboot.org/c/coreboot/+/31382
To unsubscribe, or for help writing mail filters, visit https://review.coreboot.org/settings
Gerrit-Project: coreboot
Gerrit-Branch: master
Gerrit-Change-Id: I7bea7445f34817cef1602843bbded59230bb8d47
Gerrit-Change-Number: 31382
Gerrit-PatchSet: 1
Gerrit-Owner: James <jye836(a)gmail.com>
Gerrit-MessageType: newchange
4
9

Change in ...coreboot[master]: intel/skylake: nhlt: Add 24 bit blobs for Max98373
by Jenny Tc (Code Review) Aug. 7, 2023
by Jenny Tc (Code Review) Aug. 7, 2023
Aug. 7, 2023
Jenny Tc has uploaded this change for review. ( https://review.coreboot.org/c/coreboot/+/31635
Change subject: intel/skylake: nhlt: Add 24 bit blobs for Max98373
......................................................................
intel/skylake: nhlt: Add 24 bit blobs for Max98373
Enable 24 bit nhlt blobs and remove 16 bit blobs. 16 bit and 24 bit
blobs cannot be supported together since the OS NHLT parsing relies
on container bit format. The container bit format for 16 and 24 bit
capture are same (32) and putting both blobs in configs results in
selecting the first blob. To enable 24 and 16 bit blobs together, the
core nhlt parsing logic has to be changed which would impact SKL and
KBL platforms. In order to minimize the impact, the 16 bit blob is
removed considering that the machine driver for max98373 is expected to
support only format due to topology configuration for 16 and 24 bit.
BUG=b:110795132
BRANCH=none
TEST=Verify playback after flashing
CQ-DEPEND=*806750
Change-Id: I62cc109fb0aca9269736779a6ce80980b0571b78
Signed-off-by: Jenny TC <jenny.tc(a)intel.com>
---
M src/soc/intel/skylake/nhlt/Makefile.inc
M src/soc/intel/skylake/nhlt/max98373.c
2 files changed, 6 insertions(+), 16 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/35/31635/1
diff --git a/src/soc/intel/skylake/nhlt/Makefile.inc b/src/soc/intel/skylake/nhlt/Makefile.inc
index 5c8bd80..548747a 100644
--- a/src/soc/intel/skylake/nhlt/Makefile.inc
+++ b/src/soc/intel/skylake/nhlt/Makefile.inc
@@ -21,7 +21,6 @@
DMIC_4CH_48KHZ_32B = dmic-4ch-48khz-32b.bin
NAU88L25 = nau88l25-2ch-48khz-24b.bin
MAX98357_RENDER = max98357-render-2ch-48khz-24b.bin
-MAX98373_RENDER_16B = max98373-render-2ch-48khz-16b.bin
MAX98373_RENDER_24B = max98373-render-2ch-48khz-24b.bin
MAX98927_RENDER_24B = max98927-render-2ch-48khz-24b.bin
MAX98927_RENDER_16B = max98927-render-2ch-48khz-16b.bin
diff --git a/src/soc/intel/skylake/nhlt/max98373.c b/src/soc/intel/skylake/nhlt/max98373.c
index 0e3a413..a781943 100644
--- a/src/soc/intel/skylake/nhlt/max98373.c
+++ b/src/soc/intel/skylake/nhlt/max98373.c
@@ -25,35 +25,26 @@
.speaker_mask = SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT,
.settings_file = "max98373-render-2ch-48khz-24b.bin",
},
- /* 48 KHz 16-bits per sample. */
- {
- .num_channels = 2,
- .sample_freq_khz = 48,
- .container_bits_per_sample = 16,
- .valid_bits_per_sample = 16,
- .speaker_mask = SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT,
- .settings_file = "max98373-render-2ch-48khz-16b.bin",
- }
};
static const struct nhlt_format_config max98373_capture_formats[] = {
- /* 48 KHz 16-bits per sample - Quad Channel. */
+ /* 48 KHz 24-bits per sample - Quad Channel. */
{
.num_channels = 4,
.sample_freq_khz = 48,
.container_bits_per_sample = 32,
- .valid_bits_per_sample = 16,
+ .valid_bits_per_sample = 24,
.speaker_mask = SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT,
- .settings_file = "max98373-render-2ch-48khz-16b.bin",
+ .settings_file = "max98373-render-2ch-48khz-24b.bin",
},
- /* 48 KHz 16-bits per sample - Stereo Channel */
+ /* 48 KHz 24-bits per sample - Stereo Channel */
{
.num_channels = 2,
.sample_freq_khz = 48,
.container_bits_per_sample = 32,
- .valid_bits_per_sample = 16,
+ .valid_bits_per_sample = 24,
.speaker_mask = SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT,
- .settings_file = "max98373-render-2ch-48khz-16b.bin",
+ .settings_file = "max98373-render-2ch-48khz-24b.bin",
},
};
--
To view, visit https://review.coreboot.org/c/coreboot/+/31635
To unsubscribe, or for help writing mail filters, visit https://review.coreboot.org/settings
Gerrit-Project: coreboot
Gerrit-Branch: master
Gerrit-Change-Id: I62cc109fb0aca9269736779a6ce80980b0571b78
Gerrit-Change-Number: 31635
Gerrit-PatchSet: 1
Gerrit-Owner: Jenny Tc <jenny.tc(a)intel.com>
Gerrit-MessageType: newchange
9
29

Change in ...libgfxinit[master]: [WIP] gma: Add Gemini Lake support
by Nico Huber (Code Review) Aug. 3, 2023
by Nico Huber (Code Review) Aug. 3, 2023
Aug. 3, 2023
Nico Huber has uploaded this change for review. ( https://review.coreboot.org/c/libgfxinit/+/31611
Change subject: [WIP] gma: Add Gemini Lake support
......................................................................
[WIP] gma: Add Gemini Lake support
Change-Id: I84347130fc3fcaf33d9f3d84fab47c67899c792d
Signed-off-by: Nico Huber <nico.huber(a)secunet.com>
---
M common/Makefile.inc
M common/broxton/hw-gfx-gma-ddi_phy.ads
M common/broxton/hw-gfx-gma-plls.adb
M common/broxton/hw-gfx-gma-power_and_clocks.adb
M common/hw-gfx-gma-config.ads.template
M common/hw-gfx-gma-registers.ads
M common/hw-gfx-gma.ads
R configs/apollolake
C configs/geminilake
9 files changed, 109 insertions(+), 42 deletions(-)
git pull ssh://review.coreboot.org:29418/libgfxinit refs/changes/11/31611/1
diff --git a/common/Makefile.inc b/common/Makefile.inc
index 61955eb..cfb2dfa 100644
--- a/common/Makefile.inc
+++ b/common/Makefile.inc
@@ -68,7 +68,7 @@
subdirs-y += ironlake
else ifneq ($(filter Haswell Broadwell,$(CONFIG_GFX_GMA_CPU)),)
subdirs-y += haswell_shared haswell
-else ifneq ($(filter Broxton,$(CONFIG_GFX_GMA_CPU)),)
+else ifneq ($(filter Apollolake Geminilake,$(CONFIG_GFX_GMA_CPU)),)
subdirs-y += haswell_shared broxton
else ifneq ($(filter Skylake Kabylake,$(CONFIG_GFX_GMA_CPU)),)
subdirs-y += haswell_shared skylake
diff --git a/common/broxton/hw-gfx-gma-ddi_phy.ads b/common/broxton/hw-gfx-gma-ddi_phy.ads
index fc6cacf..e6301bf 100644
--- a/common/broxton/hw-gfx-gma-ddi_phy.ads
+++ b/common/broxton/hw-gfx-gma-ddi_phy.ads
@@ -16,7 +16,7 @@
private package HW.GFX.GMA.DDI_Phy is
- type T is (BC, A);
+ type T is (BC, A, C);
procedure Power_On (Phy : T);
procedure Power_Off (Phy : T);
diff --git a/common/broxton/hw-gfx-gma-plls.adb b/common/broxton/hw-gfx-gma-plls.adb
index 087ff12..f7ecc05 100644
--- a/common/broxton/hw-gfx-gma-plls.adb
+++ b/common/broxton/hw-gfx-gma-plls.adb
@@ -170,6 +170,8 @@
PLL_10 : Registers_Index;
PCS_DW12_LN01 : Registers_Index;
PCS_DW12_GRP : Registers_Index;
+ TX_DW5_LN0 : Registers_Index;
+ TX_DW5_GRP : Registers_Index;
end record;
type Port_PLL_Array is array (Valid_PLLs) of Port_PLL_Regs;
@@ -187,7 +189,9 @@
PLL_9 => BXT_PORT_PLL_9_A,
PLL_10 => BXT_PORT_PLL_10_A,
PCS_DW12_LN01 => BXT_PORT_PCS_DW12_01_A,
- PCS_DW12_GRP => BXT_PORT_PCS_DW12_GRP_A),
+ PCS_DW12_GRP => BXT_PORT_PCS_DW12_GRP_A,
+ TX_DW5_LN0 => BXT_PORT_TX_DW5_LN0_A,
+ TX_DW5_GRP => BXT_PORT_TX_DW5_GRP_A),
DPLL_B =>
(PLL_ENABLE => BXT_PORT_PLL_ENABLE_B,
PLL_EBB_0 => BXT_PORT_PLL_EBB_0_B,
@@ -201,7 +205,9 @@
PLL_9 => BXT_PORT_PLL_9_B,
PLL_10 => BXT_PORT_PLL_10_B,
PCS_DW12_LN01 => BXT_PORT_PCS_DW12_01_B,
- PCS_DW12_GRP => BXT_PORT_PCS_DW12_GRP_B),
+ PCS_DW12_GRP => BXT_PORT_PCS_DW12_GRP_B,
+ TX_DW5_LN0 => BXT_PORT_TX_DW5_LN0_B,
+ TX_DW5_GRP => BXT_PORT_TX_DW5_GRP_B),
DPLL_C =>
(PLL_ENABLE => BXT_PORT_PLL_ENABLE_C,
PLL_EBB_0 => BXT_PORT_PLL_EBB_0_C,
@@ -215,11 +221,15 @@
PLL_9 => BXT_PORT_PLL_9_C,
PLL_10 => BXT_PORT_PLL_10_C,
PCS_DW12_LN01 => BXT_PORT_PCS_DW12_01_C,
- PCS_DW12_GRP => BXT_PORT_PCS_DW12_GRP_C));
+ PCS_DW12_GRP => BXT_PORT_PCS_DW12_GRP_C,
+ TX_DW5_LN0 => BXT_PORT_TX_DW5_LN0_C,
+ TX_DW5_GRP => BXT_PORT_TX_DW5_GRP_C));
PORT_PLL_ENABLE : constant := 1 * 2 ** 31;
PORT_PLL_ENABLE_LOCK : constant := 1 * 2 ** 30;
PORT_PLL_ENABLE_REF_SEL : constant := 1 * 2 ** 27;
+ PORT_PLL_POWER_ENABLE : constant := 1 * 2 ** 26;
+ PORT_PLL_POWER_STATE : constant := 1 * 2 ** 25;
PORT_PLL_EBB0_P1_SHIFT : constant := 13;
PORT_PLL_EBB0_P1_MASK : constant := 16#07# * 2 ** 13;
@@ -336,8 +346,17 @@
begin
pragma Debug (Debug.Put_Line (GNAT.Source_Info.Enclosing_Entity));
- Set_Mask (PORT (P).PLL_ENABLE, PORT_PLL_ENABLE_REF_SEL); -- non-SSC ref
- Unset_Mask (PORT (P).PLL_EBB_4, PORT_PLL_EBB4_10BIT_CLK_ENABLE);
+ Set_Mask (PORT (P).PLL_ENABLE, PORT_PLL_ENABLE_REF_SEL); -- non-SSC ref
+
+ if Config.Has_Port_PLL_Pwr_En then
+ Set_Mask (PORT (P).PLL_ENABLE, PORT_PLL_POWER_ENABLE);
+ Wait_Set_Mask
+ (Register => PORT (P).PLL_ENABLE,
+ Mask => PORT_PLL_POWER_STATE,
+ TOut_MS => 1); -- 200us
+ end if;
+
+ Unset_Mask (PORT (P).PLL_EBB_4, PORT_PLL_EBB4_10BIT_CLK_ENABLE);
Unset_And_Set_Mask
(Register => PORT (P).PLL_EBB_0,
@@ -388,7 +407,16 @@
Wait_Set_Mask
(Register => PORT (P).PLL_ENABLE,
Mask => PORT_PLL_ENABLE_LOCK,
- TOut_MS => 1); -- 100us
+ TOut_MS => 1); -- 200us
+
+ if (Config.Has_DCC_Delay_Range) then
+ declare
+ Delay_Range : Word32;
+ begin
+ Read (PORT (P).DW5_LN0, Delay_Range);
+ Delay_Range := Delay_Range or PORT_TX_DW5_DCC_DELAY_RANGE_2;
+ Write (PORT (P).DW5_GRP, Delay_Range);
+ end if;
Read (PORT (P).PCS_DW12_LN01, PCS);
PCS := PCS and not PORT_PCS_LANE_STAGGER_MASK;
@@ -471,6 +499,13 @@
begin
if PLL in Valid_PLLs then
Unset_Mask (PORT (PLL).PLL_ENABLE, PORT_PLL_ENABLE);
+ if Config.Has_Port_PLL_Pwr_En then
+ Unset_Mask (PORT (P).PLL_ENABLE, PORT_PLL_POWER_ENABLE);
+ Wait_Unset_Mask
+ (Register => PORT (P).PLL_ENABLE,
+ Mask => PORT_PLL_POWER_STATE,
+ TOut_MS => 1); -- 200us
+ end if;
end if;
end Free;
diff --git a/common/broxton/hw-gfx-gma-power_and_clocks.adb b/common/broxton/hw-gfx-gma-power_and_clocks.adb
index 8aa9a21..4e3fbc3 100644
--- a/common/broxton/hw-gfx-gma-power_and_clocks.adb
+++ b/common/broxton/hw-gfx-gma-power_and_clocks.adb
@@ -214,22 +214,12 @@
----------------------------------------------------------------------------
- CDClk_Ref : constant := 19_200_000;
-
procedure Set_CDClk (Freq : Frequency_Type)
with
- Pre =>
- Freq = CDClk_Ref or Freq = 144_000_000 or Freq = 288_000_000 or
- Freq = 384_000_000 or Freq = 576_000_000 or Freq = 624_000_000
+ Pre => Config.Valid_CDClk (Freq)
is
VCO : constant Int64 :=
- CDClk_Ref *
- (if Freq = CDClk_Ref then
- 0
- elsif Freq = 624_000_000 then
- 65
- else
- 60);
+ Config.Broxton_CDClk_Ref * Config.CDClk_Ratio (Freq);
CDCLK_CD2X_Div_Sel : constant Word32 :=
(case VCO / Freq is -- CDClk = VCO / 2 / Div
when 2 => CDCLK_CD2X_DIV_SEL_1,
@@ -255,7 +245,8 @@
Unset_And_Set_Mask
(Register => BXT_DE_PLL_CTL,
Mask_Unset => BXT_DE_PLL_RATIO_MASK,
- Mask_Set => Word32 (VCO / CDClk_Ref));
+ Mask_Set => (if Freq = Config.Broxton_CDClk_Ref then 0 else
+ Word32 (VCO / Config.Broxton_CDClk_Ref)));
Write
(Register => BXT_DE_PLL_ENABLE,
Value => BXT_DE_PLL_PLL_ENABLE);
@@ -297,7 +288,7 @@
-- Linux' i915 never keeps the PLL disabled but runs it
-- at a "ratio" of 0 with CDClk at its reference clock.
- Set_CDClk (CDClk_Ref);
+ Set_CDClk (Config.Broxton_CDClk_Ref);
PW_Off (PW1);
end Post_All_Off;
diff --git a/common/hw-gfx-gma-config.ads.template b/common/hw-gfx-gma-config.ads.template
index 4653ae9..972cfa8 100644
--- a/common/hw-gfx-gma-config.ads.template
+++ b/common/hw-gfx-gma-config.ads.template
@@ -40,7 +40,8 @@
Has_Internal_Display : constant Boolean := Internal_Display /= None;
Internal_Is_EDP : constant Boolean := Internal_Display = DP;
Have_DVI_I : constant Boolean := Analog_I2C_Port /= PCH_DAC;
- Has_Presence_Straps : constant Boolean := CPU /= Broxton;
+ Is_Broxton : constant Boolean := CPU in Apollolake..Geminilake;
+ Has_Presence_Straps : constant Boolean := not Is_Broxton;
Is_ULT : constant Boolean := CPU_Var = ULT;
Is_ULX : constant Boolean := CPU_Var = ULX;
Is_LP : constant Boolean := Is_ULT or Is_ULX;
@@ -57,7 +58,7 @@
Has_Pipe_MSA_Misc : constant Boolean := CPU >= Haswell;
Has_Pipeconf_Misc : constant Boolean := CPU >= Broadwell;
Has_Pipeconf_BPC : constant Boolean := CPU /= Haswell;
- Has_Plane_Control : constant Boolean := CPU >= Broxton;
+ Has_Plane_Control : constant Boolean := CPU >= Apollolake;
Has_DSP_Linoff : constant Boolean := CPU <= Ivybridge;
Has_PF_Pipe_Select : constant Boolean := CPU in Ivybridge .. Haswell;
Has_Cursor_FBC_Control : constant Boolean := CPU >= Ivybridge;
@@ -73,7 +74,7 @@
Has_PCH_Panel_Power : constant Boolean := CPU >= Ironlake;
----- PCH/FDI: ---------
- Has_PCH : constant Boolean := CPU /= Broxton and CPU /= G45;
+ Has_PCH : constant Boolean := not Is_Broxton and CPU /= G45;
Has_PCH_DAC : constant Boolean := CPU in Ironlake .. Ivybridge or
(CPU in Haswell .. Broadwell
and not Is_LP);
@@ -103,7 +104,9 @@
and Is_LP) or
CPU >= Skylake;
- Has_DDI_PHYs : constant Boolean := CPU = Broxton;
+ Has_DDI_PHYs : constant Boolean := Is_Broxton;
+ Has_Dual_DDI_Phy_BC : constant Boolean := CPU = Apollolake;
+ Has_Port_PLL_Pwr_En : constant Boolean := CPU = Geminilake;
Has_DDI_D : constant Boolean := CPU >= Haswell and
not Is_LP and
@@ -112,8 +115,8 @@
Has_DDI_D;
Has_DDI_Buffer_Trans : constant Boolean := CPU >= Haswell and
- CPU /= Broxton;
- Has_Low_Voltage_Swing : constant Boolean := CPU >= Broxton;
+ not Is_Broxton;
+ Has_Low_Voltage_Swing : constant Boolean := CPU >= Apollolake;
Has_Iboost_Config : constant Boolean := CPU >= Skylake;
Use_KBL_DDI_Buf_Trans : constant Boolean := CPU = Kabylake;
@@ -126,7 +129,7 @@
----- GMBUS: -----------
Ungate_GMBUS_Unit_Level : constant Boolean := CPU >= Skylake;
- GMBUS_Alternative_Pins : constant Boolean := CPU = Broxton;
+ GMBUS_Alternative_Pins : constant Boolean := Is_Broxton;
Has_PCH_GMBUS : constant Boolean := CPU >= Ironlake;
----- Power: -----------
@@ -178,7 +181,8 @@
DP3 => CPU_Var = Normal,
Analog => CPU_Var = Normal,
others => True),
- Broxton =>
+ Apollolake |
+ Geminilake =>
(Internal => Config.Internal_Display = DP,
DP1 => True,
DP2 => True,
@@ -234,11 +238,12 @@
Default_DDI_HDMI_Buffer_Translation : constant DDI_HDMI_Buf_Trans_Range :=
(case CPU is
- when Haswell => 6,
- when Broadwell => 7,
- when Broxton => 8,
- when Skylake => 8,
- when others => 0);
+ when Haswell => 6,
+ when Broadwell => 7,
+ when Apollolake |
+ Geminilake => 8,
+ when Skylake => 8,
+ when others => 0);
----------------------------------------------------------------------------
@@ -250,7 +255,8 @@
Ivybridge => 400_000_000,
when Haswell |
Broadwell => (if Is_ULX then 337_500_000 else 450_000_000),
- when Broxton => 288_000_000,
+ when Apollolake => 288_000_000,
+ when Geminilake => 158_400_000,
when Skylake |
Kabylake => 337_500_000);
@@ -262,13 +268,34 @@
Ivybridge => 125_000_000,
when Haswell |
Broadwell => (if Is_LP then 24_000_000 else 125_000_000),
- when Broxton => Frequency_Type'First, -- none needed
+ when Apollolake |
+ Geminilake => Frequency_Type'First, -- none needed
when Skylake |
Kabylake => 24_000_000);
Raw_Clock : Frequency_Type := Default_RawClk_Freq
with Part_Of => GMA.Config_State;
+ Broxton_CDClk_Ref : constant := 19_200_000;
+
+ function Valid_CDClk (Freq : Frequency_Type) return Boolean is
+ (case CPU is
+ when Geminilake =>
+ Freq = Broxton_CDClk_Ref or Freq = 79_200_000 or
+ Freq = 158_400_000 or Freq = 316_800_000,
+ when Apollolake =>
+ Freq = Broxton_CDClk_Ref or Freq = 144_000_000 or
+ Freq = 288_000_000 or Freq = 384_000_000 or
+ Freq = 576_000_000 or Freq = 624_000_000,
+ when others =>
+ True);
+
+ function CDClk_Ratio (Freq : Frequency_Type) return Int64 is
+ (case CPU is
+ when Geminilake => 33,
+ when Apollolake => if Freq = 624_000_000 then 65 else 60,
+ when others => 1);
+
----------------------------------------------------------------------------
-- Maximum source width with enabled scaler. This only accounts
@@ -414,7 +441,8 @@
when Normal => Is_Broadwell (Device_Id),
when ULT => Is_Broadwell_U (Device_Id),
when ULX => Is_Broadwell_Y (Device_Id)),
- when Broxton => (Device_Id and 16#fffe#) = 16#5a84#,
+ when Apollolake => (Device_Id and 16#fffe#) = 16#5a84#,
+ when Geminilake => (Device_Id and 16#fffe#) = 16#3184#,
when Skylake => (case CPU_Var is
when Normal => Is_Skylake (Device_Id),
when ULT => Is_Skylake_U (Device_Id),
diff --git a/common/hw-gfx-gma-registers.ads b/common/hw-gfx-gma-registers.ads
index 1220d1a..b14194b 100644
--- a/common/hw-gfx-gma-registers.ads
+++ b/common/hw-gfx-gma-registers.ads
@@ -413,6 +413,7 @@
BXT_PORT_TX_DW2_LN0_B,
BXT_PORT_TX_DW3_LN0_B,
BXT_PORT_TX_DW4_LN0_B,
+ BXT_PORT_TX_DW5_LN0_B,
BXT_PORT_TX_DW14_LN0_B,
BXT_PORT_TX_DW14_LN1_B,
BXT_PORT_TX_DW14_LN2_B,
@@ -422,6 +423,7 @@
BXT_PORT_TX_DW2_LN0_C,
BXT_PORT_TX_DW3_LN0_C,
BXT_PORT_TX_DW4_LN0_C,
+ BXT_PORT_TX_DW5_LN0_C,
BXT_PORT_TX_DW14_LN0_C,
BXT_PORT_TX_DW14_LN1_C,
BXT_PORT_TX_DW14_LN2_C,
@@ -431,11 +433,13 @@
BXT_PORT_TX_DW2_GRP_B,
BXT_PORT_TX_DW3_GRP_B,
BXT_PORT_TX_DW4_GRP_B,
+ BXT_PORT_TX_DW5_GRP_B,
BXT_PORT_PCS_DW10_GRP_C,
BXT_PORT_PCS_DW12_GRP_C,
BXT_PORT_TX_DW2_GRP_C,
BXT_PORT_TX_DW3_GRP_C,
BXT_PORT_TX_DW4_GRP_C,
+ BXT_PORT_TX_DW5_GRP_C,
BXT_DE_PLL_CTL,
HTOTAL_EDP,
HBLANK_EDP,
@@ -722,6 +726,7 @@
BXT_PORT_TX_DW2_LN0_A,
BXT_PORT_TX_DW3_LN0_A,
BXT_PORT_TX_DW4_LN0_A,
+ BXT_PORT_TX_DW5_LN0_A,
BXT_PORT_TX_DW14_LN0_A,
BXT_PORT_TX_DW14_LN1_A,
BXT_PORT_TX_DW14_LN2_A,
@@ -730,7 +735,8 @@
BXT_PORT_PCS_DW12_GRP_A,
BXT_PORT_TX_DW2_GRP_A,
BXT_PORT_TX_DW3_GRP_A,
- BXT_PORT_TX_DW4_GRP_A);
+ BXT_PORT_TX_DW4_GRP_A,
+ BXT_PORT_TX_DW5_GRP_A);
pragma Warnings
(GNATprove, Off, "pragma ""KEEP_NAMES"" ignored *(not yet supported)",
@@ -1351,6 +1357,7 @@
BXT_PORT_TX_DW2_LN0_A => 16#16_2508# / Register_Width,
BXT_PORT_TX_DW3_LN0_A => 16#16_250c# / Register_Width,
BXT_PORT_TX_DW4_LN0_A => 16#16_2510# / Register_Width,
+ BXT_PORT_TX_DW5_LN0_A => 16#16_2514# / Register_Width,
BXT_PORT_TX_DW14_LN0_A => 16#16_2538# / Register_Width,
BXT_PORT_TX_DW14_LN1_A => 16#16_25b8# / Register_Width,
BXT_PORT_TX_DW14_LN2_A => 16#16_2738# / Register_Width,
@@ -1358,9 +1365,11 @@
BXT_PORT_TX_DW2_GRP_A => 16#16_2d08# / Register_Width,
BXT_PORT_TX_DW3_GRP_A => 16#16_2d0c# / Register_Width,
BXT_PORT_TX_DW4_GRP_A => 16#16_2d10# / Register_Width,
+ BXT_PORT_TX_DW5_GRP_A => 16#16_2d14# / Register_Width,
BXT_PORT_TX_DW2_LN0_B => 16#06_c508# / Register_Width,
BXT_PORT_TX_DW3_LN0_B => 16#06_c50c# / Register_Width,
BXT_PORT_TX_DW4_LN0_B => 16#06_c510# / Register_Width,
+ BXT_PORT_TX_DW5_LN0_B => 16#06_c514# / Register_Width,
BXT_PORT_TX_DW14_LN0_B => 16#06_c538# / Register_Width,
BXT_PORT_TX_DW14_LN1_B => 16#06_c5b8# / Register_Width,
BXT_PORT_TX_DW14_LN2_B => 16#06_c738# / Register_Width,
@@ -1368,9 +1377,11 @@
BXT_PORT_TX_DW2_GRP_B => 16#06_cd08# / Register_Width,
BXT_PORT_TX_DW3_GRP_B => 16#06_cd0c# / Register_Width,
BXT_PORT_TX_DW4_GRP_B => 16#06_cd10# / Register_Width,
+ BXT_PORT_TX_DW5_GRP_B => 16#06_cd14# / Register_Width,
BXT_PORT_TX_DW2_LN0_C => 16#06_c908# / Register_Width,
BXT_PORT_TX_DW3_LN0_C => 16#06_c90c# / Register_Width,
BXT_PORT_TX_DW4_LN0_C => 16#06_c910# / Register_Width,
+ BXT_PORT_TX_DW5_LN0_C => 16#06_c914# / Register_Width,
BXT_PORT_TX_DW14_LN0_C => 16#06_c938# / Register_Width,
BXT_PORT_TX_DW14_LN1_C => 16#06_c9b8# / Register_Width,
BXT_PORT_TX_DW14_LN2_C => 16#06_cb38# / Register_Width,
@@ -1378,6 +1389,7 @@
BXT_PORT_TX_DW2_GRP_C => 16#06_cf08# / Register_Width,
BXT_PORT_TX_DW3_GRP_C => 16#06_cf0c# / Register_Width,
BXT_PORT_TX_DW4_GRP_C => 16#06_cf10# / Register_Width,
+ BXT_PORT_TX_DW5_GRP_C => 16#06_cf14# / Register_Width,
-- Broxton DDI PHY ref registers
BXT_PORT_REF_DW3_A => 16#16_218c# / Register_Width,
diff --git a/common/hw-gfx-gma.ads b/common/hw-gfx-gma.ads
index 7ca0ca1..c282935 100644
--- a/common/hw-gfx-gma.ads
+++ b/common/hw-gfx-gma.ads
@@ -41,7 +41,8 @@
Ivybridge,
Haswell,
Broadwell,
- Broxton,
+ Apollolake,
+ Geminilake,
Skylake,
Kabylake);
diff --git a/configs/broxton b/configs/apollolake
similarity index 83%
rename from configs/broxton
rename to configs/apollolake
index b5f1f9a..24e0847 100644
--- a/configs/broxton
+++ b/configs/apollolake
@@ -1,4 +1,4 @@
-CONFIG_GFX_GMA_CPU = Broxton
+CONFIG_GFX_GMA_CPU = Apollolake
CONFIG_GFX_GMA_CPU_VARIANT = Normal # N/A
CONFIG_GFX_GMA_INTERNAL_PORT = DP
CONFIG_GFX_GMA_ANALOG_I2C_PORT = PCH_DAC # N/A
diff --git a/configs/broxton b/configs/geminilake
similarity index 83%
copy from configs/broxton
copy to configs/geminilake
index b5f1f9a..be34de7 100644
--- a/configs/broxton
+++ b/configs/geminilake
@@ -1,4 +1,4 @@
-CONFIG_GFX_GMA_CPU = Broxton
+CONFIG_GFX_GMA_CPU = Geminilake
CONFIG_GFX_GMA_CPU_VARIANT = Normal # N/A
CONFIG_GFX_GMA_INTERNAL_PORT = DP
CONFIG_GFX_GMA_ANALOG_I2C_PORT = PCH_DAC # N/A
--
To view, visit https://review.coreboot.org/c/libgfxinit/+/31611
To unsubscribe, or for help writing mail filters, visit https://review.coreboot.org/settings
Gerrit-Project: libgfxinit
Gerrit-Branch: master
Gerrit-Change-Id: I84347130fc3fcaf33d9f3d84fab47c67899c792d
Gerrit-Change-Number: 31611
Gerrit-PatchSet: 1
Gerrit-Owner: Nico Huber <nico.h(a)gmx.de>
Gerrit-MessageType: newchange
4
6

Change in ...coreboot[master]: mb/intel/dg41wv: Inherit the subsystemid
by Arthur Heymans (Code Review) June 10, 2023
by Arthur Heymans (Code Review) June 10, 2023
June 10, 2023
Arthur Heymans has uploaded this change for review. ( https://review.coreboot.org/c/coreboot/+/30470
Change subject: mb/intel/dg41wv: Inherit the subsystemid
......................................................................
mb/intel/dg41wv: Inherit the subsystemid
Don't reprogram the same subsystemid for each PCI device.
Change-Id: Ieaeef728e200bfa826c4ae25de3e8532c493c877
Signed-off-by: Arthur Heymans <arthur(a)aheymans.xyz>
---
M src/mainboard/intel/dg41wv/devicetree.cb
1 file changed, 23 insertions(+), 46 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/70/30470/1
diff --git a/src/mainboard/intel/dg41wv/devicetree.cb b/src/mainboard/intel/dg41wv/devicetree.cb
index d96ad95..da91ea2 100644
--- a/src/mainboard/intel/dg41wv/devicetree.cb
+++ b/src/mainboard/intel/dg41wv/devicetree.cb
@@ -24,14 +24,10 @@
end
end
device domain 0 on # PCI domain
- subsystemid 0x1458 0x5000 inherit
- device pci 0.0 on # Host Bridge
- subsystemid 0x8086 0x5756
- end
+ subsystemid 0x8086 0x5756 inherit
+ device pci 0.0 on end # Host Bridge
device pci 1.0 on end # PEG
- device pci 2.0 on # Integrated graphics controller
- subsystemid 0x8086 0x5756
- end
+ device pci 2.0 on end # Integrated graphics controller
chip southbridge/intel/i82801gx # Southbridge
register "pirqa_routing" = "0x0b"
register "pirqb_routing" = "0x0b"
@@ -66,39 +62,24 @@
register "sata_ahci" = "0x0" # AHCI not supported on this ICH7 variant
register "gpe0_en" = "0x440"
- device pci 1b.0 on # Audio
- subsystemid 0x8086 0x5756
+ device pci 1b.0 on end # Audio
+ device pci 1c.0 on end # PCIe 1
+ device pci 1c.1 on # PCIe 2: NIC
+ device pci 00.0 on end
end
- device pci 1c.0 on end # PCIe 1
- device pci 1c.1 on # PCIe 2: NIC
- device pci 00.0 on
- subsystemid 0x8086 0x5756
- end
- end
- device pci 1c.2 off end # PCIe 3
- device pci 1c.3 off end # PCIe 4
- device pci 1c.4 off end # PCIe 5
- device pci 1c.5 off end # PCIe 6
- device pci 1d.0 on # USB
- subsystemid 0x8086 0x5756
- end
- device pci 1d.1 on # USB
- subsystemid 0x8086 0x5756
- end
- device pci 1d.2 on # USB
- subsystemid 0x8086 0x5756
- end
- device pci 1d.3 on # USB
- subsystemid 0x8086 0x5756
- end
- device pci 1d.7 on # USB
- subsystemid 0x8086 0x5756
- end
- device pci 1e.0 on end # PCI bridge
- device pci 1e.2 off end # AC'97 Audio Controller
- device pci 1e.3 off end # AC'97 Modem Controller
- device pci 1f.0 on # ISA bridge
- subsystemid 0x8086 0x5756
+ device pci 1c.2 off end # PCIe 3
+ device pci 1c.3 off end # PCIe 4
+ device pci 1c.4 off end # PCIe 5
+ device pci 1c.5 off end # PCIe 6
+ device pci 1d.0 on end # USB
+ device pci 1d.1 on end # USB
+ device pci 1d.2 on end # USB
+ device pci 1d.3 on end # USB
+ device pci 1d.7 on end # USB
+ device pci 1e.0 on end # PCI bridge
+ device pci 1e.2 off end # AC'97 Audio Controller
+ device pci 1e.3 off end # AC'97 Modem Controller
+ device pci 1f.0 on # ISA bridge
chip superio/winbond/w83627dhg
device pnp 2e.0 on # Floppy
# global
@@ -155,12 +136,9 @@
end
end
device pci 1f.1 off end # PATA/IDE
- device pci 1f.2 on # SATA
- subsystemid 0x8086 0x5756
- end
- device pci 1f.3 on # SMbus
- subsystemid 0x8086 0x5756
- chip drivers/i2c/ck505
+ device pci 1f.2 on end # SATA
+ device pci 1f.3 on # SMbus
+ chip drivers/i2c/ck505
register "mask" = "{ 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff,
@@ -173,7 +151,6 @@
0x06, 0x00, 0xea }"
device i2c 69 on end
end
-
end
end
end
--
To view, visit https://review.coreboot.org/c/coreboot/+/30470
To unsubscribe, or for help writing mail filters, visit https://review.coreboot.org/settings
Gerrit-Project: coreboot
Gerrit-Branch: master
Gerrit-Change-Id: Ieaeef728e200bfa826c4ae25de3e8532c493c877
Gerrit-Change-Number: 30470
Gerrit-PatchSet: 1
Gerrit-Owner: Arthur Heymans <arthur(a)aheymans.xyz>
Gerrit-MessageType: newchange
3
4