Ver código fonte

fix(risc-v, virt64, plic): use volatile rw for claim and complete

Haojin Tang 1 semana atrás
pai
commit
893ae7d7ba

+ 2 - 2
bsp/xuantie/virt64/c906/libcpu/plic.c

@@ -93,7 +93,7 @@ void plic_set_threshold(int threshold)
 int plic_claim(void)
 {
     int hart = __raw_hartid();
-    int irq = *(uint32_t *)PLIC_CLAIM(hart);
+    int irq = readl((uint32_t *)PLIC_CLAIM(hart));
     return irq;
 }
 
@@ -110,7 +110,7 @@ int plic_claim(void)
 void plic_complete(int irq)
 {
     int hart = __raw_hartid();
-    *(uint32_t *)PLIC_COMPLETE(hart) = irq;
+    writel(irq, (uint32_t *)PLIC_COMPLETE(hart));
 }
 
 void plic_set_ie(rt_uint32_t word_index, rt_uint32_t val)

+ 2 - 2
libcpu/risc-v/virt64/plic.c

@@ -93,7 +93,7 @@ void plic_set_threshold(int threshold)
 int plic_claim(void)
 {
     int hart = __raw_hartid();
-    int irq = *(uint32_t *)PLIC_CLAIM(hart);
+    int irq = readl((uint32_t *)PLIC_CLAIM(hart));
     return irq;
 }
 
@@ -110,7 +110,7 @@ int plic_claim(void)
 void plic_complete(int irq)
 {
     int hart = __raw_hartid();
-    *(uint32_t *)PLIC_COMPLETE(hart) = irq;
+    writel(irq, (uint32_t *)PLIC_COMPLETE(hart));
 }
 
 void plic_set_ie(rt_uint32_t word_index, rt_uint32_t val)