| summaryrefslogtreecommitdiff |
| author | Tejun Heo <teheo@suse.de> | 2007-09-21 22:16:01 (GMT) |
|---|---|---|
| committer | Tejun Heo <teheo@suse.de> | 2007-09-21 22:16:01 (GMT) |
| commit | 368e90339a79b48e4b0d99d74d9b93217cb76f0d (patch) (side-by-side diff) | |
| tree | 372e1f53e4895325e083cf67cbd0b1d4b9462f07 | |
| parent | c6ed247858ee76e177548d51480993e3e96e44f7 (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.changes | 13 | ||||
| -rw-r--r-- | patches.drivers/libata-add-ST9120822AS-to-NCQ-blacklist | 24 | ||||
| -rw-r--r-- | patches.drivers/libata-fix-set_max_sectors | 32 | ||||
| -rw-r--r-- | patches.drivers/libata-pata_sis-fix-mode-programming | 113 | ||||
| -rw-r--r-- | patches.drivers/libata-pata_via-kill-SATA_PATA_SHARING | 74 | ||||
| -rw-r--r-- | series.conf | 4 |
6 files changed, 260 insertions, 0 deletions
diff --git a/kernel-source.changes b/kernel-source.changes index ce5e76b..1f07d63 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 0000000..af9ce74 --- a/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 0000000..795425f --- a/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 0000000..c83a36b --- a/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 0000000..a0d401f --- a/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 56951db..e587c00 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 |