usb: dwc3: Enable u1u2 functionality with USB Gen1 speed

Enable u1u2 functionality in USB device mode when USB is operating
in super speed (gen1 speed).

Change-Id: I14056274b68c3ed395ee3673312606ded68afcd6
Signed-off-by: Mayank Rana <quic_mrana@quicinc.com>
This commit is contained in:
Mayank Rana 2022-05-02 16:36:57 -07:00 committed by Wesley Cheng
parent 85ca34183b
commit 4977a05f93

View File

@ -587,6 +587,8 @@ struct dwc3_msm {
bool dis_sending_cm_l1_quirk;
bool use_eusb2_phy;
bool force_gen1;
bool cached_dis_u1_entry_quirk;
bool cached_dis_u2_entry_quirk;
};
#define USB_HSPHY_3P3_VOL_MIN 3050000 /* uV */
@ -3217,6 +3219,34 @@ static void mdwc3_usb2_phy_soft_reset(struct dwc3_msm *mdwc)
dwc3_msm_write_reg(mdwc->base, DWC3_GUSB2PHYCFG(0), val);
}
static void mdwc3_update_u1u2_value(struct dwc3 *dwc)
{
struct dwc3_msm *mdwc = dev_get_drvdata(dwc->dev->parent);
static bool read_u1u2;
/* cache DT based initial value once */
if (!read_u1u2) {
mdwc->cached_dis_u1_entry_quirk = dwc->dis_u1_entry_quirk;
mdwc->cached_dis_u2_entry_quirk = dwc->dis_u2_entry_quirk;
read_u1u2 = true;
dbg_log_string("cached_dt_param: u1_disable:%d u2_disable:%d\n",
mdwc->cached_dis_u1_entry_quirk, mdwc->cached_dis_u2_entry_quirk);
}
/* Enable u1u2 for USB super speed (gen1) only with quirks enable it */
if (dwc->speed == DWC3_DSTS_SUPERSPEED) {
dwc->dis_u1_entry_quirk = mdwc->cached_dis_u1_entry_quirk;
dwc->dis_u2_entry_quirk = mdwc->cached_dis_u2_entry_quirk;
} else {
dwc->dis_u1_entry_quirk = true;
dwc->dis_u2_entry_quirk = true;
}
dbg_log_string("speed:%d u1:%s u2:%s\n",
dwc->speed, dwc->dis_u1_entry_quirk ? "disabled" : "enabled",
dwc->dis_u2_entry_quirk ? "disabled" : "enabled");
}
void dwc3_msm_notify_event(struct dwc3 *dwc,
enum dwc3_notify_event event, unsigned int value)
{
@ -3271,6 +3301,7 @@ void dwc3_msm_notify_event(struct dwc3 *dwc,
PWR_EVNT_LPM_OUT_L1_MASK, 1);
atomic_set(&mdwc->in_lpm, 0);
mdwc3_update_u1u2_value(dwc);
break;
case DWC3_GSI_EVT_BUF_ALLOC:
dev_dbg(mdwc->dev, "DWC3_GSI_EVT_BUF_ALLOC\n");