Thread (12 messages) 12 messages, 5 authors, 2015-06-02

[PATCH 3/6] xhci: probe phy before add usb_hcd

From: Roger Quadros <hidden>
Date: 2015-06-02 04:02:01
Also in: linux-devicetree, linux-mediatek, lkml

Mathias.

On 01/06/15 18:17, Mathias Nyman wrote:
On 01.06.2015 17:52, Yingjoe Chen wrote:
quoted
On Wed, 2015-05-27 at 07:18 -0500, Felipe Balbi wrote:
quoted
On Wed, May 27, 2015 at 07:48:00PM +0800, chunfeng.yun at mediatek.com wrote:
quoted
From: Chunfeng Yun <chunfeng.yun@mediatek.com>

find the phy driver before add primary usb_hcd to avoid acessing
xHCI register which may hangup the system when the phy is not loaded
yet and the related powers or clocks put in phy driver are not
enabled.
it seems like the same clock is needed by PHY and XHCI. This patch looks
incorrect.

Hi,

I agree that the driver should enable clock it used by itself and not
depends on init order. This should be fixed.

But in general, I think it make sense to only add hcd after all required
resource are ready. At least it remove unnecessary calls to
usb_add_hcd/usb_remove_hcd. Is it better if the commit message is
changed to something like the below?

Currently xhci_plat_probe() call usb_add_hcd before trying to init the
phy. However if the phy is not ready at the moment, it have to remove
the hcd and probe again later

Change the init order so we only add hcd when all required resource are
ready.
Hi

Rogers Quadros patchseries that changes how HCDs are created and added for
xhci-plat was just sent forward. It first creates both HCDs, then adds them.

Doesn't usb_add_hcd() as it's first task take care of the PHYs?
I'm hoping to remove that part completely from xhci-plat.c but haven't
looked into it properly yet.
usb_add_hcd() does

         if (IS_ENABLED(CONFIG_USB_PHY) && !hcd->usb_phy) {
                 struct usb_phy *phy = usb_get_phy_dev(hcd->self.controller, 0);
...
         if (IS_ENABLED(CONFIG_GENERIC_PHY) && !hcd->phy) {
                 struct phy *phy = phy_get(hcd->self.controller, "usb");
...

but xhci-plat.c does
	hcd->usb_phy = devm_usb_get_phy_by_phandle(&pdev->dev, "usb-phy", 0);


So there needs to be some alignment.

cheers,
-roger
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help