Commit e6fbd5df authored by Shirish S's avatar Shirish S Committed by Alex Deucher

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: default avatarShirish S <shirish.s@amd.com>
Reviewed-by: default avatarTony Cheng <Tony.Cheng@amd.com>
Reviewed-by: default avatarHarry Wentland <harry.wentland@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 07d72b39
...@@ -462,9 +462,6 @@ static void fill_plane_attributes_from_fb( ...@@ -462,9 +462,6 @@ static void fill_plane_attributes_from_fb(
&tiling_flags, &tiling_flags,
addReq == true ? &fb_location:NULL); 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) { switch (fb->format->format) {
case DRM_FORMAT_C8: case DRM_FORMAT_C8:
...@@ -485,12 +482,55 @@ static void fill_plane_attributes_from_fb( ...@@ -485,12 +482,55 @@ static void fill_plane_attributes_from_fb(
case DRM_FORMAT_ABGR2101010: case DRM_FORMAT_ABGR2101010:
surface->format = SURFACE_PIXEL_FORMAT_GRPH_ABGR2101010; surface->format = SURFACE_PIXEL_FORMAT_GRPH_ABGR2101010;
break; 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: default:
DRM_ERROR("Unsupported screen format %s\n", DRM_ERROR("Unsupported screen format %s\n",
drm_get_format_name(fb->format->format, &format_name)); drm_get_format_name(fb->format->format, &format_name));
return; 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)); memset(&surface->tiling_info, 0, sizeof(surface->tiling_info));
/* Fill GFX params */ /* Fill GFX params */
...@@ -541,20 +581,10 @@ static void fill_plane_attributes_from_fb( ...@@ -541,20 +581,10 @@ static void fill_plane_attributes_from_fb(
surface->tiling_info.gfx9.shaderEnable = 1; 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->visible = true;
surface->scaling_quality.h_taps_c = 0; surface->scaling_quality.h_taps_c = 0;
surface->scaling_quality.v_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? */ /* is this needed? is surface zeroed at allocation? */
surface->scaling_quality.h_taps = 0; surface->scaling_quality.h_taps = 0;
surface->scaling_quality.v_taps = 0; surface->scaling_quality.v_taps = 0;
...@@ -1670,10 +1700,8 @@ static uint32_t rgb_formats[] = { ...@@ -1670,10 +1700,8 @@ static uint32_t rgb_formats[] = {
}; };
static uint32_t yuv_formats[] = { static uint32_t yuv_formats[] = {
DRM_FORMAT_YUYV, DRM_FORMAT_YUV420,
DRM_FORMAT_YVYU, DRM_FORMAT_YVU420,
DRM_FORMAT_UYVY,
DRM_FORMAT_VYUY,
}; };
int amdgpu_dm_plane_init(struct amdgpu_display_manager *dm, int amdgpu_dm_plane_init(struct amdgpu_display_manager *dm,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment