Loading drivers/ata/ahci_qoriq.c +35 −17 Original line number Diff line number Diff line Loading @@ -58,6 +58,7 @@ enum ahci_qoriq_type { AHCI_LS1046A, AHCI_LS1088A, AHCI_LS2088A, AHCI_LX2160A, }; struct ahci_qoriq_priv { Loading @@ -67,6 +68,8 @@ struct ahci_qoriq_priv { bool is_dmacoherent; }; static bool ecc_initialized; 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}, Loading @@ -74,6 +77,7 @@ static const struct of_device_id ahci_qoriq_of_match[] = { { .compatible = "fsl,ls1046a-ahci", .data = (void *)AHCI_LS1046A}, { .compatible = "fsl,ls1088a-ahci", .data = (void *)AHCI_LS1088A}, { .compatible = "fsl,ls2088a-ahci", .data = (void *)AHCI_LS2088A}, { .compatible = "fsl,lx2160a-ahci", .data = (void *)AHCI_LX2160A}, {}, }; MODULE_DEVICE_TABLE(of, ahci_qoriq_of_match); Loading Loading @@ -165,8 +169,9 @@ static int ahci_qoriq_phy_init(struct ahci_host_priv *hpriv) switch (qpriv->type) { case AHCI_LS1021A: if (!qpriv->ecc_addr) if (!(qpriv->ecc_addr || ecc_initialized)) return -EINVAL; else if (qpriv->ecc_addr && !ecc_initialized) writel(SATA_ECC_DISABLE, qpriv->ecc_addr); writel(AHCI_PORT_PHY_1_CFG, reg_base + PORT_PHY1); writel(LS1021A_PORT_PHY2, reg_base + PORT_PHY2); Loading @@ -180,9 +185,11 @@ static int ahci_qoriq_phy_init(struct ahci_host_priv *hpriv) break; case AHCI_LS1043A: if (!qpriv->ecc_addr) if (!(qpriv->ecc_addr || ecc_initialized)) return -EINVAL; writel(readl(qpriv->ecc_addr) | ECC_DIS_ARMV8_CH2, else if (qpriv->ecc_addr && !ecc_initialized) writel(readl(qpriv->ecc_addr) | ECC_DIS_ARMV8_CH2, qpriv->ecc_addr); writel(AHCI_PORT_PHY_1_CFG, reg_base + PORT_PHY1); writel(AHCI_PORT_PHY2_CFG, reg_base + PORT_PHY2); Loading @@ -202,9 +209,11 @@ static int ahci_qoriq_phy_init(struct ahci_host_priv *hpriv) break; case AHCI_LS1046A: if (!qpriv->ecc_addr) if (!(qpriv->ecc_addr || ecc_initialized)) return -EINVAL; writel(readl(qpriv->ecc_addr) | ECC_DIS_ARMV8_CH2, else if (qpriv->ecc_addr && !ecc_initialized) writel(readl(qpriv->ecc_addr) | ECC_DIS_ARMV8_CH2, qpriv->ecc_addr); writel(AHCI_PORT_PHY_1_CFG, reg_base + PORT_PHY1); writel(AHCI_PORT_PHY2_CFG, reg_base + PORT_PHY2); Loading @@ -215,9 +224,12 @@ static int ahci_qoriq_phy_init(struct ahci_host_priv *hpriv) break; case AHCI_LS1088A: if (!qpriv->ecc_addr) case AHCI_LX2160A: if (!(qpriv->ecc_addr || ecc_initialized)) return -EINVAL; writel(readl(qpriv->ecc_addr) | ECC_DIS_LS1088A, else if (qpriv->ecc_addr && !ecc_initialized) writel(readl(qpriv->ecc_addr) | ECC_DIS_LS1088A, qpriv->ecc_addr); writel(AHCI_PORT_PHY_1_CFG, reg_base + PORT_PHY1); writel(AHCI_PORT_PHY2_CFG, reg_base + PORT_PHY2); Loading @@ -237,6 +249,7 @@ static int ahci_qoriq_phy_init(struct ahci_host_priv *hpriv) break; } ecc_initialized = true; return 0; } Loading Loading @@ -264,13 +277,18 @@ static int ahci_qoriq_probe(struct platform_device *pdev) qoriq_priv->type = (enum ahci_qoriq_type)of_id->data; res = platform_get_resource_byname(pdev, IORESOURCE_MEM, if (unlikely(!ecc_initialized)) { res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "sata-ecc"); if (res) { qoriq_priv->ecc_addr = devm_ioremap_resource(dev, res); qoriq_priv->ecc_addr = devm_ioremap_resource(dev, res); if (IS_ERR(qoriq_priv->ecc_addr)) return PTR_ERR(qoriq_priv->ecc_addr); } } qoriq_priv->is_dmacoherent = of_dma_is_coherent(np); rc = ahci_platform_enable_resources(hpriv); Loading Loading
drivers/ata/ahci_qoriq.c +35 −17 Original line number Diff line number Diff line Loading @@ -58,6 +58,7 @@ enum ahci_qoriq_type { AHCI_LS1046A, AHCI_LS1088A, AHCI_LS2088A, AHCI_LX2160A, }; struct ahci_qoriq_priv { Loading @@ -67,6 +68,8 @@ struct ahci_qoriq_priv { bool is_dmacoherent; }; static bool ecc_initialized; 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}, Loading @@ -74,6 +77,7 @@ static const struct of_device_id ahci_qoriq_of_match[] = { { .compatible = "fsl,ls1046a-ahci", .data = (void *)AHCI_LS1046A}, { .compatible = "fsl,ls1088a-ahci", .data = (void *)AHCI_LS1088A}, { .compatible = "fsl,ls2088a-ahci", .data = (void *)AHCI_LS2088A}, { .compatible = "fsl,lx2160a-ahci", .data = (void *)AHCI_LX2160A}, {}, }; MODULE_DEVICE_TABLE(of, ahci_qoriq_of_match); Loading Loading @@ -165,8 +169,9 @@ static int ahci_qoriq_phy_init(struct ahci_host_priv *hpriv) switch (qpriv->type) { case AHCI_LS1021A: if (!qpriv->ecc_addr) if (!(qpriv->ecc_addr || ecc_initialized)) return -EINVAL; else if (qpriv->ecc_addr && !ecc_initialized) writel(SATA_ECC_DISABLE, qpriv->ecc_addr); writel(AHCI_PORT_PHY_1_CFG, reg_base + PORT_PHY1); writel(LS1021A_PORT_PHY2, reg_base + PORT_PHY2); Loading @@ -180,9 +185,11 @@ static int ahci_qoriq_phy_init(struct ahci_host_priv *hpriv) break; case AHCI_LS1043A: if (!qpriv->ecc_addr) if (!(qpriv->ecc_addr || ecc_initialized)) return -EINVAL; writel(readl(qpriv->ecc_addr) | ECC_DIS_ARMV8_CH2, else if (qpriv->ecc_addr && !ecc_initialized) writel(readl(qpriv->ecc_addr) | ECC_DIS_ARMV8_CH2, qpriv->ecc_addr); writel(AHCI_PORT_PHY_1_CFG, reg_base + PORT_PHY1); writel(AHCI_PORT_PHY2_CFG, reg_base + PORT_PHY2); Loading @@ -202,9 +209,11 @@ static int ahci_qoriq_phy_init(struct ahci_host_priv *hpriv) break; case AHCI_LS1046A: if (!qpriv->ecc_addr) if (!(qpriv->ecc_addr || ecc_initialized)) return -EINVAL; writel(readl(qpriv->ecc_addr) | ECC_DIS_ARMV8_CH2, else if (qpriv->ecc_addr && !ecc_initialized) writel(readl(qpriv->ecc_addr) | ECC_DIS_ARMV8_CH2, qpriv->ecc_addr); writel(AHCI_PORT_PHY_1_CFG, reg_base + PORT_PHY1); writel(AHCI_PORT_PHY2_CFG, reg_base + PORT_PHY2); Loading @@ -215,9 +224,12 @@ static int ahci_qoriq_phy_init(struct ahci_host_priv *hpriv) break; case AHCI_LS1088A: if (!qpriv->ecc_addr) case AHCI_LX2160A: if (!(qpriv->ecc_addr || ecc_initialized)) return -EINVAL; writel(readl(qpriv->ecc_addr) | ECC_DIS_LS1088A, else if (qpriv->ecc_addr && !ecc_initialized) writel(readl(qpriv->ecc_addr) | ECC_DIS_LS1088A, qpriv->ecc_addr); writel(AHCI_PORT_PHY_1_CFG, reg_base + PORT_PHY1); writel(AHCI_PORT_PHY2_CFG, reg_base + PORT_PHY2); Loading @@ -237,6 +249,7 @@ static int ahci_qoriq_phy_init(struct ahci_host_priv *hpriv) break; } ecc_initialized = true; return 0; } Loading Loading @@ -264,13 +277,18 @@ static int ahci_qoriq_probe(struct platform_device *pdev) qoriq_priv->type = (enum ahci_qoriq_type)of_id->data; res = platform_get_resource_byname(pdev, IORESOURCE_MEM, if (unlikely(!ecc_initialized)) { res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "sata-ecc"); if (res) { qoriq_priv->ecc_addr = devm_ioremap_resource(dev, res); qoriq_priv->ecc_addr = devm_ioremap_resource(dev, res); if (IS_ERR(qoriq_priv->ecc_addr)) return PTR_ERR(qoriq_priv->ecc_addr); } } qoriq_priv->is_dmacoherent = of_dma_is_coherent(np); rc = ahci_platform_enable_resources(hpriv); Loading