Merge remote-tracking branch 'drm-intel/for-linux-next'
authorStephen Rothwell <sfr@canb.auug.org.au>
Thu, 5 Nov 2015 01:10:17 +0000 (12:10 +1100)
committerStephen Rothwell <sfr@canb.auug.org.au>
Thu, 5 Nov 2015 01:10:17 +0000 (12:10 +1100)
1  2 
drivers/gpu/drm/i915/i915_irq.c
drivers/gpu/drm/i915/intel_display.c

@@@ -653,7 -653,7 +653,7 @@@ static void i915_enable_asle_pipestat(s
   *   of horizontal active on the first line of vertical active
   */
  
 -static u32 i8xx_get_vblank_counter(struct drm_device *dev, int pipe)
 +static u32 i8xx_get_vblank_counter(struct drm_device *dev, unsigned int pipe)
  {
        /* Gen2 doesn't have a hardware frame counter */
        return 0;
  /* Called from drm generic code, passed a 'crtc', which
   * we use as a pipe index
   */
 -static u32 i915_get_vblank_counter(struct drm_device *dev, int pipe)
 +static u32 i915_get_vblank_counter(struct drm_device *dev, unsigned int pipe)
  {
        struct drm_i915_private *dev_priv = dev->dev_private;
        unsigned long high_frame;
        return (((high1 << 8) | low) + (pixel >= vbl_start)) & 0xffffff;
  }
  
 -static u32 g4x_get_vblank_counter(struct drm_device *dev, int pipe)
 +static u32 g4x_get_vblank_counter(struct drm_device *dev, unsigned int pipe)
  {
        struct drm_i915_private *dev_priv = dev->dev_private;
  
@@@ -770,7 -770,7 +770,7 @@@ static int __intel_get_crtc_scanline(st
        return (position + crtc->scanline_offset) % vtotal;
  }
  
 -static int i915_get_crtc_scanoutpos(struct drm_device *dev, int pipe,
 +static int i915_get_crtc_scanoutpos(struct drm_device *dev, unsigned int pipe,
                                    unsigned int flags, int *vpos, int *hpos,
                                    ktime_t *stime, ktime_t *etime,
                                    const struct drm_display_mode *mode)
@@@ -907,27 -907,27 +907,27 @@@ int intel_get_crtc_scanline(struct inte
        return position;
  }
  
 -static int i915_get_vblank_timestamp(struct drm_device *dev, int pipe,
 +static int i915_get_vblank_timestamp(struct drm_device *dev, unsigned int pipe,
                              int *max_error,
                              struct timeval *vblank_time,
                              unsigned flags)
  {
        struct drm_crtc *crtc;
  
 -      if (pipe < 0 || pipe >= INTEL_INFO(dev)->num_pipes) {
 -              DRM_ERROR("Invalid crtc %d\n", pipe);
 +      if (pipe >= INTEL_INFO(dev)->num_pipes) {
 +              DRM_ERROR("Invalid crtc %u\n", pipe);
                return -EINVAL;
        }
  
        /* Get drm_crtc to timestamp: */
        crtc = intel_get_crtc_for_pipe(dev, pipe);
        if (crtc == NULL) {
 -              DRM_ERROR("Invalid crtc %d\n", pipe);
 +              DRM_ERROR("Invalid crtc %u\n", pipe);
                return -EINVAL;
        }
  
        if (!crtc->hwmode.crtc_clock) {
 -              DRM_DEBUG_KMS("crtc %d is disabled\n", pipe);
 +              DRM_DEBUG_KMS("crtc %u is disabled\n", pipe);
                return -EBUSY;
        }
  
@@@ -2619,7 -2619,7 +2619,7 @@@ void i915_handle_error(struct drm_devic
  /* Called from drm generic code, passed 'crtc' which
   * we use as a pipe index
   */
 -static int i915_enable_vblank(struct drm_device *dev, int pipe)
 +static int i915_enable_vblank(struct drm_device *dev, unsigned int pipe)
  {
        struct drm_i915_private *dev_priv = dev->dev_private;
        unsigned long irqflags;
        return 0;
  }
  
 -static int ironlake_enable_vblank(struct drm_device *dev, int pipe)
 +static int ironlake_enable_vblank(struct drm_device *dev, unsigned int pipe)
  {
        struct drm_i915_private *dev_priv = dev->dev_private;
        unsigned long irqflags;
        return 0;
  }
  
 -static int valleyview_enable_vblank(struct drm_device *dev, int pipe)
 +static int valleyview_enable_vblank(struct drm_device *dev, unsigned int pipe)
  {
        struct drm_i915_private *dev_priv = dev->dev_private;
        unsigned long irqflags;
        return 0;
  }
  
 -static int gen8_enable_vblank(struct drm_device *dev, int pipe)
 +static int gen8_enable_vblank(struct drm_device *dev, unsigned int pipe)
  {
        struct drm_i915_private *dev_priv = dev->dev_private;
        unsigned long irqflags;
  /* Called from drm generic code, passed 'crtc' which
   * we use as a pipe index
   */
 -static void i915_disable_vblank(struct drm_device *dev, int pipe)
 +static void i915_disable_vblank(struct drm_device *dev, unsigned int pipe)
  {
        struct drm_i915_private *dev_priv = dev->dev_private;
        unsigned long irqflags;
        spin_unlock_irqrestore(&dev_priv->irq_lock, irqflags);
  }
  
 -static void ironlake_disable_vblank(struct drm_device *dev, int pipe)
 +static void ironlake_disable_vblank(struct drm_device *dev, unsigned int pipe)
  {
        struct drm_i915_private *dev_priv = dev->dev_private;
        unsigned long irqflags;
        spin_unlock_irqrestore(&dev_priv->irq_lock, irqflags);
  }
  
 -static void valleyview_disable_vblank(struct drm_device *dev, int pipe)
 +static void valleyview_disable_vblank(struct drm_device *dev, unsigned int pipe)
  {
        struct drm_i915_private *dev_priv = dev->dev_private;
        unsigned long irqflags;
        spin_unlock_irqrestore(&dev_priv->irq_lock, irqflags);
  }
  
 -static void gen8_disable_vblank(struct drm_device *dev, int pipe)
 +static void gen8_disable_vblank(struct drm_device *dev, unsigned int pipe)
  {
        struct drm_i915_private *dev_priv = dev->dev_private;
        unsigned long irqflags;
@@@ -4236,9 -4236,10 +4236,10 @@@ static void i915_hpd_irq_setup(struct d
  
        /* Ignore TV since it's buggy */
        i915_hotplug_interrupt_update_locked(dev_priv,
-                                     (HOTPLUG_INT_EN_MASK
-                                      | CRT_HOTPLUG_VOLTAGE_COMPARE_MASK),
-                                     hotplug_en);
+                                            HOTPLUG_INT_EN_MASK |
+                                            CRT_HOTPLUG_VOLTAGE_COMPARE_MASK |
+                                            CRT_HOTPLUG_ACTIVATION_PERIOD_64,
+                                            hotplug_en);
  }
  
  static irqreturn_t i965_irq_handler(int irq, void *arg)
@@@ -1713,15 -1713,6 +1713,15 @@@ static void i9xx_enable_pll(struct inte
                           I915_READ(DPLL(!crtc->pipe)) | DPLL_DVO_2X_MODE);
        }
  
 +      /*
 +       * Apparently we need to have VGA mode enabled prior to changing
 +       * the P1/P2 dividers. Otherwise the DPLL will keep using the old
 +       * dividers, even though the register value does change.
 +       */
 +      I915_WRITE(reg, 0);
 +
 +      I915_WRITE(reg, dpll);
 +
        /* Wait for the clocks to stabilize. */
        POSTING_READ(reg);
        udelay(150);
@@@ -14149,11 -14140,6 +14149,11 @@@ static int intel_user_framebuffer_creat
        struct intel_framebuffer *intel_fb = to_intel_framebuffer(fb);
        struct drm_i915_gem_object *obj = intel_fb->obj;
  
 +      if (obj->userptr.mm) {
 +              DRM_DEBUG("attempting to use a userptr for a framebuffer, denied\n");
 +              return -EINVAL;
 +      }
 +
        return drm_gem_handle_create(file, &obj->base, handle);
  }
  
@@@ -14709,6 -14695,9 +14709,9 @@@ static struct intel_quirk intel_quirks[
  
        /* Dell Chromebook 11 */
        { 0x0a06, 0x1028, 0x0a35, quirk_backlight_present },
+       /* Dell Chromebook 11 (2015 version) */
+       { 0x0a16, 0x1028, 0x0a35, quirk_backlight_present },
  };
  
  static void intel_init_quirks(struct drm_device *dev)