]> Git Repo - linux.git/commitdiff
Merge branch 'drm-next' of git://people.freedesktop.org/~airlied/linux
authorLinus Torvalds <[email protected]>
Mon, 13 May 2013 14:59:59 +0000 (07:59 -0700)
committerLinus Torvalds <[email protected]>
Mon, 13 May 2013 14:59:59 +0000 (07:59 -0700)
Pull drm fixes from Dave Airlie:
 "Just a few straggling fixes I hoovered up, and an intel fixes pull
  from Daniel which fixes some regressions, and some mgag200 fixes from
  Matrox."

* 'drm-next' of git://people.freedesktop.org/~airlied/linux:
  drm/mgag200: Fix framebuffer base address programming
  drm/mgag200: Convert counter delays to jiffies
  drm/mgag200: Fix writes into MGA1064_PIX_CLK_CTL register
  drm/mgag200: Don't change unrelated registers during modeset
  drm: Only print a debug message when the polled connector has changed
  drm: Make the HPD status updates debug logs more readable
  drm: Use names of ioctls in debug traces
  drm: Remove pointless '-' characters from drm_fb_helper documentation
  drm: Add kernel-doc for drm_fb_helper_funcs->initial_config
  drm: refactor call to request_module
  drm: Don't prune modes loudly when a connector is disconnected
  drm: Add missing break in the command line mode parsing code
  drm/i915: clear the stolen fb before resuming
  Revert "drm/i915: Calculate correct stolen size for GEN7+"
  drm/i915: hsw: fix link training for eDP on port-A
  Revert "drm/i915: revert eDP bpp clamping code changes"
  drm: don't check modeset locks in panic handler
  drm/i915: Fix pipe enabled mask for pipe C in WM calculations
  drm/mm: fix dump table BUG
  drm/i915: Always normalize return timeout for wait_timeout_ioctl

1  2 
drivers/gpu/drm/drm_modes.c
drivers/gpu/drm/i915/intel_dp.c
drivers/gpu/drm/mgag200/mgag200_mode.c
include/drm/drmP.h

index faa79df0264802e985719da65be37ee369a87a69,7a83836879bc05d3aed39769cf710106a50d9341..a371ff865a887755b81de57663a819429a34ed4c
@@@ -506,7 -506,7 +506,7 @@@ drm_gtf_mode(struct drm_device *dev, in
  }
  EXPORT_SYMBOL(drm_gtf_mode);
  
 -#if IS_ENABLED(CONFIG_VIDEOMODE)
 +#ifdef CONFIG_VIDEOMODE_HELPERS
  int drm_display_mode_from_videomode(const struct videomode *vm,
                                    struct drm_display_mode *dmode)
  {
        dmode->clock = vm->pixelclock / 1000;
  
        dmode->flags = 0;
 -      if (vm->dmt_flags & VESA_DMT_HSYNC_HIGH)
 +      if (vm->flags & DISPLAY_FLAGS_HSYNC_HIGH)
                dmode->flags |= DRM_MODE_FLAG_PHSYNC;
 -      else if (vm->dmt_flags & VESA_DMT_HSYNC_LOW)
 +      else if (vm->flags & DISPLAY_FLAGS_HSYNC_LOW)
                dmode->flags |= DRM_MODE_FLAG_NHSYNC;
 -      if (vm->dmt_flags & VESA_DMT_VSYNC_HIGH)
 +      if (vm->flags & DISPLAY_FLAGS_VSYNC_HIGH)
                dmode->flags |= DRM_MODE_FLAG_PVSYNC;
 -      else if (vm->dmt_flags & VESA_DMT_VSYNC_LOW)
 +      else if (vm->flags & DISPLAY_FLAGS_VSYNC_LOW)
                dmode->flags |= DRM_MODE_FLAG_NVSYNC;
 -      if (vm->data_flags & DISPLAY_FLAGS_INTERLACED)
 +      if (vm->flags & DISPLAY_FLAGS_INTERLACED)
                dmode->flags |= DRM_MODE_FLAG_INTERLACE;
 -      if (vm->data_flags & DISPLAY_FLAGS_DOUBLESCAN)
 +      if (vm->flags & DISPLAY_FLAGS_DOUBLESCAN)
                dmode->flags |= DRM_MODE_FLAG_DBLSCAN;
        drm_mode_set_name(dmode);
  
        return 0;
  }
  EXPORT_SYMBOL_GPL(drm_display_mode_from_videomode);
 -#endif
  
 -#if IS_ENABLED(CONFIG_OF_VIDEOMODE)
 +#ifdef CONFIG_OF
  /**
   * of_get_drm_display_mode - get a drm_display_mode from devicetree
   * @np: device_node with the timing specification
@@@ -571,8 -572,7 +571,8 @@@ int of_get_drm_display_mode(struct devi
        return 0;
  }
  EXPORT_SYMBOL_GPL(of_get_drm_display_mode);
 -#endif
 +#endif /* CONFIG_OF */
 +#endif /* CONFIG_VIDEOMODE_HELPERS */
  
  /**
   * drm_mode_set_name - set the name on a mode
@@@ -1143,6 -1143,7 +1143,7 @@@ bool drm_mode_parse_command_line_for_co
                                was_digit = false;
                        } else
                                goto done;
+                       break;
                case '0' ... '9':
                        was_digit = true;
                        break;
index fb2fbc1e08b9ba0048b17c02badb8fd8ed29d089,b14bec93fb698106cf76c13e08620139a275a1d0..3d704b706a8d42d974e70f4fa3e095fbcbcdb910
@@@ -702,6 -702,9 +702,9 @@@ intel_dp_compute_config(struct intel_en
        /* Walk through all bpp values. Luckily they're all nicely spaced with 2
         * bpc in between. */
        bpp = min_t(int, 8*3, pipe_config->pipe_bpp);
+       if (is_edp(intel_dp) && dev_priv->edp.bpp)
+               bpp = min_t(int, bpp, dev_priv->edp.bpp);
        for (; bpp >= 6*3; bpp -= 2*3) {
                mode_rate = intel_dp_link_required(target_clock, bpp);
  
@@@ -739,6 -742,7 +742,7 @@@ found
        intel_dp->link_bw = bws[clock];
        intel_dp->lane_count = lane_count;
        adjusted_mode->clock = drm_dp_bw_code_to_link_rate(intel_dp->link_bw);
+       pipe_config->pipe_bpp = bpp;
        pipe_config->pixel_target_clock = target_clock;
  
        DRM_DEBUG_KMS("DP link bw %02x lane count %d clock %d bpp %d\n",
                               target_clock, adjusted_mode->clock,
                               &pipe_config->dp_m_n);
  
-       /*
-        * XXX: We have a strange regression where using the vbt edp bpp value
-        * for the link bw computation results in black screens, the panel only
-        * works when we do the computation at the usual 24bpp (but still
-        * requires us to use 18bpp). Until that's fully debugged, stay
-        * bug-for-bug compatible with the old code.
-        */
-       if (is_edp(intel_dp) && dev_priv->edp.bpp) {
-               DRM_DEBUG_KMS("clamping display bpc (was %d) to eDP (%d)\n",
-                             bpp, dev_priv->edp.bpp);
-               bpp = min_t(int, bpp, dev_priv->edp.bpp);
-       }
-       pipe_config->pipe_bpp = bpp;
        return true;
  }
  
@@@ -1389,6 -1379,7 +1379,7 @@@ static void intel_enable_dp(struct inte
        ironlake_edp_panel_on(intel_dp);
        ironlake_edp_panel_vdd_off(intel_dp, true);
        intel_dp_complete_link_train(intel_dp);
+       intel_dp_stop_link_train(intel_dp);
        ironlake_edp_backlight_on(intel_dp);
  }
  
