drm/amd/display: fix high part address in dm_plane_helper_prepare_fb()
authorShirish S <shirish.s@amd.com>
Thu, 26 Oct 2017 10:45:01 +0000 (16:15 +0530)
committerAlex Deucher <alexander.deucher@amd.com>
Fri, 27 Oct 2017 17:14:26 +0000 (13:14 -0400)
The high part calculation of luma and chroma address' was
missing in dm_plane_helper_prepare_fb().

This fix brings uniformity in the address' at atomic_check
and atomic_commit for both RGB & YUV planes.

Signed-off-by: Shirish S <shirish.s@amd.com>
Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Reviewed-by: Harry Wentland <harry.wentland@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c

index 635a8a3df3699593e52fc3c1c7dff239f5c71c96..c2fefd3e657e64066a635a8c7603bea0be262b7e 100644 (file)
@@ -2896,6 +2896,7 @@ static int dm_plane_helper_prepare_fb(struct drm_plane *plane,
        struct amdgpu_framebuffer *afb;
        struct drm_gem_object *obj;
        struct amdgpu_bo *rbo;
+       uint64_t chroma_addr = 0;
        int r;
        struct dm_plane_state *dm_plane_state_new, *dm_plane_state_old;
        unsigned int awidth;
@@ -2937,11 +2938,16 @@ static int dm_plane_helper_prepare_fb(struct drm_plane *plane,
                        plane_state->address.grph.addr.high_part = upper_32_bits(afb->address);
                } else {
                        awidth = ALIGN(new_state->fb->width, 64);
+                       plane_state->address.type = PLN_ADDR_TYPE_VIDEO_PROGRESSIVE;
                        plane_state->address.video_progressive.luma_addr.low_part
                                                        = lower_32_bits(afb->address);
+                       plane_state->address.video_progressive.luma_addr.high_part
+                                                       = upper_32_bits(afb->address);
+                       chroma_addr = afb->address + (u64)(awidth * new_state->fb->height);
                        plane_state->address.video_progressive.chroma_addr.low_part
-                                                       = lower_32_bits(afb->address) +
-                                                               (awidth * new_state->fb->height);
+                                                       = lower_32_bits(chroma_addr);
+                       plane_state->address.video_progressive.chroma_addr.high_part
+                                                       = upper_32_bits(chroma_addr);
                }
        }