On Wed, 27 Jun 2012, Keshava Munegowda wrote:
> Its observed that in Beagle XM , during suspend/resume the OMAP
> EHCI controller losing the register contents. this is causing the
> hub disconnect after the resume, this is causing failure of
> device detection after the resume.
> to avoid the hub disconnect , The ehci config flag register is
> configured again , reset the phy and issue the port powers during
> resume.
The idea is good, but the implementation is wrong.
> +static int omap_ehci_bus_resume(struct usb_hcd *hcd)
> +{
> +
> + struct device *dev = hcd->self.controller;
> + struct ehci_hcd_omap_platform_data *pdata = dev->platform_data;
> + struct resource *regs = hcd->regs;
> +
> + /* In case , ports are not powered and config flag not set */
> + if (~(ehci_read(regs, EHCI_CONFIGFLAG) & 0x01)) {
> + ehci_write(regs, EHCI_CONFIGFLAG, 0x1);
> +
> + /*
> + * An undocumented "feature" in the OMAP3 EHCI controller,
> + * causes suspended ports to be taken out of suspend when
> + * the USBCMD.Run/Stop bit is cleared (for example when
> + * we do ehci_bus_suspend).
> + * This breaks suspend-resume if the root-hub is allowed
> + * to suspend. Writing 1 to this undocumented register bit
> + * disables this feature and restores normal behavior.
> + */
> + ehci_write(regs, EHCI_INSNREG04,
> + EHCI_INSNREG04_DISABLE_UNSUSPEND);
> +
> + /* Soft reset the PHY using PHY reset command over ULPI */
> + if (pdata->port_mode[0] == OMAP_EHCI_PORT_MODE_PHY)
> + omap_ehci_soft_phy_reset(dev, 0);
> + if (pdata->port_mode[1] == OMAP_EHCI_PORT_MODE_PHY)
> + omap_ehci_soft_phy_reset(dev, 1);
> +
> + /* root ports should always stay powered */
> + ehci_port_power(hcd_to_ehci(hcd), 1);
> + }
This needs to be done in the resume routine, not the bus_resume
routine. Since ehci-omap doesn't have any suspend or resume routines,
it's not surprising that the controller doesn't work correctly after
the system is resumed.
In a couple of days I will submit a patch that will make it a lot
easier to add suspend and resume routines for EHCI platform drivers.
Maybe you'd prefer to wait until then to fix this issue.
Alan Stern
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html