summaryrefslogtreecommitdiffstats
path: root/meta/recipes-bsp/opensbi
diff options
context:
space:
mode:
authorAlistair Francis <alistair.francis@wdc.com>2019-07-08 09:35:08 -0700
committerRichard Purdie <richard.purdie@linuxfoundation.org>2019-07-10 09:56:22 +0100
commit6085e491fba66708ee0e5bc1385c21845a3748ad (patch)
tree5d6889584abe30fcc8965eb192119430e397f2ca /meta/recipes-bsp/opensbi
parent505c70357d8e354748c326c22c82677dd51fa57a (diff)
downloadpoky-6085e491fba66708ee0e5bc1385c21845a3748ad.tar.gz
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 (From OE-Core rev: 76350b19945db458c60d3f233770543c00cb2067) Signed-off-by: Alistair Francis <alistair.francis@wdc.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/recipes-bsp/opensbi')
-rw-r--r--meta/recipes-bsp/opensbi/files/0002-lib-Create-a-sbi_ipi_data-structure.patch128
-rw-r--r--meta/recipes-bsp/opensbi/opensbi-payloads.inc22
-rw-r--r--meta/recipes-bsp/opensbi/opensbi_0.4.bb (renamed from meta/recipes-bsp/opensbi/opensbi_0.3.bb)8
3 files changed, 17 insertions, 141 deletions
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 @@
1From 508a27204cbbca0a9430236e56681e5e0d343fb9 Mon Sep 17 00:00:00 2001
2From: Alistair Francis <alistair.francis@wdc.com>
3Date: Fri, 8 Mar 2019 11:22:22 -0800
4Subject: [PATCH] lib: Create a sbi_ipi_data structure
5
6Create a sbi_ipi_data structure that holds unpacked IPI information. At
7the same time remove ipi_type from the sbi_scratch struct and use a
8fixed offset to access it.
9
10This structure fits in behind the sbi_scratch structure.
11
12This fixes https://github.com/riscv/opensbi/issues/81
13
14Upstream-Status: Backport [https://github.com/riscv/opensbi/commit/508a27204cbbca0a9430236e56681e5e0d343fb9]
15Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
16---
17 firmware/fw_base.S | 1 -
18 include/sbi/sbi_scratch.h | 23 ++++++++++++++++-------
19 lib/sbi_ipi.c | 8 +++++---
20 3 files changed, 21 insertions(+), 11 deletions(-)
21
22diff --git a/firmware/fw_base.S b/firmware/fw_base.S
23index cf2c6a0..69cfc90 100644
24--- a/firmware/fw_base.S
25+++ b/firmware/fw_base.S
26@@ -183,7 +183,6 @@ _start_warm:
27 REG_S a4, SBI_SCRATCH_PLATFORM_ADDR_OFFSET(tp)
28 la a4, _hartid_to_scratch
29 REG_S a4, SBI_SCRATCH_HARTID_TO_SCRATCH_OFFSET(tp)
30- REG_S zero, SBI_SCRATCH_IPI_TYPE_OFFSET(tp)
31 REG_S zero, SBI_SCRATCH_TMP0_OFFSET(tp)
32
33 /* Setup stack */
34diff --git a/include/sbi/sbi_scratch.h b/include/sbi/sbi_scratch.h
35index 8389ef3..70ab384 100644
36--- a/include/sbi/sbi_scratch.h
37+++ b/include/sbi/sbi_scratch.h
38@@ -28,17 +28,24 @@
39 #define SBI_SCRATCH_PLATFORM_ADDR_OFFSET (6 * __SIZEOF_POINTER__)
40 /** Offset of hartid_to_scratch member in sbi_scratch */
41 #define SBI_SCRATCH_HARTID_TO_SCRATCH_OFFSET (7 * __SIZEOF_POINTER__)
42-/** Offset of ipi_type member in sbi_scratch */
43-#define SBI_SCRATCH_IPI_TYPE_OFFSET (8 * __SIZEOF_POINTER__)
44 /** Offset of tmp0 member in sbi_scratch */
45-#define SBI_SCRATCH_TMP0_OFFSET (9 * __SIZEOF_POINTER__)
46-/** Maximum size of sbi_scratch */
47-#define SBI_SCRATCH_SIZE 256
48+#define SBI_SCRATCH_TMP0_OFFSET (8 * __SIZEOF_POINTER__)
49+
50+/** sbi_ipi_data is located behind sbi_scratch. This struct is not packed. */
51+/** Offset of ipi_type in sbi_ipi_data */
52+#define SBI_IPI_DATA_IPI_TYPE_OFFSET (15 * __SIZEOF_POINTER__)
53+
54+/** Maximum size of sbi_scratch and sbi_ipi_data */
55+#define SBI_SCRATCH_SIZE (32 * __SIZEOF_POINTER__)
56
57 #ifndef __ASSEMBLY__
58
59 #include <sbi/sbi_types.h>
60
61+struct sbi_ipi_data {
62+ unsigned long ipi_type;
63+};
64+
65 /** Representation of per-HART scratch space */
66 struct sbi_scratch {
67 /** Start (or base) address of firmware linked to OpenSBI library */
68@@ -57,8 +64,6 @@ struct sbi_scratch {
69 unsigned long platform_addr;
70 /** Address of HART ID to sbi_scratch conversion function */
71 unsigned long hartid_to_scratch;
72- /** IPI type (or flags) */
73- unsigned long ipi_type;
74 /** Temporary storage */
75 unsigned long tmp0;
76 } __packed;
77@@ -71,6 +76,10 @@ struct sbi_scratch {
78 #define sbi_scratch_thishart_arg1_ptr() \
79 ((void *)(sbi_scratch_thishart_ptr()->next_arg1))
80
81+/** Get pointer to sbi_ipi_data from sbi_scratch */
82+#define sbi_ipi_data_ptr(scratch) \
83+((struct sbi_ipi_data *)(void*)scratch + SBI_IPI_DATA_IPI_TYPE_OFFSET)
84+
85 #endif
86
87 #endif
88diff --git a/lib/sbi_ipi.c b/lib/sbi_ipi.c
89index 0e371d7..e0f2a19 100644
90--- a/lib/sbi_ipi.c
91+++ b/lib/sbi_ipi.c
92@@ -31,7 +31,7 @@ static int sbi_ipi_send(struct sbi_scratch *scratch, u32 hartid, u32 event)
93 * trigger the interrupt
94 */
95 remote_scratch = sbi_hart_id_to_scratch(scratch, hartid);
96- atomic_raw_set_bit(event, &remote_scratch->ipi_type);
97+ atomic_raw_set_bit(event, &sbi_ipi_data_ptr(remote_scratch)->ipi_type);
98 mb();
99 sbi_platform_ipi_send(plat, hartid);
100 if (event != SBI_IPI_EVENT_SOFT)
101@@ -80,7 +80,7 @@ void sbi_ipi_process(struct sbi_scratch *scratch)
102 sbi_platform_ipi_clear(plat, hartid);
103
104 do {
105- ipi_type = scratch->ipi_type;
106+ ipi_type = sbi_ipi_data_ptr(scratch)->ipi_type;
107 rmb();
108 ipi_event = __ffs(ipi_type);
109 switch (ipi_event) {
110@@ -97,12 +97,14 @@ void sbi_ipi_process(struct sbi_scratch *scratch)
111 sbi_hart_hang();
112 break;
113 };
114- ipi_type = atomic_raw_clear_bit(ipi_event, &scratch->ipi_type);
115+ ipi_type = atomic_raw_clear_bit(ipi_event, &sbi_ipi_data_ptr(scratch)->ipi_type);
116 } while(ipi_type > 0);
117 }
118
119 int sbi_ipi_init(struct sbi_scratch *scratch, bool cold_boot)
120 {
121+ sbi_ipi_data_ptr(scratch)->ipi_type = 0x00;
122+
123 /* Enable software interrupts */
124 csr_set(CSR_MIE, MIP_MSIP);
125
126--
1272.22.0
128
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):
5 if sbi_payload is None: 5 if sbi_payload is None:
6 return "" 6 return ""
7 7
8 if d.getVar('RISCV_SBI_PAYLOAD'): 8 return "FW_PAYLOAD_PATH=" + deploy_dir + "/" + sbi_payload
9 return "FW_PAYLOAD_PATH=" + deploy_dir + "/" + sbi_payload
10
11 return ""
12 9
13def riscv_get_extra_oemake_fdt(d): 10def riscv_get_extra_oemake_fdt(d):
14 sbi_fdt_payload = d.getVar('RISCV_SBI_FDT') 11 sbi_fdt_payload = d.getVar('RISCV_SBI_FDT')
@@ -17,14 +14,11 @@ def riscv_get_extra_oemake_fdt(d):
17 if sbi_fdt_payload is None: 14 if sbi_fdt_payload is None:
18 return "" 15 return ""
19 16
20 if d.getVar('RISCV_SBI_PAYLOAD'): 17 return "FW_PAYLOAD_FDT_PATH=" + deploy_dir + "/" + sbi_fdt_payload
21 # This is internal to openSBI, not a full path
22 return "FW_PAYLOAD_FDT=" + sbi_fdt_payload
23
24 return ""
25 18
26def riscv_get_do_compile_depends(d): 19def riscv_get_do_compile_depends(d):
27 sbi_payload = d.getVar('RISCV_SBI_PAYLOAD') 20 sbi_payload = d.getVar('RISCV_SBI_PAYLOAD')
21 sbi_fdt_payload = d.getVar('RISCV_SBI_FDT')
28 22
29 if sbi_payload is None: 23 if sbi_payload is None:
30 return "" 24 return ""
@@ -32,6 +26,14 @@ def riscv_get_do_compile_depends(d):
32 if 'linux' in sbi_payload or 'Image' in sbi_payload: 26 if 'linux' in sbi_payload or 'Image' in sbi_payload:
33 return "virtual/kernel:do_deploy" 27 return "virtual/kernel:do_deploy"
34 if 'u-boot.bin' in sbi_payload: 28 if 'u-boot.bin' in sbi_payload:
35 return "virtual/bootloader:do_deploy" 29 # If we want U-Boot and a FDT then we need to depend on U-Boot and
30 # the kernel
31 if sbi_fdt_payload is not None:
32 return "virtual/bootloader:do_deploy virtual/kernel:do_deploy"
33 else:
34 return "virtual/bootloader:do_deploy"
35 # If we want a custom FDT then we need to depend on the kernel
36 if sbi_fdt_payload is not None:
37 return "virtual/kernel:do_deploy"
36 38
37 return "" 39 return ""
diff --git a/meta/recipes-bsp/opensbi/opensbi_0.3.bb b/meta/recipes-bsp/opensbi/opensbi_0.4.bb
index 2b4fb97df2..139718c72b 100644
--- a/meta/recipes-bsp/opensbi/opensbi_0.3.bb
+++ b/meta/recipes-bsp/opensbi/opensbi_0.4.bb
@@ -1,17 +1,16 @@
1SUMMARY = "RISC-V Open Source Supervisor Binary Interface (OpenSBI)" 1SUMMARY = "RISC-V Open Source Supervisor Binary Interface (OpenSBI)"
2DESCRIPTION = "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." 2DESCRIPTION = "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."
3LICENSE = "BSD-2-Clause" 3LICENSE = "BSD-2-Clause"
4LIC_FILES_CHKSUM = "file://COPYING.BSD;md5=c36118b4f615f9da37635f2a7ac8ccaf" 4LIC_FILES_CHKSUM = "file://COPYING.BSD;md5=42dd9555eb177f35150cf9aa240b61e5"
5DEPENDS += "dtc-native" 5DEPENDS += "dtc-native"
6 6
7require opensbi-payloads.inc 7require opensbi-payloads.inc
8 8
9inherit autotools-brokensep 9inherit autotools-brokensep
10 10
11SRCREV = "ca20ac0cd4c099006d4eea4d9ac7bd7b58e2ae0f" 11SRCREV = "ce228ee0919deb9957192d723eecc8aaae2697c6"
12SRC_URI = "git://github.com/riscv/opensbi.git \ 12SRC_URI = "git://github.com/riscv/opensbi.git \
13 file://0001-Makefile-Don-t-specify-mabi-or-march.patch \ 13 file://0001-Makefile-Don-t-specify-mabi-or-march.patch \
14 file://0002-lib-Create-a-sbi_ipi_data-structure.patch \
15 " 14 "
16 15
17S = "${WORKDIR}/git" 16S = "${WORKDIR}/git"
@@ -38,12 +37,15 @@ do_deploy () {
38 install -d ${DEPLOY_DIR_IMAGE} 37 install -d ${DEPLOY_DIR_IMAGE}
39 install -m 755 ${D}/platform/${RISCV_SBI_PLAT}/firmware/fw_payload.* ${DEPLOY_DIR_IMAGE}/ 38 install -m 755 ${D}/platform/${RISCV_SBI_PLAT}/firmware/fw_payload.* ${DEPLOY_DIR_IMAGE}/
40 install -m 755 ${D}/platform/${RISCV_SBI_PLAT}/firmware/fw_jump.* ${DEPLOY_DIR_IMAGE}/ 39 install -m 755 ${D}/platform/${RISCV_SBI_PLAT}/firmware/fw_jump.* ${DEPLOY_DIR_IMAGE}/
40 install -m 755 ${D}/platform/${RISCV_SBI_PLAT}/firmware/fw_dynamic.* ${DEPLOY_DIR_IMAGE}/
41} 41}
42 42
43addtask deploy after do_install 43addtask deploy after do_install
44 44
45FILES_${PN} += "/platform/${RISCV_SBI_PLAT}/firmware/fw_jump.*" 45FILES_${PN} += "/platform/${RISCV_SBI_PLAT}/firmware/fw_jump.*"
46FILES_${PN} += "/platform/${RISCV_SBI_PLAT}/firmware/fw_payload.*" 46FILES_${PN} += "/platform/${RISCV_SBI_PLAT}/firmware/fw_payload.*"
47FILES_${PN} += "/platform/${RISCV_SBI_PLAT}/firmware/fw_dynamic.*"
48
47 49
48COMPATIBLE_HOST = "(riscv64|riscv32).*" 50COMPATIBLE_HOST = "(riscv64|riscv32).*"
49INHIBIT_PACKAGE_STRIP = "1" 51INHIBIT_PACKAGE_STRIP = "1"