[hw,uart] Change the uart0 pins to match the tapeout

 Change UART0 RX/TX from IOC10/IOC11 to IOC3/IOC4

FIX #8355

Signed-off-by: Douglas Reis <doreis@lowrisc.org>
diff --git a/hw/top_earlgrey/data/pins_cw310.xdc b/hw/top_earlgrey/data/pins_cw310.xdc
index b32fea3..38fe1f0 100644
--- a/hw/top_earlgrey/data/pins_cw310.xdc
+++ b/hw/top_earlgrey/data/pins_cw310.xdc
@@ -63,13 +63,13 @@
 
 ## OTHER IO
 set_property -dict { PACKAGE_PIN A8  IOSTANDARD LVCMOS33 } [get_ports { IOC2 }]; #USERIOB-9
-set_property -dict { PACKAGE_PIN B9  IOSTANDARD LVCMOS33 } [get_ports { IOC3 }]; #USERIOB-11
-set_property -dict { PACKAGE_PIN A9  IOSTANDARD LVCMOS33 } [get_ports { IOC4 }]; #USERIOB-15
 set_property -dict { PACKAGE_PIN E10 IOSTANDARD LVCMOS33 } [get_ports { IOC5 }]; #USERIOB-14
 set_property -dict { PACKAGE_PIN D8  IOSTANDARD LVCMOS33 } [get_ports { IOC6 }]; #USERIOB-16
 set_property -dict { PACKAGE_PIN D9  IOSTANDARD LVCMOS33 } [get_ports { IOC7 }]; #USERIOB-18
 #set_property -dict { PACKAGE_PIN C9  IOSTANDARD LVCMOS33 } [get_ports { IOC8 }]; #USERIOB-24
 #set_property -dict { PACKAGE_PIN D10 IOSTANDARD LVCMOS33 } [get_ports { IOC9 }]; #USERIOB-26
+set_property -dict { PACKAGE_PIN B9  IOSTANDARD LVCMOS33 } [get_ports { IOC10 }]; #USERIOB-11
+set_property -dict { PACKAGE_PIN A9  IOSTANDARD LVCMOS33 } [get_ports { IOC11 }]; #USERIOB-15
 
 ## ChipWhisperer 20-Pin Connector (J14)
 set_property -dict { PACKAGE_PIN AF25 IOSTANDARD LVCMOS33 } [get_ports { IOC9 }];       #J14 PIN 12 CWIO_IO2 - OpenTitan UART1 TX
@@ -97,8 +97,8 @@
 set_property -dict { PACKAGE_PIN A13   IOSTANDARD LVCMOS33 } [get_ports { IO_USB_DPPULLUP0 }]; #USERIOB-27
 
 ## UART
-set_property -dict { PACKAGE_PIN AA22 IOSTANDARD LVCMOS33 } [get_ports { IOC11 }]; #UART1RXD - OpenTitan UART0 TX
-set_property -dict { PACKAGE_PIN W24  IOSTANDARD LVCMOS33 } [get_ports { IOC10 }]; #UART1TXD - OpenTitan UART0 RX
+set_property -dict { PACKAGE_PIN AA22 IOSTANDARD LVCMOS33 } [get_ports { IOC4 }]; #UART1RXD - OpenTitan UART0 TX
+set_property -dict { PACKAGE_PIN W24  IOSTANDARD LVCMOS33 } [get_ports { IOC3 }]; #UART1TXD - OpenTitan UART0 RX
 
 ## Configuration options, can be used for all designs
 set_property CONFIG_VOLTAGE 3.3 [current_design]
diff --git a/hw/top_earlgrey/data/pins_nexysvideo.xdc b/hw/top_earlgrey/data/pins_nexysvideo.xdc
index 7992fdb..28cd255 100644
--- a/hw/top_earlgrey/data/pins_nexysvideo.xdc
+++ b/hw/top_earlgrey/data/pins_nexysvideo.xdc
@@ -116,13 +116,13 @@
 
 ## Pmod header JA
 set_property -dict { PACKAGE_PIN AB22  IOSTANDARD LVCMOS33 } [get_ports { IOC2 }]; #IO_L10N_T1_D15_14 Sch=ja[1]
