summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/sparc64/shared
diff options
context:
space:
mode:
Diffstat (limited to 'c/src/lib/libbsp/sparc64/shared')
-rw-r--r--c/src/lib/libbsp/sparc64/shared/clock/ckinit.c8
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);