[pve-devel] r6550 - pve-kernel-2.6.32-rh/trunk

svn-commits at proxmox.com svn-commits at proxmox.com
Tue Sep 20 14:37:06 CEST 2011


Author: dietmar
Date: 2011-09-20 14:37:05 +0200 (Tue, 20 Sep 2011)
New Revision: 6550

Added:
   pve-kernel-2.6.32-rh/trunk/ahci-ata_generic-let-ata_generic-handle-new-MBP-w-MCP89.patch
   pve-kernel-2.6.32-rh/trunk/ata-Intel-IDE-R-support.patch
   pve-kernel-2.6.32-rh/trunk/ata_generic-drop-hard-coded-DMA-force-logic-for-CENATEK.patch
   pve-kernel-2.6.32-rh/trunk/ata_generic-implement-ATA_GEN_-flags-and-force-enable-DMA-on-MBP-7,1.patch
Modified:
   pve-kernel-2.6.32-rh/trunk/Makefile
   pve-kernel-2.6.32-rh/trunk/changelog.Debian
Log:


Modified: pve-kernel-2.6.32-rh/trunk/Makefile
===================================================================
--- pve-kernel-2.6.32-rh/trunk/Makefile	2011-09-20 05:40:55 UTC (rev 6549)
+++ pve-kernel-2.6.32-rh/trunk/Makefile	2011-09-20 12:37:05 UTC (rev 6550)
@@ -1,7 +1,7 @@
 RELEASE=1.9
 
 KERNEL_VER=2.6.32
-PKGREL=45
+PKGREL=46
 # also include firmware of previous versrion into 
 # the fw package:  fwlist-2.6.32-PREV-pve
 KREL=6
@@ -139,6 +139,11 @@
 	cd ${KERNEL_SRC}; patch -p1 <../do-not-use-barrier-on-ext3.patch
 	cd ${KERNEL_SRC}; patch -p1 <../bridge-patch.diff
 	cd ${KERNEL_SRC}; patch -p1 <../fix-aspm-policy.patch
+	# update ata_generic to support intel IDE-R
+	d ${KERNEL_SRC}; patch -p1 <../ahci-ata_generic-let-ata_generic-handle-new-MBP-w-MCP89.patch
+	cd ${KERNEL_SRC}; patch -p1 <../ata_generic-implement-ATA_GEN_-flags-and-force-enable-DMA-on-MBP-7,1.patch
+	cd ${KERNEL_SRC}; patch -p1 <../ata_generic-drop-hard-coded-DMA-force-logic-for-CENATEK.patch
+	cd ${KERNEL_SRC}; patch -p1 <../ata-Intel-IDE-R-support.patch
 	sed -i ${KERNEL_SRC}/Makefile -e 's/^EXTRAVERSION.*$$/EXTRAVERSION=${EXTRAVERSION}/'
 	touch $@
 

