firmware: Introduce "options" in "struct sbi_scratch"

Introduce "options" in "struct sbi_scratch" and firmware can update
it based on optional compile time flags before calling sbi_init().

Signed-off-by: Bin Meng <bmeng.cn@gmail.com>
This commit is contained in:
Bin Meng
2019-03-27 22:57:20 +08:00
committed by Anup Patel
parent e921fc2691
commit 132f3e024b
3 changed files with 14 additions and 0 deletions

View File

@@ -81,6 +81,12 @@ _scratch_init:
la a4, _hartid_to_scratch
REG_S a4, SBI_SCRATCH_HARTID_TO_SCRATCH_OFFSET(tp)
REG_S zero, SBI_SCRATCH_TMP0_OFFSET(tp)
#ifdef FW_OPTIONS
li a4, FW_OPTIONS
REG_S a4, SBI_SCRATCH_OPTIONS_OFFSET(tp)
#else
REG_S zero, SBI_SCRATCH_OPTIONS_OFFSET(tp)
#endif
add t1, t1, t2
blt t1, s7, _scratch_init

View File

@@ -50,3 +50,7 @@ endif
ifdef FW_PAYLOAD_FDT_ADDR
firmware-genflags-$(FW_PAYLOAD) += -DFW_PAYLOAD_FDT_ADDR=$(FW_PAYLOAD_FDT_ADDR)
endif
ifdef FW_OPTIONS
firmware-genflags-y += -DFW_OPTIONS=$(FW_OPTIONS)
endif

View File

@@ -30,6 +30,8 @@
#define SBI_SCRATCH_HARTID_TO_SCRATCH_OFFSET (7 * __SIZEOF_POINTER__)
/** Offset of tmp0 member in sbi_scratch */
#define SBI_SCRATCH_TMP0_OFFSET (8 * __SIZEOF_POINTER__)
/** Offset of options member in sbi_scratch */
#define SBI_SCRATCH_OPTIONS_OFFSET (9 * __SIZEOF_POINTER__)
/** sbi_ipi_data is located behind sbi_scratch. This struct is not packed. */
/** Offset of ipi_type in sbi_ipi_data */
@@ -64,6 +66,8 @@ struct sbi_scratch {
unsigned long hartid_to_scratch;
/** Temporary storage */
unsigned long tmp0;
/** Options for OpenSBI library */
unsigned long options;
} __packed;
/** Get pointer to sbi_scratch for current HART */