diff options
author | Álvaro Fernández Rojas <noltari@gmail.com> | 2020-03-16 20:41:03 +0100 |
---|---|---|
committer | Álvaro Fernández Rojas <noltari@gmail.com> | 2020-03-16 21:24:23 +0100 |
commit | 0f6d04457a64f2393b05f662dc8d381ea1963c66 (patch) | |
tree | 2d6a3c82d5e6d02b030b16df66da8bf9209b02ec /target/linux/bcm27xx/patches-5.4/950-0243-drm-vc4-Add-support-for-H-V-flips-on-each-plane-for-.patch | |
parent | d890f85e59617228b1e76e8cf45a9309904d9124 (diff) | |
download | upstream-0f6d04457a64f2393b05f662dc8d381ea1963c66.tar.gz upstream-0f6d04457a64f2393b05f662dc8d381ea1963c66.tar.bz2 upstream-0f6d04457a64f2393b05f662dc8d381ea1963c66.zip |
bcm27xx: sync 5.4 patches with RPi Foundation
Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
Diffstat (limited to 'target/linux/bcm27xx/patches-5.4/950-0243-drm-vc4-Add-support-for-H-V-flips-on-each-plane-for-.patch')
-rw-r--r-- | target/linux/bcm27xx/patches-5.4/950-0243-drm-vc4-Add-support-for-H-V-flips-on-each-plane-for-.patch | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/target/linux/bcm27xx/patches-5.4/950-0243-drm-vc4-Add-support-for-H-V-flips-on-each-plane-for-.patch b/target/linux/bcm27xx/patches-5.4/950-0243-drm-vc4-Add-support-for-H-V-flips-on-each-plane-for-.patch new file mode 100644 index 0000000000..43a2ffab16 --- /dev/null +++ b/target/linux/bcm27xx/patches-5.4/950-0243-drm-vc4-Add-support-for-H-V-flips-on-each-plane-for-.patch @@ -0,0 +1,86 @@ +From 495fd0373ad234c8547697e3a7de1f1724c8498d Mon Sep 17 00:00:00 2001 +From: Dave Stevenson <dave.stevenson@raspberrypi.org> +Date: Tue, 9 Apr 2019 17:19:51 +0100 +Subject: [PATCH] drm: vc4: Add support for H & V flips on each plane + for FKMS + +They are near zero cost options for the HVS, therefore they +may as well be implemented, and it allows us to invert the +DSI display. + +Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.org> +--- + drivers/gpu/drm/vc4/vc4_firmware_kms.c | 36 ++++++++++++++++++++++++++ + 1 file changed, 36 insertions(+) + +--- a/drivers/gpu/drm/vc4/vc4_firmware_kms.c ++++ b/drivers/gpu/drm/vc4/vc4_firmware_kms.c +@@ -64,8 +64,21 @@ struct set_plane { + u8 padding; + + u32 planes[4]; /* DMA address of each plane */ ++ ++ u32 transform; + }; + ++/* Values for the transform field */ ++#define TRANSFORM_NO_ROTATE 0 ++#define TRANSFORM_ROTATE_180 BIT(1) ++#define TRANSFORM_FLIP_HRIZ BIT(16) ++#define TRANSFORM_FLIP_VERT BIT(17) ++ ++#define SUPPORTED_ROTATIONS (DRM_MODE_ROTATE_0 | \ ++ DRM_MODE_ROTATE_180 | \ ++ DRM_MODE_REFLECT_X | \ ++ DRM_MODE_REFLECT_Y) ++ + struct mailbox_set_plane { + struct rpi_firmware_property_tag_header tag; + struct set_plane plane; +@@ -277,6 +290,7 @@ static void vc4_plane_atomic_update(stru + struct vc4_crtc *vc4_crtc = to_vc4_crtc(state->crtc); + int num_planes = fb->format->num_planes; + struct drm_display_mode *mode = &state->crtc->mode; ++ unsigned int rotation = SUPPORTED_ROTATIONS; + + mb->plane.vc_image_type = vc_fmt->vc_image; + mb->plane.width = fb->width; +@@ -297,6 +311,24 @@ static void vc4_plane_atomic_update(stru + mb->plane.is_vu = vc_fmt->is_vu; + mb->plane.planes[0] = bo->paddr + fb->offsets[0]; + ++ rotation = drm_rotation_simplify(state->rotation, rotation); ++ ++ switch (rotation) { ++ default: ++ case DRM_MODE_ROTATE_0: ++ mb->plane.transform = TRANSFORM_NO_ROTATE; ++ break; ++ case DRM_MODE_ROTATE_180: ++ mb->plane.transform = TRANSFORM_ROTATE_180; ++ break; ++ case DRM_MODE_REFLECT_X: ++ mb->plane.transform = TRANSFORM_FLIP_HRIZ; ++ break; ++ case DRM_MODE_REFLECT_Y: ++ mb->plane.transform = TRANSFORM_FLIP_VERT; ++ break; ++ } ++ + /* FIXME: If the dest rect goes off screen then clip the src rect so we + * don't have off-screen pixels. + */ +@@ -516,9 +548,13 @@ static struct drm_plane *vc4_fkms_plane_ + formats, num_formats, modifiers, + type, NULL); + ++ /* FIXME: Do we need to be checking return values from all these calls? ++ */ + drm_plane_helper_add(plane, &vc4_plane_helper_funcs); + + drm_plane_create_alpha_property(plane); ++ drm_plane_create_rotation_property(plane, DRM_MODE_ROTATE_0, ++ SUPPORTED_ROTATIONS); + + /* + * Default frame buffer setup is with FB on -127, and raspistill etc |