On Tue, Oct 27, 2015 at 1:48 AM, Jaedon Shin <jaedon.shin@xxxxxxxxx> wrote: > Add quick for broken phy. The ARM-based 28nm chipsets have four phy I believe you mean "quirk". > interface control registers and each port has two registers. But, The registers, but the... > MIPS-based 40nm chipsets have three. and there are no information and s/and there/There/ > documentation. The legacy version of broadcom's strict-ahci based > initial code did not control these registers. > > Signed-off-by: Jaedon Shin <jaedon.shin@xxxxxxxxx> > --- > Documentation/devicetree/bindings/ata/brcm,sata-brcmstb.txt | 1 + Other than the commit message: Acked-by: Rob Herring <robh@xxxxxxxxxx> > 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 >