@@@ -1711,10 -1702,9 +1702,9 @@@ intel_dp_set_link_train(struct intel_d
        struct drm_i915_private *dev_priv = dev->dev_private;
        enum port port = intel_dig_port->port;
        int ret;
-       uint32_t temp;
  
        if (HAS_DDI(dev)) {
-               temp = I915_READ(DP_TP_CTL(port));
+               uint32_t temp = I915_READ(DP_TP_CTL(port));
  
                if (dp_train_pat & DP_LINK_SCRAMBLING_DISABLE)
                        temp |= DP_TP_CTL_SCRAMBLE_DISABLE;
                temp &= ~DP_TP_CTL_LINK_TRAIN_MASK;
                switch (dp_train_pat & DP_TRAINING_PATTERN_MASK) {
                case DP_TRAINING_PATTERN_DISABLE:
-                       if (port != PORT_A) {
-                               temp |= DP_TP_CTL_LINK_TRAIN_IDLE;
-                               I915_WRITE(DP_TP_CTL(port), temp);
-                               if (wait_for((I915_READ(DP_TP_STATUS(port)) &
-                                             DP_TP_STATUS_IDLE_DONE), 1))
-                                       DRM_ERROR("Timed out waiting for DP idle patterns\n");
-                               temp &= ~DP_TP_CTL_LINK_TRAIN_MASK;
-                       }
                        temp |= DP_TP_CTL_LINK_TRAIN_NORMAL;
  
                        break;
        return true;
  }
  
+ static void intel_dp_set_idle_link_train(struct intel_dp *intel_dp)
+ {
+       struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
+       struct drm_device *dev = intel_dig_port->base.base.dev;
+       struct drm_i915_private *dev_priv = dev->dev_private;
+       enum port port = intel_dig_port->port;
+       uint32_t val;
+       if (!HAS_DDI(dev))
+               return;
+       val = I915_READ(DP_TP_CTL(port));
+       val &= ~DP_TP_CTL_LINK_TRAIN_MASK;
+       val |= DP_TP_CTL_LINK_TRAIN_IDLE;
+       I915_WRITE(DP_TP_CTL(port), val);
+       /*
+        * On PORT_A we can have only eDP in SST mode. There the only reason
+        * we need to set idle transmission mode is to work around a HW issue
+        * where we enable the pipe while not in idle link-training mode.
+        * In this case there is requirement to wait for a minimum number of
+        * idle patterns to be sent.
+        */
+       if (port == PORT_A)
+               return;
+       if (wait_for((I915_READ(DP_TP_STATUS(port)) & DP_TP_STATUS_IDLE_DONE),
+                    1))
+               DRM_ERROR("Timed out waiting for DP idle patterns\n");
+ }
  /* Enable corresponding port and start training pattern 1 */
  void
  intel_dp_start_link_train(struct intel_dp *intel_dp)
@@@ -1953,10 -1962,19 +1962,19 @@@ intel_dp_complete_link_train(struct int
                ++tries;
        }
  
+       intel_dp_set_idle_link_train(intel_dp);
+       intel_dp->DP = DP;
        if (channel_eq)
 -              DRM_DEBUG_KMS("Channel EQ done. DP Training successfull\n");
 +              DRM_DEBUG_KMS("Channel EQ done. DP Training successful\n");
  
-       intel_dp_set_link_train(intel_dp, DP, DP_TRAINING_PATTERN_DISABLE);
+ }
+ void intel_dp_stop_link_train(struct intel_dp *intel_dp)
+ {
+       intel_dp_set_link_train(intel_dp, intel_dp->DP,
+                               DP_TRAINING_PATTERN_DISABLE);
  }
  
  static void
@@@ -2164,6 -2182,7 +2182,7 @@@ intel_dp_check_link_status(struct intel
                              drm_get_encoder_name(&intel_encoder->base));
                intel_dp_start_link_train(intel_dp);
                intel_dp_complete_link_train(intel_dp);
+               intel_dp_stop_link_train(intel_dp);
        }
  }
  