-set_property -dict { PACKAGE_PIN AB21  IOSTANDARD LVCMOS33 } [get_ports { IOC3 }]; #IO_L10P_T1_D14_14 Sch=ja[2]
-set_property -dict { PACKAGE_PIN AB20  IOSTANDARD LVCMOS33 } [get_ports { IOC4 }]; #IO_L15N_T2_DQS_DOUT_CSO_B_14 Sch=ja[3]
 set_property -dict { PACKAGE_PIN AB18  IOSTANDARD LVCMOS33 } [get_ports { IOC5 }]; #IO_L17N_T2_A13_D29_14 Sch=ja[4]
 set_property -dict { PACKAGE_PIN Y21   IOSTANDARD LVCMOS33 } [get_ports { IOC6 }]; #IO_L9P_T1_DQS_14 Sch=ja[7]
 set_property -dict { PACKAGE_PIN AA21  IOSTANDARD LVCMOS33 } [get_ports { IOC7 }]; #IO_L8N_T1_D12_14 Sch=ja[8]
 set_property -dict { PACKAGE_PIN AA20  IOSTANDARD LVCMOS33 } [get_ports { IOC8 }]; #IO_L8P_T1_D11_14 Sch=ja[9]
 set_property -dict { PACKAGE_PIN AA18  IOSTANDARD LVCMOS33 } [get_ports { IOC9 }]; #IO_L17P_T2_A14_D30_14 Sch=ja[10]
+set_property -dict { PACKAGE_PIN AB21  IOSTANDARD LVCMOS33 } [get_ports { IOC10 }]; #IO_L10P_T1_D14_14 Sch=ja[2]
+set_property -dict { PACKAGE_PIN AB20  IOSTANDARD LVCMOS33 } [get_ports { IOC11 }]; #IO_L15N_T2_DQS_DOUT_CSO_B_14 Sch=ja[3]
 
 
 ## Pmod header JB
@@ -176,8 +176,8 @@
 
 
 ## UART
-set_property -dict { PACKAGE_PIN AA19  IOSTANDARD LVCMOS33 } [get_ports { IOC11 }]; #IO_L15P_T2_DQS_RDWR_B_14 Sch=uart_rx_out
-set_property -dict { PACKAGE_PIN V18   IOSTANDARD LVCMOS33 } [get_ports { IOC10 }]; #IO_L14P_T2_SRCC_14 Sch=uart_tx_in
+set_property -dict { PACKAGE_PIN AA19  IOSTANDARD LVCMOS33 } [get_ports { IOC4 }]; #IO_L15P_T2_DQS_RDWR_B_14 Sch=uart_rx_out
+set_property -dict { PACKAGE_PIN V18   IOSTANDARD LVCMOS33 } [get_ports { IOC3 }]; #IO_L14P_T2_SRCC_14 Sch=uart_tx_in
 
 
 ## Ethernet
diff --git a/hw/top_earlgrey/dv/tb/tb.sv b/hw/top_earlgrey/dv/tb/tb.sv
index 127b71d..906f6b8 100644
--- a/hw/top_earlgrey/dv/tb/tb.sv
+++ b/hw/top_earlgrey/dv/tb/tb.sv
@@ -80,6 +80,18 @@
   assign (weak0, weak1) spi_host_tie_off = '0;
   assign (weak0, weak1) spi_dev_tie_off = '0;
 
+  // TODO: Replace this weak pull to a known value with initialization
+  // in the agent/interface.
+  wire ioc3;
+  wire ioc4;
+  wire uart0_sel;
+  assign uart0_sel = 1'b1;
+  assign ioc3 = (uart0_sel) ? uart_if[0].uart_rx : dft_straps[0];
+  assign ioc4 = (uart0_sel) ? 1'bz : dft_straps[1];
+  assign uart_if[0].uart_tx = ioc4;
+  assign (weak0, weak1) ioc3 = 1'b1;
+  assign (weak0, weak1) ioc4 = 1'b1;
+
   // TODO: the external clk is currently not connected.
   // We will need to feed this in via a muxed pin, once that function implemented.
 
@@ -130,16 +142,16 @@
     .IOC0(tie_off[5]),     // MIO 22
     .IOC1(sw_straps[1]),   // MIO 23
     .IOC2(sw_straps[2]),   // MIO 24
-    .IOC3(dft_straps[0]),  // MIO 25
-    .IOC4(dft_straps[1]),  // MIO 26
+    .IOC3(ioc3),           // MIO 25
+    .IOC4(ioc4),           // MIO 26
     .IOC5(tap_straps[1]),  // MIO 27
     .IOC6(clk),            // MIO 28 - external clock fed in at a fixed position
     .IOC7(tie_off[7]),     // MIO 29
     .IOC8(tap_straps[0]),  // MIO 30
     .IOC9(tie_off[8]),     // MIO 31
