]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/commitdiff
drm/msm/adreno: fix zap vs no-zap handling
authorRob Clark <robdclark@chromium.org>
Sun, 24 Nov 2019 22:23:38 +0000 (14:23 -0800)
committerRob Clark <robdclark@chromium.org>
Thu, 2 Jan 2020 22:18:52 +0000 (14:18 -0800)
We can have two cases, when it comes to "zap" fw.  Either the fw
requires zap fw to take the GPU out of secure mode at boot, or it does
not and we can write RBBM_SECVID_TRUST_CNTL directly.  Previously we
decided based on whether zap fw load succeeded, but this is not a great
plan because:

1) we could have zap fw in the filesystem on a device where it is not
   required
2) we could have the inverse case

Instead, shift to deciding based on whether we have a 'zap-shader' node
in dt.  In practice, there is only one device (currently) with upstream
dt that does not use zap (cheza), and it already has a /delete-node/ for
the zap-shader node.

Fixes: abccb9fe3267 ("drm/msm/a6xx: Add zap shader load")
Signed-off-by: Rob Clark <robdclark@chromium.org>
drivers/gpu/drm/msm/adreno/a5xx_gpu.c
drivers/gpu/drm/msm/adreno/a6xx_gpu.c

index b02e2042547f6bcc540a38738121ad0298004475..7d9e63e20dedd73434ab06514b8ba59359410d8c 100644 (file)
@@ -753,11 +753,18 @@ static int a5xx_hw_init(struct msm_gpu *gpu)
                gpu->funcs->flush(gpu, gpu->rb[0]);
                if (!a5xx_idle(gpu, gpu->rb[0]))
                        return -EINVAL;
-       } else {
-               /* Print a warning so if we die, we know why */
+       } else if (ret == -ENODEV) {
+               /*
+                * This device does not use zap shader (but print a warning
+                * just in case someone got their dt wrong.. hopefully they
+                * have a debug UART to realize the error of their ways...
+                * if you mess this up you are about to crash horribly)
+                */
                dev_warn_once(gpu->dev->dev,
                        "Zap shader not enabled - using SECVID_TRUST_CNTL instead\n");
                gpu_write(gpu, REG_A5XX_RBBM_SECVID_TRUST_CNTL, 0x0);
+       } else {
+               return ret;
        }
 
        /* Last step - yield the ringbuffer */
index dc8ec2c94301b67f057f918e6d7bdb36722938d3..686c34d706b0d9cb335c7d6b1849c7bf1ef927cd 100644 (file)
@@ -537,12 +537,19 @@ static int a6xx_hw_init(struct msm_gpu *gpu)
                a6xx_flush(gpu, gpu->rb[0]);
                if (!a6xx_idle(gpu, gpu->rb[0]))
                        return -EINVAL;
-       } else {
-               /* Print a warning so if we die, we know why */
+       } else if (ret == -ENODEV) {
+               /*
+                * This device does not use zap shader (but print a warning
+                * just in case someone got their dt wrong.. hopefully they
+                * have a debug UART to realize the error of their ways...
+                * if you mess this up you are about to crash horribly)
+                */
                dev_warn_once(gpu->dev->dev,
                        "Zap shader not enabled - using SECVID_TRUST_CNTL instead\n");
                gpu_write(gpu, REG_A6XX_RBBM_SECVID_TRUST_CNTL, 0x0);
                ret = 0;
+       } else {
+               return ret;
        }
 
 out: