Qualcomm Technologies, Inc. RPMh Regulators rpmh-regulator devices support PMIC regulator management via the VRM, ARC and XOB RPMh accelerators. The APPS processor communicates with these hardware blocks via an RSC using command packets. The VRM allows changing four parameters for a given regulator: enable state, output voltage, operating mode, and minimum headroom voltage. The ARC allows changing only a single parameter for a given regulator: its operating level. This operating level is fed into CPR which then decides upon a final explicit voltage for the regulator. The XOB allows changing only a single parameter for a given regulator: its enable state. ======================= Required Node Structure ======================= RPMh regulators must be described in two levels of device nodes. The first level describes the interface with RPMh (mailbox and resource). The second level describes properties of one regulator framework interface (of potentially many) for the regulator resource. ================================== First Level Nodes - RPMh Interface ================================== - compatible Usage: required Value type: Definition: Must be "qcom,rpmh-vrm-regulator", "qcom,rpmh-arc-regulator" or "qcom,rpmh-xob-regulator" depending upon the hardware type, VRM, ARC or XOB, of the RPMh managed regulator resource. - mboxes Usage: required Value type: Definition: RPMh mailbox phandle and channel indentifiers. The channel should always be 0. - qcom,resource-name Usage: required Value type: Definition: RPMh resource name which encodes the the specific instance of a given type of regulator (LDO, SMPS, VS, etc) within a particular PMIC found in the system. This name must match to one that is defined by the bootloader. - qcom,regulator-type Usage: required if qcom,supported-modes is specified or if qcom,init-mode is specified in any subnodes Value type: Definition: The physical type of the regulator including the PMIC family. This is used for mode control. Supported values: "pmic4-ldo", "pmic4-hfsmps", "pmic4-ftsmps", "pmic4-bob", "pmic5-ldo", "pmic5-hfsmps", "pmic5-ftsmps", and "pmic5-bob". - qcom,use-awake-state Usage: optional Value type: Definition: Boolean flag indicating that active set requests should be made using the awake state instead of the active-only state. This should be used for RSC's which do not have an AMC. - qcom,always-wait-for-ack Usage: optional Value type: Definition: Boolean flag which indicates that the application processor must wait for an ACK or a NACK from RPMh for every request sent for this regulator including those which are for a strictly lower power state. - -parent-supply Usage: optional Value type: Definition: phandle of the parent supply regulator of one of the regulators for this RPMh resource. The property name is defined by the value specified for the regulator-name property. - qcom,supported-modes Usage: optional; VRM regulators only Value type: Definition: A list of integers specifying the PMIC regulator modes supported by this regulator. Supported values are RPMH_REGULATOR_MODE_* (i.e. 0 to 4). Elements must be specified in order from lowest to highest. - qcom,mode-threshold-currents Usage: required if qcom,supported-modes is specified Value type: Definition: A list of integers specifying minimum allowed current in microamps for each of the modes listed in qcom,supported-modes. The first element should always be 0. Elements must be specified in order from lowest to highest. - qcom,send-defaults Usage: optional Value type: Definition: Boolean flag which indicates that the initial parameter values should be sent to RPMh before consumers make their own requests. If this flag is not specified, then initial parameters values will only be sent after some consumer makes a request. ========================================= Second Level Nodes - Regulator Interfaces ========================================= - regulator-name Usage: required Value type: Definition: Specifies the name for this RPMh regulator. - regulator-min-microvolt Usage: required Value type: Definition: For VRM resources, this is the minimum supported voltage in microvolts. For ARC resources, this is the minimum supported voltage level from RPMH_REGULATOR_LEVEL_*. - regulator-max-microvolt Usage: required Value type: Definition: For VRM resources, this is the maximum supported voltage in microvolts. For ARC resources, this is the maximum supported voltage level from RPMH_REGULATOR_LEVEL_*. - regulator-enable-ramp-delay Usage: optional Value type: Definition: For VRM and XOB resources, the time in microseconds to delay after enabling a regulator. - qcom,set Usage: required Value type: Definition: Specifies which sets that requests made with this regulator interface should be sent to. Regulator requests sent in the active set take effect immediately. Requests sent in the sleep set take effect when the Apps processor transitions into RPMh assisted power collapse. Supported values are one of RPMH_REGULATOR_SET_* (i.e. 1, 2, or 3). - qcom,init-enable Usage: optional; VRM and XOB regulators only Value type: Definition: Specifies the initial enable state to request for a VRM regulator. Supported values are 0 (regulator disabled) and 1 (regulator enabled). - qcom,init-voltage Usage: optional; VRM regulators only Value type: Definition: Specifies the initial voltage in microvolts to request for a VRM regulator. Supported values are 0 to 8191000. - qcom,init-mode Usage: optional; VRM regulators only Value type: Definition: Specifies the initial mode to request for a VRM regulator. Supported values are RPMH_REGULATOR_MODE_* (i.e. 0 to 4). - qcom,init-headroom-voltage Usage: optional; VRM regulators only Value type: Definition: Specifies the initial headroom voltage in microvolts to request for a VRM regulator. RPMh ensures that the parent of this regulator outputs a voltage high enough to satisfy the requested headroom. Supported values are 0 to 511000. - qcom,init-voltage-level Usage: optional; ARC regulators only Value type: Definition: Specifies the initial voltage level to request for an ARC regulator. Supported values are RPMH_REGULATOR_LEVEL_* (i.e. 1 to ~513). - qcom,min-dropout-voltage Usage: optional; VRM regulators only Value type: Definition: Specifies the minimum voltage in microvolts that the parent supply regulator must output above the output of this regulator. It is only meaningful if the property -parent-supply has been specified in the first level node. - qcom,min-dropout-voltage-level Usage: optional; ARC regulators only Value type: Definition: Specifies the minimum voltage level difference that the parent supply regulator must output above the output of this regulator. It is only meaningful if the property -parent-supply has been specified in the first level node. ======== Examples ======== rpmh-regulator-cxlvl { compatible = "qcom,rpmh-arc-regulator"; mboxes = <&apps_rsc 0>; qcom,resource-name = "cx.lvl"; qcom,send-defaults; pm8998_s9_level: regulator-s9-level { regulator-name = "pm8998_s9_level"; qcom,set = ; regulator-min-microvolt = ; regulator-max-microvolt = ; qcom,init-voltage-level = ; }; pm8998_s9_level_ao: regulator-s9-level-ao { regulator-name = "pm8998_s9_level_ao"; qcom,set = ; regulator-min-microvolt = ; regulator-max-microvolt = ; }; }; rpmh-regulator-smpa2 { compatible = "qcom,rpmh-vrm-regulator"; mboxes = <&apps_rsc 0>; qcom,resource-name = "smpa2"; qcom,regulator-type = "pmic4-smps"; qcom,supported-modes = ; qcom,mode-threshold-currents = <0 2000000>; pm8998_s2: regulator-s2 { regulator-name = "pm8998_s2"; qcom,set = ; regulator-min-microvolt = <1100000>; regulator-max-microvolt = <1200000>; regulator-enable-ramp-delay = <200>; qcom,init-mode = ; qcom,init-voltage = <1150000>; }; }; rpmh-regulator-ldoa3-disp { compatible = "qcom,rpmh-vrm-regulator"; mboxes = <&disp_rsc 0>; qcom,use-awake-state; qcom,resource-name = "ldoa3"; qcom,regulator-type = "pmic4-ldo"; qcom,supported-modes = ; qcom,mode-threshold-currents = <0 10000>; qcom,always-wait-for-ack; pm8998_l3_disp_ao: regulator-l3-ao { regulator-name = "pm8998_l3_disp_ao"; qcom,set = ; regulator-min-microvolt = <1000000>; regulator-max-microvolt = <1200000>; qcom,init-voltage = <1000000>; qcom,init-headroom-voltage = <60000>; }; pm8998_l3_disp_so: regulator-l3-so { regulator-name = "pm8998_l3_disp_so"; qcom,set = ; regulator-min-microvolt = <1000000>; regulator-max-microvolt = <1200000>; qcom,init-mode = ; qcom,init-voltage = <1000000>; qcom,init-enable = <0>; }; }; rpmh-regulator-ldoa4 { compatible = "qcom,rpmh-vrm-regulator"; mboxes = <&apps_rsc 0>; qcom,resource-name = "ldoa4"; qcom,regulator-type = "pmic4-ldo"; pm8998_l4-parent-supply = <&pm8998_s2>; pm8998_l4: regulator-l4 { regulator-name = "pm8998_l4"; qcom,set = ; regulator-min-microvolt = <1000000>; regulator-max-microvolt = <1000000>; qcom,init-voltage = <1000000>; }; }; rpmh-regulator-ldoc1 { compatible = "qcom,rpmh-xob-regulator"; mboxes = <&apps_rsc 0>; qcom,resource-name = "ldoc1"; pm8150l_l1: regulator-pm8150l-l1 { regulator-name = "pm8150l_l1"; qcom,set = ; regulator-min-microvolt = <1800000>; regulator-max-microvolt = <1800000>; }; };