-    .IOC10(uart_rx[0]),    // MIO 32
-    .IOC11(uart_tx[0]),    // MIO 33
-    .IOC12(tie_off[9]),    // MIO 34
+    .IOC10(tie_off[9]),    // MIO 32
+    .IOC11(tie_off[10]),   // MIO 33
+    .IOC12(tie_off[11]),   // MIO 34
     // Bank R (VCC domain)
     .IOR0(jtag_tms),       // MIO 35
     .IOR1(jtag_tdo),       // MIO 36
@@ -284,14 +296,17 @@
     run_test();
   end
 
-  for (genvar i = 0; i < NUM_UARTS; i++) begin : gen_uart_if
+  for (genvar i = 1; i < NUM_UARTS; i++) begin : gen_uart_if
     // TODO: Replace this weak pull to a known value with initialization
     // in the agent/interface.
+
     assign (weak0, weak1) uart_rx[i] = 1'b1;
     assign (weak0, weak1) uart_tx[i] = 1'b1;
     assign uart_rx[i] = uart_if[i].uart_rx;
     assign uart_if[i].uart_tx = uart_tx[i];
+  end
 
+  for (genvar i = 0; i < NUM_UARTS; i++) begin : gen_uart_agent_if
     initial begin
       uvm_config_db#(virtual uart_if)::set(null, $sformatf("*.env.m_uart_agent%0d*", i),
                                            "vif", uart_if[i]);
diff --git a/hw/top_earlgrey/rtl/chip_earlgrey_verilator.sv b/hw/top_earlgrey/rtl/chip_earlgrey_verilator.sv
index ba29f18..6802e6d 100644
--- a/hw/top_earlgrey/rtl/chip_earlgrey_verilator.sv
+++ b/hw/top_earlgrey/rtl/chip_earlgrey_verilator.sv
@@ -92,15 +92,16 @@
 
   always_comb begin : assign_mio_in
     mio_in = '0;
-    mio_in[32] = cio_uart_rx_p2d_i;
     mio_in[31:0] = cio_gpio_p2d_i;
+    mio_in[25] = cio_uart_rx_p2d_i;
   end
 
-  assign cio_gpio_d2p_o       = mio_out[31:0];
-  assign cio_gpio_en_d2p_o    = mio_oe[31:0];
-  assign cio_uart_tx_d2p_o    = mio_out[33];
-  assign cio_uart_tx_en_d2p_o = mio_oe[33];
-
+  assign cio_gpio_d2p_o[25:0]       = mio_out[25:0];
+  assign cio_gpio_en_d2p_o[25:0]    = mio_oe[25:0];
+  assign cio_gpio_d2p_o[31:27]      = mio_out[31:27];
+  assign cio_gpio_en_d2p_o[31:27]   = mio_oe[31:27];
+  assign cio_uart_tx_d2p_o    = mio_out[26];
+  assign cio_uart_tx_en_d2p_o = mio_oe[26];
 
   ////////////////////////////////
   // AST - Custom for Verilator //
diff --git a/hw/top_englishbreakfast/data/pins_cw305.xdc b/hw/top_englishbreakfast/data/pins_cw305.xdc
index 1aec16d..bec2081 100644
--- a/hw/top_englishbreakfast/data/pins_cw305.xdc
+++ b/hw/top_englishbreakfast/data/pins_cw305.xdc
@@ -54,8 +54,8 @@
 
 ## 20-Pin Connector (JP1)
 
-set_property -dict { PACKAGE_PIN R16 IOSTANDARD LVCMOS33 } [get_ports { IOC11 }];      #JP1 PIN 12 TIO2    - OpenTitan UART0 TX
-set_property -dict { PACKAGE_PIN P16 IOSTANDARD LVCMOS33 } [get_ports { IOC10 }];      #JP1 PIN 10 TIO1    - OpenTitan UART0 RX
+set_property -dict { PACKAGE_PIN R16 IOSTANDARD LVCMOS33 } [get_ports { IOC4 }];      #JP1 PIN 12 TIO2    - OpenTitan UART0 TX
+set_property -dict { PACKAGE_PIN P16 IOSTANDARD LVCMOS33 } [get_ports { IOC3 }];      #JP1 PIN 10 TIO1    - OpenTitan UART0 RX
 set_property -dict { PACKAGE_PIN T14 IOSTANDARD LVCMOS33 } [get_ports { IO_TRIGGER }]; #JP1 PIN 16 TIO4    - Capture Trigger
 set_property -dict { PACKAGE_PIN M16 IOSTANDARD LVCMOS33 } [get_ports { IO_CLKOUT }];  #JP1 PIN  4 TIO_HS1 - Target clock
 
