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
>
> ---
> 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, 0x8000);
>
> - 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, 0x0001, GEN2_PCIEPHYCTRL);
> rcar_pci_write_reg(pcie, 0x0006, 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;
>