mirror of https://gitee.com/openkylin/linux.git
PCI: tegra: Put PEX CLK & BIAS pads in DPD mode
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>
This commit is contained in:
parent
5992b04498
commit
2d8c736158
|
@ -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>
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
||||
|
|
Loading…
Reference in New Issue