On Thu, Nov 02, 2023 at 10:28:08PM +0530, Manivannan Sadhasivam wrote: > On Tue, Oct 17, 2023 at 03:31:42PM -0400, Frank Li wrote: > > Since difference SoCs require different sequence for exiting L2, let's add > > a separate "exit_from_l2()" callback. This callback can be used to execute > > SoC specific sequence. > > > > I missed the fact that this patch honors the return value of the callback (which > was ignored previously). So this should be added to the description as well. How about add below? "Change ls_pcie_exit_from_l2() return value from void to int. Return error when exit_from_l2() failure to exit suspend flow." Frank > > > Signed-off-by: Frank Li <Frank.Li@xxxxxxx> > > With that, > > Reviewed-by: Manivannan Sadhasivam <manivannan.sadhasivam@xxxxxxxxxx> > > - Mani > > > --- > > > > Notes: > > Change from v2 to v3 > > - fixed according to mani's feedback > > 1. update commit message > > 2. move dw_pcie_host_ops to next patch > > 3. check return value from exit_from_l2() > > Change from v1 to v2 > > - change subject 'a' to 'A' > > > > Change from v1 to v2 > > - change subject 'a' to 'A' > > > > drivers/pci/controller/dwc/pci-layerscape.c | 11 +++++++++-- > > 1 file changed, 9 insertions(+), 2 deletions(-) > > > > diff --git a/drivers/pci/controller/dwc/pci-layerscape.c b/drivers/pci/controller/dwc/pci-layerscape.c > > index 37956e09c65bd..aea89926bcc4f 100644 > > --- a/drivers/pci/controller/dwc/pci-layerscape.c > > +++ b/drivers/pci/controller/dwc/pci-layerscape.c > > @@ -39,6 +39,7 @@ > > > > struct ls_pcie_drvdata { > > const u32 pf_off; > > + int (*exit_from_l2)(struct dw_pcie_rp *pp); > > bool pm_support; > > }; > > > > @@ -125,7 +126,7 @@ static void ls_pcie_send_turnoff_msg(struct dw_pcie_rp *pp) > > dev_err(pcie->pci->dev, "PME_Turn_off timeout\n"); > > } > > > > -static void ls_pcie_exit_from_l2(struct dw_pcie_rp *pp) > > +static int ls_pcie_exit_from_l2(struct dw_pcie_rp *pp) > > { > > struct dw_pcie *pci = to_dw_pcie_from_pp(pp); > > struct ls_pcie *pcie = to_ls_pcie(pci); > > @@ -150,6 +151,8 @@ static void ls_pcie_exit_from_l2(struct dw_pcie_rp *pp) > > 10000); > > if (ret) > > dev_err(pcie->pci->dev, "L2 exit timeout\n"); > > + > > + return ret; > > } > > > > static int ls_pcie_host_init(struct dw_pcie_rp *pp) > > @@ -180,6 +183,7 @@ static const struct ls_pcie_drvdata ls1021a_drvdata = { > > static const struct ls_pcie_drvdata layerscape_drvdata = { > > .pf_off = 0xc0000, > > .pm_support = true, > > + .exit_from_l2 = ls_pcie_exit_from_l2, > > }; > > > > static const struct of_device_id ls_pcie_of_match[] = { > > @@ -247,11 +251,14 @@ static int ls_pcie_suspend_noirq(struct device *dev) > > static int ls_pcie_resume_noirq(struct device *dev) > > { > > struct ls_pcie *pcie = dev_get_drvdata(dev); > > + int ret; > > > > if (!pcie->drvdata->pm_support) > > return 0; > > > > - ls_pcie_exit_from_l2(&pcie->pci->pp); > > + ret = pcie->drvdata->exit_from_l2(&pcie->pci->pp); > > + if (ret) > > + return ret; > > > > return dw_pcie_resume_noirq(pcie->pci); > > } > > -- > > 2.34.1 > > > > -- > மணிவண்ணன் சதாசிவம்