diff options
author | Yuantian Tang <andy.tang@nxp.com> | 2017-12-04 04:01:20 -0500 |
---|---|---|
committer | Tejun Heo <tj@kernel.org> | 2017-12-04 15:18:08 -0500 |
commit | ce179cbdedf2f54306177e591664be7b18cf386a (patch) | |
tree | 42bebce505884b0daf617d99ce629512d239cca6 | |
parent | 20f9ceed72f127e4cc44c0358160e6e0118f823d (diff) |
ahci: qoriq: refine port register configuration
These PP2C and PP3C registers control the configuration of the PHY
control OOB timing for the COMINIT/COMWAKE parameters respectively
for sata port. Overwrite default values with calculated ones to get
better OOB timing.
Signed-off-by: Tang Yuantian <andy.tang@nxp.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
-rw-r--r-- | drivers/ata/ahci_qoriq.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/drivers/ata/ahci_qoriq.c b/drivers/ata/ahci_qoriq.c index b6b0bf76dfc7..2685f28160f7 100644 --- a/drivers/ata/ahci_qoriq.c +++ b/drivers/ata/ahci_qoriq.c | |||
@@ -35,6 +35,8 @@ | |||
35 | 35 | ||
36 | /* port register default value */ | 36 | /* port register default value */ |
37 | #define AHCI_PORT_PHY_1_CFG 0xa003fffe | 37 | #define AHCI_PORT_PHY_1_CFG 0xa003fffe |
38 | #define AHCI_PORT_PHY2_CFG 0x28184d1f | ||
39 | #define AHCI_PORT_PHY3_CFG 0x0e081509 | ||
38 | #define AHCI_PORT_TRANS_CFG 0x08000029 | 40 | #define AHCI_PORT_TRANS_CFG 0x08000029 |
39 | #define AHCI_PORT_AXICC_CFG 0x3fffffff | 41 | #define AHCI_PORT_AXICC_CFG 0x3fffffff |
40 | 42 | ||
@@ -183,6 +185,8 @@ static int ahci_qoriq_phy_init(struct ahci_host_priv *hpriv) | |||
183 | writel(readl(qpriv->ecc_addr) | ECC_DIS_ARMV8_CH2, | 185 | writel(readl(qpriv->ecc_addr) | ECC_DIS_ARMV8_CH2, |
184 | qpriv->ecc_addr); | 186 | qpriv->ecc_addr); |
185 | writel(AHCI_PORT_PHY_1_CFG, reg_base + PORT_PHY1); | 187 | writel(AHCI_PORT_PHY_1_CFG, reg_base + PORT_PHY1); |
188 | writel(AHCI_PORT_PHY2_CFG, reg_base + PORT_PHY2); | ||
189 | writel(AHCI_PORT_PHY3_CFG, reg_base + PORT_PHY3); | ||
186 | writel(AHCI_PORT_TRANS_CFG, reg_base + PORT_TRANS); | 190 | writel(AHCI_PORT_TRANS_CFG, reg_base + PORT_TRANS); |
187 | if (qpriv->is_dmacoherent) | 191 | if (qpriv->is_dmacoherent) |
188 | writel(AHCI_PORT_AXICC_CFG, reg_base + PORT_AXICC); | 192 | writel(AHCI_PORT_AXICC_CFG, reg_base + PORT_AXICC); |
@@ -190,6 +194,8 @@ static int ahci_qoriq_phy_init(struct ahci_host_priv *hpriv) | |||
190 | 194 | ||
191 | case AHCI_LS2080A: | 195 | case AHCI_LS2080A: |
192 | writel(AHCI_PORT_PHY_1_CFG, reg_base + PORT_PHY1); | 196 | writel(AHCI_PORT_PHY_1_CFG, reg_base + PORT_PHY1); |
197 | writel(AHCI_PORT_PHY2_CFG, reg_base + PORT_PHY2); | ||
198 | writel(AHCI_PORT_PHY3_CFG, reg_base + PORT_PHY3); | ||
193 | writel(AHCI_PORT_TRANS_CFG, reg_base + PORT_TRANS); | 199 | writel(AHCI_PORT_TRANS_CFG, reg_base + PORT_TRANS); |
194 | if (qpriv->is_dmacoherent) | 200 | if (qpriv->is_dmacoherent) |
195 | writel(AHCI_PORT_AXICC_CFG, reg_base + PORT_AXICC); | 201 | writel(AHCI_PORT_AXICC_CFG, reg_base + PORT_AXICC); |
@@ -201,6 +207,8 @@ static int ahci_qoriq_phy_init(struct ahci_host_priv *hpriv) | |||
201 | writel(readl(qpriv->ecc_addr) | ECC_DIS_ARMV8_CH2, | 207 | writel(readl(qpriv->ecc_addr) | ECC_DIS_ARMV8_CH2, |
202 | qpriv->ecc_addr); | 208 | qpriv->ecc_addr); |
203 | writel(AHCI_PORT_PHY_1_CFG, reg_base + PORT_PHY1); | 209 | writel(AHCI_PORT_PHY_1_CFG, reg_base + PORT_PHY1); |
210 | writel(AHCI_PORT_PHY2_CFG, reg_base + PORT_PHY2); | ||
211 | writel(AHCI_PORT_PHY3_CFG, reg_base + PORT_PHY3); | ||
204 | writel(AHCI_PORT_TRANS_CFG, reg_base + PORT_TRANS); | 212 | writel(AHCI_PORT_TRANS_CFG, reg_base + PORT_TRANS); |
205 | if (qpriv->is_dmacoherent) | 213 | if (qpriv->is_dmacoherent) |
206 | writel(AHCI_PORT_AXICC_CFG, reg_base + PORT_AXICC); | 214 | writel(AHCI_PORT_AXICC_CFG, reg_base + PORT_AXICC); |
@@ -212,6 +220,8 @@ static int ahci_qoriq_phy_init(struct ahci_host_priv *hpriv) | |||
212 | writel(readl(qpriv->ecc_addr) | ECC_DIS_LS1088A, | 220 | writel(readl(qpriv->ecc_addr) | ECC_DIS_LS1088A, |
213 | qpriv->ecc_addr); | 221 | qpriv->ecc_addr); |
214 | writel(AHCI_PORT_PHY_1_CFG, reg_base + PORT_PHY1); | 222 | writel(AHCI_PORT_PHY_1_CFG, reg_base + PORT_PHY1); |
223 | writel(AHCI_PORT_PHY2_CFG, reg_base + PORT_PHY2); | ||
224 | writel(AHCI_PORT_PHY3_CFG, reg_base + PORT_PHY3); | ||
215 | writel(AHCI_PORT_TRANS_CFG, reg_base + PORT_TRANS); | 225 | writel(AHCI_PORT_TRANS_CFG, reg_base + PORT_TRANS); |
216 | if (qpriv->is_dmacoherent) | 226 | if (qpriv->is_dmacoherent) |
217 | writel(AHCI_PORT_AXICC_CFG, reg_base + PORT_AXICC); | 227 | writel(AHCI_PORT_AXICC_CFG, reg_base + PORT_AXICC); |
@@ -219,6 +229,8 @@ static int ahci_qoriq_phy_init(struct ahci_host_priv *hpriv) | |||
219 | 229 | ||
220 | case AHCI_LS2088A: | 230 | case AHCI_LS2088A: |
221 | writel(AHCI_PORT_PHY_1_CFG, reg_base + PORT_PHY1); | 231 | writel(AHCI_PORT_PHY_1_CFG, reg_base + PORT_PHY1); |
232 | writel(AHCI_PORT_PHY2_CFG, reg_base + PORT_PHY2); | ||
233 | writel(AHCI_PORT_PHY3_CFG, reg_base + PORT_PHY3); | ||
222 | writel(AHCI_PORT_TRANS_CFG, reg_base + PORT_TRANS); | 234 | writel(AHCI_PORT_TRANS_CFG, reg_base + PORT_TRANS); |
223 | if (qpriv->is_dmacoherent) | 235 | if (qpriv->is_dmacoherent) |
224 | writel(AHCI_PORT_AXICC_CFG, reg_base + PORT_AXICC); | 236 | writel(AHCI_PORT_AXICC_CFG, reg_base + PORT_AXICC); |