diff mbox series

ata: ahci: mvebu: Make SATA PHY optional for Armada 3720

Message ID 20201009084244.29156-1-pali@kernel.org
State New
Headers show
Series ata: ahci: mvebu: Make SATA PHY optional for Armada 3720 | expand

Commit Message

Pali Rohár Oct. 9, 2020, 8:42 a.m. UTC
Older ATF does not provide SMC call for SATA phy power on functionality and
therefore initialization of ahci_mvebu is failing when older version of ATF
is using. In this case phy_power_on() function returns -EOPNOTSUPP.

This patch adds a new hflag AHCI_HFLAG_IGN_NOTSUPP_POWER_ON which cause
that ahci_platform_enable_phys() would ignore -EOPNOTSUPP errors from
phy_power_on() call.

It fixes initialization of ahci_mvebu on Espressobin boards where is older
Marvell's Arm Trusted Firmware without SMC call for SATA phy power.

This is regression introduced in commit 8e18c8e58da64 ("arm64: dts: marvell:
armada-3720-espressobin: declare SATA PHY property") where SATA phy was
defined and therefore ahci_platform_enable_phys() on Espressobin started
failing.

Signed-off-by: Pali Rohár <pali@kernel.org>
Tested-by: Tomasz Maciej Nowak <tmn505@gmail.com>
Fixes: 8e18c8e58da64 ("arm64: dts: marvell: armada-3720-espressobin: declare SATA PHY property")
Cc: <stable@vger.kernel.org> # 5.1+: ea17a0f153af: phy: marvell: comphy: Convert internal SMCC firmware return codes to errno
---
 drivers/ata/ahci.h             | 2 ++
 drivers/ata/ahci_mvebu.c       | 2 +-
 drivers/ata/libahci_platform.c | 2 +-
 3 files changed, 4 insertions(+), 2 deletions(-)

Comments

Jens Axboe Oct. 9, 2020, 6:48 p.m. UTC | #1
On 10/9/20 2:42 AM, Pali Rohár wrote:
> Older ATF does not provide SMC call for SATA phy power on functionality and
> therefore initialization of ahci_mvebu is failing when older version of ATF
> is using. In this case phy_power_on() function returns -EOPNOTSUPP.
> 
> This patch adds a new hflag AHCI_HFLAG_IGN_NOTSUPP_POWER_ON which cause
> that ahci_platform_enable_phys() would ignore -EOPNOTSUPP errors from
> phy_power_on() call.
> 
> It fixes initialization of ahci_mvebu on Espressobin boards where is older
> Marvell's Arm Trusted Firmware without SMC call for SATA phy power.
> 
> This is regression introduced in commit 8e18c8e58da64 ("arm64: dts: marvell:
> armada-3720-espressobin: declare SATA PHY property") where SATA phy was
> defined and therefore ahci_platform_enable_phys() on Espressobin started
> failing.

Applied, thanks.
diff mbox series

Patch

diff --git a/drivers/ata/ahci.h b/drivers/ata/ahci.h
index d991dd46e89c..98b8baa47dc5 100644
--- a/drivers/ata/ahci.h
+++ b/drivers/ata/ahci.h
@@ -240,6 +240,8 @@  enum {
 							as default lpm_policy */
 	AHCI_HFLAG_SUSPEND_PHYS		= (1 << 26), /* handle PHYs during
 							suspend/resume */
+	AHCI_HFLAG_IGN_NOTSUPP_POWER_ON	= (1 << 27), /* ignore -EOPNOTSUPP
+							from phy_power_on() */
 
 	/* ap->flags bits */
 
diff --git a/drivers/ata/ahci_mvebu.c b/drivers/ata/ahci_mvebu.c
index d4bba3ace45d..3ad46d26d9d5 100644
--- a/drivers/ata/ahci_mvebu.c
+++ b/drivers/ata/ahci_mvebu.c
@@ -227,7 +227,7 @@  static const struct ahci_mvebu_plat_data ahci_mvebu_armada_380_plat_data = {
 
 static const struct ahci_mvebu_plat_data ahci_mvebu_armada_3700_plat_data = {
 	.plat_config = ahci_mvebu_armada_3700_config,
-	.flags = AHCI_HFLAG_SUSPEND_PHYS,
+	.flags = AHCI_HFLAG_SUSPEND_PHYS | AHCI_HFLAG_IGN_NOTSUPP_POWER_ON,
 };
 
 static const struct of_device_id ahci_mvebu_of_match[] = {
diff --git a/drivers/ata/libahci_platform.c b/drivers/ata/libahci_platform.c
index 86261deeb4c5..de638dafce21 100644
--- a/drivers/ata/libahci_platform.c
+++ b/drivers/ata/libahci_platform.c
@@ -59,7 +59,7 @@  int ahci_platform_enable_phys(struct ahci_host_priv *hpriv)
 		}
 
 		rc = phy_power_on(hpriv->phys[i]);
-		if (rc) {
+		if (rc && !(rc == -EOPNOTSUPP && (hpriv->flags & AHCI_HFLAG_IGN_NOTSUPP_POWER_ON))) {
 			phy_exit(hpriv->phys[i]);
 			goto disable_phys;
 		}