writel_relaxed(val | BIT(2), gpc_base + GPC_PGC_CPU_MAPPING);
switch (event) {
- case REGULATOR_EVENT_PRE_DO_ENABLE:
+ case REGULATOR_EVENT_AFT_DO_ENABLE:
+ /*
+ * For imx7d pcie phy, VDD18 turn on time has to wait
+ * at least 0.1 .s after VDD10 turns on.
+ */
+ udelay(1);
val = readl_relaxed(gpc_base + GPC_PU_PGC_SW_PUP_REQ);
writel_relaxed(val | BIT(0), gpc_base + GPC_PU_PGC_SW_PUP_REQ);
while (readl_relaxed(gpc_base + GPC_PU_PGC_SW_PUP_REQ) & BIT(0))
while (readl_relaxed(gpc_base + GPC_PU_PGC_SW_PDN_REQ) & BIT(0))
;
imx_gpcv2_set_m_core_pgc(false, GPC_PGC_MIPI_PHY);
+ /*
+ * For imx7d pcie phy, VDD18 turn off time has to advance
+ * at least 0.1 .s before VDD10 turns off.
+ */
+ udelay(1);
break;
default:
break;
writel_relaxed(val | BIT(3), gpc_base + GPC_PGC_CPU_MAPPING);
switch (event) {
- case REGULATOR_EVENT_PRE_DO_ENABLE:
+ case REGULATOR_EVENT_AFT_DO_ENABLE:
+ /*
+ * For imx7d pcie phy, VDD18 turn on time has to wait
+ * at least 0.1 .s after VDD10 turns on.
+ */
+ udelay(1);
val = readl_relaxed(gpc_base + GPC_PU_PGC_SW_PUP_REQ);
writel_relaxed(val | BIT(1), gpc_base + GPC_PU_PGC_SW_PUP_REQ);
while (readl_relaxed(gpc_base + GPC_PU_PGC_SW_PUP_REQ) & BIT(1))
while (readl_relaxed(gpc_base + GPC_PU_PGC_SW_PDN_REQ) & BIT(1))
;
imx_gpcv2_set_m_core_pgc(false, GPC_PGC_PCIE_PHY);
+ /*
+ * For imx7d pcie phy, VDD18 turn off time has to advance
+ * at least 0.1 .s before VDD10 turns off.
+ */
+ udelay(1);
break;
default:
break;