index f9889658329bfd1aa613cc595a143511e9f94386,e8e20c653b1d16ffa707434908c424c48f4d3a2c..77b8a45fb10a3c872aa86304f22abf16266a0249
@@@ -46,29 -46,26 +46,26 @@@ static void mga_crtc_load_lut(struct dr
  
  static inline void mga_wait_vsync(struct mga_device *mdev)
  {
-       unsigned int count = 0;
+       unsigned long timeout = jiffies + HZ/10;
        unsigned int status = 0;
  
        do {
                status = RREG32(MGAREG_Status);
-               count++;
-       } while ((status & 0x08) && (count < 250000));
-       count = 0;
+       } while ((status & 0x08) && time_before(jiffies, timeout));
+       timeout = jiffies + HZ/10;
        status = 0;
        do {
                status = RREG32(MGAREG_Status);
-               count++;
-       } while (!(status & 0x08) && (count < 250000));
+       } while (!(status & 0x08) && time_before(jiffies, timeout));
  }
  
  static inline void mga_wait_busy(struct mga_device *mdev)
  {
-       unsigned int count = 0;
+       unsigned long timeout = jiffies + HZ;
        unsigned int status = 0;
        do {
                status = RREG8(MGAREG_Status + 2);
-               count++;
-       } while ((status & 0x01) && (count < 500000));
+       } while ((status & 0x01) && time_before(jiffies, timeout));
  }
  
  /*
@@@ -189,12 -186,12 +186,12 @@@ static int mga_g200wb_set_plls(struct m
                WREG8(DAC_INDEX, MGA1064_PIX_CLK_CTL);
                tmp = RREG8(DAC_DATA);
                tmp |= MGA1064_PIX_CLK_CTL_CLK_DIS;
-               WREG_DAC(MGA1064_PIX_CLK_CTL_CLK_DIS, tmp);
+               WREG8(DAC_DATA, tmp);
  
                WREG8(DAC_INDEX, MGA1064_REMHEADCTL);
                tmp = RREG8(DAC_DATA);
                tmp |= MGA1064_REMHEADCTL_CLKDIS;
-               WREG_DAC(MGA1064_REMHEADCTL, tmp);
+               WREG8(DAC_DATA, tmp);
  
                /* select PLL Set C */
                tmp = RREG8(MGAREG_MEM_MISC_READ);
                WREG8(DAC_INDEX, MGA1064_PIX_CLK_CTL);
                tmp = RREG8(DAC_DATA);
                tmp |= MGA1064_PIX_CLK_CTL_CLK_POW_DOWN | 0x80;
-               WREG_DAC(MGA1064_PIX_CLK_CTL, tmp);
+               WREG8(DAC_DATA, tmp);
  
                udelay(500);
  
                WREG8(DAC_INDEX, MGA1064_VREF_CTL);
                tmp = RREG8(DAC_DATA);
                tmp &= ~0x04;
-               WREG_DAC(MGA1064_VREF_CTL, tmp);
+               WREG8(DAC_DATA, tmp);
  
                udelay(50);
  
                tmp = RREG8(DAC_DATA);
                tmp &= ~MGA1064_PIX_CLK_CTL_SEL_MSK;
                tmp |= MGA1064_PIX_CLK_CTL_SEL_PLL;
-               WREG_DAC(MGA1064_PIX_CLK_CTL, tmp);
+               WREG8(DAC_DATA, tmp);
  
                WREG8(DAC_INDEX, MGA1064_REMHEADCTL);
                tmp = RREG8(DAC_DATA);
                tmp &= ~MGA1064_REMHEADCTL_CLKSL_MSK;
                tmp |= MGA1064_REMHEADCTL_CLKSL_PLL;
-               WREG_DAC(MGA1064_REMHEADCTL, tmp);
+               WREG8(DAC_DATA, tmp);
  
                /* reset dotclock rate bit */
                WREG8(MGAREG_SEQ_INDEX, 1);
                WREG8(DAC_INDEX, MGA1064_PIX_CLK_CTL);
                tmp = RREG8(DAC_DATA);
                tmp &= ~MGA1064_PIX_CLK_CTL_CLK_DIS;
-               WREG_DAC(MGA1064_PIX_CLK_CTL, tmp);
+               WREG8(DAC_DATA, tmp);
  
                vcount = RREG8(MGAREG_VCOUNT);
  
