summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Jones <ajones@ventanamicro.com>2023-05-15 13:12:35 +0200
committerAnup Patel <anup@brainfault.org>2023-05-21 16:29:46 +0530
commite307ba7d464a8280e71195d79cc497e86d59b7fd (patch)
treeed1ff45e1879250384e3c619e523548849eb5c48
parentf58c14090f79b5d3bde86573c979a019bbd7421d (diff)
downloadopensbi-e307ba7d464a8280e71195d79cc497e86d59b7fd.tar.gz
opensbi-e307ba7d464a8280e71195d79cc497e86d59b7fd.zip
lib: sbi: Narrow vendor extension range
The vendor extension ID range is large, but at runtime at most a single ID will be available. Narrow the range in the register_extensions callback. After narrowing, we no longer need to check that the extension ID is correct in the other callbacks, as those callbacks will never be invoked with anything other than the single ID. Signed-off-by: Andrew Jones <ajones@ventanamicro.com> Reviewed-by: Anup Patel <anup@brainfault.org>
-rw-r--r--lib/sbi/sbi_ecall_vendor.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/lib/sbi/sbi_ecall_vendor.c b/lib/sbi/sbi_ecall_vendor.c
index 126156f7..39c58c8b 100644
--- a/lib/sbi/sbi_ecall_vendor.c
+++ b/lib/sbi/sbi_ecall_vendor.c
@@ -25,8 +25,7 @@ static inline unsigned long sbi_ecall_vendor_id(void)
static int sbi_ecall_vendor_probe(unsigned long extid,
unsigned long *out_val)
{
- if (!sbi_platform_vendor_ext_check(sbi_platform_thishart_ptr()) ||
- extid != sbi_ecall_vendor_id())
+ if (!sbi_platform_vendor_ext_check(sbi_platform_thishart_ptr()))
*out_val = 0;
else
*out_val = 1;
@@ -38,8 +37,7 @@ static int sbi_ecall_vendor_handler(unsigned long extid, unsigned long funcid,
unsigned long *out_val,
struct sbi_trap_info *out_trap)
{
- if (!sbi_platform_vendor_ext_check(sbi_platform_thishart_ptr()) ||
- extid != sbi_ecall_vendor_id())
+ 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(),
@@ -51,6 +49,11 @@ struct sbi_ecall_extension ecall_vendor;
static int sbi_ecall_vendor_register_extensions(void)
{
+ unsigned long extid = sbi_ecall_vendor_id();
+
+ ecall_vendor.extid_start = extid;
+ ecall_vendor.extid_end = extid;
+
return sbi_ecall_register_extension(&ecall_vendor);
}