From: Bartosz Golaszewski <bgolaszewski@baylibre.com>
To: Kevin Hilman <khilman@kernel.org>, Sekhar Nori <nsekhar@ti.com>,
Patrick Titiano <ptitiano@baylibre.com>,
Michael Turquette <mturquette@baylibre.com>,
Tejun Heo <tj@kernel.org>, Rob Herring <robh+dt@kernel.org>,
Mark Rutland <mark.rutland@arm.com>,
Russell King <linux@armlinux.org.uk>,
David Lechner <david@lechnology.com>
Cc: linux-ide@vger.kernel.org,
Bartosz Golaszewski <bgolaszewski@baylibre.com>,
linux-kernel@vger.kernel.org,
linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org
Subject: [PATCH v6 10/14] sata: ahci-da850: add a workaround for controller instability
Date: Mon, 23 Jan 2017 18:00:52 +0100 [thread overview]
Message-ID: <1485190856-4711-11-git-send-email-bgolaszewski@baylibre.com> (raw)
In-Reply-To: <1485190856-4711-1-git-send-email-bgolaszewski@baylibre.com>
We have a use case with the da850 SATA controller where at PLL0
frequency of 456MHz (needed to properly service the LCD controller)
the chip becomes unstable and the hardreset operation is ignored the
first time 50% of times.
The sata core driver already retries to resume the link because some
controllers ignore writes to the SControl register, but just retrying
the resume operation doesn't work - we need to issue he phy/wake reset
again to make it work.
Reimplement ahci_hardreset() in the driver and poke the controller a
couple times before really giving up.
Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
Acked-by: Tejun Heo <tj@kernel.org>
---
drivers/ata/ahci_da850.c | 28 +++++++++++++++++++++++++++-
1 file changed, 27 insertions(+), 1 deletion(-)
diff --git a/drivers/ata/ahci_da850.c b/drivers/ata/ahci_da850.c
index 11dd87e..0b2b1a4 100644
--- a/drivers/ata/ahci_da850.c
+++ b/drivers/ata/ahci_da850.c
@@ -16,7 +16,8 @@
#include <linux/ahci_platform.h>
#include "ahci.h"
-#define DRV_NAME "ahci_da850"
+#define DRV_NAME "ahci_da850"
+#define HARDRESET_RETRIES 5
/* SATA PHY Control Register offset from AHCI base */
#define SATA_P0PHYCR_REG 0x178
@@ -76,6 +77,29 @@ static int ahci_da850_softreset(struct ata_link *link,
return ret;
}
+static int ahci_da850_hardreset(struct ata_link *link,
+ unsigned int *class, unsigned long deadline)
+{
+ int ret, retry = HARDRESET_RETRIES;
+ bool online;
+
+ /*
+ * In order to correctly service the LCD controller of the da850 SoC,
+ * we increased the PLL0 frequency to 456MHz from the default 300MHz.
+ *
+ * This made the SATA controller unstable and the hardreset operation
+ * does not always succeed the first time. Before really giving up to
+ * bring up the link, retry the reset a couple times.
+ */
+ do {
+ ret = ahci_do_hardreset(link, class, deadline, &online);
+ if (online)
+ return ret;
+ } while (retry--);
+
+ return ret;
+}
+
static struct ata_port_operations ahci_da850_port_ops = {
.inherits = &ahci_platform_ops,
.softreset = ahci_da850_softreset,
@@ -83,6 +107,8 @@ static struct ata_port_operations ahci_da850_port_ops = {
* No need to override .pmp_softreset - it's only used for actual
* PMP-enabled ports.
*/
+ .hardreset = ahci_da850_hardreset,
+ .pmp_hardreset = ahci_da850_hardreset,
};
static const struct ata_port_info ahci_da850_port_info = {
--
2.9.3
next prev parent reply other threads:[~2017-01-23 17:00 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-01-23 17:00 [PATCH v6 00/14] ARM: da850-lcdk: add SATA support Bartosz Golaszewski
2017-01-23 17:00 ` [PATCH v6 01/14] devicetree: bindings: add bindings for ahci-da850 Bartosz Golaszewski
2017-01-27 20:58 ` Rob Herring
2017-01-23 17:00 ` [PATCH v6 02/14] ARM: davinci_all_defconfig: enable SATA modules Bartosz Golaszewski
2017-01-23 17:00 ` [PATCH v6 03/14] ARM: davinci: add a clock lookup entry for the SATA clock Bartosz Golaszewski
2017-01-23 17:00 ` [PATCH v6 04/14] sata: ahci-da850: get the sata clock using a connection id Bartosz Golaszewski
2017-01-23 17:00 ` [PATCH v6 05/14] ARM: davinci: da850: add con_id for the SATA clock Bartosz Golaszewski
2017-01-26 16:56 ` Grygorii Strashko
2017-01-26 17:40 ` Sekhar Nori
[not found] ` <645778dd-6727-abd0-3dd9-a7e0d5aa4983-l0cyMroinI0@public.gmane.org>
2017-01-27 9:55 ` Bartosz Golaszewski
2017-01-27 9:58 ` Sekhar Nori
2017-01-23 17:00 ` [PATCH v6 06/14] ARM: davinci: da850: model the SATA refclk Bartosz Golaszewski
2017-01-23 17:00 ` [PATCH v6 07/14] sata: ahci-da850: add device tree match table Bartosz Golaszewski
2017-01-23 17:00 ` [PATCH v6 08/14] sata: ahci-da850: implement a workaround for the softreset quirk Bartosz Golaszewski
2017-01-23 17:00 ` [PATCH v6 09/14] sata: ahci: export ahci_do_hardreset() locally Bartosz Golaszewski
2017-01-23 17:00 ` Bartosz Golaszewski [this message]
2017-01-23 17:00 ` [PATCH v6 11/14] sata: ahci-da850: un-hardcode the MPY bits Bartosz Golaszewski
2017-01-23 17:00 ` [PATCH v6 12/14] ARM: davinci: remove BUG_ON() from da850_register_sata() Bartosz Golaszewski
2017-01-23 17:00 ` [PATCH v6 13/14] ARM: dts: da850: add the SATA node Bartosz Golaszewski
[not found] ` <1485190856-4711-1-git-send-email-bgolaszewski-rdvid1DuHRBWk0Htik3J/w@public.gmane.org>
2017-01-23 17:00 ` [PATCH v6 14/14] ARM: dts: da850-lcdk: enable " Bartosz Golaszewski
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1485190856-4711-11-git-send-email-bgolaszewski@baylibre.com \
--to=bgolaszewski@baylibre.com \
--cc=david@lechnology.com \
--cc=devicetree@vger.kernel.org \
--cc=khilman@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-ide@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux@armlinux.org.uk \
--cc=mark.rutland@arm.com \
--cc=mturquette@baylibre.com \
--cc=nsekhar@ti.com \
--cc=ptitiano@baylibre.com \
--cc=robh+dt@kernel.org \
--cc=tj@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).