rpms/kernel/F-12 linux-2.6-iommu-hp-cantiga-resume.patch, NONE, 1.1 kernel.spec, 1.1936, 1.1937

David Woodhouse dwmw2 at fedoraproject.org
Thu Nov 26 10:57:40 UTC 2009


Author: dwmw2

Update of /cvs/pkgs/rpms/kernel/F-12
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv20631

Modified Files:
	kernel.spec 
Added Files:
	linux-2.6-iommu-hp-cantiga-resume.patch 
Log Message:
Bring me the skull of a BIOS engineer

linux-2.6-iommu-hp-cantiga-resume.patch:
 intel-iommu.c |   33 +++++++++++++++++++++++++++++++++
 1 file changed, 33 insertions(+)

--- NEW FILE linux-2.6-iommu-hp-cantiga-resume.patch ---
--- linux-2.6.31.x86_64/drivers/pci/intel-iommu.c.orig	2009-11-25 10:37:05.000000000 +0000
+++ linux-2.6.31.x86_64/drivers/pci/intel-iommu.c	2009-11-26 07:20:04.000000000 +0000
@@ -3073,6 +3073,36 @@ static void __init init_no_remapping_dev
 }
 
 #ifdef CONFIG_SUSPEND
+
+/*
+ * On Cantiga, the dedicated IOMMU for the integrated graphics won't
+ * come back unless the MMIO BAR for the gfx device (00:02.0) is enabled.
+ * And some HP BIOSes don't restore it on resume. Linux will restore it
+ * later, but that's too late -- we need to reinitialise the IOMMU first.
+ */
+void cantiga_gfx_bar_enable(struct dmar_drhd_unit *drhd)
+{
+	int i;
+	uint32_t mmiobar;
+
+	for (i = 0; i < drhd->devices_cnt; i++) {
+		if (!drhd->devices[i] ||
+		    drhd->devices[i]->vendor != 0x8086 ||
+		    drhd->devices[i]->device != 0x2a42)
+			continue;
+
+		pci_read_config_dword(drhd->devices[i], PCI_BASE_ADDRESS_0,
+				      &mmiobar);
+		if (!(mmiobar & PCI_BASE_ADDRESS_MEM_MASK) &&
+		    pci_resource_start(drhd->devices[i], 0)) {
+			WARN(1, "BIOS failed to restore BARs for integrated graphics device; fixing...\n");
+			pci_write_config_dword(drhd->devices[i],
+					       PCI_BASE_ADDRESS_0,
+					       pci_resource_start(drhd->devices[i], 0) | mmiobar);
+		}
+	}
+}
+
 static int init_iommu_hw(void)
 {
 	struct dmar_drhd_unit *drhd;
@@ -3091,6 +3121,9 @@ static int init_iommu_hw(void)
 					   DMA_CCMD_GLOBAL_INVL);
 		iommu->flush.flush_iotlb(iommu, 0, 0, 0,
 					 DMA_TLB_GLOBAL_FLUSH);
+
+		cantiga_gfx_bar_enable(drhd);
+
 		iommu_enable_translation(iommu);
 		iommu_disable_protect_mem_regions(iommu);
 	}


Index: kernel.spec
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-12/kernel.spec,v
retrieving revision 1.1936
retrieving revision 1.1937
diff -u -p -r1.1936 -r1.1937
--- kernel.spec	25 Nov 2009 20:03:58 -0000	1.1936
+++ kernel.spec	26 Nov 2009 10:57:40 -0000	1.1937
@@ -630,6 +630,7 @@ Patch102: linux-2.6-iommu-at-zero.patch
 Patch103: linux-2.6-iommu-dmar-all-1s.patch
 Patch104: linux-2.6-iommu-another-hp-screwup.patch
 Patch105: linux-2.6-iommu-sanity-checks-for-intr-remap-too.patch
+Patch106: linux-2.6-iommu-hp-cantiga-resume.patch
 
 Patch141: linux-2.6-ps3-storage-alias.patch
 Patch143: linux-2.6-g5-therm-shutdown.patch
@@ -1249,6 +1250,8 @@ ApplyPatch linux-2.6-iommu-dmar-all-1s.p
 ApplyPatch linux-2.6-iommu-another-hp-screwup.patch
 # Apply the 'at zero' and 'all 0xFF' sanity checks for intr_remap too
 ApplyPatch linux-2.6-iommu-sanity-checks-for-intr-remap-too.patch
+# Fix up MMIO BAR for integrated graphics on HP laptops on resume (#536675)
+ApplyPatch linux-2.6-iommu-hp-cantiga-resume.patch
 
 #
 # PowerPC
@@ -2152,6 +2155,9 @@ fi
 # and build.
 
 %changelog
+* Wed Nov 26 2009 David Woodhouse <David.Woodhouse at intel.com> 2.6.31.6-151
+- VT-d: Work around yet more HP BIOS brokenness (#536675)
+
 * Wed Nov 25 2009 Kyle McMartin <kyle at redhat.com>
 - dlm: fix connection close handling.
   Fix by lmb, requested by fabio.




More information about the fedora-extras-commits mailing list