Commit 43a0832b authored by Rick Chen's avatar Rick Chen Committed by Andes
Browse files

riscv: andes_plic: Fix some wrong configurations



Fix two wrong settings of andes plic driver as below:

1. Fix wrong pending register base definition.
2. Declaring the en variable in enable_ipi() as unsigned int instead of
   int can help to fix wrong plic enabling setting in RV64.
Signed-off-by: default avatarRick Chen <rick@andestech.com>
Cc: KC Lin <kclin@andestech.com>
Cc: Alan Kao <alankao@andestech.com>
parent 7e24518c
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
#include <cpu.h> #include <cpu.h>
/* pending register */ /* pending register */
#define PENDING_REG(base, hart) ((ulong)(base) + 0x1000 + (hart) * 8) #define PENDING_REG(base, hart) ((ulong)(base) + 0x1000 + ((hart) / 4) * 4)
/* enable register */ /* enable register */
#define ENABLE_REG(base, hart) ((ulong)(base) + 0x2000 + (hart) * 0x80) #define ENABLE_REG(base, hart) ((ulong)(base) + 0x2000 + (hart) * 0x80)
/* claim register */ /* claim register */
...@@ -46,7 +46,7 @@ static int init_plic(void); ...@@ -46,7 +46,7 @@ static int init_plic(void);
static int enable_ipi(int hart) static int enable_ipi(int hart)
{ {
int en; unsigned int en;
en = ENABLE_HART_IPI >> hart; en = ENABLE_HART_IPI >> hart;
writel(en, (void __iomem *)ENABLE_REG(gd->arch.plic, hart)); writel(en, (void __iomem *)ENABLE_REG(gd->arch.plic, hart));
...@@ -94,10 +94,13 @@ static int init_plic(void) ...@@ -94,10 +94,13 @@ static int init_plic(void)
int riscv_send_ipi(int hart) int riscv_send_ipi(int hart)
{ {
unsigned int ipi;
PLIC_BASE_GET(); PLIC_BASE_GET();
writel(SEND_IPI_TO_HART(hart), ipi = (SEND_IPI_TO_HART(hart) << (8 * gd->arch.boot_hart));
(void __iomem *)PENDING_REG(gd->arch.plic, gd->arch.boot_hart)); writel(ipi, (void __iomem *)PENDING_REG(gd->arch.plic,
gd->arch.boot_hart));
return 0; return 0;
} }
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment