diff options
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/0355-drm-amd-display-initialize-YUV-plane-capabilities.patch')
-rw-r--r-- | common/recipes-kernel/linux/linux-yocto-4.14.71/0355-drm-amd-display-initialize-YUV-plane-capabilities.patch | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/0355-drm-amd-display-initialize-YUV-plane-capabilities.patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/0355-drm-amd-display-initialize-YUV-plane-capabilities.patch new file mode 100644 index 00000000..22d7a713 --- /dev/null +++ b/common/recipes-kernel/linux/linux-yocto-4.14.71/0355-drm-amd-display-initialize-YUV-plane-capabilities.patch @@ -0,0 +1,125 @@ +From 9a2e7d4bfc78c353af32b82301d79b290735a26c Mon Sep 17 00:00:00 2001 +From: Shirish S <shirish.s@amd.com> +Date: Wed, 26 Apr 2017 22:36:01 -0400 +Subject: [PATCH 0355/4131] drm/amd/display: initialize YUV plane capabilities + +This patch populates the YUV surface configurations. + +Tests: (On Chromium OS for Stoney Only) +builds without any errors. + +Signed-off-by: Shirish S <shirish.s@amd.com> +Reviewed-by: Tony Cheng <Tony.Cheng@amd.com> +Reviewed-by: Harry Wentland <harry.wentland@amd.com> +Signed-off-by: Alex Deucher <alexander.deucher@amd.com> +--- + .../drm/amd/display/amdgpu_dm/amdgpu_dm_types.c | 62 ++++++++++++++++------ + 1 file changed, 45 insertions(+), 17 deletions(-) + +diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_types.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_types.c +index bb55944..e99c9da 100644 +--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_types.c ++++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_types.c +@@ -461,9 +461,6 @@ static void fill_plane_attributes_from_fb( + &tiling_flags, + addReq == true ? &fb_location:NULL); + +- surface->address.type = PLN_ADDR_TYPE_GRAPHICS; +- surface->address.grph.addr.low_part = lower_32_bits(fb_location); +- surface->address.grph.addr.high_part = upper_32_bits(fb_location); + + switch (fb->format->format) { + case DRM_FORMAT_C8: +@@ -484,12 +481,55 @@ static void fill_plane_attributes_from_fb( + case DRM_FORMAT_ABGR2101010: + surface->format = SURFACE_PIXEL_FORMAT_GRPH_ABGR2101010; + break; ++ case DRM_FORMAT_YUV420: ++ surface->format = SURFACE_PIXEL_FORMAT_VIDEO_420_YCbCr; ++ break; ++ case DRM_FORMAT_YVU420: ++ surface->format = SURFACE_PIXEL_FORMAT_VIDEO_420_YCrCb; ++ break; + default: + DRM_ERROR("Unsupported screen format %s\n", + drm_get_format_name(fb->format->format, &format_name)); + return; + } + ++ if (surface->format < SURFACE_PIXEL_FORMAT_VIDEO_BEGIN) { ++ surface->address.type = PLN_ADDR_TYPE_GRAPHICS; ++ surface->address.grph.addr.low_part = lower_32_bits(fb_location); ++ surface->address.grph.addr.high_part = upper_32_bits(fb_location); ++ surface->plane_size.grph.surface_size.x = 0; ++ surface->plane_size.grph.surface_size.y = 0; ++ surface->plane_size.grph.surface_size.width = fb->width; ++ surface->plane_size.grph.surface_size.height = fb->height; ++ surface->plane_size.grph.surface_pitch = ++ fb->pitches[0] / fb->format->cpp[0]; ++ /* TODO: unhardcode */ ++ surface->color_space = COLOR_SPACE_SRGB; ++ ++ } else { ++ surface->address.type = PLN_ADDR_TYPE_VIDEO_PROGRESSIVE; ++ surface->address.video_progressive.luma_addr.low_part ++ = lower_32_bits(fb_location); ++ surface->address.video_progressive.chroma_addr.high_part ++ = upper_32_bits(fb_location); ++ surface->plane_size.video.luma_size.x = 0; ++ surface->plane_size.video.luma_size.y = 0; ++ surface->plane_size.video.luma_size.width = fb->width; ++ surface->plane_size.video.luma_size.height = fb->height; ++ /* TODO: unhardcode */ ++ surface->plane_size.video.luma_pitch = fb->pitches[0] / 4; ++ ++ surface->plane_size.video.chroma_size.x = 0; ++ surface->plane_size.video.chroma_size.y = 0; ++ surface->plane_size.video.chroma_size.width = fb->width; ++ surface->plane_size.video.chroma_size.height = fb->height; ++ surface->plane_size.video.chroma_pitch = ++ fb->pitches[0] / 4; ++ ++ /* TODO: unhardcode */ ++ surface->color_space = COLOR_SPACE_YCBCR709; ++ } ++ + memset(&surface->tiling_info, 0, sizeof(surface->tiling_info)); + + /* Fill GFX params */ +@@ -540,20 +580,10 @@ static void fill_plane_attributes_from_fb( + surface->tiling_info.gfx9.shaderEnable = 1; + } + +- +- surface->plane_size.grph.surface_size.x = 0; +- surface->plane_size.grph.surface_size.y = 0; +- surface->plane_size.grph.surface_size.width = fb->width; +- surface->plane_size.grph.surface_size.height = fb->height; +- surface->plane_size.grph.surface_pitch = +- fb->pitches[0] / fb->format->cpp[0]; +- + surface->visible = true; + surface->scaling_quality.h_taps_c = 0; + surface->scaling_quality.v_taps_c = 0; + +- /* TODO: unhardcode */ +- surface->color_space = COLOR_SPACE_SRGB; + /* is this needed? is surface zeroed at allocation? */ + surface->scaling_quality.h_taps = 0; + surface->scaling_quality.v_taps = 0; +@@ -1844,10 +1874,8 @@ static uint32_t rgb_formats[] = { + }; + + static uint32_t yuv_formats[] = { +- DRM_FORMAT_YUYV, +- DRM_FORMAT_YVYU, +- DRM_FORMAT_UYVY, +- DRM_FORMAT_VYUY, ++ DRM_FORMAT_YUV420, ++ DRM_FORMAT_YVU420, + }; + + int amdgpu_dm_plane_init(struct amdgpu_display_manager *dm, +-- +2.7.4 + |