summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Anholt <eric@anholt.net>2014-10-29 13:39:57 -0700
committerEric Anholt <eric@anholt.net>2015-06-04 14:15:23 -0700
commit8d943471316c6f6c8a57f2a3fce9bd776c010cd5 (patch)
treeede0771db9f6fbc84d85a4847af89c1cee3e4ccd
parent048a333da6064c02b847e6e4a4f0be1f615a9195 (diff)
downloadlinux-8d943471316c6f6c8a57f2a3fce9bd776c010cd5.tar.gz
drm/vc4: Fix failure to validate instructions with PROG_END flagged.
Signed-off-by: Eric Anholt <eric@anholt.net>
-rw-r--r--drivers/gpu/drm/vc4/vc4_validate_shaders.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/drivers/gpu/drm/vc4/vc4_validate_shaders.c b/drivers/gpu/drm/vc4/vc4_validate_shaders.c
index 97032aa4e197..752c873f3aa7 100644
--- a/drivers/gpu/drm/vc4/vc4_validate_shaders.c
+++ b/drivers/gpu/drm/vc4/vc4_validate_shaders.c
@@ -399,6 +399,7 @@ vc4_validate_shader(struct drm_gem_cma_object *shader_obj,
case QPU_SIG_COLOR_LOAD:
case QPU_SIG_LOAD_TMU0:
case QPU_SIG_LOAD_TMU1:
+ case QPU_SIG_PROG_END:
if (!check_instruction_writes(inst, validated_shader,
&validation_state)) {
DRM_ERROR("Bad write at ip %d\n", ip);
@@ -408,6 +409,11 @@ vc4_validate_shader(struct drm_gem_cma_object *shader_obj,
if (!check_instruction_reads(inst, validated_shader))
goto fail;
+ if (sig == QPU_SIG_PROG_END) {
+ found_shader_end = true;
+ shader_end_ip = ip;
+ }
+
break;
case QPU_SIG_LOAD_IMM:
@@ -418,11 +424,6 @@ vc4_validate_shader(struct drm_gem_cma_object *shader_obj,
}
break;
- case QPU_SIG_PROG_END:
- found_shader_end = true;
- shader_end_ip = ip;
- break;
-
default:
DRM_ERROR("Unsupported QPU signal %d at "
"instruction %d\n", sig, ip);