]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - drivers/ata/ahci_qoriq.c
Merge branch 'irq-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel...
[karo-tx-linux.git] / drivers / ata / ahci_qoriq.c
index 1eba8dff875eb6d45566779baab68aef4ba412e2..9884c8c6e93447fac77e2b74a322b526eaae26f7 100644 (file)
 #define LS1021A_AXICC_ADDR     0xC0
 
 #define SATA_ECC_DISABLE       0x00020000
+#define LS1046A_SATA_ECC_DIS   0x80000000
 
 enum ahci_qoriq_type {
        AHCI_LS1021A,
        AHCI_LS1043A,
        AHCI_LS2080A,
+       AHCI_LS1046A,
 };
 
 struct ahci_qoriq_priv {
@@ -63,6 +65,7 @@ static const struct of_device_id ahci_qoriq_of_match[] = {
        { .compatible = "fsl,ls1021a-ahci", .data = (void *)AHCI_LS1021A},
        { .compatible = "fsl,ls1043a-ahci", .data = (void *)AHCI_LS1043A},
        { .compatible = "fsl,ls2080a-ahci", .data = (void *)AHCI_LS2080A},
+       { .compatible = "fsl,ls1046a-ahci", .data = (void *)AHCI_LS1046A},
        {},
 };
 MODULE_DEVICE_TABLE(of, ahci_qoriq_of_match);
@@ -175,6 +178,13 @@ static int ahci_qoriq_phy_init(struct ahci_host_priv *hpriv)
                writel(AHCI_PORT_TRANS_CFG, reg_base + PORT_TRANS);
                writel(AHCI_PORT_AXICC_CFG, reg_base + PORT_AXICC);
                break;
+
+       case AHCI_LS1046A:
+               writel(LS1046A_SATA_ECC_DIS, qpriv->ecc_addr);
+               writel(AHCI_PORT_PHY_1_CFG, reg_base + PORT_PHY1);
+               writel(AHCI_PORT_TRANS_CFG, reg_base + PORT_TRANS);
+               writel(AHCI_PORT_AXICC_CFG, reg_base + PORT_AXICC);
+               break;
        }
 
        return 0;
@@ -204,9 +214,9 @@ static int ahci_qoriq_probe(struct platform_device *pdev)
 
        qoriq_priv->type = (enum ahci_qoriq_type)of_id->data;
 
-       if (qoriq_priv->type == AHCI_LS1021A) {
-               res = platform_get_resource_byname(pdev, IORESOURCE_MEM,
-                               "sata-ecc");
+       res = platform_get_resource_byname(pdev, IORESOURCE_MEM,
+                       "sata-ecc");
+       if (res) {
                qoriq_priv->ecc_addr = devm_ioremap_resource(dev, res);
                if (IS_ERR(qoriq_priv->ecc_addr))
                        return PTR_ERR(qoriq_priv->ecc_addr);