OSDN Git Service

Merge tag 'mediatek-drm-next-5.6' of https://github.com/ckhu-mediatek/linux.git-tags...
authorDave Airlie <airlied@redhat.com>
Wed, 15 Jan 2020 06:35:56 +0000 (16:35 +1000)
committerDave Airlie <airlied@redhat.com>
Wed, 15 Jan 2020 06:40:19 +0000 (16:40 +1000)
Mediatek DRM Next for Linux 5.6

This fix non-smooth cursor problem, add cmdq support, add ctm property
support and some refinement.

Signed-off-by: Dave Airlie <airlied@redhat.com>
From: CK Hu <ck.hu@mediatek.com>
Link: https://patchwork.freedesktop.org/patch/msgid/1578972526.14594.8.camel@mtksdaap41
1  2 
drivers/gpu/drm/mediatek/Makefile
drivers/gpu/drm/mediatek/mtk_drm_drv.c
drivers/gpu/drm/mediatek/mtk_drm_plane.c

Simple merge
  #define DRIVER_MAJOR 1
  #define DRIVER_MINOR 0
  
- static void mtk_atomic_schedule(struct mtk_drm_private *private,
-                               struct drm_atomic_state *state)
- {
-       private->commit.state = state;
-       schedule_work(&private->commit.work);
- }
- static void mtk_atomic_complete(struct mtk_drm_private *private,
-                               struct drm_atomic_state *state)
- {
-       struct drm_device *drm = private->drm;
-       drm_atomic_helper_wait_for_fences(drm, state, false);
-       /*
-        * Mediatek drm supports runtime PM, so plane registers cannot be
-        * written when their crtc is disabled.
-        *
-        * The comment for drm_atomic_helper_commit states:
-        *     For drivers supporting runtime PM the recommended sequence is
-        *
-        *     drm_atomic_helper_commit_modeset_disables(dev, state);
-        *     drm_atomic_helper_commit_modeset_enables(dev, state);
-        *     drm_atomic_helper_commit_planes(dev, state,
-        *                                     DRM_PLANE_COMMIT_ACTIVE_ONLY);
-        *
-        * See the kerneldoc entries for these three functions for more details.
-        */
-       drm_atomic_helper_commit_modeset_disables(drm, state);
-       drm_atomic_helper_commit_modeset_enables(drm, state);
-       drm_atomic_helper_commit_planes(drm, state,
-                                       DRM_PLANE_COMMIT_ACTIVE_ONLY);
-       drm_atomic_helper_wait_for_vblanks(drm, state);
-       drm_atomic_helper_cleanup_planes(drm, state);
-       drm_atomic_state_put(state);
- }
- static void mtk_atomic_work(struct work_struct *work)
- {
-       struct mtk_drm_private *private = container_of(work,
-                       struct mtk_drm_private, commit.work);
-       mtk_atomic_complete(private, private->commit.state);
- }
- static int mtk_atomic_commit(struct drm_device *drm,
-                            struct drm_atomic_state *state,
-                            bool async)
- {
-       struct mtk_drm_private *private = drm->dev_private;
-       int ret;
-       ret = drm_atomic_helper_prepare_planes(drm, state);
-       if (ret)
-               return ret;
-       mutex_lock(&private->commit.lock);
-       flush_work(&private->commit.work);
-       ret = drm_atomic_helper_swap_state(state, true);
-       if (ret) {
-               mutex_unlock(&private->commit.lock);
-               drm_atomic_helper_cleanup_planes(drm, state);
-               return ret;
-       }
-       drm_atomic_state_get(state);
-       if (async)
-               mtk_atomic_schedule(private, state);
-       else
-               mtk_atomic_complete(private, state);
-       mutex_unlock(&private->commit.lock);
-       return 0;
- }
+ static const struct drm_mode_config_helper_funcs mtk_drm_mode_config_helpers = {
+       .atomic_commit_tail = drm_atomic_helper_commit_tail_rpm,
+ };
  
 +static struct drm_framebuffer *
 +mtk_drm_mode_fb_create(struct drm_device *dev,
 +                     struct drm_file *file,
 +                     const struct drm_mode_fb_cmd2 *cmd)
 +{
 +      const struct drm_format_info *info = drm_get_format_info(dev, cmd);
 +
 +      if (info->num_planes != 1)
 +              return ERR_PTR(-EINVAL);
 +
 +      return drm_gem_fb_create(dev, file, cmd);
 +}
 +
  static const struct drm_mode_config_funcs mtk_drm_mode_config_funcs = {
        .fb_create = mtk_drm_mode_fb_create,
        .atomic_check = drm_atomic_helper_check,