media: venus: hfi_venus: add halt AXI support for Venus 4xx
authorStanimir Varbanov <stanimir.varbanov@linaro.org>
Thu, 5 Jul 2018 13:03:41 +0000 (09:03 -0400)
committerMauro Carvalho Chehab <mchehab+samsung@kernel.org>
Wed, 25 Jul 2018 12:44:52 +0000 (08:44 -0400)
Add AXI halt support for version 4xx by using venus wrapper
registers.

Signed-off-by: Stanimir Varbanov <stanimir.varbanov@linaro.org>
Reviewed-by: Tomasz Figa <tfiga@chromium.org>
Reviewed-by: Alexandre Courbot <acourbot@chromium.org>
Tested-by: Alexandre Courbot <acourbot@chromium.org>
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
drivers/media/platform/qcom/venus/hfi_venus.c
drivers/media/platform/qcom/venus/hfi_venus_io.h

index 734ce11..784b3ad 100644 (file)
@@ -532,6 +532,24 @@ static int venus_halt_axi(struct venus_hfi_device *hdev)
        u32 val;
        int ret;
 
+       if (IS_V4(hdev->core)) {
+               val = venus_readl(hdev, WRAPPER_CPU_AXI_HALT);
+               val |= WRAPPER_CPU_AXI_HALT_HALT;
+               venus_writel(hdev, WRAPPER_CPU_AXI_HALT, val);
+
+               ret = readl_poll_timeout(base + WRAPPER_CPU_AXI_HALT_STATUS,
+                                        val,
+                                        val & WRAPPER_CPU_AXI_HALT_STATUS_IDLE,
+                                        POLL_INTERVAL_US,
+                                        VBIF_AXI_HALT_ACK_TIMEOUT_US);
+               if (ret) {
+                       dev_err(dev, "AXI bus port halt timeout\n");
+                       return ret;
+               }
+
+               return 0;
+       }
+
        /* Halt AXI and AXI IMEM VBIF Access */
        val = venus_readl(hdev, VBIF_AXI_HALT_CTRL0);
        val |= VBIF_AXI_HALT_CTRL0_HALT_REQ;
index d327b5c..c0b18de 100644 (file)
 
 #define WRAPPER_CPU_CLOCK_CONFIG               (WRAPPER_BASE + 0x2000)
 #define WRAPPER_CPU_AXI_HALT                   (WRAPPER_BASE + 0x2008)
+#define WRAPPER_CPU_AXI_HALT_HALT              BIT(16)
 #define WRAPPER_CPU_AXI_HALT_STATUS            (WRAPPER_BASE + 0x200c)
+#define WRAPPER_CPU_AXI_HALT_STATUS_IDLE       BIT(24)
 
 #define WRAPPER_CPU_CGC_DIS                    (WRAPPER_BASE + 0x2010)
 #define WRAPPER_CPU_STATUS                     (WRAPPER_BASE + 0x2014)