All of lore.kernel.org
 help / color / mirror / Atom feed
* [v4 00/10] add support SATA for BMIPS_GENERIC
@ 2015-10-30 14:01 Jaedon Shin
  2015-10-30 14:01 ` [v4 01/10] ata: ahci_brcmstb: add support MIPS-based platforms Jaedon Shin
                   ` (9 more replies)
  0 siblings, 10 replies; 22+ messages in thread
From: Jaedon Shin @ 2015-10-30 14:01 UTC (permalink / raw)
  To: Brian Norris, Florian Fainelli, Tejun Heo,
	Kishon Vijay Abraham I, Ralf Baechle, Rob Herring
  Cc: Kevin Cernekee, Dragan Stancevic, linux-ide, Linux-MIPS,
	devicetree, Jaedon Shin

Hi all,

This patch series add support SATA for BMIPS_GENERIC.

Changes in v4:
- remove unused properties from bcm{7425,7342,7362}.dtsi

Changes in v3:
- fix typo quirk instead of quick
- disable NCQ before initialzing SATA controller endianness
- fix misnomer controlling phy interface
- remove brcm,broken-ncq and brcm,broken-phy properties from devicetree
- use compatible string for quirks
- use list for compatible strings
- add "Acked-by:" tags

Changes in v2:
- adds quirk for ncq
- adds quirk for phy interface control
- remove unused definitions in ahci_brcmstb
- combines compatible string

Jaedon Shin (10):
  ata: ahci_brcmstb: add support MIPS-based platforms
  ata: ahci_brcmstb: add quirk for broken ncq
  ata: ahci_brcmstb: add quirk for different phy
  ata: ahci_brcmstb: remove unused definitions
  phy: phy_brcmstb_sata: remove duplicate definitions
  phy: phy_brcmstb_sata: add data for phy version
  phy: phy_brcmstb_sata: add support MIPS-based platforms
  MIPS: BMIPS: brcmstb: add SATA/PHY nodes for bcm7425
  MIPS: BMIPS: brcmstb: add SATA/PHY nodes for bcm7346
  MIPS: BMIPS: brcmstb: add SATA/PHY nodes for bcm7362

 .../devicetree/bindings/ata/brcm,sata-brcmstb.txt  |  4 +-
 .../bindings/phy/brcm,brcmstb-sata-phy.txt         |  1 +
 arch/mips/boot/dts/brcm/bcm7346.dtsi               | 40 +++++++++++++++
 arch/mips/boot/dts/brcm/bcm7362.dtsi               | 40 +++++++++++++++
 arch/mips/boot/dts/brcm/bcm7425.dtsi               | 40 +++++++++++++++
 arch/mips/boot/dts/brcm/bcm97346dbsmb.dts          |  8 +++
 arch/mips/boot/dts/brcm/bcm97362svmb.dts           |  8 +++
 drivers/ata/Kconfig                                |  2 +-
 drivers/ata/ahci_brcmstb.c                         | 58 +++++++++++++++++++++-
 drivers/phy/Kconfig                                |  4 +-
 drivers/phy/phy-brcmstb-sata.c                     | 47 ++++++++++++++----
 11 files changed, 236 insertions(+), 16 deletions(-)

-- 
2.6.2


^ permalink raw reply	[flat|nested] 22+ messages in thread

* [v4 01/10] ata: ahci_brcmstb: add support MIPS-based platforms
  2015-10-30 14:01 [v4 00/10] add support SATA for BMIPS_GENERIC Jaedon Shin
@ 2015-10-30 14:01 ` Jaedon Shin
  2015-10-30 14:01 ` [v4 02/10] ata: ahci_brcmstb: add quirk for broken ncq Jaedon Shin
                   ` (8 subsequent siblings)
  9 siblings, 0 replies; 22+ messages in thread
From: Jaedon Shin @ 2015-10-30 14:01 UTC (permalink / raw)
  To: Brian Norris, Florian Fainelli, Tejun Heo,
	Kishon Vijay Abraham I, Ralf Baechle, Rob Herring
  Cc: Kevin Cernekee, Dragan Stancevic, linux-ide, Linux-MIPS,
	devicetree, Jaedon Shin

The BCM7xxx ARM-based and MIPS-based platforms share a similar hardware
block for AHCI SATA3.

The BCM7425 is main chipset of MIPS-based 40nm class. The others have
same AHCI block. The compatible string may be use brcm,bcm7425-ahci.

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

diff --git a/Documentation/devicetree/bindings/ata/brcm,sata-brcmstb.txt b/Documentation/devicetree/bindings/ata/brcm,sata-brcmstb.txt
index 20ac9bbfa1fd..60872838f1ad 100644
--- a/Documentation/devicetree/bindings/ata/brcm,sata-brcmstb.txt
+++ b/Documentation/devicetree/bindings/ata/brcm,sata-brcmstb.txt
@@ -4,7 +4,9 @@ SATA nodes are defined to describe on-chip Serial ATA controllers.
 Each SATA controller should have its own node.
 
 Required properties:
-- compatible         : compatible list, may contain "brcm,bcm7445-ahci" and/or
+- compatible         : should be one or more of
+                       "brcm,bcm7425-ahci"
+                       "brcm,bcm7445-ahci"
                        "brcm,sata3-ahci"
 - reg                : register mappings for AHCI and SATA_TOP_CTRL
 - reg-names          : "ahci" and "top-ctrl"
diff --git a/drivers/ata/Kconfig b/drivers/ata/Kconfig
index 15e40ee62a94..8f535a88a0c7 100644
--- a/drivers/ata/Kconfig
+++ b/drivers/ata/Kconfig
@@ -100,7 +100,7 @@ config SATA_AHCI_PLATFORM
 
 config AHCI_BRCMSTB
 	tristate "Broadcom STB AHCI SATA support"
-	depends on ARCH_BRCMSTB
+	depends on ARCH_BRCMSTB || BMIPS_GENERIC
 	help
 	  This option enables support for the AHCI SATA3 controller found on
 	  STB SoC's.
diff --git a/drivers/ata/ahci_brcmstb.c b/drivers/ata/ahci_brcmstb.c
index 14b7305d2ba0..73e3b0b2a3c2 100644
--- a/drivers/ata/ahci_brcmstb.c
+++ b/drivers/ata/ahci_brcmstb.c
@@ -300,6 +300,7 @@ static int brcm_ahci_remove(struct platform_device *pdev)
 }
 
 static const struct of_device_id ahci_of_match[] = {
+	{.compatible = "brcm,bcm7425-ahci"},
 	{.compatible = "brcm,bcm7445-ahci"},
 	{},
 };
-- 
2.6.2


^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [v4 02/10] ata: ahci_brcmstb: add quirk for broken ncq
  2015-10-30 14:01 [v4 00/10] add support SATA for BMIPS_GENERIC Jaedon Shin
  2015-10-30 14:01 ` [v4 01/10] ata: ahci_brcmstb: add support MIPS-based platforms Jaedon Shin
@ 2015-10-30 14:01 ` Jaedon Shin
  2015-11-17  2:16   ` Brian Norris
  2015-11-17 20:01   ` Tejun Heo
       [not found] ` <1446213684-2625-1-git-send-email-jaedon.shin-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
                   ` (7 subsequent siblings)
  9 siblings, 2 replies; 22+ messages in thread
From: Jaedon Shin @ 2015-10-30 14:01 UTC (permalink / raw)
  To: Brian Norris, Florian Fainelli, Tejun Heo,
	Kishon Vijay Abraham I, Ralf Baechle, Rob Herring
  Cc: Kevin Cernekee, Dragan Stancevic, linux-ide, Linux-MIPS,
	devicetree, Jaedon Shin

Add quirk for broken ncq. Some chipsets (eg. BCM7349A0, BCM7445A0,
BCM7445B0, and all 40nm chipsets including BCM7425) need a workaround
disabling NCQ.

Signed-off-by: Jaedon Shin <jaedon.shin@gmail.com>
---
 drivers/ata/ahci_brcmstb.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 46 insertions(+)

diff --git a/drivers/ata/ahci_brcmstb.c b/drivers/ata/ahci_brcmstb.c
index 73e3b0b2a3c2..194aeda8f14d 100644
--- a/drivers/ata/ahci_brcmstb.c
+++ b/drivers/ata/ahci_brcmstb.c
@@ -69,10 +69,15 @@
 	(DATA_ENDIAN << DMADESC_ENDIAN_SHIFT) |		\
 	(MMIO_ENDIAN << MMIO_ENDIAN_SHIFT))
 
+enum brcm_ahci_quirks {
+	BRCM_AHCI_QUIRK_NONCQ		= BIT(0),
+};
+
 struct brcm_ahci_priv {
 	struct device *dev;
 	void __iomem *top_ctrl;
 	u32 port_mask;
+	u32 quirks;
 };
 
 static const struct ata_port_info ahci_brcm_port_info = {
@@ -202,6 +207,42 @@ static u32 brcm_ahci_get_portmask(struct platform_device *pdev,
 	return impl;
 }
 
+static void brcm_sata_quirks(struct platform_device *pdev,
+			     struct brcm_ahci_priv *priv)
+{
+	if (priv->quirks & BRCM_AHCI_QUIRK_NONCQ) {
+		void __iomem *ctrl = priv->top_ctrl + SATA_TOP_CTRL_BUS_CTRL;
+		void __iomem *ahci;
+		struct resource *res;
+		u32 reg;
+
+		res = platform_get_resource_byname(pdev, IORESOURCE_MEM,
+						   "ahci");
+		ahci = devm_ioremap_resource(&pdev->dev, res);
+		if (IS_ERR(ahci))
+			return;
+
+		reg = brcm_sata_readreg(ctrl);
+		reg |= OVERRIDE_HWINIT;
+		brcm_sata_writereg(reg, ctrl);
+
+		/* Clear out the NCQ bit so the AHCI driver will not issue
+		 * FPDMA/NCQ commands.
+		 */
+		reg = readl(ahci + HOST_CAP);
+		reg &= ~HOST_CAP_NCQ;
+		writel(reg, ahci + HOST_CAP);
+
+		reg = brcm_sata_readreg(ctrl);
+		reg &= ~OVERRIDE_HWINIT;
+		brcm_sata_writereg(reg, ctrl);
+
+		devm_iounmap(&pdev->dev, ahci);
+		devm_release_mem_region(&pdev->dev, res->start,
+					resource_size(res));
+	}
+}
+
 static void brcm_sata_init(struct brcm_ahci_priv *priv)
 {
 	/* Configure endianness */
@@ -256,6 +297,11 @@ static int brcm_ahci_probe(struct platform_device *pdev)
 	if (IS_ERR(priv->top_ctrl))
 		return PTR_ERR(priv->top_ctrl);
 
+	if (of_device_is_compatible(dev->of_node, "brcm,bcm7425-ahci"))
+		priv->quirks |= BRCM_AHCI_QUIRK_NONCQ;
+
+	brcm_sata_quirks(pdev, priv);
+
 	brcm_sata_init(priv);
 
 	priv->port_mask = brcm_ahci_get_portmask(pdev, priv);
-- 
2.6.2


^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [v4 03/10] ata: ahci_brcmstb: add quirk for different phy
  2015-10-30 14:01 [v4 00/10] add support SATA for BMIPS_GENERIC Jaedon Shin
@ 2015-10-30 14:01     ` Jaedon Shin
  2015-10-30 14:01 ` [v4 02/10] ata: ahci_brcmstb: add quirk for broken ncq Jaedon Shin
                       ` (8 subsequent siblings)
  9 siblings, 0 replies; 22+ messages in thread
From: Jaedon Shin @ 2015-10-30 14:01 UTC (permalink / raw)
  To: Brian Norris, Florian Fainelli, Tejun Heo,
	Kishon Vijay Abraham I, Ralf Baechle, Rob Herring
  Cc: Kevin Cernekee, Dragan Stancevic,
	linux-ide-u79uwXL29TY76Z2rM5mHXA, Linux-MIPS,
	devicetree-u79uwXL29TY76Z2rM5mHXA, Jaedon Shin

Add quirk for phy interface of MIPS-based chipsets. The ARM-based
chipsets have four phy interface control registers and each port has two
registers but the MIPS-based chipsets have three. There are no
information and documentation.

The Broadcom strict-ahci based BSP of legacy version did not control
these registers.

Signed-off-by: Jaedon Shin <jaedon.shin-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
---
 drivers/ata/ahci_brcmstb.c | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/drivers/ata/ahci_brcmstb.c b/drivers/ata/ahci_brcmstb.c
index 194aeda8f14d..5098e6c041ac 100644
--- a/drivers/ata/ahci_brcmstb.c
+++ b/drivers/ata/ahci_brcmstb.c
@@ -71,6 +71,7 @@
 
 enum brcm_ahci_quirks {
 	BRCM_AHCI_QUIRK_NONCQ		= BIT(0),
+	BRCM_AHCI_QUIRK_SKIP_PHY_ENABLE	= 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->quirks & BRCM_AHCI_QUIRK_SKIP_PHY_ENABLE)
+		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->quirks & BRCM_AHCI_QUIRK_SKIP_PHY_ENABLE)
+		return;
+
 	/* power-off the PHY digital logic */
 	p = phyctrl + SATA_TOP_CTRL_PHY_CTRL_2;
 	reg = brcm_sata_readreg(p);
@@ -297,8 +304,10 @@ static int brcm_ahci_probe(struct platform_device *pdev)
 	if (IS_ERR(priv->top_ctrl))
 		return PTR_ERR(priv->top_ctrl);
 
-	if (of_device_is_compatible(dev->of_node, "brcm,bcm7425-ahci"))
+	if (of_device_is_compatible(dev->of_node, "brcm,bcm7425-ahci")) {
 		priv->quirks |= BRCM_AHCI_QUIRK_NONCQ;
+		priv->quirks |= BRCM_AHCI_QUIRK_SKIP_PHY_ENABLE;
+	}
 
 	brcm_sata_quirks(pdev, priv);
 
-- 
2.6.2

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

^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [v4 03/10] ata: ahci_brcmstb: add quirk for different phy
@ 2015-10-30 14:01     ` Jaedon Shin
  0 siblings, 0 replies; 22+ messages in thread
From: Jaedon Shin @ 2015-10-30 14:01 UTC (permalink / raw)
  To: Brian Norris, Florian Fainelli, Tejun Heo,
	Kishon Vijay Abraham I, Ralf Baechle, Rob Herring
  Cc: Kevin Cernekee, Dragan Stancevic, linux-ide, Linux-MIPS,
	devicetree, Jaedon Shin

Add quirk for phy interface of MIPS-based chipsets. The ARM-based
chipsets have four phy interface control registers and each port has two
registers but the MIPS-based chipsets have three. There are no
information and documentation.

The Broadcom strict-ahci based BSP of legacy version did not control
these registers.

Signed-off-by: Jaedon Shin <jaedon.shin@gmail.com>
---
 drivers/ata/ahci_brcmstb.c | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/drivers/ata/ahci_brcmstb.c b/drivers/ata/ahci_brcmstb.c
index 194aeda8f14d..5098e6c041ac 100644
--- a/drivers/ata/ahci_brcmstb.c
+++ b/drivers/ata/ahci_brcmstb.c
@@ -71,6 +71,7 @@
 
 enum brcm_ahci_quirks {
 	BRCM_AHCI_QUIRK_NONCQ		= BIT(0),
+	BRCM_AHCI_QUIRK_SKIP_PHY_ENABLE	= 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->quirks & BRCM_AHCI_QUIRK_SKIP_PHY_ENABLE)
+		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->quirks & BRCM_AHCI_QUIRK_SKIP_PHY_ENABLE)
+		return;
+
 	/* power-off the PHY digital logic */
 	p = phyctrl + SATA_TOP_CTRL_PHY_CTRL_2;
 	reg = brcm_sata_readreg(p);
@@ -297,8 +304,10 @@ static int brcm_ahci_probe(struct platform_device *pdev)
 	if (IS_ERR(priv->top_ctrl))
 		return PTR_ERR(priv->top_ctrl);
 
-	if (of_device_is_compatible(dev->of_node, "brcm,bcm7425-ahci"))
+	if (of_device_is_compatible(dev->of_node, "brcm,bcm7425-ahci")) {
 		priv->quirks |= BRCM_AHCI_QUIRK_NONCQ;
+		priv->quirks |= BRCM_AHCI_QUIRK_SKIP_PHY_ENABLE;
+	}
 
 	brcm_sata_quirks(pdev, priv);
 
-- 
2.6.2

^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [v4 04/10] ata: ahci_brcmstb: remove unused definitions
  2015-10-30 14:01 [v4 00/10] add support SATA for BMIPS_GENERIC Jaedon Shin
@ 2015-10-30 14:01     ` Jaedon Shin
  2015-10-30 14:01 ` [v4 02/10] ata: ahci_brcmstb: add quirk for broken ncq Jaedon Shin
                       ` (8 subsequent siblings)
  9 siblings, 0 replies; 22+ messages in thread
From: Jaedon Shin @ 2015-10-30 14:01 UTC (permalink / raw)
  To: Brian Norris, Florian Fainelli, Tejun Heo,
	Kishon Vijay Abraham I, Ralf Baechle, Rob Herring
  Cc: Kevin Cernekee, Dragan Stancevic,
	linux-ide-u79uwXL29TY76Z2rM5mHXA, Linux-MIPS,
	devicetree-u79uwXL29TY76Z2rM5mHXA, Jaedon Shin

Remove unused definitions, and this is to avoid confusion with MIPS-based
chipsets.

Signed-off-by: Jaedon Shin <jaedon.shin-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
---
 drivers/ata/ahci_brcmstb.c | 2 --
 1 file changed, 2 deletions(-)

diff --git a/drivers/ata/ahci_brcmstb.c b/drivers/ata/ahci_brcmstb.c
index 5098e6c041ac..a9050a95ce42 100644
--- a/drivers/ata/ahci_brcmstb.c
+++ b/drivers/ata/ahci_brcmstb.c
@@ -52,8 +52,6 @@
   #define SATA_TOP_CTRL_2_PHY_GLOBAL_RESET		BIT(14)
  #define SATA_TOP_CTRL_PHY_OFFS				0x8
  #define SATA_TOP_MAX_PHYS				2
-#define SATA_TOP_CTRL_SATA_TP_OUT			0x1c
-#define SATA_TOP_CTRL_CLIENT_INIT_CTRL			0x20
 
 /* On big-endian MIPS, buses are reversed to big endian, so switch them back */
 #if defined(CONFIG_MIPS) && defined(__BIG_ENDIAN)
-- 
2.6.2

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

