diff --git a/platform/kendryte/k210/platform.h b/platform/kendryte/k210/platform.h index 14a4bbdf..6b520cf7 100644 --- a/platform/kendryte/k210/platform.h +++ b/platform/kendryte/k210/platform.h @@ -16,6 +16,8 @@ #ifndef _PLATFORM_H_ #define _PLATFORM_H_ +#include + /* Register base address */ /* Under Coreplex */ @@ -83,40 +85,7 @@ #define SPI1_BASE_ADDR (0x53000000U) #define SPI3_BASE_ADDR (0x54000000U) -#define read_csr(reg) ({ unsigned long __tmp; \ - asm volatile ("csrr %0, " #reg : "=r"(__tmp)); \ - __tmp; }) - -#define write_csr(reg, val) ({ \ - if (__builtin_constant_p(val) && (unsigned long)(val) < 32) \ - asm volatile ("csrw " #reg ", %0" :: "i"(val)); \ - else \ - asm volatile ("csrw " #reg ", %0" :: "r"(val)); }) - -#define swap_csr(reg, val) ({ unsigned long __tmp; \ - if (__builtin_constant_p(val) && (unsigned long)(val) < 32) \ - asm volatile ("csrrw %0, " #reg ", %1" : "=r"(__tmp) : "i"(val)); \ - else \ - asm volatile ("csrrw %0, " #reg ", %1" : "=r"(__tmp) : "r"(val)); \ - __tmp; }) - -#define set_csr(reg, bit) ({ unsigned long __tmp; \ - if (__builtin_constant_p(bit) && (unsigned long)(bit) < 32) \ - asm volatile ("csrrs %0, " #reg ", %1" : "=r"(__tmp) : "i"(bit)); \ - else \ - asm volatile ("csrrs %0, " #reg ", %1" : "=r"(__tmp) : "r"(bit)); \ - __tmp; }) - -#define clear_csr(reg, bit) ({ unsigned long __tmp; \ - if (__builtin_constant_p(bit) && (unsigned long)(bit) < 32) \ - asm volatile ("csrrc %0, " #reg ", %1" : "=r"(__tmp) : "i"(bit)); \ - else \ - asm volatile ("csrrc %0, " #reg ", %1" : "=r"(__tmp) : "r"(bit)); \ - __tmp; }) - -#define read_time() read_csr(mtime) -#define read_cycle() read_csr(mcycle) -#define current_coreid() read_csr(mhartid) +#define read_cycle() csr_read(mcycle) /* * PLIC External Interrupt Numbers diff --git a/platform/kendryte/k210/sysctl.c b/platform/kendryte/k210/sysctl.c index 3e855a58..8039f6e7 100644 --- a/platform/kendryte/k210/sysctl.c +++ b/platform/kendryte/k210/sysctl.c @@ -1763,14 +1763,14 @@ u32 sysctl_cpu_set_freq(u32 freq) void sysctl_enable_irq(void) { - set_csr(mie, MIP_MEIP); - set_csr(mstatus, MSTATUS_MIE); + csr_read_set(mie, MIP_MEIP); + csr_read_set(mstatus, MSTATUS_MIE); } void sysctl_disable_irq(void) { - clear_csr(mie, MIP_MEIP); - clear_csr(mstatus, MSTATUS_MIE); + csr_read_clear(mie, MIP_MEIP); + csr_read_clear(mstatus, MSTATUS_MIE); } u64 sysctl_get_time_us(void) @@ -1782,8 +1782,8 @@ u64 sysctl_get_time_us(void) void sysctl_usleep(u64 usec) { - u64 nop_all = usec * sysctl_clock_get_freq(SYSCTL_CLOCK_CPU) / 1000000UL; - u64 cycle = read_cycle(); + u64 nop_all = usec * sysctl_clock_get_freq(SYSCTL_CLOCK_CPU) / 1000000UL; + u64 cycle = read_cycle(); - while (read_cycle() - cycle < nop_all); + while (read_cycle() - cycle < nop_all); }