Introduce a debug control register. It can be used to lock the gdbstub ROM and enable/disable bus errors. The gdbstub ROM will be read/writeable until one writes the corresponding lock bit to this register. This will ease future gdbstub updates. --- cores/sysctl/rtl/sysctl.v | 10 ++++++++++ software/include/hw/sysctl.h | 4 ++++ 2 files changed, 14 insertions(+), 0 deletions(-)
diff --git a/cores/sysctl/rtl/sysctl.v b/cores/sysctl/rtl/sysctl.v index 3facb99..754ebb5 100644 --- a/cores/sysctl/rtl/sysctl.v +++ b/cores/sysctl/rtl/sysctl.v @@ -42,6 +42,8 @@ module sysctl #( input [31:0] capabilities, + output reg debug_write_lock, + output reg bus_errors_en, output reg hard_reset ); @@ -134,6 +136,8 @@ always @(posedge sys_clk) begin hard_reset <= 1'b0; debug_scratchpad <= 8'd0; + debug_write_lock <= 1'b0; + bus_errors_en <= 1'b0; end else begin timer0_irq <= 1'b0; timer1_irq <= 1'b0; @@ -181,6 +185,11 @@ always @(posedge sys_clk) begin /* Debug monitor (gdbstub) */ 5'b10100: debug_scratchpad <= csr_di[7:0]; + 5'b10101: begin + if(csr_di[0]) + debug_write_lock <= 1'b1; + bus_errors_en = csr_di[1]; + end // 11101 is clk_freq and is read-only // 11110 is capabilities and is read-only @@ -210,6 +219,7 @@ always @(posedge sys_clk) begin /* Debug monitor (gdbstub) */ 5'b10100: csr_do <= debug_scratchpad; + 5'b10101: csr_do <= {bus_errors_en, debug_write_lock}; /* Read only SoC properties */ 5'b11101: csr_do <= clk_freq; diff --git a/software/include/hw/sysctl.h b/software/include/hw/sysctl.h index 58529b0..d00471b 100644 --- a/software/include/hw/sysctl.h +++ b/software/include/hw/sysctl.h @@ -43,6 +43,10 @@ #define ICAP_WRITE (0x20000) #define CSR_DBG_SCRATCHPAD MMPTR(0xe0001050) +#define CSR_DBG_CTRL MMPTR(0xe0001054) + +#define DBG_CTRL_GDB_ROM_LOCK (0x01) +#define DBG_CTRL_BUS_ERR_EN (0x02) #define CSR_FREQUENCY MMPTR(0xe0001074) #define CSR_CAPABILITIES MMPTR(0xe0001078) -- 1.7.2.5 _______________________________________________ http://lists.milkymist.org/listinfo.cgi/devel-milkymist.org IRC: #milkymist@Freenode