diff --git a/hw/top_englishbreakfast/data/top_englishbreakfast.hjson b/hw/top_englishbreakfast/data/top_englishbreakfast.hjson
index 043e603..0df2601 100644
--- a/hw/top_englishbreakfast/data/top_englishbreakfast.hjson
+++ b/hw/top_englishbreakfast/data/top_englishbreakfast.hjson
@@ -882,7 +882,7 @@
           'FLASH_TEST_VOLT',
           'FLASH_TEST_MODE0', 'FLASH_TEST_MODE1',
           'IOB10', 'IOB11', 'IOB12',
-          'IOC0', 'IOC1', 'IOC2', 'IOC3', 'IOC4', 'IOC5', 'IOC6', 'IOC7', 'IOC8', 'IOC9', 'IOC12',
+          'IOC0', 'IOC1', 'IOC2', 'IOC5', 'IOC6', 'IOC7', 'IOC8', 'IOC9', 'IOC10', 'IOC11', 'IOC12',
           'IOR0', 'IOR1', 'IOR2', 'IOR3', 'IOR4', 'IOR5', 'IOR6', 'IOR7', 'IOR10', 'IOR11', 'IOR12', 'IOR13'
         ],
 
diff --git a/hw/top_englishbreakfast/rtl/chip_englishbreakfast_verilator.sv b/hw/top_englishbreakfast/rtl/chip_englishbreakfast_verilator.sv
index 86c1864..18376ba 100644
--- a/hw/top_englishbreakfast/rtl/chip_englishbreakfast_verilator.sv
+++ b/hw/top_englishbreakfast/rtl/chip_englishbreakfast_verilator.sv
@@ -71,14 +71,16 @@
 
   always_comb begin : assign_mio_in
     mio_in = '0;
-    mio_in[32] = cio_uart_rx_p2d;
     mio_in[31:0] = cio_gpio_p2d;
+    mio_in[25] = cio_uart_rx_p2d;
   end
 
-  assign cio_gpio_d2p       = mio_out[31:0];
-  assign cio_gpio_en_d2p    = mio_oe[31:0];
-  assign cio_uart_tx_d2p    = mio_out[33];
-  assign cio_uart_tx_en_d2p = mio_oe[33];
+  assign cio_gpio_d2p[25:0]       = mio_out[25:0];
+  assign cio_gpio_en_d2p[25:0]    = mio_oe[25:0];
+  assign cio_gpio_d2p[31:27]      = mio_out[31:27];
+  assign cio_gpio_en_d2p[31:27]   = mio_oe[31:27];
+  assign cio_uart_tx_d2p    = mio_out[26];
+  assign cio_uart_tx_en_d2p = mio_oe[26];
 
   // dummy ast connections
   pwrmgr_pkg::pwr_ast_rsp_t ast_base_pwr;
diff --git a/hw/top_englishbreakfast/util/sw_sources.patch b/hw/top_englishbreakfast/util/sw_sources.patch
index d4a18b2..f40c9a1 100644
--- a/hw/top_englishbreakfast/util/sw_sources.patch
+++ b/hw/top_englishbreakfast/util/sw_sources.patch
@@ -3,7 +3,7 @@
 --- a/sw/device/lib/pinmux.c
 +++ b/sw/device/lib/pinmux.c
 @@ -60,24 +60,4 @@ void pinmux_init(void) {
-   reg_offset = kTopEarlgreyPinmuxMioOutIoc11 << 2;
+   reg_offset = kTopEarlgreyPinmuxMioOutIoc4 << 2;
    mask = PINMUX_MIO_OUTSEL_0_OUT_0_MASK;
    mmio_region_write32(reg32, reg_offset, reg_value & mask);
 -
diff --git a/sw/device/lib/pinmux.c b/sw/device/lib/pinmux.c
index 8861f54..305572e 100644
--- a/sw/device/lib/pinmux.c
+++ b/sw/device/lib/pinmux.c
@@ -41,23 +41,23 @@
                  PINMUX_MIO_OUTSEL_0_OUT_0_MASK,
                  PINMUX_PERIPH_OUTSEL_IDX_OFFSET);
 
-  // Configure UART0 RX input to connect to MIO pad IOC10
+  // Configure UART0 RX input to connect to MIO pad IOC3
   mmio_region_t reg32 = mmio_region_from_addr(
       PINMUX0_BASE_ADDR + PINMUX_MIO_PERIPH_INSEL_0_REG_OFFSET);
