Re: [PATCH v2 3/9] media: hantro: add PM runtime resume callback

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, 29 May 2019 11:54:18 +0200
Philipp Zabel <p.zabel@xxxxxxxxxxxxxx> 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 <p.zabel@xxxxxxxxxxxxxx>

Reviewed-by: Boris Brezillon <boris.brezillon@xxxxxxxxxxxxx>

> ---
>  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 = {




[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux