lib: sbi: fix hart_shmem_base
authorXiang W <wxjstz@126.com>
Fri, 3 May 2024 13:53:33 +0000 (21:53 +0800)
committerAnup Patel <anup@brainfault.org>
Mon, 13 May 2024 11:05:20 +0000 (16:35 +0530)
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>
lib/sbi/sbi_dbtr.c

index 7142fedb5a80f65555fc75350ac22ab36f336bd9..5b072853facbeed983877ddbf7ef19da443e7d21 100644 (file)
@@ -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));
 }