From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jingoo Han Subject: Re: [PATCH v3 5/5] PCI: add PCI controller for Keystone PCIe h/w Date: Tue, 08 Jul 2014 21:43:06 +0900 Message-ID: <000f01cf9aaa$2a59a6b0$7f0cf410$%han@samsung.com> References: <1404164720-11066-1-git-send-email-m-karicheri2@ti.com> <1404164720-11066-6-git-send-email-m-karicheri2@ti.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Return-path: In-reply-to: <1404164720-11066-6-git-send-email-m-karicheri2@ti.com> Content-language: ko Sender: linux-pci-owner@vger.kernel.org To: 'Murali Karicheri' , linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org Cc: 'Santosh Shilimkar' , 'Russell King' , 'Grant Likely' , 'Rob Herring' , 'Mohit Kumar' , 'Bjorn Helgaas' , 'Pratyush Anand' , 'Richard Zhu' , 'Kishon Vijay Abraham I' , 'Marek Vasut' , 'Arnd Bergmann' , 'Pawel Moll' , 'Mark Rutland' , 'Ian Campbell' , 'Kumar Gala' , 'Randy Dunlap' , 'Jingoo Han' List-Id: devicetree@vger.kernel.org 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 > > CC: Santosh Shilimkar > CC: Russell King > CC: Grant Likely > CC: Rob Herring > CC: Mohit Kumar > CC: Jingoo Han > CC: Bjorn Helgaas > CC: Pratyush Anand > CC: Richard Zhu > CC: Kishon Vijay Abraham I > CC: Marek Vasut > CC: Arnd Bergmann > CC: Pawel Moll > CC: Mark Rutland > CC: Ian Campbell > CC: Kumar Gala > CC: Randy Dunlap > CC: Grant Likely > --- > .../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 [....]