]> asedeno.scripts.mit.edu Git - linux.git/commit
drm/msm: Ensure that the hardware write pointer is valid
authorJordan Crouse <jcrouse@codeaurora.org>
Tue, 20 Dec 2016 15:54:29 +0000 (08:54 -0700)
committerRob Clark <robdclark@gmail.com>
Thu, 29 Dec 2016 20:02:58 +0000 (15:02 -0500)
commit88b333b0ed790f9433ff542b163bf972953b74d3
treeb3edf10c51b3faf7b36eda931236a257022185ba
parent4a401ceeef7bf3bc55f5e913cbf19d6038cf83c6
drm/msm: Ensure that the hardware write pointer is valid

Currently the value written to CP_RB_WPTR is calculated on the fly as
(rb->next - rb->start). But as the code is designed rb->next is wrapped
before writing the commands so if a series of commands happened to
fit perfectly in the ringbuffer, rb->next would end up being equal to
rb->size / 4 and thus result in an out of bounds address to CP_RB_WPTR.

The easiest way to fix this is to mask WPTR when writing it to the
hardware; it makes the hardware happy and the rest of the ringbuffer
math appears to work and there isn't any point in upsetting anything.

Signed-off-by: Jordan Crouse <jcrouse@codeaurora.org>
[squash in is_power_of_2() check]
Signed-off-by: Rob Clark <robdclark@gmail.com>
drivers/gpu/drm/msm/adreno/adreno_gpu.c
drivers/gpu/drm/msm/msm_ringbuffer.c