#include <linux/mutex.h>
 
 #include <drm/drmP.h>
+#include <drm/drm_atomic.h>
+#include <drm/drm_atomic_helper.h>
 #include <drm/drm_crtc.h>
 #include <drm/drm_crtc_helper.h>
 #include <drm/drm_fb_cma_helper.h>
        }
        spin_unlock_irqrestore(&dev->event_lock, flags);
 
+       drm_atomic_set_fb_for_plane(crtc->primary->state, fb);
+
        crtc->primary->fb = fb;
        rcar_du_crtc_update_base(rcrtc);
 
 }
 
 static const struct drm_crtc_funcs crtc_funcs = {
+       .reset = drm_atomic_helper_crtc_reset,
        .destroy = drm_crtc_cleanup,
        .set_config = drm_crtc_helper_set_config,
        .page_flip = rcar_du_crtc_page_flip,
+       .atomic_duplicate_state = drm_atomic_helper_crtc_duplicate_state,
+       .atomic_destroy_state = drm_atomic_helper_crtc_destroy_state,
 };
 
 /* -----------------------------------------------------------------------------
 
  */
 
 #include <drm/drmP.h>
+#include <drm/drm_atomic_helper.h>
 #include <drm/drm_crtc.h>
 #include <drm/drm_crtc_helper.h>
 #include <drm/drm_encoder_slave.h>
 
 static const struct drm_connector_funcs connector_funcs = {
        .dpms = drm_helper_connector_dpms,
+       .reset = drm_atomic_helper_connector_reset,
        .detect = rcar_du_hdmi_connector_detect,
        .fill_modes = drm_helper_probe_single_connector_modes,
        .destroy = rcar_du_hdmi_connector_destroy,
+       .atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state,
+       .atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
 };
 
 int rcar_du_hdmi_connector_init(struct rcar_du_device *rcdu,
 
                encoder->possible_clones = (1 << num_encoders) - 1;
        }
 
+       drm_mode_config_reset(dev);
+
        drm_kms_helper_poll_init(dev);
 
        if (dev->mode_config.num_connector) {
 
  */
 
 #include <drm/drmP.h>
+#include <drm/drm_atomic_helper.h>
 #include <drm/drm_crtc.h>
 #include <drm/drm_crtc_helper.h>
 
 
 static const struct drm_connector_funcs connector_funcs = {
        .dpms = drm_helper_connector_dpms,
+       .reset = drm_atomic_helper_connector_reset,
        .detect = rcar_du_lvds_connector_detect,
        .fill_modes = drm_helper_probe_single_connector_modes,
        .destroy = rcar_du_lvds_connector_destroy,
+       .atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state,
+       .atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
 };
 
 int rcar_du_lvds_connector_init(struct rcar_du_device *rcdu,
 
  */
 
 #include <drm/drmP.h>
+#include <drm/drm_atomic_helper.h>
 #include <drm/drm_crtc.h>
 #include <drm/drm_crtc_helper.h>
 #include <drm/drm_fb_cma_helper.h>
 static const struct drm_plane_funcs rcar_du_plane_funcs = {
        .update_plane = drm_plane_helper_update,
        .disable_plane = drm_plane_helper_disable,
+       .reset = drm_atomic_helper_plane_reset,
        .set_property = rcar_du_plane_set_property,
        .destroy = drm_plane_cleanup,
+       .atomic_duplicate_state = drm_atomic_helper_plane_duplicate_state,
+       .atomic_destroy_state = drm_atomic_helper_plane_destroy_state,
 };
 
 static const uint32_t formats[] = {
 
  */
 
 #include <drm/drmP.h>
+#include <drm/drm_atomic_helper.h>
 #include <drm/drm_crtc.h>
 #include <drm/drm_crtc_helper.h>
 
 
 static const struct drm_connector_funcs connector_funcs = {
        .dpms = drm_helper_connector_dpms,
+       .reset = drm_atomic_helper_connector_reset,
        .detect = rcar_du_vga_connector_detect,
        .fill_modes = drm_helper_probe_single_connector_modes,
        .destroy = rcar_du_vga_connector_destroy,
+       .atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state,
+       .atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
 };
 
 int rcar_du_vga_connector_init(struct rcar_du_device *rcdu,