| NVIDIA Tegra Power Management Controller (PMC) |
| |
| 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 "nvidia,tegra<chip>-pmc". |
| - reg : Offset and length of the register set for the device |
| - clocks : Must contain an entry for each entry in clock-names. |
| - 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. |
| |
| 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 |
| { |
| ... |
| clocks { |
| compatible = "simple-bus"; |
| #address-cells = <1>; |
| #size-cells = <0>; |
| |
| clk32k_in: clock { |
| compatible = "fixed-clock"; |
| reg=<0>; |
| #clock-cells = <0>; |
| clock-frequency = <32768>; |
| }; |
| }; |
| ... |
| }; |