diff options
author | Xiang W <wxjstz@126.com> | 2024-05-03 21:53:33 +0800 |
---|---|---|
committer | Anup Patel <anup@brainfault.org> | 2024-05-13 16:35:20 +0530 |
commit | 4953bd721a917768ce11a35961ff74f75d83afe7 (patch) | |
tree | 880f53964b9655fd34f3efc43128ad2aaf90ee86 /lib/sbi | |
parent | 019a8e69a1dc0c0f011fabd0372e1ba80e40dd7c (diff) | |
download | opensbi-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>
Diffstat (limited to 'lib/sbi')
-rw-r--r-- | lib/sbi/sbi_dbtr.c | 11 |
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)); } |