Message ID | 538891DC.605@renesas.com (mailing list archive) |
---|---|
State | Awaiting Upstream |
Headers | show |
Hello. On 05/30/2014 06:12 PM, Yoshihiro Shimoda wrote: > From Sergei Shtylyov <sergei.shtylyov@cogentembedded.com> Should be "From:". > Add the generic PHY support, analogous to the USB PHY support. Intended it to be > used with the PCI EHCI/OHCI drivers and the xHCI platform driver. > Signed-off-by: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com> > Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com> > --- > This patch is against the 'usb-next' branch of Greg KH's 'usb.git' repo. > (commit id = 70d2f61fc7559df3d5be32a9d01efdb9ee1b11d8) I was pondering on reposting this patch, along with the R8A779x device tree changes using it as Greg KH requested to see the users of this patch... WBR, Sergei -- To unsubscribe from this list: send the line "unsubscribe linux-sh" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Hi Sergei, On Fri, May 30, 2014 at 7:42 PM, Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com> wrote: > From Sergei Shtylyov <sergei.shtylyov@cogentembedded.com> > > Add the generic PHY support, analogous to the USB PHY support. Intended it to be > used with the PCI EHCI/OHCI drivers and the xHCI platform driver. > > Signed-off-by: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com> > Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com> > --- > This patch is against the 'usb-next' branch of Greg KH's 'usb.git' repo. > (commit id = 70d2f61fc7559df3d5be32a9d01efdb9ee1b11d8) > > Changes in version 3: > - rebased the current usb-next. > - I tested this patch on my R-Car H2 USB 3.0 driver (not merged yet) > > drivers/usb/core/hcd.c | 42 ++++++++++++++++++++++++++++++++++++++++-- > include/linux/usb/hcd.h | 3 ++- > 2 files changed, 42 insertions(+), 3 deletions(-) > > diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c > index bec31e2..2841149 100644 > --- a/drivers/usb/core/hcd.c > +++ b/drivers/usb/core/hcd.c > @@ -42,6 +42,7 @@ > #include <linux/pm_runtime.h> > #include <linux/types.h> > > +#include <linux/phy/phy.h> > #include <linux/usb.h> > #include <linux/usb/hcd.h> > #include <linux/usb/phy.h> > @@ -2649,6 +2650,29 @@ int usb_add_hcd(struct usb_hcd *hcd, > } > } > > + if (IS_ENABLED(CONFIG_GENERIC_PHY)) { > + struct phy *phy = phy_get(hcd->self.controller, "usb"); The xHCI host controller is going to have two controllers (main and shared) USB2 controller and USB3 controller. So they will have two different PHYs. For example, the DWC3, which has a xHCI controller, has to have 2 different phys -- usb2-phy and usb3-phy. So, how the two 'hcd's' will be able to differentiate and get two separate PHYs. Unfortunately, the xHCI with DWC3 doesn't have a device node too, so it needs to have a way out to look up the PHYs (in a way suggested by Heikki : usb: dwc3: host: convey the PHYs to xhci (https://lkml.org/lkml/2014/6/5/585) and related patch series. But this also has an issue, since we need to have two separate constant strings to distinguish between the two PHYs, while creating the lookup table. So how do you suggest me to get link the two PHYs in DWC3 with the XHCI host controller, the issue which i am facing currently while working with the patch: usb: host: xhci-plat: Add support to get PHYs and the related patch series, since we need to handle PHY from the hcd. > + > + if (IS_ERR(phy)) { > + retval = PTR_ERR(phy); > + if (retval == -EPROBE_DEFER) > + goto err_phy; > + } else { > + retval = phy_init(phy); > + if (retval) { > + phy_put(phy); > + goto err_phy; > + } > + retval = phy_power_on(phy); > + if (retval) { > + phy_exit(phy); > + phy_put(phy); > + goto err_phy; > + } > + hcd->gen_phy = phy; > + } > + } > + > dev_info(hcd->self.controller, "%s\n", hcd->product_desc); > > /* Keep old behaviour if authorized_default is not in [0, 1]. */ > @@ -2664,7 +2688,7 @@ int usb_add_hcd(struct usb_hcd *hcd, > */ > if ((retval = hcd_buffer_create(hcd)) != 0) { > dev_dbg(hcd->self.controller, "pool alloc failed\n"); > - goto err_remove_phy; > + goto err_create_buf; > } > > if ((retval = usb_register_bus(&hcd->self)) < 0) > @@ -2791,7 +2815,14 @@ err_allocate_root_hub: > usb_deregister_bus(&hcd->self); > err_register_bus: > hcd_buffer_destroy(hcd); > -err_remove_phy: > +err_create_buf: > + if (IS_ENABLED(CONFIG_GENERIC_PHY) && hcd->gen_phy) { > + phy_power_off(hcd->gen_phy); > + phy_exit(hcd->gen_phy); > + phy_put(hcd->gen_phy); > + hcd->gen_phy = NULL; > + } > +err_phy: > if (hcd->remove_phy && hcd->phy) { > usb_phy_shutdown(hcd->phy); > usb_put_phy(hcd->phy); > @@ -2868,6 +2899,13 @@ void usb_remove_hcd(struct usb_hcd *hcd) > > usb_deregister_bus(&hcd->self); > hcd_buffer_destroy(hcd); > + > + if (IS_ENABLED(CONFIG_GENERIC_PHY) && hcd->gen_phy) { > + phy_power_off(hcd->gen_phy); > + phy_exit(hcd->gen_phy); > + phy_put(hcd->gen_phy); > + hcd->gen_phy = NULL; > + } > if (hcd->remove_phy && hcd->phy) { > usb_phy_shutdown(hcd->phy); > usb_put_phy(hcd->phy); > diff --git a/include/linux/usb/hcd.h b/include/linux/usb/hcd.h > index 485cd5e..2aefbcc 100644 > --- a/include/linux/usb/hcd.h > +++ b/include/linux/usb/hcd.h > @@ -106,7 +106,8 @@ struct usb_hcd { > * OTG and some Host controllers need software interaction with phys; > * other external phys should be software-transparent > */ > - struct usb_phy *phy; > + struct usb_phy *phy; > + struct phy *gen_phy; > > /* Flags that need to be manipulated atomically because they can > * change while the host controller is running. Always use > -- > 1.7.9.5 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-usb" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html
Cc: Alan, Mathias Nyman, Julius Werner, Heikki Krogerus Hi, On Wed, Jun 25, 2014 at 4:02 PM, Vivek Gautam <gautam.vivek@samsung.com> wrote: > Hi Sergei, > > > On Fri, May 30, 2014 at 7:42 PM, Yoshihiro Shimoda > <yoshihiro.shimoda.uh@renesas.com> wrote: >> From Sergei Shtylyov <sergei.shtylyov@cogentembedded.com> >> >> Add the generic PHY support, analogous to the USB PHY support. Intended it to be >> used with the PCI EHCI/OHCI drivers and the xHCI platform driver. >> >> Signed-off-by: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com> >> Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com> >> --- >> This patch is against the 'usb-next' branch of Greg KH's 'usb.git' repo. >> (commit id = 70d2f61fc7559df3d5be32a9d01efdb9ee1b11d8) >> >> Changes in version 3: >> - rebased the current usb-next. >> - I tested this patch on my R-Car H2 USB 3.0 driver (not merged yet) >> >> drivers/usb/core/hcd.c | 42 ++++++++++++++++++++++++++++++++++++++++-- >> include/linux/usb/hcd.h | 3 ++- >> 2 files changed, 42 insertions(+), 3 deletions(-) >> >> diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c >> index bec31e2..2841149 100644 >> --- a/drivers/usb/core/hcd.c >> +++ b/drivers/usb/core/hcd.c >> @@ -42,6 +42,7 @@ >> #include <linux/pm_runtime.h> >> #include <linux/types.h> >> >> +#include <linux/phy/phy.h> >> #include <linux/usb.h> >> #include <linux/usb/hcd.h> >> #include <linux/usb/phy.h> >> @@ -2649,6 +2650,29 @@ int usb_add_hcd(struct usb_hcd *hcd, >> } >> } >> >> + if (IS_ENABLED(CONFIG_GENERIC_PHY)) { >> + struct phy *phy = phy_get(hcd->self.controller, "usb"); > > The xHCI host controller is going to have two controllers (main and > shared) USB2 controller and > USB3 controller. So they will have two different PHYs. > For example, the DWC3, which has a xHCI controller, has to have 2 > different phys -- usb2-phy and usb3-phy. > > So, how the two 'hcd's' will be able to differentiate and get two separate PHYs. > Unfortunately, the xHCI with DWC3 doesn't have a device node too, so > it needs to have > a way out to look up the PHYs (in a way suggested by Heikki : > usb: dwc3: host: convey the PHYs to xhci > (https://lkml.org/lkml/2014/6/5/585) and related patch series. > But this also has an issue, since we need to have two separate > constant strings to distinguish between the two PHYs, > while creating the lookup table. > > So how do you suggest me to get link the two PHYs in DWC3 with the > XHCI host controller, the issue which i am > facing currently while working with the patch: > usb: host: xhci-plat: Add support to get PHYs and the related patch > series, since we need to handle PHY from the hcd. Can someone please clear my doubt here. This can help me getting a clear picture of how to align with the xhci's request for PHY to let it handle any sort of phy-calibration, which we are trying in the patch-series: [PATCH v1 0/4] Fine tune USB 3.0 PHY on exynos5420 https://lkml.org/lkml/2014/6/6/202 I have also posted my doubts in the thread : [PATCH 2/4] usb: host: xhci-plat: Add support to get PHYs https://lkml.org/lkml/2014/6/25/150 [snip]
Hello. On 06/25/2014 02:32 PM, Vivek Gautam wrote: >> From Sergei Shtylyov <sergei.shtylyov@cogentembedded.com> >> Add the generic PHY support, analogous to the USB PHY support. Intended it to be >> used with the PCI EHCI/OHCI drivers and the xHCI platform driver. >> Signed-off-by: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com> >> Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com> >> --- >> This patch is against the 'usb-next' branch of Greg KH's 'usb.git' repo. >> (commit id = 70d2f61fc7559df3d5be32a9d01efdb9ee1b11d8) >> Changes in version 3: >> - rebased the current usb-next. >> - I tested this patch on my R-Car H2 USB 3.0 driver (not merged yet) >> drivers/usb/core/hcd.c | 42 ++++++++++++++++++++++++++++++++++++++++-- >> include/linux/usb/hcd.h | 3 ++- >> 2 files changed, 42 insertions(+), 3 deletions(-) >> diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c >> index bec31e2..2841149 100644 >> --- a/drivers/usb/core/hcd.c >> +++ b/drivers/usb/core/hcd.c [...] >> @@ -2649,6 +2650,29 @@ int usb_add_hcd(struct usb_hcd *hcd, >> } >> } >> >> + if (IS_ENABLED(CONFIG_GENERIC_PHY)) { >> + struct phy *phy = phy_get(hcd->self.controller, "usb"); > The xHCI host controller is going to have two controllers (main and > shared) USB2 controller and > USB3 controller. So they will have two different PHYs. Not necessarily -- in my case there's going be one PHY, even for xHCI. > For example, the DWC3, which has a xHCI controller, has to have 2 > different phys -- usb2-phy and usb3-phy. Yes, I understood that. > So, how the two 'hcd's' will be able to differentiate and get two separate PHYs. Apparently, by name? I don't see any other way... > Unfortunately, the xHCI with DWC3 doesn't have a device node too, so > it needs to have > a way out to look up the PHYs (in a way suggested by Heikki : > usb: dwc3: host: convey the PHYs to xhci > (https://lkml.org/lkml/2014/6/5/585) and related patch series. > But this also has an issue, since we need to have two separate > constant strings to distinguish between the two PHYs, > while creating the lookup table. I'm sorry, where's the issue? > So how do you suggest me to get link the two PHYs in DWC3 with the > XHCI host controller, the issue which i am > facing currently while working with the patch: > usb: host: xhci-plat: Add support to get PHYs and the related patch > series, since we need to handle PHY from the hcd. Well, I've already spoke out in another thread: you'll have to carry on with your approach, ignoring the patch starting this thread. I'm sorry for side-tracking you... WBR, Sergei -- To unsubscribe from this list: send the line "unsubscribe linux-sh" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Hi, On Sat, Jul 5, 2014 at 4:56 AM, Sergei Shtylyov <sergei.shtylyov@cogentembedded.com> wrote: > Hello. > > > On 06/25/2014 02:32 PM, Vivek Gautam wrote: > >>> From Sergei Shtylyov <sergei.shtylyov@cogentembedded.com> > > >>> Add the generic PHY support, analogous to the USB PHY support. Intended >>> it to be >>> used with the PCI EHCI/OHCI drivers and the xHCI platform driver. > > >>> Signed-off-by: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com> >>> Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com> >>> --- >>> This patch is against the 'usb-next' branch of Greg KH's 'usb.git' repo. >>> (commit id = 70d2f61fc7559df3d5be32a9d01efdb9ee1b11d8) > > >>> Changes in version 3: >>> - rebased the current usb-next. >>> - I tested this patch on my R-Car H2 USB 3.0 driver (not merged yet) > > >>> drivers/usb/core/hcd.c | 42 >>> ++++++++++++++++++++++++++++++++++++++++-- >>> include/linux/usb/hcd.h | 3 ++- >>> 2 files changed, 42 insertions(+), 3 deletions(-) > > >>> diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c >>> index bec31e2..2841149 100644 >>> --- a/drivers/usb/core/hcd.c >>> +++ b/drivers/usb/core/hcd.c > > [...] > >>> @@ -2649,6 +2650,29 @@ int usb_add_hcd(struct usb_hcd *hcd, >>> } >>> } >>> >>> + if (IS_ENABLED(CONFIG_GENERIC_PHY)) { >>> + struct phy *phy = phy_get(hcd->self.controller, "usb"); > > >> The xHCI host controller is going to have two controllers (main and >> shared) USB2 controller and >> USB3 controller. So they will have two different PHYs. > > > Not necessarily -- in my case there's going be one PHY, even for xHCI. ok. > > >> For example, the DWC3, which has a xHCI controller, has to have 2 >> different phys -- usb2-phy and usb3-phy. > > > Yes, I understood that. > > >> So, how the two 'hcd's' will be able to differentiate and get two separate >> PHYs. > > > Apparently, by name? I don't see any other way... true, by name string only. > > >> Unfortunately, the xHCI with DWC3 doesn't have a device node too, so >> it needs to have >> a way out to look up the PHYs (in a way suggested by Heikki : >> usb: dwc3: host: convey the PHYs to xhci >> (https://lkml.org/lkml/2014/6/5/585) and related patch series. >> But this also has an issue, since we need to have two separate >> constant strings to distinguish between the two PHYs, >> while creating the lookup table. > > > I'm sorry, where's the issue? i actually thought of the phy_get() in core/hcd.c, where we would need more than one name string for different PHYs. But now things are clear after your explanation. > > >> So how do you suggest me to get link the two PHYs in DWC3 with the >> XHCI host controller, the issue which i am >> facing currently while working with the patch: >> usb: host: xhci-plat: Add support to get PHYs and the related patch >> series, since we need to handle PHY from the hcd. > > > Well, I've already spoke out in another thread: you'll have to carry on > with your approach, ignoring the patch starting this thread. I'm sorry for > side-tracking you... Thanks Sergei for clearing my doubts and the confusion.
On Fri, May 30, 2014 at 7:46 PM, Sergei Shtylyov <sergei.shtylyov@cogentembedded.com> wrote: > Hello. > > On 05/30/2014 06:12 PM, Yoshihiro Shimoda wrote: > >> From Sergei Shtylyov <sergei.shtylyov@cogentembedded.com> > > > Should be "From:". > > >> Add the generic PHY support, analogous to the USB PHY support. Intended it >> to be >> used with the PCI EHCI/OHCI drivers and the xHCI platform driver. > > >> Signed-off-by: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com> >> Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com> >> --- >> This patch is against the 'usb-next' branch of Greg KH's 'usb.git' repo. >> (commit id = 70d2f61fc7559df3d5be32a9d01efdb9ee1b11d8) > > > I was pondering on reposting this patch, along with the R8A779x device > tree changes using it as Greg KH requested to see the users of this patch... Are we planning a repost of this patch, since we definitely have user for this change [1], apart from Antoine's series [2] which makes changes on top of this patch. It will be easier for us if this patch gets pulled in for 3.18. [1] [PATCH v4 2/4] usb: host: xhci-plat: Get PHYs for xhci's hcds http://lists.infradead.org/pipermail/linux-arm-kernel/2014-July/272833.html [2] [PATCH v2 0/8] usb: add support for the generic PHY framework http://www.spinics.net/lists/linux-usb/msg110557.html
Hello. On 08/21/2014 04:44 PM, Vivek Gautam wrote: >>> From Sergei Shtylyov <sergei.shtylyov@cogentembedded.com> >> Should be "From:". >>> Add the generic PHY support, analogous to the USB PHY support. Intended it >>> to be >>> used with the PCI EHCI/OHCI drivers and the xHCI platform driver. >>> Signed-off-by: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com> >>> Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com> >>> --- >>> This patch is against the 'usb-next' branch of Greg KH's 'usb.git' repo. >>> (commit id = 70d2f61fc7559df3d5be32a9d01efdb9ee1b11d8) >> I was pondering on reposting this patch, along with the R8A779x device >> tree changes using it as Greg KH requested to see the users of this patch... > Are we planning a repost of this patch, Yes, I'm planning this since Greg has lost v4. WBR, Sergei -- To unsubscribe from this list: send the line "unsubscribe linux-sh" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Hi Sergei, On Thu, Aug 21, 2014 at 6:37 PM, Sergei Shtylyov <sergei.shtylyov@cogentembedded.com> wrote: > Hello. > > > On 08/21/2014 04:44 PM, Vivek Gautam wrote: > >>>> From Sergei Shtylyov <sergei.shtylyov@cogentembedded.com> > > >>> Should be "From:". > > >>>> Add the generic PHY support, analogous to the USB PHY support. Intended >>>> it >>>> to be >>>> used with the PCI EHCI/OHCI drivers and the xHCI platform driver. > > >>>> Signed-off-by: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com> >>>> Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com> >>>> --- >>>> This patch is against the 'usb-next' branch of Greg KH's 'usb.git' repo. >>>> (commit id = 70d2f61fc7559df3d5be32a9d01efdb9ee1b11d8) > > >>> I was pondering on reposting this patch, along with the R8A779x >>> device >>> tree changes using it as Greg KH requested to see the users of this >>> patch... > > >> Are we planning a repost of this patch, > > > Yes, I'm planning this since Greg has lost v4. Ok, for now i will rebase my series for xhci-plat on this. Thanks :-)
diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c index bec31e2..2841149 100644 --- a/drivers/usb/core/hcd.c +++ b/drivers/usb/core/hcd.c @@ -42,6 +42,7 @@ #include <linux/pm_runtime.h> #include <linux/types.h> +#include <linux/phy/phy.h> #include <linux/usb.h> #include <linux/usb/hcd.h> #include <linux/usb/phy.h> @@ -2649,6 +2650,29 @@ int usb_add_hcd(struct usb_hcd *hcd, } } + if (IS_ENABLED(CONFIG_GENERIC_PHY)) { + struct phy *phy = phy_get(hcd->self.controller, "usb"); + + if (IS_ERR(phy)) { + retval = PTR_ERR(phy); + if (retval == -EPROBE_DEFER) + goto err_phy; + } else { + retval = phy_init(phy); + if (retval) { + phy_put(phy); + goto err_phy; + } + retval = phy_power_on(phy); + if (retval) { + phy_exit(phy); + phy_put(phy); + goto err_phy; + } + hcd->gen_phy = phy; + } + } + dev_info(hcd->self.controller, "%s\n", hcd->product_desc); /* Keep old behaviour if authorized_default is not in [0, 1]. */ @@ -2664,7 +2688,7 @@ int usb_add_hcd(struct usb_hcd *hcd, */ if ((retval = hcd_buffer_create(hcd)) != 0) { dev_dbg(hcd->self.controller, "pool alloc failed\n"); - goto err_remove_phy; + goto err_create_buf; } if ((retval = usb_register_bus(&hcd->self)) < 0) @@ -2791,7 +2815,14 @@ err_allocate_root_hub: usb_deregister_bus(&hcd->self); err_register_bus: hcd_buffer_destroy(hcd); -err_remove_phy: +err_create_buf: + if (IS_ENABLED(CONFIG_GENERIC_PHY) && hcd->gen_phy) { + phy_power_off(hcd->gen_phy); + phy_exit(hcd->gen_phy); + phy_put(hcd->gen_phy); + hcd->gen_phy = NULL; + } +err_phy: if (hcd->remove_phy && hcd->phy) { usb_phy_shutdown(hcd->phy); usb_put_phy(hcd->phy); @@ -2868,6 +2899,13 @@ void usb_remove_hcd(struct usb_hcd *hcd) usb_deregister_bus(&hcd->self); hcd_buffer_destroy(hcd); + + if (IS_ENABLED(CONFIG_GENERIC_PHY) && hcd->gen_phy) { + phy_power_off(hcd->gen_phy); + phy_exit(hcd->gen_phy); + phy_put(hcd->gen_phy); + hcd->gen_phy = NULL; + } if (hcd->remove_phy && hcd->phy) { usb_phy_shutdown(hcd->phy); usb_put_phy(hcd->phy); diff --git a/include/linux/usb/hcd.h b/include/linux/usb/hcd.h index 485cd5e..2aefbcc 100644 --- a/include/linux/usb/hcd.h +++ b/include/linux/usb/hcd.h @@ -106,7 +106,8 @@ struct usb_hcd { * OTG and some Host controllers need software interaction with phys; * other external phys should be software-transparent */ - struct usb_phy *phy; + struct usb_phy *phy; + struct phy *gen_phy; /* Flags that need to be manipulated atomically because they can * change while the host controller is running. Always use