pipe->funcs->cleanup_fb(pipe, state);
 }
 
+static bool drm_simple_kms_format_mod_supported(struct drm_plane *plane,
+                                               uint32_t format,
+                                               uint64_t modifier)
+{
+       return modifier == DRM_FORMAT_MOD_LINEAR;
+}
+
 static const struct drm_plane_helper_funcs drm_simple_kms_plane_helper_funcs = {
        .prepare_fb = drm_simple_kms_plane_prepare_fb,
        .cleanup_fb = drm_simple_kms_plane_cleanup_fb,
        .reset                  = drm_atomic_helper_plane_reset,
        .atomic_duplicate_state = drm_atomic_helper_plane_duplicate_state,
        .atomic_destroy_state   = drm_atomic_helper_plane_destroy_state,
+       .format_mod_supported   = drm_simple_kms_format_mod_supported,
 };
 
 /**
 
        drm->dev_private = tdev;
        drm_mode_config_init(drm);
        drm->mode_config.funcs = &tinydrm_mode_config_funcs;
+       drm->mode_config.allow_fb_modifiers = true;
 
        return 0;
 }
 
        struct drm_display_mode mode_copy;
        struct drm_connector *connector;
        int ret;
+       static const uint64_t modifiers[] = {
+               DRM_FORMAT_MOD_LINEAR,
+               DRM_FORMAT_MOD_INVALID
+       };
 
        drm_mode_copy(&mode_copy, mode);
        ret = tinydrm_rotate_mode(&mode_copy, rotation);
                return PTR_ERR(connector);
 
        return drm_simple_display_pipe_init(drm, &tdev->pipe, funcs, formats,
-                                           format_count, NULL, connector);
+                                           format_count, modifiers, connector);
 }
 EXPORT_SYMBOL(tinydrm_display_pipe_init);