]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.7-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 23 Jan 2013 17:48:30 +0000 (09:48 -0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 23 Jan 2013 17:48:30 +0000 (09:48 -0800)
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

queue-3.7/libata-ahci-add-support-for-enmotus-bobcat-device.patch [new file with mode: 0644]
queue-3.7/libata-ahci-fix-lack-of-command-retry-after-a-success-error-handler.patch [new file with mode: 0644]
queue-3.7/libata-replace-sata_settings-with-devslp_timing.patch [new file with mode: 0644]
queue-3.7/series

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 (file)
index 0000000..86677f1
--- /dev/null
@@ -0,0 +1,53 @@
+From 7f9c9f8e24590e7dcd26ca408458c43df5b83e61 Mon Sep 17 00:00:00 2001
+From: Hugh Daschbach <hugh.daschbach@enmotus.com>
+Date: Fri, 4 Jan 2013 14:39:09 -0800
+Subject: libata: ahci: Add support for Enmotus Bobcat device.
+
+From: Hugh Daschbach <hugh.daschbach@enmotus.com>
+
+commit 7f9c9f8e24590e7dcd26ca408458c43df5b83e61 upstream.
+
+Silicon does not support standard AHCI BAR assignment.  Add
+vendor/device exception to force BAR 2.
+
+Signed-off-by: Hugh Daschbach <hugh.daschbach@enmotus.com>
+Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 (file)
index 0000000..8ce1bea
--- /dev/null
@@ -0,0 +1,32 @@
+From 1eaca39a84170b369fe61fb1da3c1e8606859e99 Mon Sep 17 00:00:00 2001
+From: Bian Yu <bianyu@kedacom.com>
+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 <bianyu@kedacom.com>
+
+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 <bianyu@kedacom.com>
+Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 (file)
index 0000000..c3865e5
--- /dev/null
@@ -0,0 +1,125 @@
+From 803739d25c2343da6d2f95eebdcbc08bf67097d4 Mon Sep 17 00:00:00 2001
+From: Shane Huang <shane.huang@amd.com>
+Date: Mon, 17 Dec 2012 23:18:59 +0800
+Subject: libata: replace sata_settings with devslp_timing
+
+From: Shane Huang <shane.huang@amd.com>
+
+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 <bp@alien8.de>
+Signed-off-by: Shane Huang <shane.huang@amd.com>
+Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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;
index 474a5df70f3f196f29963fb5d1f8afb821acd0f4..aab9de3e083c9f9d9ca776dd6c8579299cd66694 100644 (file)
@@ -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