aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2010-07-05 13:01:46 -0400
committerEric Anholt <eric@anholt.net>2010-08-01 22:03:47 -0400
commit534843dabf79da40561148764916e1b2e6bbcebe (patch)
tree1871363e1e220e2645726d6aa5144be5511ef7f5
parente1a4474349997d722e4ae64e40a68feb25307109 (diff)
drm/i915: Use 128k alignment for untiled display surface on i965 (v2)
The original i965, including the revised G35 and Q35, requires an alignment of 128K for the display surface with linear memory, so increase the requirement from 64k for these chipsets. For the later chipsets in the i965 family, only a 4k alignment is required. (So long as we do not start performing asynchronous flips.) Note the impact of this should be slight as on i965 we should be using a tiled frontbuffer for anything up to a 4096x4096 display. v2: compilation fixes and note that the docs do not exclude the G35 from the extra alignment. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Reviewed-by: Jesse Barnes <jbarnes@virtuousgeek.org> Signed-off-by: Eric Anholt <eric@anholt.net>
-rw-r--r--drivers/gpu/drm/i915/i915_drv.c4
-rw-r--r--drivers/gpu/drm/i915/i915_drv.h4
-rw-r--r--drivers/gpu/drm/i915/intel_display.c7
3 files changed, 12 insertions, 3 deletions
diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
index 04d9d1f73d1b..ca740d9170a3 100644
--- a/drivers/gpu/drm/i915/i915_drv.c
+++ b/drivers/gpu/drm/i915/i915_drv.c
@@ -93,11 +93,11 @@ static const struct intel_device_info intel_i945gm_info = {
93}; 93};
94 94
95static const struct intel_device_info intel_i965g_info = { 95static const struct intel_device_info intel_i965g_info = {
96 .is_i965g = 1, .is_i9xx = 1, .has_hotplug = 1, 96 .is_broadwater = 1, .is_i965g = 1, .is_i9xx = 1, .has_hotplug = 1,
97}; 97};
98 98
99static const struct intel_device_info intel_i965gm_info = { 99static const struct intel_device_info intel_i965gm_info = {
100 .is_i965g = 1, .is_i965gm = 1, .is_i9xx = 1, 100 .is_crestline = 1, .is_i965g = 1, .is_i965gm = 1, .is_i9xx = 1,
101 .is_mobile = 1, .has_fbc = 1, .has_rc6 = 1, 101 .is_mobile = 1, .has_fbc = 1, .has_rc6 = 1,
102 .has_hotplug = 1, 102 .has_hotplug = 1,
103}; 103};
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 70e252768ab3..5a0100ef21d0 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -201,6 +201,8 @@ struct intel_device_info {
201 u8 need_gfx_hws : 1; 201 u8 need_gfx_hws : 1;
202 u8 is_g4x : 1; 202 u8 is_g4x : 1;
203 u8 is_pineview : 1; 203 u8 is_pineview : 1;
204 u8 is_broadwater : 1;
205 u8 is_crestline : 1;
204 u8 is_ironlake : 1; 206 u8 is_ironlake : 1;
205 u8 is_gen6 : 1; 207 u8 is_gen6 : 1;
206 u8 has_fbc : 1; 208 u8 has_fbc : 1;
@@ -1134,6 +1136,8 @@ extern int intel_trans_dp_port_sel (struct drm_crtc *crtc);
1134#define IS_I945GM(dev) (INTEL_INFO(dev)->is_i945gm) 1136#define IS_I945GM(dev) (INTEL_INFO(dev)->is_i945gm)
1135#define IS_I965G(dev) (INTEL_INFO(dev)->is_i965g) 1137#define IS_I965G(dev) (INTEL_INFO(dev)->is_i965g)
1136#define IS_I965GM(dev) (INTEL_INFO(dev)->is_i965gm) 1138#define IS_I965GM(dev) (INTEL_INFO(dev)->is_i965gm)
1139#define IS_BROADWATER(dev) (INTEL_INFO(dev)->is_broadwater)
1140#define IS_CRESTLINE(dev) (INTEL_INFO(dev)->is_crestline)
1137#define IS_GM45(dev) ((dev)->pci_device == 0x2A42) 1141#define IS_GM45(dev) ((dev)->pci_device == 0x2A42)
1138#define IS_G4X(dev) (INTEL_INFO(dev)->is_g4x) 1142#define IS_G4X(dev) (INTEL_INFO(dev)->is_g4x)
1139#define IS_PINEVIEW_G(dev) ((dev)->pci_device == 0xa001) 1143#define IS_PINEVIEW_G(dev) ((dev)->pci_device == 0xa001)
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index f67c74a25264..8359c50e6646 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -1329,7 +1329,12 @@ intel_pin_and_fence_fb_obj(struct drm_device *dev, struct drm_gem_object *obj)
1329 1329
1330 switch (obj_priv->tiling_mode) { 1330 switch (obj_priv->tiling_mode) {
1331 case I915_TILING_NONE: 1331 case I915_TILING_NONE:
1332 alignment = 64 * 1024; 1332 if (IS_BROADWATER(dev) || IS_CRESTLINE(dev))
1333 alignment = 128 * 1024;
1334 else if (IS_I965G(dev))
1335 alignment = 4 * 1024;
1336 else
1337 alignment = 64 * 1024;
1333 break; 1338 break;
1334 case I915_TILING_X: 1339 case I915_TILING_X:
1335 /* pin() will align the object as required by fence */ 1340 /* pin() will align the object as required by fence */