summaryrefslogtreecommitdiffstats
path: root/meta/recipes-bsp
diff options
context:
space:
mode:
Diffstat (limited to 'meta/recipes-bsp')
-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"