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

Commit 405bcfff authored by Arnd Bergmann's avatar Arnd Bergmann
Browse files

Merge tag 'qcom-drivers-for-5.1' of...

Merge tag 'qcom-drivers-for-5.1' of git://git.kernel.org/pub/scm/linux/kernel/git/agross/linux into arm/drivers

Qualcomm ARM Based Driver Updates for v5.1

* Add Qualcomm RPMh power domain driver and related changes
* Fix issues with sleep/wake sets and batch API in RPMh
* Update MAINTAINERS Qualcomm entry
* Fixup RMTFS-mem sysfs and uevents
* Fix error handling in GSBI
* Add SMD-RPM compatible entry for SDM660

* tag 'qcom-drivers-for-5.1' of git://git.kernel.org/pub/scm/linux/kernel/git/agross/linux

:
  soc: qcom: smd-rpm: Add sdm660 compatible
  soc: qcom: gsbi: Fix error handling in gsbi_probe()
  soc: qcom: rpmh: Avoid accessing freed memory from batch API
  drivers: qcom: rpmh: avoid sending sleep/wake sets immediately
  soc: qcom: rmtfs-mem: Make sysfs attributes world-readable
  soc: qcom: rmtfs-mem: Add class to enable uevents
  soc: qcom: update config dependencies for QCOM_RPMPD
  soc: qcom: rpmpd: Drop family A RPM dependency
  MAINTAINERS: update list of qcom drivers
  soc: qcom: rpmhpd: Mark mx as a parent for cx
  soc: qcom: rpmhpd: Add RPMh power domain driver
  soc: qcom: rpmpd: Add support for get/set performance state
  soc: qcom: rpmpd: Add a Power domain driver to model corners
  dt-bindings: power: Add qcom rpm power domain driver bindings
  OPP: Add support for parsing the 'opp-level' property
  dt-bindings: opp: Introduce opp-level bindings

Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
parents dea73a34 4e2256d3
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -129,6 +129,9 @@ Optional properties:
- opp-microamp-<name>: Named opp-microamp property. Similar to
  opp-microvolt-<name> property, but for microamp instead.

- opp-level: A value representing the performance level of the device,
  expressed as a 32-bit integer.

- clock-latency-ns: Specifies the maximum possible transition latency (in
  nanoseconds) for switching to this OPP from any other OPP.

+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>;
		};
	};
+1 −0
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ resources.
		    "qcom,rpm-msm8916"
		    "qcom,rpm-msm8974"
		    "qcom,rpm-msm8998"
		    "qcom,rpm-sdm660"
		    "qcom,rpm-qcs404"

- qcom,smd-channels:
+25 −7
Original line number Diff line number Diff line
@@ -1948,19 +1948,37 @@ M: David Brown <david.brown@linaro.org>
L:	linux-arm-msm@vger.kernel.org
S:	Maintained
F:	Documentation/devicetree/bindings/soc/qcom/
F:	Documentation/devicetree/bindings/*/qcom*
F:	arch/arm/boot/dts/qcom-*.dts
F:	arch/arm/boot/dts/qcom-*.dtsi
F:	arch/arm/mach-qcom/
F:	arch/arm64/boot/dts/qcom/*
F:	arch/arm64/boot/dts/qcom/
F:	drivers/*/qcom/
F:	drivers/*/qcom*
F:	drivers/*/*/qcom/
F:	drivers/*/*/qcom*
F:	drivers/*/pm8???-*
F:	drivers/bluetooth/btqcomsmd.c
F:	drivers/clocksource/timer-qcom.c
F:	drivers/extcon/extcon-qcom*
F:	drivers/iommu/msm*
F:	drivers/i2c/busses/i2c-qup.c
F:	drivers/clk/qcom/
F:	drivers/dma/qcom/
F:	drivers/soc/qcom/
F:	drivers/i2c/busses/i2c-qcom-geni.c
F:	drivers/mfd/ssbi.c
F:	drivers/mmc/host/mmci_qcom*
F:	drivers/mmc/host/sdhci_msm.c
F:	drivers/pci/controller/dwc/pcie-qcom.c
F:	drivers/phy/qualcomm/
F:	drivers/power/*/msm*
F:	drivers/reset/reset-qcom-*
F:	drivers/scsi/ufs/ufs-qcom.*
F:	drivers/spi/spi-qup.c
F:	drivers/spi/spi-geni-qcom.c
F:	drivers/spi/spi-qcom-qspi.c
F:	drivers/tty/serial/msm_serial.c
F:	drivers/*/pm8???-*
F:	drivers/mfd/ssbi.c
F:	drivers/firmware/qcom_scm*
F:	drivers/usb/dwc3/dwc3-qcom.c
F:	include/dt-bindings/*/qcom*
F:	include/linux/*/qcom*
T:	git git://git.kernel.org/pub/scm/linux/kernel/git/agross/linux.git

ARM/RADISYS ENP2611 MACHINE SUPPORT
+18 −0
Original line number Diff line number Diff line
@@ -130,6 +130,24 @@ unsigned long dev_pm_opp_get_freq(struct dev_pm_opp *opp)
}
EXPORT_SYMBOL_GPL(dev_pm_opp_get_freq);

/**
 * dev_pm_opp_get_level() - Gets the level corresponding to an available opp
 * @opp:	opp for which level value has to be returned for
 *
 * Return: level read from device tree corresponding to the opp, else
 * return 0.
 */
unsigned int dev_pm_opp_get_level(struct dev_pm_opp *opp)
{
	if (IS_ERR_OR_NULL(opp) || !opp->available) {
		pr_err("%s: Invalid parameters\n", __func__);
		return 0;
	}

	return opp->level;
}
EXPORT_SYMBOL_GPL(dev_pm_opp_get_level);

/**
 * dev_pm_opp_is_turbo() - Returns if opp is turbo OPP or not
 * @opp: opp for which turbo mode is being verified
Loading