[sw/dif_usbdev] Add new phy config options
This change adds two new phy config options (pinflip and
usb_ref_disable) that were introduced after #2093 was merged.
See also: lowRISC/opentitan#1601 (tracking)
Signed-off-by: Alphan Ulusoy <alphan@google.com>
diff --git a/sw/device/lib/dif/dif_usbdev.c b/sw/device/lib/dif/dif_usbdev.c
index b2f3f99..01bd160 100644
--- a/sw/device/lib/dif/dif_usbdev.c
+++ b/sw/device/lib/dif/dif_usbdev.c
@@ -269,7 +269,9 @@
if (!is_valid_toggle(config->differential_rx) ||
!is_valid_toggle(config->differential_tx) ||
!is_valid_toggle(config->single_bit_eop) ||
- !is_valid_power_sense_override(config->power_sense_override)) {
+ !is_valid_power_sense_override(config->power_sense_override) ||
+ !is_valid_toggle(config->pin_flip) ||
+ !is_valid_toggle(config->clock_sync_signals)) {
return kDifUsbdevBadArg;
}
@@ -334,6 +336,24 @@
1);
}
+ if (config->pin_flip == kDifUsbdevToggleEnable) {
+ phy_config_val = bitfield_field32_write(
+ phy_config_val,
+ (bitfield_field32_t){
+ .mask = 1, .index = USBDEV_PHY_CONFIG_PINFLIP,
+ },
+ 1);
+ }
+
+ if (config->clock_sync_signals == kDifUsbdevToggleDisable) {
+ phy_config_val = bitfield_field32_write(
+ phy_config_val,
+ (bitfield_field32_t){
+ .mask = 1, .index = USBDEV_PHY_CONFIG_USB_REF_DISABLE,
+ },
+ 1);
+ }
+
// Write configuration to PHY_CONFIG register
mmio_region_write32(usbdev->base_addr, USBDEV_PHY_CONFIG_REG_OFFSET,
phy_config_val);
diff --git a/sw/device/lib/dif/dif_usbdev.h b/sw/device/lib/dif/dif_usbdev.h
index 2cb90a1..288e9e1 100644
--- a/sw/device/lib/dif/dif_usbdev.h
+++ b/sw/device/lib/dif/dif_usbdev.h
@@ -146,6 +146,14 @@
* Override USB power sense.
*/
dif_usbdev_power_sense_override_t power_sense_override;
+ /**
+ * Flip the D+/D- pins.
+ */
+ dif_usbdev_toggle_t pin_flip;
+ /**
+ * Reference signal generation for clock synchronization.
+ */
+ dif_usbdev_toggle_t clock_sync_signals;
} dif_usbdev_config_t;
/**