From: Greg Kroah-Hartman Date: Wed, 23 Jan 2013 17:48:30 +0000 (-0800) Subject: 3.7-stable patches X-Git-Tag: v3.0.61~26 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=5468f6d284abdf1c453183801ac946f6a5a7fd33;p=thirdparty%2Fkernel%2Fstable-queue.git 3.7-stable patches added patches: libata-ahci-add-support-for-enmotus-bobcat-device.patch libata-ahci-fix-lack-of-command-retry-after-a-success-error-handler.patch libata-replace-sata_settings-with-devslp_timing.patch --- diff --git a/queue-3.7/libata-ahci-add-support-for-enmotus-bobcat-device.patch b/queue-3.7/libata-ahci-add-support-for-enmotus-bobcat-device.patch new file mode 100644 index 00000000000..86677f1b047 --- /dev/null +++ b/queue-3.7/libata-ahci-add-support-for-enmotus-bobcat-device.patch @@ -0,0 +1,53 @@ +From 7f9c9f8e24590e7dcd26ca408458c43df5b83e61 Mon Sep 17 00:00:00 2001 +From: Hugh Daschbach +Date: Fri, 4 Jan 2013 14:39:09 -0800 +Subject: libata: ahci: Add support for Enmotus Bobcat device. + +From: Hugh Daschbach + +commit 7f9c9f8e24590e7dcd26ca408458c43df5b83e61 upstream. + +Silicon does not support standard AHCI BAR assignment. Add +vendor/device exception to force BAR 2. + +Signed-off-by: Hugh Daschbach +Signed-off-by: Jeff Garzik +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/ata/ahci.c | 8 +++++++- + 1 file changed, 7 insertions(+), 1 deletion(-) + +--- a/drivers/ata/ahci.c ++++ b/drivers/ata/ahci.c +@@ -53,6 +53,7 @@ + + enum { + AHCI_PCI_BAR_STA2X11 = 0, ++ AHCI_PCI_BAR_ENMOTUS = 2, + AHCI_PCI_BAR_STANDARD = 5, + }; + +@@ -410,6 +411,9 @@ static const struct pci_device_id ahci_p + { PCI_VDEVICE(ASMEDIA, 0x0611), board_ahci }, /* ASM1061 */ + { PCI_VDEVICE(ASMEDIA, 0x0612), board_ahci }, /* ASM1062 */ + ++ /* Enmotus */ ++ { PCI_DEVICE(0x1c44, 0x8000), board_ahci }, ++ + /* Generic, PCI class code for AHCI */ + { PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, + PCI_CLASS_STORAGE_SATA_AHCI, 0xffffff, board_ahci }, +@@ -1098,9 +1102,11 @@ static int ahci_init_one(struct pci_dev + dev_info(&pdev->dev, + "PDC42819 can only drive SATA devices with this driver\n"); + +- /* The Connext uses non-standard BAR */ ++ /* Both Connext and Enmotus devices use non-standard BARs */ + if (pdev->vendor == PCI_VENDOR_ID_STMICRO && pdev->device == 0xCC06) + ahci_pci_bar = AHCI_PCI_BAR_STA2X11; ++ else if (pdev->vendor == 0x1c44 && pdev->device == 0x8000) ++ ahci_pci_bar = AHCI_PCI_BAR_ENMOTUS; + + /* acquire resources */ + rc = pcim_enable_device(pdev); diff --git a/queue-3.7/libata-ahci-fix-lack-of-command-retry-after-a-success-error-handler.patch b/queue-3.7/libata-ahci-fix-lack-of-command-retry-after-a-success-error-handler.patch new file mode 100644 index 00000000000..8ce1bea74f0 --- /dev/null +++ b/queue-3.7/libata-ahci-fix-lack-of-command-retry-after-a-success-error-handler.patch @@ -0,0 +1,32 @@ +From 1eaca39a84170b369fe61fb1da3c1e8606859e99 Mon Sep 17 00:00:00 2001 +From: Bian Yu +Date: Wed, 12 Dec 2012 22:26:58 -0500 +Subject: libata: ahci: Fix lack of command retry after a success error handler. + +From: Bian Yu + +commit 1eaca39a84170b369fe61fb1da3c1e8606859e99 upstream. + +It should be a mistake introduced by commit 8d899e70c1b3afff. + +qc->flags can't be set AC_ERR_* + +Signed-off-by: Bian Yu +Signed-off-by: Jeff Garzik +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/ata/libata-eh.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/ata/libata-eh.c ++++ b/drivers/ata/libata-eh.c +@@ -2094,7 +2094,7 @@ static unsigned int ata_eh_speed_down(st + */ + static inline int ata_eh_worth_retry(struct ata_queued_cmd *qc) + { +- if (qc->flags & AC_ERR_MEDIA) ++ if (qc->err_mask & AC_ERR_MEDIA) + return 0; /* don't retry media errors */ + if (qc->flags & ATA_QCFLAG_IO) + return 1; /* otherwise retry anything from fs stack */ diff --git a/queue-3.7/libata-replace-sata_settings-with-devslp_timing.patch b/queue-3.7/libata-replace-sata_settings-with-devslp_timing.patch new file mode 100644 index 00000000000..c3865e59693 --- /dev/null +++ b/queue-3.7/libata-replace-sata_settings-with-devslp_timing.patch @@ -0,0 +1,125 @@ +From 803739d25c2343da6d2f95eebdcbc08bf67097d4 Mon Sep 17 00:00:00 2001 +From: Shane Huang +Date: Mon, 17 Dec 2012 23:18:59 +0800 +Subject: libata: replace sata_settings with devslp_timing + +From: Shane Huang + +commit 803739d25c2343da6d2f95eebdcbc08bf67097d4 upstream. + +NCQ capability was used to check availability of SATA Settings page +from Identify Device Data Log, which contains DevSlp timing variables. +It does not work on some HDDs and leads to error messages. + +IDENTIFY word 78 bit 5(Hardware Feature Control) can't work either +because it is only the sufficient condition of Identify Device data +log, not the necessary condition. + +This patch replaced ata_device->sata_settings with ->devslp_timing +to only save DevSlp timing variables(8 bytes), instead of the whole +SATA Settings page(512 bytes). + +Addresses https://bugzilla.kernel.org/show_bug.cgi?id=51881 + +Reported-by: Borislav Petkov +Signed-off-by: Shane Huang +Signed-off-by: Jeff Garzik +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/ata/libahci.c | 6 +++--- + drivers/ata/libata-core.c | 22 +++++++++++++--------- + include/linux/ata.h | 8 +++++--- + include/linux/libata.h | 4 ++-- + 4 files changed, 23 insertions(+), 17 deletions(-) + +--- a/drivers/ata/libahci.c ++++ b/drivers/ata/libahci.c +@@ -1951,13 +1951,13 @@ static void ahci_set_aggressive_devslp(s + /* Use the nominal value 10 ms if the read MDAT is zero, + * the nominal value of DETO is 20 ms. + */ +- if (dev->sata_settings[ATA_LOG_DEVSLP_VALID] & ++ if (dev->devslp_timing[ATA_LOG_DEVSLP_VALID] & + ATA_LOG_DEVSLP_VALID_MASK) { +- mdat = dev->sata_settings[ATA_LOG_DEVSLP_MDAT] & ++ mdat = dev->devslp_timing[ATA_LOG_DEVSLP_MDAT] & + ATA_LOG_DEVSLP_MDAT_MASK; + if (!mdat) + mdat = 10; +- deto = dev->sata_settings[ATA_LOG_DEVSLP_DETO]; ++ deto = dev->devslp_timing[ATA_LOG_DEVSLP_DETO]; + if (!deto) + deto = 20; + } else { +--- a/drivers/ata/libata-core.c ++++ b/drivers/ata/libata-core.c +@@ -2324,24 +2324,28 @@ int ata_dev_configure(struct ata_device + } + } + +- /* check and mark DevSlp capability */ +- if (ata_id_has_devslp(dev->id)) +- dev->flags |= ATA_DFLAG_DEVSLP; +- +- /* Obtain SATA Settings page from Identify Device Data Log, +- * which contains DevSlp timing variables etc. +- * Exclude old devices with ata_id_has_ncq() ++ /* Check and mark DevSlp capability. Get DevSlp timing variables ++ * from SATA Settings page of Identify Device Data Log. + */ +- if (ata_id_has_ncq(dev->id)) { ++ if (ata_id_has_devslp(dev->id)) { ++ u8 sata_setting[ATA_SECT_SIZE]; ++ int i, j; ++ ++ dev->flags |= ATA_DFLAG_DEVSLP; + err_mask = ata_read_log_page(dev, + ATA_LOG_SATA_ID_DEV_DATA, + ATA_LOG_SATA_SETTINGS, +- dev->sata_settings, ++ sata_setting, + 1); + if (err_mask) + ata_dev_dbg(dev, + "failed to get Identify Device Data, Emask 0x%x\n", + err_mask); ++ else ++ for (i = 0; i < ATA_LOG_DEVSLP_SIZE; i++) { ++ j = ATA_LOG_DEVSLP_OFFSET + i; ++ dev->devslp_timing[i] = sata_setting[j]; ++ } + } + + dev->cdb_len = 16; +--- a/include/linux/ata.h ++++ b/include/linux/ata.h +@@ -297,10 +297,12 @@ enum { + ATA_LOG_SATA_NCQ = 0x10, + ATA_LOG_SATA_ID_DEV_DATA = 0x30, + ATA_LOG_SATA_SETTINGS = 0x08, +- ATA_LOG_DEVSLP_MDAT = 0x30, ++ ATA_LOG_DEVSLP_OFFSET = 0x30, ++ ATA_LOG_DEVSLP_SIZE = 0x08, ++ ATA_LOG_DEVSLP_MDAT = 0x00, + ATA_LOG_DEVSLP_MDAT_MASK = 0x1F, +- ATA_LOG_DEVSLP_DETO = 0x31, +- ATA_LOG_DEVSLP_VALID = 0x37, ++ ATA_LOG_DEVSLP_DETO = 0x01, ++ ATA_LOG_DEVSLP_VALID = 0x07, + ATA_LOG_DEVSLP_VALID_MASK = 0x80, + + /* READ/WRITE LONG (obsolete) */ +--- a/include/linux/libata.h ++++ b/include/linux/libata.h +@@ -652,8 +652,8 @@ struct ata_device { + u32 gscr[SATA_PMP_GSCR_DWORDS]; /* PMP GSCR block */ + }; + +- /* Identify Device Data Log (30h), SATA Settings (page 08h) */ +- u8 sata_settings[ATA_SECT_SIZE]; ++ /* DEVSLP Timing Variables from Identify Device Data Log */ ++ u8 devslp_timing[ATA_LOG_DEVSLP_SIZE]; + + /* error history */ + int spdn_cnt; diff --git a/queue-3.7/series b/queue-3.7/series index 474a5df70f3..aab9de3e083 100644 --- a/queue-3.7/series +++ b/queue-3.7/series @@ -1,3 +1,6 @@ make-sure-that-linuxrc-has-std-in-out-err.patch ensure-that-kernel_init_freeable-is-not-inlined-into-non-__init-code.patch drm-i915-invalidate-the-relocation-presumed_offsets-along-the-slow-path.patch +libata-ahci-fix-lack-of-command-retry-after-a-success-error-handler.patch +libata-ahci-add-support-for-enmotus-bobcat-device.patch +libata-replace-sata_settings-with-devslp_timing.patch