summaryrefslogtreecommitdiff
path: root/drivers/dma/mmp_pdma.c
diff options
context:
space:
mode:
authorJordan Crouse <jcrouse@codeaurora.org>2016-12-20 08:54:29 -0700
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2017-08-06 19:19:44 -0700
commitb54e58ccceb794176b37037e76df3a7ed876b360 (patch)
treef489e6347b98b5f7c61c4a2aa6cc3c6a79153615 /drivers/dma/mmp_pdma.c
parentcbc80312fd7089c155bd3de373591e5e27832716 (diff)
drm/msm: Ensure that the hardware write pointer is valid
[ Upstream commit 88b333b0ed790f9433ff542b163bf972953b74d3 ] 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> Signed-off-by: Sasha Levin <alexander.levin@verizon.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/dma/mmp_pdma.c')
0 files changed, 0 insertions, 0 deletions