* [PATCH Resend] ahci: Acer SA5-271 SSD Not Detected Fix
@ 2017-05-09 12:47 Sui Chen
2017-05-09 14:20 ` Tejun Heo
0 siblings, 1 reply; 2+ messages in thread
From: Sui Chen @ 2017-05-09 12:47 UTC (permalink / raw)
To: linux-ide; +Cc: tj
(Correction in this resend: fixed function name acer_sa5_271_workaround; fixed
the always-true condition in the function; fixed description.)
On the Acer Switch Alpha 12 (model number: SA5-271), the internal SSD may not
get detected because the port_map and CAP.nr_ports combination causes the driver
to skip the port that is actually connected to the SSD. More specifically,
either all SATA ports are identified as DUMMY, or all ports get ``link down''
and never get up again.
This problem occurs occasionally. When this problem occurs, CAP may hold a
value of 0xC734FF00 or 0xC734FF01 and port_map may hold a value of 0x00 or 0x01.
When this problem does not occur, CAP holds a value of 0xC734FF02 and port_map
may hold a value of 0x07. Overriding the CAP value to 0xC734FF02 and port_map to
0x7 significantly reduces the occurrence of this problem.
Link: https://bugzilla.kernel.org/attachment.cgi?id=253091
Signed-off-by: Sui Chen <suichen6@gmail.com>
Tested-by: Damian Ivanov <damianatorrpm@gmail.com>
---
diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c
index 2fc5240..2b4bcb6 100644
--- a/drivers/ata/ahci.c
+++ b/drivers/ata/ahci.c
@@ -1364,6 +1364,39 @@ static inline void ahci_gtf_filter_workaround(struct ata_host *host)
{}
#endif
+/*
+ * On the Acer Aspire Switch Alpha 12, sometimes all SATA ports are detected
+ * as DUMMY, or detected but eventually get a ``link down'' and never get up
+ * again. When this happens, CAP.NP may hold a value of 0x00 or 0x01, and the
+ * port_map may hold a value of 0x00.
+ *
+ * Overriding CAP.NP to 0x02 and the port_map to 0x7 will reveal all 3 ports
+ * and can significantly reduce the occurrence of the problem.
+ *
+ * https://bugzilla.kernel.org/show_bug.cgi?id=189471
+ */
+static void acer_sa5_271_workaround(struct ahci_host_priv *hpriv,
+ struct pci_dev *pdev)
+{
+ static const struct dmi_system_id sysids[] = {
+ {
+ .ident = "Acer Switch Alpha 12",
+ .matches = {
+ DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
+ DMI_MATCH(DMI_PRODUCT_NAME, "Switch SA5-271")
+ },
+ },
+ { }
+ };
+ if (dmi_check_system(sysids)) {
+ dev_info(&pdev->dev, "enabling Acer Switch Alpha 12 workaround\n");
+ if ((hpriv->saved_cap & 0xC734FF00) == 0xC734FF00) {
+ hpriv->port_map = 0x7;
+ hpriv->cap = 0xC734FF02;
+ }
+ }
+}
+
#ifdef CONFIG_ARM64
/*
* Due to ERRATA#22536, ThunderX needs to handle HOST_IRQ_STAT differently.
@@ -1636,6 +1669,10 @@ static int ahci_init_one(struct pci_dev *pdev, const struct
pci_device_id *ent)
"online status unreliable, applying workaround\n");
}
+
+ /* Acer SA5-271 workaround modifies private_data */
+ acer_sa5_271_workaround(hpriv, pdev);
+
/* CAP.NP sometimes indicate the index of the last enabled
* port, at other times, that of the last possible port, so
* determining the maximum port number requires looking at
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH Resend] ahci: Acer SA5-271 SSD Not Detected Fix
2017-05-09 12:47 [PATCH Resend] ahci: Acer SA5-271 SSD Not Detected Fix Sui Chen
@ 2017-05-09 14:20 ` Tejun Heo
0 siblings, 0 replies; 2+ messages in thread
From: Tejun Heo @ 2017-05-09 14:20 UTC (permalink / raw)
To: Sui Chen; +Cc: linux-ide
Hello, Sui.
On Tue, May 09, 2017 at 07:47:22AM -0500, Sui Chen wrote:
> (Correction in this resend: fixed function name acer_sa5_271_workaround; fixed
> the always-true condition in the function; fixed description.)
>
> On the Acer Switch Alpha 12 (model number: SA5-271), the internal SSD may not
> get detected because the port_map and CAP.nr_ports combination causes the driver
> to skip the port that is actually connected to the SSD. More specifically,
> either all SATA ports are identified as DUMMY, or all ports get ``link down''
> and never get up again.
>
> This problem occurs occasionally. When this problem occurs, CAP may hold a
> value of 0xC734FF00 or 0xC734FF01 and port_map may hold a value of 0x00 or 0x01.
> When this problem does not occur, CAP holds a value of 0xC734FF02 and port_map
> may hold a value of 0x07. Overriding the CAP value to 0xC734FF02 and port_map to
> 0x7 significantly reduces the occurrence of this problem.
>
> Link: https://bugzilla.kernel.org/attachment.cgi?id=253091
> Signed-off-by: Sui Chen <suichen6@gmail.com>
> Tested-by: Damian Ivanov <damianatorrpm@gmail.com>
Applied to libata/for-4.12-fixes w/ stable cc'd and a couple trivial
changes.
> @@ -1636,6 +1669,10 @@ static int ahci_init_one(struct pci_dev *pdev, const struct
> pci_device_id *ent)
The patch was new line damaged here. You probably wanna make sure
that your mail client isn't breaking long lines automatically.
Thanks!
--
tejun
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2017-05-09 14:20 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-05-09 12:47 [PATCH Resend] ahci: Acer SA5-271 SSD Not Detected Fix Sui Chen
2017-05-09 14:20 ` Tejun Heo
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox