From: Andrew Jones <ajones@ventanamicro.com>
To: opensbi@lists.infradead.org
Subject: [PATCH v6 4/7] lib: sbi: Only register available extensions
Date: Mon, 15 May 2023 13:12:37 +0200 [thread overview]
Message-ID: <20230515111240.95059-5-ajones@ventanamicro.com> (raw)
In-Reply-To: <20230515111240.95059-1-ajones@ventanamicro.com>
When an extension implements a probe function it means there's a
chance that the extension is not available. Use this function in the
register_extensions callback to determine if the extension should be
registered at all. Where the probe implementation is simple, just
open code the check.
Signed-off-by: Andrew Jones <ajones@ventanamicro.com>
Reviewed-by: Anup Patel <anup@brainfault.org>
---
lib/sbi/sbi_ecall_cppc.c | 3 +++
lib/sbi/sbi_ecall_dbcn.c | 3 +++
lib/sbi/sbi_ecall_srst.c | 6 ++++++
lib/sbi/sbi_ecall_susp.c | 6 ++++++
lib/sbi/sbi_ecall_vendor.c | 17 +++--------------
5 files changed, 21 insertions(+), 14 deletions(-)
diff --git a/lib/sbi/sbi_ecall_cppc.c b/lib/sbi/sbi_ecall_cppc.c
index 42ec744c22ba..a6398ac78226 100644
--- a/lib/sbi/sbi_ecall_cppc.c
+++ b/lib/sbi/sbi_ecall_cppc.c
@@ -59,6 +59,9 @@ struct sbi_ecall_extension ecall_cppc;
static int sbi_ecall_cppc_register_extensions(void)
{
+ if (!sbi_cppc_get_device())
+ return 0;
+
return sbi_ecall_register_extension(&ecall_cppc);
}
diff --git a/lib/sbi/sbi_ecall_dbcn.c b/lib/sbi/sbi_ecall_dbcn.c
index 58b19e4468ef..cbb2e802e615 100644
--- a/lib/sbi/sbi_ecall_dbcn.c
+++ b/lib/sbi/sbi_ecall_dbcn.c
@@ -68,6 +68,9 @@ struct sbi_ecall_extension ecall_dbcn;
static int sbi_ecall_dbcn_register_extensions(void)
{
+ if (!sbi_console_get_device())
+ return 0;
+
return sbi_ecall_register_extension(&ecall_dbcn);
}
diff --git a/lib/sbi/sbi_ecall_srst.c b/lib/sbi/sbi_ecall_srst.c
index ad31537604a3..ea0dc73f010d 100644
--- a/lib/sbi/sbi_ecall_srst.c
+++ b/lib/sbi/sbi_ecall_srst.c
@@ -71,6 +71,12 @@ struct sbi_ecall_extension ecall_srst;
static int sbi_ecall_srst_register_extensions(void)
{
+ unsigned long out_val;
+
+ sbi_ecall_srst_probe(SBI_EXT_SRST, &out_val);
+ if (!out_val)
+ return 0;
+
return sbi_ecall_register_extension(&ecall_srst);
}
diff --git a/lib/sbi/sbi_ecall_susp.c b/lib/sbi/sbi_ecall_susp.c
index bfbdbe648625..c4124046b929 100644
--- a/lib/sbi/sbi_ecall_susp.c
+++ b/lib/sbi/sbi_ecall_susp.c
@@ -44,6 +44,12 @@ struct sbi_ecall_extension ecall_susp;
static int sbi_ecall_susp_register_extensions(void)
{
+ unsigned long out_val;
+
+ sbi_ecall_susp_probe(SBI_EXT_SUSP, &out_val);
+ if (!out_val)
+ return 0;
+
return sbi_ecall_register_extension(&ecall_susp);
}
diff --git a/lib/sbi/sbi_ecall_vendor.c b/lib/sbi/sbi_ecall_vendor.c
index 39c58c8b6fd5..700f475f0a86 100644
--- a/lib/sbi/sbi_ecall_vendor.c
+++ b/lib/sbi/sbi_ecall_vendor.c
@@ -22,24 +22,11 @@ static inline unsigned long sbi_ecall_vendor_id(void)
(SBI_EXT_VENDOR_END - SBI_EXT_VENDOR_START));
}
-static int sbi_ecall_vendor_probe(unsigned long extid,
- unsigned long *out_val)
-{
- if (!sbi_platform_vendor_ext_check(sbi_platform_thishart_ptr()))
- *out_val = 0;
- else
- *out_val = 1;
- return 0;
-}
-
static int sbi_ecall_vendor_handler(unsigned long extid, unsigned long funcid,
const struct sbi_trap_regs *regs,
unsigned long *out_val,
struct sbi_trap_info *out_trap)
{
- if (!sbi_platform_vendor_ext_check(sbi_platform_thishart_ptr()))
- return SBI_ERR_NOT_SUPPORTED;
-
return sbi_platform_vendor_ext_provider(sbi_platform_thishart_ptr(),
funcid, regs,
out_val, out_trap);
@@ -51,6 +38,9 @@ static int sbi_ecall_vendor_register_extensions(void)
{
unsigned long extid = sbi_ecall_vendor_id();
+ if (!sbi_platform_vendor_ext_check(sbi_platform_thishart_ptr()))
+ return 0;
+
ecall_vendor.extid_start = extid;
ecall_vendor.extid_end = extid;
@@ -61,6 +51,5 @@ struct sbi_ecall_extension ecall_vendor = {
.extid_start = SBI_EXT_VENDOR_START,
.extid_end = SBI_EXT_VENDOR_END,
.register_extensions = sbi_ecall_vendor_register_extensions,
- .probe = sbi_ecall_vendor_probe,
.handle = sbi_ecall_vendor_handler,
};
--
2.40.0
next prev parent reply other threads:[~2023-05-15 11:12 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-05-15 11:12 [PATCH v6 0/7] lib: sbi: Ensure SBI extension is available Andrew Jones
2023-05-15 11:12 ` [PATCH v6 1/7] lib: sbi: Introduce register_extensions extension callback Andrew Jones
2023-05-21 15:26 ` Anup Patel
2023-05-15 11:12 ` [PATCH v6 2/7] lib: sbi: Narrow vendor extension range Andrew Jones
2023-05-15 13:43 ` Anup Patel
2023-05-21 15:26 ` Anup Patel
2023-05-15 11:12 ` [PATCH v6 3/7] lib: sbi: pmu: Remove unnecessary probe function Andrew Jones
2023-05-21 15:26 ` Anup Patel
2023-05-15 11:12 ` Andrew Jones [this message]
2023-05-21 15:31 ` [PATCH v6 4/7] lib: sbi: Only register available extensions Anup Patel
2023-05-15 11:12 ` [PATCH v6 5/7] lib: sbi: Optimize probe of srst/susp Andrew Jones
2023-05-21 15:31 ` Anup Patel
2023-05-15 11:12 ` [PATCH v6 6/7] lib: sbi: Remove 0/1 probe implementations Andrew Jones
2023-05-21 15:31 ` Anup Patel
2023-05-15 11:12 ` [PATCH v6 7/7] lib: sbi: Document sbi_ecall_extension members Andrew Jones
2023-05-21 15:32 ` Anup Patel
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=20230515111240.95059-5-ajones@ventanamicro.com \
--to=ajones@ventanamicro.com \
--cc=opensbi@lists.infradead.org \
/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.