[usb/top] Remove AND gates on non-AON domain and rename 3.3V signal
Fix #7802
Signed-off-by: Michael Schaffner <msf@opentitan.org>
diff --git a/hw/ip/pinmux/rtl/pinmux.sv b/hw/ip/pinmux/rtl/pinmux.sv
index b2f7492..97a8259 100644
--- a/hw/ip/pinmux/rtl/pinmux.sv
+++ b/hw/ip/pinmux/rtl/pinmux.sv
@@ -244,8 +244,8 @@
// input signals for resume detection
.usb_dp_async_alw_i(dio_to_periph_o[TargetCfg.usb_dp_idx]),
.usb_dn_async_alw_i(dio_to_periph_o[TargetCfg.usb_dn_idx]),
- .usb_dppullup_en_alw_i(dio_oe_o[TargetCfg.usb_dp_pullup_idx]),
- .usb_dnpullup_en_alw_i(dio_oe_o[TargetCfg.usb_dn_pullup_idx]),
+ .usb_dppullup_en_alw_i(dio_out_o[TargetCfg.usb_dp_pullup_idx]),
+ .usb_dnpullup_en_alw_i(dio_out_o[TargetCfg.usb_dn_pullup_idx]),
// tie this to something from usbdev to indicate its out of reset
.usb_out_of_rst_upwr_i(usb_out_of_rst_i),
diff --git a/hw/ip/prim_generic/rtl/prim_generic_usb_diff_rx.sv b/hw/ip/prim_generic/rtl/prim_generic_usb_diff_rx.sv
index 43ddde8..d49c06e 100644
--- a/hw/ip/prim_generic/rtl/prim_generic_usb_diff_rx.sv
+++ b/hw/ip/prim_generic/rtl/prim_generic_usb_diff_rx.sv
@@ -13,7 +13,7 @@
input wire input_pi, // differential input
input wire input_ni, // differential input
input input_en_i, // input buffer enable
- input core_pok_i, // core power indication at VCC level
+ input core_pok_h_i, // core power indication at VCC level
input pullup_p_en_i, // pullup enable for P
input pullup_n_en_i, // pullup enable for N
input [CalibW-1:0] calibration_i, // calibration input
@@ -29,6 +29,6 @@
assign unused_calibration = calibration_i;
assign unused_pullup_p_en = pullup_p_en_i;
assign unused_pullup_n_en = pullup_n_en_i;
- assign unused_core_pok = core_pok_i;
+ assign unused_core_pok = core_pok_h_i;
endmodule : prim_generic_usb_diff_rx
diff --git a/hw/ip/usbdev/rtl/usbdev.sv b/hw/ip/usbdev/rtl/usbdev.sv
index b5edc1d..296c7eb 100644
--- a/hw/ip/usbdev/rtl/usbdev.sv
+++ b/hw/ip/usbdev/rtl/usbdev.sv
@@ -1059,8 +1059,8 @@
assign cio_rx_enable_en_o = 1'b1;
// Pullup
- assign cio_dp_pullup_o = 1'b1;
- assign cio_dn_pullup_o = 1'b1;
+ assign cio_dp_pullup_o = cio_dp_pullup_en_o;
+ assign cio_dn_pullup_o = cio_dn_pullup_en_o;
/////////////////////////////////////////
// SOF Reference for Clock Calibration //
diff --git a/hw/top_earlgrey/rtl/autogen/chip_earlgrey_asic.sv b/hw/top_earlgrey/rtl/autogen/chip_earlgrey_asic.sv
index a44a892..a9aff1e 100644
--- a/hw/top_earlgrey/rtl/autogen/chip_earlgrey_asic.sv
+++ b/hw/top_earlgrey/rtl/autogen/chip_earlgrey_asic.sv
@@ -728,11 +728,11 @@
// Pullups
logic usb_pullup_p_en, usb_pullup_n_en;
- assign usb_pullup_p_en = dio_out[DioUsbdevDpPullup] & dio_oe[DioUsbdevDpPullup];
- assign usb_pullup_n_en = dio_out[DioUsbdevDnPullup] & dio_oe[DioUsbdevDnPullup];
+ assign usb_pullup_p_en = dio_out[DioUsbdevDpPullup];
+ assign usb_pullup_n_en = dio_out[DioUsbdevDnPullup];
logic usb_rx_enable;
- assign usb_rx_enable = dio_out[DioUsbdevRxEnable] & dio_oe[DioUsbdevRxEnable];
+ assign usb_rx_enable = dio_out[DioUsbdevRxEnable];
logic [ast_pkg::UsbCalibWidth-1:0] usb_io_pu_cal;
@@ -746,7 +746,7 @@
.input_pi ( USB_P ),
.input_ni ( USB_N ),
.input_en_i ( usb_rx_enable ),
- .core_pok_i ( ast_pwst_h.aon_pok ),
+ .core_pok_h_i ( ast_pwst_h.aon_pok ),
.pullup_p_en_i ( usb_pullup_p_en ),
.pullup_n_en_i ( usb_pullup_n_en ),
.calibration_i ( usb_io_pu_cal ),
@@ -781,12 +781,15 @@
dio_oe[DioUsbdevSuspend],
dio_attr[DioUsbdevSuspend],
// Rx enable
+ dio_oe[DioUsbdevRxEnable],
dio_attr[DioUsbdevRxEnable],
// D is used as an input only
dio_out[DioUsbdevD],
dio_oe[DioUsbdevD],
dio_attr[DioUsbdevD],
// Pullup/down
+ dio_oe[DioUsbdevDpPullup],
+ dio_oe[DioUsbdevDnPullup],
dio_attr[DioUsbdevDpPullup],
dio_attr[DioUsbdevDnPullup]
};
diff --git a/util/topgen/templates/chiplevel.sv.tpl b/util/topgen/templates/chiplevel.sv.tpl
index a17e39c..e916fd4 100644
--- a/util/topgen/templates/chiplevel.sv.tpl
+++ b/util/topgen/templates/chiplevel.sv.tpl
@@ -576,11 +576,11 @@
// Pullups
logic usb_pullup_p_en, usb_pullup_n_en;
- assign usb_pullup_p_en = dio_out[DioUsbdevDpPullup] & dio_oe[DioUsbdevDpPullup];
- assign usb_pullup_n_en = dio_out[DioUsbdevDnPullup] & dio_oe[DioUsbdevDnPullup];
+ assign usb_pullup_p_en = dio_out[DioUsbdevDpPullup];
+ assign usb_pullup_n_en = dio_out[DioUsbdevDnPullup];
logic usb_rx_enable;
- assign usb_rx_enable = dio_out[DioUsbdevRxEnable] & dio_oe[DioUsbdevRxEnable];
+ assign usb_rx_enable = dio_out[DioUsbdevRxEnable];
logic [ast_pkg::UsbCalibWidth-1:0] usb_io_pu_cal;
@@ -594,7 +594,7 @@
.input_pi ( USB_P ),
.input_ni ( USB_N ),
.input_en_i ( usb_rx_enable ),
- .core_pok_i ( ast_pwst_h.aon_pok ),
+ .core_pok_h_i ( ast_pwst_h.aon_pok ),
.pullup_p_en_i ( usb_pullup_p_en ),
.pullup_n_en_i ( usb_pullup_n_en ),
.calibration_i ( usb_io_pu_cal ),
@@ -629,12 +629,15 @@
dio_oe[DioUsbdevSuspend],
dio_attr[DioUsbdevSuspend],
// Rx enable
+ dio_oe[DioUsbdevRxEnable],
dio_attr[DioUsbdevRxEnable],
// D is used as an input only
dio_out[DioUsbdevD],
dio_oe[DioUsbdevD],
dio_attr[DioUsbdevD],
// Pullup/down
+ dio_oe[DioUsbdevDpPullup],
+ dio_oe[DioUsbdevDnPullup],
dio_attr[DioUsbdevDpPullup],
dio_attr[DioUsbdevDnPullup]
};