ata: ahci: mvebu: Make SATA PHY optional for Armada 3720
authorPali Rohár <pali@kernel.org>
Fri, 9 Oct 2020 08:42:44 +0000 (10:42 +0200)
committerJens Axboe <axboe@kernel.dk>
Fri, 9 Oct 2020 18:47:56 +0000 (12:47 -0600)
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.

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

index d991dd46e89ccddae8cb417bf954fe62de6f27a0..98b8baa47dc5e0a5c2df816f5ee24127d59bc778 100644 (file)
@@ -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 */
 
index d4bba3ace45d788c5c770afc68aca61479cc11d7..3ad46d26d9d517902c451cd8cae50a16d8caa142 100644 (file)
@@ -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[] = {
index 86261deeb4c58d48ff866b578f62e6c82f9cd1e1..de638dafce21e38a96c48923b5f3fc0ee93425fb 100644 (file)
@@ -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;
                }