From 76350b19945db458c60d3f233770543c00cb2067 Mon Sep 17 00:00:00 2001 From: Alistair Francis Date: Mon, 8 Jul 2019 09:35:08 -0700 Subject: opensbi: Update from 0.3 to 0.4 The OpenSBI licence was updated to include contributors in the copyright notice. The payload logic has been updated to fix some bugs and handle the new optional dependency on the Linux kernel for device trees Signed-off-by: Alistair Francis Signed-off-by: Richard Purdie --- .../0002-lib-Create-a-sbi_ipi_data-structure.patch | 128 --------------------- meta/recipes-bsp/opensbi/opensbi-payloads.inc | 22 ++-- meta/recipes-bsp/opensbi/opensbi_0.3.bb | 49 -------- meta/recipes-bsp/opensbi/opensbi_0.4.bb | 51 ++++++++ 4 files changed, 63 insertions(+), 187 deletions(-) delete mode 100644 meta/recipes-bsp/opensbi/files/0002-lib-Create-a-sbi_ipi_data-structure.patch delete mode 100644 meta/recipes-bsp/opensbi/opensbi_0.3.bb create mode 100644 meta/recipes-bsp/opensbi/opensbi_0.4.bb (limited to 'meta/recipes-bsp') diff --git a/meta/recipes-bsp/opensbi/files/0002-lib-Create-a-sbi_ipi_data-structure.patch b/meta/recipes-bsp/opensbi/files/0002-lib-Create-a-sbi_ipi_data-structure.patch deleted file mode 100644 index 3c846bde62..0000000000 --- a/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 -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 ---- - 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 - -+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/meta/recipes-bsp/opensbi/opensbi-payloads.inc b/meta/recipes-bsp/opensbi/opensbi-payloads.inc index 7828599ce4..b9714a7acb 100644 --- a/meta/recipes-bsp/opensbi/opensbi-payloads.inc +++ b/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/meta/recipes-bsp/opensbi/opensbi_0.3.bb b/meta/recipes-bsp/opensbi/opensbi_0.3.bb deleted file mode 100644 index 2b4fb97df2..0000000000 --- a/meta/recipes-bsp/opensbi/opensbi_0.3.bb +++ /dev/null @@ -1,49 +0,0 @@ -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" -DEPENDS += "dtc-native" - -require opensbi-payloads.inc - -inherit autotools-brokensep - -SRCREV = "ca20ac0cd4c099006d4eea4d9ac7bd7b58e2ae0f" -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" - -SRC_URI[md5sum] = "621f38d8205ef5fb185e4055025e73df" -SRC_URI[sha256sum] = "07f18b73abf3b85aabe5bead19a923716c100d30eb58033459f39c3a224be300" - -EXTRA_OEMAKE += "PLATFORM=${RISCV_SBI_PLAT} I=${D}" -# If RISCV_SBI_PAYLOAD is set then include it as a payload -EXTRA_OEMAKE_append = " ${@riscv_get_extra_oemake_image(d)} ${@riscv_get_extra_oemake_fdt(d)}" - -# Required if specifying a custom payload -do_compile[depends] += "${@riscv_get_do_compile_depends(d)}" - -do_install_append() { - # In the future these might be required as a dependency for other packages. - # At the moment just delete them to avoid warnings - rm -r ${D}/include - rm -r ${D}/platform/${RISCV_SBI_PLAT}/lib - rm -r ${D}/platform/${RISCV_SBI_PLAT}/firmware/payloads -} - -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}/ -} - -addtask deploy after do_install - -FILES_${PN} += "/platform/${RISCV_SBI_PLAT}/firmware/fw_jump.*" -FILES_${PN} += "/platform/${RISCV_SBI_PLAT}/firmware/fw_payload.*" - -COMPATIBLE_HOST = "(riscv64|riscv32).*" -INHIBIT_PACKAGE_STRIP = "1" diff --git a/meta/recipes-bsp/opensbi/opensbi_0.4.bb b/meta/recipes-bsp/opensbi/opensbi_0.4.bb new file mode 100644 index 0000000000..139718c72b --- /dev/null +++ b/meta/recipes-bsp/opensbi/opensbi_0.4.bb @@ -0,0 +1,51 @@ +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=42dd9555eb177f35150cf9aa240b61e5" +DEPENDS += "dtc-native" + +require opensbi-payloads.inc + +inherit autotools-brokensep + +SRCREV = "ce228ee0919deb9957192d723eecc8aaae2697c6" +SRC_URI = "git://github.com/riscv/opensbi.git \ + file://0001-Makefile-Don-t-specify-mabi-or-march.patch \ + " + +S = "${WORKDIR}/git" + +SRC_URI[md5sum] = "621f38d8205ef5fb185e4055025e73df" +SRC_URI[sha256sum] = "07f18b73abf3b85aabe5bead19a923716c100d30eb58033459f39c3a224be300" + +EXTRA_OEMAKE += "PLATFORM=${RISCV_SBI_PLAT} I=${D}" +# If RISCV_SBI_PAYLOAD is set then include it as a payload +EXTRA_OEMAKE_append = " ${@riscv_get_extra_oemake_image(d)} ${@riscv_get_extra_oemake_fdt(d)}" + +# Required if specifying a custom payload +do_compile[depends] += "${@riscv_get_do_compile_depends(d)}" + +do_install_append() { + # In the future these might be required as a dependency for other packages. + # At the moment just delete them to avoid warnings + rm -r ${D}/include + rm -r ${D}/platform/${RISCV_SBI_PLAT}/lib + rm -r ${D}/platform/${RISCV_SBI_PLAT}/firmware/payloads +} + +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" -- cgit 1.2.3-korg