drm/amd/display : add high part address calculation for underlay
authorShirish S <shirish.s@amd.com>
Thu, 19 Oct 2017 17:04:15 +0000 (22:34 +0530)
committerAlex Deucher <alexander.deucher@amd.com>
Fri, 27 Oct 2017 17:13:51 +0000 (13:13 -0400)
Currently the high part of the address structure is not
populated in case of luma and chroma.
This patch adds this calculation.

Signed-off-by: Shirish S <shirish.s@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c

index bb134a6320bf84f379dd68c1bb3bec7c7a26b961..635a8a3df3699593e52fc3c1c7dff239f5c71c96 100644 (file)
@@ -1771,6 +1771,7 @@ static int fill_plane_attributes_from_fb(struct amdgpu_device *adev,
 {
        uint64_t tiling_flags;
        uint64_t fb_location = 0;
+       uint64_t chroma_addr = 0;
        unsigned int awidth;
        const struct drm_framebuffer *fb = &amdgpu_fb->base;
        int ret = 0;
@@ -1833,9 +1834,13 @@ static int fill_plane_attributes_from_fb(struct amdgpu_device *adev,
                plane_state->address.type = PLN_ADDR_TYPE_VIDEO_PROGRESSIVE;
                plane_state->address.video_progressive.luma_addr.low_part
                                                = lower_32_bits(fb_location);
+               plane_state->address.video_progressive.luma_addr.high_part
+                                               = upper_32_bits(fb_location);
+               chroma_addr = fb_location + (u64)(awidth * fb->height);
                plane_state->address.video_progressive.chroma_addr.low_part
-                                               = lower_32_bits(fb_location) +
-                                                       (awidth * fb->height);
+                                               = lower_32_bits(chroma_addr);
+               plane_state->address.video_progressive.chroma_addr.high_part
+                                               = upper_32_bits(chroma_addr);
                plane_state->plane_size.video.luma_size.x = 0;
                plane_state->plane_size.video.luma_size.y = 0;
                plane_state->plane_size.video.luma_size.width = awidth;