Message ID | 20190808094128.27213-2-m.szyprowski@samsung.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | [v2,1/2,RESEND] usb: core: phy: add support for PHY calibration | expand |
Hi Greg On 2019-08-08 11:41, Marek Szyprowski wrote: > Some PHYs (for example Exynos5 USB3.0 DRD PHY) require calibration to be > done after every USB HCD reset. Generic PHY framework has been already > extended with phy_calibrate() function in commit 36914111e682 ("drivers: > phy: add calibrate method"). This patch adds support for it to generic > PHY handling code in USB HCD core. > > Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com> > Tested-by: Anand Moon <linux.amoon@gmail.com> > Tested-by: Jochen Sprickerhof <jochen@sprickerhof.de> Greg: any chance to give it this a try in -next? If not, maybe You can point someone whose review will help? > --- > drivers/usb/core/hcd.c | 7 +++++++ > drivers/usb/core/phy.c | 21 +++++++++++++++++++++ > drivers/usb/core/phy.h | 1 + > 3 files changed, 29 insertions(+) > > diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c > index 88533938ce19..b89936c1df23 100644 > --- a/drivers/usb/core/hcd.c > +++ b/drivers/usb/core/hcd.c > @@ -2291,6 +2291,9 @@ int hcd_bus_resume(struct usb_device *rhdev, pm_message_t msg) > hcd->state = HC_STATE_RESUMING; > status = hcd->driver->bus_resume(hcd); > clear_bit(HCD_FLAG_WAKEUP_PENDING, &hcd->flags); > + if (status == 0) > + status = usb_phy_roothub_calibrate(hcd->phy_roothub); > + > if (status == 0) { > struct usb_device *udev; > int port1; > @@ -2864,6 +2867,10 @@ int usb_add_hcd(struct usb_hcd *hcd, > } > hcd->rh_pollable = 1; > > + retval = usb_phy_roothub_calibrate(hcd->phy_roothub); > + if (retval) > + goto err_hcd_driver_setup; > + > /* NOTE: root hub and controller capabilities may not be the same */ > if (device_can_wakeup(hcd->self.controller) > && device_can_wakeup(&hcd->self.root_hub->dev)) > diff --git a/drivers/usb/core/phy.c b/drivers/usb/core/phy.c > index 7580493b867a..fb1588e7c282 100644 > --- a/drivers/usb/core/phy.c > +++ b/drivers/usb/core/phy.c > @@ -151,6 +151,27 @@ int usb_phy_roothub_set_mode(struct usb_phy_roothub *phy_roothub, > } > EXPORT_SYMBOL_GPL(usb_phy_roothub_set_mode); > > +int usb_phy_roothub_calibrate(struct usb_phy_roothub *phy_roothub) > +{ > + struct usb_phy_roothub *roothub_entry; > + struct list_head *head; > + int err; > + > + if (!phy_roothub) > + return 0; > + > + head = &phy_roothub->list; > + > + list_for_each_entry(roothub_entry, head, list) { > + err = phy_calibrate(roothub_entry->phy); > + if (err) > + return err; > + } > + > + return 0; > +} > +EXPORT_SYMBOL_GPL(usb_phy_roothub_calibrate); > + > int usb_phy_roothub_power_on(struct usb_phy_roothub *phy_roothub) > { > struct usb_phy_roothub *roothub_entry; > diff --git a/drivers/usb/core/phy.h b/drivers/usb/core/phy.h > index dad564e2d2d4..20a267cd986b 100644 > --- a/drivers/usb/core/phy.h > +++ b/drivers/usb/core/phy.h > @@ -18,6 +18,7 @@ int usb_phy_roothub_exit(struct usb_phy_roothub *phy_roothub); > > int usb_phy_roothub_set_mode(struct usb_phy_roothub *phy_roothub, > enum phy_mode mode); > +int usb_phy_roothub_calibrate(struct usb_phy_roothub *phy_roothub); > int usb_phy_roothub_power_on(struct usb_phy_roothub *phy_roothub); > void usb_phy_roothub_power_off(struct usb_phy_roothub *phy_roothub); > Best regards
On Mon, Aug 26, 2019 at 10:55:33AM +0200, Marek Szyprowski wrote: > Hi Greg > > On 2019-08-08 11:41, Marek Szyprowski wrote: > > Some PHYs (for example Exynos5 USB3.0 DRD PHY) require calibration to be > > done after every USB HCD reset. Generic PHY framework has been already > > extended with phy_calibrate() function in commit 36914111e682 ("drivers: > > phy: add calibrate method"). This patch adds support for it to generic > > PHY handling code in USB HCD core. > > > > Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com> > > Tested-by: Anand Moon <linux.amoon@gmail.com> > > Tested-by: Jochen Sprickerhof <jochen@sprickerhof.de> > > Greg: any chance to give it this a try in -next? If not, maybe You can > point someone whose review will help? Ah crap, this is me, not the PHY maintainer :( Can you resend this and I will be glad to review it. But it would also be good to get Felipe's review as well. thanks, greg k-h
Hi Greg, On 2019-08-28 22:41, Greg Kroah-Hartman wrote: > On Mon, Aug 26, 2019 at 10:55:33AM +0200, Marek Szyprowski wrote: >> Hi Greg >> >> On 2019-08-08 11:41, Marek Szyprowski wrote: >>> Some PHYs (for example Exynos5 USB3.0 DRD PHY) require calibration to be >>> done after every USB HCD reset. Generic PHY framework has been already >>> extended with phy_calibrate() function in commit 36914111e682 ("drivers: >>> phy: add calibrate method"). This patch adds support for it to generic >>> PHY handling code in USB HCD core. >>> >>> Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com> >>> Tested-by: Anand Moon <linux.amoon@gmail.com> >>> Tested-by: Jochen Sprickerhof <jochen@sprickerhof.de> >> Greg: any chance to give it this a try in -next? If not, maybe You can >> point someone whose review will help? > Ah crap, this is me, not the PHY maintainer :( > > Can you resend this and I will be glad to review it. But it would also > be good to get Felipe's review as well. No problem, I will resend it again in a few minutes. Felipe already acked it: https://lkml.org/lkml/2019/8/8/460 Best regards
On Thu, Aug 29, 2019 at 07:26:50AM +0200, Marek Szyprowski wrote: > Hi Greg, > > On 2019-08-28 22:41, Greg Kroah-Hartman wrote: > > On Mon, Aug 26, 2019 at 10:55:33AM +0200, Marek Szyprowski wrote: > >> Hi Greg > >> > >> On 2019-08-08 11:41, Marek Szyprowski wrote: > >>> Some PHYs (for example Exynos5 USB3.0 DRD PHY) require calibration to be > >>> done after every USB HCD reset. Generic PHY framework has been already > >>> extended with phy_calibrate() function in commit 36914111e682 ("drivers: > >>> phy: add calibrate method"). This patch adds support for it to generic > >>> PHY handling code in USB HCD core. > >>> > >>> Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com> > >>> Tested-by: Anand Moon <linux.amoon@gmail.com> > >>> Tested-by: Jochen Sprickerhof <jochen@sprickerhof.de> > >> Greg: any chance to give it this a try in -next? If not, maybe You can > >> point someone whose review will help? > > Ah crap, this is me, not the PHY maintainer :( > > > > Can you resend this and I will be glad to review it. But it would also > > be good to get Felipe's review as well. > > No problem, I will resend it again in a few minutes. Felipe already > acked it: https://lkml.org/lkml/2019/8/8/460 I don't see the resend, did I miss it? And can you add Felipe's ack to it? thanks, greg k-h
Hi Greg, On 2019-08-29 12:21, Greg Kroah-Hartman wrote: > On Thu, Aug 29, 2019 at 07:26:50AM +0200, Marek Szyprowski wrote: >> Hi Greg, >> >> On 2019-08-28 22:41, Greg Kroah-Hartman wrote: >>> On Mon, Aug 26, 2019 at 10:55:33AM +0200, Marek Szyprowski wrote: >>>> Hi Greg >>>> >>>> On 2019-08-08 11:41, Marek Szyprowski wrote: >>>>> Some PHYs (for example Exynos5 USB3.0 DRD PHY) require calibration to be >>>>> done after every USB HCD reset. Generic PHY framework has been already >>>>> extended with phy_calibrate() function in commit 36914111e682 ("drivers: >>>>> phy: add calibrate method"). This patch adds support for it to generic >>>>> PHY handling code in USB HCD core. >>>>> >>>>> Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com> >>>>> Tested-by: Anand Moon <linux.amoon@gmail.com> >>>>> Tested-by: Jochen Sprickerhof <jochen@sprickerhof.de> >>>> Greg: any chance to give it this a try in -next? If not, maybe You can >>>> point someone whose review will help? >>> Ah crap, this is me, not the PHY maintainer :( >>> >>> Can you resend this and I will be glad to review it. But it would also >>> be good to get Felipe's review as well. >> No problem, I will resend it again in a few minutes. Felipe already >> acked it: https://lkml.org/lkml/2019/8/8/460 > I don't see the resend, did I miss it? I looks so: https://lkml.org/lkml/2019/8/29/31 > And can you add Felipe's ack to it? Yes, I've already did that. Best regards
On Thu, Aug 29, 2019 at 12:27:34PM +0200, Marek Szyprowski wrote: > Hi Greg, > > On 2019-08-29 12:21, Greg Kroah-Hartman wrote: > > On Thu, Aug 29, 2019 at 07:26:50AM +0200, Marek Szyprowski wrote: > >> Hi Greg, > >> > >> On 2019-08-28 22:41, Greg Kroah-Hartman wrote: > >>> On Mon, Aug 26, 2019 at 10:55:33AM +0200, Marek Szyprowski wrote: > >>>> Hi Greg > >>>> > >>>> On 2019-08-08 11:41, Marek Szyprowski wrote: > >>>>> Some PHYs (for example Exynos5 USB3.0 DRD PHY) require calibration to be > >>>>> done after every USB HCD reset. Generic PHY framework has been already > >>>>> extended with phy_calibrate() function in commit 36914111e682 ("drivers: > >>>>> phy: add calibrate method"). This patch adds support for it to generic > >>>>> PHY handling code in USB HCD core. > >>>>> > >>>>> Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com> > >>>>> Tested-by: Anand Moon <linux.amoon@gmail.com> > >>>>> Tested-by: Jochen Sprickerhof <jochen@sprickerhof.de> > >>>> Greg: any chance to give it this a try in -next? If not, maybe You can > >>>> point someone whose review will help? > >>> Ah crap, this is me, not the PHY maintainer :( > >>> > >>> Can you resend this and I will be glad to review it. But it would also > >>> be good to get Felipe's review as well. > >> No problem, I will resend it again in a few minutes. Felipe already > >> acked it: https://lkml.org/lkml/2019/8/8/460 > > I don't see the resend, did I miss it? > > I looks so: https://lkml.org/lkml/2019/8/29/31 Got it now, thanks. greg k-h
diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c index 88533938ce19..b89936c1df23 100644 --- a/drivers/usb/core/hcd.c +++ b/drivers/usb/core/hcd.c @@ -2291,6 +2291,9 @@ int hcd_bus_resume(struct usb_device *rhdev, pm_message_t msg) hcd->state = HC_STATE_RESUMING; status = hcd->driver->bus_resume(hcd); clear_bit(HCD_FLAG_WAKEUP_PENDING, &hcd->flags); + if (status == 0) + status = usb_phy_roothub_calibrate(hcd->phy_roothub); + if (status == 0) { struct usb_device *udev; int port1; @@ -2864,6 +2867,10 @@ int usb_add_hcd(struct usb_hcd *hcd, } hcd->rh_pollable = 1; + retval = usb_phy_roothub_calibrate(hcd->phy_roothub); + if (retval) + goto err_hcd_driver_setup; + /* NOTE: root hub and controller capabilities may not be the same */ if (device_can_wakeup(hcd->self.controller) && device_can_wakeup(&hcd->self.root_hub->dev)) diff --git a/drivers/usb/core/phy.c b/drivers/usb/core/phy.c index 7580493b867a..fb1588e7c282 100644 --- a/drivers/usb/core/phy.c +++ b/drivers/usb/core/phy.c @@ -151,6 +151,27 @@ int usb_phy_roothub_set_mode(struct usb_phy_roothub *phy_roothub, } EXPORT_SYMBOL_GPL(usb_phy_roothub_set_mode); +int usb_phy_roothub_calibrate(struct usb_phy_roothub *phy_roothub) +{ + struct usb_phy_roothub *roothub_entry; + struct list_head *head; + int err; + + if (!phy_roothub) + return 0; + + head = &phy_roothub->list; + + list_for_each_entry(roothub_entry, head, list) { + err = phy_calibrate(roothub_entry->phy); + if (err) + return err; + } + + return 0; +} +EXPORT_SYMBOL_GPL(usb_phy_roothub_calibrate); + int usb_phy_roothub_power_on(struct usb_phy_roothub *phy_roothub) { struct usb_phy_roothub *roothub_entry; diff --git a/drivers/usb/core/phy.h b/drivers/usb/core/phy.h index dad564e2d2d4..20a267cd986b 100644 --- a/drivers/usb/core/phy.h +++ b/drivers/usb/core/phy.h @@ -18,6 +18,7 @@ int usb_phy_roothub_exit(struct usb_phy_roothub *phy_roothub); int usb_phy_roothub_set_mode(struct usb_phy_roothub *phy_roothub, enum phy_mode mode); +int usb_phy_roothub_calibrate(struct usb_phy_roothub *phy_roothub); int usb_phy_roothub_power_on(struct usb_phy_roothub *phy_roothub); void usb_phy_roothub_power_off(struct usb_phy_roothub *phy_roothub);