From patchwork Wed Jan 18 13:19:56 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartosz Golaszewski X-Patchwork-Id: 91776 Delivered-To: patch@linaro.org Received: by 10.140.20.99 with SMTP id 90csp1010615qgi; Wed, 18 Jan 2017 05:21:32 -0800 (PST) X-Received: by 10.98.82.216 with SMTP id g207mr3741425pfb.32.1484745691918; Wed, 18 Jan 2017 05:21:31 -0800 (PST) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id m8si235580pga.63.2017.01.18.05.21.31; Wed, 18 Jan 2017 05:21:31 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@baylibre-com.20150623.gappssmtp.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753152AbdARNVY (ORCPT + 25 others); Wed, 18 Jan 2017 08:21:24 -0500 Received: from mail-wm0-f50.google.com ([74.125.82.50]:34655 "EHLO mail-wm0-f50.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752914AbdARNUj (ORCPT ); Wed, 18 Jan 2017 08:20:39 -0500 Received: by mail-wm0-f50.google.com with SMTP id f73so47097625wmf.1 for ; Wed, 18 Jan 2017 05:20:38 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=hFmDM2GBJ/vTixiXlDl8X9Ccc8JDAS1MatMHD9xw8Bw=; b=rrGKLiw1dNZt2Fxw+6U4YaIvmpWvN/cpC9uN4dPMyHs3MSy9WZSp9EgdLOOY4DZY/S g4RpbM8mxH6MX1+5MI2Bc8i2uVohB7R7XenQzFncWzET77W9B4V70sozLa5C0LwYKAnU 6wJhacvwatNUsyLBy+IiqeXh3JqihECLoWKJMqVgfPB52V1zXYV7xpirvUr35yhjR8SY hE8cOIlxbKwdjMgTtWfltqztoHcBCI+7M4DXNxFW/taiigMAEHGSQWRccGiSnRrrW4Ks QsXYtvljgxxqJwoh8i+jXVOboEqA9rQp9B5BEN+i5wPfNBv0QdqYT0fnSP14mWgJSPrZ 5Deg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=hFmDM2GBJ/vTixiXlDl8X9Ccc8JDAS1MatMHD9xw8Bw=; b=hSqK+2PFxoOLBc0PgXBx1/zv5r4QSKBxiBUajEBaerBpOacRh16hh6Mnlp0etgD2Y9 K3cOcSz38uyMU/aPZ0vIDLOa+Gsj0BKj0CyUZv1fuuJ2WahnzIAMATged0OhaahoWo1+ gUSpBO+IDeTStS5CaXHY4vlohTUecV5+yBqxCcuejmteJbvUyP82hqumYWnHW5U/VQzH YLxrni13T0p2TsAS1Hs81+09Qgr97IebFQ9w2s3597xke6YaSpkpQrQ0N3abvyjjf6f2 k2GhXZhjVcgSkoyXOe8UGrYB1rUUzHn+JltsUUqeh9rrbVVJ2JOCl4dEhXNk1Gr74GdE e5VQ== X-Gm-Message-State: AIkVDXIMdWi6lDXsK/RHOZTFlHW8kf1Fr+aCbV2aoJ9G1l9Cbz+mSdJX0lXQC39WlJ0vXD7i X-Received: by 10.28.6.210 with SMTP id 201mr22415427wmg.85.1484745627387; Wed, 18 Jan 2017 05:20:27 -0800 (PST) Received: from localhost.localdomain ([90.63.244.31]) by smtp.gmail.com with ESMTPSA id w79sm4899569wmw.0.2017.01.18.05.20.25 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 18 Jan 2017 05:20:26 -0800 (PST) From: Bartosz Golaszewski To: Kevin Hilman , Sekhar Nori , Patrick Titiano , Michael Turquette , Tejun Heo , Rob Herring , Mark Rutland , Russell King , David Lechner Cc: linux-ide@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Bartosz Golaszewski Subject: [PATCH v3 08/13] sata: ahci-da850: implement a workaround for the softreset quirk Date: Wed, 18 Jan 2017 14:19:56 +0100 Message-Id: <1484745601-4769-9-git-send-email-bgolaszewski@baylibre.com> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1484745601-4769-1-git-send-email-bgolaszewski@baylibre.com> References: <1484745601-4769-1-git-send-email-bgolaszewski@baylibre.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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 --- drivers/ata/ahci_da850.c | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) -- 2.9.3 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 = {