Message ID | 99d5db89-0ba3-84df-5238-6edd6a3d99a1@ti.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
hi, On Wed, 2018-03-21 at 14:27 +0200, Roger Quadros wrote: > On 21/03/18 13:50, Chunfeng Yun wrote: > > Hi Roger, > > > > On Wed, 2018-03-21 at 11:05 +0200, Roger Quadros wrote: > >> Hi Chunfeng, > >> > >> On 21/03/18 08:12, Chunfeng Yun wrote: > >>> The phys has already been initialized when add primary hcd, > >>> including usb2 phys and usb3 phys also if exist, so needn't > >>> re-parse "phys" property again. > >>> > >>> Signed-off-by: Chunfeng Yun <chunfeng.yun@mediatek.com> > >>> --- > >>> drivers/usb/host/xhci-mtk.c | 1 + > >>> drivers/usb/host/xhci-plat.c | 1 + > >>> 2 files changed, 2 insertions(+) > >>> > >>> diff --git a/drivers/usb/host/xhci-mtk.c b/drivers/usb/host/xhci-mtk.c > >>> index 7334da9..6bb23fb 100644 > >>> --- a/drivers/usb/host/xhci-mtk.c > >>> +++ b/drivers/usb/host/xhci-mtk.c > >>> @@ -554,6 +554,7 @@ static int xhci_mtk_probe(struct platform_device *pdev) > >>> if (HCC_MAX_PSA(xhci->hcc_params) >= 4) > >>> xhci->shared_hcd->can_do_streams = 1; > >>> > >>> + xhci->shared_hcd->skip_phy_initialization = 1; > >>> ret = usb_add_hcd(xhci->shared_hcd, irq, IRQF_SHARED); > >>> if (ret) > >>> goto dealloc_usb2_hcd; > >>> diff --git a/drivers/usb/host/xhci-plat.c b/drivers/usb/host/xhci-plat.c > >>> index 6700e5e..65a4294 100644 > >>> --- a/drivers/usb/host/xhci-plat.c > >>> +++ b/drivers/usb/host/xhci-plat.c > >>> @@ -294,6 +294,7 @@ static int xhci_plat_probe(struct platform_device *pdev) > >>> if (HCC_MAX_PSA(xhci->hcc_params) >= 4) > >>> xhci->shared_hcd->can_do_streams = 1; > >>> > >>> + xhci->shared_hcd->skip_phy_initialization = 1; > >> > >> I think this is unnecessary. > >> There aren't separate PHYs for the primary and shared HCDs right? > > Yes, the primary and shared HCDs will get the same PHYs provided by > > "phys" property. > > > >> > >> Also how can you be sure that phy_init() has been done for all platform HCD users? > > Here I assume that "phys" and "usb-phy" properties are not used at the > > same time. There are two cases: > > 1. Using "usb-phy": no "phys" to be got by shared HCD. > > 2. Using "phys": the primary HCD will get those phys, so shared HCD can > > skip them. > > Now I see the problem. > But the right fix should be in core/hcd.c > > diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c > index 2884607..1d1da12 100644 > --- a/drivers/usb/core/hcd.c > +++ b/drivers/usb/core/hcd.c > @@ -2757,7 +2757,7 @@ int usb_add_hcd(struct usb_hcd *hcd, > } > } > > - if (!hcd->skip_phy_initialization) { > + if (!hcd->skip_phy_initialization && usb_hcd_is_primary_hcd(hcd)) { It's a better way. Thanks > hcd->phy_roothub = usb_phy_roothub_init(hcd->self.sysdev); > if (IS_ERR(hcd->phy_roothub)) { > retval = PTR_ERR(hcd->phy_roothub); > > > > >> > >>> ret = usb_add_hcd(xhci->shared_hcd, irq, IRQF_SHARED); > >>> if (ret) > >>> goto dealloc_usb2_hcd; > >>> > >> > > > > >
diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c index 2884607..1d1da12 100644 --- a/drivers/usb/core/hcd.c +++ b/drivers/usb/core/hcd.c @@ -2757,7 +2757,7 @@ int usb_add_hcd(struct usb_hcd *hcd, } } - if (!hcd->skip_phy_initialization) { + if (!hcd->skip_phy_initialization && usb_hcd_is_primary_hcd(hcd)) { hcd->phy_roothub = usb_phy_roothub_init(hcd->self.sysdev); if (IS_ERR(hcd->phy_roothub)) { retval = PTR_ERR(hcd->phy_roothub);