[PATCH] gpu: ipu-v3: pre: only use internal clock gating
Philipp Zabel
p.zabel at pengutronix.de
Wed May 3 08:16:01 UTC 2017
On Tue, 2017-05-02 at 17:38 +0200, Lucas Stach wrote:
> By setting the SFTRST bit, the PRE will be held in the lowest power state
> with clocks to the internal blocks gated. When external clock gating is
> used (from the external clock controller, or by setting the CLKGATE bit)
> the PRE will sporadically fail to start.
>
> Signed-off-by: Lucas Stach <l.stach at pengutronix.de>
> ---
> This is a fix for newly introduced functionality and should be applied
> for 4.12 fixes.
> ---
> drivers/gpu/ipu-v3/ipu-pre.c | 11 +++--------
> 1 file changed, 3 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/gpu/ipu-v3/ipu-pre.c b/drivers/gpu/ipu-v3/ipu-pre.c
> index c55563379e2e..e2f6acf42792 100644
> --- a/drivers/gpu/ipu-v3/ipu-pre.c
> +++ b/drivers/gpu/ipu-v3/ipu-pre.c
> @@ -131,8 +131,6 @@ int ipu_pre_get(struct ipu_pre *pre)
> if (pre->in_use)
> return -EBUSY;
>
> - clk_prepare_enable(pre->clk_axi);
> -
> /* first get the engine out of reset and remove clock gating */
> writel(0, pre->regs + IPU_PRE_CTRL);
>
> @@ -149,12 +147,7 @@ int ipu_pre_get(struct ipu_pre *pre)
>
> void ipu_pre_put(struct ipu_pre *pre)
> {
> - u32 val;
> -
> - val = IPU_PRE_CTRL_SFTRST | IPU_PRE_CTRL_CLKGATE;
> - writel(val, pre->regs + IPU_PRE_CTRL);
> -
> - clk_disable_unprepare(pre->clk_axi);
> + writel(IPU_PRE_CTRL_SFTRST, pre->regs + IPU_PRE_CTRL);
>
> pre->in_use = false;
> }
> @@ -249,6 +242,8 @@ static int ipu_pre_probe(struct platform_device *pdev)
> if (!pre->buffer_virt)
> return -ENOMEM;
>
> + clk_prepare_enable(pre->clk_axi);
> +
> pre->dev = dev;
> platform_set_drvdata(pdev, pre);
> mutex_lock(&ipu_pre_list_mutex);
Why is there no matching clk_disable_unprepare in ipu_pre_remove?
regards
Philipp
More information about the dri-devel
mailing list