[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