This patch set adds support for SATA3 interface available in Broadcom
NSP SoC.
The first patch removes the "stb" references in the ahci documentation
to make it generic for Broadcom SoC's. The second patch adds NSP support
to the ahci documentation. The third patch adds the NSP SATA phy
documentation.
The fourth patch renames the Broadcom stb ahci driver to common Broadcom
ahci driver and fifth patch supports NSP ahci. The sixth patch adds
support for NSP SATA3 phy.
The seventh patch contains the device tree changes for NSP SoC.
This patch set has been tested on NSP bcm958625HR board.
This patch set is based on v4.7.0-rc1 and is available from github
repo: https://github.com/Broadcom/cygnus-linux.git
branch: nsp-sata-v1
Yendapally Reddy Dhananjaya Reddy (7):
dt-bindings: ata: rename brcm,sata-brcmstb.txt to brcm,sata-brcm.txt
dt-bindings: ata: add support for Broadcom NSP SoC ahci
dt-bindings: phy: Add documentation for NSP SATA PHY
ata: ahci_brcmstb: rename to support across Broadcom SoC's
ata: ahci_brcm: Add support for Broadcom NSP SoC
phy: Add SATA3 PHY support for Broadcom NSP SoC
ARM: dts: nsp: Add sata device tree entry
.../{brcm,sata-brcmstb.txt => brcm,sata-brcm.txt} | 9 +--
.../devicetree/bindings/phy/brcm-sata-phy.txt | 4 +-
arch/arm/boot/dts/bcm-nsp.dtsi | 42 +++++++++++
arch/arm/boot/dts/bcm958625k.dts | 12 ++++
drivers/ata/Kconfig | 8 +--
drivers/ata/Makefile | 2 +-
drivers/ata/{ahci_brcmstb.c => ahci_brcm.c} | 46 +++++++++---
drivers/phy/phy-brcm-sata.c | 81 ++++++++++++++++++++++
8 files changed, 184 insertions(+), 20 deletions(-)
rename Documentation/devicetree/bindings/ata/{brcm,sata-brcmstb.txt => brcm,sata-brcm.txt} (81%)
rename drivers/ata/{ahci_brcmstb.c => ahci_brcm.c} (91%)
--
2.1.0
@@ -7,6 +7,7 @@ Required properties: - compatible : should be one or more of "brcm,bcm7425-ahci" "brcm,bcm7445-ahci"+ "brcm,bcm-nsp-ahci" "brcm,sata3-ahci" - reg : register mappings for AHCI and SATA_TOP_CTRL - reg-names : "ahci" and "top-ctrl"
diff --git a/Documentation/devicetree/bindings/ata/brcm,sata-brcmstb.txt b/Documentation/devicetree/bindings/ata/brcm,sata-brcm.txtsimilarity index 81%rename from Documentation/devicetree/bindings/ata/brcm,sata-brcmstb.txtrename to Documentation/devicetree/bindings/ata/brcm,sata-brcm.txtindex 6087283..126ee13 100644--- a/Documentation/devicetree/bindings/ata/brcm,sata-brcmstb.txt+++ b/Documentation/devicetree/bindings/ata/brcm,sata-brcm.txt
@@ -1,13 +1,13 @@-* Broadcom SATA3 AHCI Controller for STB+* Broadcom SATA3 AHCI Controller SATA nodes are defined to describe on-chip Serial ATA controllers. Each SATA controller should have its own node. Required properties: - compatible : should be one or more of- "brcm,bcm7425-ahci"- "brcm,bcm7445-ahci"- "brcm,sata3-ahci"+ "brcm,bcm7425-ahci"+ "brcm,bcm7445-ahci"+ "brcm,sata3-ahci" - reg : register mappings for AHCI and SATA_TOP_CTRL - reg-names : "ahci" and "top-ctrl" - interrupts : interrupt mapping for SATA IRQ
@@ -271,6 +280,73 @@ static int brcm_ns2_sata_init(struct brcm_sata_port *port)return0;}+staticintbrcm_nsp_sata_init(structbrcm_sata_port*port)+{+structbrcm_sata_phy*priv=port->phy_priv;+structdevice*dev=port->phy_priv->dev;+void__iomem*base=priv->phy_base;+unsignedintoob_bank;+unsignedintval,try;++/* Configure OOB control */+if(port->portnum==0)+oob_bank=OOB_REG_BANK;+elseif(port->portnum==1)+oob_bank=OOB1_REG_BANK;+else+return-EINVAL;++val=0x0;+val|=(0x0f<<OOB_CTRL1_BURST_MAX_SHIFT);+val|=(0x06<<OOB_CTRL1_BURST_MIN_SHIFT);+val|=(0x0f<<OOB_CTRL1_WAKE_IDLE_MAX_SHIFT);+val|=(0x06<<OOB_CTRL1_WAKE_IDLE_MIN_SHIFT);+brcm_sata_phy_wr(base,oob_bank,OOB_CTRL1,0x0,val);++val=0x0;+val|=(0x2e<<OOB_CTRL2_RESET_IDLE_MAX_SHIFT);+val|=(0x02<<OOB_CTRL2_BURST_CNT_SHIFT);+val|=(0x16<<OOB_CTRL2_RESET_IDLE_MIN_SHIFT);+brcm_sata_phy_wr(base,oob_bank,OOB_CTRL2,0x0,val);+++brcm_sata_phy_wr(base,PLL_REG_BANK_0,PLL_ACTRL2,+~(PLL_ACTRL2_SELDIV_MASK<<PLL_ACTRL2_SELDIV_SHIFT),+0x0c<<PLL_ACTRL2_SELDIV_SHIFT);++brcm_sata_phy_wr(base,PLL_REG_BANK_0,PLL_CAP_CONTROL,+0xff0,0x4f0);++val=PLLCONTROL_0_FREQ_DET_RESTART|PLLCONTROL_0_FREQ_MONITOR;+brcm_sata_phy_wr(base,PLL_REG_BANK_0,PLL_REG_BANK_0_PLLCONTROL_0,+~val,val);+val=PLLCONTROL_0_SEQ_START;+brcm_sata_phy_wr(base,PLL_REG_BANK_0,PLL_REG_BANK_0_PLLCONTROL_0,+~val,0);+mdelay(10);+brcm_sata_phy_wr(base,PLL_REG_BANK_0,PLL_REG_BANK_0_PLLCONTROL_0,+~val,val);++/* Wait for pll_seq_done bit */+try=50;+while(try--){+val=brcm_sata_phy_rd(base,BLOCK0_REG_BANK,+BLOCK0_XGXSSTATUS);+if(val&BLOCK0_XGXSSTATUS_PLL_LOCK)+break;+msleep(20);+}+if(!try){+/* PLL did not lock; give up */+dev_err(dev,"port%d PLL did not lock\n",port->portnum);+return-ETIMEDOUT;+}++dev_dbg(dev,"port%d initialized\n",port->portnum);++return0;+}+staticintbrcm_sata_phy_init(structphy*phy){intrc;
@@ -284,6 +360,9 @@ static int brcm_sata_phy_init(struct phy *phy)caseBRCM_SATA_PHY_IPROC_NS2:rc=brcm_ns2_sata_init(port);break;+caseBRCM_SATA_PHY_IPROC_NSP:+rc=brcm_nsp_sata_init(port);+break;default:rc=-ENODEV;};
diff --git a/drivers/ata/ahci_brcmstb.c b/drivers/ata/ahci_brcm.csimilarity index 100%rename from drivers/ata/ahci_brcmstb.crename to drivers/ata/ahci_brcm.c
--
2.1.0
@@ -5,6 +5,7 @@ Required properties: "brcm,bcm7425-sata-phy" "brcm,bcm7445-sata-phy" "brcm,iproc-ns2-sata-phy"+ "brcm,iproc-nsp-sata-phy" "brcm,phy-sata3" - address-cells: should be 1 - size-cells: should be 0
@@ -22,7 +23,8 @@ Sub-nodes required properties: Sub-nodes optional properties: - brcm,enable-ssc: use spread spectrum clocking (SSC) on this port- This property is not applicable for "brcm,iproc-ns2-sata-phy".+ This property is not applicable for "brcm,iproc-ns2-sata-phy" and+ "brcm,iproc-nsp-sata-phy". Example: sata-phy at f0458100 {
On 06/16/2016 06:53 AM, Yendapally Reddy Dhananjaya Reddy wrote:
Rename the existing Broadcom STB ahci driver to common
Broadcom SATA3 driver to share this across Broadcom SoCs.
Signed-off-by: Yendapally Reddy Dhananjaya Reddy <redacted>
There is currently nothing referencing AHCI_BRCMSTB in the in-tree
defconfigs, but we should coordinate this change with this patch:
https://patchwork.kernel.org/patch/9130007/
which I have queued locally to send for 4.8, if we know this is going to
be accepted for 4.8, then I can update the patch above.
Other than that:
Acked-by: Florian Fainelli <f.fainelli@gmail.com>
--
Florian
@@ -5,6 +5,7 @@ Required properties: "brcm,bcm7425-sata-phy" "brcm,bcm7445-sata-phy" "brcm,iproc-ns2-sata-phy"+ "brcm,iproc-nsp-sata-phy" "brcm,phy-sata3" - address-cells: should be 1 - size-cells: should be 0
@@ -22,7 +23,8 @@ Sub-nodes required properties: Sub-nodes optional properties: - brcm,enable-ssc: use spread spectrum clocking (SSC) on this port- This property is not applicable for "brcm,iproc-ns2-sata-phy".+ This property is not applicable for "brcm,iproc-ns2-sata-phy" and+ "brcm,iproc-nsp-sata-phy". Example: sata-phy at f0458100 {
@@ -271,6 +280,73 @@ static int brcm_ns2_sata_init(struct brcm_sata_port *port)return0;}+staticintbrcm_nsp_sata_init(structbrcm_sata_port*port)+{+structbrcm_sata_phy*priv=port->phy_priv;+structdevice*dev=port->phy_priv->dev;+void__iomem*base=priv->phy_base;+unsignedintoob_bank;+unsignedintval,try;++/* Configure OOB control */+if(port->portnum==0)+oob_bank=OOB_REG_BANK;+elseif(port->portnum==1)+oob_bank=OOB1_REG_BANK;+else+return-EINVAL;++val=0x0;+val|=(0x0f<<OOB_CTRL1_BURST_MAX_SHIFT);+val|=(0x06<<OOB_CTRL1_BURST_MIN_SHIFT);+val|=(0x0f<<OOB_CTRL1_WAKE_IDLE_MAX_SHIFT);+val|=(0x06<<OOB_CTRL1_WAKE_IDLE_MIN_SHIFT);+brcm_sata_phy_wr(base,oob_bank,OOB_CTRL1,0x0,val);++val=0x0;+val|=(0x2e<<OOB_CTRL2_RESET_IDLE_MAX_SHIFT);+val|=(0x02<<OOB_CTRL2_BURST_CNT_SHIFT);+val|=(0x16<<OOB_CTRL2_RESET_IDLE_MIN_SHIFT);+brcm_sata_phy_wr(base,oob_bank,OOB_CTRL2,0x0,val);+++brcm_sata_phy_wr(base,PLL_REG_BANK_0,PLL_ACTRL2,+~(PLL_ACTRL2_SELDIV_MASK<<PLL_ACTRL2_SELDIV_SHIFT),+0x0c<<PLL_ACTRL2_SELDIV_SHIFT);++brcm_sata_phy_wr(base,PLL_REG_BANK_0,PLL_CAP_CONTROL,+0xff0,0x4f0);++val=PLLCONTROL_0_FREQ_DET_RESTART|PLLCONTROL_0_FREQ_MONITOR;+brcm_sata_phy_wr(base,PLL_REG_BANK_0,PLL_REG_BANK_0_PLLCONTROL_0,+~val,val);+val=PLLCONTROL_0_SEQ_START;+brcm_sata_phy_wr(base,PLL_REG_BANK_0,PLL_REG_BANK_0_PLLCONTROL_0,+~val,0);+mdelay(10);+brcm_sata_phy_wr(base,PLL_REG_BANK_0,PLL_REG_BANK_0_PLLCONTROL_0,+~val,val);++/* Wait for pll_seq_done bit */+try=50;+while(try--){+val=brcm_sata_phy_rd(base,BLOCK0_REG_BANK,+BLOCK0_XGXSSTATUS);+if(val&BLOCK0_XGXSSTATUS_PLL_LOCK)+break;+msleep(20);+}+if(!try){+/* PLL did not lock; give up */+dev_err(dev,"port%d PLL did not lock\n",port->portnum);+return-ETIMEDOUT;+}++dev_dbg(dev,"port%d initialized\n",port->portnum);++return0;+}+staticintbrcm_sata_phy_init(structphy*phy){intrc;
@@ -284,6 +360,9 @@ static int brcm_sata_phy_init(struct phy *phy)caseBRCM_SATA_PHY_IPROC_NS2:rc=brcm_ns2_sata_init(port);break;+caseBRCM_SATA_PHY_IPROC_NSP:+rc=brcm_nsp_sata_init(port);+break;default:rc=-ENODEV;};