Add quick for broken phy. The ARM-based 28nm chipsets have four phy
interface control registers and each port has two registers. But, The
MIPS-based 40nm chipsets have three. and there are no information and
documentation. The legacy version of broadcom's strict-ahci based
initial code did not control these registers.

Signed-off-by: Jaedon Shin <jaedon.s...@gmail.com>
---
 Documentation/devicetree/bindings/ata/brcm,sata-brcmstb.txt |  1 +
 drivers/ata/ahci_brcmstb.c                                  | 10 ++++++++++
 2 files changed, 11 insertions(+)

diff --git a/Documentation/devicetree/bindings/ata/brcm,sata-brcmstb.txt 
b/Documentation/devicetree/bindings/ata/brcm,sata-brcmstb.txt
index 488a383ce202..0f0925d58188 100644
--- a/Documentation/devicetree/bindings/ata/brcm,sata-brcmstb.txt
+++ b/Documentation/devicetree/bindings/ata/brcm,sata-brcmstb.txt
@@ -12,6 +12,7 @@ Required properties:
 
 Optional properties:
 - brcm,broken-ncq    : if present, NCQ is unusable
+- brcm,broken-phy    : if present, to control phy interface is unusable
 
 Also see ahci-platform.txt.
 
diff --git a/drivers/ata/ahci_brcmstb.c b/drivers/ata/ahci_brcmstb.c
index e53962cb48ee..c61303f7c7dc 100644
--- a/drivers/ata/ahci_brcmstb.c
+++ b/drivers/ata/ahci_brcmstb.c
@@ -71,6 +71,7 @@
 
 enum brcm_ahci_quicks {
        BRCM_AHCI_QUICK_NONCQ           = BIT(0),
+       BRCM_AHCI_QUICK_NOPHY           = BIT(1),
 };
 
 struct brcm_ahci_priv {
@@ -119,6 +120,9 @@ static void brcm_sata_phy_enable(struct brcm_ahci_priv 
*priv, int port)
        void __iomem *p;
        u32 reg;
 
+       if (priv->quicks & BRCM_AHCI_QUICK_NOPHY)
+               return;
+
        /* clear PHY_DEFAULT_POWER_STATE */
        p = phyctrl + SATA_TOP_CTRL_PHY_CTRL_1;
        reg = brcm_sata_readreg(p);
@@ -148,6 +152,9 @@ static void brcm_sata_phy_disable(struct brcm_ahci_priv 
*priv, int port)
        void __iomem *p;
        u32 reg;
 
+       if (priv->quicks & BRCM_AHCI_QUICK_NOPHY)
+               return;
+
        /* power-off the PHY digital logic */
        p = phyctrl + SATA_TOP_CTRL_PHY_CTRL_2;
        reg = brcm_sata_readreg(p);
@@ -297,6 +304,9 @@ static int brcm_ahci_probe(struct platform_device *pdev)
        if (of_property_read_bool(dev->of_node, "brcm,broken-ncq"))
                priv->quicks |= BRCM_AHCI_QUICK_NONCQ;
 
+       if (of_property_read_bool(dev->of_node, "brcm,broken-phy"))
+               priv->quicks |= BRCM_AHCI_QUICK_NOPHY;
+
        brcm_sata_init(priv);
        brcm_sata_quick(pdev, priv);
 
-- 
2.6.2

--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to