diff mbox

[V2,2/2] ahci: add support for Hisilicon sata

Message ID 1397107468-640-3-git-send-email-wangkefeng.wang@huawei.com
State New
Headers show

Commit Message

Kefeng Wang April 10, 2014, 5:24 a.m. UTC
From: Kefeng Wang <kefeng.wang@linaro.org>

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.

Cc: Hans de Geode <hdegoede@redhat.com>
Signed-off-by: Kefeng Wang <kefeng.wang@linaro.org>
---
 .../devicetree/bindings/ata/ahci-platform.txt      |    3 ++-
 drivers/ata/ahci_platform.c                        |    6 +++++-
 2 files changed, 7 insertions(+), 2 deletions(-)

Comments

Tejun Heo April 16, 2014, 8:49 p.m. UTC | #1
Hello,

On Thu, Apr 10, 2014 at 01:24:28PM +0800, Kefeng Wang wrote:
> From: Kefeng Wang <kefeng.wang@linaro.org>
> 
> 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.
> 
> Cc: Hans de Geode <hdegoede@redhat.com>
> Signed-off-by: Kefeng Wang <kefeng.wang@linaro.org>
> @@ -54,8 +55,10 @@ static int ahci_probe(struct platform_device *pdev)
>  		if (rc)
>  			goto disable_resources;
>  	}
> +	if (of_device_is_compatible(pdev->dev.of_node, "hisilicon,hisi-ahci"))
> +		pi.private_data = (void *)AHCI_HFLAG_NO_FBS;

Hmmm.... this should work but looks a bit tedious and it could be
better to have a better mechanism to match devices to their
port_infos.  Hans, can you please comment?  If getting something more
structured is too much work, I can go with this but wanna find out
whether that's the case.

Thanks.
Hans de Goede April 17, 2014, 7:48 a.m. UTC | #2
Hi,

On 04/16/2014 10:49 PM, Tejun Heo wrote:
> Hello,
> 
> On Thu, Apr 10, 2014 at 01:24:28PM +0800, Kefeng Wang wrote:
>> From: Kefeng Wang <kefeng.wang@linaro.org>
>>
>> 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.
>>
>> Cc: Hans de Geode <hdegoede@redhat.com>
>> Signed-off-by: Kefeng Wang <kefeng.wang@linaro.org>
>> @@ -54,8 +55,10 @@ static int ahci_probe(struct platform_device *pdev)
>>  		if (rc)
>>  			goto disable_resources;
>>  	}
>> +	if (of_device_is_compatible(pdev->dev.of_node, "hisilicon,hisi-ahci"))
>> +		pi.private_data = (void *)AHCI_HFLAG_NO_FBS;
> 
> Hmmm.... this should work but looks a bit tedious and it could be
> better to have a better mechanism to match devices to their
> port_infos.  Hans, can you please comment?  If getting something more
> structured is too much work, I can go with this but wanna find out
> whether that's the case.

The more structured solution would be v1 of this patch, which I asked
Kefan to change since it seemed overkill. But if you prefer that version
that is fine with me.

Note that as I've already mentioned earlier in the thread this could be
made somewhat cleaner by having an host_flags parameter to
ahci_platform_init_host().

Regards,

Hans
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/
Tejun Heo April 17, 2014, 1:31 p.m. UTC | #3
On Thu, Apr 17, 2014 at 09:48:03AM +0200, Hans de Goede wrote:
> > Hmmm.... this should work but looks a bit tedious and it could be
> > better to have a better mechanism to match devices to their
> > port_infos.  Hans, can you please comment?  If getting something more
> > structured is too much work, I can go with this but wanna find out
> > whether that's the case.
> 
> The more structured solution would be v1 of this patch, which I asked
> Kefan to change since it seemed overkill. But if you prefer that version
> that is fine with me.

I don't care either way at this point but if this grows to a large
list, having a matching mechanism will probably be more manageable.

> Note that as I've already mentioned earlier in the thread this could be
> made somewhat cleaner by having an host_flags parameter to
> ahci_platform_init_host().

Kefeng, can you please update accordingly to Hans' comment and repost?

Thanks.
Kefeng Wang April 18, 2014, 1:07 a.m. UTC | #4
On 04/17 21:31, Tejun Heo wrote:
> On Thu, Apr 17, 2014 at 09:48:03AM +0200, Hans de Goede wrote:
>>> Hmmm.... this should work but looks a bit tedious and it could be
>>> better to have a better mechanism to match devices to their
>>> port_infos.  Hans, can you please comment?  If getting something more
>>> structured is too much work, I can go with this but wanna find out
>>> whether that's the case.
>>
>> The more structured solution would be v1 of this patch, which I asked
>> Kefan to change since it seemed overkill. But if you prefer that version
>> that is fine with me.
> 
> I don't care either way at this point but if this grows to a large
> list, having a matching mechanism will probably be more manageable.
> 
>> Note that as I've already mentioned earlier in the thread this could be
>> made somewhat cleaner by having an host_flags parameter to
>> ahci_platform_init_host().
> 
> Kefeng, can you please update accordingly to Hans' comment and repost?

Sure, Thanks for the advice from you and Hans, will update.

> 
> Thanks.
> 


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/
diff mbox

Patch

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 ef67e79..2ee1923 100644
--- a/drivers/ata/ahci_platform.c
+++ b/drivers/ata/ahci_platform.c
@@ -32,6 +32,7 @@  static int ahci_probe(struct platform_device *pdev)
 {
 	struct device *dev = &pdev->dev;
 	struct ahci_platform_data *pdata = dev_get_platdata(dev);
+	struct ata_port_info pi = ahci_port_info;
 	struct ahci_host_priv *hpriv;
 	int rc;
 
@@ -54,8 +55,10 @@  static int ahci_probe(struct platform_device *pdev)
 		if (rc)
 			goto disable_resources;
 	}
+	if (of_device_is_compatible(pdev->dev.of_node, "hisilicon,hisi-ahci"))
+		pi.private_data = (void *)AHCI_HFLAG_NO_FBS;
 
-	rc = ahci_platform_init_host(pdev, hpriv, &ahci_port_info, 0, 0);
+	rc = ahci_platform_init_host(pdev, hpriv, &pi, 0, 0);
 	if (rc)
 		goto pdata_exit;
 
@@ -76,6 +79,7 @@  static const struct of_device_id ahci_of_match[] = {
 	{ .compatible = "snps,exynos5440-ahci", },
 	{ .compatible = "ibm,476gtr-ahci", },
 	{ .compatible = "snps,dwc-ahci", },
+	{ .compatible = "hisilicon,hisi-ahci", },
 	{},
 };
 MODULE_DEVICE_TABLE(of, ahci_of_match);