tests: benchmarks: timing_info: Enable benchmarks for riscv32.
This patch provides support needed to get timing related information from riscv32 based SOC. Signed-off-by: Adithya Baglody <adithya.nagaraj.baglody@intel.com>
This commit is contained in:
parent
79f65d4db7
commit
1d27b404a6
6 changed files with 125 additions and 1 deletions
|
@ -76,6 +76,14 @@ u64_t __common_var_swap_end_time;
|
||||||
<< 16 | \
|
<< 16 | \
|
||||||
(IORD_ALTERA_AVALON_TIMER_PERIODL(TIMER_0_BASE))) \
|
(IORD_ALTERA_AVALON_TIMER_PERIODL(TIMER_0_BASE))) \
|
||||||
- ((u32_t)val))
|
- ((u32_t)val))
|
||||||
|
|
||||||
|
|
||||||
|
#elif CONFIG_RISCV32
|
||||||
|
#define TIMING_INFO_PRE_READ()
|
||||||
|
#define TIMING_INFO_OS_GET_TIME() (k_cycle_get_32())
|
||||||
|
#define TIMING_INFO_GET_TIMER_VALUE() (k_cycle_get_32())
|
||||||
|
#define SUBTRACT_CLOCK_CYCLES(val) ((u32_t)val)
|
||||||
|
|
||||||
#else
|
#else
|
||||||
/* Default case */
|
/* Default case */
|
||||||
#error "Benchmarks have not been implemented for this architecture"
|
#error "Benchmarks have not been implemented for this architecture"
|
||||||
|
|
|
@ -100,6 +100,9 @@ SECTION_FUNC(exception.entry, __irq_wrapper)
|
||||||
sw a6, __NANO_ESF_a6_OFFSET(sp)
|
sw a6, __NANO_ESF_a6_OFFSET(sp)
|
||||||
sw a7, __NANO_ESF_a7_OFFSET(sp)
|
sw a7, __NANO_ESF_a7_OFFSET(sp)
|
||||||
|
|
||||||
|
#ifdef CONFIG_EXECUTION_BENCHMARKING
|
||||||
|
call read_timer_start_of_isr
|
||||||
|
#endif
|
||||||
/* Save MEPC register */
|
/* Save MEPC register */
|
||||||
csrr t0, mepc
|
csrr t0, mepc
|
||||||
sw t0, __NANO_ESF_mepc_OFFSET(sp)
|
sw t0, __NANO_ESF_mepc_OFFSET(sp)
|
||||||
|
@ -261,6 +264,9 @@ call_irq:
|
||||||
/* Load ISR function address in register t1 */
|
/* Load ISR function address in register t1 */
|
||||||
lw t1, 0x04(t0)
|
lw t1, 0x04(t0)
|
||||||
|
|
||||||
|
#ifdef CONFIG_EXECUTION_BENCHMARKING
|
||||||
|
call read_timer_end_of_isr
|
||||||
|
#endif
|
||||||
/* Call ISR function */
|
/* Call ISR function */
|
||||||
jalr ra, t1
|
jalr ra, t1
|
||||||
|
|
||||||
|
@ -364,6 +370,53 @@ reschedule:
|
||||||
lw s10, _thread_offset_to_s10(t1)
|
lw s10, _thread_offset_to_s10(t1)
|
||||||
lw s11, _thread_offset_to_s11(t1)
|
lw s11, _thread_offset_to_s11(t1)
|
||||||
|
|
||||||
|
#ifdef CONFIG_EXECUTION_BENCHMARKING
|
||||||
|
addi sp, sp, -__NANO_ESF_SIZEOF
|
||||||
|
|
||||||
|
sw ra, __NANO_ESF_ra_OFFSET(sp)
|
||||||
|
sw gp, __NANO_ESF_gp_OFFSET(sp)
|
||||||
|
sw tp, __NANO_ESF_tp_OFFSET(sp)
|
||||||
|
sw t0, __NANO_ESF_t0_OFFSET(sp)
|
||||||
|
sw t1, __NANO_ESF_t1_OFFSET(sp)
|
||||||
|
sw t2, __NANO_ESF_t2_OFFSET(sp)
|
||||||
|
sw t3, __NANO_ESF_t3_OFFSET(sp)
|
||||||
|
sw t4, __NANO_ESF_t4_OFFSET(sp)
|
||||||
|
sw t5, __NANO_ESF_t5_OFFSET(sp)
|
||||||
|
sw t6, __NANO_ESF_t6_OFFSET(sp)
|
||||||
|
sw a0, __NANO_ESF_a0_OFFSET(sp)
|
||||||
|
sw a1, __NANO_ESF_a1_OFFSET(sp)
|
||||||
|
sw a2, __NANO_ESF_a2_OFFSET(sp)
|
||||||
|
sw a3, __NANO_ESF_a3_OFFSET(sp)
|
||||||
|
sw a4, __NANO_ESF_a4_OFFSET(sp)
|
||||||
|
sw a5, __NANO_ESF_a5_OFFSET(sp)
|
||||||
|
sw a6, __NANO_ESF_a6_OFFSET(sp)
|
||||||
|
sw a7, __NANO_ESF_a7_OFFSET(sp)
|
||||||
|
|
||||||
|
call read_timer_end_of_swap
|
||||||
|
|
||||||
|
lw ra, __NANO_ESF_ra_OFFSET(sp)
|
||||||
|
lw gp, __NANO_ESF_gp_OFFSET(sp)
|
||||||
|
lw tp, __NANO_ESF_tp_OFFSET(sp)
|
||||||
|
lw t0, __NANO_ESF_t0_OFFSET(sp)
|
||||||
|
lw t1, __NANO_ESF_t1_OFFSET(sp)
|
||||||
|
lw t2, __NANO_ESF_t2_OFFSET(sp)
|
||||||
|
lw t3, __NANO_ESF_t3_OFFSET(sp)
|
||||||
|
lw t4, __NANO_ESF_t4_OFFSET(sp)
|
||||||
|
lw t5, __NANO_ESF_t5_OFFSET(sp)
|
||||||
|
lw t6, __NANO_ESF_t6_OFFSET(sp)
|
||||||
|
lw a0, __NANO_ESF_a0_OFFSET(sp)
|
||||||
|
lw a1, __NANO_ESF_a1_OFFSET(sp)
|
||||||
|
lw a2, __NANO_ESF_a2_OFFSET(sp)
|
||||||
|
lw a3, __NANO_ESF_a3_OFFSET(sp)
|
||||||
|
lw a4, __NANO_ESF_a4_OFFSET(sp)
|
||||||
|
lw a5, __NANO_ESF_a5_OFFSET(sp)
|
||||||
|
lw a6, __NANO_ESF_a6_OFFSET(sp)
|
||||||
|
lw a7, __NANO_ESF_a7_OFFSET(sp)
|
||||||
|
|
||||||
|
/* Release stack space */
|
||||||
|
addi sp, sp, __NANO_ESF_SIZEOF
|
||||||
|
#endif
|
||||||
|
|
||||||
no_reschedule:
|
no_reschedule:
|
||||||
#ifdef CONFIG_RISCV_SOC_CONTEXT_SAVE
|
#ifdef CONFIG_RISCV_SOC_CONTEXT_SAVE
|
||||||
/* Restore context at SOC level */
|
/* Restore context at SOC level */
|
||||||
|
|
|
@ -23,6 +23,52 @@ GTEXT(_thread_entry_wrapper)
|
||||||
SECTION_FUNC(exception.other, __swap)
|
SECTION_FUNC(exception.other, __swap)
|
||||||
|
|
||||||
/* Make a system call to perform context switch */
|
/* Make a system call to perform context switch */
|
||||||
|
#ifdef CONFIG_EXECUTION_BENCHMARKING
|
||||||
|
addi sp, sp, -__NANO_ESF_SIZEOF
|
||||||
|
|
||||||
|
sw ra, __NANO_ESF_ra_OFFSET(sp)
|
||||||
|
sw gp, __NANO_ESF_gp_OFFSET(sp)
|
||||||
|
sw tp, __NANO_ESF_tp_OFFSET(sp)
|
||||||
|
sw t0, __NANO_ESF_t0_OFFSET(sp)
|
||||||
|
sw t1, __NANO_ESF_t1_OFFSET(sp)
|
||||||
|
sw t2, __NANO_ESF_t2_OFFSET(sp)
|
||||||
|
sw t3, __NANO_ESF_t3_OFFSET(sp)
|
||||||
|
sw t4, __NANO_ESF_t4_OFFSET(sp)
|
||||||
|
sw t5, __NANO_ESF_t5_OFFSET(sp)
|
||||||
|
sw t6, __NANO_ESF_t6_OFFSET(sp)
|
||||||
|
sw a0, __NANO_ESF_a0_OFFSET(sp)
|
||||||
|
sw a1, __NANO_ESF_a1_OFFSET(sp)
|
||||||
|
sw a2, __NANO_ESF_a2_OFFSET(sp)
|
||||||
|
sw a3, __NANO_ESF_a3_OFFSET(sp)
|
||||||
|
sw a4, __NANO_ESF_a4_OFFSET(sp)
|
||||||
|
sw a5, __NANO_ESF_a5_OFFSET(sp)
|
||||||
|
sw a6, __NANO_ESF_a6_OFFSET(sp)
|
||||||
|
sw a7, __NANO_ESF_a7_OFFSET(sp)
|
||||||
|
|
||||||
|
call read_timer_start_of_swap
|
||||||
|
|
||||||
|
lw ra, __NANO_ESF_ra_OFFSET(sp)
|
||||||
|
lw gp, __NANO_ESF_gp_OFFSET(sp)
|
||||||
|
lw tp, __NANO_ESF_tp_OFFSET(sp)
|
||||||
|
lw t0, __NANO_ESF_t0_OFFSET(sp)
|
||||||
|
lw t1, __NANO_ESF_t1_OFFSET(sp)
|
||||||
|
lw t2, __NANO_ESF_t2_OFFSET(sp)
|
||||||
|
lw t3, __NANO_ESF_t3_OFFSET(sp)
|
||||||
|
lw t4, __NANO_ESF_t4_OFFSET(sp)
|
||||||
|
lw t5, __NANO_ESF_t5_OFFSET(sp)
|
||||||
|
lw t6, __NANO_ESF_t6_OFFSET(sp)
|
||||||
|
lw a0, __NANO_ESF_a0_OFFSET(sp)
|
||||||
|
lw a1, __NANO_ESF_a1_OFFSET(sp)
|
||||||
|
lw a2, __NANO_ESF_a2_OFFSET(sp)
|
||||||
|
lw a3, __NANO_ESF_a3_OFFSET(sp)
|
||||||
|
lw a4, __NANO_ESF_a4_OFFSET(sp)
|
||||||
|
lw a5, __NANO_ESF_a5_OFFSET(sp)
|
||||||
|
lw a6, __NANO_ESF_a6_OFFSET(sp)
|
||||||
|
lw a7, __NANO_ESF_a7_OFFSET(sp)
|
||||||
|
|
||||||
|
/* Release stack space */
|
||||||
|
addi sp, sp, __NANO_ESF_SIZEOF
|
||||||
|
#endif
|
||||||
ecall
|
ecall
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -64,11 +64,20 @@ static ALWAYS_INLINE void riscv_machine_rearm_timer(void)
|
||||||
static void riscv_machine_timer_irq_handler(void *unused)
|
static void riscv_machine_timer_irq_handler(void *unused)
|
||||||
{
|
{
|
||||||
ARG_UNUSED(unused);
|
ARG_UNUSED(unused);
|
||||||
|
#ifdef CONFIG_EXECUTION_BENCHMARKING
|
||||||
|
extern void read_timer_start_of_tick_handler(void);
|
||||||
|
read_timer_start_of_tick_handler();
|
||||||
|
#endif
|
||||||
|
|
||||||
_sys_clock_tick_announce();
|
_sys_clock_tick_announce();
|
||||||
|
|
||||||
/* Rearm timer */
|
/* Rearm timer */
|
||||||
riscv_machine_rearm_timer();
|
riscv_machine_rearm_timer();
|
||||||
|
|
||||||
|
#ifdef CONFIG_EXECUTION_BENCHMARKING
|
||||||
|
extern void read_timer_end_of_tick_handler(void);
|
||||||
|
read_timer_end_of_tick_handler();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_TICKLESS_IDLE
|
#ifdef CONFIG_TICKLESS_IDLE
|
||||||
|
|
|
@ -86,6 +86,14 @@
|
||||||
<< 16 | \
|
<< 16 | \
|
||||||
(IORD_ALTERA_AVALON_TIMER_PERIODL(TIMER_0_BASE))) \
|
(IORD_ALTERA_AVALON_TIMER_PERIODL(TIMER_0_BASE))) \
|
||||||
- ((u32_t)val))
|
- ((u32_t)val))
|
||||||
|
|
||||||
|
|
||||||
|
#elif CONFIG_RISCV32
|
||||||
|
#define TIMING_INFO_PRE_READ()
|
||||||
|
#define TIMING_INFO_OS_GET_TIME() (k_cycle_get_32())
|
||||||
|
#define TIMING_INFO_GET_TIMER_VALUE() (k_cycle_get_32())
|
||||||
|
#define SUBTRACT_CLOCK_CYCLES(val) ((u32_t)val)
|
||||||
|
|
||||||
#endif /* CONFIG_NRF_RTC_TIMER */
|
#endif /* CONFIG_NRF_RTC_TIMER */
|
||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
tests:
|
tests:
|
||||||
benchmark.timing.default_kernel:
|
benchmark.timing.default_kernel:
|
||||||
arch_whitelist: x86 arm arc xtensa nios2
|
arch_whitelist: x86 arm arc xtensa nios2 riscv32
|
||||||
tags: benchmark
|
tags: benchmark
|
||||||
benchmark.timing.userspace:
|
benchmark.timing.userspace:
|
||||||
filter: CONFIG_ARCH_HAS_USERSPACE
|
filter: CONFIG_ARCH_HAS_USERSPACE
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue