On 01/13/2016 12:47 AM, Kishon Vijay Abraham I wrote: > Use platform populated reset assert and deassert > callbacks to perform reset of PCIe. > > Use these callbacks until a reset interface using drivers/reset > is available for the purpose. > > Signed-off-by: Kishon Vijay Abraham I <kishon@xxxxxx> > Signed-off-by: Sekhar Nori <nsekhar@xxxxxx> > --- > drivers/pci/host/pci-dra7xx.c | 32 ++++++++++++++++++++++++++++++++ > 1 file changed, 32 insertions(+) > > diff --git a/drivers/pci/host/pci-dra7xx.c b/drivers/pci/host/pci-dra7xx.c > index 8c36880..049083d 100644 > --- a/drivers/pci/host/pci-dra7xx.c > +++ b/drivers/pci/host/pci-dra7xx.c > @@ -25,6 +25,8 @@ > #include <linux/resource.h> > #include <linux/types.h> > > +#include <linux/platform_data/pci-dra7xx.h> > + > #include "pcie-designware.h" > > /* PCIe controller wrapper DRA7XX configuration registers */ > @@ -329,6 +331,32 @@ static int __init dra7xx_add_pcie_port(struct dra7xx_pcie *dra7xx, > return 0; > } > > +static int dra7xx_pcie_reset(struct platform_device *pdev) > +{ > + int ret; > + struct device *dev = &pdev->dev; > + struct pci_dra7xx_platform_data *pdata = pdev->dev.platform_data; > + > + if (!(pdata && pdata->deassert_reset && pdata->assert_reset)) { > + dev_err(dev, "platform data for reset not found!\n"); > + return -EINVAL; > + } > + > + ret = pdata->assert_reset(pdev, pdata->reset_name); > + if (ret) { > + dev_err(dev, "assert_reset failed: %d\n", ret); > + return ret; > + } > + > + ret = pdata->deassert_reset(pdev, pdata->reset_name); > + if (ret) { > + dev_err(dev, "deassert_reset failed: %d\n", ret); > + return ret; > + } The only comment I have on this is the symmetry (assert_reset invocation in driver remove). If you install and remove the module once, then the reset stays deasserted. On Power-On-Reset, the resets by default will be in asserted state. regards SUman > + > + return 0; > +} > + > static int __init dra7xx_pcie_probe(struct platform_device *pdev) > { > u32 reg; > @@ -347,6 +375,10 @@ static int __init dra7xx_pcie_probe(struct platform_device *pdev) > enum of_gpio_flags flags; > unsigned long gpio_flags; > > + ret = dra7xx_pcie_reset(pdev); > + if (ret) > + return ret; > + > dra7xx = devm_kzalloc(dev, sizeof(*dra7xx), GFP_KERNEL); > if (!dra7xx) > return -ENOMEM; > -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html