Commit 2d8c7361 authored by Manikanta Maddireddy's avatar Manikanta Maddireddy Committed by Lorenzo Pieralisi

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: default avatarManikanta Maddireddy <mmaddireddy@nvidia.com>
Signed-off-by: default avatarLorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Acked-by: default avatarThierry Reding <treding@nvidia.com>
parent 5992b044
...@@ -30,6 +30,7 @@ ...@@ -30,6 +30,7 @@
#include <linux/of_platform.h> #include <linux/of_platform.h>
#include <linux/pci.h> #include <linux/pci.h>
#include <linux/phy/phy.h> #include <linux/phy/phy.h>
#include <linux/pinctrl/consumer.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/reset.h> #include <linux/reset.h>
#include <linux/sizes.h> #include <linux/sizes.h>
...@@ -2853,6 +2854,7 @@ static int __maybe_unused tegra_pcie_pm_suspend(struct device *dev) ...@@ -2853,6 +2854,7 @@ static int __maybe_unused tegra_pcie_pm_suspend(struct device *dev)
if (IS_ENABLED(CONFIG_PCI_MSI)) if (IS_ENABLED(CONFIG_PCI_MSI))
tegra_pcie_disable_msi(pcie); tegra_pcie_disable_msi(pcie);
pinctrl_pm_select_idle_state(dev);
tegra_pcie_power_off(pcie); tegra_pcie_power_off(pcie);
return 0; return 0;
...@@ -2868,6 +2870,13 @@ static int __maybe_unused tegra_pcie_pm_resume(struct device *dev) ...@@ -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); dev_err(dev, "tegra pcie power on fail: %d\n", err);
return 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_enable_controller(pcie);
tegra_pcie_setup_translations(pcie); tegra_pcie_setup_translations(pcie);
...@@ -2877,7 +2886,7 @@ static int __maybe_unused tegra_pcie_pm_resume(struct device *dev) ...@@ -2877,7 +2886,7 @@ static int __maybe_unused tegra_pcie_pm_resume(struct device *dev)
err = clk_prepare_enable(pcie->pex_clk); err = clk_prepare_enable(pcie->pex_clk);
if (err) { if (err) {
dev_err(dev, "failed to enable PEX clock: %d\n", err); dev_err(dev, "failed to enable PEX clock: %d\n", err);
goto poweroff; goto pex_dpd_enable;
} }
reset_control_deassert(pcie->pex_rst); reset_control_deassert(pcie->pex_rst);
...@@ -2898,6 +2907,8 @@ static int __maybe_unused tegra_pcie_pm_resume(struct device *dev) ...@@ -2898,6 +2907,8 @@ static int __maybe_unused tegra_pcie_pm_resume(struct device *dev)
disable_pex_clk: disable_pex_clk:
reset_control_assert(pcie->pex_rst); reset_control_assert(pcie->pex_rst);
clk_disable_unprepare(pcie->pex_clk); clk_disable_unprepare(pcie->pex_clk);
pex_dpd_enable:
pinctrl_pm_select_idle_state(dev);
poweroff: poweroff:
tegra_pcie_power_off(pcie); tegra_pcie_power_off(pcie);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment