| # SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) |
| %YAML 1.2 |
| --- |
| $id: http://devicetree.org/schemas/soc/ti/wkup-m3-ipc.yaml# |
| $schema: http://devicetree.org/meta-schemas/core.yaml# |
| |
| title: Wakeup M3 IPC device |
| |
| maintainers: |
| - Dave Gerlach <d-gerlach@ti.com> |
| - Drew Fustini <dfustini@baylibre.com> |
| |
| description: |+ |
| The TI AM33xx and AM43xx family of devices use a small Cortex M3 co-processor |
| (commonly referred to as Wakeup M3 or CM3) to help with various low power tasks |
| that cannot be controlled from the MPU, like suspend/resume and certain deep |
| C-states for CPU Idle. Once the wkup_m3_ipc driver uses the wkup_m3_rproc driver |
| to boot the wkup_m3, it handles communication with the CM3 using IPC registers |
| present in the SoC's control module and a mailbox. The wkup_m3_ipc exposes an |
| API to allow the SoC PM code to execute specific PM tasks. |
| |
| Wkup M3 Device Node |
| ==================== |
| A wkup_m3_ipc device node is used to represent the IPC registers within an |
| SoC. |
| |
| Support for VTT Toggle with GPIO pin |
| ==================================== |
| On some boards like the AM335x EVM-SK and the AM437x GP EVM, a GPIO pin is |
| connected to the enable pin on the DDR VTT regulator. This allows the |
| regulator to be disabled upon suspend and enabled upon resume. Please note |
| that the GPIO pin must be part of the GPIO0 module as only this GPIO module |
| is in the wakeup power domain. |
| |
| Support for IO Isolation |
| ======================== |
| On AM437x SoCs, certain pins can be forced into an alternate state when IO |
| isolation is activated. Those pins have pad control registers prefixed by |
| 'CTRL_CONF_' that contain DS0 (e.g. deep sleep) configuration bits that can |
| override the pin's existing bias (pull-up/pull-down) and value (high/low) when |
| IO isolation is active. |
| |
| Support for I2C PMIC Voltage Scaling |
| ==================================== |
| It is possible to pass the name of a binary file to load into the CM3 memory. |
| The binary data is the I2C sequences for the CM3 to send out to the PMIC |
| during low power mode entry. |
| |
| properties: |
| compatible: |
| enum: |
| - ti,am3352-wkup-m3-ipc # for AM33xx SoCs |
| - ti,am4372-wkup-m3-ipc # for AM43xx SoCs |
| |
| reg: |
| description: |
| The IPC register address space to communicate with the Wakeup M3 processor |
| maxItems: 1 |
| |
| interrupts: |
| description: wkup_m3 interrupt that signals the MPU |
| maxItems: 1 |
| |
| ti,rproc: |
| $ref: /schemas/types.yaml#/definitions/phandle |
| description: |
| phandle to the wkup_m3 rproc node so the IPC driver can boot it |
| |
| mboxes: |
| description: |
| phandles used by IPC framework to get correct mbox |
| channel for communication. Must point to appropriate |
| mbox_wkupm3 child node. |
| maxItems: 1 |
| |
| firmware-name: |
| description: |
| Name of binary file with I2C sequences for PMIC voltage scaling |
| |
| ti,vtt-gpio-pin: |
| $ref: /schemas/types.yaml#/definitions/uint32 |
| description: GPIO pin connected to enable pin on VTT regulator |
| |
| ti,set-io-isolation: |
| type: boolean |
| description: |
| If this property is present, then the wkup_m3_ipc driver will instruct |
| the CM3 firmware to activate IO isolation when suspending to deep sleep. |
| This can be leveraged by a board design to put other devices on the board |
| into a low power state. |
| |
| allOf: |
| - if: |
| properties: |
| compatible: |
| not: |
| contains: |
| const: ti,am4372-wkup-m3-ipc |
| then: |
| properties: |
| ti,set-io-isolation: false |
| |
| required: |
| - compatible |
| - reg |
| - interrupts |
| - ti,rproc |
| - mboxes |
| |
| additionalProperties: false |
| |
| examples: |
| - | |
| /* Example for AM335x SoC */ |
| soc { |
| #address-cells = <1>; |
| #size-cells = <1>; |
| |
| am335x_mailbox: mailbox { |
| #mbox-cells = <1>; |
| }; |
| |
| wkup_m3_ipc@1324 { |
| compatible = "ti,am3352-wkup-m3-ipc"; |
| reg = <0x1324 0x24>; |
| interrupts = <78>; |
| ti,rproc = <&wkup_m3>; |
| mboxes = <&am335x_mailbox &mbox_wkupm3>; |
| ti,vtt-gpio-pin = <7>; |
| firmware-name = "am335x-evm-scale-data.bin"; |
| }; |
| }; |
| |
| - | |
| /* |
| * Example for AM473x SoC: |
| * On the AM437x-GP-EVM board, gpio5_7 is wired to enable pin of the DDR VTT |
| * regulator. The 'ddr_vtt_toggle_default' pinmux node configures gpio5_7 |
| * for pull-up during normal system operation. However, the DS0 (deep sleep) |
| * state of the pin is configured for pull-down and thus the VTT regulator |
| * will be disabled to save power when IO isolation is active. Note that |
| * this method is an alternative to using the 'ti,vtt-gpio-pin' property. |
| */ |
| #include <dt-bindings/pinctrl/am43xx.h> |
| soc { |
| #address-cells = <1>; |
| #size-cells = <1>; |
| |
| am437x_mailbox: mailbox { |
| #mbox-cells = <1>; |
| }; |
| |
| am43xx_pinmux { |
| pinctrl-names = "default"; |
| pinctrl-0 = <&ddr3_vtt_toggle_default>; |
| |
| ddr3_vtt_toggle_default: ddr_vtt_toggle_default { |
| pinctrl-single,pins = < |
| 0x25C (DS0_PULL_UP_DOWN_EN | PIN_OUTPUT_PULLUP | DS0_FORCE_OFF_MODE | MUX_MODE7) |
| >; |
| }; |
| }; |
| |
| wkup_m3_ipc@1324 { |
| compatible = "ti,am4372-wkup-m3-ipc"; |
| reg = <0x1324 0x24>; |
| interrupts = <78>; |
| ti,rproc = <&wkup_m3>; |
| mboxes = <&am437x_mailbox &mbox_wkupm3>; |
| ti,set-io-isolation; |
| firmware-name = "am43x-evm-scale-data.bin"; |
| }; |
| }; |
| |
| ... |