Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2dff4177 authored by Scott Wood's avatar Scott Wood Committed by Kumar Gala
Browse files

powerpc: Document Freescale power management nodes, and the sleep property.

parent 8a0ca91e
Loading
Loading
Loading
Loading
+100 −42
Original line number Diff line number Diff line
@@ -77,10 +77,12 @@ Table of Contents
    3) OpenPIC Interrupt Controllers
    4) ISA Interrupt Controllers

  VIII - Specifying GPIO information for devices
  IX - Specifying GPIO information for devices
    1) gpios property
    2) gpio-controller nodes

  X - Specifying device power management information (sleep property)

  Appendix A - Sample SOC node for MPC8540


@@ -2422,8 +2424,8 @@ encodings listed below:
	2 =  high to low edge sensitive type enabled
	3 =  low to high edge sensitive type enabled

VIII - Specifying GPIO information for devices
==============================================
IX - Specifying GPIO information for devices
============================================

1) gpios property
-----------------
@@ -2471,6 +2473,37 @@ Example of two SOC GPIO banks defined as gpio-controller nodes:
		gpio-controller;
	};

X - Specifying Device Power Management Information (sleep property)
===================================================================

Devices on SOCs often have mechanisms for placing devices into low-power
states that are decoupled from the devices' own register blocks.  Sometimes,
this information is more complicated than a cell-index property can
reasonably describe.  Thus, each device controlled in such a manner
may contain a "sleep" property which describes these connections.

The sleep property consists of one or more sleep resources, each of
which consists of a phandle to a sleep controller, followed by a
controller-specific sleep specifier of zero or more cells.

The semantics of what type of low power modes are possible are defined
by the sleep controller.  Some examples of the types of low power modes
that may be supported are:

 - Dynamic: The device may be disabled or enabled at any time.
 - System Suspend: The device may request to be disabled or remain
   awake during system suspend, but will not be disabled until then.
 - Permanent: The device is disabled permanently (until the next hard
   reset).

Some devices may share a clock domain with each other, such that they should
only be suspended when none of the devices are in use.  Where reasonable,
such nodes should be placed on a virtual bus, where the bus has the sleep
property.  If the clock domain is shared among devices that cannot be
reasonably grouped in this manner, then create a virtual sleep controller
(similar to an interrupt nexus, except that defining a standardized
sleep-map should wait until its necessity is demonstrated).

Appendix A - Sample SOC node for MPC8540
========================================

@@ -2487,10 +2520,23 @@ not necessary as they are usually the same as the root node.
		reg = <e0000000 00003000>;
		bus-frequency = <0>;

		ethernet@24000 {
			#address-cells = <1>;
			#size-cells = <1>;
			device_type = "network";
			model = "TSEC";
			compatible = "gianfar", "simple-bus";
			reg = <24000 1000>;
			mac-address = [ 00 E0 0C 00 73 00 ];
			interrupts = <d 3 e 3 12 3>;
			interrupt-parent = <40000>;
			phy-handle = <2452000>;
			sleep = <&pmc 00000080>;
			ranges;

			mdio@24520 {
				reg = <24520 20>;
			device_type = "mdio";
			compatible = "gianfar";
				compatible = "fsl,gianfar-mdio";

				ethernet-phy@0 {
					linux,phandle = <2452000>
@@ -2515,19 +2561,7 @@ not necessary as they are usually the same as the root node.
					reg = <3>;
					device_type = "ethernet-phy";
				};

			};

		ethernet@24000 {
			#size-cells = <0>;
			device_type = "network";
			model = "TSEC";
			compatible = "gianfar";
			reg = <24000 1000>;
			mac-address = [ 00 E0 0C 00 73 00 ];
			interrupts = <d 3 e 3 12 3>;
			interrupt-parent = <40000>;
			phy-handle = <2452000>;
		};

		ethernet@25000 {
@@ -2541,6 +2575,7 @@ not necessary as they are usually the same as the root node.
			interrupts = <13 3 14 3 18 3>;
			interrupt-parent = <40000>;
			phy-handle = <2452001>;
			sleep = <&pmc 00000040>;
		};

		ethernet@26000 {
@@ -2554,8 +2589,16 @@ not necessary as they are usually the same as the root node.
			interrupts = <19 3>;
			interrupt-parent = <40000>;
			phy-handle = <2452002>;
			sleep = <&pmc 00000020>;
		};

		serial@4500 {
			#address-cells = <1>;
			#size-cells = <1>;
			compatible = "fsl,mpc8540-duart", "simple-bus";
			sleep = <&pmc 00000002>;
			ranges;

			serial@4500 {
				device_type = "serial";
				compatible = "ns16550";
@@ -2565,6 +2608,16 @@ not necessary as they are usually the same as the root node.
				interrupt-parent = <40000>;
			};

			serial@4600 {
				device_type = "serial";
				compatible = "ns16550";
				reg = <4600 100>;
				clock-frequency = <0>;
				interrupts = <1a 3>;
				interrupt-parent = <40000>;
			};
		};

		pic@40000 {
			linux,phandle = <40000>;
			interrupt-controller;
@@ -2581,6 +2634,11 @@ not necessary as they are usually the same as the root node.
			device_type = "i2c";
			compatible  = "fsl-i2c";
			dfsrr;
			sleep = <&pmc 00000004>;
		};

		pmc: power@e0070 {
			compatible = "fsl,mpc8540-pmc", "fsl,mpc8548-pmc";
			reg = <e0070 20>;
		};
	};
