diff options
Diffstat (limited to 'poky/meta/recipes-bsp/opensbi')
-rw-r--r-- | poky/meta/recipes-bsp/opensbi/files/0002-lib-Create-a-sbi_ipi_data-structure.patch | 128 | ||||
-rw-r--r-- | poky/meta/recipes-bsp/opensbi/opensbi-payloads.inc | 22 | ||||
-rw-r--r-- | poky/meta/recipes-bsp/opensbi/opensbi_0.4.bb (renamed from poky/meta/recipes-bsp/opensbi/opensbi_0.3.bb) | 9 |
3 files changed, 18 insertions, 141 deletions
diff --git a/poky/meta/recipes-bsp/opensbi/files/0002-lib-Create-a-sbi_ipi_data-structure.patch b/poky/meta/recipes-bsp/opensbi/files/0002-lib-Create-a-sbi_ipi_data-structure.patch deleted file mode 100644 index 3c846bde6..000000000 --- a/poky/meta/recipes-bsp/opensbi/files/0002-lib-Create-a-sbi_ipi_data-structure.patch +++ /dev/null @@ -1,128 +0,0 @@ -From 508a27204cbbca0a9430236e56681e5e0d343fb9 Mon Sep 17 00:00:00 2001 -From: Alistair Francis <alistair.francis@wdc.com> -Date: Fri, 8 Mar 2019 11:22:22 -0800 -Subject: [PATCH] lib: Create a sbi_ipi_data structure - -Create a sbi_ipi_data structure that holds unpacked IPI information. At -the same time remove ipi_type from the sbi_scratch struct and use a -fixed offset to access it. - -This structure fits in behind the sbi_scratch structure. - -This fixes https://github.com/riscv/opensbi/issues/81 - -Upstream-Status: Backport [https://github.com/riscv/opensbi/commit/508a27204cbbca0a9430236e56681e5e0d343fb9] -Signed-off-by: Alistair Francis <alistair.francis@wdc.com> ---- - firmware/fw_base.S | 1 - - include/sbi/sbi_scratch.h | 23 ++++++++++++++++------- - lib/sbi_ipi.c | 8 +++++--- - 3 files changed, 21 insertions(+), 11 deletions(-) - -diff --git a/firmware/fw_base.S b/firmware/fw_base.S -index cf2c6a0..69cfc90 100644 ---- a/firmware/fw_base.S -+++ b/firmware/fw_base.S -@@ -183,7 +183,6 @@ _start_warm: - REG_S a4, SBI_SCRATCH_PLATFORM_ADDR_OFFSET(tp) - la a4, _hartid_to_scratch - REG_S a4, SBI_SCRATCH_HARTID_TO_SCRATCH_OFFSET(tp) -- REG_S zero, SBI_SCRATCH_IPI_TYPE_OFFSET(tp) - REG_S zero, SBI_SCRATCH_TMP0_OFFSET(tp) - - /* Setup stack */ -diff --git a/include/sbi/sbi_scratch.h b/include/sbi/sbi_scratch.h -index 8389ef3..70ab384 100644 ---- a/include/sbi/sbi_scratch.h -+++ b/include/sbi/sbi_scratch.h -@@ -28,17 +28,24 @@ - #define SBI_SCRATCH_PLATFORM_ADDR_OFFSET (6 * __SIZEOF_POINTER__) - /** Offset of hartid_to_scratch member in sbi_scratch */ - #define SBI_SCRATCH_HARTID_TO_SCRATCH_OFFSET (7 * __SIZEOF_POINTER__) --/** Offset of ipi_type member in sbi_scratch */ --#define SBI_SCRATCH_IPI_TYPE_OFFSET (8 * __SIZEOF_POINTER__) - /** Offset of tmp0 member in sbi_scratch */ --#define SBI_SCRATCH_TMP0_OFFSET (9 * __SIZEOF_POINTER__) --/** Maximum size of sbi_scratch */ --#define SBI_SCRATCH_SIZE 256 -+#define SBI_SCRATCH_TMP0_OFFSET (8 * __SIZEOF_POINTER__) -+ -+/** sbi_ipi_data is located behind sbi_scratch. This struct is not packed. */ -+/** Offset of ipi_type in sbi_ipi_data */ -+#define SBI_IPI_DATA_IPI_TYPE_OFFSET (15 * __SIZEOF_POINTER__) -+ -+/** Maximum size of sbi_scratch and sbi_ipi_data */ -+#define SBI_SCRATCH_SIZE (32 * __SIZEOF_POINTER__) - - #ifndef __ASSEMBLY__ - - #include <sbi/sbi_types.h> - -+struct sbi_ipi_data { -+ unsigned long ipi_type; -+}; -+ - /** Representation of per-HART scratch space */ - struct sbi_scratch { - /** Start (or base) address of firmware linked to OpenSBI library */ -@@ -57,8 +64,6 @@ struct sbi_scratch { - unsigned long platform_addr; - /** Address of HART ID to sbi_scratch conversion function */ - unsigned long hartid_to_scratch; -- /** IPI type (or flags) */ -- unsigned long ipi_type; - /** Temporary storage */ - unsigned long tmp0; - } __packed; -@@ -71,6 +76,10 @@ struct sbi_scratch { - #define sbi_scratch_thishart_arg1_ptr() \ - ((void *)(sbi_scratch_thishart_ptr()->next_arg1)) - -+/** Get pointer to sbi_ipi_data from sbi_scratch */ -+#define sbi_ipi_data_ptr(scratch) \ -+((struct sbi_ipi_data *)(void*)scratch + SBI_IPI_DATA_IPI_TYPE_OFFSET) -+ - #endif - - #endif -diff --git a/lib/sbi_ipi.c b/lib/sbi_ipi.c -index 0e371d7..e0f2a19 100644 ---- a/lib/sbi_ipi.c -+++ b/lib/sbi_ipi.c -@@ -31,7 +31,7 @@ static int sbi_ipi_send(struct sbi_scratch *scratch, u32 hartid, u32 event) - * trigger the interrupt - */ - remote_scratch = sbi_hart_id_to_scratch(scratch, hartid); -- atomic_raw_set_bit(event, &remote_scratch->ipi_type); -+ atomic_raw_set_bit(event, &sbi_ipi_data_ptr(remote_scratch)->ipi_type); - mb(); - sbi_platform_ipi_send(plat, hartid); - if (event != SBI_IPI_EVENT_SOFT) -@@ -80,7 +80,7 @@ void sbi_ipi_process(struct sbi_scratch *scratch) - sbi_platform_ipi_clear(plat, hartid); - - do { -- ipi_type = scratch->ipi_type; -+ ipi_type = sbi_ipi_data_ptr(scratch)->ipi_type; - rmb(); - ipi_event = __ffs(ipi_type); - switch (ipi_event) { -@@ -97,12 +97,14 @@ void sbi_ipi_process(struct sbi_scratch *scratch) - sbi_hart_hang(); - break; - }; -- ipi_type = atomic_raw_clear_bit(ipi_event, &scratch->ipi_type); -+ ipi_type = atomic_raw_clear_bit(ipi_event, &sbi_ipi_data_ptr(scratch)->ipi_type); - } while(ipi_type > 0); - } - - int sbi_ipi_init(struct sbi_scratch *scratch, bool cold_boot) - { -+ sbi_ipi_data_ptr(scratch)->ipi_type = 0x00; -+ - /* Enable software interrupts */ - csr_set(CSR_MIE, MIP_MSIP); - --- -2.22.0 - diff --git a/poky/meta/recipes-bsp/opensbi/opensbi-payloads.inc b/poky/meta/recipes-bsp/opensbi/opensbi-payloads.inc index 7828599ce..b9714a7ac 100644 --- a/poky/meta/recipes-bsp/opensbi/opensbi-payloads.inc +++ b/poky/meta/recipes-bsp/opensbi/opensbi-payloads.inc @@ -5,10 +5,7 @@ def riscv_get_extra_oemake_image(d): if sbi_payload is None: return "" - if d.getVar('RISCV_SBI_PAYLOAD'): - return "FW_PAYLOAD_PATH=" + deploy_dir + "/" + sbi_payload - - return "" + return "FW_PAYLOAD_PATH=" + deploy_dir + "/" + sbi_payload def riscv_get_extra_oemake_fdt(d): sbi_fdt_payload = d.getVar('RISCV_SBI_FDT') @@ -17,14 +14,11 @@ def riscv_get_extra_oemake_fdt(d): if sbi_fdt_payload is None: return "" - if d.getVar('RISCV_SBI_PAYLOAD'): - # This is internal to openSBI, not a full path - return "FW_PAYLOAD_FDT=" + sbi_fdt_payload - - return "" + return "FW_PAYLOAD_FDT_PATH=" + deploy_dir + "/" + sbi_fdt_payload def riscv_get_do_compile_depends(d): sbi_payload = d.getVar('RISCV_SBI_PAYLOAD') + sbi_fdt_payload = d.getVar('RISCV_SBI_FDT') if sbi_payload is None: return "" @@ -32,6 +26,14 @@ def riscv_get_do_compile_depends(d): if 'linux' in sbi_payload or 'Image' in sbi_payload: return "virtual/kernel:do_deploy" if 'u-boot.bin' in sbi_payload: - return "virtual/bootloader:do_deploy" + # If we want U-Boot and a FDT then we need to depend on U-Boot and + # the kernel + if sbi_fdt_payload is not None: + return "virtual/bootloader:do_deploy virtual/kernel:do_deploy" + else: + return "virtual/bootloader:do_deploy" + # If we want a custom FDT then we need to depend on the kernel + if sbi_fdt_payload is not None: + return "virtual/kernel:do_deploy" return "" diff --git a/poky/meta/recipes-bsp/opensbi/opensbi_0.3.bb b/poky/meta/recipes-bsp/opensbi/opensbi_0.4.bb index 2b4fb97df..068ae762d 100644 --- a/poky/meta/recipes-bsp/opensbi/opensbi_0.3.bb +++ b/poky/meta/recipes-bsp/opensbi/opensbi_0.4.bb @@ -1,17 +1,16 @@ SUMMARY = "RISC-V Open Source Supervisor Binary Interface (OpenSBI)" DESCRIPTION = "OpenSBI aims to provide an open-source and extensible implementation of the RISC-V SBI specification for a platform specific firmware (M-mode) and a general purpose OS, hypervisor or bootloader (S-mode or HS-mode). OpenSBI implementation can be easily extended by RISC-V platform or System-on-Chip vendors to fit a particular hadware configuration." LICENSE = "BSD-2-Clause" -LIC_FILES_CHKSUM = "file://COPYING.BSD;md5=c36118b4f615f9da37635f2a7ac8ccaf" +LIC_FILES_CHKSUM = "file://COPYING.BSD;md5=42dd9555eb177f35150cf9aa240b61e5" DEPENDS += "dtc-native" require opensbi-payloads.inc inherit autotools-brokensep -SRCREV = "ca20ac0cd4c099006d4eea4d9ac7bd7b58e2ae0f" +SRCREV = "ce228ee0919deb9957192d723eecc8aaae2697c6" SRC_URI = "git://github.com/riscv/opensbi.git \ file://0001-Makefile-Don-t-specify-mabi-or-march.patch \ - file://0002-lib-Create-a-sbi_ipi_data-structure.patch \ " S = "${WORKDIR}/git" @@ -32,18 +31,22 @@ do_install_append() { rm -r ${D}/include rm -r ${D}/platform/${RISCV_SBI_PLAT}/lib rm -r ${D}/platform/${RISCV_SBI_PLAT}/firmware/payloads + rm -r ${D}/lib } do_deploy () { install -d ${DEPLOY_DIR_IMAGE} install -m 755 ${D}/platform/${RISCV_SBI_PLAT}/firmware/fw_payload.* ${DEPLOY_DIR_IMAGE}/ install -m 755 ${D}/platform/${RISCV_SBI_PLAT}/firmware/fw_jump.* ${DEPLOY_DIR_IMAGE}/ + install -m 755 ${D}/platform/${RISCV_SBI_PLAT}/firmware/fw_dynamic.* ${DEPLOY_DIR_IMAGE}/ } addtask deploy after do_install FILES_${PN} += "/platform/${RISCV_SBI_PLAT}/firmware/fw_jump.*" FILES_${PN} += "/platform/${RISCV_SBI_PLAT}/firmware/fw_payload.*" +FILES_${PN} += "/platform/${RISCV_SBI_PLAT}/firmware/fw_dynamic.*" + COMPATIBLE_HOST = "(riscv64|riscv32).*" INHIBIT_PACKAGE_STRIP = "1" |