diff options
Diffstat (limited to 'target/linux/brcm2708/patches-4.14/950-0181-drm-vc4-Use-.pixel_order-instead-of-custom-.flip_cbc.patch')
-rw-r--r-- | target/linux/brcm2708/patches-4.14/950-0181-drm-vc4-Use-.pixel_order-instead-of-custom-.flip_cbc.patch | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/target/linux/brcm2708/patches-4.14/950-0181-drm-vc4-Use-.pixel_order-instead-of-custom-.flip_cbc.patch b/target/linux/brcm2708/patches-4.14/950-0181-drm-vc4-Use-.pixel_order-instead-of-custom-.flip_cbc.patch new file mode 100644 index 0000000000..72b8d6564c --- /dev/null +++ b/target/linux/brcm2708/patches-4.14/950-0181-drm-vc4-Use-.pixel_order-instead-of-custom-.flip_cbc.patch @@ -0,0 +1,86 @@ +From 954b81b93de3cc6baa9e2ebdd4e8dc7b63dab71a Mon Sep 17 00:00:00 2001 +From: Dave Stevenson <dave.stevenson@raspberrypi.org> +Date: Thu, 16 Nov 2017 14:22:30 +0000 +Subject: [PATCH 181/454] drm/vc4: Use .pixel_order instead of custom + .flip_cbcr + +The hardware has enums for altering the Cr and Cb order, +so use this instead of having a flag which swaps the +order the pointers are presented to the hardware +(that only worked for 3 plane formats anyway). + +Explicitly sets .pixel_order in each case, rather than +relying on then default XYCBCR order being a value 0. + +Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.org> +Signed-off-by: Eric Anholt <eric@anholt.net> +Reviewed-by: Eric Anholt <eric@anholt.net> +Link: https://patchwork.freedesktop.org/patch/msgid/563872b69c1e5df142cb15ebfca7f20056b8a64c.1510841336.git.dave.stevenson@raspberrypi.org +(cherry picked from commit 090cb0c690183be849e2bfa0427220f1e435fa30) +--- + drivers/gpu/drm/vc4/vc4_plane.c | 20 ++++++++------------ + 1 file changed, 8 insertions(+), 12 deletions(-) + +--- a/drivers/gpu/drm/vc4/vc4_plane.c ++++ b/drivers/gpu/drm/vc4/vc4_plane.c +@@ -86,7 +86,6 @@ static const struct hvs_format { + u32 hvs; /* HVS_FORMAT_* */ + u32 pixel_order; + bool has_alpha; +- bool flip_cbcr; + } hvs_formats[] = { + { + .drm = DRM_FORMAT_XRGB8888, .hvs = HVS_PIXEL_FORMAT_RGBA8888, +@@ -131,28 +130,32 @@ static const struct hvs_format { + { + .drm = DRM_FORMAT_YUV422, + .hvs = HVS_PIXEL_FORMAT_YCBCR_YUV422_3PLANE, ++ .pixel_order = HVS_PIXEL_ORDER_XYCBCR, + }, + { + .drm = DRM_FORMAT_YVU422, + .hvs = HVS_PIXEL_FORMAT_YCBCR_YUV422_3PLANE, +- .flip_cbcr = true, ++ .pixel_order = HVS_PIXEL_ORDER_XYCRCB, + }, + { + .drm = DRM_FORMAT_YUV420, + .hvs = HVS_PIXEL_FORMAT_YCBCR_YUV420_3PLANE, ++ .pixel_order = HVS_PIXEL_ORDER_XYCBCR, + }, + { + .drm = DRM_FORMAT_YVU420, + .hvs = HVS_PIXEL_FORMAT_YCBCR_YUV420_3PLANE, +- .flip_cbcr = true, ++ .pixel_order = HVS_PIXEL_ORDER_XYCRCB, + }, + { + .drm = DRM_FORMAT_NV12, + .hvs = HVS_PIXEL_FORMAT_YCBCR_YUV420_2PLANE, ++ .pixel_order = HVS_PIXEL_ORDER_XYCBCR, + }, + { + .drm = DRM_FORMAT_NV16, + .hvs = HVS_PIXEL_FORMAT_YCBCR_YUV422_2PLANE, ++ .pixel_order = HVS_PIXEL_ORDER_XYCBCR, + }, + }; + +@@ -624,15 +627,8 @@ static int vc4_plane_mode_set(struct drm + * The pointers may be any byte address. + */ + vc4_state->ptr0_offset = vc4_state->dlist_count; +- if (!format->flip_cbcr) { +- for (i = 0; i < num_planes; i++) +- vc4_dlist_write(vc4_state, vc4_state->offsets[i]); +- } else { +- WARN_ON_ONCE(num_planes != 3); +- vc4_dlist_write(vc4_state, vc4_state->offsets[0]); +- vc4_dlist_write(vc4_state, vc4_state->offsets[2]); +- vc4_dlist_write(vc4_state, vc4_state->offsets[1]); +- } ++ for (i = 0; i < num_planes; i++) ++ vc4_dlist_write(vc4_state, vc4_state->offsets[i]); + + /* Pointer Context Word 0/1/2: Written by the HVS */ + for (i = 0; i < num_planes; i++) |