Re: [PATCH 5/9] PCI: tegra: Explicitly specify PMC instance to use
From: Manivannan Sadhasivam
Date: Fri May 15 2026 - 13:51:28 EST
On Wed, May 06, 2026 at 03:41:56PM +0200, Thierry Reding wrote:
> From: Thierry Reding <treding@xxxxxxxxxx>
>
> Currently the kernel relies on a global variable to reference the PMC
> context. Use an explicit lookup for the PMC and pass that to the public
> PMC APIs.
>
> Signed-off-by: Thierry Reding <treding@xxxxxxxxxx>
> ---
> drivers/pci/controller/pci-tegra.c | 20 +++++++++++++++-----
> 1 file changed, 15 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/pci/controller/pci-tegra.c b/drivers/pci/controller/pci-tegra.c
> index 512309763d1f..2c6c521e6901 100644
> --- a/drivers/pci/controller/pci-tegra.c
> +++ b/drivers/pci/controller/pci-tegra.c
> @@ -340,6 +340,8 @@ struct tegra_pcie {
> struct reset_control *afi_rst;
> struct reset_control *pcie_xrst;
>
> + struct tegra_pmc *pmc;
> +
> bool legacy_phy;
> struct phy *phy;
>
> @@ -1165,7 +1167,7 @@ static void tegra_pcie_power_off(struct tegra_pcie *pcie)
> clk_disable_unprepare(pcie->afi_clk);
>
> if (!dev->pm_domain)
> - tegra_powergate_power_off(TEGRA_POWERGATE_PCIE);
> + tegra_pmc_powergate_power_off(pcie->pmc, TEGRA_POWERGATE_PCIE);
>
> err = regulator_bulk_disable(pcie->num_supplies, pcie->supplies);
> if (err < 0)
> @@ -1183,7 +1185,7 @@ static int tegra_pcie_power_on(struct tegra_pcie *pcie)
> reset_control_assert(pcie->pex_rst);
>
> if (!dev->pm_domain)
> - tegra_powergate_power_off(TEGRA_POWERGATE_PCIE);
> + tegra_pmc_powergate_power_off(pcie->pmc, TEGRA_POWERGATE_PCIE);
>
> /* enable regulators */
> err = regulator_bulk_enable(pcie->num_supplies, pcie->supplies);
> @@ -1191,12 +1193,14 @@ static int tegra_pcie_power_on(struct tegra_pcie *pcie)
> dev_err(dev, "failed to enable regulators: %d\n", err);
>
> if (!dev->pm_domain) {
> - err = tegra_powergate_power_on(TEGRA_POWERGATE_PCIE);
> + err = tegra_pmc_powergate_power_on(pcie->pmc,
> + TEGRA_POWERGATE_PCIE);
> if (err) {
> dev_err(dev, "failed to power ungate: %d\n", err);
> goto regulator_disable;
> }
> - err = tegra_powergate_remove_clamping(TEGRA_POWERGATE_PCIE);
> + err = tegra_pmc_powergate_remove_clamping(pcie->pmc,
> + TEGRA_POWERGATE_PCIE);
> if (err) {
> dev_err(dev, "failed to remove clamp: %d\n", err);
> goto powergate;
> @@ -1234,7 +1238,7 @@ static int tegra_pcie_power_on(struct tegra_pcie *pcie)
> clk_disable_unprepare(pcie->afi_clk);
> powergate:
> if (!dev->pm_domain)
> - tegra_powergate_power_off(TEGRA_POWERGATE_PCIE);
> + tegra_pmc_powergate_power_off(pcie->pmc, TEGRA_POWERGATE_PCIE);
> regulator_disable:
> regulator_bulk_disable(pcie->num_supplies, pcie->supplies);
>
> @@ -1432,6 +1436,12 @@ static int tegra_pcie_get_resources(struct tegra_pcie *pcie)
> return err;
> }
>
> + pcie->pmc = devm_tegra_pmc_get(dev);
> + if (IS_ERR(pcie->pmc)) {
> + dev_err_probe(dev, PTR_ERR(pcie->pmc), "failed to get PMC\n");
> + return err;
As Sashiko pointed out, you need to return dev_err_probe() directly.
- Mani
--
மணிவண்ணன் சதாசிவம்