Message ID | d5904115ff1da38fe79b45fa3d59ef0688cea124.1531150733.git.sean.wang@mediatek.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Hi Sean, > 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 <sean.wang@mediatek.com> > Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org> > Cc: Rob Herring <robh@kernel.org> > Cc: Ulf Hansson <ulf.hansson@linaro.org> > Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> > Cc: Jiri Slaby <jslaby@suse.com> > Cc: linux-serial@vger.kernel.org > --- > drivers/tty/serdev/core.c | 15 ++++++++++++++- > 1 file changed, 14 insertions(+), 1 deletion(-) can we take this through the serial subsystem? Or should I just take it when the driver is ready to be included? Regards Marcel
On Sat, 2018-07-14 at 18:27 +0200, Marcel Holtmann wrote: > Hi Sean, > > > 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 <sean.wang@mediatek.com> > > Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org> > > Cc: Rob Herring <robh@kernel.org> > > Cc: Ulf Hansson <ulf.hansson@linaro.org> > > Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> > > Cc: Jiri Slaby <jslaby@suse.com> > > Cc: linux-serial@vger.kernel.org > > --- > > drivers/tty/serdev/core.c | 15 ++++++++++++++- > > 1 file changed, 14 insertions(+), 1 deletion(-) > > can we take this through the serial subsystem? Or should I just take it when the driver is ready to be included? > > Regards > > Marcel > I think it's better if the change is taken through serial subsystem first. Hi, Rob do you have any comment? Sean > > _______________________________________________ > Linux-mediatek mailing list > Linux-mediatek@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-mediatek
On Sun, Jul 15, 2018 at 01:29:55PM +0800, Sean Wang wrote: > On Sat, 2018-07-14 at 18:27 +0200, Marcel Holtmann wrote: > > Hi Sean, > > > > > 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 <sean.wang@mediatek.com> > > > Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org> > > > Cc: Rob Herring <robh@kernel.org> > > > Cc: Ulf Hansson <ulf.hansson@linaro.org> > > > Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> > > > Cc: Jiri Slaby <jslaby@suse.com> > > > Cc: linux-serial@vger.kernel.org > > > --- > > > drivers/tty/serdev/core.c | 15 ++++++++++++++- > > > 1 file changed, 14 insertions(+), 1 deletion(-) > > > > can we take this through the serial subsystem? Or should I just take it when the driver is ready to be included? > > > > Regards > > > > Marcel > > > > I think it's better if the change is taken through serial subsystem > first. > > Hi, Rob > > do you have any comment? Yeah, I've been ignoring it to wait to get an ack from someone... greg k-h
On Mon, Jul 09, 2018 at 11:56:58PM +0800, sean.wang@mediatek.com wrote: > From: Sean Wang <sean.wang@mediatek.com> > > 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 <sean.wang@mediatek.com> > Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org> > Cc: Rob Herring <robh@kernel.org> > Cc: Ulf Hansson <ulf.hansson@linaro.org> > Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> > Cc: Jiri Slaby <jslaby@suse.com> > Cc: linux-serial@vger.kernel.org Reviewed-by: Johan Hovold <johan@kernel.org>
On Sun, Jul 15, 2018 at 10:56:28AM +0200, Johan Hovold wrote: > On Mon, Jul 09, 2018 at 11:56:58PM +0800, sean.wang@mediatek.com wrote: > > From: Sean Wang <sean.wang@mediatek.com> > > > > 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 <sean.wang@mediatek.com> > > Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org> > > Cc: Rob Herring <robh@kernel.org> > > Cc: Ulf Hansson <ulf.hansson@linaro.org> > > Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> > > Cc: Jiri Slaby <jslaby@suse.com> > > Cc: linux-serial@vger.kernel.org > > Reviewed-by: Johan Hovold <johan@kernel.org> Thanks, now applied. greg k-h
diff --git a/drivers/tty/serdev/core.c b/drivers/tty/serdev/core.c index bd47c46..9db93f5 100644 --- a/drivers/tty/serdev/core.c +++ b/drivers/tty/serdev/core.c @@ -13,6 +13,7 @@ #include <linux/module.h> #include <linux/of.h> #include <linux/of_device.h> +#include <linux/pm_domain.h> #include <linux/pm_runtime.h> #include <linux/serdev.h> #include <linux/slab.h> @@ -350,8 +351,17 @@ 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; - return sdrv->probe(to_serdev_device(dev)); + ret = dev_pm_domain_attach(dev, true); + if (ret) + return ret; + + ret = sdrv->probe(to_serdev_device(dev)); + if (ret) + dev_pm_domain_detach(dev, true); + + return ret; } static int serdev_drv_remove(struct device *dev) @@ -359,6 +369,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; }