On Fri, Apr 06, 2018 at 02:10:22PM +0300, Sergei Shtylyov wrote: > We now have rcar_pcie_hw_init_{h1|gen2|gen3}() differing only in the PCIe > PHY init code and all ending with a call to rcar_pcie_hw_init(), thus it > makes sense to move that call into the driver's probe() method and then > rename those functions to rcar_pcie_phy_init_{h1|gen2|gen3}() -- doing > this saves 48 bytes of object code (AArch64 gcc 4.8.5)... I'm not sure the churn is worth it, but if you do then that is find by me. > Signed-off-by: Sergei Shtylyov <sergei.shtylyov@xxxxxxxxxxxxxxxxxx> > > --- > drivers/pci/host/pcie-rcar.c | 42 ++++++++++++++++++++++-------------------- > 1 file changed, 22 insertions(+), 20 deletions(-) > > Index: pci/drivers/pci/host/pcie-rcar.c > =================================================================== > --- pci.orig/drivers/pci/host/pcie-rcar.c > +++ pci/drivers/pci/host/pcie-rcar.c > @@ -626,7 +626,7 @@ static int rcar_pcie_hw_init(struct rcar > return 0; > } > > -static int rcar_pcie_hw_init_h1(struct rcar_pcie *pcie) > +static int rcar_pcie_phy_init_h1(struct rcar_pcie *pcie) > { > /* Initialize the phy */ > phy_write_reg(pcie, 0, 0x42, 0x1, 0x0EC34191); > @@ -646,10 +646,10 @@ static int rcar_pcie_hw_init_h1(struct r > phy_write_reg(pcie, 0, 0x64, 0x1, 0x3F0F1F0F); > phy_write_reg(pcie, 0, 0x66, 0x1, 0x00008000); > > - return rcar_pcie_hw_init(pcie); > + return 0; > } > > -static int rcar_pcie_hw_init_gen2(struct rcar_pcie *pcie) > +static int rcar_pcie_phy_init_gen2(struct rcar_pcie *pcie) > { > /* > * These settings come from the R-Car Series, 2nd Generation User's > @@ -666,10 +666,10 @@ static int rcar_pcie_hw_init_gen2(struct > rcar_pci_write_reg(pcie, 0x00000001, GEN2_PCIEPHYCTRL); > rcar_pci_write_reg(pcie, 0x00000006, GEN2_PCIEPHYCTRL); > > - return rcar_pcie_hw_init(pcie); > + return 0; > } > > -static int rcar_pcie_hw_init_gen3(struct rcar_pcie *pcie) > +static int rcar_pcie_phy_init_gen3(struct rcar_pcie *pcie) > { > int err; > > @@ -677,11 +677,7 @@ static int rcar_pcie_hw_init_gen3(struct > if (err) > return err; > > - err = phy_power_on(pcie->phy); > - if (err) > - return err; > - > - return rcar_pcie_hw_init(pcie); > + return phy_power_on(pcie->phy); > } > > static int rcar_msi_alloc(struct rcar_msi *chip) > @@ -1082,17 +1078,18 @@ static int rcar_pcie_parse_map_dma_range > } > > static const struct of_device_id rcar_pcie_of_match[] = { > - { .compatible = "renesas,pcie-r8a7779", .data = rcar_pcie_hw_init_h1 }, > + { .compatible = "renesas,pcie-r8a7779", > + .data = rcar_pcie_phy_init_h1 }, > { .compatible = "renesas,pcie-r8a7790", > - .data = rcar_pcie_hw_init_gen2 }, > + .data = rcar_pcie_phy_init_gen2 }, > { .compatible = "renesas,pcie-r8a7791", > - .data = rcar_pcie_hw_init_gen2 }, > + .data = rcar_pcie_phy_init_gen2 }, > { .compatible = "renesas,pcie-rcar-gen2", > - .data = rcar_pcie_hw_init_gen2 }, > + .data = rcar_pcie_phy_init_gen2 }, > { .compatible = "renesas,pcie-r8a7795", > - .data = rcar_pcie_hw_init_gen3 }, > + .data = rcar_pcie_phy_init_gen3 }, > { .compatible = "renesas,pcie-rcar-gen3", > - .data = rcar_pcie_hw_init_gen3 }, > + .data = rcar_pcie_phy_init_gen3 }, > {}, I would avoid the line wrapping here, but its up to you. > }; > > @@ -1140,7 +1137,7 @@ static int rcar_pcie_probe(struct platfo > struct rcar_pcie *pcie; > unsigned int data; > int err; > - int (*hw_init_fn)(struct rcar_pcie *); > + int (*phy_init_fn)(struct rcar_pcie *); Looking at this I wonder if we also need a phy_cleanup() code or similar. > struct pci_host_bridge *bridge; > > bridge = pci_alloc_host_bridge(sizeof(*pcie)); > @@ -1174,10 +1171,15 @@ static int rcar_pcie_probe(struct platfo > goto err_pm_disable; > } > > - /* Failure to get a link might just be that no cards are inserted */ > - hw_init_fn = of_device_get_match_data(dev); > - err = hw_init_fn(pcie); > + phy_init_fn = of_device_get_match_data(dev); > + err = phy_init_fn(pcie); > if (err) { > + dev_err(dev, "failed to init PCIe PHY\n"); > + goto err_pm_put; > + } > + > + /* Failure to get a link might just be that no cards are inserted */ > + if (rcar_pcie_hw_init(pcie)) { > dev_info(dev, "PCIe link down\n"); > err = -ENODEV; > goto err_pm_put; >