aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTang Yuantian <Yuantian.Tang@nxp.com>2016-10-09 04:51:04 -0400
committerTejun Heo <tj@kernel.org>2016-10-19 13:33:01 -0400
commit2facc6dacc64f14efc6fb81e2019f48e992166e2 (patch)
tree2f637d3588aca0e163082f62f6e6d37b1b10c358
parent1001354ca34179f3db924eb66672442a173147dc (diff)
ahci: qoriq: added ls1046a platform support
Ls1046a is a new introduced soc which supports ATA3.0. Signed-off-by: Tang Yuantian <yuantian.tang@nxp.com> Signed-off-by: Tejun Heo <tj@kernel.org>
-rw-r--r--drivers/ata/ahci_qoriq.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/drivers/ata/ahci_qoriq.c b/drivers/ata/ahci_qoriq.c
index 1eba8dff875e..9884c8c6e934 100644
--- a/drivers/ata/ahci_qoriq.c
+++ b/drivers/ata/ahci_qoriq.c
@@ -46,11 +46,13 @@
46#define LS1021A_AXICC_ADDR 0xC0 46#define LS1021A_AXICC_ADDR 0xC0
47 47
48#define SATA_ECC_DISABLE 0x00020000 48#define SATA_ECC_DISABLE 0x00020000
49#define LS1046A_SATA_ECC_DIS 0x80000000
49 50
50enum ahci_qoriq_type { 51enum ahci_qoriq_type {
51 AHCI_LS1021A, 52 AHCI_LS1021A,
52 AHCI_LS1043A, 53 AHCI_LS1043A,
53 AHCI_LS2080A, 54 AHCI_LS2080A,
55 AHCI_LS1046A,
54}; 56};
55 57
56struct ahci_qoriq_priv { 58struct ahci_qoriq_priv {
@@ -63,6 +65,7 @@ static const struct of_device_id ahci_qoriq_of_match[] = {
63 { .compatible = "fsl,ls1021a-ahci", .data = (void *)AHCI_LS1021A}, 65 { .compatible = "fsl,ls1021a-ahci", .data = (void *)AHCI_LS1021A},
64 { .compatible = "fsl,ls1043a-ahci", .data = (void *)AHCI_LS1043A}, 66 { .compatible = "fsl,ls1043a-ahci", .data = (void *)AHCI_LS1043A},
65 { .compatible = "fsl,ls2080a-ahci", .data = (void *)AHCI_LS2080A}, 67 { .compatible = "fsl,ls2080a-ahci", .data = (void *)AHCI_LS2080A},
68 { .compatible = "fsl,ls1046a-ahci", .data = (void *)AHCI_LS1046A},
66 {}, 69 {},
67}; 70};
68MODULE_DEVICE_TABLE(of, ahci_qoriq_of_match); 71MODULE_DEVICE_TABLE(of, ahci_qoriq_of_match);
@@ -175,6 +178,13 @@ static int ahci_qoriq_phy_init(struct ahci_host_priv *hpriv)
175 writel(AHCI_PORT_TRANS_CFG, reg_base + PORT_TRANS); 178 writel(AHCI_PORT_TRANS_CFG, reg_base + PORT_TRANS);
176 writel(AHCI_PORT_AXICC_CFG, reg_base + PORT_AXICC); 179 writel(AHCI_PORT_AXICC_CFG, reg_base + PORT_AXICC);
177 break; 180 break;
181
182 case AHCI_LS1046A:
183 writel(LS1046A_SATA_ECC_DIS, qpriv->ecc_addr);
184 writel(AHCI_PORT_PHY_1_CFG, reg_base + PORT_PHY1);
185 writel(AHCI_PORT_TRANS_CFG, reg_base + PORT_TRANS);
186 writel(AHCI_PORT_AXICC_CFG, reg_base + PORT_AXICC);
187 break;
178 } 188 }
179 189
180 return 0; 190 return 0;
@@ -204,9 +214,9 @@ static int ahci_qoriq_probe(struct platform_device *pdev)
204 214
205 qoriq_priv->type = (enum ahci_qoriq_type)of_id->data; 215 qoriq_priv->type = (enum ahci_qoriq_type)of_id->data;
206 216
207 if (qoriq_priv->type == AHCI_LS1021A) { 217 res = platform_get_resource_byname(pdev, IORESOURCE_MEM,
208 res = platform_get_resource_byname(pdev, IORESOURCE_MEM, 218 "sata-ecc");
209 "sata-ecc"); 219 if (res) {
210 qoriq_priv->ecc_addr = devm_ioremap_resource(dev, res); 220 qoriq_priv->ecc_addr = devm_ioremap_resource(dev, res);
211 if (IS_ERR(qoriq_priv->ecc_addr)) 221 if (IS_ERR(qoriq_priv->ecc_addr))
212 return PTR_ERR(qoriq_priv->ecc_addr); 222 return PTR_ERR(qoriq_priv->ecc_addr);