Added: pve-kernel-2.6.32-rh/trunk/ahci-ata_generic-let-ata_generic-handle-new-MBP-w-MCP89.patch
===================================================================
--- pve-kernel-2.6.32-rh/trunk/ahci-ata_generic-let-ata_generic-handle-new-MBP-w-MCP89.patch	                        (rev 0)
+++ pve-kernel-2.6.32-rh/trunk/ahci-ata_generic-let-ata_generic-handle-new-MBP-w-MCP89.patch	2011-09-20 12:37:05 UTC (rev 6550)
@@ -0,0 +1,90 @@
+From bdc358c1311531b459cbd12a22556d6cd62aa7cb Mon Sep 17 00:00:00 2001
+From: Tejun Heo <tj at kernel.org>
+Date: Thu, 17 Jun 2010 11:42:22 +0200
+Subject: [PATCH] ahci,ata_generic: let ata_generic handle new MBP w/ MCP89
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+commit c6353b4520788e34098bbf61c73fb9618ca7fdd6 upstream.
+
+For yet unknown reason, MCP89 on MBP 7,1 doesn't work w/ ahci under
+linux but the controller doesn't require explicit mode setting and
+works fine with ata_generic.  Make ahci ignore the controller on MBP
+7,1 and let ata_generic take it for now.
+
+Reported in bko#15923.
+
+  https://bugzilla.kernel.org/show_bug.cgi?id=15923
+
+NVIDIA is investigating why ahci mode doesn't work.
+
+Signed-off-by: Tejun Heo <tj at kernel.org>
+Cc: Peer Chen <pchen at nvidia.com>
+Cc: stable at kernel.org
+Reported-by: Anders Østhus <grapz666 at gmail.com>
+Reported-by: Andreas Graf <andreas_graf at csgraf.de>
+Reported-by: Benoit Gschwind <gschwind at gnu-log.net>
+Reported-by: Damien Cassou <damien.cassou at gmail.com>
+Reported-by: tixetsal at juno.com
+Signed-off-by: Jeff Garzik <jgarzik at redhat.com>
+[bwh: Adjust context for 2.6.32]
+---
+ drivers/ata/ahci.c        |   10 ++++++++++
+ drivers/ata/ata_generic.c |    6 ++++++
+ include/linux/pci_ids.h   |    1 +
+ 3 files changed, 17 insertions(+), 0 deletions(-)
+
+diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c
+index cb05205..e3d9816 100644
+--- a/drivers/ata/ahci.c
++++ b/drivers/ata/ahci.c
+@@ -3037,6 +3037,16 @@ static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
+ 	if (pdev->vendor == PCI_VENDOR_ID_MARVELL && !marvell_enable)
+ 		return -ENODEV;
+ 
++	/*
++	 * For some reason, MCP89 on MacBook 7,1 doesn't work with
++	 * ahci, use ata_generic instead.
++	 */
++	if (pdev->vendor == PCI_VENDOR_ID_NVIDIA &&
++	    pdev->device == PCI_DEVICE_ID_NVIDIA_NFORCE_MCP89_SATA &&
++	    pdev->subsystem_vendor == PCI_VENDOR_ID_APPLE &&
++	    pdev->subsystem_device == 0xcb89)
++		return -ENODEV;
++
+ 	/* acquire resources */
+ 	rc = pcim_enable_device(pdev);
+ 	if (rc)
+diff --git a/drivers/ata/ata_generic.c b/drivers/ata/ata_generic.c
+index ecfd22b..b5aa93c 100644
+--- a/drivers/ata/ata_generic.c
++++ b/drivers/ata/ata_generic.c
+@@ -168,6 +168,12 @@ static struct pci_device_id ata_generic[] = {
+ 	{ PCI_DEVICE(PCI_VENDOR_ID_VIA,    PCI_DEVICE_ID_VIA_82C561), },
+ 	{ PCI_DEVICE(PCI_VENDOR_ID_OPTI,   PCI_DEVICE_ID_OPTI_82C558), },
+ 	{ PCI_DEVICE(PCI_VENDOR_ID_CENATEK,PCI_DEVICE_ID_CENATEK_IDE), },
++	/*
++	 * For some reason, MCP89 on MacBook 7,1 doesn't work with
++	 * ahci, use ata_generic instead.
++	 */
++	{ PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP89_SATA,
++	  PCI_VENDOR_ID_APPLE, 0xcb89, },
+ 	{ PCI_DEVICE(PCI_VENDOR_ID_TOSHIBA,PCI_DEVICE_ID_TOSHIBA_PICCOLO), },
+ 	{ PCI_DEVICE(PCI_VENDOR_ID_TOSHIBA,PCI_DEVICE_ID_TOSHIBA_PICCOLO_1), },
+ 	{ PCI_DEVICE(PCI_VENDOR_ID_TOSHIBA,PCI_DEVICE_ID_TOSHIBA_PICCOLO_2),  },
+diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h
+index c398cc3..a8ea95f 100644
+--- a/include/linux/pci_ids.h
++++ b/include/linux/pci_ids.h
+@@ -1262,6 +1262,7 @@
+ #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP77_IDE       0x0759
+ #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP73_SMBUS     0x07D8
+ #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP79_SMBUS     0x0AA2
++#define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP89_SATA	    0x0D85
+ 
+ #define PCI_VENDOR_ID_IMS		0x10e0
+ #define PCI_DEVICE_ID_IMS_TT128		0x9128
+-- 
+1.7.1
+

Added: pve-kernel-2.6.32-rh/trunk/ata-Intel-IDE-R-support.patch
===================================================================
--- pve-kernel-2.6.32-rh/trunk/ata-Intel-IDE-R-support.patch	                        (rev 0)
+++ pve-kernel-2.6.32-rh/trunk/ata-Intel-IDE-R-support.patch	2011-09-20 12:37:05 UTC (rev 6550)
@@ -0,0 +1,100 @@
+From: Alan Cox <alan at linux.intel.com>
+Date: Tue, 28 Sep 2010 13:19:38 +0100
+Subject: [PATCH] ata: Intel IDE-R support
+
+commit 60039a5295b3d82a48fe132c699987d2e1408675 upstream.
+
+Intel IDE-R devices are part of the Intel AMT management setup. They don't
+have any special configuration registers or settings so the ata_generic
+driver will support them fully.
+
+Rather than add a huge table of IDs for each chipset and keep sending in
+new ones this patch autodetects them.
+
+Signed-off-by: Alan Cox <alan at linux.intel.com>
+Acked-by: Tejun Heo <tj at kernel.org>
+Signed-off-by: Jeff Garzik <jgarzik at redhat.com>
+[bwh: Adjust context for 2.6.32]
+---
+--- a/drivers/ata/ata_generic.c
++++ b/drivers/ata/ata_generic.c
+@@ -35,6 +35,7 @@
+ enum {
+ 	ATA_GEN_CLASS_MATCH		= (1 << 0),
+ 	ATA_GEN_FORCE_DMA		= (1 << 1),
++	ATA_GEN_INTEL_IDER		= (1 << 2),
+ };
+ 
+ /**
+@@ -113,6 +114,49 @@ static struct ata_port_operations generic_port_ops = {
+ static int all_generic_ide;		/* Set to claim all devices */
+ 
+ /**
++ *	is_intel_ider		-	identify intel IDE-R devices
++ *	@dev: PCI device
++ *
++ *	Distinguish Intel IDE-R controller devices from other Intel IDE
++ *	devices. IDE-R devices have no timing registers and are in
++ *	most respects virtual. They should be driven by the ata_generic
++ *	driver.
++ *
++ *	IDE-R devices have PCI offset 0xF8.L as zero, later Intel ATA has
++ *	it non zero. All Intel ATA has 0x40 writable (timing), but it is
++ *	not writable on IDE-R devices (this is guaranteed).
++ */
++
++static int is_intel_ider(struct pci_dev *dev)
++{
++	/* For Intel IDE the value at 0xF8 is only zero on IDE-R
++	   interfaces */
++	u32 r;
++	u16 t;
++
++	/* Check the manufacturing ID, it will be zero for IDE-R */
++	pci_read_config_dword(dev, 0xF8, &r);
++	/* Not IDE-R: punt so that ata_(old)piix gets it */
++	if (r != 0)
++		return 0;
++	/* 0xF8 will also be zero on some early Intel IDE devices
++	   but they will have a sane timing register */
++	pci_read_config_word(dev, 0x40, &t);
++	if (t != 0)
++		return 0;
++	/* Finally check if the timing register is writable so that
++	   we eliminate any early devices hot-docked in a docking
++	   station */
++	pci_write_config_word(dev, 0x40, 1);
++	pci_read_config_word(dev, 0x40, &t);
++	if (t) {
++		pci_write_config_word(dev, 0x40, 0);
++		return 0;
++	}
++	return 1;
++}
++
++/**
+  *	ata_generic_init		-	attach generic IDE
+  *	@dev: PCI device found
+  *	@id: match entry
+@@ -138,6 +182,10 @@ static int ata_generic_init_one(struct pci_dev *dev, const struct pci_device_id
+ 	if ((id->driver_data & ATA_GEN_CLASS_MATCH) && all_generic_ide == 0)
+ 		return -ENODEV;
+ 
++	if (id->driver_data & ATA_GEN_INTEL_IDER)
++		if (!is_intel_ider(dev))
++			return -ENODEV;
++
+ 	/* Devices that need care */
+ 	if (dev->vendor == PCI_VENDOR_ID_UMC &&
+ 	    dev->device == PCI_DEVICE_ID_UMC_UM8886A &&
+@@ -188,6 +236,10 @@ static struct pci_device_id ata_generic[] = {
+ 	{ PCI_DEVICE(PCI_VENDOR_ID_TOSHIBA,PCI_DEVICE_ID_TOSHIBA_PICCOLO), },
+ 	{ PCI_DEVICE(PCI_VENDOR_ID_TOSHIBA,PCI_DEVICE_ID_TOSHIBA_PICCOLO_1), },
+ 	{ PCI_DEVICE(PCI_VENDOR_ID_TOSHIBA,PCI_DEVICE_ID_TOSHIBA_PICCOLO_2),  },
++	/* Intel, IDE class device */
++	{ PCI_VENDOR_ID_INTEL, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
++	  PCI_CLASS_STORAGE_IDE << 8, 0xFFFFFF00UL, 
++	  .driver_data = ATA_GEN_INTEL_IDER },
+ 	/* Must come last. If you add entries adjust this table appropriately */
+ 	{ PCI_DEVICE_CLASS(PCI_CLASS_STORAGE_IDE << 8, 0xFFFFFF00UL),
+ 	  .driver_data = ATA_GEN_CLASS_MATCH },

Added: pve-kernel-2.6.32-rh/trunk/ata_generic-drop-hard-coded-DMA-force-logic-for-CENATEK.patch
===================================================================
--- pve-kernel-2.6.32-rh/trunk/ata_generic-drop-hard-coded-DMA-force-logic-for-CENATEK.patch	                        (rev 0)
+++ pve-kernel-2.6.32-rh/trunk/ata_generic-drop-hard-coded-DMA-force-logic-for-CENATEK.patch	2011-09-20 12:37:05 UTC (rev 6550)
@@ -0,0 +1,38 @@
+commit 728e0eaf99631d197e5158e21b4a8c4335a39231
+Author: Tejun Heo <tj at kernel.org>
+Date:   Fri Jul 2 14:41:24 2010 +0200
+
+    ata_generic: drop hard coded DMA force logic for CENATEK
+    
+    Commit 1529c69adc (ata_generic: implement ATA_GEN_* flags and force
+    enable DMA on MBP 7,1) implemented ATA_GEN_FORCE_DMA for forcing DMA
+    mode and applied it to CENATEK but forgot to remove the original hard
+    coded logic.  This is removal of redundant logic and doesn't affect
+    correctness.
+    
+    Signed-off-by: Tejun Heo <tj at kernel.org>
+    Reported-by: Andy Whitcroft <apw at canonical.com>
+    Signed-off-by: Jeff Garzik <jgarzik at redhat.com>
+
+diff --git a/drivers/ata/ata_generic.c b/drivers/ata/ata_generic.c
+index 7107a69..cc5f772 100644
+--- a/drivers/ata/ata_generic.c
++++ b/drivers/ata/ata_generic.c
+@@ -54,7 +54,6 @@ static int generic_set_mode(struct ata_link *link, struct ata_device **unused)
+ 	const struct pci_device_id *id = ap->host->private_data;
+ 	int dma_enabled = 0;
+ 	struct ata_device *dev;
+-	struct pci_dev *pdev = to_pci_dev(ap->host->dev);
+ 
+ 	if (id->driver_data & ATA_GEN_FORCE_DMA) {
+ 		dma_enabled = 0xff;
+@@ -63,9 +62,6 @@ static int generic_set_mode(struct ata_link *link, struct ata_device **unused)
+ 		dma_enabled = ioread8(ap->ioaddr.bmdma_addr + ATA_DMA_STATUS);
+ 	}
+ 
+-	if (pdev->vendor == PCI_VENDOR_ID_CENATEK)
+-		dma_enabled = 0xFF;
+-
+ 	ata_for_each_dev(dev, link, ENABLED) {
+ 		/* We don't really care */
+ 		dev->pio_mode = XFER_PIO_0;

Added: pve-kernel-2.6.32-rh/trunk/ata_generic-implement-ATA_GEN_-flags-and-force-enable-DMA-on-MBP-7,1.patch
===================================================================
--- pve-kernel-2.6.32-rh/trunk/ata_generic-implement-ATA_GEN_-flags-and-force-enable-DMA-on-MBP-7,1.patch	                        (rev 0)
+++ pve-kernel-2.6.32-rh/trunk/ata_generic-implement-ATA_GEN_-flags-and-force-enable-DMA-on-MBP-7,1.patch	2011-09-20 12:37:05 UTC (rev 6550)
@@ -0,0 +1,108 @@
+[Backported to Debian's 2.6.32 by dann frazier <dannf at debian.org>]
+
+commit 1529c69adce1e95f7ae72f0441590c226bbac7fc
+Author: Tejun Heo <tj at kernel.org>
+Date:   Tue Jun 22 12:27:26 2010 +0200
+
+    ata_generic: implement ATA_GEN_* flags and force enable DMA on MBP 7,1
+    
+    IDE mode of MCP89 on MBP 7,1 doesn't set DMA enable bits in the BMDMA
+    status register.  Make the following changes to work around the problem.
+    
+    * Instead of using hard coded 1 in id->driver_data as class code
+      match, use ATA_GEN_CLASS_MATCH and carry the matched id in
+      host->private_data.
+    
+    * Instead of matching PCI_VENDOR_ID_CENATEK, use ATA_GEN_FORCE_DMA
+      flag in id instead.
+    
+    * Add ATA_GEN_FORCE_DMA to the id entry of MBP 7,1.
+    
+    Signed-off-by: Tejun Heo <tj at kernel.org>
+    Cc: Peer Chen <pchen at nvidia.com>
+    Cc: stable at kernel.org
+    Reported-by: Anders Østhus <grapz666 at gmail.com>
+    Reported-by: Andreas Graf <andreas_graf at csgraf.de>
+    Reported-by: Benoit Gschwind <gschwind at gnu-log.net>
+    Reported-by: Damien Cassou <damien.cassou at gmail.com>
+    Reported-by: tixetsal at juno.com
+    Signed-off-by: Jeff Garzik <jgarzik at redhat.com>
+
+diff -urpN a/drivers/ata/ata_generic.c b/drivers/ata/ata_generic.c
+--- a/drivers/ata/ata_generic.c	2010-10-18 17:18:22.160591155 -0600
++++ b/drivers/ata/ata_generic.c	2010-10-18 17:28:35.700130856 -0600
+@@ -32,6 +32,11 @@
+  *	A generic parallel ATA driver using libata
+  */
+ 
++enum {
++	ATA_GEN_CLASS_MATCH		= (1 << 0),
++	ATA_GEN_FORCE_DMA		= (1 << 1),
++};
++
+ /**
+  *	generic_set_mode	-	mode setting
+  *	@link: link to set up
+@@ -46,13 +51,17 @@
+ static int generic_set_mode(struct ata_link *link, struct ata_device **unused)
+ {
+ 	struct ata_port *ap = link->ap;
++	const struct pci_device_id *id = ap->host->private_data;
+ 	int dma_enabled = 0;
+ 	struct ata_device *dev;
+ 	struct pci_dev *pdev = to_pci_dev(ap->host->dev);
+ 
+-	/* Bits 5 and 6 indicate if DMA is active on master/slave */
+-	if (ap->ioaddr.bmdma_addr)
++	if (id->driver_data & ATA_GEN_FORCE_DMA) {
++		dma_enabled = 0xff;
++	} else if (ap->ioaddr.bmdma_addr) {
++		/* Bits 5 and 6 indicate if DMA is active on master/slave */
+ 		dma_enabled = ioread8(ap->ioaddr.bmdma_addr + ATA_DMA_STATUS);
++	}
+ 
+ 	if (pdev->vendor == PCI_VENDOR_ID_CENATEK)
+ 		dma_enabled = 0xFF;
+@@ -126,7 +135,7 @@ static int ata_generic_init_one(struct p
+ 	const struct ata_port_info *ppi[] = { &info, NULL };
+ 
+ 	/* Don't use the generic entry unless instructed to do so */
+-	if (id->driver_data == 1 && all_generic_ide == 0)
++	if ((id->driver_data & ATA_GEN_CLASS_MATCH) && all_generic_ide == 0)
+ 		return -ENODEV;
+ 
+ 	/* Devices that need care */
+@@ -155,7 +164,7 @@ static int ata_generic_init_one(struct p
+ 			return rc;
+ 		pcim_pin_device(dev);
+ 	}
+-	return ata_pci_sff_init_one(dev, ppi, &generic_sht, NULL);
++	return ata_pci_sff_init_one(dev, ppi, &generic_sht, (void *)id);
+ }
+ 
+ static struct pci_device_id ata_generic[] = {
+@@ -167,18 +176,21 @@ static struct pci_device_id ata_generic[
+ 	{ PCI_DEVICE(PCI_VENDOR_ID_HINT,   PCI_DEVICE_ID_HINT_VXPROII_IDE), },
+ 	{ PCI_DEVICE(PCI_VENDOR_ID_VIA,    PCI_DEVICE_ID_VIA_82C561), },
+ 	{ PCI_DEVICE(PCI_VENDOR_ID_OPTI,   PCI_DEVICE_ID_OPTI_82C558), },
+-	{ PCI_DEVICE(PCI_VENDOR_ID_CENATEK,PCI_DEVICE_ID_CENATEK_IDE), },
++	{ PCI_DEVICE(PCI_VENDOR_ID_CENATEK,PCI_DEVICE_ID_CENATEK_IDE),
++	  .driver_data = ATA_GEN_FORCE_DMA },
+ 	/*
+ 	 * For some reason, MCP89 on MacBook 7,1 doesn't work with
+ 	 * ahci, use ata_generic instead.
+ 	 */
+ 	{ PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP89_SATA,
+-	  PCI_VENDOR_ID_APPLE, 0xcb89, },
++	  PCI_VENDOR_ID_APPLE, 0xcb89,
++	  .driver_data = ATA_GEN_FORCE_DMA },
+ 	{ PCI_DEVICE(PCI_VENDOR_ID_TOSHIBA,PCI_DEVICE_ID_TOSHIBA_PICCOLO), },
+ 	{ PCI_DEVICE(PCI_VENDOR_ID_TOSHIBA,PCI_DEVICE_ID_TOSHIBA_PICCOLO_1), },
+ 	{ PCI_DEVICE(PCI_VENDOR_ID_TOSHIBA,PCI_DEVICE_ID_TOSHIBA_PICCOLO_2),  },
+ 	/* Must come last. If you add entries adjust this table appropriately */
+-	{ PCI_ANY_ID,		PCI_ANY_ID,			   PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_STORAGE_IDE << 8, 0xFFFFFF00UL, 1},
++	{ PCI_DEVICE_CLASS(PCI_CLASS_STORAGE_IDE << 8, 0xFFFFFF00UL),
++	  .driver_data = ATA_GEN_CLASS_MATCH },
+ 	{ 0, },
+ };
+ 

Modified: pve-kernel-2.6.32-rh/trunk/changelog.Debian
===================================================================
--- pve-kernel-2.6.32-rh/trunk/changelog.Debian	2011-09-20 05:40:55 UTC (rev 6549)
+++ pve-kernel-2.6.32-rh/trunk/changelog.Debian	2011-09-20 12:37:05 UTC (rev 6550)
@@ -1,3 +1,9 @@
+pve-kernel-2.6.32 (2.6.32-46) unstable; urgency=low
+
+  * update ata_generic to support intel IDE-R
+
+ -- Proxmox Support Team <support at proxmox.com>  Tue, 20 Sep 2011 14:36:11 +0200
+
 pve-kernel-2.6.32 (2.6.32-45) unstable; urgency=low
 
   * update to vzkernel-2.6.32-042stab037.1.src.rpm




More information about the pve-devel mailing list