-  uint32_t reg_value = kTopEarlgreyPinmuxInselIoc10;
+  uint32_t reg_value = kTopEarlgreyPinmuxInselIoc3;
   // We've got one insel configuration field per register. Hence, we have to
   // convert the enumeration index into a byte address using << 2.
   uint32_t reg_offset = kTopEarlgreyPinmuxPeripheralInUart0Rx << 2;
   uint32_t mask = PINMUX_MIO_PERIPH_INSEL_0_IN_0_MASK;
   mmio_region_write32(reg32, reg_offset, reg_value & mask);
 
-  // Configure UART0 TX output to connect to MIO pad IOC11
+  // Configure UART0 TX output to connect to MIO pad IOC4
   reg32 =
       mmio_region_from_addr(PINMUX0_BASE_ADDR + PINMUX_MIO_OUTSEL_0_REG_OFFSET);
   reg_value = kTopEarlgreyPinmuxOutselUart0Tx;
   // We've got one insel configuration field per register. Hence, we have to
   // convert the enumeration index into a byte address using << 2.
-  reg_offset = kTopEarlgreyPinmuxMioOutIoc11 << 2;
+  reg_offset = kTopEarlgreyPinmuxMioOutIoc4 << 2;
   mask = PINMUX_MIO_OUTSEL_0_OUT_0_MASK;
   mmio_region_write32(reg32, reg_offset, reg_value & mask);
 
diff --git a/sw/device/silicon_creator/lib/drivers/pinmux.c b/sw/device/silicon_creator/lib/drivers/pinmux.c
index d23714e..9b952f4 100644
--- a/sw/device/silicon_creator/lib/drivers/pinmux.c
+++ b/sw/device/silicon_creator/lib/drivers/pinmux.c
@@ -34,7 +34,7 @@
      */
     {
         .periph = kTopEarlgreyPinmuxPeripheralInUart0Rx,
-        .pad = kTopEarlgreyPinmuxInselIoc10,
+        .pad = kTopEarlgreyPinmuxInselIoc3,
     },
 };
 
@@ -53,7 +53,7 @@
     /**
      * UART
      */
-    {.pad = kTopEarlgreyPinmuxMioOutIoc11,
+    {.pad = kTopEarlgreyPinmuxMioOutIoc4,
      .periph = kTopEarlgreyPinmuxOutselUart0Tx},
 };
 
diff --git a/sw/device/silicon_creator/lib/drivers/pinmux_unittest.cc b/sw/device/silicon_creator/lib/drivers/pinmux_unittest.cc
index 96b3152..0b71f34 100644
--- a/sw/device/silicon_creator/lib/drivers/pinmux_unittest.cc
+++ b/sw/device/silicon_creator/lib/drivers/pinmux_unittest.cc
@@ -63,10 +63,10 @@
   EXPECT_ABS_WRITE32(RegIn(kTopEarlgreyPinmuxPeripheralInGpioGpio17),
                      kTopEarlgreyPinmuxInselIob8)
   EXPECT_ABS_WRITE32(RegIn(kTopEarlgreyPinmuxPeripheralInUart0Rx),
-                     kTopEarlgreyPinmuxInselIoc10);
+                     kTopEarlgreyPinmuxInselIoc3);
 
   // The outputs that will be configured.
-  EXPECT_ABS_WRITE32(RegOut(kTopEarlgreyPinmuxMioOutIoc11),
+  EXPECT_ABS_WRITE32(RegOut(kTopEarlgreyPinmuxMioOutIoc4),
                      kTopEarlgreyPinmuxOutselUart0Tx);
 
   pinmux_init();
diff --git a/sw/device/tests/sim_dv/uart_tx_rx_test.c b/sw/device/tests/sim_dv/uart_tx_rx_test.c
index 2d931d1..9f387d2 100644
--- a/sw/device/tests/sim_dv/uart_tx_rx_test.c
+++ b/sw/device/tests/sim_dv/uart_tx_rx_test.c
@@ -500,8 +500,8 @@
 
   // TODO, remove thse once pinout configuration is provided
   pinmux_connect_uart_to_pads(
-      kTopEarlgreyPinmuxInselIoc10, kTopEarlgreyPinmuxPeripheralInUart0Rx,
-      kTopEarlgreyPinmuxMioOutIoc11, kTopEarlgreyPinmuxOutselUart0Tx);
+      kTopEarlgreyPinmuxInselIoc3, kTopEarlgreyPinmuxPeripheralInUart0Rx,
+      kTopEarlgreyPinmuxMioOutIoc4, kTopEarlgreyPinmuxOutselUart0Tx);
   pinmux_connect_uart_to_pads(
       kTopEarlgreyPinmuxInselIor5, kTopEarlgreyPinmuxPeripheralInUart1Rx,
       kTopEarlgreyPinmuxMioOutIor6, kTopEarlgreyPinmuxOutselUart1Tx);