aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXiang W <wxjstz@126.com>2024-05-03 21:53:33 +0800
committerAnup Patel <anup@brainfault.org>2024-05-13 16:35:20 +0530
commit4953bd721a917768ce11a35961ff74f75d83afe7 (patch)
tree880f53964b9655fd34f3efc43128ad2aaf90ee86
parent019a8e69a1dc0c0f011fabd0372e1ba80e40dd7c (diff)
downloadopensbi-4953bd721a917768ce11a35961ff74f75d83afe7.zip
opensbi-4953bd721a917768ce11a35961ff74f75d83afe7.tar.gz
opensbi-4953bd721a917768ce11a35961ff74f75d83afe7.tar.bz2
lib: sbi: fix hart_shmem_base
When only phys_hi is equal to SBI_DBTR_SHMEM_INVALID_ADDR, it may be a legal address. The old code would modify the legal address. Signed-off-by: Xiang W <wxjstz@126.com> Reviewed-by: Himanshu Chauhan <hchauhan@ventanamicro.com>
-rw-r--r--lib/sbi/sbi_dbtr.c11
1 files changed, 4 insertions, 7 deletions
diff --git a/lib/sbi/sbi_dbtr.c b/lib/sbi/sbi_dbtr.c
index 7142fed..5b07285 100644
--- a/lib/sbi/sbi_dbtr.c
+++ b/lib/sbi/sbi_dbtr.c
@@ -84,21 +84,18 @@ static inline void sbi_dbtr_disable_shmem(void)
static inline void *hart_shmem_base(void)
{
- struct sbi_dbtr_shmem* shmem;
unsigned long phys_hi, phys_lo;
struct sbi_dbtr_hart_triggers_state *hs = NULL;
hs = dbtr_get_hart_state_ptr(sbi_scratch_thishart_ptr());
-
if (!hs)
return NULL;
- shmem = &hs->shmem;
+ phys_hi = hs->shmem.phys_hi;
+ phys_lo = hs->shmem.phys_lo;
- phys_hi = (shmem->phys_hi == SBI_DBTR_SHMEM_INVALID_ADDR
- ? shmem->phys_hi : 0);
- phys_lo = (shmem->phys_lo == SBI_DBTR_SHMEM_INVALID_ADDR
- ? 0 : shmem->phys_lo);
+ if (phys_hi == SBI_DBTR_SHMEM_INVALID_ADDR && phys_hi == phys_lo)
+ return NULL;
return ((void *)(unsigned long)DBTR_SHMEM_MAKE_PHYS(phys_hi, phys_lo));
}