Re: [PATCH v3 2/7] serdev: add dev_pm_domain_attach|detach()

2018-06-14 Thread Sean Wang
On Thu, 2018-06-14 at 10:58 +0200, Ulf Hansson wrote:
> On Thu, 14 Jun 2018 at 09:14,  wrote:
> >
> > From: Sean Wang 
> >
> > In order to open up the required power gate before any operation can be
> > effectively performed over the serial bus between CPU and serdev, it's
> > clearly essential to add common attach functions for PM domains to serdev
> > at the probe phase.
> >
> > Similarly, the relevant dettach function for the PM domains should be
> > properly and reversely added at the remove phase.
> >
> > Signed-off-by: Sean Wang 
> > Cc: Rob Herring 
> > Cc: Ulf Hansson 
> > Cc: Greg Kroah-Hartman 
> > Cc: Jiri Slaby 
> > Cc: linux-ser...@vger.kernel.org
> > ---
> >  drivers/tty/serdev/core.c | 14 +-
> >  1 file changed, 13 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/tty/serdev/core.c b/drivers/tty/serdev/core.c
> > index df93b72..c93d8ee 100644
> > --- a/drivers/tty/serdev/core.c
> > +++ b/drivers/tty/serdev/core.c
> > @@ -13,6 +13,7 @@
> >  #include 
> >  #include 
> >  #include 
> > +#include 
> >  #include 
> >  #include 
> >
> > @@ -330,8 +331,16 @@ EXPORT_SYMBOL_GPL(serdev_device_set_tiocm);
> >  static int serdev_drv_probe(struct device *dev)
> >  {
> > const struct serdev_device_driver *sdrv = 
> > to_serdev_device_driver(dev->driver);
> > +   int ret;
> > +
> > +   ret = dev_pm_domain_attach(dev, true);
> > +   if (ret != -EPROBE_DEFER) {
> 
> From 4.18 rc1 via commit 919b7308fcc4, dev_pm_domain_attach() will
> return better error codes.
> 
> I suggest to change the above error path to:
> if (ret)
>  return ret;
> 
> Then continue with the probing below.

Thanks for sharing me the information. I'll happily respin using the
patch because it makes the most sense.

> 
> > +   ret = sdrv->probe(to_serdev_device(dev));
> > +   if (ret)
> > +   dev_pm_domain_detach(dev, true);
> > +   }
> >
> > -   return sdrv->probe(to_serdev_device(dev));
> > +   return ret;
> >  }
> >
> >  static int serdev_drv_remove(struct device *dev)
> > @@ -339,6 +348,9 @@ static int serdev_drv_remove(struct device *dev)
> > const struct serdev_device_driver *sdrv = 
> > to_serdev_device_driver(dev->driver);
> > if (sdrv->remove)
> > sdrv->remove(to_serdev_device(dev));
> > +
> > +   dev_pm_domain_detach(dev, true);
> > +
> > return 0;
> >  }
> >
> > --
> > 2.7.4
> >
> 
> Otherwise, this makes sense to me!
> 

really thanks for your review!

> Kind regards
> Uffe




Re: [PATCH v3 2/7] serdev: add dev_pm_domain_attach|detach()

2018-06-14 Thread Sean Wang
On Thu, 2018-06-14 at 10:58 +0200, Ulf Hansson wrote:
> On Thu, 14 Jun 2018 at 09:14,  wrote:
> >
> > From: Sean Wang 
> >
> > In order to open up the required power gate before any operation can be
> > effectively performed over the serial bus between CPU and serdev, it's
> > clearly essential to add common attach functions for PM domains to serdev
> > at the probe phase.
> >
> > Similarly, the relevant dettach function for the PM domains should be
> > properly and reversely added at the remove phase.
> >
> > Signed-off-by: Sean Wang 
> > Cc: Rob Herring 
> > Cc: Ulf Hansson 
> > Cc: Greg Kroah-Hartman 
> > Cc: Jiri Slaby 
> > Cc: linux-ser...@vger.kernel.org
> > ---
> >  drivers/tty/serdev/core.c | 14 +-
> >  1 file changed, 13 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/tty/serdev/core.c b/drivers/tty/serdev/core.c
> > index df93b72..c93d8ee 100644
> > --- a/drivers/tty/serdev/core.c
> > +++ b/drivers/tty/serdev/core.c
> > @@ -13,6 +13,7 @@
> >  #include 
> >  #include 
> >  #include 
> > +#include 
> >  #include 
> >  #include 
> >
> > @@ -330,8 +331,16 @@ EXPORT_SYMBOL_GPL(serdev_device_set_tiocm);
> >  static int serdev_drv_probe(struct device *dev)
> >  {
> > const struct serdev_device_driver *sdrv = 
> > to_serdev_device_driver(dev->driver);
> > +   int ret;
> > +
> > +   ret = dev_pm_domain_attach(dev, true);
> > +   if (ret != -EPROBE_DEFER) {
> 
> From 4.18 rc1 via commit 919b7308fcc4, dev_pm_domain_attach() will
> return better error codes.
> 
> I suggest to change the above error path to:
> if (ret)
>  return ret;
> 
> Then continue with the probing below.

Thanks for sharing me the information. I'll happily respin using the
patch because it makes the most sense.

> 
> > +   ret = sdrv->probe(to_serdev_device(dev));
> > +   if (ret)
> > +   dev_pm_domain_detach(dev, true);
> > +   }
> >
> > -   return sdrv->probe(to_serdev_device(dev));
> > +   return ret;
> >  }
> >
> >  static int serdev_drv_remove(struct device *dev)
> > @@ -339,6 +348,9 @@ static int serdev_drv_remove(struct device *dev)
> > const struct serdev_device_driver *sdrv = 
> > to_serdev_device_driver(dev->driver);
> > if (sdrv->remove)
> > sdrv->remove(to_serdev_device(dev));
> > +
> > +   dev_pm_domain_detach(dev, true);
> > +
> > return 0;
> >  }
> >
> > --
> > 2.7.4
> >
> 
> Otherwise, this makes sense to me!
> 

really thanks for your review!

> Kind regards
> Uffe




Re: [PATCH v3 2/7] serdev: add dev_pm_domain_attach|detach()

2018-06-14 Thread Ulf Hansson
On Thu, 14 Jun 2018 at 09:14,  wrote:
>
> From: Sean Wang 
>
> In order to open up the required power gate before any operation can be
> effectively performed over the serial bus between CPU and serdev, it's
> clearly essential to add common attach functions for PM domains to serdev
> at the probe phase.
>
> Similarly, the relevant dettach function for the PM domains should be
> properly and reversely added at the remove phase.
>
> Signed-off-by: Sean Wang 
> Cc: Rob Herring 
> Cc: Ulf Hansson 
> Cc: Greg Kroah-Hartman 
> Cc: Jiri Slaby 
> Cc: linux-ser...@vger.kernel.org
> ---
>  drivers/tty/serdev/core.c | 14 +-
>  1 file changed, 13 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/tty/serdev/core.c b/drivers/tty/serdev/core.c
> index df93b72..c93d8ee 100644
> --- a/drivers/tty/serdev/core.c
> +++ b/drivers/tty/serdev/core.c
> @@ -13,6 +13,7 @@
>  #include 
>  #include 
>  #include 
> +#include 
>  #include 
>  #include 
>
> @@ -330,8 +331,16 @@ EXPORT_SYMBOL_GPL(serdev_device_set_tiocm);
>  static int serdev_drv_probe(struct device *dev)
>  {
> const struct serdev_device_driver *sdrv = 
> to_serdev_device_driver(dev->driver);
> +   int ret;
> +
> +   ret = dev_pm_domain_attach(dev, true);
> +   if (ret != -EPROBE_DEFER) {

>From 4.18 rc1 via commit 919b7308fcc4, dev_pm_domain_attach() will
return better error codes.

I suggest to change the above error path to:
if (ret)
 return ret;

Then continue with the probing below.

> +   ret = sdrv->probe(to_serdev_device(dev));
> +   if (ret)
> +   dev_pm_domain_detach(dev, true);
> +   }
>
> -   return sdrv->probe(to_serdev_device(dev));
> +   return ret;
>  }
>
>  static int serdev_drv_remove(struct device *dev)
> @@ -339,6 +348,9 @@ static int serdev_drv_remove(struct device *dev)
> const struct serdev_device_driver *sdrv = 
> to_serdev_device_driver(dev->driver);
> if (sdrv->remove)
> sdrv->remove(to_serdev_device(dev));
> +
> +   dev_pm_domain_detach(dev, true);
> +
> return 0;
>  }
>
> --
> 2.7.4
>

