Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1612516 > unrolled thread
| Started by | Baolin Wang <baolin.wang@linaro.org> |
|---|---|
| First post | 2017-03-30 05:30 +0200 |
| Last post | 2017-04-10 13:00 +0200 |
| Articles | 4 — 2 participants |
Back to article view | Back to linux.kernel
[PATCH] usb: host: plat: Enable xHCI plat runtime PM Baolin Wang <baolin.wang@linaro.org> - 2017-03-30 05:30 +0200
Re: [PATCH] usb: host: plat: Enable xHCI plat runtime PM Baolin Wang <baolin.wang@linaro.org> - 2017-04-10 10:00 +0200
Re: [PATCH] usb: host: plat: Enable xHCI plat runtime PM Mathias Nyman <mathias.nyman@linux.intel.com> - 2017-04-10 12:10 +0200
Re: [PATCH] usb: host: plat: Enable xHCI plat runtime PM Baolin Wang <baolin.wang@linaro.org> - 2017-04-10 13:00 +0200
| From | Baolin Wang <baolin.wang@linaro.org> |
|---|---|
| Date | 2017-03-30 05:30 +0200 |
| Subject | [PATCH] usb: host: plat: Enable xHCI plat runtime PM |
| Message-ID | <tqyWC-5f-9@gated-at.bofh.it> |
Enable the xHCI plat runtime PM for parent device to suspend/resume
xHCI. Also call pm_runtime_forbid() in probe() function to force users
to explicitly enable runtime pm using power/control in sysfs, in case
some parent devices didn't implement runtime PM callbacks.
Signed-off-by: Baolin Wang <baolin.wang@linaro.org>
---
drivers/usb/host/xhci-plat.c | 54 ++++++++++++++++++++++++++++++++++++------
1 file changed, 47 insertions(+), 7 deletions(-)
diff --git a/drivers/usb/host/xhci-plat.c b/drivers/usb/host/xhci-plat.c
index bd02a6c..2036c24 100644
--- a/drivers/usb/host/xhci-plat.c
+++ b/drivers/usb/host/xhci-plat.c
@@ -179,9 +179,15 @@ static int xhci_plat_probe(struct platform_device *pdev)
return ret;
}
+ pm_runtime_set_active(&pdev->dev);
+ pm_runtime_enable(&pdev->dev);
+ pm_runtime_get_noresume(&pdev->dev);
+
hcd = usb_create_hcd(driver, &pdev->dev, dev_name(&pdev->dev));
- if (!hcd)
- return -ENOMEM;
+ if (!hcd) {
+ ret = -ENOMEM;
+ goto disable_runtime;
+ }
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
hcd->regs = devm_ioremap_resource(&pdev->dev, res);
@@ -258,6 +264,14 @@ static int xhci_plat_probe(struct platform_device *pdev)
if (ret)
goto dealloc_usb2_hcd;
+ pm_runtime_put_noidle(&pdev->dev);
+
+ /*
+ * Prevent runtime pm from being on as default, users should enable
+ * runtime pm using power/control in sysfs.
+ */
+ pm_runtime_forbid(&pdev->dev);
+
return 0;
@@ -277,6 +291,10 @@ static int xhci_plat_probe(struct platform_device *pdev)
put_hcd:
usb_put_hcd(hcd);
+disable_runtime:
+ pm_runtime_put_noidle(&pdev->dev);
+ pm_runtime_disable(&pdev->dev);
+
return ret;
}
@@ -298,6 +316,9 @@ static int xhci_plat_remove(struct platform_device *dev)
clk_disable_unprepare(clk);
usb_put_hcd(hcd);
+ pm_runtime_set_suspended(&dev->dev);
+ pm_runtime_disable(&dev->dev);
+
return 0;
}
@@ -325,14 +346,33 @@ static int xhci_plat_resume(struct device *dev)
return xhci_resume(xhci, 0);
}
+#endif /* CONFIG_PM_SLEEP */
+
+#ifdef CONFIG_PM
+static int xhci_plat_runtime_suspend(struct device *dev)
+{
+ struct usb_hcd *hcd = dev_get_drvdata(dev);
+ struct xhci_hcd *xhci = hcd_to_xhci(hcd);
+
+ return xhci_suspend(xhci, device_may_wakeup(dev));
+}
+
+static int xhci_plat_runtime_resume(struct device *dev)
+{
+ struct usb_hcd *hcd = dev_get_drvdata(dev);
+ struct xhci_hcd *xhci = hcd_to_xhci(hcd);
+
+ return xhci_resume(xhci, 0);
+}
+#endif /* CONFIG_PM */
static const struct dev_pm_ops xhci_plat_pm_ops = {
SET_SYSTEM_SLEEP_PM_OPS(xhci_plat_suspend, xhci_plat_resume)
+
+ SET_RUNTIME_PM_OPS(xhci_plat_runtime_suspend,
+ xhci_plat_runtime_resume,
+ NULL)
};
-#define DEV_PM_OPS (&xhci_plat_pm_ops)
-#else
-#define DEV_PM_OPS NULL
-#endif /* CONFIG_PM */
static const struct acpi_device_id usb_xhci_acpi_match[] = {
/* XHCI-compliant USB Controller */
@@ -346,7 +386,7 @@ static int xhci_plat_resume(struct device *dev)
.remove = xhci_plat_remove,
.driver = {
.name = "xhci-hcd",
- .pm = DEV_PM_OPS,
+ .pm = &xhci_plat_pm_ops,
.of_match_table = of_match_ptr(usb_xhci_of_match),
.acpi_match_table = ACPI_PTR(usb_xhci_acpi_match),
},
--
1.7.9.5
[toc] | [next] | [standalone]
| From | Baolin Wang <baolin.wang@linaro.org> |
|---|---|
| Date | 2017-04-10 10:00 +0200 |
| Message-ID | <tuCoV-6gF-3@gated-at.bofh.it> |
| In reply to | #1612516 |
Hi Mathias,
On 30 March 2017 at 11:26, Baolin Wang <baolin.wang@linaro.org> wrote:
> Enable the xHCI plat runtime PM for parent device to suspend/resume
> xHCI. Also call pm_runtime_forbid() in probe() function to force users
> to explicitly enable runtime pm using power/control in sysfs, in case
> some parent devices didn't implement runtime PM callbacks.
>
> Signed-off-by: Baolin Wang <baolin.wang@linaro.org>
> ---
> drivers/usb/host/xhci-plat.c | 54 ++++++++++++++++++++++++++++++++++++------
> 1 file changed, 47 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/usb/host/xhci-plat.c b/drivers/usb/host/xhci-plat.c
> index bd02a6c..2036c24 100644
> --- a/drivers/usb/host/xhci-plat.c
> +++ b/drivers/usb/host/xhci-plat.c
> @@ -179,9 +179,15 @@ static int xhci_plat_probe(struct platform_device *pdev)
> return ret;
> }
>
> + pm_runtime_set_active(&pdev->dev);
> + pm_runtime_enable(&pdev->dev);
> + pm_runtime_get_noresume(&pdev->dev);
> +
> hcd = usb_create_hcd(driver, &pdev->dev, dev_name(&pdev->dev));
> - if (!hcd)
> - return -ENOMEM;
> + if (!hcd) {
> + ret = -ENOMEM;
> + goto disable_runtime;
> + }
>
> res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
> hcd->regs = devm_ioremap_resource(&pdev->dev, res);
> @@ -258,6 +264,14 @@ static int xhci_plat_probe(struct platform_device *pdev)
> if (ret)
> goto dealloc_usb2_hcd;
>
> + pm_runtime_put_noidle(&pdev->dev);
> +
> + /*
> + * Prevent runtime pm from being on as default, users should enable
> + * runtime pm using power/control in sysfs.
> + */
> + pm_runtime_forbid(&pdev->dev);
> +
> return 0;
>
>
> @@ -277,6 +291,10 @@ static int xhci_plat_probe(struct platform_device *pdev)
> put_hcd:
> usb_put_hcd(hcd);
>
> +disable_runtime:
> + pm_runtime_put_noidle(&pdev->dev);
> + pm_runtime_disable(&pdev->dev);
> +
> return ret;
> }
>
> @@ -298,6 +316,9 @@ static int xhci_plat_remove(struct platform_device *dev)
> clk_disable_unprepare(clk);
> usb_put_hcd(hcd);
>
> + pm_runtime_set_suspended(&dev->dev);
> + pm_runtime_disable(&dev->dev);
> +
> return 0;
> }
>
> @@ -325,14 +346,33 @@ static int xhci_plat_resume(struct device *dev)
>
> return xhci_resume(xhci, 0);
> }
> +#endif /* CONFIG_PM_SLEEP */
> +
> +#ifdef CONFIG_PM
> +static int xhci_plat_runtime_suspend(struct device *dev)
> +{
> + struct usb_hcd *hcd = dev_get_drvdata(dev);
> + struct xhci_hcd *xhci = hcd_to_xhci(hcd);
> +
> + return xhci_suspend(xhci, device_may_wakeup(dev));
> +}
> +
> +static int xhci_plat_runtime_resume(struct device *dev)
> +{
> + struct usb_hcd *hcd = dev_get_drvdata(dev);
> + struct xhci_hcd *xhci = hcd_to_xhci(hcd);
> +
> + return xhci_resume(xhci, 0);
> +}
> +#endif /* CONFIG_PM */
>
> static const struct dev_pm_ops xhci_plat_pm_ops = {
> SET_SYSTEM_SLEEP_PM_OPS(xhci_plat_suspend, xhci_plat_resume)
> +
> + SET_RUNTIME_PM_OPS(xhci_plat_runtime_suspend,
> + xhci_plat_runtime_resume,
> + NULL)
> };
> -#define DEV_PM_OPS (&xhci_plat_pm_ops)
> -#else
> -#define DEV_PM_OPS NULL
> -#endif /* CONFIG_PM */
>
> static const struct acpi_device_id usb_xhci_acpi_match[] = {
> /* XHCI-compliant USB Controller */
> @@ -346,7 +386,7 @@ static int xhci_plat_resume(struct device *dev)
> .remove = xhci_plat_remove,
> .driver = {
> .name = "xhci-hcd",
> - .pm = DEV_PM_OPS,
> + .pm = &xhci_plat_pm_ops,
> .of_match_table = of_match_ptr(usb_xhci_of_match),
> .acpi_match_table = ACPI_PTR(usb_xhci_acpi_match),
> },
Any comments?
--
Baolin.wang
Best Regards
[toc] | [prev] | [next] | [standalone]
| From | Mathias Nyman <mathias.nyman@linux.intel.com> |
|---|---|
| Date | 2017-04-10 12:10 +0200 |
| Message-ID | <tuEqK-7Kj-21@gated-at.bofh.it> |
| In reply to | #1619695 |
On 10.04.2017 10:57, Baolin Wang wrote: > Hi Mathias, > > On 30 March 2017 at 11:26, Baolin Wang <baolin.wang@linaro.org> wrote: >> Enable the xHCI plat runtime PM for parent device to suspend/resume >> xHCI. Also call pm_runtime_forbid() in probe() function to force users >> to explicitly enable runtime pm using power/control in sysfs, in case >> some parent devices didn't implement runtime PM callbacks. >> >> Signed-off-by: Baolin Wang <baolin.wang@linaro.org> >> --- > Any comments? Patch looks good, but it didn't apply cleanly on top of the series going to usb next last Friday. I wanted those to go forward so this got postponed. Can you rebase this on latest usb-next? -Mathias
[toc] | [prev] | [next] | [standalone]
| From | Baolin Wang <baolin.wang@linaro.org> |
|---|---|
| Date | 2017-04-10 13:00 +0200 |
| Message-ID | <tuFd7-80c-1@gated-at.bofh.it> |
| In reply to | #1619774 |
Hi Mathias, On 10 April 2017 at 18:09, Mathias Nyman <mathias.nyman@linux.intel.com> wrote: > On 10.04.2017 10:57, Baolin Wang wrote: >> >> Hi Mathias, >> >> On 30 March 2017 at 11:26, Baolin Wang <baolin.wang@linaro.org> wrote: >>> >>> Enable the xHCI plat runtime PM for parent device to suspend/resume >>> xHCI. Also call pm_runtime_forbid() in probe() function to force users >>> to explicitly enable runtime pm using power/control in sysfs, in case >>> some parent devices didn't implement runtime PM callbacks. >>> >>> Signed-off-by: Baolin Wang <baolin.wang@linaro.org> >>> --- >> >> Any comments? > > > Patch looks good, but it didn't apply cleanly on top of the series going to > usb next last Friday. > I wanted those to go forward so this got postponed. > > Can you rebase this on latest usb-next? Sure. I will resend it. Thanks. -- Baolin.wang Best Regards
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web