* [PATCH 0/1] RISCV_EFI_BOOT_PROTOCOL support in linux @ 2022-03-24 11:25 ` Sunil V L 0 siblings, 0 replies; 8+ messages in thread From: Sunil V L @ 2022-03-24 11:25 UTC (permalink / raw) To: Ard Biesheuvel, Paul Walmsley, Palmer Dabbelt, Albert Ou, Ilias Apalodimas Cc: Heinrich Schuchardt, Atish Patra, Anup Patel, Jessica Clarke, Abner Chang, linux-efi, linux-kernel, linux-riscv, Sunil V L 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 frozen spec of this new protocol is available at https://github.com/riscv-non-isa/riscv-uefi/releases/download/1.0-rc3/RISCV_UEFI_PROTOCOL-spec.pdf This is tested in qemu with both u-boot and edk2. Sunil V L (1): riscv/efi_stub: Add support for RISCV_EFI_BOOT_PROTOCOL drivers/firmware/efi/libstub/efistub.h | 7 ++++++ drivers/firmware/efi/libstub/riscv-stub.c | 29 +++++++++++++++++++---- include/linux/efi.h | 1 + 3 files changed, 32 insertions(+), 5 deletions(-) -- 2.25.1 ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 0/1] RISCV_EFI_BOOT_PROTOCOL support in linux @ 2022-03-24 11:25 ` Sunil V L 0 siblings, 0 replies; 8+ messages in thread From: Sunil V L @ 2022-03-24 11:25 UTC (permalink / raw) To: Ard Biesheuvel, Paul Walmsley, Palmer Dabbelt, Albert Ou, Ilias Apalodimas Cc: Heinrich Schuchardt, Atish Patra, Anup Patel, Jessica Clarke, Abner Chang, linux-efi, linux-kernel, linux-riscv, Sunil V L 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 frozen spec of this new protocol is available at https://github.com/riscv-non-isa/riscv-uefi/releases/download/1.0-rc3/RISCV_UEFI_PROTOCOL-spec.pdf This is tested in qemu with both u-boot and edk2. Sunil V L (1): riscv/efi_stub: Add support for RISCV_EFI_BOOT_PROTOCOL drivers/firmware/efi/libstub/efistub.h | 7 ++++++ drivers/firmware/efi/libstub/riscv-stub.c | 29 +++++++++++++++++++---- include/linux/efi.h | 1 + 3 files changed, 32 insertions(+), 5 deletions(-) -- 2.25.1 _______________________________________________ linux-riscv mailing list linux-riscv@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-riscv ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 1/1] riscv/efi_stub: Add support for RISCV_EFI_BOOT_PROTOCOL 2022-03-24 11:25 ` Sunil V L @ 2022-03-24 11:25 ` Sunil V L -1 siblings, 0 replies; 8+ messages in thread From: Sunil V L @ 2022-03-24 11:25 UTC (permalink / raw) To: Ard Biesheuvel, Paul Walmsley, Palmer Dabbelt, Albert Ou, Ilias Apalodimas Cc: Heinrich Schuchardt, Atish Patra, Anup Patel, Jessica Clarke, Abner Chang, linux-efi, linux-kernel, linux-riscv, Sunil V L, Palmer Dabbelt This patch adds the support for getting the boot hart ID in Linux EFI stub using RISCV_EFI_BOOT_PROTOCOL. This protocol is preferred method over existing DT based solution since it works irrespective of DT or ACPI. The specification of the protocol is hosted at: https://github.com/riscv-non-isa/riscv-uefi Signed-off-by: Sunil V L <sunilvl@ventanamicro.com> Acked-by: Palmer Dabbelt <palmer@rivosinc.com> --- drivers/firmware/efi/libstub/efistub.h | 7 ++++++ drivers/firmware/efi/libstub/riscv-stub.c | 29 +++++++++++++++++++---- include/linux/efi.h | 1 + 3 files changed, 32 insertions(+), 5 deletions(-) diff --git a/drivers/firmware/efi/libstub/efistub.h b/drivers/firmware/efi/libstub/efistub.h index edb77b0621ea..aced62a0907e 100644 --- a/drivers/firmware/efi/libstub/efistub.h +++ b/drivers/firmware/efi/libstub/efistub.h @@ -720,6 +720,13 @@ union efi_tcg2_protocol { } mixed_mode; }; +struct riscv_efi_boot_protocol { + u64 revision; + + efi_status_t (__efiapi * get_boot_hartid)(struct riscv_efi_boot_protocol *this, + size_t *boot_hartid); +}; + typedef union efi_load_file_protocol efi_load_file_protocol_t; typedef union efi_load_file_protocol efi_load_file2_protocol_t; diff --git a/drivers/firmware/efi/libstub/riscv-stub.c b/drivers/firmware/efi/libstub/riscv-stub.c index 9c460843442f..012504f6f9a4 100644 --- a/drivers/firmware/efi/libstub/riscv-stub.c +++ b/drivers/firmware/efi/libstub/riscv-stub.c @@ -23,7 +23,7 @@ typedef void __noreturn (*jump_kernel_func)(unsigned int, unsigned long); -static u32 hartid; +static size_t hartid; static int get_boot_hartid_from_fdt(void) { @@ -47,14 +47,33 @@ static int get_boot_hartid_from_fdt(void) return 0; } +static efi_status_t get_boot_hartid_from_efi(void) +{ + efi_guid_t boot_protocol_guid = RISCV_EFI_BOOT_PROTOCOL_GUID; + efi_status_t status; + struct riscv_efi_boot_protocol *boot_protocol; + + 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, &hartid); + } + return status; +} + efi_status_t check_platform_features(void) { int ret; + efi_status_t status; - ret = get_boot_hartid_from_fdt(); - if (ret) { - efi_err("/chosen/boot-hartid missing or invalid!\n"); - return EFI_UNSUPPORTED; + status = get_boot_hartid_from_efi(); + if (status != EFI_SUCCESS) { + ret = get_boot_hartid_from_fdt(); + if (ret) { + efi_err("Failed to get boot hartid!\n"); + return EFI_UNSUPPORTED; + } } return EFI_SUCCESS; } diff --git a/include/linux/efi.h b/include/linux/efi.h index ccd4d3f91c98..9822c730207c 100644 --- a/include/linux/efi.h +++ b/include/linux/efi.h @@ -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 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 1/1] riscv/efi_stub: Add support for RISCV_EFI_BOOT_PROTOCOL @ 2022-03-24 11:25 ` Sunil V L 0 siblings, 0 replies; 8+ messages in thread From: Sunil V L @ 2022-03-24 11:25 UTC (permalink / raw) To: Ard Biesheuvel, Paul Walmsley, Palmer Dabbelt, Albert Ou, Ilias Apalodimas Cc: Heinrich Schuchardt, Atish Patra, Anup Patel, Jessica Clarke, Abner Chang, linux-efi, linux-kernel, linux-riscv, Sunil V L, Palmer Dabbelt This patch adds the support for getting the boot hart ID in Linux EFI stub using RISCV_EFI_BOOT_PROTOCOL. This protocol is preferred method over existing DT based solution since it works irrespective of DT or ACPI. The specification of the protocol is hosted at: https://github.com/riscv-non-isa/riscv-uefi Signed-off-by: Sunil V L <sunilvl@ventanamicro.com> Acked-by: Palmer Dabbelt <palmer@rivosinc.com> --- drivers/firmware/efi/libstub/efistub.h | 7 ++++++ drivers/firmware/efi/libstub/riscv-stub.c | 29 +++++++++++++++++++---- include/linux/efi.h | 1 + 3 files changed, 32 insertions(+), 5 deletions(-) diff --git a/drivers/firmware/efi/libstub/efistub.h b/drivers/firmware/efi/libstub/efistub.h index edb77b0621ea..aced62a0907e 100644 --- a/drivers/firmware/efi/libstub/efistub.h +++ b/drivers/firmware/efi/libstub/efistub.h @@ -720,6 +720,13 @@ union efi_tcg2_protocol { } mixed_mode; }; +struct riscv_efi_boot_protocol { + u64 revision; + + efi_status_t (__efiapi * get_boot_hartid)(struct riscv_efi_boot_protocol *this, + size_t *boot_hartid); +}; + typedef union efi_load_file_protocol efi_load_file_protocol_t; typedef union efi_load_file_protocol efi_load_file2_protocol_t; diff --git a/drivers/firmware/efi/libstub/riscv-stub.c b/drivers/firmware/efi/libstub/riscv-stub.c index 9c460843442f..012504f6f9a4 100644 --- a/drivers/firmware/efi/libstub/riscv-stub.c +++ b/drivers/firmware/efi/libstub/riscv-stub.c @@ -23,7 +23,7 @@ typedef void __noreturn (*jump_kernel_func)(unsigned int, unsigned long); -static u32 hartid; +static size_t hartid; static int get_boot_hartid_from_fdt(void) { @@ -47,14 +47,33 @@ static int get_boot_hartid_from_fdt(void) return 0; } +static efi_status_t get_boot_hartid_from_efi(void) +{ + efi_guid_t boot_protocol_guid = RISCV_EFI_BOOT_PROTOCOL_GUID; + efi_status_t status; + struct riscv_efi_boot_protocol *boot_protocol; + + 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, &hartid); + } + return status; +} + efi_status_t check_platform_features(void) { int ret; + efi_status_t status; - ret = get_boot_hartid_from_fdt(); - if (ret) { - efi_err("/chosen/boot-hartid missing or invalid!\n"); - return EFI_UNSUPPORTED; + status = get_boot_hartid_from_efi(); + if (status != EFI_SUCCESS) { + ret = get_boot_hartid_from_fdt(); + if (ret) { + efi_err("Failed to get boot hartid!\n"); + return EFI_UNSUPPORTED; + } } return EFI_SUCCESS; } diff --git a/include/linux/efi.h b/include/linux/efi.h index ccd4d3f91c98..9822c730207c 100644 --- a/include/linux/efi.h +++ b/include/linux/efi.h @@ -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 _______________________________________________ linux-riscv mailing list linux-riscv@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-riscv ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH 1/1] riscv/efi_stub: Add support for RISCV_EFI_BOOT_PROTOCOL 2022-03-24 11:25 ` Sunil V L @ 2022-03-24 11:46 ` Heinrich Schuchardt -1 siblings, 0 replies; 8+ messages in thread From: Heinrich Schuchardt @ 2022-03-24 11:46 UTC (permalink / raw) To: Sunil V L Cc: Atish Patra, Anup Patel, Jessica Clarke, Abner Chang, linux-efi, linux-kernel, linux-riscv, Palmer Dabbelt, Ilias Apalodimas, Albert Ou, Palmer Dabbelt, Paul Walmsley, Ard Biesheuvel On 3/24/22 12:25, Sunil V L wrote: > This patch adds the support for getting the boot hart ID in > Linux EFI stub using RISCV_EFI_BOOT_PROTOCOL. This protocol > is preferred method over existing DT based solution since it > works irrespective of DT or ACPI. > > The specification of the protocol is hosted at: > https://github.com/riscv-non-isa/riscv-uefi > > Signed-off-by: Sunil V L <sunilvl@ventanamicro.com> > Acked-by: Palmer Dabbelt <palmer@rivosinc.com> This seems to be v3 of the patch. v2 is available in https://lore.kernel.org/all/20220303145944.307321-2-sunilvl@ventanamicro.com/ v3 replaces a message in efi_status_t check_platform_features(): <+ efi_err("/chosen/boot-hartid missing or invalid!\n"); >+ efi_err("Failed to get boot hartid!\n"); Reviewed-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com> > --- > drivers/firmware/efi/libstub/efistub.h | 7 ++++++ > drivers/firmware/efi/libstub/riscv-stub.c | 29 +++++++++++++++++++---- > include/linux/efi.h | 1 + > 3 files changed, 32 insertions(+), 5 deletions(-) > > diff --git a/drivers/firmware/efi/libstub/efistub.h b/drivers/firmware/efi/libstub/efistub.h > index edb77b0621ea..aced62a0907e 100644 > --- a/drivers/firmware/efi/libstub/efistub.h > +++ b/drivers/firmware/efi/libstub/efistub.h > @@ -720,6 +720,13 @@ union efi_tcg2_protocol { > } mixed_mode; > }; > > +struct riscv_efi_boot_protocol { > + u64 revision; > + > + efi_status_t (__efiapi * get_boot_hartid)(struct riscv_efi_boot_protocol *this, > + size_t *boot_hartid); > +}; > + > typedef union efi_load_file_protocol efi_load_file_protocol_t; > typedef union efi_load_file_protocol efi_load_file2_protocol_t; > > diff --git a/drivers/firmware/efi/libstub/riscv-stub.c b/drivers/firmware/efi/libstub/riscv-stub.c > index 9c460843442f..012504f6f9a4 100644 > --- a/drivers/firmware/efi/libstub/riscv-stub.c > +++ b/drivers/firmware/efi/libstub/riscv-stub.c > @@ -23,7 +23,7 @@ > > typedef void __noreturn (*jump_kernel_func)(unsigned int, unsigned long); > > -static u32 hartid; > +static size_t hartid; > > static int get_boot_hartid_from_fdt(void) > { > @@ -47,14 +47,33 @@ static int get_boot_hartid_from_fdt(void) > return 0; > } > > +static efi_status_t get_boot_hartid_from_efi(void) > +{ > + efi_guid_t boot_protocol_guid = RISCV_EFI_BOOT_PROTOCOL_GUID; > + efi_status_t status; > + struct riscv_efi_boot_protocol *boot_protocol; > + > + 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, &hartid); > + } > + return status; > +} > + > efi_status_t check_platform_features(void) > { > int ret; > + efi_status_t status; > > - ret = get_boot_hartid_from_fdt(); > - if (ret) { > - efi_err("/chosen/boot-hartid missing or invalid!\n"); > - return EFI_UNSUPPORTED; > + status = get_boot_hartid_from_efi(); > + if (status != EFI_SUCCESS) { > + ret = get_boot_hartid_from_fdt(); > + if (ret) { > + efi_err("Failed to get boot hartid!\n"); > + return EFI_UNSUPPORTED; > + } > } > return EFI_SUCCESS; > } > diff --git a/include/linux/efi.h b/include/linux/efi.h > index ccd4d3f91c98..9822c730207c 100644 > --- a/include/linux/efi.h > +++ b/include/linux/efi.h > @@ -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) ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 1/1] riscv/efi_stub: Add support for RISCV_EFI_BOOT_PROTOCOL @ 2022-03-24 11:46 ` Heinrich Schuchardt 0 siblings, 0 replies; 8+ messages in thread From: Heinrich Schuchardt @ 2022-03-24 11:46 UTC (permalink / raw) To: Sunil V L Cc: Atish Patra, Anup Patel, Jessica Clarke, Abner Chang, linux-efi, linux-kernel, linux-riscv, Palmer Dabbelt, Ilias Apalodimas, Albert Ou, Palmer Dabbelt, Paul Walmsley, Ard Biesheuvel On 3/24/22 12:25, Sunil V L wrote: > This patch adds the support for getting the boot hart ID in > Linux EFI stub using RISCV_EFI_BOOT_PROTOCOL. This protocol > is preferred method over existing DT based solution since it > works irrespective of DT or ACPI. > > The specification of the protocol is hosted at: > https://github.com/riscv-non-isa/riscv-uefi > > Signed-off-by: Sunil V L <sunilvl@ventanamicro.com> > Acked-by: Palmer Dabbelt <palmer@rivosinc.com> This seems to be v3 of the patch. v2 is available in https://lore.kernel.org/all/20220303145944.307321-2-sunilvl@ventanamicro.com/ v3 replaces a message in efi_status_t check_platform_features(): <+ efi_err("/chosen/boot-hartid missing or invalid!\n"); >+ efi_err("Failed to get boot hartid!\n"); Reviewed-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com> > --- > drivers/firmware/efi/libstub/efistub.h | 7 ++++++ > drivers/firmware/efi/libstub/riscv-stub.c | 29 +++++++++++++++++++---- > include/linux/efi.h | 1 + > 3 files changed, 32 insertions(+), 5 deletions(-) > > diff --git a/drivers/firmware/efi/libstub/efistub.h b/drivers/firmware/efi/libstub/efistub.h > index edb77b0621ea..aced62a0907e 100644 > --- a/drivers/firmware/efi/libstub/efistub.h > +++ b/drivers/firmware/efi/libstub/efistub.h > @@ -720,6 +720,13 @@ union efi_tcg2_protocol { > } mixed_mode; > }; > > +struct riscv_efi_boot_protocol { > + u64 revision; > + > + efi_status_t (__efiapi * get_boot_hartid)(struct riscv_efi_boot_protocol *this, > + size_t *boot_hartid); > +}; > + > typedef union efi_load_file_protocol efi_load_file_protocol_t; > typedef union efi_load_file_protocol efi_load_file2_protocol_t; > > diff --git a/drivers/firmware/efi/libstub/riscv-stub.c b/drivers/firmware/efi/libstub/riscv-stub.c > index 9c460843442f..012504f6f9a4 100644 > --- a/drivers/firmware/efi/libstub/riscv-stub.c > +++ b/drivers/firmware/efi/libstub/riscv-stub.c > @@ -23,7 +23,7 @@ > > typedef void __noreturn (*jump_kernel_func)(unsigned int, unsigned long); > > -static u32 hartid; > +static size_t hartid; > > static int get_boot_hartid_from_fdt(void) > { > @@ -47,14 +47,33 @@ static int get_boot_hartid_from_fdt(void) > return 0; > } > > +static efi_status_t get_boot_hartid_from_efi(void) > +{ > + efi_guid_t boot_protocol_guid = RISCV_EFI_BOOT_PROTOCOL_GUID; > + efi_status_t status; > + struct riscv_efi_boot_protocol *boot_protocol; > + > + 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, &hartid); > + } > + return status; > +} > + > efi_status_t check_platform_features(void) > { > int ret; > + efi_status_t status; > > - ret = get_boot_hartid_from_fdt(); > - if (ret) { > - efi_err("/chosen/boot-hartid missing or invalid!\n"); > - return EFI_UNSUPPORTED; > + status = get_boot_hartid_from_efi(); > + if (status != EFI_SUCCESS) { > + ret = get_boot_hartid_from_fdt(); > + if (ret) { > + efi_err("Failed to get boot hartid!\n"); > + return EFI_UNSUPPORTED; > + } > } > return EFI_SUCCESS; > } > diff --git a/include/linux/efi.h b/include/linux/efi.h > index ccd4d3f91c98..9822c730207c 100644 > --- a/include/linux/efi.h > +++ b/include/linux/efi.h > @@ -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) _______________________________________________ linux-riscv mailing list linux-riscv@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-riscv ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 1/1] riscv/efi_stub: Add support for RISCV_EFI_BOOT_PROTOCOL 2022-03-24 11:46 ` Heinrich Schuchardt @ 2022-03-24 12:16 ` Sunil V L -1 siblings, 0 replies; 8+ messages in thread From: Sunil V L @ 2022-03-24 12:16 UTC (permalink / raw) To: Heinrich Schuchardt Cc: Atish Patra, Anup Patel, Jessica Clarke, Abner Chang, linux-efi, linux-kernel, linux-riscv, Palmer Dabbelt, Ilias Apalodimas, Albert Ou, Palmer Dabbelt, Paul Walmsley, Ard Biesheuvel On Thu, Mar 24, 2022 at 12:46:12PM +0100, Heinrich Schuchardt wrote: > On 3/24/22 12:25, Sunil V L wrote: > > This patch adds the support for getting the boot hart ID in > > Linux EFI stub using RISCV_EFI_BOOT_PROTOCOL. This protocol > > is preferred method over existing DT based solution since it > > works irrespective of DT or ACPI. > > > > The specification of the protocol is hosted at: > > https://github.com/riscv-non-isa/riscv-uefi > > > > Signed-off-by: Sunil V L <sunilvl@ventanamicro.com> > > Acked-by: Palmer Dabbelt <palmer@rivosinc.com> > > This seems to be v3 of the patch. v2 is available in > https://lore.kernel.org/all/20220303145944.307321-2-sunilvl@ventanamicro.com/ > > v3 replaces a message in efi_status_t check_platform_features(): > > <+ efi_err("/chosen/boot-hartid missing or invalid!\n"); > >+ efi_err("Failed to get boot hartid!\n"); Yes, that's correct. Sorry I missed the version. I resent the patch with version and your RB tag added. Thanks! Sunil > > Reviewed-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com> > > > --- > > drivers/firmware/efi/libstub/efistub.h | 7 ++++++ > > drivers/firmware/efi/libstub/riscv-stub.c | 29 +++++++++++++++++++---- > > include/linux/efi.h | 1 + > > 3 files changed, 32 insertions(+), 5 deletions(-) > > > > diff --git a/drivers/firmware/efi/libstub/efistub.h b/drivers/firmware/efi/libstub/efistub.h > > index edb77b0621ea..aced62a0907e 100644 > > --- a/drivers/firmware/efi/libstub/efistub.h > > +++ b/drivers/firmware/efi/libstub/efistub.h > > @@ -720,6 +720,13 @@ union efi_tcg2_protocol { > > } mixed_mode; > > }; > > +struct riscv_efi_boot_protocol { > > + u64 revision; > > + > > + efi_status_t (__efiapi * get_boot_hartid)(struct riscv_efi_boot_protocol *this, > > + size_t *boot_hartid); > > +}; > > + > > typedef union efi_load_file_protocol efi_load_file_protocol_t; > > typedef union efi_load_file_protocol efi_load_file2_protocol_t; > > diff --git a/drivers/firmware/efi/libstub/riscv-stub.c b/drivers/firmware/efi/libstub/riscv-stub.c > > index 9c460843442f..012504f6f9a4 100644 > > --- a/drivers/firmware/efi/libstub/riscv-stub.c > > +++ b/drivers/firmware/efi/libstub/riscv-stub.c > > @@ -23,7 +23,7 @@ > > typedef void __noreturn (*jump_kernel_func)(unsigned int, unsigned long); > > -static u32 hartid; > > +static size_t hartid; > > static int get_boot_hartid_from_fdt(void) > > { > > @@ -47,14 +47,33 @@ static int get_boot_hartid_from_fdt(void) > > return 0; > > } > > +static efi_status_t get_boot_hartid_from_efi(void) > > +{ > > + efi_guid_t boot_protocol_guid = RISCV_EFI_BOOT_PROTOCOL_GUID; > > + efi_status_t status; > > + struct riscv_efi_boot_protocol *boot_protocol; > > + > > + 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, &hartid); > > + } > > + return status; > > +} > > + > > efi_status_t check_platform_features(void) > > { > > int ret; > > + efi_status_t status; > > - ret = get_boot_hartid_from_fdt(); > > - if (ret) { > > - efi_err("/chosen/boot-hartid missing or invalid!\n"); > > - return EFI_UNSUPPORTED; > > + status = get_boot_hartid_from_efi(); > > + if (status != EFI_SUCCESS) { > > + ret = get_boot_hartid_from_fdt(); > > + if (ret) { > > + efi_err("Failed to get boot hartid!\n"); > > + return EFI_UNSUPPORTED; > > + } > > } > > return EFI_SUCCESS; > > } > > diff --git a/include/linux/efi.h b/include/linux/efi.h > > index ccd4d3f91c98..9822c730207c 100644 > > --- a/include/linux/efi.h > > +++ b/include/linux/efi.h > > @@ -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) > ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 1/1] riscv/efi_stub: Add support for RISCV_EFI_BOOT_PROTOCOL @ 2022-03-24 12:16 ` Sunil V L 0 siblings, 0 replies; 8+ messages in thread From: Sunil V L @ 2022-03-24 12:16 UTC (permalink / raw) To: Heinrich Schuchardt Cc: Atish Patra, Anup Patel, Jessica Clarke, Abner Chang, linux-efi, linux-kernel, linux-riscv, Palmer Dabbelt, Ilias Apalodimas, Albert Ou, Palmer Dabbelt, Paul Walmsley, Ard Biesheuvel On Thu, Mar 24, 2022 at 12:46:12PM +0100, Heinrich Schuchardt wrote: > On 3/24/22 12:25, Sunil V L wrote: > > This patch adds the support for getting the boot hart ID in > > Linux EFI stub using RISCV_EFI_BOOT_PROTOCOL. This protocol > > is preferred method over existing DT based solution since it > > works irrespective of DT or ACPI. > > > > The specification of the protocol is hosted at: > > https://github.com/riscv-non-isa/riscv-uefi > > > > Signed-off-by: Sunil V L <sunilvl@ventanamicro.com> > > Acked-by: Palmer Dabbelt <palmer@rivosinc.com> > > This seems to be v3 of the patch. v2 is available in > https://lore.kernel.org/all/20220303145944.307321-2-sunilvl@ventanamicro.com/ > > v3 replaces a message in efi_status_t check_platform_features(): > > <+ efi_err("/chosen/boot-hartid missing or invalid!\n"); > >+ efi_err("Failed to get boot hartid!\n"); Yes, that's correct. Sorry I missed the version. I resent the patch with version and your RB tag added. Thanks! Sunil > > Reviewed-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com> > > > --- > > drivers/firmware/efi/libstub/efistub.h | 7 ++++++ > > drivers/firmware/efi/libstub/riscv-stub.c | 29 +++++++++++++++++++---- > > include/linux/efi.h | 1 + > > 3 files changed, 32 insertions(+), 5 deletions(-) > > > > diff --git a/drivers/firmware/efi/libstub/efistub.h b/drivers/firmware/efi/libstub/efistub.h > > index edb77b0621ea..aced62a0907e 100644 > > --- a/drivers/firmware/efi/libstub/efistub.h > > +++ b/drivers/firmware/efi/libstub/efistub.h > > @@ -720,6 +720,13 @@ union efi_tcg2_protocol { > > } mixed_mode; > > }; > > +struct riscv_efi_boot_protocol { > > + u64 revision; > > + > > + efi_status_t (__efiapi * get_boot_hartid)(struct riscv_efi_boot_protocol *this, > > + size_t *boot_hartid); > > +}; > > + > > typedef union efi_load_file_protocol efi_load_file_protocol_t; > > typedef union efi_load_file_protocol efi_load_file2_protocol_t; > > diff --git a/drivers/firmware/efi/libstub/riscv-stub.c b/drivers/firmware/efi/libstub/riscv-stub.c > > index 9c460843442f..012504f6f9a4 100644 > > --- a/drivers/firmware/efi/libstub/riscv-stub.c > > +++ b/drivers/firmware/efi/libstub/riscv-stub.c > > @@ -23,7 +23,7 @@ > > typedef void __noreturn (*jump_kernel_func)(unsigned int, unsigned long); > > -static u32 hartid; > > +static size_t hartid; > > static int get_boot_hartid_from_fdt(void) > > { > > @@ -47,14 +47,33 @@ static int get_boot_hartid_from_fdt(void) > > return 0; > > } > > +static efi_status_t get_boot_hartid_from_efi(void) > > +{ > > + efi_guid_t boot_protocol_guid = RISCV_EFI_BOOT_PROTOCOL_GUID; > > + efi_status_t status; > > + struct riscv_efi_boot_protocol *boot_protocol; > > + > > + 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, &hartid); > > + } > > + return status; > > +} > > + > > efi_status_t check_platform_features(void) > > { > > int ret; > > + efi_status_t status; > > - ret = get_boot_hartid_from_fdt(); > > - if (ret) { > > - efi_err("/chosen/boot-hartid missing or invalid!\n"); > > - return EFI_UNSUPPORTED; > > + status = get_boot_hartid_from_efi(); > > + if (status != EFI_SUCCESS) { > > + ret = get_boot_hartid_from_fdt(); > > + if (ret) { > > + efi_err("Failed to get boot hartid!\n"); > > + return EFI_UNSUPPORTED; > > + } > > } > > return EFI_SUCCESS; > > } > > diff --git a/include/linux/efi.h b/include/linux/efi.h > > index ccd4d3f91c98..9822c730207c 100644 > > --- a/include/linux/efi.h > > +++ b/include/linux/efi.h > > @@ -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) > _______________________________________________ linux-riscv mailing list linux-riscv@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-riscv ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2022-03-24 12:16 UTC | newest] Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2022-03-24 11:25 [PATCH 0/1] RISCV_EFI_BOOT_PROTOCOL support in linux Sunil V L 2022-03-24 11:25 ` Sunil V L 2022-03-24 11:25 ` [PATCH 1/1] riscv/efi_stub: Add support for RISCV_EFI_BOOT_PROTOCOL Sunil V L 2022-03-24 11:25 ` Sunil V L 2022-03-24 11:46 ` Heinrich Schuchardt 2022-03-24 11:46 ` Heinrich Schuchardt 2022-03-24 12:16 ` Sunil V L 2022-03-24 12:16 ` Sunil V L
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.