wkup_m3_ipc: Add support for IO Isolation
[rpmsg/hwspinlock.git] / Documentation / devicetree / bindings / soc / ti / wkup_m3_ipc.txt
1 Wakeup M3 IPC Driver
2 =====================
4 The TI AM33xx and AM43xx family of devices use a small Cortex M3 co-processor
5 (commonly referred to as Wakeup M3 or CM3) to help with various low power tasks
6 that cannot be controlled from the MPU, like suspend/resume and certain deep
7 C-states for CPU Idle. Once the wkup_m3_ipc driver uses the wkup_m3_rproc driver
8 to boot the wkup_m3, it handles communication with the CM3 using IPC registers
9 present in the SoC's control module and a mailbox. The wkup_m3_ipc exposes an
10 API to allow the SoC PM code to execute specific PM tasks.
12 Wkup M3 Device Node:
13 ====================
14 A wkup_m3_ipc device node is used to represent the IPC registers within an
15 SoC.
17 Required properties:
18 --------------------
19 - compatible:           Should be,
20                                 "ti,am3352-wkup-m3-ipc" for AM33xx SoCs
21                                 "ti,am4372-wkup-m3-ipc" for AM43xx SoCs
22 - reg:                  Contains the IPC register address space to communicate
23                         with the Wakeup M3 processor
24 - interrupts:           Contains the interrupt information for the wkup_m3
25                         interrupt that signals the MPU.
26 - ti,rproc:             phandle to the wkup_m3 rproc node so the IPC driver
27                         can boot it.
28 - mboxes:               phandles used by IPC framework to get correct mbox
29                         channel for communication. Must point to appropriate
30                         mbox_wkupm3 child node.
32 Example:
33 --------
34 /* AM33xx */
35         l4_wkup: l4_wkup@44c00000 {
36                 ...
38                 scm: scm@210000 {
39                         compatible = "ti,am3-scm", "simple-bus";
40                         reg = <0x210000 0x2000>;
41                         #address-cells = <1>;
42                         #size-cells = <1>;
43                         ranges = <0 0x210000 0x2000>;
45                         ...
47                         wkup_m3_ipc: wkup_m3_ipc@1324 {
48                                 compatible = "ti,am3352-wkup-m3-ipc";
49                                 reg = <0x1324 0x24>;
50                                 interrupts = <78>;
51                                 ti,rproc = <&wkup_m3>;
52                                 mboxes = <&mailbox &mbox_wkupm3>;
53                         };
55                         ...
56                 };
57         };
59 Support for VTT Toggle
60 ==================================
61 In order to enable the support for VTT toggle during Suspend/Resume
62 sequence needed by some boards (like AM335x EVM-SK & AM437x GP EVM),
63 the below DT properties are required. It is possible to toggle VTT
64 using one of two methods depending on the SoC being used, either
65 GPIO0 toggle (AM335x and AM437x), or any GPIO with DS_PAD_CONFIG
66 bits in the control module (AM437x only).
68 VTT Toggle using GPIO0
69 ----------------------------------
70 Supported by: AM335x and AM437x
71 Used on: AM335x EVM-SK
73 Optional properties:
74 - ti,needs-vtt-toggle:  Indicates that the boards requires VTT toggling
75                         during suspend/resume.
76 - ti,vtt-gpio-pin:      Specifies the GPIO0 pin used for VTT toggle.
78 Important Note:
79 - Here it is assumed that VTT Toggle will be done using a pin on GPIO-0 Instance.
80   It will not work on any other GPIO using the above properties, regardless of
81   which part is being used.
83 Example:
84         wkup_m3_ipc: wkup_m3_ipc@1324 {
85                 compatible = "ti,am3352-wkup-m3-ipc";
86                 ...
87                 ...
88                 ti,needs-vtt-toggle;
89                 ti,vtt-gpio-pin = <7>;
90                 ...
91         };
93 VTT Toggle using any GPIO
94 ----------------------------------
95 Supported by: AM437x ONLY
96 Used on: AM437x GP EVM
98 Many of the pins on AM437x have the ability to configure both normal and
99 sleep states. Because of this it is possible to use any pin with a
100 corresponding CTRL_CONF_* register in the control module and the
101 DS_PAD_CONFIG bits to toggle the VTT regulator enable pin. The DS state of
102 the pin must be configured such that the pin disables the VTT regulator. The
103 normal state of the pin must be configured such that the VTT regulator is
104 enabled by the state alone. This is because the VTT regulator must be enabled
105 before context is restored to the controlling GPIO.
107 Optional properties:
108 - ti,set-io-isolation:  Indicates that the IO's should be placed into
109                         isolation and the DS_PAD_CONFIG values should be
110                         used during suspend.
112 Example:
114 On the AM437x GP EVM, the VTT enable line must be held low to disable VTT
115 regulator and held high to enable, so the following pinctrl entry is used.
116 The DS pull is enabled which uses a pull down by default and DS off mode is
117 used which outputs a low by default. For the normal state, a pull up is
118 specified so that the VTT enable line gets pulled high immediately after
119 the DS states are removed upon exit from DeepSleep0.
121         &am43xx_pinmux {
122                 pinctrl-names = "default";
123                 pinctrl-0 = <&ddr3_vtt_toggle_default>;
125                 ddr3_vtt_toggle_default: ddr_vtt_toggle_default {
126                 pinctrl-single,pins = <
127                         0x25C (DS0_PULL_UP_DOWN_EN | PIN_OUTPUT_PULLUP |
128                                DS0_FORCE_OFF_MODE | MUX_MODE7)>;
129                 };
130                 ...
131         };
133         wkup_m3_ipc: wkup_m3_ipc@1324 {
134                 compatible = "ti,am4372-wkup-m3-ipc";
135                 ...
136                 ...
137                 ti,set-io-isolation;
138                 ...
139         };