Corrected an issue with the JTAG and SDO pins that prevented them from
being converted to general purpose digital I/O signals by the management
SoC.  This was showing up in the timer testbench which was not seeing
the low two output bits.
diff --git a/verilog/dv/caravel/mgmt_soc/mprj_ctrl/mprj_ctrl_tb.v b/verilog/dv/caravel/mgmt_soc/mprj_ctrl/mprj_ctrl_tb.v
index 85f0c48..ed06c6d 100644
--- a/verilog/dv/caravel/mgmt_soc/mprj_ctrl/mprj_ctrl_tb.v
+++ b/verilog/dv/caravel/mgmt_soc/mprj_ctrl/mprj_ctrl_tb.v
@@ -14,7 +14,7 @@
 	wire flash_clk;
 	wire flash_io0;
 	wire flash_io1;
-	wire [36:0] user_io;
+	wire [37:0] user_io;
 	wire SDO;
 
 	wire [3:0] checkbits;
diff --git a/verilog/dv/caravel/mgmt_soc/timer/timer_tb.v b/verilog/dv/caravel/mgmt_soc/timer/timer_tb.v
index 5218ee3..9d04404 100644
--- a/verilog/dv/caravel/mgmt_soc/timer/timer_tb.v
+++ b/verilog/dv/caravel/mgmt_soc/timer/timer_tb.v
@@ -69,26 +69,26 @@
 
 		/* Add checks here */
 		wait(checkbits == 6'h01);
-		$display("   countbits = 0x%x (should be 0xdcba7eb0)", countbits);
-		if(countbits !== 32'hdcba7eb0) begin
+		$display("   countbits = 0x%x (should be 0xdcba7eb3)", countbits);
+		if(countbits !== 32'hdcba7eb3) begin
 		    $display("Monitor: Test Timer (RTL) Failed");
 		    $finish;
 		end
 		wait(checkbits == 6'h02);
-		$display("   countbits = 0x%x (should be 0x10)", countbits);
-		if(countbits !== 32'h10) begin
+		$display("   countbits = 0x%x (should be 0x11)", countbits);
+		if(countbits !== 32'h11) begin
 		    $display("Monitor: Test Timer (RTL) Failed");
 		    $finish;
 		end
 		wait(checkbits == 6'h03);
-		$display("   countbits = %x (should be 0x0c)", countbits);
-		if(countbits !== 32'h0c) begin
+		$display("   countbits = %x (should be 0x0f)", countbits);
+		if(countbits !== 32'h0f) begin
 		    $display("Monitor: Test Timer (RTL) Failed");
 		    $finish;
 		end
 		wait(checkbits == 6'h04);
-		$display("   countbits = %x (should be 0x0c)", countbits);
-		if(countbits !== 32'h0c) begin
+		$display("   countbits = %x (should be 0x0f)", countbits);
+		if(countbits !== 32'h0f) begin
 		    $display("Monitor: Test Timer (RTL) Failed");
 		    $finish;
 		end
diff --git a/verilog/dv/caravel/mgmt_soc/timer2/timer2_tb.v b/verilog/dv/caravel/mgmt_soc/timer2/timer2_tb.v
index 30b54f1..b6db4b8 100644
--- a/verilog/dv/caravel/mgmt_soc/timer2/timer2_tb.v
+++ b/verilog/dv/caravel/mgmt_soc/timer2/timer2_tb.v
@@ -69,26 +69,26 @@
 
 		/* Add checks here */
 		wait(checkbits == 6'h01);
-		$display("   countbits = 0x%x (should be 0xdcba7eb0)", countbits);
-		if(countbits !== 32'hdcba7eb0) begin
+		$display("   countbits = 0x%x (should be 0xdcba7eb3)", countbits);
+		if(countbits !== 32'hdcba7eb3) begin
 		    $display("Monitor: Test Timer2 (RTL) Failed");
 		    $finish;
 		end
 		wait(checkbits == 6'h02);
-		$display("   countbits = 0x%x (should be 0x10)", countbits);
-		if(countbits !== 32'h10) begin
+		$display("   countbits = 0x%x (should be 0x11)", countbits);
+		if(countbits !== 32'h11) begin
 		    $display("Monitor: Test Timer2 (RTL) Failed");
 		    $finish;
 		end
 		wait(checkbits == 6'h03);
-		$display("   countbits = %x (should be 0x0c)", countbits);
-		if(countbits !== 32'h0c) begin
+		$display("   countbits = %x (should be 0x0f)", countbits);
+		if(countbits !== 32'h0f) begin
 		    $display("Monitor: Test Timer (RTL) Failed");
 		    $finish;
 		end
 		wait(checkbits == 6'h04);
-		$display("   countbits = %x (should be 0x0c)", countbits);
-		if(countbits !== 32'h0c) begin
+		$display("   countbits = %x (should be 0x0f)", countbits);
+		if(countbits !== 32'h0f) begin
 		    $display("Monitor: Test Timer2 (RTL) Failed");
 		    $finish;
 		end
@@ -100,8 +100,8 @@
 		end
 
 		wait(checkbits == 6'h06);
-		$display("   countbits = %x (should be 0x0054)", countbits);
-		if(countbits !== 32'h0054) begin
+		$display("   countbits = %x (should be 0x0055)", countbits);
+		if(countbits !== 32'h0055) begin
 		    $display("Monitor: Test Timer2 (RTL) Failed");
 		    $finish;
 		end
@@ -114,8 +114,8 @@
 		end
 
 		wait(checkbits == 6'h08);
-		$display("   countbits = %x (should be 0x0218)", countbits);
-		if(countbits !== 32'h0218) begin
+		$display("   countbits = %x (should be 0x0219)", countbits);
+		if(countbits !== 32'h0219) begin
 		    $display("Monitor: Test Timer2 (RTL) Failed");
 		    $finish;
 		end
diff --git a/verilog/rtl/caravel.v b/verilog/rtl/caravel.v
index a9caf12..b55ec62 100644
--- a/verilog/rtl/caravel.v
+++ b/verilog/rtl/caravel.v
@@ -488,7 +488,7 @@
 
     gpio_control_block #(
 	.DM_INIT(3'b110),	// Mode = output, strong up/down
-	.OENB_INIT(1'b0)	// Enable output signaling from wire
+	.OENB_INIT(1'b1)	// Enable output signaling from wire
     ) gpio_control_bidir [1:0] (
     	`ifdef LVS
              inout vccd,
diff --git a/verilog/rtl/counter_timer_low.v b/verilog/rtl/counter_timer_low.v
index 66989d2..b9e1191 100755
--- a/verilog/rtl/counter_timer_low.v
+++ b/verilog/rtl/counter_timer_low.v
@@ -168,7 +168,6 @@
 assign value_cur_plus = value_cur + 1;
 assign value_cur_minus = value_cur - 1;
 
-assign loc_enable = enable_in && enable;
 assign loc_enable = (chain == 1'b1) ? (enable && enable_in) : enable;
 assign enable_out = enable;
 
diff --git a/verilog/rtl/mgmt_core.v b/verilog/rtl/mgmt_core.v
index e7511c6..4db3ada 100644
--- a/verilog/rtl/mgmt_core.v
+++ b/verilog/rtl/mgmt_core.v
@@ -75,15 +75,25 @@
 	wire hk_connect;
 
 	// JTAG (to be implemented)
-	wire jtag_out = 1'b0;
+	wire jtag_out;
+	wire jtag_out_pre = 1'b0;
 	wire jtag_outenb = 1'b1;
 
+	// SDO
+	wire sdo_out;
+	wire sdo_out_pre;
+
 	// Housekeeping SPI vectors
 	wire [4:0]  spi_pll_div;
 	wire [2:0]  spi_pll_sel;
 	wire [2:0]  spi_pll90_sel;
 	wire [25:0] spi_pll_trim;
 
+	// Override default function for SDO and JTAG outputs if purposely
+	// set for override by the management SoC.
+	assign sdo_out = (sdo_oenb_state == 1'b0) ? mgmt_out_data[1] : sdo_out_pre;
+	assign jtag_out = (jtag_oenb_state == 1'b0) ? mgmt_out_data[0] : jtag_out_pre;
+
 	caravel_clocking clocking(
 	`ifdef LVS
 		.vdd1v8(vdd1v8),
@@ -177,6 +187,9 @@
 		.pass_thru_mgmt_sck(pass_thru_mgmt_sck),
 		.pass_thru_mgmt_sdi(pass_thru_mgmt_sdi),
 		.pass_thru_mgmt_sdo(pass_thru_mgmt_sdo),
+		// SDO and JTAG state for output override
+		.sdo_oenb_state(sdo_oenb_state),
+		.jtag_oenb_state(jtag_oenb_state),
 		// SPI master->slave direct connection
 		.hk_connect(hk_connect),
 		// Secondary clock (for monitoring)
@@ -231,7 +244,7 @@
 	    .SCK((hk_connect) ? mgmt_out_data[4] : mgmt_in_data[4]),
 	    .SDI((hk_connect) ? mgmt_out_data[2] : mgmt_in_data[2]),
 	    .CSB((hk_connect) ? mgmt_out_data[3] : mgmt_in_data[3]),
-	    .SDO(sdo_out),
+	    .SDO(sdo_out_pre),
 	    .sdo_enb(sdo_outenb),
 	    .pll_dco_ena(spi_pll_dco_ena),
 	    .pll_sel(spi_pll_sel),
diff --git a/verilog/rtl/mgmt_soc.v b/verilog/rtl/mgmt_soc.v
index 67a2c17..f92fa36 100644
--- a/verilog/rtl/mgmt_soc.v
+++ b/verilog/rtl/mgmt_soc.v
@@ -124,6 +124,9 @@
     input  pass_thru_mgmt_sdi,
     output pass_thru_mgmt_sdo,
 
+    // State of JTAG and SDO pins (override for management output use)
+    output sdo_oenb_state,
+    output jtag_oenb_state,
     // SPI master->slave direct link
     output hk_connect,
     // User clock monitoring
@@ -693,6 +696,8 @@
 	.serial_clock(mprj_io_loader_clock),
 	.serial_resetn(mprj_io_loader_resetn),
 	.serial_data_out(mprj_io_loader_data),
+	.sdo_oenb_state(sdo_oenb_state),
+	.jtag_oenb_state(jtag_oenb_state),
 	.mgmt_gpio_out(mgmt_out_pre),
 	.mgmt_gpio_in(mgmt_in_data)
     );
diff --git a/verilog/rtl/mprj_ctrl.v b/verilog/rtl/mprj_ctrl.v
index ff04158..d7b8ec3 100644
--- a/verilog/rtl/mprj_ctrl.v
+++ b/verilog/rtl/mprj_ctrl.v
@@ -24,6 +24,11 @@
     output serial_resetn,
     output serial_data_out,
 
+    // Pass state of OEB bit on SDO and JTAG back to the core
+    // so that the function can be overridden for management output
+    output sdo_oenb_state,
+    output jtag_oenb_state,
+
     // Read/write data to each GPIO pad from management SoC
     input [IO_PADS-1:0] mgmt_gpio_in,
     output [IO_PADS-1:0] mgmt_gpio_out
@@ -59,6 +64,8 @@
 	.serial_clock(serial_clock),
 	.serial_resetn(serial_resetn),
 	.serial_data_out(serial_data_out),
+	.sdo_oenb_state(sdo_oenb_state),
+	.jtag_oenb_state(jtag_oenb_state),
 	// .mgmt_gpio_io(mgmt_gpio_io)
 	.mgmt_gpio_in(mgmt_gpio_in),
 	.mgmt_gpio_out(mgmt_gpio_out)
@@ -89,6 +96,8 @@
     output serial_clock,
     output serial_resetn,
     output serial_data_out,
+    output sdo_oenb_state,
+    output jtag_oenb_state,
     input  [IO_PADS-1:0] mgmt_gpio_in,
     output [IO_PADS-1:0] mgmt_gpio_out
 );
@@ -119,6 +128,16 @@
     wire [PWR_PADS-1:0] pwr_ctrl_sel;
     wire [IO_PADS-1:0] mgmt_gpio_in;
 
+    wire sdo_oenb_state, jtag_oenb_state;
+
+    // JTAG and housekeeping SDO are normally controlled by their respective
+    // modules with OEB set to the default 1 value.  If configured for an
+    // additional output by setting the OEB bit low, then pass this information
+    // back to the core so that the default signals can be overridden.
+
+    assign jtag_oenb_state = io_ctrl[0][OEB];
+    assign sdo_oenb_state = io_ctrl[1][OEB];
+
     assign xfer_sel = (iomem_addr[7:0] == XFER_ADJ);
 
     genvar i;
@@ -195,10 +214,10 @@
              always @(posedge clk) begin
                 if (!resetn) begin
 		    // NOTE:  This initialization must match the defaults passed
-		    // to the control blocks.  Specifically, 0x1801 is for a
+		    // to the control blocks.  Specifically, 0x1803 is for a
 		    // bidirectional pad, and 0x0403 is for a simple input pad
 		    if (i < 2) begin
-                    	io_ctrl[i] <= 'h1801;
+                    	io_ctrl[i] <= 'h1803;
 		    end else begin
                     	io_ctrl[i] <= 'h0403;
 		    end