@@@ -318,7 -315,7 +315,7 @@@ static int mga_g200ev_set_plls(struct m
        WREG8(DAC_INDEX, MGA1064_PIX_CLK_CTL);
        tmp = RREG8(DAC_DATA);
        tmp |= MGA1064_PIX_CLK_CTL_CLK_DIS;
-       WREG_DAC(MGA1064_PIX_CLK_CTL_CLK_DIS, tmp);
+       WREG8(DAC_DATA, tmp);
  
        tmp = RREG8(MGAREG_MEM_MISC_READ);
        tmp |= 0x3 << 2;
  
        WREG8(DAC_INDEX, MGA1064_PIX_PLL_STAT);
        tmp = RREG8(DAC_DATA);
-       WREG_DAC(MGA1064_PIX_PLL_STAT, tmp & ~0x40);
+       WREG8(DAC_DATA, tmp & ~0x40);
  
        WREG8(DAC_INDEX, MGA1064_PIX_CLK_CTL);
        tmp = RREG8(DAC_DATA);
        tmp |= MGA1064_PIX_CLK_CTL_CLK_POW_DOWN;
-       WREG_DAC(MGA1064_PIX_CLK_CTL, tmp);
+       WREG8(DAC_DATA, tmp);
  
        WREG_DAC(MGA1064_EV_PIX_PLLC_M, m);
        WREG_DAC(MGA1064_EV_PIX_PLLC_N, n);
        WREG8(DAC_INDEX, MGA1064_PIX_CLK_CTL);
        tmp = RREG8(DAC_DATA);
        tmp &= ~MGA1064_PIX_CLK_CTL_CLK_POW_DOWN;
-       WREG_DAC(MGA1064_PIX_CLK_CTL, tmp);
+       WREG8(DAC_DATA, tmp);
  
        udelay(500);
  
        tmp = RREG8(DAC_DATA);
        tmp &= ~MGA1064_PIX_CLK_CTL_SEL_MSK;
        tmp |= MGA1064_PIX_CLK_CTL_SEL_PLL;
-       WREG_DAC(MGA1064_PIX_CLK_CTL, tmp);
+       WREG8(DAC_DATA, tmp);
  
        WREG8(DAC_INDEX, MGA1064_PIX_PLL_STAT);
        tmp = RREG8(DAC_DATA);
-       WREG_DAC(MGA1064_PIX_PLL_STAT, tmp | 0x40);
+       WREG8(DAC_DATA, tmp | 0x40);
  
        tmp = RREG8(MGAREG_MEM_MISC_READ);
        tmp |= (0x3 << 2);
        WREG8(DAC_INDEX, MGA1064_PIX_CLK_CTL);
        tmp = RREG8(DAC_DATA);
        tmp &= ~MGA1064_PIX_CLK_CTL_CLK_DIS;
-       WREG_DAC(MGA1064_PIX_CLK_CTL, tmp);
+       WREG8(DAC_DATA, tmp);
  
        return 0;
  }
