diff options
| author | Tang Yuantian <Yuantian.Tang@nxp.com> | 2016-10-09 04:51:04 -0400 |
|---|---|---|
| committer | Tejun Heo <tj@kernel.org> | 2016-10-19 13:33:01 -0400 |
| commit | 2facc6dacc64f14efc6fb81e2019f48e992166e2 (patch) | |
| tree | 2f637d3588aca0e163082f62f6e6d37b1b10c358 | |
| parent | 1001354ca34179f3db924eb66672442a173147dc (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.c | 16 |
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 | ||
| 50 | enum ahci_qoriq_type { | 51 | enum 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 | ||
| 56 | struct ahci_qoriq_priv { | 58 | struct 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 | }; |
| 68 | MODULE_DEVICE_TABLE(of, ahci_qoriq_of_match); | 71 | MODULE_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); |
