[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <20200511094913.g6mcaq7gmg23zjar@gilmour.lan>
Date: Mon, 11 May 2020 11:49:13 +0200
From: Maxime Ripard <maxime@...no.tech>
To: Samuel Holland <samuel@...lland.org>
Cc: Ezequiel Garcia <ezequiel@...guardiasur.com.ar>,
Paul Kocialkowski <paul.kocialkowski@...tlin.com>,
Chen-Yu Tsai <wens@...e.org>,
Mauro Carvalho Chehab <mchehab@...nel.org>,
Greg Kroah-Hartman <gregkh@...uxfoundation.org>,
linux-arm-kernel <linux-arm-kernel@...ts.infradead.org>,
Linux Kernel Mailing List <linux-kernel@...r.kernel.org>,
linux-media <linux-media@...r.kernel.org>,
linux-sunxi@...glegroups.com,
Jernej Škrabec <jernej.skrabec@...il.com>
Subject: Re: [linux-sunxi] [PATCH v2 2/2] media: cedrus: Implement runtime PM
On Sat, May 09, 2020 at 03:03:55PM -0500, Samuel Holland wrote:
> On 5/5/20 7:53 AM, Ezequiel Garcia wrote:
> > On Wed, 22 Apr 2020 at 01:00, Samuel Holland <samuel@...lland.org> wrote:
> >>
> >> This allows the VE clocks and PLL_VE to be disabled most of the time.
> >> A runtime PM reference is held while streaming.
> >>
> >> Originally-by: Jernej Škrabec <jernej.skrabec@...il.com>
> >
> > Originally-by is not documented, perhaps just go with Signed-off-by,
> > as Jernej suggested.
> >
> >> Signed-off-by: Samuel Holland <samuel@...lland.org>
> >> ---
> >>
> >> v2: moved PM reference to cedrus_{start,stop}_streaming, based on an
> >> earlier patch by Jernej Skrabec. Removes the need for autosuspend.
> >> I tested this with running 2x v4l2-request-test in parallel.
> >>
> >> ---
> >> drivers/staging/media/sunxi/cedrus/cedrus.c | 7 ++
> >> .../staging/media/sunxi/cedrus/cedrus_hw.c | 106 ++++++++++++------
> >> .../staging/media/sunxi/cedrus/cedrus_hw.h | 3 +
> >> .../staging/media/sunxi/cedrus/cedrus_video.c | 33 ++++--
> >> 4 files changed, 104 insertions(+), 45 deletions(-)
> >>
> >> diff --git a/drivers/staging/media/sunxi/cedrus/cedrus.c b/drivers/staging/media/sunxi/cedrus/cedrus.c
> >> index 05a85517ff60..bc27f9430eeb 100644
> >> --- a/drivers/staging/media/sunxi/cedrus/cedrus.c
> >> +++ b/drivers/staging/media/sunxi/cedrus/cedrus.c
> >> @@ -16,6 +16,7 @@
> >> #include <linux/platform_device.h>
> >> #include <linux/module.h>
> >> #include <linux/of.h>
> >> +#include <linux/pm.h>
> >>
> >> #include <media/v4l2-device.h>
> >> #include <media/v4l2-ioctl.h>
> >> @@ -551,12 +552,18 @@ static const struct of_device_id cedrus_dt_match[] = {
> >> };
> >> MODULE_DEVICE_TABLE(of, cedrus_dt_match);
> >>
> >> +static const struct dev_pm_ops cedrus_dev_pm_ops = {
> >> + SET_RUNTIME_PM_OPS(cedrus_hw_suspend,
> >> + cedrus_hw_resume, NULL)
> >> +};
> >> +
> >> static struct platform_driver cedrus_driver = {
> >> .probe = cedrus_probe,
> >> .remove = cedrus_remove,
> >> .driver = {
> >> .name = CEDRUS_NAME,
> >> .of_match_table = of_match_ptr(cedrus_dt_match),
> >> + .pm = &cedrus_dev_pm_ops,
> >> },
> >> };
> >> module_platform_driver(cedrus_driver);
> >> diff --git a/drivers/staging/media/sunxi/cedrus/cedrus_hw.c b/drivers/staging/media/sunxi/cedrus/cedrus_hw.c
> >> index daf5f244f93b..1744e6fcc999 100644
> >> --- a/drivers/staging/media/sunxi/cedrus/cedrus_hw.c
> >> +++ b/drivers/staging/media/sunxi/cedrus/cedrus_hw.c
> >> @@ -19,6 +19,7 @@
> >> #include <linux/dma-mapping.h>
> >> #include <linux/interrupt.h>
> >> #include <linux/clk.h>
> >> +#include <linux/pm_runtime.h>
> >> #include <linux/regmap.h>
> >> #include <linux/reset.h>
> >> #include <linux/soc/sunxi/sunxi_sram.h>
> >> @@ -140,6 +141,64 @@ static irqreturn_t cedrus_irq(int irq, void *data)
> >> return IRQ_HANDLED;
> >> }
> >>
> >> +int cedrus_hw_suspend(struct device *device)
> >> +{
> >> + struct cedrus_dev *dev = dev_get_drvdata(device);
> >> +
> >> + reset_control_assert(dev->rstc);
> >> +
> >> + clk_disable_unprepare(dev->ram_clk);
> >> + clk_disable_unprepare(dev->mod_clk);
> >> + clk_disable_unprepare(dev->ahb_clk);
> >> +
> >
> > You can use clk_bulk API here.
>
> Since this change is already tested, I'd prefer to do that as a separate
> patch.
Given that those three clocks are also pretty different from a semantic point of
view, I'm not sure it's wise to switch to the bulk API anyway.
Maxime
Download attachment "signature.asc" of type "application/pgp-signature" (229 bytes)
Powered by blists - more mailing lists