@@@ -416,7 -413,7 +413,7 @@@ static int mga_g200eh_set_plls(struct m
                WREG8(DAC_INDEX, MGA1064_PIX_CLK_CTL);
                tmp = RREG8(DAC_DATA);
                tmp |= MGA1064_PIX_CLK_CTL_CLK_DIS;
-               WREG_DAC(MGA1064_PIX_CLK_CTL_CLK_DIS, tmp);
+               WREG8(DAC_DATA, tmp);
  
                tmp = RREG8(MGAREG_MEM_MISC_READ);
                tmp |= 0x3 << 2;
                WREG8(DAC_INDEX, MGA1064_PIX_CLK_CTL);
                tmp = RREG8(DAC_DATA);
                tmp |= MGA1064_PIX_CLK_CTL_CLK_POW_DOWN;
-               WREG_DAC(MGA1064_PIX_CLK_CTL, tmp);
+               WREG8(DAC_DATA, tmp);
  
                udelay(500);
  
                tmp = RREG8(DAC_DATA);
                tmp &= ~MGA1064_PIX_CLK_CTL_SEL_MSK;
                tmp |= MGA1064_PIX_CLK_CTL_SEL_PLL;
-               WREG_DAC(MGA1064_PIX_CLK_CTL, tmp);
+               WREG8(DAC_DATA, tmp);
  
                WREG8(DAC_INDEX, MGA1064_PIX_CLK_CTL);
                tmp = RREG8(DAC_DATA);
                tmp &= ~MGA1064_PIX_CLK_CTL_CLK_DIS;
                tmp &= ~MGA1064_PIX_CLK_CTL_CLK_POW_DOWN;
-               WREG_DAC(MGA1064_PIX_CLK_CTL, tmp);
+               WREG8(DAC_DATA, tmp);
  
                vcount = RREG8(MGAREG_VCOUNT);
  
@@@ -515,12 -512,12 +512,12 @@@ static int mga_g200er_set_plls(struct m
        WREG8(DAC_INDEX, MGA1064_PIX_CLK_CTL);
        tmp = RREG8(DAC_DATA);
        tmp |= MGA1064_PIX_CLK_CTL_CLK_DIS;
-       WREG_DAC(MGA1064_PIX_CLK_CTL_CLK_DIS, tmp);
+       WREG8(DAC_DATA, tmp);
  
        WREG8(DAC_INDEX, MGA1064_REMHEADCTL);
        tmp = RREG8(DAC_DATA);
        tmp |= MGA1064_REMHEADCTL_CLKDIS;
-       WREG_DAC(MGA1064_REMHEADCTL, tmp);
+       WREG8(DAC_DATA, tmp);
  
        tmp = RREG8(MGAREG_MEM_MISC_READ);
        tmp |= (0x3<<2) | 0xc0;
        tmp = RREG8(DAC_DATA);
        tmp &= ~MGA1064_PIX_CLK_CTL_CLK_DIS;
        tmp |= MGA1064_PIX_CLK_CTL_CLK_POW_DOWN;
-       WREG_DAC(MGA1064_PIX_CLK_CTL, tmp);
+       WREG8(DAC_DATA, tmp);
  
        udelay(500);
  
@@@ -657,12 -654,26 +654,26 @@@ static void mga_g200wb_commit(struct dr
        WREG_DAC(MGA1064_GEN_IO_DATA, tmp);
  }
  
+ /*
+    This is how the framebuffer base address is stored in g200 cards:
+    * Assume @offset is the gpu_addr variable of the framebuffer object
+    * Then addr is the number of _pixels_ (not bytes) from the start of
+      VRAM to the first pixel we want to display. (divided by 2 for 32bit
+      framebuffers)
+    * addr is stored in the CRTCEXT0, CRTCC and CRTCD registers
+    addr<20> -> CRTCEXT0<6>
+    addr<19-16> -> CRTCEXT0<3-0>
+    addr<15-8> -> CRTCC<7-0>
+    addr<7-0> -> CRTCD<7-0>
+    CRTCEXT0 has to be programmed last to trigger an update and make the
+    new addr variable take effect.
+  */
  void mga_set_start_address(struct drm_crtc *crtc, unsigned offset)
  {
        struct mga_device *mdev = crtc->dev->dev_private;
        u32 addr;
        int count;
+       u8 crtcext0;
  
        while (RREG8(0x1fda) & 0x08);
        while (!(RREG8(0x1fda) & 0x08));
        count = RREG8(MGAREG_VCOUNT) + 2;
        while (RREG8(MGAREG_VCOUNT) < count);
  
-       addr = offset >> 2;
+       WREG8(MGAREG_CRTCEXT_INDEX, 0);
+       crtcext0 = RREG8(MGAREG_CRTCEXT_DATA);
+       crtcext0 &= 0xB0;
+       addr = offset / 8;
+       /* Can't store addresses any higher than that...
+          but we also don't have more than 16MB of memory, so it should be fine. */
+       WARN_ON(addr > 0x1fffff);
+       crtcext0 |= (!!(addr & (1<<20)))<<6;
        WREG_CRT(0x0d, (u8)(addr & 0xff));
        WREG_CRT(0x0c, (u8)(addr >> 8) & 0xff);
-       WREG_CRT(0xaf, (u8)(addr >> 16) & 0xf);
+       WREG_ECRT(0x0, ((u8)(addr >> 16) & 0xf) | crtcext0);
  }
  
  
@@@ -751,6 -769,8 +769,6 @@@ static int mga_crtc_mode_set(struct drm
        int i;
        unsigned char misc = 0;
        unsigned char ext_vga[6];
 -      unsigned char ext_vga_index24;
 -      unsigned char dac_index90 = 0;
        u8 bppshift;
  
        static unsigned char dacvalue[] = {
                option2 = 0x0000b000;
                break;
        case G200_ER:
 -              dac_index90 = 0;
                break;
        }
  
  
  
        for (i = 0; i < sizeof(dacvalue); i++) {
-               if ((i <= 0x03) ||
-                   (i == 0x07) ||
-                   (i == 0x0b) ||
-                   (i == 0x0f) ||
-                   ((i >= 0x13) && (i <= 0x17)) ||
+               if ((i <= 0x17) ||
                    (i == 0x1b) ||
                    (i == 0x1c) ||
                    ((i >= 0x1f) && (i <= 0x29)) ||
                WREG_DAC(i, dacvalue[i]);
        }
  
 -      if (mdev->type == G200_ER) {
 -              WREG_DAC(0x90, dac_index90);
 -      }
 -
 +      if (mdev->type == G200_ER)
 +              WREG_DAC(0x90, 0);
  
        if (option)
                pci_write_config_dword(dev->pdev, PCI_MGA_OPTION, option);
        if (mdev->type == G200_WB)
                ext_vga[1] |= 0x88;
  
 -      ext_vga_index24 = 0x05;
 -
        /* Set pixel clocks */
        misc = 0x2d;
        WREG8(MGA_MISC_OUT, misc);
        }
  
        if (mdev->type == G200_ER)
 -              WREG_ECRT(24, ext_vga_index24);
 +              WREG_ECRT(0x24, 0x5);
  
        if (mdev->type == G200_EV) {
                WREG_ECRT(6, 0);
diff --combined include/drm/drmP.h
index 61196592152e09a3913d1989cd847a8f9457664b,b092b5bcf22741130ccd6fd0d5cfbe29c0d97833..63d17ee9eb488c336ad55521f346dc1c2703c4c4
@@@ -316,6 -316,7 +316,7 @@@ struct drm_ioctl_desc 
        int flags;
        drm_ioctl_t *func;
        unsigned int cmd_drv;
+       const char *name;
  };
  
  /**
   */
  
  #define DRM_IOCTL_DEF_DRV(ioctl, _func, _flags)                       \
-       [DRM_IOCTL_NR(DRM_##ioctl)] = {.cmd = DRM_##ioctl, .func = _func, .flags = _flags, .cmd_drv = DRM_IOCTL_##ioctl}
+       [DRM_IOCTL_NR(DRM_##ioctl)] = {.cmd = DRM_##ioctl, .func = _func, .flags = _flags, .cmd_drv = DRM_IOCTL_##ioctl, .name = #ioctl}
  
  struct drm_magic_entry {
        struct list_head head;
@@@ -1022,7 -1023,7 +1023,7 @@@ struct drm_info_list 
  struct drm_info_node {
        struct list_head list;
        struct drm_minor *minor;
 -      struct drm_info_list *info_ent;
 +      const struct drm_info_list *info_ent;
        struct dentry *dent;
  };
  
@@@ -1546,7 -1547,8 +1547,7 @@@ extern struct idr drm_minors_idr
  extern struct drm_local_map *drm_getsarea(struct drm_device *dev);
  
                                /* Proc support (drm_proc.h) */
 -extern int drm_proc_init(struct drm_minor *minor, int minor_id,
 -                       struct proc_dir_entry *root);
 +extern int drm_proc_init(struct drm_minor *minor, struct proc_dir_entry *root);
  extern int drm_proc_cleanup(struct drm_minor *minor, struct proc_dir_entry *root);
  
                                /* Debugfs support */
This page took 0.111456 seconds and 4 git commands to generate.