arch: riscv: pmp: enable MPU log module for debugging

Cleanup logging API in core_pmp.c. Remove old printf-based debugging API
and change the log module of PMP to individual MPU log module.

Signed-off-by: Jim Shu <cwshu@andestech.com>
This commit is contained in:
Jim Shu 2021-03-02 02:08:39 +08:00 committed by Carles Cufí
commit e4c5d96a8b
2 changed files with 4 additions and 51 deletions

View file

@ -10,10 +10,10 @@
#include <sys/check.h> #include <sys/check.h>
#include "core_pmp.h" #include "core_pmp.h"
#include <arch/riscv/csr.h> #include <arch/riscv/csr.h>
#include <stdio.h>
#define LOG_LEVEL CONFIG_MPU_LOG_LEVEL
#include <logging/log.h> #include <logging/log.h>
LOG_MODULE_DECLARE(os, CONFIG_KERNEL_LOG_LEVEL); LOG_MODULE_REGISTER(mpu);
#define PMP_SLOT_NUMBER CONFIG_PMP_SLOT #define PMP_SLOT_NUMBER CONFIG_PMP_SLOT
@ -44,7 +44,7 @@ enum {
CSR_PMPADDR15 CSR_PMPADDR15
}; };
ulong_t csr_read_enum(int pmp_csr_enum) static ulong_t csr_read_enum(int pmp_csr_enum)
{ {
ulong_t res = -1; ulong_t res = -1;
@ -95,7 +95,7 @@ ulong_t csr_read_enum(int pmp_csr_enum)
return res; return res;
} }
void csr_write_enum(int pmp_csr_enum, ulong_t value) static void csr_write_enum(int pmp_csr_enum, ulong_t value)
{ {
switch (pmp_csr_enum) { switch (pmp_csr_enum) {
case CSR_PMPCFG0: case CSR_PMPCFG0:
@ -179,54 +179,12 @@ int z_riscv_pmp_set(unsigned int index, ulong_t cfg_val, ulong_t addr_val)
return 0; return 0;
} }
int pmp_get(unsigned int index, ulong_t *cfg_val, ulong_t *addr_val)
{
ulong_t shift;
int pmpcfg_csr;
int pmpaddr_csr;
if (index >= PMP_SLOT_NUMBER) {
return -1;
}
/* Calculate PMP config/addr register and shift */
#ifdef CONFIG_64BIT
pmpcfg_csr = CSR_PMPCFG0 + (index >> 4);
shift = (index & 0x0007) << 3;
#else
pmpcfg_csr = CSR_PMPCFG0 + (index >> 2);
shift = (index & 0x0003) << 3;
#endif /* CONFIG_64BIT */
pmpaddr_csr = CSR_PMPADDR0 + index;
*cfg_val = (csr_read_enum(pmpcfg_csr) >> shift) & 0xFF;
*addr_val = FROM_PMP_ADDR(csr_read_enum(pmpaddr_csr));
return 0;
}
void z_riscv_pmp_clear_config(void) void z_riscv_pmp_clear_config(void)
{ {
for (unsigned int i = 0; i < RISCV_PMP_CFG_NUM; i++) for (unsigned int i = 0; i < RISCV_PMP_CFG_NUM; i++)
csr_write_enum(CSR_PMPCFG0 + i, 0); csr_write_enum(CSR_PMPCFG0 + i, 0);
} }
/* Function to help debug */
void z_riscv_pmp_print(unsigned int index)
{
ulong_t cfg_val;
ulong_t addr_val;
if (pmp_get(index, &cfg_val, &addr_val)) {
return;
}
#ifdef CONFIG_64BIT
printf("PMP[%d] :\t%02lX %16lX\n", index, cfg_val, addr_val);
#else
printf("PMP[%d] :\t%02lX %08lX\n", index, cfg_val, addr_val);
#endif /* CONFIG_64BIT */
}
#if defined(CONFIG_USERSPACE) #if defined(CONFIG_USERSPACE)
#include <linker/linker-defs.h> #include <linker/linker-defs.h>
void z_riscv_init_user_accesses(struct k_thread *thread) void z_riscv_init_user_accesses(struct k_thread *thread)

View file

@ -57,11 +57,6 @@ int z_riscv_pmp_set(unsigned int index, ulong_t cfg_val, ulong_t addr_val);
* @brief Reset to 0 all PMP setup registers * @brief Reset to 0 all PMP setup registers
*/ */
void z_riscv_pmp_clear_config(void); void z_riscv_pmp_clear_config(void);
/*
* @brief Print PMP setup register for info/debug
*/
void z_riscv_pmp_print(unsigned int index);
#endif /* CONFIG_RISCV_PMP */ #endif /* CONFIG_RISCV_PMP */
#if defined(CONFIG_USERSPACE) #if defined(CONFIG_USERSPACE)