112771Sqtt2@cornell.edu// See LICENSE for license details.
212771Sqtt2@cornell.edu
312771Sqtt2@cornell.edu#ifndef _ENV_PHYSICAL_SINGLE_CORE_TIMER_H
412771Sqtt2@cornell.edu#define _ENV_PHYSICAL_SINGLE_CORE_TIMER_H
512771Sqtt2@cornell.edu
612771Sqtt2@cornell.edu#include "../p/riscv_test.h"
712771Sqtt2@cornell.edu
812771Sqtt2@cornell.edu#define TIMER_INTERVAL 2
912771Sqtt2@cornell.edu
1012771Sqtt2@cornell.edu#undef EXTRA_INIT_TIMER
1112771Sqtt2@cornell.edu#define EXTRA_INIT_TIMER                                                \
1212771Sqtt2@cornell.edu        li a0, MIP_MTIP;                                                \
1312771Sqtt2@cornell.edu        csrs mie, a0;                                                   \
1412771Sqtt2@cornell.edu        csrr a0, mtime;                                                 \
1512771Sqtt2@cornell.edu        addi a0, a0, TIMER_INTERVAL;                                    \
1612771Sqtt2@cornell.edu        csrw mtimecmp, a0;                                              \
1712771Sqtt2@cornell.edu
1812771Sqtt2@cornell.edu#if SSTATUS_XS != 0x18000
1912771Sqtt2@cornell.edu# error
2012771Sqtt2@cornell.edu#endif
2112771Sqtt2@cornell.edu#define XS_SHIFT 15
2212771Sqtt2@cornell.edu
2312771Sqtt2@cornell.edu#undef INTERRUPT_HANDLER
2412771Sqtt2@cornell.edu#define INTERRUPT_HANDLER                                               \
2512771Sqtt2@cornell.edu        slli t5, t5, 1;                                                 \
2612771Sqtt2@cornell.edu        srli t5, t5, 1;                                                 \
2712771Sqtt2@cornell.edu        add t5, t5, -IRQ_M_TIMER;                                       \
2812771Sqtt2@cornell.edu        bnez t5, other_exception; /* other interrups shouldn't happen */\
2912771Sqtt2@cornell.edu        csrr t5, mtime;                                                 \
3012771Sqtt2@cornell.edu        addi t5, t5, TIMER_INTERVAL;                                    \
3112771Sqtt2@cornell.edu        csrw mtimecmp, t5;                                              \
3212771Sqtt2@cornell.edu        mret;                                                           \
3312771Sqtt2@cornell.edu
3412771Sqtt2@cornell.edu//-----------------------------------------------------------------------
3512771Sqtt2@cornell.edu// Data Section Macro
3612771Sqtt2@cornell.edu//-----------------------------------------------------------------------
3712771Sqtt2@cornell.edu
3812771Sqtt2@cornell.edu#undef EXTRA_DATA
3912771Sqtt2@cornell.edu#define EXTRA_DATA                                                      \
4012771Sqtt2@cornell.edu        .align 3;                                                       \
4112771Sqtt2@cornell.eduregspill:                                                               \
4212771Sqtt2@cornell.edu        .dword 0xdeadbeefcafebabe;                                      \
4312771Sqtt2@cornell.edu        .dword 0xdeadbeefcafebabe;                                      \
4412771Sqtt2@cornell.edu        .dword 0xdeadbeefcafebabe;                                      \
4512771Sqtt2@cornell.edu        .dword 0xdeadbeefcafebabe;                                      \
4612771Sqtt2@cornell.edu        .dword 0xdeadbeefcafebabe;                                      \
4712771Sqtt2@cornell.edu        .dword 0xdeadbeefcafebabe;                                      \
4812771Sqtt2@cornell.edu        .dword 0xdeadbeefcafebabe;                                      \
4912771Sqtt2@cornell.edu        .dword 0xdeadbeefcafebabe;                                      \
5012771Sqtt2@cornell.edu        .dword 0xdeadbeefcafebabe;                                      \
5112771Sqtt2@cornell.edu        .dword 0xdeadbeefcafebabe;                                      \
5212771Sqtt2@cornell.edu        .dword 0xdeadbeefcafebabe;                                      \
5312771Sqtt2@cornell.edu        .dword 0xdeadbeefcafebabe;                                      \
5412771Sqtt2@cornell.edu        .dword 0xdeadbeefcafebabe;                                      \
5512771Sqtt2@cornell.edu        .dword 0xdeadbeefcafebabe;                                      \
5612771Sqtt2@cornell.edu        .dword 0xdeadbeefcafebabe;                                      \
5712771Sqtt2@cornell.edu        .dword 0xdeadbeefcafebabe;                                      \
5812771Sqtt2@cornell.edu        .dword 0xdeadbeefcafebabe;                                      \
5912771Sqtt2@cornell.edu        .dword 0xdeadbeefcafebabe;                                      \
6012771Sqtt2@cornell.edu        .dword 0xdeadbeefcafebabe;                                      \
6112771Sqtt2@cornell.edu        .dword 0xdeadbeefcafebabe;                                      \
6212771Sqtt2@cornell.edu        .dword 0xdeadbeefcafebabe;                                      \
6312771Sqtt2@cornell.edu        .dword 0xdeadbeefcafebabe;                                      \
6412771Sqtt2@cornell.edu        .dword 0xdeadbeefcafebabe;                                      \
6512771Sqtt2@cornell.edu        .dword 0xdeadbeefcafebabe;                                      \
6612771Sqtt2@cornell.eduevac:                                                                   \
6712771Sqtt2@cornell.edu        .skip 32768;                                                    \
6812771Sqtt2@cornell.edu
6912771Sqtt2@cornell.edu#endif
70