On Wed, Jun 18, 2025 at 10:41:12AM +0800, Richard Zhu wrote: > Refer to PCIe r6.0, sec 5.2, fig 5-1 Link Power Management State Flow > Diagram. Both L0 and L2/L3 Ready can be transferred to LDn directly. > > It's harmless to let dw_pcie_suspend_noirq() proceed suspend after the > PME_Turn_Off is sent out, whatever the LTSSM state is in L2 or L3 after > a recommended 10ms max wait refer to PCIe r6.0, sec 5.3.3.2.1 PME > Synchronization. > > The LTSSM states of i.MX6QP PCIe is inaccessible after the PME_Turn_Off > is kicked off. To handle this case, don't poll L2 state and add one max > 10ms delay if QUIRK_NOL2POLL_IN_PM flag is existing in suspend. > > Signed-off-by: Richard Zhu <hongxing.zhu@xxxxxxx> > --- This patch should be after you add QUIRK_NOL2POLL_IN_PM to avoid build break. Frank > drivers/pci/controller/dwc/pci-imx6.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/drivers/pci/controller/dwc/pci-imx6.c b/drivers/pci/controller/dwc/pci-imx6.c > index 5a38cfaf989b..8b7daaf36fef 100644 > --- a/drivers/pci/controller/dwc/pci-imx6.c > +++ b/drivers/pci/controller/dwc/pci-imx6.c > @@ -125,6 +125,7 @@ struct imx_pcie_drvdata { > enum imx_pcie_variants variant; > enum dw_pcie_device_mode mode; > u32 flags; > + u32 quirk; > int dbi_length; > const char *gpr; > const u32 ltssm_off; > @@ -1759,6 +1760,7 @@ static int imx_pcie_probe(struct platform_device *pdev) > if (ret) > return ret; > > + pci->quirk_flag = imx_pcie->drvdata->quirk; > pci->use_parent_dt_ranges = true; > if (imx_pcie->drvdata->mode == DW_PCIE_EP_TYPE) { > ret = imx_add_pcie_ep(imx_pcie, pdev); > @@ -1837,6 +1839,7 @@ static const struct imx_pcie_drvdata drvdata[] = { > .enable_ref_clk = imx6q_pcie_enable_ref_clk, > .core_reset = imx6qp_pcie_core_reset, > .ops = &imx_pcie_host_ops, > + .quirk = QUIRK_NOL2POLL_IN_PM, > }, > [IMX7D] = { > .variant = IMX7D, > -- > 2.37.1 >