> -----Original Message----- > From: Bjorn Helgaas <helgaas@xxxxxxxxxx> > Sent: 2025年8月20日 3:07 > To: Hongxing Zhu <hongxing.zhu@xxxxxxx> > Cc: Frank Li <frank.li@xxxxxxx>; jingoohan1@xxxxxxxxx; > l.stach@xxxxxxxxxxxxxx; lpieralisi@xxxxxxxxxx; kwilczynski@xxxxxxxxxx; > mani@xxxxxxxxxx; robh@xxxxxxxxxx; bhelgaas@xxxxxxxxxx; > shawnguo@xxxxxxxxxx; s.hauer@xxxxxxxxxxxxxx; kernel@xxxxxxxxxxxxxx; > festevam@xxxxxxxxx; linux-pci@xxxxxxxxxxxxxxx; > linux-arm-kernel@xxxxxxxxxxxxxxxxxxx; imx@xxxxxxxxxxxxxxx; > linux-kernel@xxxxxxxxxxxxxxx > Subject: Re: [RESEND v3 4/5] PCI: dwc: Skip PME_Turn_Off message if there is > no endpoint connected > > On Mon, Aug 18, 2025 at 03:32:04PM +0800, Richard Zhu wrote: > > Skip PME_Turn_Off message if there is no endpoint connected. > > What's the value of doing this? Is this to make something faster? If so, > what and by how much? > > Or does it fix something that's currently broken? > > Seems like the discussion at > https://lore.kern/ > el.org%2Flinux-pci%2F20241107084455.3623576-1-hongxing.zhu%40nxp.com% > 2Ft%2F%23u&data=05%7C02%7Chongxing.zhu%40nxp.com%7Ced46fe10aeb74 > 21c88a508dddf53a24f%7C686ea1d3bc2b4c6fa92cd99c5c301635%7C0%7C0%7 > C638912272493755203%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOn > RydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ% > 3D%3D%7C0%7C%7C%7C&sdata=lIE7%2FlS5jiGxGPGVm5Hr5efpMbT19CLqrwu > YNvAEdLY%3D&reserved=0 > might be relevant. > > This commit log only restates what the code does. In my opinion we need > actual justification for making this change. Hi Bjorn: Thanks for your comments. This commit is mainly used to fix suspend/resume broken on i.MX7D PCIe. A chip freeze is observed on i.MX7D when PCIe RC kicks off the PM_PME message and no any devices are connected on the port. Because i.MX7D is a very old design, and out of IP design technical support. I don't know what's going on inside the PCIe IP design when kick off the PM_PME message. >From SW perspective view, what I can do is to find out a quirk method to workaround this broken. Hope this can clear up your confusions. Best Regards Richard Zhu > > > Signed-off-by: Richard Zhu <hongxing.zhu@xxxxxxx> > > Reviewed-by: Frank Li <Frank.Li@xxxxxxx> > > --- > > drivers/pci/controller/dwc/pcie-designware-host.c | 15 > > +++++++++------ > > 1 file changed, 9 insertions(+), 6 deletions(-) > > > > diff --git a/drivers/pci/controller/dwc/pcie-designware-host.c > > b/drivers/pci/controller/dwc/pcie-designware-host.c > > index 20a7f827babbf..868e7db4e3381 100644 > > --- a/drivers/pci/controller/dwc/pcie-designware-host.c > > +++ b/drivers/pci/controller/dwc/pcie-designware-host.c > > @@ -1016,12 +1016,15 @@ int dw_pcie_suspend_noirq(struct dw_pcie *pci) > > if (dw_pcie_readw_dbi(pci, offset + PCI_EXP_LNKCTL) & > PCI_EXP_LNKCTL_ASPM_L1) > > return 0; > > > > - if (pci->pp.ops->pme_turn_off) { > > - pci->pp.ops->pme_turn_off(&pci->pp); > > - } else { > > - ret = dw_pcie_pme_turn_off(pci); > > - if (ret) > > - return ret; > > + /* Skip PME_Turn_Off message if there is no endpoint connected */ > > + if (dw_pcie_get_ltssm(pci) > DW_PCIE_LTSSM_DETECT_WAIT) { > > + if (pci->pp.ops->pme_turn_off) { > > + pci->pp.ops->pme_turn_off(&pci->pp); > > + } else { > > + ret = dw_pcie_pme_turn_off(pci); > > + if (ret) > > + return ret; > > + } > > } > > > > if (dwc_quirk(pci, QUIRK_NOL2POLL_IN_PM)) { > > -- > > 2.37.1 > >