^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [v4 04/10] ata: ahci_brcmstb: remove unused definitions
@ 2015-10-30 14:01     ` Jaedon Shin
  0 siblings, 0 replies; 22+ messages in thread
From: Jaedon Shin @ 2015-10-30 14:01 UTC (permalink / raw)
  To: Brian Norris, Florian Fainelli, Tejun Heo,
	Kishon Vijay Abraham I, Ralf Baechle, Rob Herring
  Cc: Kevin Cernekee, Dragan Stancevic, linux-ide, Linux-MIPS,
	devicetree, Jaedon Shin

Remove unused definitions, and this is to avoid confusion with MIPS-based
chipsets.

Signed-off-by: Jaedon Shin <jaedon.shin@gmail.com>
---
 drivers/ata/ahci_brcmstb.c | 2 --
 1 file changed, 2 deletions(-)

diff --git a/drivers/ata/ahci_brcmstb.c b/drivers/ata/ahci_brcmstb.c
index 5098e6c041ac..a9050a95ce42 100644
--- a/drivers/ata/ahci_brcmstb.c
+++ b/drivers/ata/ahci_brcmstb.c
@@ -52,8 +52,6 @@
   #define SATA_TOP_CTRL_2_PHY_GLOBAL_RESET		BIT(14)
  #define SATA_TOP_CTRL_PHY_OFFS				0x8
  #define SATA_TOP_MAX_PHYS				2
-#define SATA_TOP_CTRL_SATA_TP_OUT			0x1c
-#define SATA_TOP_CTRL_CLIENT_INIT_CTRL			0x20
 
 /* On big-endian MIPS, buses are reversed to big endian, so switch them back */
 #if defined(CONFIG_MIPS) && defined(__BIG_ENDIAN)
-- 
2.6.2

^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [v4 05/10] phy: phy_brcmstb_sata: remove duplicate definitions
  2015-10-30 14:01 [v4 00/10] add support SATA for BMIPS_GENERIC Jaedon Shin
                   ` (2 preceding siblings ...)
       [not found] ` <1446213684-2625-1-git-send-email-jaedon.shin-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
@ 2015-10-30 14:01 ` Jaedon Shin
  2015-10-30 14:01 ` [v4 06/10] phy: phy_brcmstb_sata: add data for phy version Jaedon Shin
                   ` (5 subsequent siblings)
  9 siblings, 0 replies; 22+ messages in thread
From: Jaedon Shin @ 2015-10-30 14:01 UTC (permalink / raw)
  To: Brian Norris, Florian Fainelli, Tejun Heo,
	Kishon Vijay Abraham I, Ralf Baechle, Rob Herring
  Cc: Kevin Cernekee, Dragan Stancevic, linux-ide, Linux-MIPS,
	devicetree, Jaedon Shin

Remove duplicate definitions.

Signed-off-by: Jaedon Shin <jaedon.shin@gmail.com>
Acked-by: Florian Fainelli <f.fainelli@gmail.com>
Acked-by: Brian Norris <computersforpeace@gmail.com>
---
 drivers/phy/phy-brcmstb-sata.c | 2 --
 1 file changed, 2 deletions(-)

diff --git a/drivers/phy/phy-brcmstb-sata.c b/drivers/phy/phy-brcmstb-sata.c
index 8a2cb16a1937..0be55dafe9ea 100644
--- a/drivers/phy/phy-brcmstb-sata.c
+++ b/drivers/phy/phy-brcmstb-sata.c
@@ -26,8 +26,6 @@
 
 #define SATA_MDIO_BANK_OFFSET				0x23c
 #define SATA_MDIO_REG_OFFSET(ofs)			((ofs) * 4)
-#define SATA_MDIO_REG_SPACE_SIZE			0x1000
-#define SATA_MDIO_REG_LENGTH				0x1f00
 
 #define MAX_PORTS					2
 
-- 
2.6.2


^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [v4 06/10] phy: phy_brcmstb_sata: add data for phy version
  2015-10-30 14:01 [v4 00/10] add support SATA for BMIPS_GENERIC Jaedon Shin
                   ` (3 preceding siblings ...)
  2015-10-30 14:01 ` [v4 05/10] phy: phy_brcmstb_sata: remove duplicate definitions Jaedon Shin
@ 2015-10-30 14:01 ` Jaedon Shin
  2015-10-30 14:01 ` [v4 07/10] phy: phy_brcmstb_sata: add support MIPS-based platforms Jaedon Shin
                   ` (4 subsequent siblings)
  9 siblings, 0 replies; 22+ messages in thread
From: Jaedon Shin @ 2015-10-30 14:01 UTC (permalink / raw)
  To: Brian Norris, Florian Fainelli, Tejun Heo,
	Kishon Vijay Abraham I, Ralf Baechle, Rob Herring
  Cc: Kevin Cernekee, Dragan Stancevic, linux-ide, Linux-MIPS,
	devicetree, Jaedon Shin

Add data of device for phy version. and 28nm version is default.

Signed-off-by: Jaedon Shin <jaedon.shin@gmail.com>
---
 drivers/phy/phy-brcmstb-sata.c | 23 ++++++++++++++++++++---
 1 file changed, 20 insertions(+), 3 deletions(-)

diff --git a/drivers/phy/phy-brcmstb-sata.c b/drivers/phy/phy-brcmstb-sata.c
index 0be55dafe9ea..5de394f589c8 100644
--- a/drivers/phy/phy-brcmstb-sata.c
+++ b/drivers/phy/phy-brcmstb-sata.c
@@ -30,7 +30,11 @@
 #define MAX_PORTS					2
 
 /* Register offset between PHYs in PCB space */
-#define SATA_MDIO_REG_SPACE_SIZE			0x1000
+#define SATA_MDIO_REG_28NM_SPACE_SIZE			0x1000
+
+enum brcm_sata_phy_version {
+	BRCM_SATA_PHY_28NM,
+};
 
 struct brcm_sata_port {
 	int portnum;
@@ -42,6 +46,7 @@ struct brcm_sata_port {
 struct brcm_sata_phy {
 	struct device *dev;
 	void __iomem *phy_base;
+	enum brcm_sata_phy_version version;
 
 	struct brcm_sata_port phys[MAX_PORTS];
 };
@@ -64,8 +69,12 @@ enum sata_mdio_phy_regs_28nm {
 static inline void __iomem *brcm_sata_phy_base(struct brcm_sata_port *port)
 {
 	struct brcm_sata_phy *priv = port->phy_priv;
+	u32 offset;
 
-	return priv->phy_base + (port->portnum * SATA_MDIO_REG_SPACE_SIZE);
+	if (priv->version == BRCM_SATA_PHY_28NM)
+		offset = SATA_MDIO_REG_28NM_SPACE_SIZE;
+
+	return priv->phy_base + (port->portnum * offset);
 }
 
 static void brcm_sata_mdio_wr(void __iomem *addr, u32 bank, u32 ofs,
@@ -126,7 +135,8 @@ static const struct phy_ops phy_ops_28nm = {
 };
 
 static const struct of_device_id brcm_sata_phy_of_match[] = {
-	{ .compatible	= "brcm,bcm7445-sata-phy" },
+	{ .compatible	= "brcm,bcm7445-sata-phy",
+	  .data = (void *)BRCM_SATA_PHY_28NM },
 	{},
 };
 MODULE_DEVICE_TABLE(of, brcm_sata_phy_of_match);
@@ -135,6 +145,7 @@ static int brcm_sata_phy_probe(struct platform_device *pdev)
 {
 	struct device *dev = &pdev->dev;
 	struct device_node *dn = dev->of_node, *child;
+	const struct of_device_id *of_id;
 	struct brcm_sata_phy *priv;
 	struct resource *res;
 	struct phy_provider *provider;
@@ -154,6 +165,12 @@ static int brcm_sata_phy_probe(struct platform_device *pdev)
 	if (IS_ERR(priv->phy_base))
 		return PTR_ERR(priv->phy_base);
 
+	of_id = of_match_node(brcm_sata_phy_of_match, dn);
+	if (of_id)
+		priv->version = (enum brcm_sata_phy_version)of_id->data;
+	else
+		priv->version = BRCM_SATA_PHY_28NM;
+
 	for_each_available_child_of_node(dn, child) {
 		unsigned int id;
 		struct brcm_sata_port *port;
-- 
2.6.2


^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [v4 07/10] phy: phy_brcmstb_sata: add support MIPS-based platforms
  2015-10-30 14:01 [v4 00/10] add support SATA for BMIPS_GENERIC Jaedon Shin
                   ` (4 preceding siblings ...)
  2015-10-30 14:01 ` [v4 06/10] phy: phy_brcmstb_sata: add data for phy version Jaedon Shin
@ 2015-10-30 14:01 ` Jaedon Shin
  2015-10-30 14:01 ` [v4 08/10] MIPS: BMIPS: brcmstb: add SATA/PHY nodes for bcm7425 Jaedon Shin
                   ` (3 subsequent siblings)
  9 siblings, 0 replies; 22+ messages in thread
From: Jaedon Shin @ 2015-10-30 14:01 UTC (permalink / raw)
  To: Brian Norris, Florian Fainelli, Tejun Heo,
	Kishon Vijay Abraham I, Ralf Baechle, Rob Herring
  Cc: Kevin Cernekee, Dragan Stancevic, linux-ide, Linux-MIPS,
	devicetree, Jaedon Shin

The BCM7xxx ARM-based and MIPS-based platforms share a similar hardware
block for AHCI SATA3.

The BCM7425 is main chipset of MIPS-based 40nm class. The others have
same PHY of AHCI block. The compatible string may use
brcm,bcm7425-sata-phy.

Signed-off-by: Jaedon Shin <jaedon.shin@gmail.com>
Acked-by: Rob Herring <robh@kernel.org>
---
 .../bindings/phy/brcm,brcmstb-sata-phy.txt         |  1 +
 drivers/phy/Kconfig                                |  4 ++--
 drivers/phy/phy-brcmstb-sata.c                     | 24 ++++++++++++++++------
 3 files changed, 21 insertions(+), 8 deletions(-)

diff --git a/Documentation/devicetree/bindings/phy/brcm,brcmstb-sata-phy.txt b/Documentation/devicetree/bindings/phy/brcm,brcmstb-sata-phy.txt
index 7f81ef90146a..d87ab7c127b8 100644
--- a/Documentation/devicetree/bindings/phy/brcm,brcmstb-sata-phy.txt
+++ b/Documentation/devicetree/bindings/phy/brcm,brcmstb-sata-phy.txt
@@ -2,6 +2,7 @@
 
 Required properties:
 - compatible: should be one or more of
