Backmerge tag 'v4.7-rc2' into drm-next
authorDave Airlie <airlied@redhat.com>
Thu, 9 Jun 2016 01:01:49 +0000 (11:01 +1000)
committerDave Airlie <airlied@redhat.com>
Thu, 9 Jun 2016 01:01:49 +0000 (11:01 +1000)
Daniel has a pull request that relies on stuff in fixes that are in rc2.

1  2 
MAINTAINERS
drivers/gpu/drm/arm/hdlcd_drv.c
drivers/gpu/drm/drm_crtc.c

diff --combined MAINTAINERS
@@@ -3854,9 -3854,6 +3854,9 @@@ T:      git git://people.freedesktop.org/~ai
  S:    Maintained
  F:    drivers/gpu/drm/
  F:    drivers/gpu/vga/
 +F:    Documentation/devicetree/bindings/display/
 +F:    Documentation/devicetree/bindings/gpu/
 +F:    Documentation/devicetree/bindings/video/
  F:    Documentation/DocBook/gpu.*
  F:    include/drm/
  F:    include/uapi/drm/
@@@ -7992,6 -7989,7 +7992,7 @@@ Q:      http://patchwork.ozlabs.org/project/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/davem/net.git
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git
  S:    Odd Fixes
+ F:    Documentation/devicetree/bindings/net/
  F:    drivers/net/
  F:    include/linux/if_*
  F:    include/linux/netdevice.h
@@@ -8947,6 -8945,7 +8948,7 @@@ M:      Linus Walleij <linus.walleij@linaro.
  L:    linux-gpio@vger.kernel.org
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-pinctrl.git
  S:    Maintained
+ F:    Documentation/devicetree/bindings/pinctrl/
  F:    drivers/pinctrl/
  F:    include/linux/pinctrl/
  
@@@ -49,8 -49,6 +49,6 @@@ static int hdlcd_load(struct drm_devic
        atomic_set(&hdlcd->dma_end_count, 0);
  #endif
  
-       INIT_LIST_HEAD(&hdlcd->event_list);
        res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
        hdlcd->mmio = devm_ioremap_resource(drm->dev, res);
        if (IS_ERR(hdlcd->mmio)) {
                goto setup_fail;
        }
  
-       pm_runtime_enable(drm->dev);
-       pm_runtime_get_sync(drm->dev);
        ret = drm_irq_install(drm, platform_get_irq(pdev, 0));
-       pm_runtime_put_sync(drm->dev);
        if (ret < 0) {
                DRM_ERROR("failed to install IRQ handler\n");
                goto irq_fail;
@@@ -164,24 -158,9 +158,9 @@@ static irqreturn_t hdlcd_irq(int irq, v
                atomic_inc(&hdlcd->vsync_count);
  
  #endif
-       if (irq_status & HDLCD_INTERRUPT_VSYNC) {
-               bool events_sent = false;
-               unsigned long flags;
-               struct drm_pending_vblank_event *e, *t;
+       if (irq_status & HDLCD_INTERRUPT_VSYNC)
                drm_crtc_handle_vblank(&hdlcd->crtc);
  
-               spin_lock_irqsave(&drm->event_lock, flags);
-               list_for_each_entry_safe(e, t, &hdlcd->event_list, base.link) {
-                       list_del(&e->base.link);
-                       drm_crtc_send_vblank_event(&hdlcd->crtc, e);
-                       events_sent = true;
-               }
-               if (events_sent)
-                       drm_crtc_vblank_put(&hdlcd->crtc);
-               spin_unlock_irqrestore(&drm->event_lock, flags);
-       }
        /* acknowledge interrupt(s) */
        hdlcd_write(hdlcd, HDLCD_REG_INT_CLEAR, irq_status);
  
@@@ -275,6 -254,7 +254,7 @@@ static int hdlcd_show_pxlclock(struct s
  static struct drm_info_list hdlcd_debugfs_list[] = {
        { "interrupt_count", hdlcd_show_underrun_count, 0 },
        { "clocks", hdlcd_show_pxlclock, 0 },
+       { "fb", drm_fb_cma_debugfs_show, 0 },
  };
  
  static int hdlcd_debugfs_init(struct drm_minor *minor)
@@@ -316,7 -296,7 +296,7 @@@ static struct drm_driver hdlcd_driver 
        .get_vblank_counter = drm_vblank_no_hw_counter,
        .enable_vblank = hdlcd_enable_vblank,
        .disable_vblank = hdlcd_disable_vblank,
 -      .gem_free_object = drm_gem_cma_free_object,
 +      .gem_free_object_unlocked = drm_gem_cma_free_object,
        .gem_vm_ops = &drm_gem_cma_vm_ops,
        .dumb_create = drm_gem_cma_dumb_create,
        .dumb_map_offset = drm_gem_cma_dumb_map_offset,
@@@ -357,6 -337,8 +337,8 @@@ static int hdlcd_drm_bind(struct devic
                return -ENOMEM;
  
        drm->dev_private = hdlcd;
+       dev_set_drvdata(dev, drm);
        hdlcd_setup_mode_config(drm);
        ret = hdlcd_load(drm, 0);
        if (ret)
        if (ret)
                goto err_unload;
  
-       dev_set_drvdata(dev, drm);
        ret = component_bind_all(dev, drm);
        if (ret) {
                DRM_ERROR("Failed to bind all components\n");
                goto err_unregister;
        }
  
+       ret = pm_runtime_set_active(dev);
+       if (ret)
+               goto err_pm_active;
+       pm_runtime_enable(dev);
        ret = drm_vblank_init(drm, drm->mode_config.num_crtc);
        if (ret < 0) {
                DRM_ERROR("failed to initialise vblank\n");
@@@ -399,16 -385,16 +385,16 @@@ err_fbdev
        drm_mode_config_cleanup(drm);
        drm_vblank_cleanup(drm);
  err_vblank:
+       pm_runtime_disable(drm->dev);
+ err_pm_active:
        component_unbind_all(dev, drm);
  err_unregister:
        drm_dev_unregister(drm);
  err_unload:
-       pm_runtime_get_sync(drm->dev);
        drm_irq_uninstall(drm);
-       pm_runtime_put_sync(drm->dev);
-       pm_runtime_disable(drm->dev);
        of_reserved_mem_device_release(drm->dev);
  err_free:
+       dev_set_drvdata(dev, NULL);
        drm_dev_unref(drm);
  
        return ret;
@@@ -495,30 -481,34 +481,34 @@@ MODULE_DEVICE_TABLE(of, hdlcd_of_match)
  static int __maybe_unused hdlcd_pm_suspend(struct device *dev)
  {
        struct drm_device *drm = dev_get_drvdata(dev);
-       struct drm_crtc *crtc;
+       struct hdlcd_drm_private *hdlcd = drm ? drm->dev_private : NULL;
  
-       if (pm_runtime_suspended(dev))
+       if (!hdlcd)
                return 0;
  
-       drm_modeset_lock_all(drm);
-       list_for_each_entry(crtc, &drm->mode_config.crtc_list, head)
-               hdlcd_crtc_suspend(crtc);
-       drm_modeset_unlock_all(drm);
+       drm_kms_helper_poll_disable(drm);
+       hdlcd->state = drm_atomic_helper_suspend(drm);
+       if (IS_ERR(hdlcd->state)) {
+               drm_kms_helper_poll_enable(drm);
+               return PTR_ERR(hdlcd->state);
+       }
        return 0;
  }
  
  static int __maybe_unused hdlcd_pm_resume(struct device *dev)
  {
        struct drm_device *drm = dev_get_drvdata(dev);
-       struct drm_crtc *crtc;
+       struct hdlcd_drm_private *hdlcd = drm ? drm->dev_private : NULL;
  
-       if (!pm_runtime_suspended(dev))
+       if (!hdlcd)
                return 0;
  
-       drm_modeset_lock_all(drm);
-       list_for_each_entry(crtc, &drm->mode_config.crtc_list, head)
-               hdlcd_crtc_resume(crtc);
-       drm_modeset_unlock_all(drm);
+       drm_atomic_helper_resume(drm, hdlcd->state);
+       drm_kms_helper_poll_enable(drm);
+       pm_runtime_set_active(dev);
        return 0;
  }
  
@@@ -2821,8 -2821,6 +2821,6 @@@ int drm_mode_setcrtc(struct drm_device 
                        goto out;
                }
  
-               drm_mode_set_crtcinfo(mode, CRTC_INTERLACE_HALVE_V);
                /*
                 * Check whether the primary plane supports the fb pixel format.
                 * Drivers not implementing the universal planes API use a
@@@ -4841,7 -4839,8 +4839,8 @@@ bool drm_property_change_valid_get(stru
                if (value == 0)
                        return true;
  
-               return _object_find(property->dev, value, property->values[0]) != NULL;
+               *ref = _object_find(property->dev, value, property->values[0]);
+               return *ref != NULL;
        }
  
        for (i = 0; i < property->num_values; i++)
@@@ -5139,9 -5138,6 +5138,9 @@@ EXPORT_SYMBOL(drm_mode_connector_attach
  int drm_mode_crtc_set_gamma_size(struct drm_crtc *crtc,
                                 int gamma_size)
  {
 +      uint16_t *r_base, *g_base, *b_base;
 +      int i;
 +
        crtc->gamma_size = gamma_size;
  
        crtc->gamma_store = kcalloc(gamma_size, sizeof(uint16_t) * 3,
                return -ENOMEM;
        }
  
 +      r_base = crtc->gamma_store;
 +      g_base = r_base + gamma_size;
 +      b_base = g_base + gamma_size;
 +      for (i = 0; i < gamma_size; i++) {
 +              r_base[i] = i << 8;
 +              g_base[i] = i << 8;
 +              b_base[i] = i << 8;
 +      }
 +
 +
        return 0;
  }
  EXPORT_SYMBOL(drm_mode_crtc_set_gamma_size);