mirror of
https://github.com/riscv-software-src/opensbi.git
synced 2025-08-24 23:41:23 +01:00
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>
This commit is contained in:
@@ -84,21 +84,18 @@ static inline void sbi_dbtr_disable_shmem(void)
|
|||||||
|
|
||||||
static inline void *hart_shmem_base(void)
|
static inline void *hart_shmem_base(void)
|
||||||
{
|
{
|
||||||
struct sbi_dbtr_shmem* shmem;
|
|
||||||
unsigned long phys_hi, phys_lo;
|
unsigned long phys_hi, phys_lo;
|
||||||
struct sbi_dbtr_hart_triggers_state *hs = NULL;
|
struct sbi_dbtr_hart_triggers_state *hs = NULL;
|
||||||
|
|
||||||
hs = dbtr_get_hart_state_ptr(sbi_scratch_thishart_ptr());
|
hs = dbtr_get_hart_state_ptr(sbi_scratch_thishart_ptr());
|
||||||
|
|
||||||
if (!hs)
|
if (!hs)
|
||||||
return NULL;
|
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
|
if (phys_hi == SBI_DBTR_SHMEM_INVALID_ADDR && phys_hi == phys_lo)
|
||||||
? shmem->phys_hi : 0);
|
return NULL;
|
||||||
phys_lo = (shmem->phys_lo == SBI_DBTR_SHMEM_INVALID_ADDR
|
|
||||||
? 0 : shmem->phys_lo);
|
|
||||||
|
|
||||||
return ((void *)(unsigned long)DBTR_SHMEM_MAKE_PHYS(phys_hi, phys_lo));
|
return ((void *)(unsigned long)DBTR_SHMEM_MAKE_PHYS(phys_hi, phys_lo));
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user