linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
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, devicetree@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	Bartosz Golaszewski <bgolaszewski@baylibre.com>
Subject: [PATCH v5 08/14] sata: ahci-da850: implement a workaround for the softreset quirk
Date: Fri, 20 Jan 2017 12:21:59 +0100	[thread overview]
Message-ID: <1484911325-23425-9-git-send-email-bgolaszewski@baylibre.com> (raw)
In-Reply-To: <1484911325-23425-1-git-send-email-bgolaszewski@baylibre.com>

There's an issue with the da850 SATA controller: if port multiplier
support is compiled in, but we're connecting the drive directly to
the SATA port on the board, the drive can't be detected.

To make SATA work on the da850-lcdk board: first try to softreset
with pmp - if the operation fails with -EBUSY, retry without pmp.

Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
---
 drivers/ata/ahci_da850.c | 33 ++++++++++++++++++++++++++++++++-
 1 file changed, 32 insertions(+), 1 deletion(-)

diff --git a/drivers/ata/ahci_da850.c b/drivers/ata/ahci_da850.c
index 7f5328f..11dd87e 100644
--- a/drivers/ata/ahci_da850.c
+++ b/drivers/ata/ahci_da850.c
@@ -54,11 +54,42 @@ static void da850_sata_init(struct device *dev, void __iomem *pwrdn_reg,
 	writel(val, ahci_base + SATA_P0PHYCR_REG);
 }
 
+static int ahci_da850_softreset(struct ata_link *link,
+				unsigned int *class, unsigned long deadline)
+{
+	int pmp, ret;
+
+	pmp = sata_srst_pmp(link);
+
+	/*
+	 * There's an issue with the SATA controller on da850 SoCs: if we
+	 * enable Port Multiplier support, but the drive is connected directly
+	 * to the board, it can't be detected. As a workaround: if PMP is
+	 * enabled, we first call ahci_do_softreset() and pass it the result of
+	 * sata_srst_pmp(). If this call fails, we retry with pmp = 0.
+	 */
+	ret = ahci_do_softreset(link, class, pmp, deadline, ahci_check_ready);
+	if (pmp && ret == -EBUSY)
+		return ahci_do_softreset(link, class, 0,
+					 deadline, ahci_check_ready);
+
+	return ret;
+}
+
+static struct ata_port_operations ahci_da850_port_ops = {
+	.inherits = &ahci_platform_ops,
+	.softreset = ahci_da850_softreset,
+	/*
+	 * No need to override .pmp_softreset - it's only used for actual
+	 * PMP-enabled ports.
+	 */
+};
+
 static const struct ata_port_info ahci_da850_port_info = {
 	.flags		= AHCI_FLAG_COMMON,
 	.pio_mask	= ATA_PIO4,
 	.udma_mask	= ATA_UDMA6,
-	.port_ops	= &ahci_platform_ops,
+	.port_ops	= &ahci_da850_port_ops,
 };
 
 static struct scsi_host_template ahci_platform_sht = {
-- 
2.9.3

  parent reply	other threads:[~2017-01-20 11:22 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-01-20 11:21 [PATCH v5 00/14] ARM: da850-lcdk: add SATA support Bartosz Golaszewski
2017-01-20 11:21 ` [PATCH v5 01/14] devicetree: bindings: add bindings for ahci-da850 Bartosz Golaszewski
2017-01-20 13:32   ` Sekhar Nori
2017-01-23 15:49     ` Rob Herring
2017-01-20 11:21 ` [PATCH v5 02/14] ARM: davinci_all_defconfig: enable SATA modules Bartosz Golaszewski
2017-01-20 11:21 ` [PATCH v5 03/14] ARM: davinci: add a clock lookup entry for the SATA clock Bartosz Golaszewski
2017-01-20 11:21 ` [PATCH v5 04/14] sata: ahci-da850: get the sata clock using a connection id Bartosz Golaszewski
2017-01-20 11:21 ` [PATCH v5 05/14] ARM: davinci: da850: add con_id for the SATA clock Bartosz Golaszewski
2017-01-20 11:21 ` [PATCH v5 06/14] ARM: davinci: da850: model the SATA refclk Bartosz Golaszewski
2017-01-20 11:21 ` [PATCH v5 07/14] sata: ahci-da850: add device tree match table Bartosz Golaszewski
2017-01-20 11:21 ` Bartosz Golaszewski [this message]
2017-01-20 11:22 ` [PATCH v5 09/14] sata: ahci: export ahci_do_hardreset() locally Bartosz Golaszewski
2017-01-20 11:22 ` [PATCH v5 10/14] sata: ahci-da850: add a workaround for controller instability Bartosz Golaszewski
2017-01-20 11:22 ` [PATCH v5 11/14] sata: ahci-da850: un-hardcode the MPY bits Bartosz Golaszewski
2017-01-20 11:22 ` [PATCH v5 12/14] ARM: davinci: remove BUG_ON() from da850_register_sata() Bartosz Golaszewski
2017-01-20 11:22 ` [PATCH v5 13/14] ARM: dts: da850: add the SATA node Bartosz Golaszewski
2017-01-20 11:22 ` [PATCH v5 14/14] ARM: dts: da850-lcdk: enable " Bartosz Golaszewski
2017-01-20 13:28 ` [PATCH v5 00/14] ARM: da850-lcdk: add SATA support Tejun Heo
2017-01-20 13:56   ` Sekhar Nori
2017-01-20 14:02     ` Bartosz Golaszewski
2017-01-20 14:22       ` Sekhar Nori
2017-01-20 15:00         ` Tejun Heo

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=1484911325-23425-9-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).