diff options
author | Kefeng Wang <kefeng.wang@linaro.org> | 2014-05-14 02:13:42 -0400 |
---|---|---|
committer | Tejun Heo <tj@kernel.org> | 2014-05-14 13:07:10 -0400 |
commit | a1a205df6ee224f62c6d21cedebcb723db17fe0d (patch) | |
tree | db56e4c18688188b67bc569a047dabb007b91161 /drivers/ata | |
parent | f9f36917903b57c571b1ddcfc6bc794ca4dd8232 (diff) |
ahci: add support for Hisilicon sata
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.
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Kefeng Wang <kefeng.wang@linaro.org>
Signed-off-by: Tejun Heo <tj@kernel.org>
Diffstat (limited to 'drivers/ata')
-rw-r--r-- | drivers/ata/ahci_platform.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/drivers/ata/ahci_platform.c b/drivers/ata/ahci_platform.c index a476a1fd3f8f..ebe505c17763 100644 --- a/drivers/ata/ahci_platform.c +++ b/drivers/ata/ahci_platform.c | |||
@@ -16,6 +16,7 @@ | |||
16 | #include <linux/module.h> | 16 | #include <linux/module.h> |
17 | #include <linux/pm.h> | 17 | #include <linux/pm.h> |
18 | #include <linux/device.h> | 18 | #include <linux/device.h> |
19 | #include <linux/of_device.h> | ||
19 | #include <linux/platform_device.h> | 20 | #include <linux/platform_device.h> |
20 | #include <linux/libata.h> | 21 | #include <linux/libata.h> |
21 | #include <linux/ahci_platform.h> | 22 | #include <linux/ahci_platform.h> |
@@ -33,6 +34,7 @@ static int ahci_probe(struct platform_device *pdev) | |||
33 | struct device *dev = &pdev->dev; | 34 | struct device *dev = &pdev->dev; |
34 | struct ahci_platform_data *pdata = dev_get_platdata(dev); | 35 | struct ahci_platform_data *pdata = dev_get_platdata(dev); |
35 | struct ahci_host_priv *hpriv; | 36 | struct ahci_host_priv *hpriv; |
37 | unsigned long hflags = 0; | ||
36 | int rc; | 38 | int rc; |
37 | 39 | ||
38 | hpriv = ahci_platform_get_resources(pdev); | 40 | hpriv = ahci_platform_get_resources(pdev); |
@@ -55,7 +57,11 @@ static int ahci_probe(struct platform_device *pdev) | |||
55 | goto disable_resources; | 57 | goto disable_resources; |
56 | } | 58 | } |
57 | 59 | ||
58 | rc = ahci_platform_init_host(pdev, hpriv, &ahci_port_info, 0, 0, 0); | 60 | if (of_device_is_compatible(dev->of_node, "hisilicon,hisi-ahci")) |
61 | hflags |= AHCI_HFLAG_NO_FBS; | ||
62 | |||
63 | rc = ahci_platform_init_host(pdev, hpriv, &ahci_port_info, | ||
64 | hflags, 0, 0); | ||
59 | if (rc) | 65 | if (rc) |
60 | goto pdata_exit; | 66 | goto pdata_exit; |
61 | 67 | ||
@@ -76,6 +82,7 @@ static const struct of_device_id ahci_of_match[] = { | |||
76 | { .compatible = "snps,exynos5440-ahci", }, | 82 | { .compatible = "snps,exynos5440-ahci", }, |
77 | { .compatible = "ibm,476gtr-ahci", }, | 83 | { .compatible = "ibm,476gtr-ahci", }, |
78 | { .compatible = "snps,dwc-ahci", }, | 84 | { .compatible = "snps,dwc-ahci", }, |
85 | { .compatible = "hisilicon,hisi-ahci", }, | ||
79 | {}, | 86 | {}, |
80 | }; | 87 | }; |
81 | MODULE_DEVICE_TABLE(of, ahci_of_match); | 88 | MODULE_DEVICE_TABLE(of, ahci_of_match); |