From: Sunil V L <sunilvl@ventanamicro.com>
To: Ard Biesheuvel <ardb@kernel.org>,
Paul Walmsley <paul.walmsley@sifive.com>,
Palmer Dabbelt <palmer@dabbelt.com>,
Albert Ou <aou@eecs.berkeley.edu>
Cc: linux-efi@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-riscv@lists.infradead.org,
Heinrich Schuchardt <xypron.glpk@gmx.de>,
Anup Patel <apatel@ventanamicro.com>,
Atish Patra <atishp@rivosinc.com>,
Abner Chang <abner.chang@hpe.com>,
Jessica Clarke <jrtc27@jrtc27.com>,
Sunil V L <sunilvl@ventanamicro.com>
Subject: [RFC PATCH 1/1] riscv/efi_stub: Add support for RISCV_EFI_BOOT_PROTOCOL
Date: Wed, 26 Jan 2022 16:36:15 +0530 [thread overview]
Message-ID: <20220126110615.33371-2-sunilvl@ventanamicro.com> (raw)
In-Reply-To: <20220126110615.33371-1-sunilvl@ventanamicro.com>
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 <sunilvl@ventanamicro.com>
---
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(-)
diff --git a/drivers/firmware/efi/libstub/efistub.h b/drivers/firmware/efi/libstub/efistub.h
index edb77b0621ea..0428f8816942 100644
--- a/drivers/firmware/efi/libstub/efistub.h
+++ b/drivers/firmware/efi/libstub/efistub.h
@@ -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;
diff --git a/drivers/firmware/efi/libstub/riscv-stub.c b/drivers/firmware/efi/libstub/riscv-stub.c
index 380e4e251399..c7add4eb5453 100644
--- a/drivers/firmware/efi/libstub/riscv-stub.c
+++ b/drivers/firmware/efi/libstub/riscv-stub.c
@@ -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;
}
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
WARNING: multiple messages have this Message-ID (diff)
From: Sunil V L <sunilvl@ventanamicro.com>
To: Ard Biesheuvel <ardb@kernel.org>,
Paul Walmsley <paul.walmsley@sifive.com>,
Palmer Dabbelt <palmer@dabbelt.com>,
Albert Ou <aou@eecs.berkeley.edu>
Cc: linux-efi@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-riscv@lists.infradead.org,
Heinrich Schuchardt <xypron.glpk@gmx.de>,
Anup Patel <apatel@ventanamicro.com>,
Atish Patra <atishp@rivosinc.com>,
Abner Chang <abner.chang@hpe.com>,
Jessica Clarke <jrtc27@jrtc27.com>,
Sunil V L <sunilvl@ventanamicro.com>
Subject: [RFC PATCH 1/1] riscv/efi_stub: Add support for RISCV_EFI_BOOT_PROTOCOL
Date: Wed, 26 Jan 2022 16:36:15 +0530 [thread overview]
Message-ID: <20220126110615.33371-2-sunilvl@ventanamicro.com> (raw)
In-Reply-To: <20220126110615.33371-1-sunilvl@ventanamicro.com>
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 <sunilvl@ventanamicro.com>
---
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(-)
diff --git a/drivers/firmware/efi/libstub/efistub.h b/drivers/firmware/efi/libstub/efistub.h
index edb77b0621ea..0428f8816942 100644
--- a/drivers/firmware/efi/libstub/efistub.h
+++ b/drivers/firmware/efi/libstub/efistub.h
@@ -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;
diff --git a/drivers/firmware/efi/libstub/riscv-stub.c b/drivers/firmware/efi/libstub/riscv-stub.c
index 380e4e251399..c7add4eb5453 100644
--- a/drivers/firmware/efi/libstub/riscv-stub.c
+++ b/drivers/firmware/efi/libstub/riscv-stub.c
@@ -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;
}
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
next prev parent reply other threads:[~2022-01-26 11:06 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-01-26 11:06 [RFC PATCH 0/1] RISCV_EFI_BOOT_PROTOCOL support in linux Sunil V L
2022-01-26 11:06 ` Sunil V L
2022-01-26 11:06 ` Sunil V L [this message]
2022-01-26 11:06 ` [RFC PATCH 1/1] riscv/efi_stub: Add support for RISCV_EFI_BOOT_PROTOCOL Sunil V L
2022-01-26 11:13 ` Ard Biesheuvel
2022-01-26 11:13 ` Ard Biesheuvel
2022-01-26 11:45 ` Sunil V L
2022-01-26 11:45 ` Sunil V L
2022-01-27 7:47 ` Heinrich Schuchardt
2022-01-27 7:47 ` Heinrich Schuchardt
2022-01-28 5:16 ` Sunil V L
2022-01-28 5:16 ` Sunil V L
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220126110615.33371-2-sunilvl@ventanamicro.com \
--to=sunilvl@ventanamicro.com \
--cc=abner.chang@hpe.com \
--cc=aou@eecs.berkeley.edu \
--cc=apatel@ventanamicro.com \
--cc=ardb@kernel.org \
--cc=atishp@rivosinc.com \
--cc=jrtc27@jrtc27.com \
--cc=linux-efi@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-riscv@lists.infradead.org \
--cc=palmer@dabbelt.com \
--cc=paul.walmsley@sifive.com \
--cc=xypron.glpk@gmx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.