On Tuesday, July 01, 2014 6:45 AM, Murali Karicheri wrote: > > Keystone PCIe controller is based on v3.65 version of the > designware h/w. Main differences are > 1. No ATU support > 2. Legacy and MSI irq functions are implemented in > application register space > 3. MSI interrupts are multiplexed over 8 IRQ lines to the Host > side. > All of the Application register space handing code are organized into > pci-keystone-dw.c and the functions are called from pci-keystone.c > to implement PCI controller driver. Also add necessary DT documentation > for the driver. > > Signed-off-by: Murali Karicheri <m-karicheri2@xxxxxx> > > CC: Santosh Shilimkar <santosh.shilimkar@xxxxxx> > CC: Russell King <linux@xxxxxxxxxxxxxxxx> > CC: Grant Likely <grant.likely@xxxxxxxxxx> > CC: Rob Herring <robh+dt@xxxxxxxxxx> > CC: Mohit Kumar <mohit.kumar@xxxxxx> > CC: Jingoo Han <jg1.han@xxxxxxxxxxx> > CC: Bjorn Helgaas <bhelgaas@xxxxxxxxxx> > CC: Pratyush Anand <pratyush.anand@xxxxxx> > CC: Richard Zhu <r65037@xxxxxxxxxxxxx> > CC: Kishon Vijay Abraham I <kishon@xxxxxx> > CC: Marek Vasut <marex@xxxxxxx> > CC: Arnd Bergmann <arnd@xxxxxxxx> > CC: Pawel Moll <pawel.moll@xxxxxxx> > CC: Mark Rutland <mark.rutland@xxxxxxx> > CC: Ian Campbell <ijc+devicetree@xxxxxxxxxxxxxx> > CC: Kumar Gala <galak@xxxxxxxxxxxxxx> > CC: Randy Dunlap <rdunlap@xxxxxxxxxxxxx> > CC: Grant Likely <grant.likely@xxxxxxxxxx> > --- > .../devicetree/bindings/pci/pci-keystone.txt | 69 +++ > drivers/pci/host/Kconfig | 5 + > drivers/pci/host/Makefile | 1 + > drivers/pci/host/pci-keystone-dw.c | 523 ++++++++++++++++++++ > drivers/pci/host/pci-keystone.c | 381 ++++++++++++++ > drivers/pci/host/pci-keystone.h | 56 +++ > 6 files changed, 1035 insertions(+) > create mode 100644 Documentation/devicetree/bindings/pci/pci-keystone.txt > create mode 100644 drivers/pci/host/pci-keystone-dw.c > create mode 100644 drivers/pci/host/pci-keystone.c > create mode 100644 drivers/pci/host/pci-keystone.h > [.....] > + > +static int __init ks_pcie_probe(struct platform_device *pdev) > +{ > + struct device_node *np = pdev->dev.of_node; > + struct device *dev = &pdev->dev; > + struct keystone_pcie *ks_pcie; > + struct pcie_port *pp; > + struct resource *res; > + void __iomem *reg_p; > + struct phy *phy; > + int ret = 0; > + u32 val; > + > + ks_pcie = devm_kzalloc(&pdev->dev, sizeof(*ks_pcie), > + GFP_KERNEL); > + if (!ks_pcie) { > + dev_err(dev, "no memory for keystone pcie\n"); > + return -ENOMEM; > + } > + pp = &ks_pcie->pp; > + > + /* initialize SerDes Phy if present */ > + phy = devm_phy_get(dev, "pcie-phy"); > + if (phy) > + ret = phy_init(phy); Why don't you check 'ret' value? How about the following? + /* initialize SerDes Phy if present */ + phy = devm_phy_get(dev, "pcie-phy"); + if (!IS_ERR_OR_NULL(phy) { + ret = phy_init(phy); + if (ret <0) + return ret; + } Best regards, Jingoo Han [....] -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html