+63 −0
Original line number Diff line number Diff line
* Power Management Controller

Properties:
- compatible: "fsl,<chip>-pmc".

  "fsl,mpc8349-pmc" should be listed for any chip whose PMC is
  compatible.  "fsl,mpc8313-pmc" should also be listed for any chip
  whose PMC is compatible, and implies deep-sleep capability.

  "fsl,mpc8548-pmc" should be listed for any chip whose PMC is
  compatible.  "fsl,mpc8536-pmc" should also be listed for any chip
  whose PMC is compatible, and implies deep-sleep capability.

  "fsl,mpc8641d-pmc" should be listed for any chip whose PMC is
  compatible; all statements below that apply to "fsl,mpc8548-pmc" also
  apply to "fsl,mpc8641d-pmc".

  Compatibility does not include bit assigments in SCCR/PMCDR/DEVDISR; these
  bit assigments are indicated via the sleep specifier in each device's
  sleep property.

- reg: For devices compatible with "fsl,mpc8349-pmc", the first resource
  is the PMC block, and the second resource is the Clock Configuration
  block.

  For devices compatible with "fsl,mpc8548-pmc", the first resource
  is a 32-byte block beginning with DEVDISR.

- interrupts: For "fsl,mpc8349-pmc"-compatible devices, the first
  resource is the PMC block interrupt.

- fsl,mpc8313-wakeup-timer: For "fsl,mpc8313-pmc"-compatible devices,
  this is a phandle to an "fsl,gtm" node on which timer 4 can be used as
  a wakeup source from deep sleep.

Sleep specifiers:

  fsl,mpc8349-pmc: Sleep specifiers consist of one cell.  For each bit
  that is set in the cell, the corresponding bit in SCCR will be saved
  and cleared on suspend, and restored on resume.  This sleep controller
  supports disabling and resuming devices at any time.

  fsl,mpc8536-pmc: Sleep specifiers consist of three cells, the third of
  which will be ORed into PMCDR upon suspend, and cleared from PMCDR
  upon resume.  The first two cells are as described for fsl,mpc8578-pmc.
  This sleep controller only supports disabling devices during system
  sleep, or permanently.

  fsl,mpc8548-pmc: Sleep specifiers consist of one or two cells, the
  first of which will be ORed into DEVDISR (and the second into
  DEVDISR2, if present -- this cell should be zero or absent if the
  hardware does not have DEVDISR2) upon a request for permanent device
  disabling.  This sleep controller does not support configuring devices
  to disable during system sleep (unless supported by another compatible
  match), or dynamically.

Example:

	power@b00 {
		compatible = "fsl,mpc8313-pmc", "fsl,mpc8349-pmc";
		reg = <0xb00 0x100 0xa00 0x100>;
		interrupts = <80 8>;
	};