RISCV_EFI_BOOT_PROTOCOL support in linux
cover RISCV_EFI_BOOT_PROTOCOL support in linux
This patch adds support for getting the boot hart ID using new RISCV_EFI_BOOT_PROTOCOL in linux efi stub. While there is an existing solution of passing the boot hart ID through Device Tree, it doesn't work for ACPI. Hence an EFI protocol protocol is recommended which works for both DT and ACPI based platforms.
The latest draft spec of this new protocol is available at
https://github.com/riscv-non-isa/riscv-uefi/releases/download/1.0-rc2/RISCV_UEFI_PROTOCOL-spec.pdf
This linux ptach can be found in:riscv_boot_protocol_rfc_v1 branch at https://github.com/vlsunil/linux.git
This is tested in qemu with both u-boot and edk2 firmware changes. To test this patch with u-boot, we need u-boot to support this new protocol which can be found in:riscv_boot_protocol_rfc_v1 branch at https://github.com/vlsunil/u-boot.git
Sunil V L (1):
riscv/efi_stub: Add support for RISCV_EFI_BOOT_PROTOCOL
drivers/firmware/efi/libstub/efistub.h | 15 ++++++++++++ drivers/firmware/efi/libstub/riscv-stub.c | 28 ++++++++++++++++++++--- include/linux/efi.h | 1 + 3 files changed, 41 insertions(+), 3 deletions(-)
Signature · 1 line
2.25.1
RFC PATCH 1/1 riscv/efi_stub: Add support for RISCV_EFI_BOOT_PROTOCOL
This patch adds the support for getting the boot hart ID in Linux EFI stub using RISCV_EFI_BOOT_PROTOCOL.
--- drivers/firmware/efi/libstub/efistub.h | 15 ++++++++++++ drivers/firmware/efi/libstub/riscv-stub.c | 28 ++++++++++++++++++++--- include/linux/efi.h | 1 + 3 files changed, 41 insertions(+), 3 deletions(-)
drivers/firmware/efi/libstub/efistub.h +15 -0
@@ -720,6 +720,21 @@ union efi_tcg2_protocol { } mixed_mode; }; +typedef union riscv_efi_boot_protocol riscv_efi_boot_protocol_t ; + +union riscv_efi_boot_protocol { +struct { +u64 revision; + efi_status_t (__efiapi *get_boot_hartid)( + riscv_efi_boot_protocol_t *, + size_t *); + }; +struct { +u32 revision; +u32 get_boot_hartid; + } mixed_mode; +}; +typedef union efi_load_file_protocol efi_load_file_protocol_t ;typedef union efi_load_file_protocol efi_load_file2_protocol_t ;
drivers/firmware/efi/libstub/riscv-stub.c +25 -3
@@ -46,12 +46,34 @@ static u32 get_boot_hartid_from_fdt(void)return fdt32_to_cpu (*prop); } +static u32 get_boot_hartid_from_efi (void ) +{ +efi_guid_t boot_protocol_guid =RISCV_EFI_BOOT_PROTOCOL_GUID ; +efi_status_t status; +riscv_efi_boot_protocol_t *boot_protocol; +size_t boot_hart_id; + + status =efi_bs_call (locate_protocol, &boot_protocol_guid,NULL , + (void **)&boot_protocol); +if (status ==EFI_SUCCESS ) { + status =efi_call_proto (boot_protocol, + get_boot_hartid, &boot_hart_id); +if (status ==EFI_SUCCESS ) { +return (u32 )boot_hart_id; + } + } +return U32_MAX ; +} +efi_status_t check_platform_features (void ) { - hartid =get_boot_hartid_from_fdt (); + hartid =get_boot_hartid_from_efi ();if (hartid ==U32_MAX ) { -efi_err ("/chosen/boot-hartid missing or invalid!\n" ); -return EFI_UNSUPPORTED ; + hartid =get_boot_hartid_from_fdt (); +if (hartid ==U32_MAX ) { +efi_err ("/chosen/boot-hartid missing or invalid!\n" ); +return EFI_UNSUPPORTED ; + } }return EFI_SUCCESS ; }
include/linux/efi.h +1 -0
@@ -380,6 +380,7 @@ void efi_native_runtime_setup(void);#define EFI_CONSOLE_OUT_DEVICE_GUID EFI_GUID(0xd3b36f2c, 0xd551, 0x11d4, 0x9a, 0x46, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d)#define APPLE_PROPERTIES_PROTOCOL_GUID EFI_GUID(0x91bd12fe, 0xf6c3, 0x44fb, 0xa5, 0xb7, 0x51, 0x22, 0xab, 0x30, 0x3a, 0xe0)#define EFI_TCG2_PROTOCOL_GUID EFI_GUID(0x607f766c, 0x7455, 0x42be, 0x93, 0x0b, 0xe4, 0xd7, 0x6d, 0xb2, 0x72, 0x0f) +#define RISCV_EFI_BOOT_PROTOCOL_GUID EFI_GUID(0xccd15fec, 0x6f73, 0x4eec, 0x83, 0x95, 0x3e, 0x69, 0xe4, 0xb9, 0x40, 0xbf)#define EFI_LOAD_FILE_PROTOCOL_GUID EFI_GUID(0x56ec3091, 0x954c, 0x11d2, 0x8e, 0x3f, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b)#define EFI_LOAD_FILE2_PROTOCOL_GUID EFI_GUID(0x4006c0c1, 0xfcb3, 0x403e, 0x99, 0x6d, 0x4a, 0x6c, 0x87, 0x24, 0xe0, 0x6d)#define EFI_RT_PROPERTIES_TABLE_GUID EFI_GUID(0xeb66918a, 0x7eef, 0x402a, 0x84, 0x2e, 0x93, 0x1d, 0x21, 0xc3, 0x8a, 0xe9)
Signature · 1 line
2.25.1
Ard Biesheuvel
maintainerRe: [RFC PATCH 1/1] riscv/efi_stub: Add support for RISCV_EFI_BOOT_PROTOCOL
Hello Sunil,
Quoted 24 lines · Sunil V L
This patch adds the support for getting the boot hart ID in Linux EFI stub using
RISCV_EFI_BOOT_PROTOCOL.Signed-off-by Sunil V L <[email protected]>--- drivers/firmware/efi/libstub/efistub.h | 15 ++++++++++++ drivers/firmware/efi/libstub/riscv-stub.c | 28 ++++++++++++++++++++--- include/linux/efi.h | 1 + 3 files changed, 41 insertions(+), 3 deletions(-)drivers/firmware/efi/libstub/efistub.h +5
-0@@ -720,6 +720,21 @@ union efi_tcg2_protocol { } mixed_mode; }; +typedef union riscv_efi_boot_protocol riscv_efi_boot_protocol_t ; + +union riscv_efi_boot_protocol { +struct { +u64 revision;
drivers/firmware/efi/libstub/efistub.h union efi_tcg2_protocol { · line 737
Quoted 10 lines
drivers/firmware/efi/libstub/efistub.h +10
-0+efi_status_t (__efiapi *get_boot_hartid)( + riscv_efi_boot_protocol_t *, + size_t *); + }; +struct { +u32 revision; +u32 get_boot_hartid; + } mixed_mode; +}; +
You don't the mixed mode member here - this is for X64 kernels on IA32 firmware only.
Quoted 60 lines
drivers/firmware/efi/libstub/efistub.h +0
-0typedef union efi_load_file_protocol efi_load_file_protocol_t ;typedef union efi_load_file_protocol efi_load_file2_protocol_t ;drivers/firmware/efi/libstub/riscv-stub.c +25
-3@@ -46,12 +46,34 @@ static u32 get_boot_hartid_from_fdt(void)return fdt32_to_cpu (*prop); } +static u32 get_boot_hartid_from_efi (void ) +{ +efi_guid_t boot_protocol_guid =RISCV_EFI_BOOT_PROTOCOL_GUID ; +efi_status_t status; +riscv_efi_boot_protocol_t *boot_protocol; +size_t boot_hart_id; + + status =efi_bs_call (locate_protocol, &boot_protocol_guid,NULL , + (void **)&boot_protocol); +if (status ==EFI_SUCCESS ) { + status =efi_call_proto (boot_protocol, + get_boot_hartid, &boot_hart_id); +if (status ==EFI_SUCCESS ) { +return (u32 )boot_hart_id; + } + } +return U32_MAX ; +} +efi_status_t check_platform_features (void ) { - hartid =get_boot_hartid_from_fdt (); + hartid =get_boot_hartid_from_efi ();if (hartid ==U32_MAX ) { -efi_err ("/chosen/boot-hartid missing or invalid!\n" ); -return EFI_UNSUPPORTED ; + hartid =get_boot_hartid_from_fdt (); +if (hartid ==U32_MAX ) { +efi_err ("/chosen/boot-hartid missing or invalid!\n" ); +return EFI_UNSUPPORTED ; + } }return EFI_SUCCESS ; }include/linux/efi.h +1
-1@@ -380,6 +380,7 @@ void efi_native_runtime_setup(void);#define EFI_CONSOLE_OUT_DEVICE_GUID EFI_GUID(0xd3b36f2c, 0xd551, 0x11d4, 0x9a, 0x46, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d)#define APPLE_PROPERTIES_PROTOCOL_GUID EFI_GUID(0x91bd12fe, 0xf6c3, 0x44fb, 0xa5, 0xb7, 0x51, 0x22, 0xab, 0x30, 0x3a, 0xe0)#define EFI_TCG2_PROTOCOL_GUID EFI_GUID(0x607f766c, 0x7455, 0x42be, 0x93, 0x0b, 0xe4, 0xd7, 0x6d, 0xb2, 0x72, 0x0f) +#define RISCV_EFI_BOOT_PROTOCOL_GUID EFI_GUID(0xccd15fec, 0x6f73, 0x4eec, 0x83, 0x95, 0x3e, 0x69, 0xe4, 0xb9, 0x40, 0xbf)#define EFI_LOAD_FILE_PROTOCOL_GUID EFI_GUID(0x56ec3091, 0x954c, 0x11d2, 0x8e, 0x3f, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b)#define EFI_LOAD_FILE2_PROTOCOL_GUID EFI_GUID(0x4006c0c1, 0xfcb3, 0x403e, 0x99, 0x6d, 0x4a, 0x6c, 0x87, 0x24, 0xe0, 0x6d)#define EFI_RT_PROPERTIES_TABLE_GUID EFI_GUID(0xeb66918a, 0x7eef, 0x402a, 0x84, 0x2e, 0x93, 0x1d, 0x21, 0xc3, 0x8a, 0xe9) --2.25.1
Re: [RFC PATCH 1/1] riscv/efi_stub: Add support for RISCV_EFI_BOOT_PROTOCOL
Quoted 32 lines · Ard Biesheuvel
Hello Sunil,
Quoted 29 lines · Sunil V L
This patch adds the support for getting the boot hart ID in Linux EFI stub using
RISCV_EFI_BOOT_PROTOCOL.Signed-off-by Sunil V L <[email protected]>--- drivers/firmware/efi/libstub/efistub.h | 15 ++++++++++++ drivers/firmware/efi/libstub/riscv-stub.c | 28 ++++++++++++++++++++--- include/linux/efi.h | 1 + 3 files changed, 41 insertions(+), 3 deletions(-)drivers/firmware/efi/libstub/efistub.h +10
-0@@ -720,6 +720,21 @@ union efi_tcg2_protocol { } mixed_mode; }; +typedef union riscv_efi_boot_protocol riscv_efi_boot_protocol_t ; + +union riscv_efi_boot_protocol { +struct { +u64 revision; + efi_status_t (__efiapi *get_boot_hartid)( + riscv_efi_boot_protocol_t *, + size_t *); + }; +struct {
Quoted 8 lines
drivers/firmware/efi/libstub/efistub.h union efi_tcg2_protocol { · line 737
Quoted 5 lines
drivers/firmware/efi/libstub/efistub.h +5
-0+u32 revision; +u32 get_boot_hartid; + } mixed_mode; +}; +You don't the mixed mode member here - this is for X64 kernels on IA32 firmware only.
Ah OK. Thanks for the feedback, Ard. Will remove it in next version.
Thanks
Sunil
Quoted 61 lines
Quoted 61 lines
drivers/firmware/efi/libstub/efistub.h +0
-0typedef union efi_load_file_protocol efi_load_file_protocol_t ;typedef union efi_load_file_protocol efi_load_file2_protocol_t ;drivers/firmware/efi/libstub/riscv-stub.c +25
-3@@ -46,12 +46,34 @@ static u32 get_boot_hartid_from_fdt(void)return fdt32_to_cpu (*prop); } +static u32 get_boot_hartid_from_efi (void ) +{ +efi_guid_t boot_protocol_guid =RISCV_EFI_BOOT_PROTOCOL_GUID ; +efi_status_t status; +riscv_efi_boot_protocol_t *boot_protocol; +size_t boot_hart_id; + + status =efi_bs_call (locate_protocol, &boot_protocol_guid,NULL , + (void **)&boot_protocol); +if (status ==EFI_SUCCESS ) { + status =efi_call_proto (boot_protocol, + get_boot_hartid, &boot_hart_id); +if (status ==EFI_SUCCESS ) { +return (u32 )boot_hart_id; + } + } +return U32_MAX ; +} +efi_status_t check_platform_features (void ) { - hartid =get_boot_hartid_from_fdt (); + hartid =get_boot_hartid_from_efi ();if (hartid ==U32_MAX ) { -efi_err ("/chosen/boot-hartid missing or invalid!\n" ); -return EFI_UNSUPPORTED ; + hartid =get_boot_hartid_from_fdt (); +if (hartid ==U32_MAX ) { +efi_err ("/chosen/boot-hartid missing or invalid!\n" ); +return EFI_UNSUPPORTED ; + } }return EFI_SUCCESS ; }include/linux/efi.h +1
-1@@ -380,6 +380,7 @@ void efi_native_runtime_setup(void);#define EFI_CONSOLE_OUT_DEVICE_GUID EFI_GUID(0xd3b36f2c, 0xd551, 0x11d4, 0x9a, 0x46, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d)#define APPLE_PROPERTIES_PROTOCOL_GUID EFI_GUID(0x91bd12fe, 0xf6c3, 0x44fb, 0xa5, 0xb7, 0x51, 0x22, 0xab, 0x30, 0x3a, 0xe0)#define EFI_TCG2_PROTOCOL_GUID EFI_GUID(0x607f766c, 0x7455, 0x42be, 0x93, 0x0b, 0xe4, 0xd7, 0x6d, 0xb2, 0x72, 0x0f) +#define RISCV_EFI_BOOT_PROTOCOL_GUID EFI_GUID(0xccd15fec, 0x6f73, 0x4eec, 0x83, 0x95, 0x3e, 0x69, 0xe4, 0xb9, 0x40, 0xbf)#define EFI_LOAD_FILE_PROTOCOL_GUID EFI_GUID(0x56ec3091, 0x954c, 0x11d2, 0x8e, 0x3f, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b)#define EFI_LOAD_FILE2_PROTOCOL_GUID EFI_GUID(0x4006c0c1, 0xfcb3, 0x403e, 0x99, 0x6d, 0x4a, 0x6c, 0x87, 0x24, 0xe0, 0x6d)#define EFI_RT_PROPERTIES_TABLE_GUID EFI_GUID(0xeb66918a, 0x7eef, 0x402a, 0x84, 0x2e, 0x93, 0x1d, 0x21, 0xc3, 0x8a, 0xe9) --2.25.1
Re: [RFC PATCH 1/1] riscv/efi_stub: Add support for RISCV_EFI_BOOT_PROTOCOL
In reply to Sunil V LAm 26. Januar 2022 12:06:15 MEZ schrieb Sunil V L <[email protected]>:
Quoted 2 lines
This patch adds the support for getting the boot hart ID in Linux EFI stub using
RISCV_EFI_BOOT_PROTOCOL.
It would be helpful to add a link to the spec in the commit message and maybe a comment that this protocol is needed for the ACPI use case.
Quoted 14 lines
Signed-off-by Sunil V L <[email protected]>---
drivers/firmware/efi/libstub/efistub.h | 15 ++++++++++++ drivers/firmware/efi/libstub/riscv-stub.c | 28 ++++++++++++++++++++--- include/linux/efi.h | 1 + 3 files changed, 41 insertions(+), 3 deletions(-)drivers/firmware/efi/libstub/efistub.h +0
-0@@ -720,6 +720,21 @@ union efi_tcg2_protocol { } mixed_mode;
drivers/firmware/efi/libstub/efistub.h union efi_tcg2_protocol { · line 730
Quoted 10 lines
drivers/firmware/efi/libstub/efistub.h +8
-0}; +typedef union riscv_efi_boot_protocol riscv_efi_boot_protocol_t ; + +union riscv_efi_boot_protocol { +struct { +u64 revision; + efi_status_t (__efiapi *get_boot_hartid)( + riscv_efi_boot_protocol_t *, + size_t *);
I prefer to have parameter names for readability
According to the platform specification mhartid is MXLEN wide. UINTN (size_t) is SXLEN wide.
Does this have any implications on how we define the protocol?
Quoted 14 lines
drivers/firmware/efi/libstub/efistub.h +6
-0+ }; +struct { +u32 revision; + u32 get_boot_hartid;>+ } mixed_mode; +}; +typedef union efi_load_file_protocol efi_load_file_protocol_t ;typedef union efi_load_file_protocol efi_load_file2_protocol_t ;drivers/firmware/efi/libstub/riscv-stub.c +0
-0
drivers/firmware/efi/libstub/riscv-stub.c static u32 get_boot_hartid_from_fdt(void) · line 50
Quoted 5 lines
drivers/firmware/efi/libstub/riscv-stub.c +2
-0@@ -46,12 +46,34 @@ static u32 get_boot_hartid_from_fdt(void)return fdt32_to_cpu (*prop); } +static u32 get_boot_hartid_from_efi (void ) +{
The returned value must be UINTN /size_t like the protocol. This width must be carried to the legacy entry point of Linux.
Quoted 5 lines
drivers/firmware/efi/libstub/riscv-stub.c +5
-0+efi_guid_t boot_protocol_guid =RISCV_EFI_BOOT_PROTOCOL_GUID ; +efi_status_t status; +riscv_efi_boot_protocol_t *boot_protocol; +size_t boot_hart_id; +
drivers/firmware/efi/libstub/riscv-stub.c static u32 get_boot_hartid_from_fdt(void) · line 65
Quoted 10 lines
drivers/firmware/efi/libstub/riscv-stub.c +10
-0+ status =efi_bs_call (locate_protocol, &boot_protocol_guid,NULL , + (void **)&boot_protocol); +if (status ==EFI_SUCCESS ) { + status =efi_call_proto (boot_protocol, + get_boot_hartid, &boot_hart_id); +if (status ==EFI_SUCCESS ) { +return (u32 )boot_hart_id; + } + } +return U32_MAX ;
U32_MAX is a legal value for the hart id.
drivers/firmware/efi/libstub/riscv-stub.c static u32 get_boot_hartid_from_fdt(void) · line 73
Quoted 11 lines
drivers/firmware/efi/libstub/riscv-stub.c +5
-3+} +efi_status_t check_platform_features (void ) { - hartid =get_boot_hartid_from_fdt (); + hartid =get_boot_hartid_from_efi ();if (hartid ==U32_MAX ) { -efi_err ("/chosen/boot-hartid missing or invalid!\n" ); -return EFI_UNSUPPORTED ; + hartid =get_boot_hartid_from_fdt (); +if (hartid ==U32_MAX ) {
U32_MAX is a legal value for the hart id. Please, separate status and value.
Best regards
Heinrich
Quoted 18 lines
drivers/firmware/efi/libstub/riscv-stub.c +3
-0+efi_err ("/chosen/boot-hartid missing or invalid!\n" ); +return EFI_UNSUPPORTED ; + } }return EFI_SUCCESS ; }include/linux/efi.h +1
-0@@ -380,6 +380,7 @@ void efi_native_runtime_setup(void);#define EFI_CONSOLE_OUT_DEVICE_GUID EFI_GUID(0xd3b36f2c, 0xd551, 0x11d4, 0x9a, 0x46, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d)#define APPLE_PROPERTIES_PROTOCOL_GUID EFI_GUID(0x91bd12fe, 0xf6c3, 0x44fb, 0xa5, 0xb7, 0x51, 0x22, 0xab, 0x30, 0x3a, 0xe0)#define EFI_TCG2_PROTOCOL_GUID EFI_GUID(0x607f766c, 0x7455, 0x42be, 0x93, 0x0b, 0xe4, 0xd7, 0x6d, 0xb2, 0x72, 0x0f) +#define RISCV_EFI_BOOT_PROTOCOL_GUID EFI_GUID(0xccd15fec, 0x6f73, 0x4eec, 0x83, 0x95, 0x3e, 0x69, 0xe4, 0xb9, 0x40, 0xbf)#define EFI_LOAD_FILE_PROTOCOL_GUID EFI_GUID(0x56ec3091, 0x954c, 0x11d2, 0x8e, 0x3f, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b)#define EFI_LOAD_FILE2_PROTOCOL_GUID EFI_GUID(0x4006c0c1, 0xfcb3, 0x403e, 0x99, 0x6d, 0x4a, 0x6c, 0x87, 0x24, 0xe0, 0x6d)#define EFI_RT_PROPERTIES_TABLE_GUID EFI_GUID(0xeb66918a, 0x7eef, 0x402a, 0x84, 0x2e, 0x93, 0x1d, 0x21, 0xc3, 0x8a, 0xe9)
Re: [RFC PATCH 1/1] riscv/efi_stub: Add support for RISCV_EFI_BOOT_PROTOCOL
Quoted 5 lines · Heinrich Schuchardt
Am 26. Januar 2022 12:06:15 MEZ schrieb Sunil V L <[email protected]>:
Quoted 2 lines
This patch adds the support for getting the boot hart ID in Linux EFI stub using
RISCV_EFI_BOOT_PROTOCOL.It would be helpful to add a link to the spec in the commit message and maybe a comment that this protocol is needed for the ACPI use case.
Sure. Will add.
Quoted 17 lines
Quoted 17 lines
Signed-off-by Sunil V L <[email protected]>---
drivers/firmware/efi/libstub/efistub.h | 15 ++++++++++++ drivers/firmware/efi/libstub/riscv-stub.c | 28 ++++++++++++++++++++--- include/linux/efi.h | 1 + 3 files changed, 41 insertions(+), 3 deletions(-)drivers/firmware/efi/libstub/efistub.h +0
-0@@ -720,6 +720,21 @@ union efi_tcg2_protocol { } mixed_mode; };
Quoted 10 lines
drivers/firmware/efi/libstub/efistub.h union efi_tcg2_protocol { · line 730
Quoted 8 lines
drivers/firmware/efi/libstub/efistub.h +8
-0+typedef union riscv_efi_boot_protocol riscv_efi_boot_protocol_t ; + +union riscv_efi_boot_protocol { +struct { +u64 revision; + efi_status_t (__efiapi *get_boot_hartid)( + riscv_efi_boot_protocol_t *, + size_t *);I prefer to have parameter names for readability
Sure. Will add.
Quoted 4 lines
According to the platform specification mhartid is MXLEN wide. UINTN (
size_t) is SXLEN wide.Does this have any implications on how we define the protocol?
I don't think so. EFI and kernel will be at same privilige level. So, it is not really an issue for this protocol.
But when MXLEN > SXLEN (ex: 64 vs 32), then implementation need to ensure hartid value is 32 bit only so that when it is passed from M-mode firmware to S-mode, it gets correct value. But again this is not an issue from this EFI protocol perspective.
Quoted 32 lines
Quoted 15 lines
drivers/firmware/efi/libstub/efistub.h +6
-0+ }; +struct { +u32 revision; + u32 get_boot_hartid;>+ } mixed_mode; +}; +typedef union efi_load_file_protocol efi_load_file_protocol_t ;typedef union efi_load_file_protocol efi_load_file2_protocol_t ;drivers/firmware/efi/libstub/riscv-stub.c +0
-0drivers/firmware/efi/libstub/riscv-stub.c static u32 get_boot_hartid_from_fdt(void) · line 50
Quoted 5 lines
drivers/firmware/efi/libstub/riscv-stub.c +2
-0@@ -46,12 +46,34 @@ static u32 get_boot_hartid_from_fdt(void)return fdt32_to_cpu (*prop); } +static u32 get_boot_hartid_from_efi (void ) +{The returned value must be UINTN /size_t like the protocol. This width must be carried to the legacy entry point of Linux.
Quoted 9 lines
drivers/firmware/efi/libstub/riscv-stub.c +9
-0+efi_guid_t boot_protocol_guid =RISCV_EFI_BOOT_PROTOCOL_GUID ; +efi_status_t status; +riscv_efi_boot_protocol_t *boot_protocol; +size_t boot_hart_id; + + status =efi_bs_call (locate_protocol, &boot_protocol_guid,NULL , + (void **)&boot_protocol); +if (status ==EFI_SUCCESS ) { + status = efi_call_proto(boot_protocol,
Quoted 8 lines
drivers/firmware/efi/libstub/riscv-stub.c static u32 get_boot_hartid_from_fdt(void) · line 65
Quoted 6 lines
drivers/firmware/efi/libstub/riscv-stub.c +6
-0+ get_boot_hartid, &boot_hart_id); +if (status ==EFI_SUCCESS ) { +return (u32 )boot_hart_id; + } + } +return U32_MAX ;
U32_MAXis a legal value for the hart id.
Yeah. This is an existing issue in get_boot_hartid_from_fdt() for which I have sent a fix patch. Once that gets accepted, I will fix get_boot_hartid_from_efi() and send RFC V2 patch.
Quoted 14 lines
drivers/firmware/efi/libstub/riscv-stub.c static u32 get_boot_hartid_from_fdt(void) · line 73
Quoted 12 lines
drivers/firmware/efi/libstub/riscv-stub.c +5
-3+} +efi_status_t check_platform_features (void ) { - hartid =get_boot_hartid_from_fdt (); + hartid =get_boot_hartid_from_efi ();if (hartid ==U32_MAX ) { -efi_err ("/chosen/boot-hartid missing or invalid!\n" ); -return EFI_UNSUPPORTED ; + hartid =get_boot_hartid_from_fdt (); +if (hartid ==U32_MAX ) {
U32_MAXis a legal value for the hart id. Please, separate status and value.
Will fix it.
Thank you very much for the feedback.
Sunil
Quoted 24 lines
Best regards
Heinrich
Quoted 18 lines
drivers/firmware/efi/libstub/riscv-stub.c +3
-0+efi_err ("/chosen/boot-hartid missing or invalid!\n" ); +return EFI_UNSUPPORTED ; + } }return EFI_SUCCESS ; }include/linux/efi.h +1
-0@@ -380,6 +380,7 @@ void efi_native_runtime_setup(void);#define EFI_CONSOLE_OUT_DEVICE_GUID EFI_GUID(0xd3b36f2c, 0xd551, 0x11d4, 0x9a, 0x46, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d)#define APPLE_PROPERTIES_PROTOCOL_GUID EFI_GUID(0x91bd12fe, 0xf6c3, 0x44fb, 0xa5, 0xb7, 0x51, 0x22, 0xab, 0x30, 0x3a, 0xe0)#define EFI_TCG2_PROTOCOL_GUID EFI_GUID(0x607f766c, 0x7455, 0x42be, 0x93, 0x0b, 0xe4, 0xd7, 0x6d, 0xb2, 0x72, 0x0f) +#define RISCV_EFI_BOOT_PROTOCOL_GUID EFI_GUID(0xccd15fec, 0x6f73, 0x4eec, 0x83, 0x95, 0x3e, 0x69, 0xe4, 0xb9, 0x40, 0xbf)#define EFI_LOAD_FILE_PROTOCOL_GUID EFI_GUID(0x56ec3091, 0x954c, 0x11d2, 0x8e, 0x3f, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b)#define EFI_LOAD_FILE2_PROTOCOL_GUID EFI_GUID(0x4006c0c1, 0xfcb3, 0x403e, 0x99, 0x6d, 0x4a, 0x6c, 0x87, 0x24, 0xe0, 0x6d)#define EFI_RT_PROPERTIES_TABLE_GUID EFI_GUID(0xeb66918a, 0x7eef, 0x402a, 0x84, 0x2e, 0x93, 0x1d, 0x21, 0xc3, 0x8a, 0xe9)