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

Commit c6e6eff4 authored by Rajendra Nayak's avatar Rajendra Nayak Committed by Andy Gross
Browse files

dt-bindings: power: Add qcom rpm power domain driver bindings



Add DT bindings to describe the rpm/rpmh power domains found on Qualcomm
Technologies, Inc. SoCs. These power domains communicate a performance
state to RPM/RPMh, which then translates it into corresponding voltage on a
PMIC rail.

Reviewed-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
Reviewed-by: default avatarStephen Boyd <swboyd@chromium.org>
Reviewed-by: default avatarRob Herring <robh@kernel.org>
Signed-off-by: default avatarRajendra Nayak <rnayak@codeaurora.org>
Signed-off-by: default avatarViresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: default avatarBjorn Andersson <bjorn.andersson@linaro.org>
Signed-off-by: default avatarAndy Gross <andy.gross@linaro.org>
parent 5b93ac54
Loading
Loading
Loading
Loading
+145 −0
Original line number Diff line number Diff line
Qualcomm RPM/RPMh Power domains

For RPM/RPMh Power domains, we communicate a performance state to RPM/RPMh
which then translates it into a corresponding voltage on a rail

Required Properties:
 - compatible: Should be one of the following
	* qcom,msm8996-rpmpd: RPM Power domain for the msm8996 family of SoC
	* qcom,sdm845-rpmhpd: RPMh Power domain for the sdm845 family of SoC
 - #power-domain-cells: number of cells in Power domain specifier
	must be 1.
 - operating-points-v2: Phandle to the OPP table for the Power domain.
	Refer to Documentation/devicetree/bindings/power/power_domain.txt
	and Documentation/devicetree/bindings/opp/opp.txt for more details

Refer to <dt-bindings/power/qcom-rpmpd.h> for the level values for
various OPPs for different platforms as well as Power domain indexes

Example: rpmh power domain controller and OPP table

#include <dt-bindings/power/qcom-rpmhpd.h>

opp-level values specified in the OPP tables for RPMh power domains
should use the RPMH_REGULATOR_LEVEL_* constants from
<dt-bindings/power/qcom-rpmhpd.h>

	rpmhpd: power-controller {
		compatible = "qcom,sdm845-rpmhpd";
		#power-domain-cells = <1>;
		operating-points-v2 = <&rpmhpd_opp_table>;

		rpmhpd_opp_table: opp-table {
			compatible = "operating-points-v2";

			rpmhpd_opp_ret: opp1 {
				opp-level = <RPMH_REGULATOR_LEVEL_RETENTION>;
			};

			rpmhpd_opp_min_svs: opp2 {
				opp-level = <RPMH_REGULATOR_LEVEL_MIN_SVS>;
			};

			rpmhpd_opp_low_svs: opp3 {
				opp-level = <RPMH_REGULATOR_LEVEL_LOW_SVS>;
			};

			rpmhpd_opp_svs: opp4 {
				opp-level = <RPMH_REGULATOR_LEVEL_SVS>;
			};

			rpmhpd_opp_svs_l1: opp5 {
				opp-level = <RPMH_REGULATOR_LEVEL_SVS_L1>;
			};

			rpmhpd_opp_nom: opp6 {
				opp-level = <RPMH_REGULATOR_LEVEL_NOM>;
			};

			rpmhpd_opp_nom_l1: opp7 {
				opp-level = <RPMH_REGULATOR_LEVEL_NOM_L1>;
			};

			rpmhpd_opp_nom_l2: opp8 {
				opp-level = <RPMH_REGULATOR_LEVEL_NOM_L2>;
			};

			rpmhpd_opp_turbo: opp9 {
				opp-level = <RPMH_REGULATOR_LEVEL_TURBO>;
			};

			rpmhpd_opp_turbo_l1: opp10 {
				opp-level = <RPMH_REGULATOR_LEVEL_TURBO_L1>;
			};
		};
	};

Example: rpm power domain controller and OPP table

	rpmpd: power-controller {
		compatible = "qcom,msm8996-rpmpd";
		#power-domain-cells = <1>;
		operating-points-v2 = <&rpmpd_opp_table>;

		rpmpd_opp_table: opp-table {
			compatible = "operating-points-v2";

			rpmpd_opp_low: opp1 {
				opp-level = <1>;
			};

			rpmpd_opp_ret: opp2 {
				opp-level = <2>;
			};

			rpmpd_opp_svs: opp3 {
				opp-level = <3>;
			};

			rpmpd_opp_normal: opp4 {
				opp-level = <4>;
			};

			rpmpd_opp_high: opp5 {
				opp-level = <5>;
			};

			rpmpd_opp_turbo: opp6 {
				opp-level = <6>;
			};
		};
	};

Example: Client/Consumer device using OPP table

	leaky-device0@12350000 {
		compatible = "foo,i-leak-current";
		reg = <0x12350000 0x1000>;
		power-domains = <&rpmhpd SDM845_MX>;
		operating-points-v2 = <&leaky_opp_table>;
	};


	leaky_opp_table: opp-table {
		compatible = "operating-points-v2";

		opp1 {
			opp-hz = /bits/ 64 <144000>;
			required-opps = <&rpmhpd_opp_low>;
		};

		opp2 {
			opp-hz = /bits/ 64 <400000>;
			required-opps = <&rpmhpd_opp_ret>;
		};

		opp3 {
			opp-hz = /bits/ 64 <20000000>;
			required-opps = <&rpmpd_opp_svs>;
		};

		opp4 {
			opp-hz = /bits/ 64 <25000000>;
			required-opps = <&rpmpd_opp_normal>;
		};
	};
+39 −0
Original line number Diff line number Diff line
/* SPDX-License-Identifier: GPL-2.0 */
/* Copyright (c) 2018, The Linux Foundation. All rights reserved. */

#ifndef _DT_BINDINGS_POWER_QCOM_RPMPD_H
#define _DT_BINDINGS_POWER_QCOM_RPMPD_H

/* SDM845 Power Domain Indexes */
#define SDM845_EBI	0
#define SDM845_MX	1
#define SDM845_MX_AO	2
#define SDM845_CX	3
#define SDM845_CX_AO	4
#define SDM845_LMX	5
#define SDM845_LCX	6
#define SDM845_GFX	7
#define SDM845_MSS	8

/* SDM845 Power Domain performance levels */
#define RPMH_REGULATOR_LEVEL_RETENTION	16
#define RPMH_REGULATOR_LEVEL_MIN_SVS	48
#define RPMH_REGULATOR_LEVEL_LOW_SVS	64
#define RPMH_REGULATOR_LEVEL_SVS	128
#define RPMH_REGULATOR_LEVEL_SVS_L1	192
#define RPMH_REGULATOR_LEVEL_NOM	256
#define RPMH_REGULATOR_LEVEL_NOM_L1	320
#define RPMH_REGULATOR_LEVEL_NOM_L2	336
#define RPMH_REGULATOR_LEVEL_TURBO	384
#define RPMH_REGULATOR_LEVEL_TURBO_L1	416

/* MSM8996 Power Domain Indexes */
#define MSM8996_VDDCX		0
#define MSM8996_VDDCX_AO	1
#define MSM8996_VDDCX_VFC	2
#define MSM8996_VDDMX		3
#define MSM8996_VDDMX_AO	4
#define MSM8996_VDDSSCX		5
#define MSM8996_VDDSSCX_VFC	6

#endif