On Mon, Jun 30, 2014 at 03:44:24PM +0200, Lucas Stach wrote: > Hi Shawn, > > can you please test the attached patch on top of 3.16-rc* to see if it > helps? If it works for you I would like to try and get this into 3.16 as > a bugfix. Unfortunately, it doesn't work. With your change, now it hangs in suspend procedure. $ echo mem > /sys/power/state PM: Syncing filesystems ... done. PM: Preparing system for mem sleep Freezing user space processes ... (elapsed 0.005 seconds) done. Freezing remaining freezable tasks ... (elapsed 0.003 seconds) done. PM: Entering mem sleep sd 0:0:0:0: [sda] Synchronizing SCSI cache sd 0:0:0:0: [sda] Stopping disk PM: suspend of devices complete after 102.992 msecs PM: suspend devices took 0.110 seconds PM: late suspend of devices complete after 12.808 msecs Shawn > > Regards, > Lucas > > --------------------------->8----------------------------- > From f3bfdc9c19249188fa153b1568c3129cd31af4f5 Mon Sep 17 00:00:00 2001 > From: Lucas Stach <l.stach@xxxxxxxxxxxxxx> > Date: Mon, 30 Jun 2014 15:33:04 +0200 > Subject: [PATCH] PCI: imx6: add workaround for errata ERR005723 > > Fixes system hang after resume from suspend to mem. > > Signed-off-by: Lucas Stach <l.stach@xxxxxxxxxxxxxx> > --- > drivers/pci/host/pci-imx6.c | 33 +++++++++++++++++++++++++++++++++ > 1 file changed, 33 insertions(+) > > diff --git a/drivers/pci/host/pci-imx6.c b/drivers/pci/host/pci-imx6.c > index a568efaa331c..5c58a3ee5dbf 100644 > --- a/drivers/pci/host/pci-imx6.c > +++ b/drivers/pci/host/pci-imx6.c > @@ -589,6 +589,38 @@ static int __init imx6_pcie_probe(struct platform_device *pdev) > return 0; > } > > +#ifdef CONFIG_PM_SLEEP > +static int imx6_pcie_suspend(struct device *dev) > +{ > + struct imx6_pcie *imx6_pcie = dev_get_drvdata(dev); > + > + regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR1, > + IMX6Q_GPR1_PCIE_TEST_PD, 1 << 18); > + > + return 0; > +} > + > +static int imx6_pcie_resume(struct device *dev) > +{ > + struct imx6_pcie *imx6_pcie = dev_get_drvdata(dev); > + > + /* > + * This is a workaround for > + * ERR005723: PCIe does not support L2 power down > + * Toggling the PHY PD bit around system L2 state switching seems to be > + * enough to wake the PCIe logic after a power down. > + */ > + regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR1, > + IMX6Q_GPR1_PCIE_TEST_PD, 0 << 18); > + > + return 0; > +} > +#endif > + > +static SIMPLE_DEV_PM_OPS(imx6_pcie_pm_ops, > + imx6_pcie_suspend, > + imx6_pcie_resume); > + > static const struct of_device_id imx6_pcie_of_match[] = { > { .compatible = "fsl,imx6q-pcie", }, > {}, > @@ -600,6 +632,7 @@ static struct platform_driver imx6_pcie_driver = { > .name = "imx6q-pcie", > .owner = THIS_MODULE, > .of_match_table = imx6_pcie_of_match, > + .pm = &imx6_pcie_pm_ops, > }, > }; > > -- > 2.0.0 > > > -- > Pengutronix e.K. | Lucas Stach | > Industrial Linux Solutions | http://www.pengutronix.de/ | > -- To unsubscribe from this list: send the line "unsubscribe linux-pci" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html