aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVille Syrjälä <ville.syrjala@linux.intel.com>2011-12-19 17:06:49 -0500
committerDave Airlie <airlied@redhat.com>2011-12-20 05:06:27 -0500
commit01f2c7730e188077026c5f766f85f329c7000c54 (patch)
tree1b7ad10bd70c25ccaefa2a03aeedaeb20ac2c336
parent935b59774012d11e3012c909cdd0c3cba0adf219 (diff)
drm: Replace pitch with pitches[] in drm_framebuffer
Otherwise each driver would need to keep the information inside their own framebuffer object structure. Also add offsets[]. BOs on the other hand are driver specific, so those can be kept in driver specific structures. Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Signed-off-by: Dave Airlie <airlied@redhat.com>
-rw-r--r--drivers/gpu/drm/drm_crtc.c2
-rw-r--r--drivers/gpu/drm/drm_crtc_helper.c7
-rw-r--r--drivers/gpu/drm/exynos/exynos_drm_crtc.c2
-rw-r--r--drivers/gpu/drm/exynos/exynos_drm_fbdev.c4
-rw-r--r--drivers/gpu/drm/gma500/accel_2d.c2
-rw-r--r--drivers/gpu/drm/gma500/cdv_intel_display.c4
-rw-r--r--drivers/gpu/drm/gma500/framebuffer.c2
-rw-r--r--drivers/gpu/drm/gma500/oaktrail_crtc.c4
-rw-r--r--drivers/gpu/drm/gma500/psb_intel_display.c4
-rw-r--r--drivers/gpu/drm/i915/i915_irq.c2
-rw-r--r--drivers/gpu/drm/i915/intel_display.c36
-rw-r--r--drivers/gpu/drm/i915/intel_fb.c2
-rw-r--r--drivers/gpu/drm/nouveau/nouveau_display.c8
-rw-r--r--drivers/gpu/drm/nouveau/nouveau_fbcon.c2
-rw-r--r--drivers/gpu/drm/nouveau/nv04_crtc.c14
-rw-r--r--drivers/gpu/drm/radeon/atombios_crtc.c4
-rw-r--r--drivers/gpu/drm/radeon/radeon_display.c2
-rw-r--r--drivers/gpu/drm/radeon/radeon_fb.c4
-rw-r--r--drivers/gpu/drm/radeon/radeon_legacy_crtc.c2
-rw-r--r--drivers/gpu/drm/vmwgfx/vmwgfx_kms.c8
-rw-r--r--drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c4
-rw-r--r--include/drm/drm_crtc.h3
22 files changed, 64 insertions, 58 deletions
diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
index 07d78e27ec3d..0d1faa72e1ff 100644
--- a/drivers/gpu/drm/drm_crtc.c
+++ b/drivers/gpu/drm/drm_crtc.c
@@ -2292,7 +2292,7 @@ int drm_mode_getfb(struct drm_device *dev,
2292 r->width = fb->width; 2292 r->width = fb->width;
2293 r->depth = fb->depth; 2293 r->depth = fb->depth;
2294 r->bpp = fb->bits_per_pixel; 2294 r->bpp = fb->bits_per_pixel;
2295 r->pitch = fb->pitch; 2295 r->pitch = fb->pitches[0];
2296 fb->funcs->create_handle(fb, file_priv, &r->handle); 2296 fb->funcs->create_handle(fb, file_priv, &r->handle);
2297 2297
2298out: 2298out:
diff --git a/drivers/gpu/drm/drm_crtc_helper.c b/drivers/gpu/drm/drm_crtc_helper.c
index 2ce61d72d416..ccbdc0b5854c 100644
--- a/drivers/gpu/drm/drm_crtc_helper.c
+++ b/drivers/gpu/drm/drm_crtc_helper.c
@@ -814,9 +814,14 @@ EXPORT_SYMBOL(drm_helper_connector_dpms);
814int drm_helper_mode_fill_fb_struct(struct drm_framebuffer *fb, 814int drm_helper_mode_fill_fb_struct(struct drm_framebuffer *fb,
815 struct drm_mode_fb_cmd2 *mode_cmd) 815 struct drm_mode_fb_cmd2 *mode_cmd)
816{ 816{
817 int i;
818
817 fb->width = mode_cmd->width; 819 fb->width = mode_cmd->width;
818 fb->height = mode_cmd->height; 820 fb->height = mode_cmd->height;
819 fb->pitch = mode_cmd->pitches[0]; 821 for (i = 0; i < 4; i++) {
822 fb->pitches[i] = mode_cmd->pitches[i];
823 fb->offsets[i] = mode_cmd->offsets[i];
824 }
820 drm_fb_get_bpp_depth(mode_cmd->pixel_format, &fb->depth, 825 drm_fb_get_bpp_depth(mode_cmd->pixel_format, &fb->depth,
821 &fb->bits_per_pixel); 826 &fb->bits_per_pixel);
822 fb->pixel_format = mode_cmd->pixel_format; 827 fb->pixel_format = mode_cmd->pixel_format;
diff --git a/drivers/gpu/drm/exynos/exynos_drm_crtc.c b/drivers/gpu/drm/exynos/exynos_drm_crtc.c
index 9337e5e2dbb6..73893e5068a4 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_crtc.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_crtc.c
@@ -119,7 +119,7 @@ static int exynos_drm_overlay_update(struct exynos_drm_overlay *overlay,
119 overlay->fb_width = fb->width; 119 overlay->fb_width = fb->width;
120 overlay->fb_height = fb->height; 120 overlay->fb_height = fb->height;
121 overlay->bpp = fb->bits_per_pixel; 121 overlay->bpp = fb->bits_per_pixel;
122 overlay->pitch = fb->pitch; 122 overlay->pitch = fb->pitches[0];
123 123
124 /* set overlay range to be displayed. */ 124 /* set overlay range to be displayed. */
125 overlay->crtc_x = pos->crtc_x; 125 overlay->crtc_x = pos->crtc_x;
diff --git a/drivers/gpu/drm/exynos/exynos_drm_fbdev.c b/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
index 1f4b3d1a7713..81fba29b696d 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
@@ -100,7 +100,7 @@ static int exynos_drm_fbdev_update(struct drm_fb_helper *helper,
100 100
101 exynos_fb->fb = fb; 101 exynos_fb->fb = fb;
102 102
103 drm_fb_helper_fill_fix(fbi, fb->pitch, fb->depth); 103 drm_fb_helper_fill_fix(fbi, fb->pitches[0], fb->depth);
104 drm_fb_helper_fill_var(fbi, helper, fb_width, fb_height); 104 drm_fb_helper_fill_var(fbi, helper, fb_width, fb_height);
105 105
106 entry = exynos_drm_fb_get_buf(fb); 106 entry = exynos_drm_fb_get_buf(fb);
@@ -110,7 +110,7 @@ static int exynos_drm_fbdev_update(struct drm_fb_helper *helper,
110 } 110 }
111 111
112 offset = fbi->var.xoffset * (fb->bits_per_pixel >> 3); 112 offset = fbi->var.xoffset * (fb->bits_per_pixel >> 3);
113 offset += fbi->var.yoffset * fb->pitch; 113 offset += fbi->var.yoffset * fb->pitches[0];
114 114
115 dev->mode_config.fb_base = entry->paddr; 115 dev->mode_config.fb_base = entry->paddr;
116 fbi->screen_base = entry->vaddr + offset; 116 fbi->screen_base = entry->vaddr + offset;
diff --git a/drivers/gpu/drm/gma500/accel_2d.c b/drivers/gpu/drm/gma500/accel_2d.c
index f0ce82aed654..d5ef1a5793c8 100644
--- a/drivers/gpu/drm/gma500/accel_2d.c
+++ b/drivers/gpu/drm/gma500/accel_2d.c
@@ -253,7 +253,7 @@ static void psbfb_copyarea_accel(struct fb_info *info,
253 return; 253 return;
254 254
255 offset = psbfb->gtt->offset; 255 offset = psbfb->gtt->offset;
256 stride = fb->pitch; 256 stride = fb->pitches[0];
257 257
258 switch (fb->depth) { 258 switch (fb->depth) {
259 case 8: 259 case 8:
diff --git a/drivers/gpu/drm/gma500/cdv_intel_display.c b/drivers/gpu/drm/gma500/cdv_intel_display.c
index 7b97c600eff0..c63a32776a9e 100644
--- a/drivers/gpu/drm/gma500/cdv_intel_display.c
+++ b/drivers/gpu/drm/gma500/cdv_intel_display.c
@@ -507,9 +507,9 @@ int cdv_intel_pipe_set_base(struct drm_crtc *crtc,
507 if (ret < 0) 507 if (ret < 0)
508 goto psb_intel_pipe_set_base_exit; 508 goto psb_intel_pipe_set_base_exit;
509 start = psbfb->gtt->offset; 509 start = psbfb->gtt->offset;
510 offset = y * crtc->fb->pitch + x * (crtc->fb->bits_per_pixel / 8); 510 offset = y * crtc->fb->pitches[0] + x * (crtc->fb->bits_per_pixel / 8);
511 511
512 REG_WRITE(dspstride, crtc->fb->pitch); 512 REG_WRITE(dspstride, crtc->fb->pitches[0]);
513 513
514 dspcntr = REG_READ(dspcntr_reg); 514 dspcntr = REG_READ(dspcntr_reg);
515 dspcntr &= ~DISPPLANE_PIXFORMAT_MASK; 515 dspcntr &= ~DISPPLANE_PIXFORMAT_MASK;
diff --git a/drivers/gpu/drm/gma500/framebuffer.c b/drivers/gpu/drm/gma500/framebuffer.c
index 9ec167600d04..75cfafe2ff81 100644
--- a/drivers/gpu/drm/gma500/framebuffer.c
+++ b/drivers/gpu/drm/gma500/framebuffer.c
@@ -500,7 +500,7 @@ static int psbfb_create(struct psb_fbdev *fbdev,
500 info->apertures->ranges[0].size = dev_priv->gtt.stolen_size; 500 info->apertures->ranges[0].size = dev_priv->gtt.stolen_size;
501 } 501 }
502 502
503 drm_fb_helper_fill_fix(info, fb->pitch, fb->depth); 503 drm_fb_helper_fill_fix(info, fb->pitches[0], fb->depth);
504 drm_fb_helper_fill_var(info, &fbdev->psb_fb_helper, 504 drm_fb_helper_fill_var(info, &fbdev->psb_fb_helper,
505 sizes->fb_width, sizes->fb_height); 505 sizes->fb_width, sizes->fb_height);
506 506
diff --git a/drivers/gpu/drm/gma500/oaktrail_crtc.c b/drivers/gpu/drm/gma500/oaktrail_crtc.c
index 8e15b5af1213..fe17e1f000bf 100644
--- a/drivers/gpu/drm/gma500/oaktrail_crtc.c
+++ b/drivers/gpu/drm/gma500/oaktrail_crtc.c
@@ -543,9 +543,9 @@ int oaktrail_pipe_set_base(struct drm_crtc *crtc,
543 return 0; 543 return 0;
544 544
545 start = psbfb->gtt->offset; 545 start = psbfb->gtt->offset;
546 offset = y * crtc->fb->pitch + x * (crtc->fb->bits_per_pixel / 8); 546 offset = y * crtc->fb->pitches[0] + x * (crtc->fb->bits_per_pixel / 8);
547 547
548 REG_WRITE(dspstride, crtc->fb->pitch); 548 REG_WRITE(dspstride, crtc->fb->pitches[0]);
549 549
550 dspcntr = REG_READ(dspcntr_reg); 550 dspcntr = REG_READ(dspcntr_reg);
551 dspcntr &= ~DISPPLANE_PIXFORMAT_MASK; 551 dspcntr &= ~DISPPLANE_PIXFORMAT_MASK;
diff --git a/drivers/gpu/drm/gma500/psb_intel_display.c b/drivers/gpu/drm/gma500/psb_intel_display.c
index ab650765a647..7bc0edee9c0d 100644
--- a/drivers/gpu/drm/gma500/psb_intel_display.c
+++ b/drivers/gpu/drm/gma500/psb_intel_display.c
@@ -365,9 +365,9 @@ int psb_intel_pipe_set_base(struct drm_crtc *crtc,
365 goto psb_intel_pipe_set_base_exit; 365 goto psb_intel_pipe_set_base_exit;
366 start = psbfb->gtt->offset; 366 start = psbfb->gtt->offset;
367 367
368 offset = y * crtc->fb->pitch + x * (crtc->fb->bits_per_pixel / 8); 368 offset = y * crtc->fb->pitches[0] + x * (crtc->fb->bits_per_pixel / 8);
369 369
370 REG_WRITE(dspstride, crtc->fb->pitch); 370 REG_WRITE(dspstride, crtc->fb->pitches[0]);
371 371
372 dspcntr = REG_READ(dspcntr_reg); 372 dspcntr = REG_READ(dspcntr_reg);
373 dspcntr &= ~DISPPLANE_PIXFORMAT_MASK; 373 dspcntr &= ~DISPPLANE_PIXFORMAT_MASK;
diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
index 9ee2729fe5c6..96643ee240da 100644
--- a/drivers/gpu/drm/i915/i915_irq.c
+++ b/drivers/gpu/drm/i915/i915_irq.c
@@ -1204,7 +1204,7 @@ static void i915_pageflip_stall_check(struct drm_device *dev, int pipe)
1204 } else { 1204 } else {
1205 int dspaddr = DSPADDR(intel_crtc->plane); 1205 int dspaddr = DSPADDR(intel_crtc->plane);
1206 stall_detected = I915_READ(dspaddr) == (obj->gtt_offset + 1206 stall_detected = I915_READ(dspaddr) == (obj->gtt_offset +
1207 crtc->y * crtc->fb->pitch + 1207 crtc->y * crtc->fb->pitches[0] +
1208 crtc->x * crtc->fb->bits_per_pixel/8); 1208 crtc->x * crtc->fb->bits_per_pixel/8);
1209 } 1209 }
1210 1210
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 5dd9bf60bce0..8ecbc2f11633 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -1511,8 +1511,8 @@ static void i8xx_enable_fbc(struct drm_crtc *crtc, unsigned long interval)
1511 u32 fbc_ctl, fbc_ctl2; 1511 u32 fbc_ctl, fbc_ctl2;
1512 1512
1513 cfb_pitch = dev_priv->cfb_size / FBC_LL_SIZE; 1513 cfb_pitch = dev_priv->cfb_size / FBC_LL_SIZE;
1514 if (fb->pitch < cfb_pitch) 1514 if (fb->pitches[0] < cfb_pitch)
1515 cfb_pitch = fb->pitch; 1515 cfb_pitch = fb->pitches[0];
1516 1516
1517 /* FBC_CTL wants 64B units */ 1517 /* FBC_CTL wants 64B units */
1518 cfb_pitch = (cfb_pitch / 64) - 1; 1518 cfb_pitch = (cfb_pitch / 64) - 1;
@@ -2073,11 +2073,11 @@ static int i9xx_update_plane(struct drm_crtc *crtc, struct drm_framebuffer *fb,
2073 I915_WRITE(reg, dspcntr); 2073 I915_WRITE(reg, dspcntr);
2074 2074
2075 Start = obj->gtt_offset; 2075 Start = obj->gtt_offset;
2076 Offset = y * fb->pitch + x * (fb->bits_per_pixel / 8); 2076 Offset = y * fb->pitches[0] + x * (fb->bits_per_pixel / 8);
2077 2077
2078 DRM_DEBUG_KMS("Writing base %08lX %08lX %d %d %d\n", 2078 DRM_DEBUG_KMS("Writing base %08lX %08lX %d %d %d\n",
2079 Start, Offset, x, y, fb->pitch); 2079 Start, Offset, x, y, fb->pitches[0]);
2080 I915_WRITE(DSPSTRIDE(plane), fb->pitch); 2080 I915_WRITE(DSPSTRIDE(plane), fb->pitches[0]);
2081 if (INTEL_INFO(dev)->gen >= 4) { 2081 if (INTEL_INFO(dev)->gen >= 4) {
2082 I915_WRITE(DSPSURF(plane), Start); 2082 I915_WRITE(DSPSURF(plane), Start);
2083 I915_WRITE(DSPTILEOFF(plane), (y << 16) | x); 2083 I915_WRITE(DSPTILEOFF(plane), (y << 16) | x);
@@ -2154,11 +2154,11 @@ static int ironlake_update_plane(struct drm_crtc *crtc,
2154 I915_WRITE(reg, dspcntr); 2154 I915_WRITE(reg, dspcntr);
2155 2155
2156 Start = obj->gtt_offset; 2156 Start = obj->gtt_offset;
2157 Offset = y * fb->pitch + x * (fb->bits_per_pixel / 8); 2157 Offset = y * fb->pitches[0] + x * (fb->bits_per_pixel / 8);
2158 2158
2159 DRM_DEBUG_KMS("Writing base %08lX %08lX %d %d %d\n", 2159 DRM_DEBUG_KMS("Writing base %08lX %08lX %d %d %d\n",
2160 Start, Offset, x, y, fb->pitch); 2160 Start, Offset, x, y, fb->pitches[0]);
2161 I915_WRITE(DSPSTRIDE(plane), fb->pitch); 2161 I915_WRITE(DSPSTRIDE(plane), fb->pitches[0]);
2162 I915_WRITE(DSPSURF(plane), Start); 2162 I915_WRITE(DSPSURF(plane), Start);
2163 I915_WRITE(DSPTILEOFF(plane), (y << 16) | x); 2163 I915_WRITE(DSPTILEOFF(plane), (y << 16) | x);
2164 I915_WRITE(DSPADDR(plane), Offset); 2164 I915_WRITE(DSPADDR(plane), Offset);
@@ -6353,11 +6353,11 @@ mode_fits_in_fbdev(struct drm_device *dev,
6353 return NULL; 6353 return NULL;
6354 6354
6355 fb = &dev_priv->fbdev->ifb.base; 6355 fb = &dev_priv->fbdev->ifb.base;
6356 if (fb->pitch < intel_framebuffer_pitch_for_width(mode->hdisplay, 6356 if (fb->pitches[0] < intel_framebuffer_pitch_for_width(mode->hdisplay,
6357 fb->bits_per_pixel)) 6357 fb->bits_per_pixel))
6358 return NULL; 6358 return NULL;
6359 6359
6360 if (obj->base.size < mode->vdisplay * fb->pitch) 6360 if (obj->base.size < mode->vdisplay * fb->pitches[0])
6361 return NULL; 6361 return NULL;
6362 6362
6363 return fb; 6363 return fb;
@@ -6990,7 +6990,7 @@ static int intel_gen2_queue_flip(struct drm_device *dev,
6990 goto out; 6990 goto out;
6991 6991
6992 /* Offset into the new buffer for cases of shared fbs between CRTCs */ 6992 /* Offset into the new buffer for cases of shared fbs between CRTCs */
6993 offset = crtc->y * fb->pitch + crtc->x * fb->bits_per_pixel/8; 6993 offset = crtc->y * fb->pitches[0] + crtc->x * fb->bits_per_pixel/8;
6994 6994
6995 ret = BEGIN_LP_RING(6); 6995 ret = BEGIN_LP_RING(6);
6996 if (ret) 6996 if (ret)
@@ -7007,7 +7007,7 @@ static int intel_gen2_queue_flip(struct drm_device *dev,
7007 OUT_RING(MI_NOOP); 7007 OUT_RING(MI_NOOP);
7008 OUT_RING(MI_DISPLAY_FLIP | 7008 OUT_RING(MI_DISPLAY_FLIP |
7009 MI_DISPLAY_FLIP_PLANE(intel_crtc->plane)); 7009 MI_DISPLAY_FLIP_PLANE(intel_crtc->plane));
7010 OUT_RING(fb->pitch); 7010 OUT_RING(fb->pitches[0]);
7011 OUT_RING(obj->gtt_offset + offset); 7011 OUT_RING(obj->gtt_offset + offset);
7012 OUT_RING(MI_NOOP); 7012 OUT_RING(MI_NOOP);
7013 ADVANCE_LP_RING(); 7013 ADVANCE_LP_RING();
@@ -7031,7 +7031,7 @@ static int intel_gen3_queue_flip(struct drm_device *dev,
7031 goto out; 7031 goto out;
7032 7032
7033 /* Offset into the new buffer for cases of shared fbs between CRTCs */ 7033 /* Offset into the new buffer for cases of shared fbs between CRTCs */
7034 offset = crtc->y * fb->pitch + crtc->x * fb->bits_per_pixel/8; 7034 offset = crtc->y * fb->pitches[0] + crtc->x * fb->bits_per_pixel/8;
7035 7035
7036 ret = BEGIN_LP_RING(6); 7036 ret = BEGIN_LP_RING(6);
7037 if (ret) 7037 if (ret)
@@ -7045,7 +7045,7 @@ static int intel_gen3_queue_flip(struct drm_device *dev,
7045 OUT_RING(MI_NOOP); 7045 OUT_RING(MI_NOOP);
7046 OUT_RING(MI_DISPLAY_FLIP_I915 | 7046 OUT_RING(MI_DISPLAY_FLIP_I915 |
7047 MI_DISPLAY_FLIP_PLANE(intel_crtc->plane)); 7047 MI_DISPLAY_FLIP_PLANE(intel_crtc->plane));
7048 OUT_RING(fb->pitch); 7048 OUT_RING(fb->pitches[0]);
7049 OUT_RING(obj->gtt_offset + offset); 7049 OUT_RING(obj->gtt_offset + offset);
7050 OUT_RING(MI_NOOP); 7050 OUT_RING(MI_NOOP);
7051 7051
@@ -7078,7 +7078,7 @@ static int intel_gen4_queue_flip(struct drm_device *dev,
7078 */ 7078 */
7079 OUT_RING(MI_DISPLAY_FLIP | 7079 OUT_RING(MI_DISPLAY_FLIP |
7080 MI_DISPLAY_FLIP_PLANE(intel_crtc->plane)); 7080 MI_DISPLAY_FLIP_PLANE(intel_crtc->plane));
7081 OUT_RING(fb->pitch); 7081 OUT_RING(fb->pitches[0]);
7082 OUT_RING(obj->gtt_offset | obj->tiling_mode); 7082 OUT_RING(obj->gtt_offset | obj->tiling_mode);
7083 7083
7084 /* XXX Enabling the panel-fitter across page-flip is so far 7084 /* XXX Enabling the panel-fitter across page-flip is so far
@@ -7113,7 +7113,7 @@ static int intel_gen6_queue_flip(struct drm_device *dev,
7113 7113
7114 OUT_RING(MI_DISPLAY_FLIP | 7114 OUT_RING(MI_DISPLAY_FLIP |
7115 MI_DISPLAY_FLIP_PLANE(intel_crtc->plane)); 7115 MI_DISPLAY_FLIP_PLANE(intel_crtc->plane));
7116 OUT_RING(fb->pitch | obj->tiling_mode); 7116 OUT_RING(fb->pitches[0] | obj->tiling_mode);
7117 OUT_RING(obj->gtt_offset); 7117 OUT_RING(obj->gtt_offset);
7118 7118
7119 pf = I915_READ(PF_CTL(intel_crtc->pipe)) & PF_ENABLE; 7119 pf = I915_READ(PF_CTL(intel_crtc->pipe)) & PF_ENABLE;
@@ -7149,7 +7149,7 @@ static int intel_gen7_queue_flip(struct drm_device *dev,
7149 goto out; 7149 goto out;
7150 7150
7151 intel_ring_emit(ring, MI_DISPLAY_FLIP_I915 | (intel_crtc->plane << 19)); 7151 intel_ring_emit(ring, MI_DISPLAY_FLIP_I915 | (intel_crtc->plane << 19));
7152 intel_ring_emit(ring, (fb->pitch | obj->tiling_mode)); 7152 intel_ring_emit(ring, (fb->pitches[0] | obj->tiling_mode));
7153 intel_ring_emit(ring, (obj->gtt_offset)); 7153 intel_ring_emit(ring, (obj->gtt_offset));
7154 intel_ring_emit(ring, (MI_NOOP)); 7154 intel_ring_emit(ring, (MI_NOOP));
7155 intel_ring_advance(ring); 7155 intel_ring_advance(ring);
diff --git a/drivers/gpu/drm/i915/intel_fb.c b/drivers/gpu/drm/i915/intel_fb.c
index dc1db4ff4245..f02fc71a57a5 100644
--- a/drivers/gpu/drm/i915/intel_fb.c
+++ b/drivers/gpu/drm/i915/intel_fb.c
@@ -149,7 +149,7 @@ static int intelfb_create(struct intel_fbdev *ifbdev,
149 149
150// memset(info->screen_base, 0, size); 150// memset(info->screen_base, 0, size);
151 151
152 drm_fb_helper_fill_fix(info, fb->pitch, fb->depth); 152 drm_fb_helper_fill_fix(info, fb->pitches[0], fb->depth);
153 drm_fb_helper_fill_var(info, &ifbdev->helper, sizes->fb_width, sizes->fb_height); 153 drm_fb_helper_fill_var(info, &ifbdev->helper, sizes->fb_width, sizes->fb_height);
154 154
155 info->pixmap.size = 64*1024; 155 info->pixmap.size = 64*1024;
diff --git a/drivers/gpu/drm/nouveau/nouveau_display.c b/drivers/gpu/drm/nouveau/nouveau_display.c
index 7687a77f01d1..2531ef54c3e9 100644
--- a/drivers/gpu/drm/nouveau/nouveau_display.c
+++ b/drivers/gpu/drm/nouveau/nouveau_display.c
@@ -107,14 +107,14 @@ nouveau_framebuffer_init(struct drm_device *dev,
107 107
108 if (!tile_flags) { 108 if (!tile_flags) {
109 if (dev_priv->card_type < NV_D0) 109 if (dev_priv->card_type < NV_D0)
110 nv_fb->r_pitch = 0x00100000 | fb->pitch; 110 nv_fb->r_pitch = 0x00100000 | fb->pitches[0];
111 else 111 else
112 nv_fb->r_pitch = 0x01000000 | fb->pitch; 112 nv_fb->r_pitch = 0x01000000 | fb->pitches[0];
113 } else { 113 } else {
114 u32 mode = nvbo->tile_mode; 114 u32 mode = nvbo->tile_mode;
115 if (dev_priv->card_type >= NV_C0) 115 if (dev_priv->card_type >= NV_C0)
116 mode >>= 4; 116 mode >>= 4;
117 nv_fb->r_pitch = ((fb->pitch / 4) << 4) | mode; 117 nv_fb->r_pitch = ((fb->pitches[0] / 4) << 4) | mode;
118 } 118 }
119 } 119 }
120 120
@@ -294,7 +294,7 @@ nouveau_crtc_page_flip(struct drm_crtc *crtc, struct drm_framebuffer *fb,
294 /* Initialize a page flip struct */ 294 /* Initialize a page flip struct */
295 *s = (struct nouveau_page_flip_state) 295 *s = (struct nouveau_page_flip_state)
296 { { }, event, nouveau_crtc(crtc)->index, 296 { { }, event, nouveau_crtc(crtc)->index,
297 fb->bits_per_pixel, fb->pitch, crtc->x, crtc->y, 297 fb->bits_per_pixel, fb->pitches[0], crtc->x, crtc->y,
298 new_bo->bo.offset }; 298 new_bo->bo.offset };
299 299
300 /* Choose the channel the flip will be handled in */ 300 /* Choose the channel the flip will be handled in */
diff --git a/drivers/gpu/drm/nouveau/nouveau_fbcon.c b/drivers/gpu/drm/nouveau/nouveau_fbcon.c
index d663065181bf..defffd140781 100644
--- a/drivers/gpu/drm/nouveau/nouveau_fbcon.c
+++ b/drivers/gpu/drm/nouveau/nouveau_fbcon.c
@@ -370,7 +370,7 @@ nouveau_fbcon_create(struct nouveau_fbdev *nfbdev,
370 info->screen_base = nvbo_kmap_obj_iovirtual(nouveau_fb->nvbo); 370 info->screen_base = nvbo_kmap_obj_iovirtual(nouveau_fb->nvbo);
371 info->screen_size = size; 371 info->screen_size = size;
372 372
373 drm_fb_helper_fill_fix(info, fb->pitch, fb->depth); 373 drm_fb_helper_fill_fix(info, fb->pitches[0], fb->depth);
374 drm_fb_helper_fill_var(info, &nfbdev->helper, sizes->fb_width, sizes->fb_height); 374 drm_fb_helper_fill_var(info, &nfbdev->helper, sizes->fb_width, sizes->fb_height);
375 375
376 /* Set aperture base/size for vesafb takeover */ 376 /* Set aperture base/size for vesafb takeover */
diff --git a/drivers/gpu/drm/nouveau/nv04_crtc.c b/drivers/gpu/drm/nouveau/nv04_crtc.c
index 5e45398a9e2d..728d07584d39 100644
--- a/drivers/gpu/drm/nouveau/nv04_crtc.c
+++ b/drivers/gpu/drm/nouveau/nv04_crtc.c
@@ -364,7 +364,7 @@ nv_crtc_mode_set_vga(struct drm_crtc *crtc, struct drm_display_mode *mode)
364 regp->CRTC[NV_CIO_CR_VRE_INDEX] = 1 << 5 | XLATE(vertEnd, 0, NV_CIO_CR_VRE_3_0); 364 regp->CRTC[NV_CIO_CR_VRE_INDEX] = 1 << 5 | XLATE(vertEnd, 0, NV_CIO_CR_VRE_3_0);
365 regp->CRTC[NV_CIO_CR_VDE_INDEX] = vertDisplay; 365 regp->CRTC[NV_CIO_CR_VDE_INDEX] = vertDisplay;
366 /* framebuffer can be larger than crtc scanout area. */ 366 /* framebuffer can be larger than crtc scanout area. */
367 regp->CRTC[NV_CIO_CR_OFFSET_INDEX] = fb->pitch / 8; 367 regp->CRTC[NV_CIO_CR_OFFSET_INDEX] = fb->pitches[0] / 8;
368 regp->CRTC[NV_CIO_CR_ULINE_INDEX] = 0x00; 368 regp->CRTC[NV_CIO_CR_ULINE_INDEX] = 0x00;
369 regp->CRTC[NV_CIO_CR_VBS_INDEX] = vertBlankStart; 369 regp->CRTC[NV_CIO_CR_VBS_INDEX] = vertBlankStart;
370 regp->CRTC[NV_CIO_CR_VBE_INDEX] = vertBlankEnd; 370 regp->CRTC[NV_CIO_CR_VBE_INDEX] = vertBlankEnd;
@@ -377,9 +377,9 @@ nv_crtc_mode_set_vga(struct drm_crtc *crtc, struct drm_display_mode *mode)
377 377
378 /* framebuffer can be larger than crtc scanout area. */ 378 /* framebuffer can be larger than crtc scanout area. */
379 regp->CRTC[NV_CIO_CRE_RPC0_INDEX] = 379 regp->CRTC[NV_CIO_CRE_RPC0_INDEX] =
380 XLATE(fb->pitch / 8, 8, NV_CIO_CRE_RPC0_OFFSET_10_8); 380 XLATE(fb->pitches[0] / 8, 8, NV_CIO_CRE_RPC0_OFFSET_10_8);
381 regp->CRTC[NV_CIO_CRE_42] = 381 regp->CRTC[NV_CIO_CRE_42] =
382 XLATE(fb->pitch / 8, 11, NV_CIO_CRE_42_OFFSET_11); 382 XLATE(fb->pitches[0] / 8, 11, NV_CIO_CRE_42_OFFSET_11);
383 regp->CRTC[NV_CIO_CRE_RPC1_INDEX] = mode->crtc_hdisplay < 1280 ? 383 regp->CRTC[NV_CIO_CRE_RPC1_INDEX] = mode->crtc_hdisplay < 1280 ?
384 MASK(NV_CIO_CRE_RPC1_LARGE) : 0x00; 384 MASK(NV_CIO_CRE_RPC1_LARGE) : 0x00;
385 regp->CRTC[NV_CIO_CRE_LSR_INDEX] = XLATE(horizBlankEnd, 6, NV_CIO_CRE_LSR_HBE_6) | 385 regp->CRTC[NV_CIO_CRE_LSR_INDEX] = XLATE(horizBlankEnd, 6, NV_CIO_CRE_LSR_HBE_6) |
@@ -835,18 +835,18 @@ nv04_crtc_do_mode_set_base(struct drm_crtc *crtc,
835 NVWriteRAMDAC(dev, nv_crtc->index, NV_PRAMDAC_GENERAL_CONTROL, 835 NVWriteRAMDAC(dev, nv_crtc->index, NV_PRAMDAC_GENERAL_CONTROL,
836 regp->ramdac_gen_ctrl); 836 regp->ramdac_gen_ctrl);
837 837
838 regp->CRTC[NV_CIO_CR_OFFSET_INDEX] = drm_fb->pitch >> 3; 838 regp->CRTC[NV_CIO_CR_OFFSET_INDEX] = drm_fb->pitches[0] >> 3;
839 regp->CRTC[NV_CIO_CRE_RPC0_INDEX] = 839 regp->CRTC[NV_CIO_CRE_RPC0_INDEX] =
840 XLATE(drm_fb->pitch >> 3, 8, NV_CIO_CRE_RPC0_OFFSET_10_8); 840 XLATE(drm_fb->pitches[0] >> 3, 8, NV_CIO_CRE_RPC0_OFFSET_10_8);
841 regp->CRTC[NV_CIO_CRE_42] = 841 regp->CRTC[NV_CIO_CRE_42] =
842 XLATE(drm_fb->pitch / 8, 11, NV_CIO_CRE_42_OFFSET_11); 842 XLATE(drm_fb->pitches[0] / 8, 11, NV_CIO_CRE_42_OFFSET_11);
843 crtc_wr_cio_state(crtc, regp, NV_CIO_CRE_RPC0_INDEX); 843 crtc_wr_cio_state(crtc, regp, NV_CIO_CRE_RPC0_INDEX);
844 crtc_wr_cio_state(crtc, regp, NV_CIO_CR_OFFSET_INDEX); 844 crtc_wr_cio_state(crtc, regp, NV_CIO_CR_OFFSET_INDEX);
845 crtc_wr_cio_state(crtc, regp, NV_CIO_CRE_42); 845 crtc_wr_cio_state(crtc, regp, NV_CIO_CRE_42);
846 846
847 /* Update the framebuffer location. */ 847 /* Update the framebuffer location. */
848 regp->fb_start = nv_crtc->fb.offset & ~3; 848 regp->fb_start = nv_crtc->fb.offset & ~3;
849 regp->fb_start += (y * drm_fb->pitch) + (x * drm_fb->bits_per_pixel / 8); 849 regp->fb_start += (y * drm_fb->pitches[0]) + (x * drm_fb->bits_per_pixel / 8);
850 nv_set_crtc_base(dev, nv_crtc->index, regp->fb_start); 850 nv_set_crtc_base(dev, nv_crtc->index, regp->fb_start);
851 851
852 /* Update the arbitration parameters. */ 852 /* Update the arbitration parameters. */
diff --git a/drivers/gpu/drm/radeon/atombios_crtc.c b/drivers/gpu/drm/radeon/atombios_crtc.c
index 87921c88a95c..7567ff2510e0 100644
--- a/drivers/gpu/drm/radeon/atombios_crtc.c
+++ b/drivers/gpu/drm/radeon/atombios_crtc.c
@@ -1153,7 +1153,7 @@ static int dce4_crtc_do_set_base(struct drm_crtc *crtc,
1153 WREG32(EVERGREEN_GRPH_X_END + radeon_crtc->crtc_offset, target_fb->width); 1153 WREG32(EVERGREEN_GRPH_X_END + radeon_crtc->crtc_offset, target_fb->width);
1154 WREG32(EVERGREEN_GRPH_Y_END + radeon_crtc->crtc_offset, target_fb->height); 1154 WREG32(EVERGREEN_GRPH_Y_END + radeon_crtc->crtc_offset, target_fb->height);
1155 1155
1156 fb_pitch_pixels = target_fb->pitch / (target_fb->bits_per_pixel / 8); 1156 fb_pitch_pixels = target_fb->pitches[0] / (target_fb->bits_per_pixel / 8);
1157 WREG32(EVERGREEN_GRPH_PITCH + radeon_crtc->crtc_offset, fb_pitch_pixels); 1157 WREG32(EVERGREEN_GRPH_PITCH + radeon_crtc->crtc_offset, fb_pitch_pixels);
1158 WREG32(EVERGREEN_GRPH_ENABLE + radeon_crtc->crtc_offset, 1); 1158 WREG32(EVERGREEN_GRPH_ENABLE + radeon_crtc->crtc_offset, 1);
1159 1159
@@ -1322,7 +1322,7 @@ static int avivo_crtc_do_set_base(struct drm_crtc *crtc,
1322 WREG32(AVIVO_D1GRPH_X_END + radeon_crtc->crtc_offset, target_fb->width); 1322 WREG32(AVIVO_D1GRPH_X_END + radeon_crtc->crtc_offset, target_fb->width);
1323 WREG32(AVIVO_D1GRPH_Y_END + radeon_crtc->crtc_offset, target_fb->height); 1323 WREG32(AVIVO_D1GRPH_Y_END + radeon_crtc->crtc_offset, target_fb->height);
1324 1324
1325 fb_pitch_pixels = target_fb->pitch / (target_fb->bits_per_pixel / 8); 1325 fb_pitch_pixels = target_fb->pitches[0] / (target_fb->bits_per_pixel / 8);
1326 WREG32(AVIVO_D1GRPH_PITCH + radeon_crtc->crtc_offset, fb_pitch_pixels); 1326 WREG32(AVIVO_D1GRPH_PITCH + radeon_crtc->crtc_offset, fb_pitch_pixels);
1327 WREG32(AVIVO_D1GRPH_ENABLE + radeon_crtc->crtc_offset, 1); 1327 WREG32(AVIVO_D1GRPH_ENABLE + radeon_crtc->crtc_offset, 1);
1328 1328
diff --git a/drivers/gpu/drm/radeon/radeon_display.c b/drivers/gpu/drm/radeon/radeon_display.c
index 96d9ba96c87d..d3ffc18774a6 100644
--- a/drivers/gpu/drm/radeon/radeon_display.c
+++ b/drivers/gpu/drm/radeon/radeon_display.c
@@ -406,7 +406,7 @@ static int radeon_crtc_page_flip(struct drm_crtc *crtc,
406 if (!ASIC_IS_AVIVO(rdev)) { 406 if (!ASIC_IS_AVIVO(rdev)) {
407 /* crtc offset is from display base addr not FB location */ 407 /* crtc offset is from display base addr not FB location */
408 base -= radeon_crtc->legacy_display_base_addr; 408 base -= radeon_crtc->legacy_display_base_addr;
409 pitch_pixels = fb->pitch / (fb->bits_per_pixel / 8); 409 pitch_pixels = fb->pitches[0] / (fb->bits_per_pixel / 8);
410 410
411 if (tiling_flags & RADEON_TILING_MACRO) { 411 if (tiling_flags & RADEON_TILING_MACRO) {
412 if (ASIC_IS_R300(rdev)) { 412 if (ASIC_IS_R300(rdev)) {
diff --git a/drivers/gpu/drm/radeon/radeon_fb.c b/drivers/gpu/drm/radeon/radeon_fb.c
index 0dc749eb4222..cf2bf35b56b8 100644
--- a/drivers/gpu/drm/radeon/radeon_fb.c
+++ b/drivers/gpu/drm/radeon/radeon_fb.c
@@ -232,7 +232,7 @@ static int radeonfb_create(struct radeon_fbdev *rfbdev,
232 232
233 strcpy(info->fix.id, "radeondrmfb"); 233 strcpy(info->fix.id, "radeondrmfb");
234 234
235 drm_fb_helper_fill_fix(info, fb->pitch, fb->depth); 235 drm_fb_helper_fill_fix(info, fb->pitches[0], fb->depth);
236 236
237 info->flags = FBINFO_DEFAULT | FBINFO_CAN_FORCE_OUTPUT; 237 info->flags = FBINFO_DEFAULT | FBINFO_CAN_FORCE_OUTPUT;
238 info->fbops = &radeonfb_ops; 238 info->fbops = &radeonfb_ops;
@@ -275,7 +275,7 @@ static int radeonfb_create(struct radeon_fbdev *rfbdev,
275 DRM_INFO("vram apper at 0x%lX\n", (unsigned long)rdev->mc.aper_base); 275 DRM_INFO("vram apper at 0x%lX\n", (unsigned long)rdev->mc.aper_base);
276 DRM_INFO("size %lu\n", (unsigned long)radeon_bo_size(rbo)); 276 DRM_INFO("size %lu\n", (unsigned long)radeon_bo_size(rbo));
277 DRM_INFO("fb depth is %d\n", fb->depth); 277 DRM_INFO("fb depth is %d\n", fb->depth);
278 DRM_INFO(" pitch is %d\n", fb->pitch); 278 DRM_INFO(" pitch is %d\n", fb->pitches[0]);
279 279
280 vga_switcheroo_client_fb_set(rdev->ddev->pdev, info); 280 vga_switcheroo_client_fb_set(rdev->ddev->pdev, info);
281 return 0; 281 return 0;
diff --git a/drivers/gpu/drm/radeon/radeon_legacy_crtc.c b/drivers/gpu/drm/radeon/radeon_legacy_crtc.c
index 41a5d48e657b..95b93604b679 100644
--- a/drivers/gpu/drm/radeon/radeon_legacy_crtc.c
+++ b/drivers/gpu/drm/radeon/radeon_legacy_crtc.c
@@ -437,7 +437,7 @@ int radeon_crtc_do_set_base(struct drm_crtc *crtc,
437 437
438 crtc_offset_cntl = 0; 438 crtc_offset_cntl = 0;
439 439
440 pitch_pixels = target_fb->pitch / (target_fb->bits_per_pixel / 8); 440 pitch_pixels = target_fb->pitches[0] / (target_fb->bits_per_pixel / 8);
441 crtc_pitch = (((pitch_pixels * target_fb->bits_per_pixel) + 441 crtc_pitch = (((pitch_pixels * target_fb->bits_per_pixel) +
442 ((target_fb->bits_per_pixel * 8) - 1)) / 442 ((target_fb->bits_per_pixel * 8) - 1)) /
443 (target_fb->bits_per_pixel * 8)); 443 (target_fb->bits_per_pixel * 8));
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
index 760d04aee380..0585987f2945 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
@@ -605,7 +605,7 @@ static int vmw_kms_new_framebuffer_surface(struct vmw_private *dev_priv,
605 605
606 /* XXX get the first 3 from the surface info */ 606 /* XXX get the first 3 from the surface info */
607 vfbs->base.base.bits_per_pixel = mode_cmd->bpp; 607 vfbs->base.base.bits_per_pixel = mode_cmd->bpp;
608 vfbs->base.base.pitch = mode_cmd->pitch; 608 vfbs->base.base.pitches[0] = mode_cmd->pitch;
609 vfbs->base.base.depth = mode_cmd->depth; 609 vfbs->base.base.depth = mode_cmd->depth;
610 vfbs->base.base.width = mode_cmd->width; 610 vfbs->base.base.width = mode_cmd->width;
611 vfbs->base.base.height = mode_cmd->height; 611 vfbs->base.base.height = mode_cmd->height;
@@ -719,7 +719,7 @@ static int do_dmabuf_define_gmrfb(struct drm_file *file_priv,
719 cmd->body.format.bitsPerPixel = framebuffer->base.bits_per_pixel; 719 cmd->body.format.bitsPerPixel = framebuffer->base.bits_per_pixel;
720 cmd->body.format.colorDepth = depth; 720 cmd->body.format.colorDepth = depth;
721 cmd->body.format.reserved = 0; 721 cmd->body.format.reserved = 0;
722 cmd->body.bytesPerLine = framebuffer->base.pitch; 722 cmd->body.bytesPerLine = framebuffer->base.pitches[0];
723 cmd->body.ptr.gmrId = framebuffer->user_handle; 723 cmd->body.ptr.gmrId = framebuffer->user_handle;
724 cmd->body.ptr.offset = 0; 724 cmd->body.ptr.offset = 0;
725 725
@@ -961,7 +961,7 @@ static int vmw_kms_new_framebuffer_dmabuf(struct vmw_private *dev_priv,
961 } 961 }
962 962
963 vfbd->base.base.bits_per_pixel = mode_cmd->bpp; 963 vfbd->base.base.bits_per_pixel = mode_cmd->bpp;
964 vfbd->base.base.pitch = mode_cmd->pitch; 964 vfbd->base.base.pitches[0] = mode_cmd->pitch;
965 vfbd->base.base.depth = mode_cmd->depth; 965 vfbd->base.base.depth = mode_cmd->depth;
966 vfbd->base.base.width = mode_cmd->width; 966 vfbd->base.base.width = mode_cmd->width;
967 vfbd->base.base.height = mode_cmd->height; 967 vfbd->base.base.height = mode_cmd->height;
@@ -1243,7 +1243,7 @@ int vmw_kms_readback(struct vmw_private *dev_priv,
1243 cmd->body.format.bitsPerPixel = vfb->base.bits_per_pixel; 1243 cmd->body.format.bitsPerPixel = vfb->base.bits_per_pixel;
1244 cmd->body.format.colorDepth = vfb->base.depth; 1244 cmd->body.format.colorDepth = vfb->base.depth;
1245 cmd->body.format.reserved = 0; 1245 cmd->body.format.reserved = 0;
1246 cmd->body.bytesPerLine = vfb->base.pitch; 1246 cmd->body.bytesPerLine = vfb->base.pitches[0];
1247 cmd->body.ptr.gmrId = vfb->user_handle; 1247 cmd->body.ptr.gmrId = vfb->user_handle;
1248 cmd->body.ptr.offset = 0; 1248 cmd->body.ptr.offset = 0;
1249 1249
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c b/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c
index 90c5e3928491..15a6805e48b0 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c
@@ -94,7 +94,7 @@ static int vmw_ldu_commit_list(struct vmw_private *dev_priv)
94 return 0; 94 return 0;
95 fb = entry->base.crtc.fb; 95 fb = entry->base.crtc.fb;
96 96
97 return vmw_kms_write_svga(dev_priv, w, h, fb->pitch, 97 return vmw_kms_write_svga(dev_priv, w, h, fb->pitches[0],
98 fb->bits_per_pixel, fb->depth); 98 fb->bits_per_pixel, fb->depth);
99 } 99 }
100 100
@@ -102,7 +102,7 @@ static int vmw_ldu_commit_list(struct vmw_private *dev_priv)
102 entry = list_entry(lds->active.next, typeof(*entry), active); 102 entry = list_entry(lds->active.next, typeof(*entry), active);
103 fb = entry->base.crtc.fb; 103 fb = entry->base.crtc.fb;
104 104
105 vmw_kms_write_svga(dev_priv, fb->width, fb->height, fb->pitch, 105 vmw_kms_write_svga(dev_priv, fb->width, fb->height, fb->pitches[0],
106 fb->bits_per_pixel, fb->depth); 106 fb->bits_per_pixel, fb->depth);
107 } 107 }
108 108
diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h
index 42c89b201ffd..2deb6f99f950 100644
--- a/include/drm/drm_crtc.h
+++ b/include/drm/drm_crtc.h
@@ -239,7 +239,8 @@ struct drm_framebuffer {
239 struct list_head head; 239 struct list_head head;
240 struct drm_mode_object base; 240 struct drm_mode_object base;
241 const struct drm_framebuffer_funcs *funcs; 241 const struct drm_framebuffer_funcs *funcs;
242 unsigned int pitch; 242 unsigned int pitches[4];
243 unsigned int offsets[4];
243 unsigned int width; 244 unsigned int width;
244 unsigned int height; 245 unsigned int height;
245 /* depth can be 15 or 16 */ 246 /* depth can be 15 or 16 */