Message ID | 20240423082420.32336-1-r-gunasekaran@ti.com |
---|---|
State | Superseded |
Delegated to: | Marek Vasut |
Headers | show |
Series | [v2] usb: cdns3: gadget.c: Set fast access bit | expand |
On 4/23/24 10:24 AM, Ravi Gunasekaran wrote: > From: Aswath Govindraju <a-govindraju@ti.com> > > When the device port is in a low power state [U3/L2/Not Connected], > accesses to usb device registers may take a long time. This could lead to > potential core hang when the controller registers are accessed after the > port is disabled by setting DEVDS field. Setting the fast register access > bit ensures that the PHY clock is keeping up in active state. > > Therefore, set fast access bit to ensure the accesses to device registers > are quick even in low power states. > > Signed-off-by: Aswath Govindraju <a-govindraju@ti.com> > Signed-off-by: Ravi Gunasekaran <r-gunasekaran@ti.com> > Reviewed-by: Roger Quadros <rogerq@kernel.org> > --- > v1 was posted and was reviewed as well. But it did not get merged. > This change is present in upstream linux kernel as well. > Upstream Linux kernel commit: b5148d946f45 ("usb: cdns3: gadget: set fast access bit") This commit ^ should be mentioned in the commit message. With that fixed: Reviewed-by: Marek Vasut <marex@denx.de> Thanks !
diff --git a/drivers/usb/cdns3/gadget.c b/drivers/usb/cdns3/gadget.c index 7aa0c6b2be..d11175dc5b 100644 --- a/drivers/usb/cdns3/gadget.c +++ b/drivers/usb/cdns3/gadget.c @@ -2325,6 +2325,9 @@ static void cdns3_gadget_config(struct cdns3_device *priv_dev) writel(USB_IEN_INIT, ®s->usb_ien); writel(USB_CONF_CLK2OFFDS | USB_CONF_L1DS, ®s->usb_conf); + /* Set the Fast access bit */ + writel(PUSB_PWR_FST_REG_ACCESS, &priv_dev->regs->usb_pwr); + cdns3_configure_dmult(priv_dev, NULL); cdns3_gadget_pullup(&priv_dev->gadget, 1); @@ -2383,6 +2386,7 @@ static int cdns3_gadget_udc_stop(struct usb_gadget *gadget) /* disable interrupt for device */ writel(0, &priv_dev->regs->usb_ien); + writel(0, &priv_dev->regs->usb_pwr); writel(USB_CONF_DEVDS, &priv_dev->regs->usb_conf); return ret;