aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/sun4i/sun4i_layer.c
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2018-11-28 19:21:23 -0500
committerDave Airlie <airlied@redhat.com>2018-11-28 19:28:49 -0500
commit61647c77cb15354a329cbb36fe7a2253b36b51b1 (patch)
tree59d887f99bc4a2bdddc7cfc1d81794c2a4cdc759 /drivers/gpu/drm/sun4i/sun4i_layer.c
parent1a31c26ed7b495f152e3103dc7c68e3307a39541 (diff)
parent08f73d668048ffa3ba6b1426b6ba0a89b16aefd7 (diff)
Merge tag 'drm-misc-next-2018-11-28' of git://anongit.freedesktop.org/drm/drm-misc into drm-next
drm-misc-next for v4.21: Core Changes: - Merge drm_info.c into drm_debugfs.c - Complete the fake drm_crtc_commit's hw_done/flip_done sooner. - Remove deprecated drm_obj_ref/unref functions. All drivers use get/put now. - Decrease stack use of drm_gem_prime_mmap. - Improve documentation for dumb callbacks. Driver Changes: - Add edid support to virtio. - Wait on implicit fence in meson and sun4i. - Add support for BGRX8888 to sun4i. - Preparation patches for sun4i driver to start supporting linear and tiled YUV formats. - Add support for HDMI 1.4 4k modes to meson, and support for VIC alternate timings. - Drop custom dumb_map in vkms. - Small fixes and cleanups to v3d. Signed-off-by: Dave Airlie <airlied@redhat.com> From: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/151a3270-b1be-ed75-bd58-6b29d741f592@linux.intel.com
Diffstat (limited to 'drivers/gpu/drm/sun4i/sun4i_layer.c')
-rw-r--r--drivers/gpu/drm/sun4i/sun4i_layer.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/drivers/gpu/drm/sun4i/sun4i_layer.c b/drivers/gpu/drm/sun4i/sun4i_layer.c
index 78f77af8805a..29631e0efde3 100644
--- a/drivers/gpu/drm/sun4i/sun4i_layer.c
+++ b/drivers/gpu/drm/sun4i/sun4i_layer.c
@@ -12,6 +12,7 @@
12 12
13#include <drm/drm_atomic_helper.h> 13#include <drm/drm_atomic_helper.h>
14#include <drm/drm_plane_helper.h> 14#include <drm/drm_plane_helper.h>
15#include <drm/drm_gem_framebuffer_helper.h>
15#include <drm/drmP.h> 16#include <drm/drmP.h>
16 17
17#include "sun4i_backend.h" 18#include "sun4i_backend.h"
@@ -92,14 +93,16 @@ static void sun4i_backend_layer_atomic_update(struct drm_plane *plane,
92 struct sun4i_backend *backend = layer->backend; 93 struct sun4i_backend *backend = layer->backend;
93 struct sun4i_frontend *frontend = backend->frontend; 94 struct sun4i_frontend *frontend = backend->frontend;
94 95
96 sun4i_backend_cleanup_layer(backend, layer->id);
97
95 if (layer_state->uses_frontend) { 98 if (layer_state->uses_frontend) {
96 sun4i_frontend_init(frontend); 99 sun4i_frontend_init(frontend);
97 sun4i_frontend_update_coord(frontend, plane); 100 sun4i_frontend_update_coord(frontend, plane);
98 sun4i_frontend_update_buffer(frontend, plane); 101 sun4i_frontend_update_buffer(frontend, plane);
99 sun4i_frontend_update_formats(frontend, plane, 102 sun4i_frontend_update_formats(frontend, plane,
100 DRM_FORMAT_ARGB8888); 103 DRM_FORMAT_XRGB8888);
101 sun4i_backend_update_layer_frontend(backend, layer->id, 104 sun4i_backend_update_layer_frontend(backend, layer->id,
102 DRM_FORMAT_ARGB8888); 105 DRM_FORMAT_XRGB8888);
103 sun4i_frontend_enable(frontend); 106 sun4i_frontend_enable(frontend);
104 } else { 107 } else {
105 sun4i_backend_update_layer_formats(backend, layer->id, plane); 108 sun4i_backend_update_layer_formats(backend, layer->id, plane);
@@ -112,6 +115,7 @@ static void sun4i_backend_layer_atomic_update(struct drm_plane *plane,
112} 115}
113 116
114static const struct drm_plane_helper_funcs sun4i_backend_layer_helper_funcs = { 117static const struct drm_plane_helper_funcs sun4i_backend_layer_helper_funcs = {
118 .prepare_fb = drm_gem_fb_prepare_fb,
115 .atomic_disable = sun4i_backend_layer_atomic_disable, 119 .atomic_disable = sun4i_backend_layer_atomic_disable,
116 .atomic_update = sun4i_backend_layer_atomic_update, 120 .atomic_update = sun4i_backend_layer_atomic_update,
117}; 121};
@@ -125,10 +129,11 @@ static const struct drm_plane_funcs sun4i_backend_layer_funcs = {
125 .update_plane = drm_atomic_helper_update_plane, 129 .update_plane = drm_atomic_helper_update_plane,
126}; 130};
127 131
128static const uint32_t sun4i_backend_layer_formats[] = { 132static const uint32_t sun4i_layer_formats[] = {
129 DRM_FORMAT_ARGB8888, 133 DRM_FORMAT_ARGB8888,
130 DRM_FORMAT_ARGB4444, 134 DRM_FORMAT_ARGB4444,
131 DRM_FORMAT_ARGB1555, 135 DRM_FORMAT_ARGB1555,
136 DRM_FORMAT_BGRX8888,
132 DRM_FORMAT_RGBA5551, 137 DRM_FORMAT_RGBA5551,
133 DRM_FORMAT_RGBA4444, 138 DRM_FORMAT_RGBA4444,
134 DRM_FORMAT_RGB888, 139 DRM_FORMAT_RGB888,
@@ -154,8 +159,8 @@ static struct sun4i_layer *sun4i_layer_init_one(struct drm_device *drm,
154 /* possible crtcs are set later */ 159 /* possible crtcs are set later */
155 ret = drm_universal_plane_init(drm, &layer->plane, 0, 160 ret = drm_universal_plane_init(drm, &layer->plane, 0,
156 &sun4i_backend_layer_funcs, 161 &sun4i_backend_layer_funcs,
157 sun4i_backend_layer_formats, 162 sun4i_layer_formats,
158 ARRAY_SIZE(sun4i_backend_layer_formats), 163 ARRAY_SIZE(sun4i_layer_formats),
159 NULL, type, NULL); 164 NULL, type, NULL);
160 if (ret) { 165 if (ret) {
161 dev_err(drm->dev, "Couldn't initialize layer\n"); 166 dev_err(drm->dev, "Couldn't initialize layer\n");