Home Home > GIT Browse > stable
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTejun Heo <teheo@suse.de>2007-09-21 22:16:01 +0000
committerTejun Heo <teheo@suse.de>2007-09-21 22:16:01 +0000
commit368e90339a79b48e4b0d99d74d9b93217cb76f0d (patch)
tree372e1f53e4895325e083cf67cbd0b1d4b9462f07
parentc6ed247858ee76e177548d51480993e3e96e44f7 (diff)
- patches.drivers/libata-pata_sis-fix-mode-programming: pata_sis:
fix mode programming (308384). - patches.drivers/libata-fix-set_max_sectors: libata: fix ata_set_max_sectors() (325552). - patches.drivers/libata-pata_via-kill-SATA_PATA_SHARING: sata_via: kill SATA_PATA_SHARING register handling (309069, 254158). - patches.drivers/libata-add-ST9120822AS-to-NCQ-blacklist: libata: add ST9120822AS 3.CLF to NCQ blacklist (163887).
-rw-r--r--kernel-source.changes13
-rw-r--r--patches.drivers/libata-add-ST9120822AS-to-NCQ-blacklist24
-rw-r--r--patches.drivers/libata-fix-set_max_sectors32
-rw-r--r--patches.drivers/libata-pata_sis-fix-mode-programming113
-rw-r--r--patches.drivers/libata-pata_via-kill-SATA_PATA_SHARING74
-rw-r--r--series.conf4
6 files changed, 260 insertions, 0 deletions
diff --git a/kernel-source.changes b/kernel-source.changes
index ce5e76b5c2..1f07d63b19 100644
--- a/kernel-source.changes
+++ b/kernel-source.changes
@@ -1,4 +1,17 @@
-------------------------------------------------------------------
+Sat Sep 22 00:05:45 CEST 2007 - teheo@suse.de
+
+- patches.drivers/libata-pata_sis-fix-mode-programming: pata_sis:
+ fix mode programming (308384).
+- patches.drivers/libata-fix-set_max_sectors: libata: fix
+ ata_set_max_sectors() (325552).
+- patches.drivers/libata-pata_via-kill-SATA_PATA_SHARING:
+ sata_via: kill SATA_PATA_SHARING register handling (309069,
+ 254158).
+- patches.drivers/libata-add-ST9120822AS-to-NCQ-blacklist:
+ libata: add ST9120822AS 3.CLF to NCQ blacklist (163887).
+
+-------------------------------------------------------------------
Fri Sep 21 19:21:10 CEST 2007 - od@suse.de
- rpm/post.sh: revert last change: during installation and update
diff --git a/patches.drivers/libata-add-ST9120822AS-to-NCQ-blacklist b/patches.drivers/libata-add-ST9120822AS-to-NCQ-blacklist
new file mode 100644
index 0000000000..af9ce74e9e
--- /dev/null
+++ b/patches.drivers/libata-add-ST9120822AS-to-NCQ-blacklist
@@ -0,0 +1,24 @@
+Subject: [PATCH] libata: add ST9120822AS 3.CLF to NCQ blacklist
+References: 163887
+Patch-Mainline: 2.6.23
+
+ST9120822AS 3.CLF does spurious NCQ completions. Add it to NCQ
+blacklist.
+
+Signed-off-by: Tejun Heo <teheo@suse.de>
+---
+ drivers/ata/libata-core.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+Index: linux-2.6.22/drivers/ata/libata-core.c
+===================================================================
+--- linux-2.6.22.orig/drivers/ata/libata-core.c
++++ linux-2.6.22/drivers/ata/libata-core.c
+@@ -3926,6 +3926,7 @@ static const struct ata_blacklist_entry
+ { "Hitachi HTS541616J9SA00", "SB4OC70P", ATA_HORKAGE_NONCQ, },
+ { "WDC WD740ADFD-00NLR1", NULL, ATA_HORKAGE_NONCQ, },
+ { "FUJITSU MHV2080BH", "00840028", ATA_HORKAGE_NONCQ, },
++ { "ST9120822AS", "3.CLF", ATA_HORKAGE_NONCQ, },
+ { "ST9160821AS", "3.CLF", ATA_HORKAGE_NONCQ, },
+ { "SAMSUNG HD401LJ", "ZZ100-15", ATA_HORKAGE_NONCQ, },
+ { "ST3160812AS", "3.ADJ", ATA_HORKAGE_NONCQ, },
diff --git a/patches.drivers/libata-fix-set_max_sectors b/patches.drivers/libata-fix-set_max_sectors
new file mode 100644
index 0000000000..795425fa0b
--- /dev/null
+++ b/patches.drivers/libata-fix-set_max_sectors
@@ -0,0 +1,32 @@
+From: Tejun Heo <teheo@suse.de>
+Subject: [PATCH] libata: fix ata_set_max_sectors()
+References: 325552
+Patch-Mainline: will be submitted after verified
+
+In ata_set_max_sectors(), the highest nibble in LBA28 mode was
+missing. This made drives sized between 8G and 128G with HPA turned
+on to be resized to under 8G. Fix it.
+
+Signed-off-by: Tejun Heo <teheo@suse.de>
+---
+ drivers/ata/libata-core.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+Index: linux-2.6.22/drivers/ata/libata-core.c
+===================================================================
+--- linux-2.6.22.orig/drivers/ata/libata-core.c
++++ linux-2.6.22/drivers/ata/libata-core.c
+@@ -975,9 +975,12 @@ static int ata_set_max_sectors(struct at
+ tf.hob_lbal = (new_sectors >> 24) & 0xff;
+ tf.hob_lbam = (new_sectors >> 32) & 0xff;
+ tf.hob_lbah = (new_sectors >> 40) & 0xff;
+- } else
++ } else {
+ tf.command = ATA_CMD_SET_MAX;
+
++ tf.device |= (new_sectors >> 24) & 0xf;
++ }
++
+ tf.protocol |= ATA_PROT_NODATA;
+ tf.device |= ATA_LBA;
+
diff --git a/patches.drivers/libata-pata_sis-fix-mode-programming b/patches.drivers/libata-pata_sis-fix-mode-programming
new file mode 100644
index 0000000000..c83a36b9c0
--- /dev/null
+++ b/patches.drivers/libata-pata_sis-fix-mode-programming
@@ -0,0 +1,113 @@
+From: Tejun Heo <teheo@suse.de>
+Subject: [PATCH] pata_sis: fix mode programming
+References: 308384
+Patch-Mainline: 2.6.23, part of it still pending
+
+This is combination of the following two patches and fixes mode
+programming on pata_sis.
+
+ http://article.gmane.org/gmane.linux.ide/21345
+ http://article.gmane.org/gmane.linux.ide/22879
+
+Signed-off-by: Tejun Heo <teheo@suse.de>
+---
+ drivers/ata/pata_sis.c | 23 +++++++++++------------
+ 1 file changed, 11 insertions(+), 12 deletions(-)
+
+Index: linux-2.6.22/drivers/ata/pata_sis.c
+===================================================================
+--- linux-2.6.22.orig/drivers/ata/pata_sis.c
++++ linux-2.6.22/drivers/ata/pata_sis.c
+@@ -2,6 +2,7 @@
+ * pata_sis.c - SiS ATA driver
+ *
+ * (C) 2005 Red Hat <alan@redhat.com>
++ * (C) 2007 Bartlomiej Zolnierkiewicz
+ *
+ * Based upon linux/drivers/ide/pci/sis5513.c
+ * Copyright (C) 1999-2000 Andre Hedrick <andre@linux-ide.org>
+@@ -35,7 +36,7 @@
+ #include "sis.h"
+
+ #define DRV_NAME "pata_sis"
+-#define DRV_VERSION "0.5.1"
++#define DRV_VERSION "0.5.2"
+
+ struct sis_chipset {
+ u16 device; /* PCI host ID */
+@@ -239,7 +240,7 @@ static void sis_old_set_piomode (struct
+ }
+
+ /**
+- * sis_100_set_pioode - Initialize host controller PATA PIO timings
++ * sis_100_set_piomode - Initialize host controller PATA PIO timings
+ * @ap: Port whose timings we are configuring
+ * @adev: Device we are configuring for.
+ *
+@@ -264,7 +265,7 @@ static void sis_100_set_piomode (struct
+ }
+
+ /**
+- * sis_133_set_pioode - Initialize host controller PATA PIO timings
++ * sis_133_set_piomode - Initialize host controller PATA PIO timings
+ * @ap: Port whose timings we are configuring
+ * @adev: Device we are configuring for.
+ *
+@@ -336,7 +337,7 @@ static void sis_old_set_dmamode (struct
+ int drive_pci = sis_old_port_base(adev);
+ u16 timing;
+
+- const u16 mwdma_bits[] = { 0x707, 0x202, 0x202 };
++ const u16 mwdma_bits[] = { 0x008, 0x302, 0x301 };
+ const u16 udma_bits[] = { 0xE000, 0xC000, 0xA000 };
+
+ pci_read_config_word(pdev, drive_pci, &timing);
+@@ -344,15 +345,15 @@ static void sis_old_set_dmamode (struct
+ if (adev->dma_mode < XFER_UDMA_0) {
+ /* bits 3-0 hold recovery timing bits 8-10 active timing and
+ the higer bits are dependant on the device */
+- timing &= ~ 0x870F;
++ timing &= ~0x870F;
+ timing |= mwdma_bits[speed];
+- pci_write_config_word(pdev, drive_pci, timing);
+ } else {
+ /* Bit 15 is UDMA on/off, bit 13-14 are cycle time */
+ speed = adev->dma_mode - XFER_UDMA_0;
+ timing &= ~0x6000;
+ timing |= udma_bits[speed];
+ }
++ pci_write_config_word(pdev, drive_pci, timing);
+ }
+
+ /**
+@@ -375,8 +376,9 @@ static void sis_66_set_dmamode (struct a
+ int drive_pci = sis_old_port_base(adev);
+ u16 timing;
+
+- const u16 mwdma_bits[] = { 0x707, 0x202, 0x202 };
+- const u16 udma_bits[] = { 0xF000, 0xD000, 0xB000, 0xA000, 0x9000};
++ /* MWDMA 0-2 and UDMA 0-5 */
++ const u16 mwdma_bits[] = { 0x008, 0x302, 0x301 };
++ const u16 udma_bits[] = { 0xF000, 0xD000, 0xB000, 0xA000, 0x9000, 0x8000 };
+
+ pci_read_config_word(pdev, drive_pci, &timing);
+
+@@ -434,8 +436,7 @@ static void sis_100_set_dmamode (struct
+ * @adev: Device to program
+ *
+ * Set UDMA/MWDMA mode for device, in host controller PCI config space.
+- * Handles early SiS 961 bridges. Supports MWDMA as well unlike
+- * the old ide/pci driver.
++ * Handles early SiS 961 bridges.
+ *
+ * LOCKING:
+ * None (inherited from caller).
+@@ -469,8 +470,6 @@ static void sis_133_early_set_dmamode (s
+ * @adev: Device to program
+ *
+ * Set UDMA/MWDMA mode for device, in host controller PCI config space.
+- * Handles early SiS 961 bridges. Supports MWDMA as well unlike
+- * the old ide/pci driver.
+ *
+ * LOCKING:
+ * None (inherited from caller).
diff --git a/patches.drivers/libata-pata_via-kill-SATA_PATA_SHARING b/patches.drivers/libata-pata_via-kill-SATA_PATA_SHARING
new file mode 100644
index 0000000000..a0d401f7cb
--- /dev/null
+++ b/patches.drivers/libata-pata_via-kill-SATA_PATA_SHARING
@@ -0,0 +1,74 @@
+From: Tejun Heo <teheo@suse.de>
+Subject: [PATCH] sata_via: kill SATA_PATA_SHARING register handling
+References: 309069, 254158
+Patch-Mainline: pending
+
+The SATA_PATA_SHARING register doesn't have anything to do with the
+SATA part of the controller. It indicates whether an extern SATA PHY
+is attached to the PATA part of the controller and if so how it is
+wired. As the PATA part is driven by pata_via, sata_via has no reason
+to care about that. Also, pata_via should work fine under all
+configurations.
+
+This patch removes unnecessary attach failures. It seems recent via
+chipsets are defaulting to different values or are actually connected
+to SATA PHY triggering this more often.
+
+Signed-off-by: Tejun Heo <htejun@gmail.com>
+---
+This one is also scheduled for SLES9SP4 and SLES10SP1 for IBM POS.
+
+ drivers/ata/sata_via.c | 16 ++--------------
+ 1 file changed, 2 insertions(+), 14 deletions(-)
+
+diff --git a/drivers/ata/sata_via.c b/drivers/ata/sata_via.c
+index f075702..1dc9b4f 100644
+--- a/drivers/ata/sata_via.c
++++ b/drivers/ata/sata_via.c
+@@ -57,7 +57,6 @@ enum {
+ SATA_CHAN_ENAB = 0x40, /* SATA channel enable */
+ SATA_INT_GATE = 0x41, /* SATA interrupt gating */
+ SATA_NATIVE_MODE = 0x42, /* Native mode enable */
+- SATA_PATA_SHARING = 0x49, /* PATA/SATA sharing func ctrl */
+ PATA_UDMA_TIMING = 0xB3, /* PATA timing for DMA/ cable detect */
+ PATA_PIO_TIMING = 0xAB, /* PATA timing register */
+
+@@ -68,7 +67,6 @@ enum {
+ NATIVE_MODE_ALL = (1 << 7) | (1 << 6) | (1 << 5) | (1 << 4),
+
+ SATA_EXT_PHY = (1 << 6), /* 0==use PATA, 1==ext phy */
+- SATA_2DEV = (1 << 5), /* SATA is master/slave */
+ };
+
+ static int svia_init_one (struct pci_dev *pdev, const struct pci_device_id *ent);
+@@ -508,7 +506,6 @@ static int svia_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
+ struct ata_host *host;
+ int board_id = (int) ent->driver_data;
+ const int *bar_sizes;
+- u8 tmp8;
+
+ if (!printed_version++)
+ dev_printk(KERN_DEBUG, &pdev->dev, "version " DRV_VERSION "\n");
+@@ -517,19 +514,10 @@ static int svia_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
+ if (rc)
+ return rc;
+
+- if (board_id == vt6420) {
+- pci_read_config_byte(pdev, SATA_PATA_SHARING, &tmp8);
+- if (tmp8 & SATA_2DEV) {
+- dev_printk(KERN_ERR, &pdev->dev,
+- "SATA master/slave not supported (0x%x)\n",
+- (int) tmp8);
+- return -EIO;
+- }
+-
++ if (board_id == vt6420)
+ bar_sizes = &svia_bar_sizes[0];
+- } else {
++ else
+ bar_sizes = &vt6421_bar_sizes[0];
+- }
+
+ for (i = 0; i < ARRAY_SIZE(svia_bar_sizes); i++)
+ if ((pci_resource_start(pdev, i) == 0) ||
+
diff --git a/series.conf b/series.conf
index 56951db448..e587c005b7 100644
--- a/series.conf
+++ b/series.conf
@@ -504,6 +504,10 @@
patches.drivers/libata-more-machines-for-short-cable-list
patches.drivers/libata-add-pci-ids-for-intel-tolapi
patches.drivers/libata-pata_marvell-add-PCI-IDs
+ patches.drivers/libata-add-ST9120822AS-to-NCQ-blacklist
+ patches.drivers/libata-pata_sis-fix-mode-programming
+ patches.drivers/libata-fix-set_max_sectors
+ patches.drivers/libata-pata_via-kill-SATA_PATA_SHARING
patches.fixes/mptbase-vmware-fix