config DRM_SIL_SII8620
        tristate "Silicon Image SII8620 HDMI/MHL bridge"
 -      depends on OF && RC_CORE
 +      depends on OF
        select DRM_KMS_HELPER
+       imply EXTCON
 +      select INPUT
 +      select RC_CORE
        help
          Silicon Image SII8620 HDMI/MHL bridge chip driver.
  
 
                }
        }
  
-       if (config->funcs->atomic_check)
 +      for_each_new_connector_in_state(state, conn, conn_state, i) {
 +              ret = drm_atomic_connector_check(conn, conn_state);
 +              if (ret) {
 +                      DRM_DEBUG_ATOMIC("[CONNECTOR:%d:%s] atomic core check failed\n",
 +                                       conn->base.id, conn->name);
 +                      return ret;
 +              }
 +      }
 +
+       if (config->funcs->atomic_check) {
                ret = config->funcs->atomic_check(state->dev, state);
  
-       if (ret)
-               return ret;
+               if (ret) {
+                       DRM_DEBUG_ATOMIC("atomic driver check for %p failed: %d\n",
+                                        state, ret);
+                       return ret;
+               }
+       }
  
        if (!state->allow_modeset) {
                for_each_new_crtc_in_state(state, crtc, crtc_state, i) {
 
        primary->check_plane = intel_check_primary_plane;
  
        if (INTEL_GEN(dev_priv) >= 9) {
-               intel_primary_formats = skl_primary_formats;
-               num_formats = ARRAY_SIZE(skl_primary_formats);
 +              primary->has_ccs = skl_plane_has_ccs(dev_priv, pipe,
 +                                                   PLANE_PRIMARY);
 +
+               if (skl_plane_has_planar(dev_priv, pipe, PLANE_PRIMARY)) {
+                       intel_primary_formats = skl_pri_planar_formats;
+                       num_formats = ARRAY_SIZE(skl_pri_planar_formats);
+               } else {
+                       intel_primary_formats = skl_primary_formats;
+                       num_formats = ARRAY_SIZE(skl_primary_formats);
+               }
  
 -              if (skl_plane_has_ccs(dev_priv, pipe, PLANE_PRIMARY))
 +              if (primary->has_ccs)
                        modifiers = skl_format_modifiers_ccs;
                else
                        modifiers = skl_format_modifiers_noccs;
 
                intel_plane->disable_plane = skl_disable_plane;
                intel_plane->get_hw_state = skl_plane_get_hw_state;
  
-               plane_formats = skl_plane_formats;
-               num_plane_formats = ARRAY_SIZE(skl_plane_formats);
+               if (skl_plane_has_planar(dev_priv, pipe,
+                                        PLANE_SPRITE0 + plane)) {
+                       plane_formats = skl_planar_formats;
+                       num_plane_formats = ARRAY_SIZE(skl_planar_formats);
+               } else {
+                       plane_formats = skl_plane_formats;
+                       num_plane_formats = ARRAY_SIZE(skl_plane_formats);
+               }
  
 -              if (skl_plane_has_ccs(dev_priv, pipe, PLANE_SPRITE0 + plane))
 +              if (intel_plane->has_ccs)
                        modifiers = skl_plane_format_modifiers_ccs;
                else
                        modifiers = skl_plane_format_modifiers_noccs;
 
  static int vmwgfx_set_config_internal(struct drm_mode_set *set)
  {
        struct drm_crtc *crtc = set->crtc;
-       struct drm_modeset_acquire_ctx *ctx;
 -      struct drm_framebuffer *fb;
 -      struct drm_crtc *tmp;
--      struct drm_device *dev = set->crtc->dev;
+       struct drm_modeset_acquire_ctx ctx;
        int ret;
  
-       ctx = dev->mode_config.acquire_ctx;
+       drm_modeset_acquire_init(&ctx, 0);
  
  restart:
-       ret = crtc->funcs->set_config(set, ctx);
 -      /*
 -       * NOTE: ->set_config can also disable other crtcs (if we steal all
 -       * connectors from it), hence we need to refcount the fbs across all
 -       * crtcs. Atomic modeset will have saner semantics ...
 -       */
 -      drm_for_each_crtc(tmp, dev)
 -              tmp->primary->old_fb = tmp->primary->fb;
 -
 -      fb = set->fb;
 -
+       ret = crtc->funcs->set_config(set, &ctx);
 -      if (ret == 0) {
 -              crtc->primary->crtc = crtc;
 -              crtc->primary->fb = fb;
 -      }
 -
 -      drm_for_each_crtc(tmp, dev) {
 -              if (tmp->primary->fb)
 -                      drm_framebuffer_get(tmp->primary->fb);
 -              if (tmp->primary->old_fb)
 -                      drm_framebuffer_put(tmp->primary->old_fb);
 -              tmp->primary->old_fb = NULL;
 -      }
  
        if (ret == -EDEADLK) {
-               dev->mode_config.acquire_ctx = NULL;
- 
- retry_locking:
-               drm_modeset_backoff(ctx);
- 
-               ret = drm_modeset_lock_all_ctx(dev, ctx);
-               if (ret)
-                       goto retry_locking;
- 
-               dev->mode_config.acquire_ctx = ctx;
- 
+               drm_modeset_backoff(&ctx);
                goto restart;
        }