|
62 | 62 | #define IMX8MP_PCIE_PHY_TRSV_REG206 0x738 |
63 | 63 | #define LN0_TG_RX_SIGVAL_LBF_DELAY 0x4 |
64 | 64 |
|
| 65 | +static int imx8_pcie_phy_tuned; |
65 | 66 | struct imx8_pcie_phy { |
66 | 67 | struct phy *phy; |
67 | 68 | struct clk *clk; |
@@ -135,34 +136,36 @@ static int imx8_pcie_phy_cal(struct phy *phy) |
135 | 136 | * Fine tune the parameters of the PHY, let PCIe link up to GEN3 |
136 | 137 | * between two EVK boards in the EP/RC validation system. |
137 | 138 | */ |
138 | | - writel(LN0_OVRD_TX_DRV_LVL, |
139 | | - imx8_phy->base + IMX8MP_PCIE_PHY_TRSV_REG001); |
140 | | - writel(LN0_OVRD_TX_DRV_PST_LVL_G1, |
141 | | - imx8_phy->base + IMX8MP_PCIE_PHY_TRSV_REG005); |
142 | | - writel(LN0_OVRD_TX_DRV_PST_LVL_G2, |
143 | | - imx8_phy->base + IMX8MP_PCIE_PHY_TRSV_REG006); |
144 | | - writel(LN0_OVRD_TX_DRV_PST_LVL_G3, |
145 | | - imx8_phy->base + IMX8MP_PCIE_PHY_TRSV_REG007); |
146 | | - writel(LN0_OVRD_TX_DRV_PRE_LVL_G1, |
147 | | - imx8_phy->base + IMX8MP_PCIE_PHY_TRSV_REG009); |
148 | | - writel(LN0_OVRD_RX_CTLE_RS1_G1, |
149 | | - imx8_phy->base + IMX8MP_PCIE_PHY_TRSV_REG059); |
150 | | - writel(LN0_OVRD_RX_CTLE_RS1_G2_G3, |
151 | | - imx8_phy->base + IMX8MP_PCIE_PHY_TRSV_REG060); |
152 | | - writel(LN0_ANA_RX_CTLE_IBLEED, |
153 | | - imx8_phy->base + IMX8MP_PCIE_PHY_TRSV_REG069); |
154 | | - writel(LN0_OVRD_RX_RTERM_VCM_EN, |
155 | | - imx8_phy->base + IMX8MP_PCIE_PHY_TRSV_REG107); |
156 | | - writel(LN0_ANA_OVRD_RX_SQHS_DIFN_OC, |
157 | | - imx8_phy->base + IMX8MP_PCIE_PHY_TRSV_REG109); |
158 | | - writel(LN0_ANA_OVRD_RX_SQHS_DIFP_OC, |
159 | | - imx8_phy->base + IMX8MP_PCIE_PHY_TRSV_REG110); |
160 | | - writel(LN0_RX_CDR_FBB_FINE_G1_G2, |
161 | | - imx8_phy->base + IMX8MP_PCIE_PHY_TRSV_REG158); |
162 | | - writel(LN0_RX_CDR_FBB_FINE_G3_G4, |
163 | | - imx8_phy->base + IMX8MP_PCIE_PHY_TRSV_REG159); |
164 | | - writel(LN0_TG_RX_SIGVAL_LBF_DELAY, |
165 | | - imx8_phy->base + IMX8MP_PCIE_PHY_TRSV_REG206); |
| 139 | + if (imx8_pcie_phy_tuned) { |
| 140 | + writel(LN0_OVRD_TX_DRV_LVL, |
| 141 | + imx8_phy->base + IMX8MP_PCIE_PHY_TRSV_REG001); |
| 142 | + writel(LN0_OVRD_TX_DRV_PST_LVL_G1, |
| 143 | + imx8_phy->base + IMX8MP_PCIE_PHY_TRSV_REG005); |
| 144 | + writel(LN0_OVRD_TX_DRV_PST_LVL_G2, |
| 145 | + imx8_phy->base + IMX8MP_PCIE_PHY_TRSV_REG006); |
| 146 | + writel(LN0_OVRD_TX_DRV_PST_LVL_G3, |
| 147 | + imx8_phy->base + IMX8MP_PCIE_PHY_TRSV_REG007); |
| 148 | + writel(LN0_OVRD_TX_DRV_PRE_LVL_G1, |
| 149 | + imx8_phy->base + IMX8MP_PCIE_PHY_TRSV_REG009); |
| 150 | + writel(LN0_OVRD_RX_CTLE_RS1_G1, |
| 151 | + imx8_phy->base + IMX8MP_PCIE_PHY_TRSV_REG059); |
| 152 | + writel(LN0_OVRD_RX_CTLE_RS1_G2_G3, |
| 153 | + imx8_phy->base + IMX8MP_PCIE_PHY_TRSV_REG060); |
| 154 | + writel(LN0_ANA_RX_CTLE_IBLEED, |
| 155 | + imx8_phy->base + IMX8MP_PCIE_PHY_TRSV_REG069); |
| 156 | + writel(LN0_OVRD_RX_RTERM_VCM_EN, |
| 157 | + imx8_phy->base + IMX8MP_PCIE_PHY_TRSV_REG107); |
| 158 | + writel(LN0_ANA_OVRD_RX_SQHS_DIFN_OC, |
| 159 | + imx8_phy->base + IMX8MP_PCIE_PHY_TRSV_REG109); |
| 160 | + writel(LN0_ANA_OVRD_RX_SQHS_DIFP_OC, |
| 161 | + imx8_phy->base + IMX8MP_PCIE_PHY_TRSV_REG110); |
| 162 | + writel(LN0_RX_CDR_FBB_FINE_G1_G2, |
| 163 | + imx8_phy->base + IMX8MP_PCIE_PHY_TRSV_REG158); |
| 164 | + writel(LN0_RX_CDR_FBB_FINE_G3_G4, |
| 165 | + imx8_phy->base + IMX8MP_PCIE_PHY_TRSV_REG159); |
| 166 | + writel(LN0_TG_RX_SIGVAL_LBF_DELAY, |
| 167 | + imx8_phy->base + IMX8MP_PCIE_PHY_TRSV_REG206); |
| 168 | + } |
166 | 169 |
|
167 | 170 | writel(PLL_ANA_LPF_R_SEL_FINE_0_4, |
168 | 171 | imx8_phy->base + IMX8MP_PCIE_PHY_CMN_REG020); |
@@ -198,6 +201,17 @@ static struct phy_ops imx8_pcie_phy_ops = { |
198 | 201 | .owner = THIS_MODULE, |
199 | 202 | }; |
200 | 203 |
|
| 204 | +static int __init imx8_pcie_phy_fine_tune(char *str) |
| 205 | +{ |
| 206 | + if (!strcmp(str, "yes")) { |
| 207 | + pr_info("i.MX PCIe PHY is fine tuned in EP/RC SYS.\n"); |
| 208 | + imx8_pcie_phy_tuned = 1; |
| 209 | + } |
| 210 | + return 1; |
| 211 | +} |
| 212 | + |
| 213 | +__setup("pcie_phy_tuned=", imx8_pcie_phy_fine_tune); |
| 214 | + |
201 | 215 | static int imx8_pcie_phy_probe(struct platform_device *pdev) |
202 | 216 | { |
203 | 217 | u32 val = 0; |
|
0 commit comments