Message ID | 20200313091639.87862-10-damien.lemoal@wdc.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Kendryte k210 SoC boards support | expand |
On Fri, Mar 13, 2020 at 2:17 AM Damien Le Moal <damien.lemoal@wdc.com> wrote: > > Commit c68a9032299e ("riscv: set pmp configuration if kernel is running > in M-mode") added PMP initialization to M-Mode. While this patch is > valid for any SoC following the ratified riscv specifications, the > Kendryte K210 SoC is based on earlier unstable specifications and does > not seem to support PMP initialization (the SoC crashes if CSR_PMPADDR0 > or CSR_PMPCFG0 are accessed). > > Since all physical memory access works fine on this SoC without any > explicit PMP initialization, avoid the SoC crash by not touching the > PMP CSRs. > > Signed-off-by: Damien Le Moal <damien.lemoal@wdc.com> > --- > arch/riscv/kernel/head.S | 8 +++++++- > 1 file changed, 7 insertions(+), 1 deletion(-) > > diff --git a/arch/riscv/kernel/head.S b/arch/riscv/kernel/head.S > index 52ed11b4fda6..1a5defdc33d2 100644 > --- a/arch/riscv/kernel/head.S > +++ b/arch/riscv/kernel/head.S > @@ -58,11 +58,17 @@ _start_kernel: > /* Reset all registers except ra, a0, a1 */ > call reset_regs > > - /* Setup a PMP to permit access to all of memory. */ > + /* > + * For M-mode, setup PMP to permit access to all of memory. > + * This should however not be done for the Kendryte K210 SoC as this > + * causes a crash (this SoC follows older unstable specification). > + */ > +#ifndef CONFIG_SOC_KENDRYTE > li a0, -1 > csrw CSR_PMPADDR0, a0 > li a0, (PMP_A_NAPOT | PMP_R | PMP_W | PMP_X) > csrw CSR_PMPCFG0, a0 > +#endif > > /* > * The hartid in a0 is expected later on, and we have no firmware > -- > 2.24.1 > > Reviewed-by: Atish Patra <atish.patra@wdc.com>
diff --git a/arch/riscv/kernel/head.S b/arch/riscv/kernel/head.S index 52ed11b4fda6..1a5defdc33d2 100644 --- a/arch/riscv/kernel/head.S +++ b/arch/riscv/kernel/head.S @@ -58,11 +58,17 @@ _start_kernel: /* Reset all registers except ra, a0, a1 */ call reset_regs - /* Setup a PMP to permit access to all of memory. */ + /* + * For M-mode, setup PMP to permit access to all of memory. + * This should however not be done for the Kendryte K210 SoC as this + * causes a crash (this SoC follows older unstable specification). + */ +#ifndef CONFIG_SOC_KENDRYTE li a0, -1 csrw CSR_PMPADDR0, a0 li a0, (PMP_A_NAPOT | PMP_R | PMP_W | PMP_X) csrw CSR_PMPCFG0, a0 +#endif /* * The hartid in a0 is expected later on, and we have no firmware
Commit c68a9032299e ("riscv: set pmp configuration if kernel is running in M-mode") added PMP initialization to M-Mode. While this patch is valid for any SoC following the ratified riscv specifications, the Kendryte K210 SoC is based on earlier unstable specifications and does not seem to support PMP initialization (the SoC crashes if CSR_PMPADDR0 or CSR_PMPCFG0 are accessed). Since all physical memory access works fine on this SoC without any explicit PMP initialization, avoid the SoC crash by not touching the PMP CSRs. Signed-off-by: Damien Le Moal <damien.lemoal@wdc.com> --- arch/riscv/kernel/head.S | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)