Re: [PATCH v11 19/20] PCI: starfive: Add JH7110 PCIe controller

From: Minda Chen
Date: Mon Dec 04 2023 - 01:25:15 EST




On 2023/12/2 22:44, Emil Renner Berthing wrote:
> Minda Chen wrote:
>> Add StarFive JH7110 SoC PCIe controller platform driver codes, JH7110
>> with PLDA host PCIe core.
>>
>> Signed-off-by: Minda Chen <minda.chen@xxxxxxxxxxxxxxxx>
>> Co-developed-by: Kevin Xie <kevin.xie@xxxxxxxxxxxxxxxx>
>> Reviewed-by: Mason Huo <mason.huo@xxxxxxxxxxxxxxxx>
>> ---
>> MAINTAINERS | 7 +
>> drivers/pci/controller/plda/Kconfig | 11 +
>> drivers/pci/controller/plda/Makefile | 1 +
>> drivers/pci/controller/plda/pcie-plda.h | 71 ++-
>> drivers/pci/controller/plda/pcie-starfive.c | 460 ++++++++++++++++++++
>> drivers/pci/pci.h | 7 +
>> 6 files changed, 556 insertions(+), 1 deletion(-)
>> create mode 100644 drivers/pci/controller/plda/pcie-starfive.c
>>
>
> ...
>
>> +
>> +static int starfive_pcie_parse_dt(struct starfive_jh7110_pcie *pcie,
>> + struct device *dev)
>> +{
>> + int domain_nr;
>> +
>> + pcie->num_clks = devm_clk_bulk_get_all(dev, &pcie->clks);
>> + if (pcie->num_clks < 0)
>> + return dev_err_probe(dev, -ENODEV,
>> + "failed to get pcie clocks\n");
>
> Hi Minda,
>
> From Damian's mail I noticed that this should propagate the error from
> devm_clk_bulk_get_all() properly, so -EPROBE is converted to an -ENODEV error.
> Eg.
>
> if (pcie->num_clks < 0)
> return dev_err_probe(dev, pcie->num_clks,
> "failed to get pcie clocks\n");
>
Thanks. I will change it in next version.

>> +
>> + pcie->resets = devm_reset_control_array_get_exclusive(dev);
>> + if (IS_ERR(pcie->resets))
>> + return dev_err_probe(dev, PTR_ERR(pcie->resets),
>> + "failed to get pcie resets");
>> +
>> + pcie->reg_syscon =
>> + syscon_regmap_lookup_by_phandle(dev->of_node,
>> + "starfive,stg-syscon");
>> +
>> + if (IS_ERR(pcie->reg_syscon))
>> + return dev_err_probe(dev, PTR_ERR(pcie->reg_syscon),
>> + "failed to parse starfive,stg-syscon\n");
>> +
>> + pcie->phy = devm_phy_optional_get(dev, NULL);
>> + if (IS_ERR(pcie->phy))
>> + return dev_err_probe(dev, PTR_ERR(pcie->phy),
>> + "failed to get pcie phy\n");
>> +
>> + domain_nr = of_get_pci_domain_nr(dev->of_node);
>> +
>> + if (domain_nr < 0 || domain_nr > 1)
>> + return dev_err_probe(dev, -ENODEV,
>> + "failed to get valid pcie domain\n");
>> +
>> + if (domain_nr == 0)
>> + pcie->stg_pcie_base = STG_SYSCON_PCIE0_BASE;
>> + else
>> + pcie->stg_pcie_base = STG_SYSCON_PCIE1_BASE;
>> +
>> + pcie->reset_gpio = devm_gpiod_get_optional(dev, "perst",
>> + GPIOD_OUT_HIGH);
>> + if (IS_ERR(pcie->reset_gpio))
>> + return dev_err_probe(dev, PTR_ERR(pcie->reset_gpio),
>> + "failed to get perst-gpio\n");
>> +
>> + pcie->power_gpio = devm_gpiod_get_optional(dev, "enable",
>> + GPIOD_OUT_LOW);
>> + if (IS_ERR(pcie->power_gpio))
>> + return dev_err_probe(dev, PTR_ERR(pcie->power_gpio),
>> + "failed to get power-gpio\n");
>> +
>> + return 0;
>> +}