diff options
Diffstat (limited to 'c/src/lib/libbsp/sparc64/shared')
-rw-r--r-- | c/src/lib/libbsp/sparc64/shared/clock/ckinit.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/c/src/lib/libbsp/sparc64/shared/clock/ckinit.c b/c/src/lib/libbsp/sparc64/shared/clock/ckinit.c index a8f4312c25..18eb66a172 100644 --- a/c/src/lib/libbsp/sparc64/shared/clock/ckinit.c +++ b/c/src/lib/libbsp/sparc64/shared/clock/ckinit.c @@ -50,11 +50,16 @@ void Clock_driver_support_at_tick(void) { uint64_t tick_reg; int bit_mask; - + uint64_t pil_reg; bit_mask = SPARC_SOFTINT_TM_MASK | SPARC_SOFTINT_SM_MASK | (1<<14); sparc64_clear_interrupt_bits(bit_mask); + sparc64_get_pil(pil_reg); + if(pil_reg == 0xe) { /* 0xe is the tick compare interrupt (softint(14)) */ + pil_reg--; + sparc64_set_pil(pil_reg); /* enable the next timer interrupt */ + } /* Note: sun4v uses stick_cmpr for clock driver for M5 simulator, which * does not currently have tick_cmpr implemented */ /* TODO: this could be more efficiently implemented as a single assembly @@ -85,7 +90,6 @@ void Clock_driver_support_initialize_hardware(void) uint64_t tick_reg; int bit_mask; - bit_mask = SPARC_SOFTINT_TM_MASK | SPARC_SOFTINT_SM_MASK | (1<<14); sparc64_clear_interrupt_bits(bit_mask); |