All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v4 0/3] ahci: add support for hisilicon sata
@ 2014-04-23 11:36 Kefeng Wang
  2014-04-23 11:36 ` [PATCH v4 1/3] ata: ahci: append new hflag AHCI_HFLAG_NO_FBS Kefeng Wang
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Kefeng Wang @ 2014-04-23 11:36 UTC (permalink / raw)
  To: Tejun Heo, Hans de Goede, Maxime Ripard, linux-ide, linux-kernel
  Cc: wangkefeng.wang, kefeng.wang

changes in v4:

1) add a dynamic host_flags parameter in ahci_platform_init_host
   to make it more flexible, modify some driver to use new
   way to pass host flags, suggested by Hans

changes in v3:

1) move NO_FBS chunk after YES_FBS, Tejun's suggestion
2) use ata_port_info pointer to avoid struct ata_port_info
   on the stack twice

changes in v2:

1) make code more concise according to Hans's advice



Kefeng Wang (3):
  ata: ahci: append new hflag AHCI_HFLAG_NO_FBS
  libahci_platform: add host_flags parameter in
    ahci_platform_init_host()
  ahci: add support for Hisilicon sata

 .../devicetree/bindings/ata/ahci-platform.txt      |    3 ++-
 drivers/ata/ahci.h                                 |    1 +
 drivers/ata/ahci_da850.c                           |    3 ++-
 drivers/ata/ahci_imx.c                             |    3 ++-
 drivers/ata/ahci_platform.c                        |    8 +++++++-
 drivers/ata/ahci_st.c                              |    2 +-
 drivers/ata/ahci_sunxi.c                           |    9 ++++++---
 drivers/ata/ahci_xgene.c                           |    6 +++++-
 drivers/ata/libahci.c                              |    5 +++++
 drivers/ata/libahci_platform.c                     |    2 ++
 include/linux/ahci_platform.h                      |    1 +
 11 files changed, 34 insertions(+), 9 deletions(-)

-- 
1.7.9.5


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

* [PATCH v4 1/3] ata: ahci: append new hflag AHCI_HFLAG_NO_FBS
  2014-04-23 11:36 [PATCH v4 0/3] ahci: add support for hisilicon sata Kefeng Wang
@ 2014-04-23 11:36 ` Kefeng Wang
  2014-04-23 11:36 ` [PATCH v4 2/3] libahci_platform: add host_flags parameter in ahci_platform_init_host() Kefeng Wang
  2014-04-23 11:36 ` [PATCH v4 3/3] ahci: add support for Hisilicon sata Kefeng Wang
  2 siblings, 0 replies; 6+ messages in thread
From: Kefeng Wang @ 2014-04-23 11:36 UTC (permalink / raw)
  To: Tejun Heo, Hans de Goede, Maxime Ripard, linux-ide, linux-kernel
  Cc: wangkefeng.wang, kefeng.wang, Haojian Zhuang

Append AHCI_HFLAG_NO_FBS to force turning off FBS flag.

Signed-off-by: Haojian Zhuang <haojian.zhuang@linaro.org>
Signed-off-by: Kefeng Wang <kefeng.wang@linaro.org>
---
 drivers/ata/ahci.h    |    1 +
 drivers/ata/libahci.c |    5 +++++
 2 files changed, 6 insertions(+)

diff --git a/drivers/ata/ahci.h b/drivers/ata/ahci.h
index 51af275..60db49b 100644
--- a/drivers/ata/ahci.h
+++ b/drivers/ata/ahci.h
@@ -235,6 +235,7 @@ enum {
 						        port start (wait until
 						        error-handling stage) */
 	AHCI_HFLAG_MULTI_MSI		= (1 << 16), /* multiple PCI MSIs */
+	AHCI_HFLAG_NO_FBS		= (1 << 17), /* no FBS */
 
 	/* ap->flags bits */
 
diff --git a/drivers/ata/libahci.c b/drivers/ata/libahci.c
index 6bd4f66..e1cf859 100644
--- a/drivers/ata/libahci.c
+++ b/drivers/ata/libahci.c
@@ -457,6 +457,11 @@ void ahci_save_initial_config(struct device *dev,
 		cap |= HOST_CAP_FBS;
 	}
 
+	if ((cap & HOST_CAP_FBS) && (hpriv->flags & AHCI_HFLAG_NO_FBS)) {
+		dev_info(dev, "controller can't do FBS, turning off CAP_FBS\n");
+		cap &= ~HOST_CAP_FBS;
+	}
+
 	if (force_port_map && port_map != force_port_map) {
 		dev_info(dev, "forcing port_map 0x%x -> 0x%x\n",
 			 port_map, force_port_map);
-- 
1.7.9.5

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

* [PATCH v4 2/3] libahci_platform: add host_flags parameter in ahci_platform_init_host()
  2014-04-23 11:36 [PATCH v4 0/3] ahci: add support for hisilicon sata Kefeng Wang
  2014-04-23 11:36 ` [PATCH v4 1/3] ata: ahci: append new hflag AHCI_HFLAG_NO_FBS Kefeng Wang
@ 2014-04-23 11:36 ` Kefeng Wang
  2014-04-23 11:47   ` Hans de Goede
  2014-04-23 11:36 ` [PATCH v4 3/3] ahci: add support for Hisilicon sata Kefeng Wang
  2 siblings, 1 reply; 6+ messages in thread
From: Kefeng Wang @ 2014-04-23 11:36 UTC (permalink / raw)
  To: Tejun Heo, Hans de Goede, Maxime Ripard, linux-ide, linux-kernel
  Cc: wangkefeng.wang, kefeng.wang

Add a dynamic host flags argument to make ahci_platform_init_host more flexible,
then remove the AHCI_HFLAGS(...) argument from some driver's ata_port_info,
and pass that in as the new arguments.

Cc: Hans de Geode <hdegoede@redhat.com>
Signed-off-by: Kefeng Wang <kefeng.wang@linaro.org>
---
 drivers/ata/ahci_da850.c       |    3 ++-
 drivers/ata/ahci_imx.c         |    3 ++-
 drivers/ata/ahci_platform.c    |    2 +-
 drivers/ata/ahci_st.c          |    2 +-
 drivers/ata/ahci_sunxi.c       |    9 ++++++---
 drivers/ata/ahci_xgene.c       |    6 +++++-
 drivers/ata/libahci_platform.c |    2 ++
 include/linux/ahci_platform.h  |    1 +
 8 files changed, 20 insertions(+), 8 deletions(-)

diff --git a/drivers/ata/ahci_da850.c b/drivers/ata/ahci_da850.c
index 2c83613..2b77d53 100644
--- a/drivers/ata/ahci_da850.c
+++ b/drivers/ata/ahci_da850.c
@@ -85,7 +85,8 @@ static int ahci_da850_probe(struct platform_device *pdev)
 
 	da850_sata_init(dev, pwrdn_reg, hpriv->mmio);
 
-	rc = ahci_platform_init_host(pdev, hpriv, &ahci_da850_port_info, 0, 0);
+	rc = ahci_platform_init_host(pdev, hpriv, &ahci_da850_port_info,
+				     0, 0, 0);
 	if (rc)
 		goto disable_resources;
 
diff --git a/drivers/ata/ahci_imx.c b/drivers/ata/ahci_imx.c
index 497c7ab..e7e44a7 100644
--- a/drivers/ata/ahci_imx.c
+++ b/drivers/ata/ahci_imx.c
@@ -267,7 +267,8 @@ static int imx_ahci_probe(struct platform_device *pdev)
 	reg_val = clk_get_rate(imxpriv->ahb_clk) / 1000;
 	writel(reg_val, hpriv->mmio + HOST_TIMER1MS);
 
-	ret = ahci_platform_init_host(pdev, hpriv, &ahci_imx_port_info, 0, 0);
+	ret = ahci_platform_init_host(pdev, hpriv, &ahci_imx_port_info,
+				      0, 0, 0);
 	if (ret)
 		imx_sata_disable(hpriv);
 
diff --git a/drivers/ata/ahci_platform.c b/drivers/ata/ahci_platform.c
index ef67e79..a476a1f 100644
--- a/drivers/ata/ahci_platform.c
+++ b/drivers/ata/ahci_platform.c
@@ -55,7 +55,7 @@ static int ahci_probe(struct platform_device *pdev)
 			goto disable_resources;
 	}
 
-	rc = ahci_platform_init_host(pdev, hpriv, &ahci_port_info, 0, 0);
+	rc = ahci_platform_init_host(pdev, hpriv, &ahci_port_info, 0, 0, 0);
 	if (rc)
 		goto pdata_exit;
 
diff --git a/drivers/ata/ahci_st.c b/drivers/ata/ahci_st.c
index 6332222..2595598 100644
--- a/drivers/ata/ahci_st.c
+++ b/drivers/ata/ahci_st.c
@@ -166,7 +166,7 @@ static int st_ahci_probe(struct platform_device *pdev)
 	if (err)
 		return err;
 
-	err = ahci_platform_init_host(pdev, hpriv, &st_ahci_port_info, 0, 0);
+	err = ahci_platform_init_host(pdev, hpriv, &st_ahci_port_info, 0, 0, 0);
 	if (err) {
 		ahci_platform_disable_resources(hpriv);
 		return err;
diff --git a/drivers/ata/ahci_sunxi.c b/drivers/ata/ahci_sunxi.c
index 42d3f64..543132a 100644
--- a/drivers/ata/ahci_sunxi.c
+++ b/drivers/ata/ahci_sunxi.c
@@ -157,8 +157,6 @@ static void ahci_sunxi_start_engine(struct ata_port *ap)
 }
 
 static const struct ata_port_info ahci_sunxi_port_info = {
-	AHCI_HFLAGS(AHCI_HFLAG_32BIT_ONLY | AHCI_HFLAG_NO_MSI |
-			  AHCI_HFLAG_NO_PMP | AHCI_HFLAG_YES_NCQ),
 	.flags		= AHCI_FLAG_COMMON | ATA_FLAG_NCQ,
 	.pio_mask	= ATA_PIO4,
 	.udma_mask	= ATA_UDMA6,
@@ -169,6 +167,7 @@ static int ahci_sunxi_probe(struct platform_device *pdev)
 {
 	struct device *dev = &pdev->dev;
 	struct ahci_host_priv *hpriv;
+	unsigned int hflags;
 	int rc;
 
 	hpriv = ahci_platform_get_resources(pdev);
@@ -185,7 +184,11 @@ static int ahci_sunxi_probe(struct platform_device *pdev)
 	if (rc)
 		goto disable_resources;
 
-	rc = ahci_platform_init_host(pdev, hpriv, &ahci_sunxi_port_info, 0, 0);
+	hflags = AHCI_HFLAG_32BIT_ONLY | AHCI_HFLAG_NO_MSI |
+		 AHCI_HFLAG_NO_PMP | AHCI_HFLAG_YES_NCQ,
+
+	rc = ahci_platform_init_host(pdev, hpriv, &ahci_sunxi_port_info,
+				     hflags, 0, 0);
 	if (rc)
 		goto disable_resources;
 
diff --git a/drivers/ata/ahci_xgene.c b/drivers/ata/ahci_xgene.c
index 77c89bf..8022b5a 100644
--- a/drivers/ata/ahci_xgene.c
+++ b/drivers/ata/ahci_xgene.c
@@ -382,6 +382,7 @@ static int xgene_ahci_probe(struct platform_device *pdev)
 	struct ahci_host_priv *hpriv;
 	struct xgene_ahci_context *ctx;
 	struct resource *res;
+	unsigned int hflags;
 	int rc;
 
 	hpriv = ahci_platform_get_resources(pdev);
@@ -450,7 +451,10 @@ static int xgene_ahci_probe(struct platform_device *pdev)
 		goto disable_resources;
 	}
 
-	rc = ahci_platform_init_host(pdev, hpriv, &xgene_ahci_port_info, 0, 0);
+	hflags = AHCI_HFLAG_NO_PMP | AHCI_HFLAG_YES_NCQ,
+
+	rc = ahci_platform_init_host(pdev, hpriv, &xgene_ahci_port_info,
+				     hflags, 0, 0);
 	if (rc)
 		goto disable_resources;
 
diff --git a/drivers/ata/libahci_platform.c b/drivers/ata/libahci_platform.c
index 7cb3a85..ebd880e 100644
--- a/drivers/ata/libahci_platform.c
+++ b/drivers/ata/libahci_platform.c
@@ -283,6 +283,7 @@ EXPORT_SYMBOL_GPL(ahci_platform_get_resources);
  * @pdev: platform device pointer for the host
  * @hpriv: ahci-host private data for the host
  * @pi_template: template for the ata_port_info to use
+ * @host_flags: ahci host flags used in ahci_host_priv
  * @force_port_map: param passed to ahci_save_initial_config
  * @mask_port_map: param passed to ahci_save_initial_config
  *
@@ -296,6 +297,7 @@ EXPORT_SYMBOL_GPL(ahci_platform_get_resources);
 int ahci_platform_init_host(struct platform_device *pdev,
 			    struct ahci_host_priv *hpriv,
 			    const struct ata_port_info *pi_template,
+			    unsigned int host_flags,
 			    unsigned int force_port_map,
 			    unsigned int mask_port_map)
 {
diff --git a/include/linux/ahci_platform.h b/include/linux/ahci_platform.h
index 1f16d50..45897f6 100644
--- a/include/linux/ahci_platform.h
+++ b/include/linux/ahci_platform.h
@@ -44,6 +44,7 @@ struct ahci_host_priv *ahci_platform_get_resources(
 int ahci_platform_init_host(struct platform_device *pdev,
 			    struct ahci_host_priv *hpriv,
 			    const struct ata_port_info *pi_template,
+			    unsigned int host_flags,
 			    unsigned int force_port_map,
 			    unsigned int mask_port_map);
 
-- 
1.7.9.5

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

* [PATCH v4 3/3] ahci: add support for Hisilicon sata
  2014-04-23 11:36 [PATCH v4 0/3] ahci: add support for hisilicon sata Kefeng Wang
  2014-04-23 11:36 ` [PATCH v4 1/3] ata: ahci: append new hflag AHCI_HFLAG_NO_FBS Kefeng Wang
  2014-04-23 11:36 ` [PATCH v4 2/3] libahci_platform: add host_flags parameter in ahci_platform_init_host() Kefeng Wang
@ 2014-04-23 11:36 ` Kefeng Wang
  2 siblings, 0 replies; 6+ messages in thread
From: Kefeng Wang @ 2014-04-23 11:36 UTC (permalink / raw)
  To: Tejun Heo, Hans de Goede, Maxime Ripard, linux-ide, linux-kernel
  Cc: wangkefeng.wang, kefeng.wang

The hip04 SoC of hisilicon has an AHCI compliant SATA controller,
and it is compliant with the ahci 1.3 and sata 3.0 specification.

There is a wrong bit in HOST_CAP of hip04 sata controller, which
enable unsupported feature of FBS, use AHCI_HFLAG_NO_FBS hflag to
disable it.

Signed-off-by: Kefeng Wang <kefeng.wang@linaro.org>
---
 .../devicetree/bindings/ata/ahci-platform.txt      |    3 ++-
 drivers/ata/ahci_platform.c                        |    8 +++++++-
 2 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/Documentation/devicetree/bindings/ata/ahci-platform.txt b/Documentation/devicetree/bindings/ata/ahci-platform.txt
index 48b285f..aab1d70 100644
--- a/Documentation/devicetree/bindings/ata/ahci-platform.txt
+++ b/Documentation/devicetree/bindings/ata/ahci-platform.txt
@@ -7,7 +7,8 @@ Required properties:
 - compatible        : compatible list, one of "snps,spear-ahci",
                       "snps,exynos5440-ahci", "ibm,476gtr-ahci",
                       "allwinner,sun4i-a10-ahci", "fsl,imx53-ahci"
-                      "fsl,imx6q-ahci" or "snps,dwc-ahci"
+                      "fsl,imx6q-ahci", "snps,dwc-ahci" or
+                      "hisilicon,hisi-ahci"
 - interrupts        : <interrupt mapping for SATA IRQ>
 - reg               : <registers mapping>
 
diff --git a/drivers/ata/ahci_platform.c b/drivers/ata/ahci_platform.c
index a476a1f..10d41c3 100644
--- a/drivers/ata/ahci_platform.c
+++ b/drivers/ata/ahci_platform.c
@@ -16,6 +16,7 @@
 #include <linux/module.h>
 #include <linux/pm.h>
 #include <linux/device.h>
+#include <linux/of_device.h>
 #include <linux/platform_device.h>
 #include <linux/libata.h>
 #include <linux/ahci_platform.h>
@@ -33,6 +34,7 @@ static int ahci_probe(struct platform_device *pdev)
 	struct device *dev = &pdev->dev;
 	struct ahci_platform_data *pdata = dev_get_platdata(dev);
 	struct ahci_host_priv *hpriv;
+	unsigned int hflags = 0;
 	int rc;
 
 	hpriv = ahci_platform_get_resources(pdev);
@@ -55,7 +57,11 @@ static int ahci_probe(struct platform_device *pdev)
 			goto disable_resources;
 	}
 
-	rc = ahci_platform_init_host(pdev, hpriv, &ahci_port_info, 0, 0, 0);
+	if (of_device_is_compatible(dev->of_node, "hisilicon,hisi-ahci"))
+		hflags |= AHCI_HFLAG_NO_FBS;
+
+	rc = ahci_platform_init_host(pdev, hpriv, &ahci_port_info,
+				     hflags, 0, 0);
 	if (rc)
 		goto pdata_exit;
 
-- 
1.7.9.5


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

* Re: [PATCH v4 2/3] libahci_platform: add host_flags parameter in ahci_platform_init_host()
  2014-04-23 11:36 ` [PATCH v4 2/3] libahci_platform: add host_flags parameter in ahci_platform_init_host() Kefeng Wang
@ 2014-04-23 11:47   ` Hans de Goede
  2014-04-23 12:12     ` kefeng.wang
  0 siblings, 1 reply; 6+ messages in thread
From: Hans de Goede @ 2014-04-23 11:47 UTC (permalink / raw)
  To: Kefeng Wang, Tejun Heo, Maxime Ripard, linux-ide, linux-kernel
  Cc: wangkefeng.wang

Hi,

On 04/23/2014 01:36 PM, Kefeng Wang wrote:
> Add a dynamic host flags argument to make ahci_platform_init_host more flexible,
> then remove the AHCI_HFLAGS(...) argument from some driver's ata_port_info,
> and pass that in as the new arguments.
> 
> Cc: Hans de Geode <hdegoede@redhat.com>
> Signed-off-by: Kefeng Wang <kefeng.wang@linaro.org>

Thanks for working on this, review comments inline.

> ---
>  drivers/ata/ahci_da850.c       |    3 ++-
>  drivers/ata/ahci_imx.c         |    3 ++-
>  drivers/ata/ahci_platform.c    |    2 +-
>  drivers/ata/ahci_st.c          |    2 +-
>  drivers/ata/ahci_sunxi.c       |    9 ++++++---
>  drivers/ata/ahci_xgene.c       |    6 +++++-
>  drivers/ata/libahci_platform.c |    2 ++
>  include/linux/ahci_platform.h  |    1 +
>  8 files changed, 20 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/ata/ahci_da850.c b/drivers/ata/ahci_da850.c
> index 2c83613..2b77d53 100644
> --- a/drivers/ata/ahci_da850.c
> +++ b/drivers/ata/ahci_da850.c
> @@ -85,7 +85,8 @@ static int ahci_da850_probe(struct platform_device *pdev)
>  
>  	da850_sata_init(dev, pwrdn_reg, hpriv->mmio);
>  
> -	rc = ahci_platform_init_host(pdev, hpriv, &ahci_da850_port_info, 0, 0);
> +	rc = ahci_platform_init_host(pdev, hpriv, &ahci_da850_port_info,
> +				     0, 0, 0);
>  	if (rc)
>  		goto disable_resources;
>  
> diff --git a/drivers/ata/ahci_imx.c b/drivers/ata/ahci_imx.c
> index 497c7ab..e7e44a7 100644
> --- a/drivers/ata/ahci_imx.c
> +++ b/drivers/ata/ahci_imx.c
> @@ -267,7 +267,8 @@ static int imx_ahci_probe(struct platform_device *pdev)
>  	reg_val = clk_get_rate(imxpriv->ahb_clk) / 1000;
>  	writel(reg_val, hpriv->mmio + HOST_TIMER1MS);
>  
> -	ret = ahci_platform_init_host(pdev, hpriv, &ahci_imx_port_info, 0, 0);
> +	ret = ahci_platform_init_host(pdev, hpriv, &ahci_imx_port_info,
> +				      0, 0, 0);
>  	if (ret)
>  		imx_sata_disable(hpriv);
>  
> diff --git a/drivers/ata/ahci_platform.c b/drivers/ata/ahci_platform.c
> index ef67e79..a476a1f 100644
> --- a/drivers/ata/ahci_platform.c
> +++ b/drivers/ata/ahci_platform.c
> @@ -55,7 +55,7 @@ static int ahci_probe(struct platform_device *pdev)
>  			goto disable_resources;
>  	}
>  
> -	rc = ahci_platform_init_host(pdev, hpriv, &ahci_port_info, 0, 0);
> +	rc = ahci_platform_init_host(pdev, hpriv, &ahci_port_info, 0, 0, 0);
>  	if (rc)
>  		goto pdata_exit;
>  
> diff --git a/drivers/ata/ahci_st.c b/drivers/ata/ahci_st.c
> index 6332222..2595598 100644
> --- a/drivers/ata/ahci_st.c
> +++ b/drivers/ata/ahci_st.c
> @@ -166,7 +166,7 @@ static int st_ahci_probe(struct platform_device *pdev)
>  	if (err)
>  		return err;
>  
> -	err = ahci_platform_init_host(pdev, hpriv, &st_ahci_port_info, 0, 0);
> +	err = ahci_platform_init_host(pdev, hpriv, &st_ahci_port_info, 0, 0, 0);
>  	if (err) {
>  		ahci_platform_disable_resources(hpriv);
>  		return err;
> diff --git a/drivers/ata/ahci_sunxi.c b/drivers/ata/ahci_sunxi.c
> index 42d3f64..543132a 100644
> --- a/drivers/ata/ahci_sunxi.c
> +++ b/drivers/ata/ahci_sunxi.c
> @@ -157,8 +157,6 @@ static void ahci_sunxi_start_engine(struct ata_port *ap)
>  }
>  
>  static const struct ata_port_info ahci_sunxi_port_info = {
> -	AHCI_HFLAGS(AHCI_HFLAG_32BIT_ONLY | AHCI_HFLAG_NO_MSI |
> -			  AHCI_HFLAG_NO_PMP | AHCI_HFLAG_YES_NCQ),
>  	.flags		= AHCI_FLAG_COMMON | ATA_FLAG_NCQ,
>  	.pio_mask	= ATA_PIO4,
>  	.udma_mask	= ATA_UDMA6,
> @@ -169,6 +167,7 @@ static int ahci_sunxi_probe(struct platform_device *pdev)
>  {
>  	struct device *dev = &pdev->dev;
>  	struct ahci_host_priv *hpriv;
> +	unsigned int hflags;
>  	int rc;
>  
>  	hpriv = ahci_platform_get_resources(pdev);
> @@ -185,7 +184,11 @@ static int ahci_sunxi_probe(struct platform_device *pdev)
>  	if (rc)
>  		goto disable_resources;
>  
> -	rc = ahci_platform_init_host(pdev, hpriv, &ahci_sunxi_port_info, 0, 0);
> +	hflags = AHCI_HFLAG_32BIT_ONLY | AHCI_HFLAG_NO_MSI |
> +		 AHCI_HFLAG_NO_PMP | AHCI_HFLAG_YES_NCQ,
> +
> +	rc = ahci_platform_init_host(pdev, hpriv, &ahci_sunxi_port_info,
> +				     hflags, 0, 0);
>  	if (rc)
>  		goto disable_resources;
>  
> diff --git a/drivers/ata/ahci_xgene.c b/drivers/ata/ahci_xgene.c
> index 77c89bf..8022b5a 100644
> --- a/drivers/ata/ahci_xgene.c
> +++ b/drivers/ata/ahci_xgene.c
> @@ -382,6 +382,7 @@ static int xgene_ahci_probe(struct platform_device *pdev)
>  	struct ahci_host_priv *hpriv;
>  	struct xgene_ahci_context *ctx;
>  	struct resource *res;
> +	unsigned int hflags;
>  	int rc;
>  
>  	hpriv = ahci_platform_get_resources(pdev);
> @@ -450,7 +451,10 @@ static int xgene_ahci_probe(struct platform_device *pdev)
>  		goto disable_resources;
>  	}
>  
> -	rc = ahci_platform_init_host(pdev, hpriv, &xgene_ahci_port_info, 0, 0);
> +	hflags = AHCI_HFLAG_NO_PMP | AHCI_HFLAG_YES_NCQ,
> +
> +	rc = ahci_platform_init_host(pdev, hpriv, &xgene_ahci_port_info,
> +				     hflags, 0, 0);
>  	if (rc)
>  		goto disable_resources;
>  

You should remove the AHCI_HFLAGS(AHCI_HFLAG_NO_PMP | AHCI_HFLAG_YES_NCQ),
part from xgene_ahci_port_info here, like you do for ahci_sunxi.c

> diff --git a/drivers/ata/libahci_platform.c b/drivers/ata/libahci_platform.c
> index 7cb3a85..ebd880e 100644
> --- a/drivers/ata/libahci_platform.c
> +++ b/drivers/ata/libahci_platform.c
> @@ -283,6 +283,7 @@ EXPORT_SYMBOL_GPL(ahci_platform_get_resources);
>   * @pdev: platform device pointer for the host
>   * @hpriv: ahci-host private data for the host
>   * @pi_template: template for the ata_port_info to use
> + * @host_flags: ahci host flags used in ahci_host_priv
>   * @force_port_map: param passed to ahci_save_initial_config
>   * @mask_port_map: param passed to ahci_save_initial_config
>   *
> @@ -296,6 +297,7 @@ EXPORT_SYMBOL_GPL(ahci_platform_get_resources);
>  int ahci_platform_init_host(struct platform_device *pdev,
>  			    struct ahci_host_priv *hpriv,
>  			    const struct ata_port_info *pi_template,
> +			    unsigned int host_flags,
>  			    unsigned int force_port_map,
>  			    unsigned int mask_port_map)
>  {

And here you should actually do something with hflags, not just throw
them away. Something like:

pi.private_data = (void *)host_flags;

> diff --git a/include/linux/ahci_platform.h b/include/linux/ahci_platform.h
> index 1f16d50..45897f6 100644
> --- a/include/linux/ahci_platform.h
> +++ b/include/linux/ahci_platform.h
> @@ -44,6 +44,7 @@ struct ahci_host_priv *ahci_platform_get_resources(
>  int ahci_platform_init_host(struct platform_device *pdev,
>  			    struct ahci_host_priv *hpriv,
>  			    const struct ata_port_info *pi_template,
> +			    unsigned int host_flags,
>  			    unsigned int force_port_map,
>  			    unsigned int mask_port_map);
>  
> 

Regards,

Hans

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

* Re: [PATCH v4 2/3] libahci_platform: add host_flags parameter in ahci_platform_init_host()
  2014-04-23 11:47   ` Hans de Goede
@ 2014-04-23 12:12     ` kefeng.wang
  0 siblings, 0 replies; 6+ messages in thread
From: kefeng.wang @ 2014-04-23 12:12 UTC (permalink / raw)
  To: Hans de Goede, Tejun Heo, Maxime Ripard, linux-ide, linux-kernel
  Cc: wangkefeng.wang

On 2014-4-23 19:47, Hans de Goede wrote:
> Hi,
> 
> On 04/23/2014 01:36 PM, Kefeng Wang wrote:
>> Add a dynamic host flags argument to make ahci_platform_init_host more flexible,
>> then remove the AHCI_HFLAGS(...) argument from some driver's ata_port_info,
>> and pass that in as the new arguments.
>>
>> Cc: Hans de Geode <hdegoede@redhat.com>
>> Signed-off-by: Kefeng Wang <kefeng.wang@linaro.org>
> 
> Thanks for working on this, review comments inline.
> 
[...]
>> diff --git a/drivers/ata/ahci_xgene.c b/drivers/ata/ahci_xgene.c
>> index 77c89bf..8022b5a 100644
>> --- a/drivers/ata/ahci_xgene.c
>> +++ b/drivers/ata/ahci_xgene.c
>> @@ -382,6 +382,7 @@ static int xgene_ahci_probe(struct platform_device *pdev)
>>  	struct ahci_host_priv *hpriv;
>>  	struct xgene_ahci_context *ctx;
>>  	struct resource *res;
>> +	unsigned int hflags;
>>  	int rc;
>>  
>>  	hpriv = ahci_platform_get_resources(pdev);
>> @@ -450,7 +451,10 @@ static int xgene_ahci_probe(struct platform_device *pdev)
>>  		goto disable_resources;
>>  	}
>>  
>> -	rc = ahci_platform_init_host(pdev, hpriv, &xgene_ahci_port_info, 0, 0);
>> +	hflags = AHCI_HFLAG_NO_PMP | AHCI_HFLAG_YES_NCQ,
>> +
>> +	rc = ahci_platform_init_host(pdev, hpriv, &xgene_ahci_port_info,
>> +				     hflags, 0, 0);
>>  	if (rc)
>>  		goto disable_resources;
>>  
> 
> You should remove the AHCI_HFLAGS(AHCI_HFLAG_NO_PMP | AHCI_HFLAG_YES_NCQ),
> part from xgene_ahci_port_info here, like you do for ahci_sunxi.c

yes.

> 
>> diff --git a/drivers/ata/libahci_platform.c b/drivers/ata/libahci_platform.c
>> index 7cb3a85..ebd880e 100644
>> --- a/drivers/ata/libahci_platform.c
>> +++ b/drivers/ata/libahci_platform.c
>> @@ -283,6 +283,7 @@ EXPORT_SYMBOL_GPL(ahci_platform_get_resources);
>>   * @pdev: platform device pointer for the host
>>   * @hpriv: ahci-host private data for the host
>>   * @pi_template: template for the ata_port_info to use
>> + * @host_flags: ahci host flags used in ahci_host_priv
>>   * @force_port_map: param passed to ahci_save_initial_config
>>   * @mask_port_map: param passed to ahci_save_initial_config
>>   *
>> @@ -296,6 +297,7 @@ EXPORT_SYMBOL_GPL(ahci_platform_get_resources);
>>  int ahci_platform_init_host(struct platform_device *pdev,
>>  			    struct ahci_host_priv *hpriv,
>>  			    const struct ata_port_info *pi_template,
>> +			    unsigned int host_flags,
>>  			    unsigned int force_port_map,
>>  			    unsigned int mask_port_map)
>>  {
> 
> And here you should actually do something with hflags, not just throw
> them away. Something like:
> 
> pi.private_data = (void *)host_flags;

:( it's my mistake, will update, thanks for you reminder.

> 
>> diff --git a/include/linux/ahci_platform.h b/include/linux/ahci_platform.h
>> index 1f16d50..45897f6 100644
>> --- a/include/linux/ahci_platform.h
>> +++ b/include/linux/ahci_platform.h
>> @@ -44,6 +44,7 @@ struct ahci_host_priv *ahci_platform_get_resources(
>>  int ahci_platform_init_host(struct platform_device *pdev,
>>  			    struct ahci_host_priv *hpriv,
>>  			    const struct ata_port_info *pi_template,
>> +			    unsigned int host_flags,
>>  			    unsigned int force_port_map,
>>  			    unsigned int mask_port_map);
>>  
>>
> 
> Regards,
> 
> Hans
> 

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

end of thread, other threads:[~2014-04-23 12:12 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-04-23 11:36 [PATCH v4 0/3] ahci: add support for hisilicon sata Kefeng Wang
2014-04-23 11:36 ` [PATCH v4 1/3] ata: ahci: append new hflag AHCI_HFLAG_NO_FBS Kefeng Wang
2014-04-23 11:36 ` [PATCH v4 2/3] libahci_platform: add host_flags parameter in ahci_platform_init_host() Kefeng Wang
2014-04-23 11:47   ` Hans de Goede
2014-04-23 12:12     ` kefeng.wang
2014-04-23 11:36 ` [PATCH v4 3/3] ahci: add support for Hisilicon sata Kefeng Wang

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.