drm/sun4i: Pass modifier to backend and frontend format support helpers
authorPaul Kocialkowski <paul.kocialkowski@bootlin.com>
Fri, 23 Nov 2018 09:25:04 +0000 (10:25 +0100)
committerMaxime Ripard <maxime.ripard@bootlin.com>
Tue, 27 Nov 2018 09:12:56 +0000 (10:12 +0100)
To prepare the introduction of tiled mode support, pass the framebuffer
format modifier to the helpers dealing with format support.

Since only linear mode is supported for now, add corresponding checks in
each helper.

Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com>
Signed-off-by: Maxime Ripard <maxime.ripard@bootlin.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20181123092515.2511-33-paul.kocialkowski@bootlin.com
drivers/gpu/drm/sun4i/sun4i_backend.c
drivers/gpu/drm/sun4i/sun4i_backend.h
drivers/gpu/drm/sun4i/sun4i_frontend.c
drivers/gpu/drm/sun4i/sun4i_frontend.h

index f43c4b0f1e5d07932f39104af5906ee9cda08e32..9e9255ee59cd83138f5572f0d31df50aec9cc244 100644 (file)
@@ -175,10 +175,13 @@ static const uint32_t sun4i_backend_formats[] = {
        DRM_FORMAT_YVYU,
 };
 
-bool sun4i_backend_format_is_supported(uint32_t fmt)
+bool sun4i_backend_format_is_supported(uint32_t fmt, uint64_t modifier)
 {
        unsigned int i;
 
+       if (modifier != DRM_FORMAT_MOD_LINEAR)
+               return false;
+
        for (i = 0; i < ARRAY_SIZE(sun4i_backend_formats); i++)
                if (sun4i_backend_formats[i] == fmt)
                        return true;
@@ -454,14 +457,15 @@ static bool sun4i_backend_plane_uses_frontend(struct drm_plane_state *state)
        struct sun4i_layer *layer = plane_to_sun4i_layer(state->plane);
        struct sun4i_backend *backend = layer->backend;
        uint32_t format = state->fb->format->format;
+       uint64_t modifier = state->fb->modifier;
 
        if (IS_ERR(backend->frontend))
                return false;
 
-       if (!sun4i_frontend_format_is_supported(format))
+       if (!sun4i_frontend_format_is_supported(format, modifier))
                return false;
 
-       if (!sun4i_backend_format_is_supported(format))
+       if (!sun4i_backend_format_is_supported(format, modifier))
                return true;
 
        /*
index 93db3af675b34e669bcd872ed43cefa11789a821..01f66463271b211fe7d3bc7a1d2dcd3ad8e95aae 100644 (file)
@@ -198,7 +198,7 @@ engine_to_sun4i_backend(struct sunxi_engine *engine)
 
 void sun4i_backend_layer_enable(struct sun4i_backend *backend,
                                int layer, bool enable);
-bool sun4i_backend_format_is_supported(uint32_t fmt);
+bool sun4i_backend_format_is_supported(uint32_t fmt, uint64_t modifier);
 int sun4i_backend_update_layer_coord(struct sun4i_backend *backend,
                                     int layer, struct drm_plane *plane);
 int sun4i_backend_update_layer_formats(struct sun4i_backend *backend,
index 5d765764bff9271bdcbeb9c568a3851b1584d866..1a7ebc45747ec9d9c498adb6a793625661eff945 100644 (file)
@@ -163,10 +163,13 @@ static const uint32_t sun4i_frontend_formats[] = {
        DRM_FORMAT_XRGB8888,
 };
 
-bool sun4i_frontend_format_is_supported(uint32_t fmt)
+bool sun4i_frontend_format_is_supported(uint32_t fmt, uint64_t modifier)
 {
        unsigned int i;
 
+       if (modifier != DRM_FORMAT_MOD_LINEAR)
+               return false;
+
        for (i = 0; i < ARRAY_SIZE(sun4i_frontend_formats); i++)
                if (sun4i_frontend_formats[i] == fmt)
                        return true;
index 800a193eebc255495e28ff9e91e2cc46c47362c3..ad146e8d8d70d1d05e82420cd45bb0f7e4257bef 100644 (file)
@@ -97,6 +97,6 @@ void sun4i_frontend_update_coord(struct sun4i_frontend *frontend,
                                 struct drm_plane *plane);
 int sun4i_frontend_update_formats(struct sun4i_frontend *frontend,
                                  struct drm_plane *plane, uint32_t out_fmt);
-bool sun4i_frontend_format_is_supported(uint32_t fmt);
+bool sun4i_frontend_format_is_supported(uint32_t fmt, uint64_t modifier);
 
 #endif /* _SUN4I_FRONTEND_H_ */