]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
media: venus: Fix occasionally failures to suspend
authorStanimir Varbanov <stanimir.varbanov@linaro.org>
Tue, 17 Sep 2019 12:02:26 +0000 (09:02 -0300)
committerMauro Carvalho Chehab <mchehab+samsung@kernel.org>
Fri, 4 Oct 2019 11:51:29 +0000 (08:51 -0300)
Failure to suspend (venus_suspend_3xx) happens when the system
is fresh booted and loading venus driver. This happens once and
after reload the venus driver modules the problem disrepair.

Fix the failure by skipping the check for WFI and IDLE bits if
PC_READY is on in control status register.

Signed-off-by: Stanimir Varbanov <stanimir.varbanov@linaro.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
drivers/media/platform/qcom/venus/hfi_venus.c

index 7129a2aea09adb6fd750fecfe38964f8c2352fd5..0d8855014ab3d6848e02bbad72773a07c985b88d 100644 (file)
@@ -1472,6 +1472,7 @@ static int venus_suspend_3xx(struct venus_core *core)
 {
        struct venus_hfi_device *hdev = to_hfi_priv(core);
        struct device *dev = core->dev;
+       u32 ctrl_status;
        bool val;
        int ret;
 
@@ -1487,6 +1488,10 @@ static int venus_suspend_3xx(struct venus_core *core)
                return -EINVAL;
        }
 
+       ctrl_status = venus_readl(hdev, CPU_CS_SCIACMDARG0);
+       if (ctrl_status & CPU_CS_SCIACMDARG0_PC_READY)
+               goto power_off;
+
        /*
         * Power collapse sequence for Venus 3xx and 4xx versions:
         * 1. Check for ARM9 and video core to be idle by checking WFI bit
@@ -1511,6 +1516,7 @@ static int venus_suspend_3xx(struct venus_core *core)
        if (ret)
                return ret;
 
+power_off:
        mutex_lock(&hdev->lock);
 
        ret = venus_power_off(hdev);