aboutsummaryrefslogtreecommitdiffstats
path: root/meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/0355-drm-amd-display-initialize-YUV-plane-capabilities.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/0355-drm-amd-display-initialize-YUV-plane-capabilities.patch')
-rw-r--r--meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/0355-drm-amd-display-initialize-YUV-plane-capabilities.patch125
1 files changed, 125 insertions, 0 deletions
diff --git a/meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/0355-drm-amd-display-initialize-YUV-plane-capabilities.patch b/meta-v1000/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/meta-v1000/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
+