Otherwise, this makes sense to me!

Kind regards
Uffe


Re: [PATCH v3 2/7] serdev: add dev_pm_domain_attach|detach()

2018-06-14 Thread Ulf Hansson
On Thu, 14 Jun 2018 at 09:14,  wrote:
>
> From: Sean Wang 
>
> In order to open up the required power gate before any operation can be
> effectively performed over the serial bus between CPU and serdev, it's
> clearly essential to add common attach functions for PM domains to serdev
> at the probe phase.
>
> Similarly, the relevant dettach function for the PM domains should be
> properly and reversely added at the remove phase.
>
> Signed-off-by: Sean Wang 
> Cc: Rob Herring 
> Cc: Ulf Hansson 
> Cc: Greg Kroah-Hartman 
> Cc: Jiri Slaby 
> Cc: linux-ser...@vger.kernel.org
> ---
>  drivers/tty/serdev/core.c | 14 +-
>  1 file changed, 13 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/tty/serdev/core.c b/drivers/tty/serdev/core.c
> index df93b72..c93d8ee 100644
> --- a/drivers/tty/serdev/core.c
> +++ b/drivers/tty/serdev/core.c
> @@ -13,6 +13,7 @@
>  #include 
>  #include 
>  #include 
> +#include 
>  #include 
>  #include 
>
> @@ -330,8 +331,16 @@ EXPORT_SYMBOL_GPL(serdev_device_set_tiocm);
>  static int serdev_drv_probe(struct device *dev)
>  {
> const struct serdev_device_driver *sdrv = 
> to_serdev_device_driver(dev->driver);
> +   int ret;
> +
> +   ret = dev_pm_domain_attach(dev, true);
> +   if (ret != -EPROBE_DEFER) {

>From 4.18 rc1 via commit 919b7308fcc4, dev_pm_domain_attach() will
return better error codes.

I suggest to change the above error path to:
if (ret)
 return ret;

Then continue with the probing below.

> +   ret = sdrv->probe(to_serdev_device(dev));
> +   if (ret)
> +   dev_pm_domain_detach(dev, true);
> +   }
>
> -   return sdrv->probe(to_serdev_device(dev));
> +   return ret;
>  }
>
>  static int serdev_drv_remove(struct device *dev)
> @@ -339,6 +348,9 @@ static int serdev_drv_remove(struct device *dev)
> const struct serdev_device_driver *sdrv = 
> to_serdev_device_driver(dev->driver);
> if (sdrv->remove)
> sdrv->remove(to_serdev_device(dev));
> +
> +   dev_pm_domain_detach(dev, true);
> +
> return 0;
>  }
>
> --
> 2.7.4
>

Otherwise, this makes sense to me!

Kind regards
Uffe


[PATCH v3 2/7] serdev: add dev_pm_domain_attach|detach()

2018-06-14 Thread sean.wang
From: Sean Wang 

In order to open up the required power gate before any operation can be
effectively performed over the serial bus between CPU and serdev, it's
clearly essential to add common attach functions for PM domains to serdev
at the probe phase.