+     "brcm,bcm7425-sata-phy"
      "brcm,bcm7445-sata-phy"
      "brcm,phy-sata3"
 - address-cells: should be 1
diff --git a/drivers/phy/Kconfig b/drivers/phy/Kconfig
index 47da573d0bab..c83e48661fd7 100644
--- a/drivers/phy/Kconfig
+++ b/drivers/phy/Kconfig
@@ -364,11 +364,11 @@ config PHY_TUSB1210
 
 config PHY_BRCMSTB_SATA
 	tristate "Broadcom STB SATA PHY driver"
-	depends on ARCH_BRCMSTB
+	depends on ARCH_BRCMSTB || BMIPS_GENERIC
 	depends on OF
 	select GENERIC_PHY
 	help
-	  Enable this to support the SATA3 PHY on 28nm Broadcom STB SoCs.
+	  Enable this to support the SATA3 PHY on 28nm or 40nm Broadcom STB SoCs.
 	  Likely useful only with CONFIG_SATA_BRCMSTB enabled.
 
 endmenu
diff --git a/drivers/phy/phy-brcmstb-sata.c b/drivers/phy/phy-brcmstb-sata.c
index 5de394f589c8..c8243581f196 100644
--- a/drivers/phy/phy-brcmstb-sata.c
+++ b/drivers/phy/phy-brcmstb-sata.c
@@ -32,8 +32,14 @@
 /* Register offset between PHYs in PCB space */
 #define SATA_MDIO_REG_28NM_SPACE_SIZE			0x1000
 
+/* The older SATA PHY registers duplicated per port registers within the map,
+ * rather than having a separate map per port.
+ */
+#define SATA_MDIO_REG_40NM_SPACE_SIZE			0x10
+
 enum brcm_sata_phy_version {
 	BRCM_SATA_PHY_28NM,
+	BRCM_SATA_PHY_40NM,
 };
 
 struct brcm_sata_port {
@@ -51,7 +57,7 @@ struct brcm_sata_phy {
 	struct brcm_sata_port phys[MAX_PORTS];
 };
 
-enum sata_mdio_phy_regs_28nm {
+enum sata_mdio_phy_regs {
 	PLL_REG_BANK_0				= 0x50,
 	PLL_REG_BANK_0_PLLCONTROL_0		= 0x81,
 
@@ -69,10 +75,14 @@ enum sata_mdio_phy_regs_28nm {
 static inline void __iomem *brcm_sata_phy_base(struct brcm_sata_port *port)
 {
 	struct brcm_sata_phy *priv = port->phy_priv;
-	u32 offset;
+	u32 offset = 0;
 
 	if (priv->version == BRCM_SATA_PHY_28NM)
 		offset = SATA_MDIO_REG_28NM_SPACE_SIZE;
+	else if (priv->version == BRCM_SATA_PHY_40NM)
+		offset = SATA_MDIO_REG_40NM_SPACE_SIZE;
+	else
+		dev_err(priv->dev, "should not happen\n");
 
 	return priv->phy_base + (port->portnum * offset);
 }
@@ -93,7 +103,7 @@ static void brcm_sata_mdio_wr(void __iomem *addr, u32 bank, u32 ofs,
 #define FMAX_VAL_DEFAULT	0x3df
 #define FMAX_VAL_SSC		0x83
 
-static void brcm_sata_cfg_ssc_28nm(struct brcm_sata_port *port)
+static void brcm_sata_cfg_ssc(struct brcm_sata_port *port)
 {
 	void __iomem *base = brcm_sata_phy_base(port);
 	struct brcm_sata_phy *priv = port->phy_priv;
@@ -124,12 +134,12 @@ static int brcm_sata_phy_init(struct phy *phy)
 {
 	struct brcm_sata_port *port = phy_get_drvdata(phy);
 
-	brcm_sata_cfg_ssc_28nm(port);
+	brcm_sata_cfg_ssc(port);
 
 	return 0;
 }
 
-static const struct phy_ops phy_ops_28nm = {
+static const struct phy_ops phy_ops = {
 	.init		= brcm_sata_phy_init,
 	.owner		= THIS_MODULE,
 };
@@ -137,6 +147,8 @@ static const struct phy_ops phy_ops_28nm = {
 static const struct of_device_id brcm_sata_phy_of_match[] = {
 	{ .compatible	= "brcm,bcm7445-sata-phy",
 	  .data = (void *)BRCM_SATA_PHY_28NM },
+	{ .compatible	= "brcm,bcm7425-sata-phy",
+	  .data = (void *)BRCM_SATA_PHY_40NM },
 	{},
 };
 MODULE_DEVICE_TABLE(of, brcm_sata_phy_of_match);
@@ -193,7 +205,7 @@ static int brcm_sata_phy_probe(struct platform_device *pdev)
 		port = &priv->phys[id];
 		port->portnum = id;
 		port->phy_priv = priv;
-		port->phy = devm_phy_create(dev, child, &phy_ops_28nm);
+		port->phy = devm_phy_create(dev, child, &phy_ops);
 		port->ssc_en = of_property_read_bool(child, "brcm,enable-ssc");
 		if (IS_ERR(port->phy)) {
 			dev_err(dev, "failed to create PHY\n");
-- 
2.6.2


^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [v4 08/10] MIPS: BMIPS: brcmstb: add SATA/PHY nodes for bcm7425
  2015-10-30 14:01 [v4 00/10] add support SATA for BMIPS_GENERIC Jaedon Shin
                   ` (5 preceding siblings ...)
  2015-10-30 14:01 ` [v4 07/10] phy: phy_brcmstb_sata: add support MIPS-based platforms Jaedon Shin
@ 2015-10-30 14:01 ` Jaedon Shin
  2015-10-30 14:01 ` [v4 09/10] MIPS: BMIPS: brcmstb: add SATA/PHY nodes for bcm7346 Jaedon Shin
                   ` (2 subsequent siblings)
  9 siblings, 0 replies; 22+ messages in thread
From: Jaedon Shin @ 2015-10-30 14:01 UTC (permalink / raw)
  To: Brian Norris, Florian Fainelli, Tejun Heo,
	Kishon Vijay Abraham I, Ralf Baechle, Rob Herring
  Cc: Kevin Cernekee, Dragan Stancevic, linux-ide, Linux-MIPS,
	devicetree, Jaedon Shin

Add AHCI and PHY device nodes to MIPS-based BCM7425 set-top box
platform.

Signed-off-by: Jaedon Shin <jaedon.shin@gmail.com>
---
 arch/mips/boot/dts/brcm/bcm7425.dtsi | 40 ++++++++++++++++++++++++++++++++++++
 1 file changed, 40 insertions(+)

diff --git a/arch/mips/boot/dts/brcm/bcm7425.dtsi b/arch/mips/boot/dts/brcm/bcm7425.dtsi
index 5b660b617ead..47d7bbb20dfd 100644
--- a/arch/mips/boot/dts/brcm/bcm7425.dtsi
+++ b/arch/mips/boot/dts/brcm/bcm7425.dtsi
@@ -221,5 +221,45 @@
 			interrupts = <73>;
 			status = "disabled";
 		};
+
+		sata: sata@181000 {
+			compatible = "brcm,bcm7425-ahci", "brcm,sata3-ahci";
+			reg-names = "ahci", "top-ctrl";
+			reg = <0x181000 0xa9c>, <0x180020 0x1c>;
+			interrupt-parent = <&periph_intc>;
+			interrupts = <40>;
+			#address-cells = <1>;
+			#size-cells = <0>;
+			status = "disabled";
+
+			sata0: sata-port@0 {
+				reg = <0>;
+				phys = <&sata_phy0>;
+			};
+
+			sata1: sata-port@1 {
+				reg = <1>;
+				phys = <&sata_phy1>;
+			};
+		};
+
+		sata_phy: sata-phy@1800000 {
+			compatible = "brcm,bcm7425-sata-phy", "brcm,phy-sata3";
+			reg = <0x180100 0x0eff>;
+			reg-names = "phy";
+			#address-cells = <1>;
+			#size-cells = <0>;
+			status = "disabled";
+
+			sata_phy0: sata-phy@0 {
+				reg = <0>;
+				#phy-cells = <0>;
+			};
+
+			sata_phy1: sata-phy@1 {
+				reg = <1>;
+				#phy-cells = <0>;
+			};
+		};
 	};
 };
-- 
2.6.2


^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [v4 09/10] MIPS: BMIPS: brcmstb: add SATA/PHY nodes for bcm7346
  2015-10-30 14:01 [v4 00/10] add support SATA for BMIPS_GENERIC Jaedon Shin
                   ` (6 preceding siblings ...)
  2015-10-30 14:01 ` [v4 08/10] MIPS: BMIPS: brcmstb: add SATA/PHY nodes for bcm7425 Jaedon Shin
@ 2015-10-30 14:01 ` Jaedon Shin
  2015-10-30 14:01 ` [v4 10/10] MIPS: BMIPS: brcmstb: add SATA/PHY nodes for bcm7362 Jaedon Shin
  2015-11-13 20:27 ` [v4 00/10] add support SATA for BMIPS_GENERIC Florian Fainelli
  9 siblings, 0 replies; 22+ messages in thread
From: Jaedon Shin @ 2015-10-30 14:01 UTC (permalink / raw)
  To: Brian Norris, Florian Fainelli, Tejun Heo,
	Kishon Vijay Abraham I, Ralf Baechle, Rob Herring
  Cc: Kevin Cernekee, Dragan Stancevic, linux-ide, Linux-MIPS,
	devicetree, Jaedon Shin

Add AHCI and PHY device nodes to MIPS-based BCM7346 set-top box
platform.

Signed-off-by: Jaedon Shin <jaedon.shin@gmail.com>
---
 arch/mips/boot/dts/brcm/bcm7346.dtsi      | 40 +++++++++++++++++++++++++++++++
 arch/mips/boot/dts/brcm/bcm97346dbsmb.dts |  8 +++++++
 2 files changed, 48 insertions(+)

diff --git a/arch/mips/boot/dts/brcm/bcm7346.dtsi b/arch/mips/boot/dts/brcm/bcm7346.dtsi
index d817bb46b934..553e2801cd1e 100644
--- a/arch/mips/boot/dts/brcm/bcm7346.dtsi
+++ b/arch/mips/boot/dts/brcm/bcm7346.dtsi
@@ -246,5 +246,45 @@
 			interrupts = <76>;
 			status = "disabled";
 		};
+
+		sata: sata@181000 {
+			compatible = "brcm,bcm7425-ahci", "brcm,sata3-ahci";
+			reg-names = "ahci", "top-ctrl";
+			reg = <0x181000 0xa9c>, <0x180020 0x1c>;
+			interrupt-parent = <&periph_intc>;
+			interrupts = <40>;
+			#address-cells = <1>;
+			#size-cells = <0>;
+			status = "disabled";
+
+			sata0: sata-port@0 {
+				reg = <0>;
+				phys = <&sata_phy0>;
+			};
+
+			sata1: sata-port@1 {
+				reg = <1>;
+				phys = <&sata_phy1>;
+			};
+		};
+
+		sata_phy: sata-phy@1800000 {
+			compatible = "brcm,bcm7425-sata-phy", "brcm,phy-sata3";
+			reg = <0x180100 0x0eff>;
+			reg-names = "phy";
+			#address-cells = <1>;
+			#size-cells = <0>;
+			status = "disabled";
+
+			sata_phy0: sata-phy@0 {
+				reg = <0>;
+				#phy-cells = <0>;
+			};
+
+			sata_phy1: sata-phy@1 {
+				reg = <1>;
+				#phy-cells = <0>;
+			};
+		};
 	};
 };
diff --git a/arch/mips/boot/dts/brcm/bcm97346dbsmb.dts b/arch/mips/boot/dts/brcm/bcm97346dbsmb.dts
index 3fe0445b9d37..e147c61178cc 100644
--- a/arch/mips/boot/dts/brcm/bcm97346dbsmb.dts
+++ b/arch/mips/boot/dts/brcm/bcm97346dbsmb.dts
@@ -64,3 +64,11 @@
 &ohci3 {
 	status = "okay";
 };
+
+&sata {
+	status = "okay";
+};
+
+&sata_phy {
+	status = "okay";
+};
-- 
2.6.2


^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [v4 10/10] MIPS: BMIPS: brcmstb: add SATA/PHY nodes for bcm7362
  2015-10-30 14:01 [v4 00/10] add support SATA for BMIPS_GENERIC Jaedon Shin
                   ` (7 preceding siblings ...)
  2015-10-30 14:01 ` [v4 09/10] MIPS: BMIPS: brcmstb: add SATA/PHY nodes for bcm7346 Jaedon Shin
@ 2015-10-30 14:01 ` Jaedon Shin
  2015-11-13 20:27 ` [v4 00/10] add support SATA for BMIPS_GENERIC Florian Fainelli
  9 siblings, 0 replies; 22+ messages in thread
From: Jaedon Shin @ 2015-10-30 14:01 UTC (permalink / raw)
  To: Brian Norris, Florian Fainelli, Tejun Heo,
	Kishon Vijay Abraham I, Ralf Baechle, Rob Herring
  Cc: Kevin Cernekee, Dragan Stancevic, linux-ide, Linux-MIPS,
	devicetree, Jaedon Shin

Add AHCI and PHY device nodes to MIPS-based BCM7362 set-top box
platform.

Signed-off-by: Jaedon Shin <jaedon.shin@gmail.com>
---
 arch/mips/boot/dts/brcm/bcm7362.dtsi     | 40 ++++++++++++++++++++++++++++++++
 arch/mips/boot/dts/brcm/bcm97362svmb.dts |  8 +++++++
 2 files changed, 48 insertions(+)

diff --git a/arch/mips/boot/dts/brcm/bcm7362.dtsi b/arch/mips/boot/dts/brcm/bcm7362.dtsi
index 6e65db86fc61..40c1a38af07b 100644
--- a/arch/mips/boot/dts/brcm/bcm7362.dtsi
+++ b/arch/mips/boot/dts/brcm/bcm7362.dtsi
@@ -189,5 +189,45 @@
 			interrupts = <66>;
 			status = "disabled";
 		};
+
+		sata: sata@181000 {
+			compatible = "brcm,bcm7425-ahci", "brcm,sata3-ahci";
+			reg-names = "ahci", "top-ctrl";
+			reg = <0x181000 0xa9c>, <0x180020 0x1c>;
+			interrupt-parent = <&periph_intc>;
+			interrupts = <86>;
+			#address-cells = <1>;
+			#size-cells = <0>;
+			status = "disabled";
+
+			sata0: sata-port@0 {
+				reg = <0>;
+				phys = <&sata_phy0>;
+			};
+
+			sata1: sata-port@1 {
+				reg = <1>;
+				phys = <&sata_phy1>;
+			};
+		};
+
+		sata_phy: sata-phy@1800000 {
+			compatible = "brcm,bcm7425-sata-phy", "brcm,phy-sata3";
+			reg = <0x180100 0x0eff>;
+			reg-names = "phy";
+			#address-cells = <1>;
+			#size-cells = <0>;
+			status = "disabled";
+
+			sata_phy0: sata-phy@0 {
+				reg = <0>;
+				#phy-cells = <0>;
+			};
+
+			sata_phy1: sata-phy@1 {
+				reg = <1>;
+				#phy-cells = <0>;
+			};
+		};
 	};
 };
diff --git a/arch/mips/boot/dts/brcm/bcm97362svmb.dts b/arch/mips/boot/dts/brcm/bcm97362svmb.dts
index 739c2ef5663b..ef9a69b79bc4 100644
--- a/arch/mips/boot/dts/brcm/bcm97362svmb.dts
+++ b/arch/mips/boot/dts/brcm/bcm97362svmb.dts
@@ -40,3 +40,11 @@
 &ohci0 {
 	status = "okay";
 };
+
+&sata {
+	status = "okay";
+};
+
+&sata_phy {
+	status = "okay";
+};
-- 
2.6.2


^ permalink raw reply related	[flat|nested] 22+ messages in thread

* Re: [v4 00/10] add support SATA for BMIPS_GENERIC
  2015-10-30 14:01 [v4 00/10] add support SATA for BMIPS_GENERIC Jaedon Shin
                   ` (8 preceding siblings ...)
  2015-10-30 14:01 ` [v4 10/10] MIPS: BMIPS: brcmstb: add SATA/PHY nodes for bcm7362 Jaedon Shin
@ 2015-11-13 20:27 ` Florian Fainelli
  2015-11-14  2:16   ` Jaedon Shin
  9 siblings, 1 reply; 22+ messages in thread
From: Florian Fainelli @ 2015-11-13 20:27 UTC (permalink / raw)
  To: Jaedon Shin, Brian Norris, Tejun Heo, Kishon Vijay Abraham I,
	Ralf Baechle, Rob Herring
  Cc: Kevin Cernekee, Dragan Stancevic, linux-ide, Linux-MIPS, devicetree

On 30/10/15 07:01, Jaedon Shin wrote:
> Hi all,
> 
> This patch series add support SATA for BMIPS_GENERIC.

Sorry for the lag.

Tested on 7425b2, there is a small mistake in the interrupt number for
the AHCI controller in the 7425.dtsi file (40 -> 41, see below), after
fixing that, I get both drives (external and internal ports) to be
identified successfully:

# dmesg | grep scsi
<6>[    0.964097] scsi host0: brcm-ahci
<6>[    0.967982] scsi host1: brcm-ahci
<5>[    1.122386] scsi 0:0:0:0: Direct-Access     ATA      WDC
WD2500AAKX-7 1H19 PQ: 0 ANSI: 5
<5>[    1.124512] sd 0:0:0:0: Attached scsi generic sg0 type 0
<5>[    1.411546] scsi 1:0:0:0: Direct-Access     ATA      WDC
WD2500AAKX-7 1H19 PQ: 0 ANSI: 5
<5>[    1.428870] sd 1:0:0:0: Attached scsi generic sg1 type 0
#

And performance looks good:

# hdparm -tT /dev/sda

/dev/sda:
[   48.557068] random: nonblocking pool is initialized
Timing buffer-cache reads:   524 MB in 0.50 seconds = 1052111 kB/s
Timing buffered disk reads:  358 MB in 3.00 seconds = 122132 kB/s
# hdparm -tT /dev/sdb

/dev/sdb:
Timing buffer-cache reads:   528 MB in 0.50 seconds = 1060559 kB/s
Timing buffered disk reads:  374 MB in 3.00 seconds = 127496 kB/s


Tested-by: Florian Fainelli <f.fainelli@gmail.com>

For interrupt numbers, computing them from the HIF_CPU_INTR1 register
works like this this:

HW IRQ# = N * 32 + M

where N ranges from 0->2 and M is the bit within the 32-bits word.

Thanks!

> 
> Changes in v4:
> - remove unused properties from bcm{7425,7342,7362}.dtsi
> 
> Changes in v3:
> - fix typo quirk instead of quick
> - disable NCQ before initialzing SATA controller endianness
> - fix misnomer controlling phy interface
> - remove brcm,broken-ncq and brcm,broken-phy properties from devicetree
> - use compatible string for quirks
> - use list for compatible strings
> - add "Acked-by:" tags
> 
> Changes in v2:
> - adds quirk for ncq
> - adds quirk for phy interface control
> - remove unused definitions in ahci_brcmstb
> - combines compatible string
> 
> Jaedon Shin (10):
>   ata: ahci_brcmstb: add support MIPS-based platforms
>   ata: ahci_brcmstb: add quirk for broken ncq
>   ata: ahci_brcmstb: add quirk for different phy
>   ata: ahci_brcmstb: remove unused definitions
>   phy: phy_brcmstb_sata: remove duplicate definitions
>   phy: phy_brcmstb_sata: add data for phy version
>   phy: phy_brcmstb_sata: add support MIPS-based platforms
>   MIPS: BMIPS: brcmstb: add SATA/PHY nodes for bcm7425
>   MIPS: BMIPS: brcmstb: add SATA/PHY nodes for bcm7346
>   MIPS: BMIPS: brcmstb: add SATA/PHY nodes for bcm7362
> 
>  .../devicetree/bindings/ata/brcm,sata-brcmstb.txt  |  4 +-
>  .../bindings/phy/brcm,brcmstb-sata-phy.txt         |  1 +
>  arch/mips/boot/dts/brcm/bcm7346.dtsi               | 40 +++++++++++++++
>  arch/mips/boot/dts/brcm/bcm7362.dtsi               | 40 +++++++++++++++
>  arch/mips/boot/dts/brcm/bcm7425.dtsi               | 40 +++++++++++++++
>  arch/mips/boot/dts/brcm/bcm97346dbsmb.dts          |  8 +++
>  arch/mips/boot/dts/brcm/bcm97362svmb.dts           |  8 +++
>  drivers/ata/Kconfig                                |  2 +-
>  drivers/ata/ahci_brcmstb.c                         | 58 +++++++++++++++++++++-
>  drivers/phy/Kconfig                                |  4 +-
>  drivers/phy/phy-brcmstb-sata.c                     | 47 ++++++++++++++----
>  11 files changed, 236 insertions(+), 16 deletions(-)
> 


-- 
Florian

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [v4 00/10] add support SATA for BMIPS_GENERIC
  2015-11-13 20:27 ` [v4 00/10] add support SATA for BMIPS_GENERIC Florian Fainelli
@ 2015-11-14  2:16   ` Jaedon Shin
  0 siblings, 0 replies; 22+ messages in thread
From: Jaedon Shin @ 2015-11-14  2:16 UTC (permalink / raw)
  To: Florian Fainelli
  Cc: Brian Norris, Tejun Heo, Kishon Vijay Abraham I, Ralf Baechle,
	Rob Herring, Kevin Cernekee, Dragan Stancevic, linux-ide,
	Linux-MIPS, devicetree

Hi Florian,

> On Nov 14, 2015, at 5:27 AM, Florian Fainelli <f.fainelli@gmail.com> wrote:
> 
> On 30/10/15 07:01, Jaedon Shin wrote:
>> Hi all,
>> 
>> This patch series add support SATA for BMIPS_GENERIC.
> 
> Sorry for the lag.
> 
> Tested on 7425b2, there is a small mistake in the interrupt number for
> the AHCI controller in the 7425.dtsi file (40 -> 41, see below), after
> fixing that, I get both drives (external and internal ports) to be
> identified successfully:
> 

It's a mistake, and your explanation is correct.

The patches of device node are already applied by Ralf. So I'll add a patch
to fix the details for applied patches.

Thanks.

Jaedon

> # dmesg | grep scsi
> <6>[    0.964097] scsi host0: brcm-ahci
> <6>[    0.967982] scsi host1: brcm-ahci
> <5>[    1.122386] scsi 0:0:0:0: Direct-Access     ATA      WDC
> WD2500AAKX-7 1H19 PQ: 0 ANSI: 5
> <5>[    1.124512] sd 0:0:0:0: Attached scsi generic sg0 type 0
> <5>[    1.411546] scsi 1:0:0:0: Direct-Access     ATA      WDC
> WD2500AAKX-7 1H19 PQ: 0 ANSI: 5
> <5>[    1.428870] sd 1:0:0:0: Attached scsi generic sg1 type 0
> #
> 
> And performance looks good:
> 
> # hdparm -tT /dev/sda
> 
> /dev/sda:
> [   48.557068] random: nonblocking pool is initialized
> Timing buffer-cache reads:   524 MB in 0.50 seconds = 1052111 kB/s
> Timing buffered disk reads:  358 MB in 3.00 seconds = 122132 kB/s
> # hdparm -tT /dev/sdb
> 
> /dev/sdb:
> Timing buffer-cache reads:   528 MB in 0.50 seconds = 1060559 kB/s
> Timing buffered disk reads:  374 MB in 3.00 seconds = 127496 kB/s
> 
> 
> Tested-by: Florian Fainelli <f.fainelli@gmail.com>
> 
> For interrupt numbers, computing them from the HIF_CPU_INTR1 register
> works like this this:
> 
> HW IRQ# = N * 32 + M
> 
> where N ranges from 0->2 and M is the bit within the 32-bits word.
> 
> Thanks!
> 
>> 
>> Changes in v4:
>> - remove unused properties from bcm{7425,7342,7362}.dtsi
>> 
>> Changes in v3:
>> - fix typo quirk instead of quick
>> - disable NCQ before initialzing SATA controller endianness
>> - fix misnomer controlling phy interface
>> - remove brcm,broken-ncq and brcm,broken-phy properties from devicetree
>> - use compatible string for quirks
>> - use list for compatible strings
>> - add "Acked-by:" tags
>> 
>> Changes in v2:
>> - adds quirk for ncq
>> - adds quirk for phy interface control
>> - remove unused definitions in ahci_brcmstb
>> - combines compatible string
>> 
>> Jaedon Shin (10):
>>  ata: ahci_brcmstb: add support MIPS-based platforms
>>  ata: ahci_brcmstb: add quirk for broken ncq
>>  ata: ahci_brcmstb: add quirk for different phy
>>  ata: ahci_brcmstb: remove unused definitions
>>  phy: phy_brcmstb_sata: remove duplicate definitions
>>  phy: phy_brcmstb_sata: add data for phy version
>>  phy: phy_brcmstb_sata: add support MIPS-based platforms
>>  MIPS: BMIPS: brcmstb: add SATA/PHY nodes for bcm7425
>>  MIPS: BMIPS: brcmstb: add SATA/PHY nodes for bcm7346
>>  MIPS: BMIPS: brcmstb: add SATA/PHY nodes for bcm7362
>> 
>> .../devicetree/bindings/ata/brcm,sata-brcmstb.txt  |  4 +-
>> .../bindings/phy/brcm,brcmstb-sata-phy.txt         |  1 +
>> arch/mips/boot/dts/brcm/bcm7346.dtsi               | 40 +++++++++++++++
>> arch/mips/boot/dts/brcm/bcm7362.dtsi               | 40 +++++++++++++++
>> arch/mips/boot/dts/brcm/bcm7425.dtsi               | 40 +++++++++++++++
>> arch/mips/boot/dts/brcm/bcm97346dbsmb.dts          |  8 +++
>> arch/mips/boot/dts/brcm/bcm97362svmb.dts           |  8 +++
>> drivers/ata/Kconfig                                |  2 +-
>> drivers/ata/ahci_brcmstb.c                         | 58 +++++++++++++++++++++-
>> drivers/phy/Kconfig                                |  4 +-
>> drivers/phy/phy-brcmstb-sata.c                     | 47 ++++++++++++++----
>> 11 files changed, 236 insertions(+), 16 deletions(-)
>> 
> 
> 
> -- 
> Florian


^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [v4 02/10] ata: ahci_brcmstb: add quirk for broken ncq
  2015-10-30 14:01 ` [v4 02/10] ata: ahci_brcmstb: add quirk for broken ncq Jaedon Shin
@ 2015-11-17  2:16   ` Brian Norris
  2015-11-17  5:31     ` Jaedon Shin
  2015-11-17 20:01   ` Tejun Heo
  1 sibling, 1 reply; 22+ messages in thread
From: Brian Norris @ 2015-11-17  2:16 UTC (permalink / raw)
  To: Jaedon Shin
  Cc: Florian Fainelli, Tejun Heo, Kishon Vijay Abraham I,
	Ralf Baechle, Rob Herring, Kevin Cernekee, Dragan Stancevic,
	linux-ide, Linux-MIPS, devicetree

Hi,

On Fri, Oct 30, 2015 at 11:01:16PM +0900, Jaedon Shin wrote:
> Add quirk for broken ncq. Some chipsets (eg. BCM7349A0, BCM7445A0,
> BCM7445B0, and all 40nm chipsets including BCM7425) need a workaround
> disabling NCQ.
> 
> Signed-off-by: Jaedon Shin <jaedon.shin@gmail.com>
> ---
>  drivers/ata/ahci_brcmstb.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 46 insertions(+)
> 
> diff --git a/drivers/ata/ahci_brcmstb.c b/drivers/ata/ahci_brcmstb.c
> index 73e3b0b2a3c2..194aeda8f14d 100644
> --- a/drivers/ata/ahci_brcmstb.c
> +++ b/drivers/ata/ahci_brcmstb.c
> @@ -69,10 +69,15 @@
>  	(DATA_ENDIAN << DMADESC_ENDIAN_SHIFT) |		\
>  	(MMIO_ENDIAN << MMIO_ENDIAN_SHIFT))
>  
> +enum brcm_ahci_quirks {
> +	BRCM_AHCI_QUIRK_NONCQ		= BIT(0),
> +};
> +
>  struct brcm_ahci_priv {
>  	struct device *dev;
>  	void __iomem *top_ctrl;
>  	u32 port_mask;
> +	u32 quirks;
>  };
>  
>  static const struct ata_port_info ahci_brcm_port_info = {
> @@ -202,6 +207,42 @@ static u32 brcm_ahci_get_portmask(struct platform_device *pdev,
>  	return impl;
>  }
>  
> +static void brcm_sata_quirks(struct platform_device *pdev,
> +			     struct brcm_ahci_priv *priv)
> +{
> +	if (priv->quirks & BRCM_AHCI_QUIRK_NONCQ) {
> +		void __iomem *ctrl = priv->top_ctrl + SATA_TOP_CTRL_BUS_CTRL;
> +		void __iomem *ahci;
> +		struct resource *res;
> +		u32 reg;
> +
> +		res = platform_get_resource_byname(pdev, IORESOURCE_MEM,
> +						   "ahci");
> +		ahci = devm_ioremap_resource(&pdev->dev, res);
> +		if (IS_ERR(ahci))
> +			return;
> +
> +		reg = brcm_sata_readreg(ctrl);
> +		reg |= OVERRIDE_HWINIT;
> +		brcm_sata_writereg(reg, ctrl);
> +
> +		/* Clear out the NCQ bit so the AHCI driver will not issue
> +		 * FPDMA/NCQ commands.
> +		 */
> +		reg = readl(ahci + HOST_CAP);
> +		reg &= ~HOST_CAP_NCQ;
> +		writel(reg, ahci + HOST_CAP);

You're using readl()/writel() to access the AHCI block, but...

> +
> +		reg = brcm_sata_readreg(ctrl);
> +		reg &= ~OVERRIDE_HWINIT;
> +		brcm_sata_writereg(reg, ctrl);
> +
> +		devm_iounmap(&pdev->dev, ahci);
> +		devm_release_mem_region(&pdev->dev, res->start,
> +					resource_size(res));
> +	}
> +}
> +
>  static void brcm_sata_init(struct brcm_ahci_priv *priv)
>  {
>  	/* Configure endianness */
> @@ -256,6 +297,11 @@ static int brcm_ahci_probe(struct platform_device *pdev)
>  	if (IS_ERR(priv->top_ctrl))
>  		return PTR_ERR(priv->top_ctrl);
>  
> +	if (of_device_is_compatible(dev->of_node, "brcm,bcm7425-ahci"))
> +		priv->quirks |= BRCM_AHCI_QUIRK_NONCQ;
> +
> +	brcm_sata_quirks(pdev, priv);
> +
>  	brcm_sata_init(priv);

...the MMIO endianness is only configured in brcm_sata_init(). You won't
see this problem on ARM LE, but you should on MIPS BE. Maybe
brcm_sata_quirks() should be after brcm_sata_init()?

>  
>  	priv->port_mask = brcm_ahci_get_portmask(pdev, priv);

Brian

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [v4 00/10] add support SATA for BMIPS_GENERIC
  2015-10-30 14:01 [v4 00/10] add support SATA for BMIPS_GENERIC Jaedon Shin
@ 2015-11-17  2:22     ` Brian Norris
  2015-10-30 14:01 ` [v4 02/10] ata: ahci_brcmstb: add quirk for broken ncq Jaedon Shin
                       ` (8 subsequent siblings)
  9 siblings, 0 replies; 22+ messages in thread
From: Brian Norris @ 2015-11-17  2:22 UTC (permalink / raw)
  To: Jaedon Shin
  Cc: Florian Fainelli, Tejun Heo, Kishon Vijay Abraham I,
	Ralf Baechle, Rob Herring, Kevin Cernekee, Dragan Stancevic,
	linux-ide-u79uwXL29TY76Z2rM5mHXA, Linux-MIPS,
	devicetree-u79uwXL29TY76Z2rM5mHXA

On Fri, Oct 30, 2015 at 11:01:14PM +0900, Jaedon Shin wrote:
> Hi all,
> 
> This patch series add support SATA for BMIPS_GENERIC.
> 
> Changes in v4:
> - remove unused properties from bcm{7425,7342,7362}.dtsi
> 
> Changes in v3:
> - fix typo quirk instead of quick
> - disable NCQ before initialzing SATA controller endianness
> - fix misnomer controlling phy interface
> - remove brcm,broken-ncq and brcm,broken-phy properties from devicetree
> - use compatible string for quirks
> - use list for compatible strings
> - add "Acked-by:" tags
> 
> Changes in v2:
> - adds quirk for ncq
> - adds quirk for phy interface control
> - remove unused definitions in ahci_brcmstb
> - combines compatible string

For the drivers portions (including patch 2, if you fix the error I
pointed out):

Acked-by: Brian Norris <computersforpeace-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [v4 00/10] add support SATA for BMIPS_GENERIC
@ 2015-11-17  2:22     ` Brian Norris
  0 siblings, 0 replies; 22+ messages in thread
From: Brian Norris @ 2015-11-17  2:22 UTC (permalink / raw)
  To: Jaedon Shin
  Cc: Florian Fainelli, Tejun Heo, Kishon Vijay Abraham I,
	Ralf Baechle, Rob Herring, Kevin Cernekee, Dragan Stancevic,
	linux-ide, Linux-MIPS, devicetree

On Fri, Oct 30, 2015 at 11:01:14PM +0900, Jaedon Shin wrote:
> Hi all,
> 
> This patch series add support SATA for BMIPS_GENERIC.
> 
> Changes in v4:
> - remove unused properties from bcm{7425,7342,7362}.dtsi
> 
> Changes in v3:
> - fix typo quirk instead of quick
> - disable NCQ before initialzing SATA controller endianness
> - fix misnomer controlling phy interface
> - remove brcm,broken-ncq and brcm,broken-phy properties from devicetree
> - use compatible string for quirks
> - use list for compatible strings
> - add "Acked-by:" tags
> 
> Changes in v2:
> - adds quirk for ncq
> - adds quirk for phy interface control
> - remove unused definitions in ahci_brcmstb
> - combines compatible string

For the drivers portions (including patch 2, if you fix the error I
pointed out):

Acked-by: Brian Norris <computersforpeace@gmail.com>

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [v4 02/10] ata: ahci_brcmstb: add quirk for broken ncq
  2015-11-17  2:16   ` Brian Norris
@ 2015-11-17  5:31     ` Jaedon Shin
  0 siblings, 0 replies; 22+ messages in thread
From: Jaedon Shin @ 2015-11-17  5:31 UTC (permalink / raw)
  To: Brian Norris
  Cc: Florian Fainelli, Tejun Heo, Kishon Vijay Abraham I,
	Ralf Baechle, Rob Herring, Kevin Cernekee, Dragan Stancevic,
	linux-ide, Linux-MIPS, devicetree

Hi Brian,

> On Nov 17, 2015, at 11:16 AM, Brian Norris <computersforpeace@gmail.com> wrote:
> 
> Hi,
> 
> On Fri, Oct 30, 2015 at 11:01:16PM +0900, Jaedon Shin wrote:
>> Add quirk for broken ncq. Some chipsets (eg. BCM7349A0, BCM7445A0,
>> BCM7445B0, and all 40nm chipsets including BCM7425) need a workaround
>> disabling NCQ.
>> 
>> Signed-off-by: Jaedon Shin <jaedon.shin@gmail.com>
>> ---
>> drivers/ata/ahci_brcmstb.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++
>> 1 file changed, 46 insertions(+)
>> 
>> diff --git a/drivers/ata/ahci_brcmstb.c b/drivers/ata/ahci_brcmstb.c
>> index 73e3b0b2a3c2..194aeda8f14d 100644
>> --- a/drivers/ata/ahci_brcmstb.c
>> +++ b/drivers/ata/ahci_brcmstb.c
>> @@ -69,10 +69,15 @@
>> 	(DATA_ENDIAN << DMADESC_ENDIAN_SHIFT) |		\
>> 	(MMIO_ENDIAN << MMIO_ENDIAN_SHIFT))
>> 
>> +enum brcm_ahci_quirks {
>> +	BRCM_AHCI_QUIRK_NONCQ		= BIT(0),
>> +};
>> +
>> struct brcm_ahci_priv {
>> 	struct device *dev;
>> 	void __iomem *top_ctrl;
>> 	u32 port_mask;
>> +	u32 quirks;
>> };
>> 
>> static const struct ata_port_info ahci_brcm_port_info = {
>> @@ -202,6 +207,42 @@ static u32 brcm_ahci_get_portmask(struct platform_device *pdev,
>> 	return impl;
>> }
>> 
>> +static void brcm_sata_quirks(struct platform_device *pdev,
>> +			     struct brcm_ahci_priv *priv)
>> +{
>> +	if (priv->quirks & BRCM_AHCI_QUIRK_NONCQ) {
>> +		void __iomem *ctrl = priv->top_ctrl + SATA_TOP_CTRL_BUS_CTRL;
>> +		void __iomem *ahci;
>> +		struct resource *res;
>> +		u32 reg;
>> +
>> +		res = platform_get_resource_byname(pdev, IORESOURCE_MEM,
>> +						   "ahci");
>> +		ahci = devm_ioremap_resource(&pdev->dev, res);
>> +		if (IS_ERR(ahci))
>> +			return;
>> +
>> +		reg = brcm_sata_readreg(ctrl);
>> +		reg |= OVERRIDE_HWINIT;
>> +		brcm_sata_writereg(reg, ctrl);
>> +
>> +		/* Clear out the NCQ bit so the AHCI driver will not issue
>> +		 * FPDMA/NCQ commands.
>> +		 */
>> +		reg = readl(ahci + HOST_CAP);
>> +		reg &= ~HOST_CAP_NCQ;
>> +		writel(reg, ahci + HOST_CAP);
> 
> You're using readl()/writel() to access the AHCI block, but...
> 
>> +
>> +		reg = brcm_sata_readreg(ctrl);
>> +		reg &= ~OVERRIDE_HWINIT;
>> +		brcm_sata_writereg(reg, ctrl);
>> +
>> +		devm_iounmap(&pdev->dev, ahci);
>> +		devm_release_mem_region(&pdev->dev, res->start,
>> +					resource_size(res));
>> +	}
>> +}
>> +
>> static void brcm_sata_init(struct brcm_ahci_priv *priv)
>> {
>> 	/* Configure endianness */
>> @@ -256,6 +297,11 @@ static int brcm_ahci_probe(struct platform_device *pdev)
>> 	if (IS_ERR(priv->top_ctrl))
>> 		return PTR_ERR(priv->top_ctrl);
>> 
>> +	if (of_device_is_compatible(dev->of_node, "brcm,bcm7425-ahci"))
>> +		priv->quirks |= BRCM_AHCI_QUIRK_NONCQ;
>> +
>> +	brcm_sata_quirks(pdev, priv);
>> +
>> 	brcm_sata_init(priv);
> 
> ...the MMIO endianness is only configured in brcm_sata_init(). You won't
> see this problem on ARM LE, but you should on MIPS BE. Maybe
> brcm_sata_quirks() should be after brcm_sata_init()?
> 

Florian already pointed out, the NCQ disabling occurs prior to initializing 
the SATA controller endianness in the original BSP. Therefore I think it's better
to change to brcm_sata_{read,write}reg() instead of {read,write}l() for 
HOST_CAP overwriting.

>> 
>> 	priv->port_mask = brcm_ahci_get_portmask(pdev, priv);
> 
> Brian

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [v4 02/10] ata: ahci_brcmstb: add quirk for broken ncq
  2015-10-30 14:01 ` [v4 02/10] ata: ahci_brcmstb: add quirk for broken ncq Jaedon Shin
  2015-11-17  2:16   ` Brian Norris
@ 2015-11-17 20:01   ` Tejun Heo
  1 sibling, 0 replies; 22+ messages in thread
From: Tejun Heo @ 2015-11-17 20:01 UTC (permalink / raw)
  To: Jaedon Shin
  Cc: Brian Norris, Florian Fainelli, Kishon Vijay Abraham I,
	Ralf Baechle, Rob Herring, Kevin Cernekee, Dragan Stancevic,
	linux-ide, Linux-MIPS, devicetree

Hello,

On Fri, Oct 30, 2015 at 11:01:16PM +0900, Jaedon Shin wrote:
> +static void brcm_sata_quirks(struct platform_device *pdev,
> +			     struct brcm_ahci_priv *priv)
> +{
> +	if (priv->quirks & BRCM_AHCI_QUIRK_NONCQ) {
> +		void __iomem *ctrl = priv->top_ctrl + SATA_TOP_CTRL_BUS_CTRL;
> +		void __iomem *ahci;
> +		struct resource *res;
> +		u32 reg;
> +
> +		res = platform_get_resource_byname(pdev, IORESOURCE_MEM,
> +						   "ahci");
> +		ahci = devm_ioremap_resource(&pdev->dev, res);
> +		if (IS_ERR(ahci))
> +			return;
> +
> +		reg = brcm_sata_readreg(ctrl);
> +		reg |= OVERRIDE_HWINIT;
> +		brcm_sata_writereg(reg, ctrl);
> +
> +		/* Clear out the NCQ bit so the AHCI driver will not issue
> +		 * FPDMA/NCQ commands.
> +		 */
> +		reg = readl(ahci + HOST_CAP);
> +		reg &= ~HOST_CAP_NCQ;
> +		writel(reg, ahci + HOST_CAP);
> +
> +		reg = brcm_sata_readreg(ctrl);
> +		reg &= ~OVERRIDE_HWINIT;
> +		brcm_sata_writereg(reg, ctrl);
> +
> +		devm_iounmap(&pdev->dev, ahci);
> +		devm_release_mem_region(&pdev->dev, res->start,
> +					resource_size(res));
> +	}
> +}

Does the controller actually need HOST_CAP_NCQ bit turned off to work
correctly?  If the only thing necessary is the host not issuing NCQ
commands, setting AHCI_HFLAG_NO_NCQ should do.

>  static void brcm_sata_init(struct brcm_ahci_priv *priv)
>  {
>  	/* Configure endianness */
> @@ -256,6 +297,11 @@ static int brcm_ahci_probe(struct platform_device *pdev)
>  	if (IS_ERR(priv->top_ctrl))
>  		return PTR_ERR(priv->top_ctrl);
>  
> +	if (of_device_is_compatible(dev->of_node, "brcm,bcm7425-ahci"))
> +		priv->quirks |= BRCM_AHCI_QUIRK_NONCQ;
> +
> +	brcm_sata_quirks(pdev, priv);

What's the point of "branch - set a bit - test the bit" sequence?
Just do

	if (of_device_is_compatiable(...))
		brcm_ahci_disable_ncq(...);

Thanks.

-- 
tejun

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [v4 03/10] ata: ahci_brcmstb: add quirk for different phy
  2015-10-30 14:01     ` Jaedon Shin
@ 2015-11-17 20:06         ` Tejun Heo
  -1 siblings, 0 replies; 22+ messages in thread
From: Tejun Heo @ 2015-11-17 20:06 UTC (permalink / raw)
  To: Jaedon Shin
  Cc: Brian Norris, Florian Fainelli, Kishon Vijay Abraham I,
	Ralf Baechle, Rob Herring, Kevin Cernekee, Dragan Stancevic,
	linux-ide-u79uwXL29TY76Z2rM5mHXA, Linux-MIPS,
	devicetree-u79uwXL29TY76Z2rM5mHXA

On Fri, Oct 30, 2015 at 11:01:17PM +0900, Jaedon Shin wrote:
> Add quirk for phy interface of MIPS-based chipsets. The ARM-based
> chipsets have four phy interface control registers and each port has two
> registers but the MIPS-based chipsets have three. There are no
> information and documentation.
> 
> The Broadcom strict-ahci based BSP of legacy version did not control
> these registers.
...
>  enum brcm_ahci_quirks {
>  	BRCM_AHCI_QUIRK_NONCQ		= BIT(0),
> +	BRCM_AHCI_QUIRK_SKIP_PHY_ENABLE	= BIT(1),
>  };

I see.  There's another quirk flag which actually needs to be
persistent.  Hmm... I don't know.  Ah well, please disregard my
previous comment.

Thanks.

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

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [v4 03/10] ata: ahci_brcmstb: add quirk for different phy
@ 2015-11-17 20:06         ` Tejun Heo
  0 siblings, 0 replies; 22+ messages in thread
From: Tejun Heo @ 2015-11-17 20:06 UTC (permalink / raw)
  To: Jaedon Shin
  Cc: Brian Norris, Florian Fainelli, Kishon Vijay Abraham I,
	Ralf Baechle, Rob Herring, Kevin Cernekee, Dragan Stancevic,
	linux-ide, Linux-MIPS, devicetree

On Fri, Oct 30, 2015 at 11:01:17PM +0900, Jaedon Shin wrote:
> Add quirk for phy interface of MIPS-based chipsets. The ARM-based
> chipsets have four phy interface control registers and each port has two
> registers but the MIPS-based chipsets have three. There are no
> information and documentation.
> 
> The Broadcom strict-ahci based BSP of legacy version did not control
> these registers.
...
>  enum brcm_ahci_quirks {
>  	BRCM_AHCI_QUIRK_NONCQ		= BIT(0),
> +	BRCM_AHCI_QUIRK_SKIP_PHY_ENABLE	= BIT(1),
>  };

I see.  There's another quirk flag which actually needs to be
persistent.  Hmm... I don't know.  Ah well, please disregard my
previous comment.

Thanks.

-- 
tejun

^ permalink raw reply	[flat|nested] 22+ messages in thread

end of thread, other threads:[~2015-11-18 17:39 UTC | newest]

Thread overview: 22+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-10-30 14:01 [v4 00/10] add support SATA for BMIPS_GENERIC Jaedon Shin
2015-10-30 14:01 ` [v4 01/10] ata: ahci_brcmstb: add support MIPS-based platforms Jaedon Shin
2015-10-30 14:01 ` [v4 02/10] ata: ahci_brcmstb: add quirk for broken ncq Jaedon Shin
2015-11-17  2:16   ` Brian Norris
2015-11-17  5:31     ` Jaedon Shin
2015-11-17 20:01   ` Tejun Heo
     [not found] ` <1446213684-2625-1-git-send-email-jaedon.shin-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2015-10-30 14:01   ` [v4 03/10] ata: ahci_brcmstb: add quirk for different phy Jaedon Shin
2015-10-30 14:01     ` Jaedon Shin
     [not found]     ` <1446213684-2625-4-git-send-email-jaedon.shin-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2015-11-17 20:06       ` Tejun Heo
2015-11-17 20:06         ` Tejun Heo
2015-10-30 14:01   ` [v4 04/10] ata: ahci_brcmstb: remove unused definitions Jaedon Shin
2015-10-30 14:01     ` Jaedon Shin
2015-11-17  2:22   ` [v4 00/10] add support SATA for BMIPS_GENERIC Brian Norris
2015-11-17  2:22     ` Brian Norris
2015-10-30 14:01 ` [v4 05/10] phy: phy_brcmstb_sata: remove duplicate definitions Jaedon Shin
2015-10-30 14:01 ` [v4 06/10] phy: phy_brcmstb_sata: add data for phy version Jaedon Shin
2015-10-30 14:01 ` [v4 07/10] phy: phy_brcmstb_sata: add support MIPS-based platforms Jaedon Shin
2015-10-30 14:01 ` [v4 08/10] MIPS: BMIPS: brcmstb: add SATA/PHY nodes for bcm7425 Jaedon Shin
2015-10-30 14:01 ` [v4 09/10] MIPS: BMIPS: brcmstb: add SATA/PHY nodes for bcm7346 Jaedon Shin
2015-10-30 14:01 ` [v4 10/10] MIPS: BMIPS: brcmstb: add SATA/PHY nodes for bcm7362 Jaedon Shin
2015-11-13 20:27 ` [v4 00/10] add support SATA for BMIPS_GENERIC Florian Fainelli
2015-11-14  2:16   ` Jaedon Shin

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.