197 lines
7 KiB
Text
197 lines
7 KiB
Text
NVIDIA Tegra Power Management Controller (PMC)
|
|
|
|
== Power Management Controller Node ==
|
|
|
|
The PMC block interacts with an external Power Management Unit. The PMC
|
|
mostly controls the entry and exit of the system from different sleep
|
|
modes. It provides power-gating controllers for SoC and CPU power-islands.
|
|
|
|
Required properties:
|
|
- name : Should be pmc
|
|
- compatible : Should contain one of the following:
|
|
For Tegra20 must contain "nvidia,tegra20-pmc".
|
|
For Tegra30 must contain "nvidia,tegra30-pmc".
|
|
For Tegra114 must contain "nvidia,tegra114-pmc"
|
|
For Tegra124 must contain "nvidia,tegra124-pmc"
|
|
For Tegra132 must contain "nvidia,tegra124-pmc"
|
|
For Tegra210 must contain "nvidia,tegra210-pmc"
|
|
- reg : Offset and length of the register set for the device
|
|
- clocks : Must contain an entry for each entry in clock-names.
|
|
See ../clocks/clock-bindings.txt for details.
|
|
- clock-names : Must include the following entries:
|
|
"pclk" (The Tegra clock of that name),
|
|
"clk32k_in" (The 32KHz clock input to Tegra).
|
|
|
|
Optional properties:
|
|
- nvidia,invert-interrupt : If present, inverts the PMU interrupt signal.
|
|
The PMU is an external Power Management Unit, whose interrupt output
|
|
signal is fed into the PMC. This signal is optionally inverted, and then
|
|
fed into the ARM GIC. The PMC is not involved in the detection or
|
|
handling of this interrupt signal, merely its inversion.
|
|
- nvidia,suspend-mode : The suspend mode that the platform should use.
|
|
Valid values are 0, 1 and 2:
|
|
0 (LP0): CPU + Core voltage off and DRAM in self-refresh
|
|
1 (LP1): CPU voltage off and DRAM in self-refresh
|
|
2 (LP2): CPU voltage off
|
|
- nvidia,core-power-req-active-high : Boolean, core power request active-high
|
|
- nvidia,sys-clock-req-active-high : Boolean, system clock request active-high
|
|
- nvidia,combined-power-req : Boolean, combined power request for CPU & Core
|
|
- nvidia,cpu-pwr-good-en : Boolean, CPU power good signal (from PMIC to PMC)
|
|
is enabled.
|
|
|
|
Required properties when nvidia,suspend-mode is specified:
|
|
- nvidia,cpu-pwr-good-time : CPU power good time in uS.
|
|
- nvidia,cpu-pwr-off-time : CPU power off time in uS.
|
|
- nvidia,core-pwr-good-time : <Oscillator-stable-time Power-stable-time>
|
|
Core power good time in uS.
|
|
- nvidia,core-pwr-off-time : Core power off time in uS.
|
|
|
|
Required properties when nvidia,suspend-mode=<0>:
|
|
- nvidia,lp0-vec : <start length> Starting address and length of LP0 vector
|
|
The LP0 vector contains the warm boot code that is executed by AVP when
|
|
resuming from the LP0 state. The AVP (Audio-Video Processor) is an ARM7
|
|
processor and always being the first boot processor when chip is power on
|
|
or resume from deep sleep mode. When the system is resumed from the deep
|
|
sleep mode, the warm boot code will restore some PLLs, clocks and then
|
|
bring up CPU0 for resuming the system.
|
|
|
|
Hardware-triggered thermal reset:
|
|
On Tegra30, Tegra114 and Tegra124, if the 'i2c-thermtrip' subnode exists,
|
|
hardware-triggered thermal reset will be enabled.
|
|
|
|
Required properties for hardware-triggered thermal reset (inside 'i2c-thermtrip'):
|
|
- nvidia,i2c-controller-id : ID of I2C controller to send poweroff command to. Valid values are
|
|
described in section 9.2.148 "APBDEV_PMC_SCRATCH53_0" of the
|
|
Tegra K1 Technical Reference Manual.
|
|
- nvidia,bus-addr : Bus address of the PMU on the I2C bus
|
|
- nvidia,reg-addr : I2C register address to write poweroff command to
|
|
- nvidia,reg-data : Poweroff command to write to PMU
|
|
|
|
Optional properties for hardware-triggered thermal reset (inside 'i2c-thermtrip'):
|
|
- nvidia,pinmux-id : Pinmux used by the hardware when issuing poweroff command.
|
|
Defaults to 0. Valid values are described in section 12.5.2
|
|
"Pinmux Support" of the Tegra4 Technical Reference Manual.
|
|
|
|
Optional nodes:
|
|
- powergates : This node contains a hierarchy of power domain nodes, which
|
|
should match the powergates on the Tegra SoC. See "Powergate
|
|
Nodes" below.
|
|
|
|
Example:
|
|
|
|
/ SoC dts including file
|
|
pmc@7000f400 {
|
|
compatible = "nvidia,tegra20-pmc";
|
|
reg = <0x7000e400 0x400>;
|
|
clocks = <&tegra_car 110>, <&clk32k_in>;
|
|
clock-names = "pclk", "clk32k_in";
|
|
nvidia,invert-interrupt;
|
|
nvidia,suspend-mode = <1>;
|
|
nvidia,cpu-pwr-good-time = <2000>;
|
|
nvidia,cpu-pwr-off-time = <100>;
|
|
nvidia,core-pwr-good-time = <3845 3845>;
|
|
nvidia,core-pwr-off-time = <458>;
|
|
nvidia,core-power-req-active-high;
|
|
nvidia,sys-clock-req-active-high;
|
|
nvidia,lp0-vec = <0xbdffd000 0x2000>;
|
|
};
|
|
|
|
/ Tegra board dts file
|
|
{
|
|
...
|
|
pmc@7000f400 {
|
|
i2c-thermtrip {
|
|
nvidia,i2c-controller-id = <4>;
|
|
nvidia,bus-addr = <0x40>;
|
|
nvidia,reg-addr = <0x36>;
|
|
nvidia,reg-data = <0x2>;
|
|
};
|
|
};
|
|
...
|
|
clocks {
|
|
compatible = "simple-bus";
|
|
#address-cells = <1>;
|
|
#size-cells = <0>;
|
|
|
|
clk32k_in: clock {
|
|
compatible = "fixed-clock";
|
|
reg=<0>;
|
|
#clock-cells = <0>;
|
|
clock-frequency = <32768>;
|
|
};
|
|
};
|
|
...
|
|
};
|
|
|
|
|
|
== Powergate Nodes ==
|
|
|
|
Each of the powergate nodes represents a power-domain on the Tegra SoC
|
|
that can be power-gated by the Tegra PMC. The name of the powergate node
|
|
should be one of the below. Note that not every powergate is applicable
|
|
to all Tegra devices and the following list shows which powergates are
|
|
applicable to which devices. Please refer to the Tegra TRM for more
|
|
details on the various powergates.
|
|
|
|
Name Description Devices Applicable
|
|
3d 3D Graphics Tegra20/114/124/210
|
|
3d0 3D Graphics 0 Tegra30
|
|
3d1 3D Graphics 1 Tegra30
|
|
aud Audio Tegra210
|
|
dfd Debug Tegra210
|
|
dis Display A Tegra114/124/210
|
|
disb Display B Tegra114/124/210
|
|
heg 2D Graphics Tegra30/114/124/210
|
|
iram Internal RAM Tegra124/210
|
|
mpe MPEG Encode All
|
|
nvdec NVIDIA Video Decode Engine Tegra210
|
|
nvjpg NVIDIA JPEG Engine Tegra210
|
|
pcie PCIE Tegra20/30/124/210
|
|
sata SATA Tegra30/124/210
|
|
sor Display interfaces Tegra124/210
|
|
ve2 Video Encode Engine 2 Tegra210
|
|
venc Video Encode Engine All
|
|
vdec Video Decode Engine Tegra20/30/114/124
|
|
vic Video Imaging Compositor Tegra124/210
|
|
xusba USB Partition A Tegra114/124/210
|
|
xusbb USB Partition B Tegra114/124/210
|
|
xusbc USB Partition C Tegra114/124/210
|
|
|
|
Required properties:
|
|
- clocks: Must contain an entry for each clock required by the PMC for
|
|
controlling a power-gate. See ../clocks/clock-bindings.txt for details.
|
|
- resets: Must contain an entry for each reset required by the PMC for
|
|
controlling a power-gate. See ../reset/reset.txt for details.
|
|
- #power-domain-cells: Must be 0.
|
|
|
|
Example:
|
|
|
|
pmc: pmc@7000e400 {
|
|
compatible = "nvidia,tegra210-pmc";
|
|
reg = <0x0 0x7000e400 0x0 0x400>;
|
|
clocks = <&tegra_car TEGRA210_CLK_PCLK>, <&clk32k_in>;
|
|
clock-names = "pclk", "clk32k_in";
|
|
|
|
powergates {
|
|
pd_audio: aud {
|
|
clocks = <&tegra_car TEGRA210_CLK_APE>,
|
|
<&tegra_car TEGRA210_CLK_APB2APE>;
|
|
resets = <&tegra_car 198>;
|
|
#power-domain-cells = <0>;
|
|
};
|
|
};
|
|
};
|
|
|
|
|
|
== Powergate Clients ==
|
|
|
|
Hardware blocks belonging to a power domain should contain a "power-domains"
|
|
property that is a phandle pointing to the corresponding powergate node.
|
|
|
|
Example:
|
|
|
|
adma: adma@702e2000 {
|
|
...
|
|
power-domains = <&pd_audio>;
|
|
...
|
|
};
|