Skip to content

Commit

Permalink
PCI: tegra: Put PEX CLK & BIAS pads in DPD mode
Browse files Browse the repository at this point in the history
In Tegra210 AFI design has clamp value for the BIAS pad as 0, which keeps
the bias pad in non power down mode. This is leading to power consumption
of 2 mW in BIAS pad, even if the PCIe partition is powergated. To avoid
unnecessary power consumption, put PEX CLK & BIAS pads in deep power down
mode when PCIe partition is power gated.

Signed-off-by: Manikanta Maddireddy <mmaddireddy@nvidia.com>
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Acked-by: Thierry Reding <treding@nvidia.com>
  • Loading branch information
Manikanta Maddireddy authored and Lorenzo Pieralisi committed Jun 20, 2019
1 parent 5992b04 commit 2d8c736
Showing 1 changed file with 12 additions and 1 deletion.
13 changes: 12 additions & 1 deletion drivers/pci/controller/pci-tegra.c
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
#include <linux/of_platform.h>
#include <linux/pci.h>
#include <linux/phy/phy.h>
#include <linux/pinctrl/consumer.h>
#include <linux/platform_device.h>
#include <linux/reset.h>
#include <linux/sizes.h>
Expand Down Expand Up @@ -2853,6 +2854,7 @@ static int __maybe_unused tegra_pcie_pm_suspend(struct device *dev)
if (IS_ENABLED(CONFIG_PCI_MSI))
tegra_pcie_disable_msi(pcie);

pinctrl_pm_select_idle_state(dev);
tegra_pcie_power_off(pcie);

return 0;
Expand All @@ -2868,6 +2870,13 @@ static int __maybe_unused tegra_pcie_pm_resume(struct device *dev)
dev_err(dev, "tegra pcie power on fail: %d\n", err);
return err;
}

err = pinctrl_pm_select_default_state(dev);
if (err < 0) {
dev_err(dev, "failed to disable PCIe IO DPD: %d\n", err);
goto poweroff;
}

tegra_pcie_enable_controller(pcie);
tegra_pcie_setup_translations(pcie);

Expand All @@ -2877,7 +2886,7 @@ static int __maybe_unused tegra_pcie_pm_resume(struct device *dev)
err = clk_prepare_enable(pcie->pex_clk);
if (err) {
dev_err(dev, "failed to enable PEX clock: %d\n", err);
goto poweroff;
goto pex_dpd_enable;
}

reset_control_deassert(pcie->pex_rst);
Expand All @@ -2898,6 +2907,8 @@ static int __maybe_unused tegra_pcie_pm_resume(struct device *dev)
disable_pex_clk:
reset_control_assert(pcie->pex_rst);
clk_disable_unprepare(pcie->pex_clk);
pex_dpd_enable:
pinctrl_pm_select_idle_state(dev);
poweroff:
tegra_pcie_power_off(pcie);

Expand Down

0 comments on commit 2d8c736

Please sign in to comment.