| From b48025e8457df14b40c670117b5b508af8ce11d4 Mon Sep 17 00:00:00 2001 |
| From: Florian Fainelli <f.fainelli@gmail.com> |
| Date: Tue, 10 Dec 2019 10:53:47 -0800 |
| Subject: [PATCH] ata: ahci_brcm: Add missing clock management during recovery |
| |
| commit bf0e5013bc2dcac205417e1252205dca39dfc005 upstream. |
| |
| The downstream implementation of ahci_brcm.c did contain clock |
| management recovery, but until recently, did that outside of the |
| libahci_platform helpers and this was unintentionally stripped out while |
| forward porting the patch upstream. |
| |
| Add the missing clock management during recovery and sleep for 10 |
| milliseconds per the design team recommendations to ensure the SATA PHY |
| controller and AFE have been fully quiesced. |
| |
| Fixes: eb73390ae241 ("ata: ahci_brcm: Recover from failures to identify devices") |
| Cc: stable@vger.kernel.org |
| Reviewed-by: Hans de Goede <hdegoede@redhat.com> |
| Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> |
| Signed-off-by: Jens Axboe <axboe@kernel.dk> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/ata/ahci_brcm.c b/drivers/ata/ahci_brcm.c |
| index a8b2f3f7bbbc..21043cc70045 100644 |
| --- a/drivers/ata/ahci_brcm.c |
| +++ b/drivers/ata/ahci_brcm.c |
| @@ -275,6 +275,13 @@ static unsigned int brcm_ahci_read_id(struct ata_device *dev, |
| /* Perform the SATA PHY reset sequence */ |
| brcm_sata_phy_disable(priv, ap->port_no); |
| |
| + /* Reset the SATA clock */ |
| + ahci_platform_disable_clks(hpriv); |
| + msleep(10); |
| + |
| + ahci_platform_enable_clks(hpriv); |
| + msleep(10); |
| + |
| /* Bring the PHY back on */ |
| brcm_sata_phy_enable(priv, ap->port_no); |
| |
| -- |
| 2.7.4 |
| |