diff --git a/src/libsys/Makefile b/src/libsys/Makefile index 6787e77..0b557d9 100644 --- a/src/libsys/Makefile +++ b/src/libsys/Makefile @@ -2,10 +2,12 @@ # BOARD = {ml402, denano} # TLB = {no, yes} # ENDIANESS = {eb, el} +# DEBUGGER = {gdb, mips, rom} + BOARD ?= ml402 TLB ?= no ENDIANESS ?= eb -DEBUGGER ?= rom +DEBUGGER ?= mips ifeq ($(ENDIANESS),el) diff --git a/src/libsys/boards/denano/board.c b/src/libsys/boards/denano/board.c index cd21c7d..47fdc88 100644 --- a/src/libsys/boards/denano/board.c +++ b/src/libsys/boards/denano/board.c @@ -103,7 +103,7 @@ void board_init(void) // Setup interrupt support interrupt_init(); - interrupt_enable_all(); + interrupt_global_enable(); // Do some initializations here } diff --git a/src/libsys/boards/ml402/board.c b/src/libsys/boards/ml402/board.c index 34e104c..5d6157f 100644 --- a/src/libsys/boards/ml402/board.c +++ b/src/libsys/boards/ml402/board.c @@ -91,7 +91,7 @@ void board_init(void) // Setup interrupt support interrupt_init(); - interrupt_enable_all(); + interrupt_global_enable(); // Do some initializations here } diff --git a/src/libsys/irq.c b/src/libsys/irq.c index 8b575e8..18937c5 100644 --- a/src/libsys/irq.c +++ b/src/libsys/irq.c @@ -59,13 +59,13 @@ void interrupt_disable(int irq_num) } } -void interrupt_enable_all() +void interrupt_global_enable() { uint32_t reg = CP0_SR_read() | SR_MASK_IEC; CP0_SR_write(reg); } -void interrupt_disable_all() +void interrupt_global_disable() { uint32_t reg = CP0_SR_read() & ~SR_MASK_IEC; CP0_SR_write(reg); diff --git a/src/libsys/irq.h b/src/libsys/irq.h index 3c83808..d6a1d2e 100644 --- a/src/libsys/irq.h +++ b/src/libsys/irq.h @@ -12,7 +12,7 @@ int _irq_dispatch(struct xcptcontext * xcp); void interrupt_register(int irq_num, fp_irq_t fp); void interrupt_enable(int irq_num); void interrupt_disable(int irq_num); -void interrupt_enable_all(); -void interrupt_disable_all(); +void interrupt_global_enable(); +void interrupt_global_disable(); #endif // IRQ_H diff --git a/src/libsys/libsys.c b/src/libsys/libsys.c index 05217c9..1500857 100644 --- a/src/libsys/libsys.c +++ b/src/libsys/libsys.c @@ -14,7 +14,7 @@ void enter_critical() { if (critical_nesting_counter == 0) { - interrupt_disable_all(); + interrupt_global_disable(); } critical_nesting_counter++; } @@ -26,7 +26,7 @@ void exit_critical() critical_nesting_counter--; if (critical_nesting_counter == 0) { - interrupt_enable_all(); + interrupt_global_enable(); } } } diff --git a/src/testbench_denano.c b/src/testbench_denano.c index 228f1fc..85774d5 100644 --- a/src/testbench_denano.c +++ b/src/testbench_denano.c @@ -245,6 +245,7 @@ int Test10_LoadStore() // sputs("buf = "); // print_word((int)buf); // sputs("\n"); + interrupt_global_disable(); while(1) { @@ -357,6 +358,8 @@ int Test10_LoadStore() err = NO_ERROR; break; } + interrupt_global_enable(); + free(buf); if (IS_ERROR(err)) @@ -838,20 +841,26 @@ uint32_t test_Icache() uint32_t *pInstr = malloc(sizeof(test_icache_instr)); memcpy(pInstr, test_icache_instr, sizeof(test_icache_instr)); func_t pF = (func_t)pInstr; + uint32_t v1; + uint32_t v2; + uint32_t v3; - uint32_t v = pF(); - printf("v = %u\n", (unsigned)v); + interrupt_global_disable(); + v1 = pF(); pInstr[4] = 0x24100002; - v = pF(); - printf("v = %u\n", (unsigned)v); + v2 = pF(); ICACHE_invalidate_at(&pInstr[4]); - v = pF(); - printf("v = %u\n", (unsigned)v); + v3 = pF(); + interrupt_global_enable(); free(pF); + printf("v1 = %u\n", (unsigned)v1); + printf("v2 = %u\n", (unsigned)v2); + printf("v3 = %u\n", (unsigned)v3); + return 0; }