Similarly, the relevant dettach function for the PM domains should be
properly and reversely added at the remove phase.

Signed-off-by: Sean Wang 
Cc: Rob Herring 
Cc: Ulf Hansson 
Cc: Greg Kroah-Hartman 
Cc: Jiri Slaby 
Cc: linux-ser...@vger.kernel.org
---
 drivers/tty/serdev/core.c | 14 +-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/drivers/tty/serdev/core.c b/drivers/tty/serdev/core.c
index df93b72..c93d8ee 100644
--- a/drivers/tty/serdev/core.c
+++ b/drivers/tty/serdev/core.c
@@ -13,6 +13,7 @@
 #include 
 #include 
 #include 
+#include 
 #include 
 #include 
 
@@ -330,8 +331,16 @@ EXPORT_SYMBOL_GPL(serdev_device_set_tiocm);
 static int serdev_drv_probe(struct device *dev)
 {
const struct serdev_device_driver *sdrv = 
to_serdev_device_driver(dev->driver);
+   int ret;
+
+   ret = dev_pm_domain_attach(dev, true);
+   if (ret != -EPROBE_DEFER) {
+   ret = sdrv->probe(to_serdev_device(dev));
+   if (ret)
+   dev_pm_domain_detach(dev, true);
+   }
 
-   return sdrv->probe(to_serdev_device(dev));
+   return ret;
 }
 
 static int serdev_drv_remove(struct device *dev)
@@ -339,6 +348,9 @@ static int serdev_drv_remove(struct device *dev)
const struct serdev_device_driver *sdrv = 
to_serdev_device_driver(dev->driver);
if (sdrv->remove)
sdrv->remove(to_serdev_device(dev));
+
+   dev_pm_domain_detach(dev, true);
+
return 0;
 }
 
-- 
2.7.4



[PATCH v3 2/7] serdev: add dev_pm_domain_attach|detach()

2018-06-14 Thread sean.wang
From: Sean Wang 

In order to open up the required power gate before any operation can be
effectively performed over the serial bus between CPU and serdev, it's
clearly essential to add common attach functions for PM domains to serdev
at the probe phase.

Similarly, the relevant dettach function for the PM domains should be
properly and reversely added at the remove phase.

Signed-off-by: Sean Wang 
Cc: Rob Herring 
Cc: Ulf Hansson 
Cc: Greg Kroah-Hartman 
Cc: Jiri Slaby 
Cc: linux-ser...@vger.kernel.org
---
 drivers/tty/serdev/core.c | 14 +-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/drivers/tty/serdev/core.c b/drivers/tty/serdev/core.c
index df93b72..c93d8ee 100644
--- a/drivers/tty/serdev/core.c
+++ b/drivers/tty/serdev/core.c
@@ -13,6 +13,7 @@
 #include 
 #include 
 #include 
+#include 
 #include 
 #include 
 
@@ -330,8 +331,16 @@ EXPORT_SYMBOL_GPL(serdev_device_set_tiocm);
 static int serdev_drv_probe(struct device *dev)
 {
const struct serdev_device_driver *sdrv = 
to_serdev_device_driver(dev->driver);
+   int ret;
+
+   ret = dev_pm_domain_attach(dev, true);
+   if (ret != -EPROBE_DEFER) {
+   ret = sdrv->probe(to_serdev_device(dev));
+   if (ret)
+   dev_pm_domain_detach(dev, true);
+   }
 
-   return sdrv->probe(to_serdev_device(dev));
+   return ret;
 }
 
 static int serdev_drv_remove(struct device *dev)
@@ -339,6 +348,9 @@ static int serdev_drv_remove(struct device *dev)
const struct serdev_device_driver *sdrv = 
to_serdev_device_driver(dev->driver);
if (sdrv->remove)
sdrv->remove(to_serdev_device(dev));
+
+   dev_pm_domain_detach(dev, true);
+
return 0;
 }
 
-- 
2.7.4