Patchwork UBUNTU: SAUCE: i915: ubreak G33 GTT size calculation

login
register
mail settings
Submitter Tim Gardner
Date July 9, 2010, 5:49 p.m.
Message ID <4C376134.9070403@canonical.com>
Download mbox | patch
Permalink /patch/58418/
State Accepted
Headers show

Comments

Tim Gardner - July 9, 2010, 5:49 p.m.
On 07/09/2010 10:21 AM, Kees Cook wrote:
> Upstream fixed https://bugzilla.kernel.org/show_bug.cgi?id=15733
> by correctly calculating the GTT size using aperture size
> on non-G33 hardware.  In the process, the G33 case was
> also changed, which lead to the regression documented in
> https://bugzilla.kernel.org/show_bug.cgi?id=16294
>
> This patch reverts the G33 logic without re-breaking the non-G33 logic.
>
> BugLink: https://bugs.launchpad.net/bugs/597075
>
> Signed-off-by: Kees Cook<kees.cook at canonical.com>
> ---
> v2:
>   - drop the entire auto-detect code for G33 since it is not correct
>
> ---

Kees - while your patch definitely fixes the regression, it might make 
upstream happier to fix the root cause. See attached.

I'll have a test kernel for you in 30 minutes or so.

rtg

Patch

From f746346424cae6a62d2dca65b48007217ec802c5 Mon Sep 17 00:00:00 2001
From: Tim Gardner <tim.gardner@canonical.com>
Date: Fri, 9 Jul 2010 11:14:41 -0600
Subject: [PATCH] UBUNTU: [Upstream] i915: Use the correct mask to detect i830 arpeture size.

BugLink: https://bugs.launchpad.net/bugs/597075

According to the specification found at http://intellinuxgraphics.org/VOL_1_graphics_core.pdf,
the PCI config space register I830_GMCH_CTRL is a mirror of GMCH Graphics Control. The correct
macro for isolating the arperture size bits is therefore I830_GMCH_GMS_MASK along with the
attendant changes to the case statement.

Signed-off-by: Tim Gardner <tim.gardner@canonical.com>
---
 drivers/char/agp/intel-gtt.c |   13 ++++++++-----
 1 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/drivers/char/agp/intel-gtt.c b/drivers/char/agp/intel-gtt.c
index 9344216..a754715 100644
--- a/drivers/char/agp/intel-gtt.c
+++ b/drivers/char/agp/intel-gtt.c
@@ -1216,17 +1216,20 @@  static int intel_i915_get_gtt_size(void)
 
 		/* G33's GTT size defined in gmch_ctrl */
 		pci_read_config_word(agp_bridge->dev, I830_GMCH_CTRL, &gmch_ctrl);
-		switch (gmch_ctrl & G33_PGETBL_SIZE_MASK) {
-		case G33_PGETBL_SIZE_1M:
+		switch (gmch_ctrl & I830_GMCH_GMS_MASK) {
+		case I830_GMCH_GMS_STOLEN_512:
+			size = 512;
+			break;
+		case I830_GMCH_GMS_STOLEN_1024:
 			size = 1024;
 			break;
-		case G33_PGETBL_SIZE_2M:
-			size = 2048;
+		case I830_GMCH_GMS_STOLEN_8192:
+			size = 8*1024;
 			break;
 		default:
 			dev_info(&agp_bridge->dev->dev,
 				 "unknown page table size 0x%x, assuming 512KB\n",
-				(gmch_ctrl & G33_PGETBL_SIZE_MASK));
+				(gmch_ctrl & I830_GMCH_GMS_MASK));
 			size = 512;
 		}
 	} else {
-- 
1.7.0.4