On Wed, 29 May 2019 11:54:18 +0200
Philipp Zabel <[email protected]> wrote:

> It seems that on i.MX8MQ the power domain controller does not propagate
> resets to the VPU cores on resume. Add a callback to allow implementing
> manual reset of the VPU cores after ungating the power domain.
> 
> Signed-off-by: Philipp Zabel <[email protected]>

Reviewed-by: Boris Brezillon <[email protected]>

> ---
>  drivers/staging/media/hantro/hantro.h     |  2 ++
>  drivers/staging/media/hantro/hantro_drv.c | 13 +++++++++++++
>  2 files changed, 15 insertions(+)
> 
> diff --git a/drivers/staging/media/hantro/hantro.h 
> b/drivers/staging/media/hantro/hantro.h
> index 14e685428203..296b9ffad547 100644
> --- a/drivers/staging/media/hantro/hantro.h
> +++ b/drivers/staging/media/hantro/hantro.h
> @@ -56,6 +56,7 @@ struct hantro_codec_ops;
>   * @codec:                   Supported codecs
>   * @codec_ops:                       Codec ops.
>   * @init:                    Initialize hardware.
> + * @runtime_resume:          reenable hardware after power gating
>   * @vepu_irq:                        encoder interrupt handler
>   * @vdpu_irq:                        decoder interrupt handler
>   * @clk_names:                       array of clock names
> @@ -71,6 +72,7 @@ struct hantro_variant {
>       unsigned int codec;
>       const struct hantro_codec_ops *codec_ops;
>       int (*init)(struct hantro_dev *vpu);
> +     int (*runtime_resume)(struct hantro_dev *vpu);
>       irqreturn_t (*vepu_irq)(int irq, void *priv);
>       irqreturn_t (*vdpu_irq)(int irq, void *priv);
>       const char *clk_names[HANTRO_MAX_CLOCKS];
> diff --git a/drivers/staging/media/hantro/hantro_drv.c 
> b/drivers/staging/media/hantro/hantro_drv.c
> index e4390aa5c213..fb5f140dbaae 100644
> --- a/drivers/staging/media/hantro/hantro_drv.c
> +++ b/drivers/staging/media/hantro/hantro_drv.c
> @@ -831,9 +831,22 @@ static int hantro_remove(struct platform_device *pdev)
>       return 0;
>  }
>  
> +#ifdef CONFIG_PM
> +static int hantro_runtime_resume(struct device *dev)
> +{
> +     struct hantro_dev *vpu = dev_get_drvdata(dev);
> +
> +     if (vpu->variant->runtime_resume)
> +             return vpu->variant->runtime_resume(vpu);
> +
> +     return 0;
> +}
> +#endif
> +
>  static const struct dev_pm_ops hantro_pm_ops = {
>       SET_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend,
>                               pm_runtime_force_resume)
> +     SET_RUNTIME_PM_OPS(NULL, hantro_runtime_resume, NULL)
>  };
>  
>  static struct platform_driver hantro_driver = {

Reply via email to