123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- RPMH RSC:
- ------------
- Resource Power Manager Hardened (RPMH) is the mechanism for communicating with
- the hardened resource accelerators on Qualcomm SoCs. Requests to the resources
- can be written to the Trigger Command Set (TCS) registers and using a (addr,
- val) pair and triggered. Messages in the TCS are then sent in sequence over an
- internal bus.
- The hardware block (Direct Resource Voter or DRV) is a part of the h/w entity
- (Resource State Coordinator a.k.a RSC) that can handle multiple sleep and
- active/wake resource requests. Multiple such DRVs can exist in a SoC and can
- be written to from Linux. The structure of each DRV follows the same template
- with a few variations that are captured by the properties here.
- A TCS may be triggered from Linux or triggered by the F/W after all the CPUs
- have powered off to facilitate idle power saving. TCS could be classified as -
- ACTIVE /* Triggered by Linux */
- SLEEP /* Triggered by F/W */
- WAKE /* Triggered by F/W */
- CONTROL /* Triggered by F/W */
- The order in which they are described in the DT, should match the hardware
- configuration.
- Requests can be made for the state of a resource, when the subsystem is active
- or idle. When all subsystems like Modem, GPU, CPU are idle, the resource state
- will be an aggregate of the sleep votes from each of those subsystems. Clients
- may request a sleep value for their shared resources in addition to the active
- mode requests.
- Properties:
- - compatible:
- Usage: required
- Value type: <string>
- Definition: Should be "qcom,rpmh-rsc".
- - reg:
- Usage: required
- Value type: <prop-encoded-array>
- Definition: The first register specifies the base address of the
- DRV(s). The number of DRVs in the dependent on the RSC.
- The tcs-offset specifies the start address of the
- TCS in the DRVs.
- - reg-names:
- Usage: required
- Value type: <string>
- Definition: Maps the register specified in the reg property. Must be
- "drv-0", "drv-1", "drv-2" etc and "tcs-offset". The
- - interrupts:
- Usage: required
- Value type: <prop-encoded-interrupt>
- Definition: The interrupt that trips when a message complete/response
- is received for this DRV from the accelerators.
- - qcom,drv-id:
- Usage: required
- Value type: <u32>
- Definition: The id of the DRV in the RSC block that will be used by
- this controller.
- - qcom,tcs-config:
- Usage: required
- Value type: <prop-encoded-array>
- Definition: The tuple defining the configuration of TCS.
- Must have 2 cells which describe each TCS type.
- <type number_of_tcs>.
- The order of the TCS must match the hardware
- configuration.
- - Cell #1 (TCS Type): TCS types to be specified -
- ACTIVE_TCS
- SLEEP_TCS
- WAKE_TCS
- CONTROL_TCS
- - Cell #2 (Number of TCS): <u32>
- - label:
- Usage: optional
- Value type: <string>
- Definition: Name for the RSC. The name would be used in trace logs.
- Drivers that want to use the RSC to communicate with RPMH must specify their
- bindings as child nodes of the RSC controllers they wish to communicate with.
- Example 1:
- For a TCS whose RSC base address is is 0x179C0000 and is at a DRV id of 2, the
- register offsets for DRV2 start at 0D00, the register calculations are like
- this -
- DRV0: 0x179C0000
- DRV2: 0x179C0000 + 0x10000 = 0x179D0000
- DRV2: 0x179C0000 + 0x10000 * 2 = 0x179E0000
- TCS-OFFSET: 0xD00
- apps_rsc: rsc@179c0000 {
- label = "apps_rsc";
- compatible = "qcom,rpmh-rsc";
- reg = <0x179c0000 0x10000>,
- <0x179d0000 0x10000>,
- <0x179e0000 0x10000>;
- reg-names = "drv-0", "drv-1", "drv-2";
- interrupts = <GIC_SPI 3 IRQ_TYPE_LEVEL_HIGH>,
- <GIC_SPI 4 IRQ_TYPE_LEVEL_HIGH>,
- <GIC_SPI 5 IRQ_TYPE_LEVEL_HIGH>;
- qcom,tcs-offset = <0xd00>;
- qcom,drv-id = <2>;
- qcom,tcs-config = <ACTIVE_TCS 2>,
- <SLEEP_TCS 3>,
- <WAKE_TCS 3>,
- <CONTROL_TCS 1>;
- };
- Example 2:
- For a TCS whose RSC base address is 0xAF20000 and is at DRV id of 0, the
- register offsets for DRV0 start at 01C00, the register calculations are like
- this -
- DRV0: 0xAF20000
- TCS-OFFSET: 0x1C00
- disp_rsc: rsc@af20000 {
- label = "disp_rsc";
- compatible = "qcom,rpmh-rsc";
- reg = <0xaf20000 0x10000>;
- reg-names = "drv-0";
- interrupts = <GIC_SPI 129 IRQ_TYPE_LEVEL_HIGH>;
- qcom,tcs-offset = <0x1c00>;
- qcom,drv-id = <0>;
- qcom,tcs-config = <ACTIVE_TCS 0>,
- <SLEEP_TCS 1>,
- <WAKE_TCS 1>,
- <CONTROL_TCS 0>;
- };
|