lkml.org 
[lkml]   [2021]   [Jul]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.10 108/593] media: mtk-vcodec: fix PM runtime get logic
    Date
    From: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>

    [ Upstream commit 908711f542c17fe61e5d653da1beb8e5ab5c7b50 ]

    Currently, the driver just assumes that PM runtime logic
    succeded resuming the device.

    That may not be the case, as pm_runtime_get_sync()
    can fail (but keeping the usage count incremented).

    Replace the code to use pm_runtime_resume_and_get(),
    and letting it return the error code.

    This way, if mtk_vcodec_dec_pw_on() fails, the logic
    under fops_vcodec_open() will do the right thing and
    return an error, instead of just assuming that the
    device is ready to be used.

    Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/media/platform/mtk-vcodec/mtk_vcodec_dec_drv.c | 4 +++-
    drivers/media/platform/mtk-vcodec/mtk_vcodec_dec_pm.c | 8 +++++---
    drivers/media/platform/mtk-vcodec/mtk_vcodec_dec_pm.h | 2 +-
    3 files changed, 9 insertions(+), 5 deletions(-)

    diff --git a/drivers/media/platform/mtk-vcodec/mtk_vcodec_dec_drv.c b/drivers/media/platform/mtk-vcodec/mtk_vcodec_dec_drv.c
    index 145686d2c219..f59ef8c8c9db 100644
    --- a/drivers/media/platform/mtk-vcodec/mtk_vcodec_dec_drv.c
    +++ b/drivers/media/platform/mtk-vcodec/mtk_vcodec_dec_drv.c
    @@ -126,7 +126,9 @@ static int fops_vcodec_open(struct file *file)
    mtk_vcodec_dec_set_default_params(ctx);

    if (v4l2_fh_is_singular(&ctx->fh)) {
    - mtk_vcodec_dec_pw_on(&dev->pm);
    + ret = mtk_vcodec_dec_pw_on(&dev->pm);
    + if (ret < 0)
    + goto err_load_fw;
    /*
    * Does nothing if firmware was already loaded.
    */
    diff --git a/drivers/media/platform/mtk-vcodec/mtk_vcodec_dec_pm.c b/drivers/media/platform/mtk-vcodec/mtk_vcodec_dec_pm.c
    index ddee7046ce42..6038db96f71c 100644
    --- a/drivers/media/platform/mtk-vcodec/mtk_vcodec_dec_pm.c
    +++ b/drivers/media/platform/mtk-vcodec/mtk_vcodec_dec_pm.c
    @@ -88,13 +88,15 @@ void mtk_vcodec_release_dec_pm(struct mtk_vcodec_dev *dev)
    put_device(dev->pm.larbvdec);
    }

    -void mtk_vcodec_dec_pw_on(struct mtk_vcodec_pm *pm)
    +int mtk_vcodec_dec_pw_on(struct mtk_vcodec_pm *pm)
    {
    int ret;

    - ret = pm_runtime_get_sync(pm->dev);
    + ret = pm_runtime_resume_and_get(pm->dev);
    if (ret)
    - mtk_v4l2_err("pm_runtime_get_sync fail %d", ret);
    + mtk_v4l2_err("pm_runtime_resume_and_get fail %d", ret);
    +
    + return ret;
    }

    void mtk_vcodec_dec_pw_off(struct mtk_vcodec_pm *pm)
    diff --git a/drivers/media/platform/mtk-vcodec/mtk_vcodec_dec_pm.h b/drivers/media/platform/mtk-vcodec/mtk_vcodec_dec_pm.h
    index 872d8bf8cfaf..280aeaefdb65 100644
    --- a/drivers/media/platform/mtk-vcodec/mtk_vcodec_dec_pm.h
    +++ b/drivers/media/platform/mtk-vcodec/mtk_vcodec_dec_pm.h
    @@ -12,7 +12,7 @@
    int mtk_vcodec_init_dec_pm(struct mtk_vcodec_dev *dev);
    void mtk_vcodec_release_dec_pm(struct mtk_vcodec_dev *dev);

    -void mtk_vcodec_dec_pw_on(struct mtk_vcodec_pm *pm);
    +int mtk_vcodec_dec_pw_on(struct mtk_vcodec_pm *pm);
    void mtk_vcodec_dec_pw_off(struct mtk_vcodec_pm *pm);
    void mtk_vcodec_dec_clock_on(struct mtk_vcodec_pm *pm);
    void mtk_vcodec_dec_clock_off(struct mtk_vcodec_pm *pm);
    --
    2.30.2


    \
     
     \ /
      Last update: 2021-07-12 08:43    [W:4.051 / U:0.360 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site