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

Commit 3c89adb0 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull power management updates from Rafael Wysocki:
 "These include a significant update of the generic power domains
  (genpd) and Operating Performance Points (OPP) frameworks, mostly
  related to the introduction of power domain performance levels,
  cpufreq updates (new driver for Qualcomm Kryo processors, updates of
  the existing drivers, some core fixes, schedutil governor
  improvements), PCI power management fixes, ACPI workaround for
  EC-based wakeup events handling on resume from suspend-to-idle, and
  major updates of the turbostat and pm-graph utilities.

  Specifics:

   - Introduce power domain performance levels into the the generic
     power domains (genpd) and Operating Performance Points (OPP)
     frameworks (Viresh Kumar, Rajendra Nayak, Dan Carpenter).

   - Fix two issues in the runtime PM framework related to the
     initialization and removal of devices using device links (Ulf
     Hansson).

   - Clean up the initialization of drivers for devices in PM domains
     (Ulf Hansson, Geert Uytterhoeven).

   - Fix a cpufreq core issue related to the policy sysfs interface
     causing CPU online to fail for CPUs sharing one cpufreq policy in
     some situations (Tao Wang).

   - Make it possible to use platform-specific suspend/resume hooks in
     the cpufreq-dt driver and make the Armada 37xx DVFS use that
     feature (Viresh Kumar, Miquel Raynal).

   - Optimize policy transition notifications in cpufreq (Viresh Kumar).

   - Improve the iowait boost mechanism in the schedutil cpufreq
     governor (Patrick Bellasi).

   - Improve the handling of deferred frequency updates in the schedutil
     cpufreq governor (Joel Fernandes, Dietmar Eggemann, Rafael Wysocki,
     Viresh Kumar).

   - Add a new cpufreq driver for Qualcomm Kryo (Ilia Lin).

   - Fix and clean up some cpufreq drivers (Colin Ian King, Dmitry
     Osipenko, Doug Smythies, Luc Van Oostenryck, Simon Horman, Viresh
     Kumar).

   - Fix the handling of PCI devices with the DPM_SMART_SUSPEND flag set
     and update stale comments in the PCI core PM code (Rafael Wysocki).

   - Work around an issue related to the handling of EC-based wakeup
     events in the ACPI PM core during resume from suspend-to-idle if
     the EC has been put into the low-power mode (Rafael Wysocki).

   - Improve the handling of wakeup source objects in the PM core (Doug
     Berger, Mahendran Ganesh, Rafael Wysocki).

   - Update the driver core to prevent deferred probe from breaking
     suspend/resume ordering (Feng Kan).

   - Clean up the PM core somewhat (Bjorn Helgaas, Ulf Hansson, Rafael
     Wysocki).

   - Make the core suspend/resume code and cpufreq support the RT patch
     (Sebastian Andrzej Siewior, Thomas Gleixner).

   - Consolidate the PM QoS handling in cpuidle governors (Rafael
     Wysocki).

   - Fix a possible crash in the hibernation core (Tetsuo Handa).

   - Update the rockchip-io Adaptive Voltage Scaling (AVS) driver (David
     Wu).

   - Update the turbostat utility (fixes, cleanups, new CPU IDs, new
     command line options, built-in "Low Power Idle" counters support,
     new POLL and POLL% columns) and add an entry for it to MAINTAINERS
     (Len Brown, Artem Bityutskiy, Chen Yu, Laura Abbott, Matt Turner,
     Prarit Bhargava, Srinivas Pandruvada).

   - Update the pm-graph to version 5.1 (Todd Brandt).

   - Update the intel_pstate_tracer utility (Doug Smythies)"

* tag 'pm-4.18-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm: (128 commits)
  tools/power turbostat: update version number
  tools/power turbostat: Add Node in output
  tools/power turbostat: add node information into turbostat calculations
  tools/power turbostat: remove num_ from cpu_topology struct
  tools/power turbostat: rename num_cores_per_pkg to num_cores_per_node
  tools/power turbostat: track thread ID in cpu_topology
  tools/power turbostat: Calculate additional node information for a package
  tools/power turbostat: Fix node and siblings lookup data
  tools/power turbostat: set max_num_cpus equal to the cpumask length
  tools/power turbostat: if --num_iterations, print for specific number of iterations
  tools/power turbostat: Add Cannon Lake support
  tools/power turbostat: delete duplicate #defines
  x86: msr-index.h: Correct SNB_C1/C3_AUTO_UNDEMOTE defines
  tools/power turbostat: Correct SNB_C1/C3_AUTO_UNDEMOTE defines
  tools/power turbostat: add POLL and POLL% column
  tools/power turbostat: Fix --hide Pk%pc10
  tools/power turbostat: Build-in "Low Power Idle" counters support
  tools/power turbostat: Don't make man pages executable
  tools/power turbostat: remove blank lines
  tools/power turbostat: a small C-states dump readability immprovement
  ...
parents 11e7c218 a24e16b1
Loading
Loading
Loading
Loading
+680 −0
Original line number Diff line number Diff line
Qualcomm Technologies, Inc. KRYO CPUFreq and OPP bindings
===================================

In Certain Qualcomm Technologies, Inc. SoCs like apq8096 and msm8996
that have KRYO processors, the CPU ferequencies subset and voltage value
of each OPP varies based on the silicon variant in use.
Qualcomm Technologies, Inc. Process Voltage Scaling Tables
defines the voltage and frequency value based on the msm-id in SMEM
and speedbin blown in the efuse combination.
The qcom-cpufreq-kryo driver reads the msm-id and efuse value from the SoC
to provide the OPP framework with required information (existing HW bitmap).
This is used to determine the voltage and frequency value for each OPP of
operating-points-v2 table when it is parsed by the OPP framework.

Required properties:
--------------------
In 'cpus' nodes:
- operating-points-v2: Phandle to the operating-points-v2 table to use.

In 'operating-points-v2' table:
- compatible: Should be
	- 'operating-points-v2-kryo-cpu' for apq8096 and msm8996.
- nvmem-cells: A phandle pointing to a nvmem-cells node representing the
		efuse registers that has information about the
		speedbin that is used to select the right frequency/voltage
		value pair.
		Please refer the for nvmem-cells
		bindings Documentation/devicetree/bindings/nvmem/nvmem.txt
		and also examples below.

In every OPP node:
- opp-supported-hw: A single 32 bit bitmap value, representing compatible HW.
		    Bitmap:
			0:	MSM8996 V3, speedbin 0
			1:	MSM8996 V3, speedbin 1
			2:	MSM8996 V3, speedbin 2
			3:	unused
			4:	MSM8996 SG, speedbin 0
			5:	MSM8996 SG, speedbin 1
			6:	MSM8996 SG, speedbin 2
			7-31:	unused

Example 1:
---------

	cpus {
		#address-cells = <2>;
		#size-cells = <0>;

		CPU0: cpu@0 {
			device_type = "cpu";
			compatible = "qcom,kryo";
			reg = <0x0 0x0>;
			enable-method = "psci";
			clocks = <&kryocc 0>;
			cpu-supply = <&pm8994_s11_saw>;
			operating-points-v2 = <&cluster0_opp>;
			#cooling-cells = <2>;
			next-level-cache = <&L2_0>;
			L2_0: l2-cache {
			      compatible = "cache";
			      cache-level = <2>;
			};
		};

		CPU1: cpu@1 {
			device_type = "cpu";
			compatible = "qcom,kryo";
			reg = <0x0 0x1>;
			enable-method = "psci";
			clocks = <&kryocc 0>;
			cpu-supply = <&pm8994_s11_saw>;
			operating-points-v2 = <&cluster0_opp>;
			#cooling-cells = <2>;
			next-level-cache = <&L2_0>;
		};

		CPU2: cpu@100 {
			device_type = "cpu";
			compatible = "qcom,kryo";
			reg = <0x0 0x100>;
			enable-method = "psci";
			clocks = <&kryocc 1>;
			cpu-supply = <&pm8994_s11_saw>;
			operating-points-v2 = <&cluster1_opp>;
			#cooling-cells = <2>;
			next-level-cache = <&L2_1>;
			L2_1: l2-cache {
			      compatible = "cache";
			      cache-level = <2>;
			};
		};

		CPU3: cpu@101 {
			device_type = "cpu";
			compatible = "qcom,kryo";
			reg = <0x0 0x101>;
			enable-method = "psci";
			clocks = <&kryocc 1>;
			cpu-supply = <&pm8994_s11_saw>;
			operating-points-v2 = <&cluster1_opp>;
			#cooling-cells = <2>;
			next-level-cache = <&L2_1>;
		};

		cpu-map {
			cluster0 {
				core0 {
					cpu = <&CPU0>;
				};

				core1 {
					cpu = <&CPU1>;
				};
			};

			cluster1 {
				core0 {
					cpu = <&CPU2>;
				};

				core1 {
					cpu = <&CPU3>;
				};
			};
		};
	};

	cluster0_opp: opp_table0 {
		compatible = "operating-points-v2-kryo-cpu";
		nvmem-cells = <&speedbin_efuse>;
		opp-shared;

		opp-307200000 {
			opp-hz = /bits/ 64 <307200000>;
			opp-microvolt = <905000 905000 1140000>;
			opp-supported-hw = <0x77>;
			clock-latency-ns = <200000>;
		};
		opp-384000000 {
			opp-hz = /bits/ 64 <384000000>;
			opp-microvolt = <905000 905000 1140000>;
			opp-supported-hw = <0x70>;
			clock-latency-ns = <200000>;
		};
		opp-422400000 {
			opp-hz = /bits/ 64 <422400000>;
			opp-microvolt = <905000 905000 1140000>;
			opp-supported-hw = <0x7>;
			clock-latency-ns = <200000>;
		};
		opp-460800000 {
			opp-hz = /bits/ 64 <460800000>;
			opp-microvolt = <905000 905000 1140000>;
			opp-supported-hw = <0x70>;
			clock-latency-ns = <200000>;
		};
		opp-480000000 {
			opp-hz = /bits/ 64 <480000000>;
			opp-microvolt = <905000 905000 1140000>;
			opp-supported-hw = <0x7>;
			clock-latency-ns = <200000>;
		};
		opp-537600000 {
			opp-hz = /bits/ 64 <537600000>;
			opp-microvolt = <905000 905000 1140000>;
			opp-supported-hw = <0x70>;
			clock-latency-ns = <200000>;
		};
		opp-556800000 {
			opp-hz = /bits/ 64 <556800000>;
			opp-microvolt = <905000 905000 1140000>;
			opp-supported-hw = <0x7>;
			clock-latency-ns = <200000>;
		};
		opp-614400000 {
			opp-hz = /bits/ 64 <614400000>;
			opp-microvolt = <905000 905000 1140000>;
			opp-supported-hw = <0x70>;
			clock-latency-ns = <200000>;
		};
		opp-652800000 {
			opp-hz = /bits/ 64 <652800000>;
			opp-microvolt = <905000 905000 1140000>;
			opp-supported-hw = <0x7>;
			clock-latency-ns = <200000>;
		};
		opp-691200000 {
			opp-hz = /bits/ 64 <691200000>;
			opp-microvolt = <905000 905000 1140000>;
			opp-supported-hw = <0x70>;
			clock-latency-ns = <200000>;
		};
		opp-729600000 {
			opp-hz = /bits/ 64 <729600000>;
			opp-microvolt = <905000 905000 1140000>;
			opp-supported-hw = <0x7>;
			clock-latency-ns = <200000>;
		};
		opp-768000000 {
			opp-hz = /bits/ 64 <768000000>;
			opp-microvolt = <905000 905000 1140000>;
			opp-supported-hw = <0x70>;
			clock-latency-ns = <200000>;
		};
		opp-844800000 {
			opp-hz = /bits/ 64 <844800000>;
			opp-microvolt = <905000 905000 1140000>;
			opp-supported-hw = <0x77>;
			clock-latency-ns = <200000>;
		};
		opp-902400000 {
			opp-hz = /bits/ 64 <902400000>;
			opp-microvolt = <905000 905000 1140000>;
			opp-supported-hw = <0x70>;
			clock-latency-ns = <200000>;
		};
		opp-960000000 {
			opp-hz = /bits/ 64 <960000000>;
			opp-microvolt = <905000 905000 1140000>;
			opp-supported-hw = <0x7>;
			clock-latency-ns = <200000>;
		};
		opp-979200000 {
			opp-hz = /bits/ 64 <979200000>;
			opp-microvolt = <905000 905000 1140000>;
			opp-supported-hw = <0x70>;
			clock-latency-ns = <200000>;
		};
		opp-1036800000 {
			opp-hz = /bits/ 64 <1036800000>;
			opp-microvolt = <905000 905000 1140000>;
			opp-supported-hw = <0x7>;
			clock-latency-ns = <200000>;
		};
		opp-1056000000 {
			opp-hz = /bits/ 64 <1056000000>;
			opp-microvolt = <905000 905000 1140000>;
			opp-supported-hw = <0x70>;
			clock-latency-ns = <200000>;
		};
		opp-1113600000 {
			opp-hz = /bits/ 64 <1113600000>;
			opp-microvolt = <905000 905000 1140000>;
			opp-supported-hw = <0x7>;
			clock-latency-ns = <200000>;
		};
		opp-1132800000 {
			opp-hz = /bits/ 64 <1132800000>;
			opp-microvolt = <905000 905000 1140000>;
			opp-supported-hw = <0x70>;
			clock-latency-ns = <200000>;
		};
		opp-1190400000 {
			opp-hz = /bits/ 64 <1190400000>;
			opp-microvolt = <905000 905000 1140000>;
			opp-supported-hw = <0x7>;
			clock-latency-ns = <200000>;
		};
		opp-1209600000 {
			opp-hz = /bits/ 64 <1209600000>;
			opp-microvolt = <905000 905000 1140000>;
			opp-supported-hw = <0x70>;
			clock-latency-ns = <200000>;
		};
		opp-1228800000 {
			opp-hz = /bits/ 64 <1228800000>;
			opp-microvolt = <905000 905000 1140000>;
			opp-supported-hw = <0x7>;
			clock-latency-ns = <200000>;
		};
		opp-1286400000 {
			opp-hz = /bits/ 64 <1286400000>;
			opp-microvolt = <1140000 905000 1140000>;
			opp-supported-hw = <0x70>;
			clock-latency-ns = <200000>;
		};
		opp-1324800000 {
			opp-hz = /bits/ 64 <1324800000>;
			opp-microvolt = <1140000 905000 1140000>;
			opp-supported-hw = <0x5>;
			clock-latency-ns = <200000>;
		};
		opp-1363200000 {
			opp-hz = /bits/ 64 <1363200000>;
			opp-microvolt = <1140000 905000 1140000>;
			opp-supported-hw = <0x72>;
			clock-latency-ns = <200000>;
		};
		opp-1401600000 {
			opp-hz = /bits/ 64 <1401600000>;
			opp-microvolt = <1140000 905000 1140000>;
			opp-supported-hw = <0x5>;
			clock-latency-ns = <200000>;
		};
		opp-1440000000 {
			opp-hz = /bits/ 64 <1440000000>;
			opp-microvolt = <1140000 905000 1140000>;
			opp-supported-hw = <0x70>;
			clock-latency-ns = <200000>;
		};
		opp-1478400000 {
			opp-hz = /bits/ 64 <1478400000>;
			opp-microvolt = <1140000 905000 1140000>;
			opp-supported-hw = <0x1>;
			clock-latency-ns = <200000>;
		};
		opp-1497600000 {
			opp-hz = /bits/ 64 <1497600000>;
			opp-microvolt = <1140000 905000 1140000>;
			opp-supported-hw = <0x4>;
			clock-latency-ns = <200000>;
		};
		opp-1516800000 {
			opp-hz = /bits/ 64 <1516800000>;
			opp-microvolt = <1140000 905000 1140000>;
			opp-supported-hw = <0x70>;
			clock-latency-ns = <200000>;
		};
		opp-1593600000 {
			opp-hz = /bits/ 64 <1593600000>;
			opp-microvolt = <1140000 905000 1140000>;
			opp-supported-hw = <0x71>;
			clock-latency-ns = <200000>;
		};
		opp-1996800000 {
			opp-hz = /bits/ 64 <1996800000>;
			opp-microvolt = <1140000 905000 1140000>;
			opp-supported-hw = <0x20>;
			clock-latency-ns = <200000>;
		};
		opp-2188800000 {
			opp-hz = /bits/ 64 <2188800000>;
			opp-microvolt = <1140000 905000 1140000>;
			opp-supported-hw = <0x10>;
			clock-latency-ns = <200000>;
		};
	};

	cluster1_opp: opp_table1 {
		compatible = "operating-points-v2-kryo-cpu";
		nvmem-cells = <&speedbin_efuse>;
		opp-shared;

		opp-307200000 {
			opp-hz = /bits/ 64 <307200000>;
			opp-microvolt = <905000 905000 1140000>;
			opp-supported-hw = <0x77>;
			clock-latency-ns = <200000>;
		};
		opp-384000000 {
			opp-hz = /bits/ 64 <384000000>;
			opp-microvolt = <905000 905000 1140000>;
			opp-supported-hw = <0x70>;
			clock-latency-ns = <200000>;
		};
		opp-403200000 {
			opp-hz = /bits/ 64 <403200000>;
			opp-microvolt = <905000 905000 1140000>;
			opp-supported-hw = <0x7>;
			clock-latency-ns = <200000>;
		};
		opp-460800000 {
			opp-hz = /bits/ 64 <460800000>;
			opp-microvolt = <905000 905000 1140000>;
			opp-supported-hw = <0x70>;
			clock-latency-ns = <200000>;
		};
		opp-480000000 {
			opp-hz = /bits/ 64 <480000000>;
			opp-microvolt = <905000 905000 1140000>;
			opp-supported-hw = <0x7>;
			clock-latency-ns = <200000>;
		};
		opp-537600000 {
			opp-hz = /bits/ 64 <537600000>;
			opp-microvolt = <905000 905000 1140000>;
			opp-supported-hw = <0x70>;
			clock-latency-ns = <200000>;
		};
		opp-556800000 {
			opp-hz = /bits/ 64 <556800000>;
			opp-microvolt = <905000 905000 1140000>;
			opp-supported-hw = <0x7>;
			clock-latency-ns = <200000>;
		};
		opp-614400000 {
			opp-hz = /bits/ 64 <614400000>;
			opp-microvolt = <905000 905000 1140000>;
			opp-supported-hw = <0x70>;
			clock-latency-ns = <200000>;
		};
		opp-652800000 {
			opp-hz = /bits/ 64 <652800000>;
			opp-microvolt = <905000 905000 1140000>;
			opp-supported-hw = <0x7>;
			clock-latency-ns = <200000>;
		};
		opp-691200000 {
			opp-hz = /bits/ 64 <691200000>;
			opp-microvolt = <905000 905000 1140000>;
			opp-supported-hw = <0x70>;
			clock-latency-ns = <200000>;
		};
		opp-729600000 {
			opp-hz = /bits/ 64 <729600000>;
			opp-microvolt = <905000 905000 1140000>;
			opp-supported-hw = <0x7>;
			clock-latency-ns = <200000>;
		};
		opp-748800000 {
			opp-hz = /bits/ 64 <748800000>;
			opp-microvolt = <905000 905000 1140000>;
			opp-supported-hw = <0x70>;
			clock-latency-ns = <200000>;
		};
		opp-806400000 {
			opp-hz = /bits/ 64 <806400000>;
			opp-microvolt = <905000 905000 1140000>;
			opp-supported-hw = <0x7>;
			clock-latency-ns = <200000>;
		};
		opp-825600000 {
			opp-hz = /bits/ 64 <825600000>;
			opp-microvolt = <905000 905000 1140000>;
			opp-supported-hw = <0x70>;
			clock-latency-ns = <200000>;
		};
		opp-883200000 {
			opp-hz = /bits/ 64 <883200000>;
			opp-microvolt = <905000 905000 1140000>;
			opp-supported-hw = <0x7>;
			clock-latency-ns = <200000>;
		};
		opp-902400000 {
			opp-hz = /bits/ 64 <902400000>;
			opp-microvolt = <905000 905000 1140000>;
			opp-supported-hw = <0x70>;
			clock-latency-ns = <200000>;
		};
		opp-940800000 {
			opp-hz = /bits/ 64 <940800000>;
			opp-microvolt = <905000 905000 1140000>;
			opp-supported-hw = <0x7>;
			clock-latency-ns = <200000>;
		};
		opp-979200000 {
			opp-hz = /bits/ 64 <979200000>;
			opp-microvolt = <905000 905000 1140000>;
			opp-supported-hw = <0x70>;
			clock-latency-ns = <200000>;
		};
		opp-1036800000 {
			opp-hz = /bits/ 64 <1036800000>;
			opp-microvolt = <905000 905000 1140000>;
			opp-supported-hw = <0x7>;
			clock-latency-ns = <200000>;
		};
		opp-1056000000 {
			opp-hz = /bits/ 64 <1056000000>;
			opp-microvolt = <905000 905000 1140000>;
			opp-supported-hw = <0x70>;
			clock-latency-ns = <200000>;
		};
		opp-1113600000 {
			opp-hz = /bits/ 64 <1113600000>;
			opp-microvolt = <905000 905000 1140000>;
			opp-supported-hw = <0x7>;
			clock-latency-ns = <200000>;
		};
		opp-1132800000 {
			opp-hz = /bits/ 64 <1132800000>;
			opp-microvolt = <905000 905000 1140000>;
			opp-supported-hw = <0x70>;
			clock-latency-ns = <200000>;
		};
		opp-1190400000 {
			opp-hz = /bits/ 64 <1190400000>;
			opp-microvolt = <905000 905000 1140000>;
			opp-supported-hw = <0x7>;
			clock-latency-ns = <200000>;
		};
		opp-1209600000 {
			opp-hz = /bits/ 64 <1209600000>;
			opp-microvolt = <905000 905000 1140000>;
			opp-supported-hw = <0x70>;
			clock-latency-ns = <200000>;
		};
		opp-1248000000 {
			opp-hz = /bits/ 64 <1248000000>;
			opp-microvolt = <905000 905000 1140000>;
			opp-supported-hw = <0x7>;
			clock-latency-ns = <200000>;
		};
		opp-1286400000 {
			opp-hz = /bits/ 64 <1286400000>;
			opp-microvolt = <905000 905000 1140000>;
			opp-supported-hw = <0x70>;
			clock-latency-ns = <200000>;
		};
		opp-1324800000 {
			opp-hz = /bits/ 64 <1324800000>;
			opp-microvolt = <1140000 905000 1140000>;
			opp-supported-hw = <0x7>;
			clock-latency-ns = <200000>;
		};
		opp-1363200000 {
			opp-hz = /bits/ 64 <1363200000>;
			opp-microvolt = <1140000 905000 1140000>;
			opp-supported-hw = <0x70>;
			clock-latency-ns = <200000>;
		};
		opp-1401600000 {
			opp-hz = /bits/ 64 <1401600000>;
			opp-microvolt = <1140000 905000 1140000>;
			opp-supported-hw = <0x7>;
			clock-latency-ns = <200000>;
		};
		opp-1440000000 {
			opp-hz = /bits/ 64 <1440000000>;
			opp-microvolt = <1140000 905000 1140000>;
			opp-supported-hw = <0x70>;
			clock-latency-ns = <200000>;
		};
		opp-1478400000 {
			opp-hz = /bits/ 64 <1478400000>;
			opp-microvolt = <1140000 905000 1140000>;
			opp-supported-hw = <0x7>;
			clock-latency-ns = <200000>;
		};
		opp-1516800000 {
			opp-hz = /bits/ 64 <1516800000>;
			opp-microvolt = <1140000 905000 1140000>;
			opp-supported-hw = <0x70>;
			clock-latency-ns = <200000>;
		};
		opp-1555200000 {
			opp-hz = /bits/ 64 <1555200000>;
			opp-microvolt = <1140000 905000 1140000>;
			opp-supported-hw = <0x7>;
			clock-latency-ns = <200000>;
		};
		opp-1593600000 {
			opp-hz = /bits/ 64 <1593600000>;
			opp-microvolt = <1140000 905000 1140000>;
			opp-supported-hw = <0x70>;
			clock-latency-ns = <200000>;
		};
		opp-1632000000 {
			opp-hz = /bits/ 64 <1632000000>;
			opp-microvolt = <1140000 905000 1140000>;
			opp-supported-hw = <0x7>;
			clock-latency-ns = <200000>;
		};
		opp-1670400000 {
			opp-hz = /bits/ 64 <1670400000>;
			opp-microvolt = <1140000 905000 1140000>;
			opp-supported-hw = <0x70>;
			clock-latency-ns = <200000>;
		};
		opp-1708800000 {
			opp-hz = /bits/ 64 <1708800000>;
			opp-microvolt = <1140000 905000 1140000>;
			opp-supported-hw = <0x7>;
			clock-latency-ns = <200000>;
		};
		opp-1747200000 {
			opp-hz = /bits/ 64 <1747200000>;
			opp-microvolt = <1140000 905000 1140000>;
			opp-supported-hw = <0x70>;
			clock-latency-ns = <200000>;
		};
		opp-1785600000 {
			opp-hz = /bits/ 64 <1785600000>;
			opp-microvolt = <1140000 905000 1140000>;
			opp-supported-hw = <0x7>;
			clock-latency-ns = <200000>;
		};
		opp-1804800000 {
			opp-hz = /bits/ 64 <1804800000>;
			opp-microvolt = <1140000 905000 1140000>;
			opp-supported-hw = <0x6>;
			clock-latency-ns = <200000>;
		};
		opp-1824000000 {
			opp-hz = /bits/ 64 <1824000000>;
			opp-microvolt = <1140000 905000 1140000>;
			opp-supported-hw = <0x71>;
			clock-latency-ns = <200000>;
		};
		opp-1900800000 {
			opp-hz = /bits/ 64 <1900800000>;
			opp-microvolt = <1140000 905000 1140000>;
			opp-supported-hw = <0x74>;
			clock-latency-ns = <200000>;
		};
		opp-1920000000 {
			opp-hz = /bits/ 64 <1920000000>;
			opp-microvolt = <1140000 905000 1140000>;
			opp-supported-hw = <0x1>;
			clock-latency-ns = <200000>;
		};
		opp-1977600000 {
			opp-hz = /bits/ 64 <1977600000>;
			opp-microvolt = <1140000 905000 1140000>;
			opp-supported-hw = <0x30>;
			clock-latency-ns = <200000>;
		};
		opp-1996800000 {
			opp-hz = /bits/ 64 <1996800000>;
			opp-microvolt = <1140000 905000 1140000>;
			opp-supported-hw = <0x1>;
			clock-latency-ns = <200000>;
		};
		opp-2054400000 {
			opp-hz = /bits/ 64 <2054400000>;
			opp-microvolt = <1140000 905000 1140000>;
			opp-supported-hw = <0x30>;
			clock-latency-ns = <200000>;
		};
		opp-2073600000 {
			opp-hz = /bits/ 64 <2073600000>;
			opp-microvolt = <1140000 905000 1140000>;
			opp-supported-hw = <0x1>;
			clock-latency-ns = <200000>;
		};
		opp-2150400000 {
			opp-hz = /bits/ 64 <2150400000>;
			opp-microvolt = <1140000 905000 1140000>;
			opp-supported-hw = <0x31>;
			clock-latency-ns = <200000>;
		};
		opp-2246400000 {
			opp-hz = /bits/ 64 <2246400000>;
			opp-microvolt = <1140000 905000 1140000>;
			opp-supported-hw = <0x10>;
			clock-latency-ns = <200000>;
		};
		opp-2342400000 {
			opp-hz = /bits/ 64 <2342400000>;
			opp-microvolt = <1140000 905000 1140000>;
			opp-supported-hw = <0x10>;
			clock-latency-ns = <200000>;
		};
	};

....

reserved-memory {
	#address-cells = <2>;
	#size-cells = <2>;
	ranges;
....
	smem_mem: smem-mem@86000000 {
		reg = <0x0 0x86000000 0x0 0x200000>;
		no-map;
	};
....
};

smem {
	compatible = "qcom,smem";
	memory-region = <&smem_mem>;
	hwlocks = <&tcsr_mutex 3>;
};

soc {
....
	qfprom: qfprom@74000 {
		compatible = "qcom,qfprom";
		reg = <0x00074000 0x8ff>;
		#address-cells = <1>;
		#size-cells = <1>;
		....
		speedbin_efuse: speedbin@133 {
			reg = <0x133 0x1>;
			bits = <5 3>;
		};
	};
};
+5 −2
Original line number Diff line number Diff line
@@ -82,7 +82,10 @@ This defines voltage-current-frequency combinations along with other related
properties.

Required properties:
- opp-hz: Frequency in Hz, expressed as a 64-bit big-endian integer.
- opp-hz: Frequency in Hz, expressed as a 64-bit big-endian integer. This is a
  required property for all device nodes but devices like power domains. The
  power domain nodes must have another (implementation dependent) property which
  uniquely identifies the OPP nodes.

Optional properties:
- opp-microvolt: voltage in micro Volts.
@@ -159,7 +162,7 @@ Optional properties:

- status: Marks the node enabled/disabled.

- required-opp: This contains phandle to an OPP node in another device's OPP
- required-opps: This contains phandle to an OPP node in another device's OPP
  table. It may contain an array of phandles, where each phandle points to an
  OPP of a different device. It should not contain multiple phandles to the OPP
  nodes in the same OPP table. This specifies the minimum required OPP of the
+3 −3
Original line number Diff line number Diff line
@@ -127,7 +127,7 @@ inside a PM domain with index 0 of a power controller represented by a node
with the label "power".

Optional properties:
- required-opp: This contains phandle to an OPP node in another device's OPP
- required-opps: This contains phandle to an OPP node in another device's OPP
  table. It may contain an array of phandles, where each phandle points to an
  OPP of a different device. It should not contain multiple phandles to the OPP
  nodes in the same OPP table. This specifies the minimum required OPP of the
@@ -175,14 +175,14 @@ Example:
		compatible = "foo,i-leak-current";
		reg = <0x12350000 0x1000>;
		power-domains = <&power 0>;
		required-opp = <&domain0_opp_0>;
		required-opps = <&domain0_opp_0>;
	};

	leaky-device1@12350000 {
		compatible = "foo,i-leak-current";
		reg = <0x12350000 0x1000>;
		power-domains = <&power 1>;
		required-opp = <&domain1_opp_1>;
		required-opps = <&domain1_opp_1>;
	};

[1]. Documentation/devicetree/bindings/power/domain-idle-state.txt
+15 −0
Original line number Diff line number Diff line
@@ -31,6 +31,8 @@ SoC is on the same page.

Required properties:
- compatible: should be one of:
  - "rockchip,px30-io-voltage-domain" for px30
  - "rockchip,px30-pmu-io-voltage-domain" for px30 pmu-domains
  - "rockchip,rk3188-io-voltage-domain" for rk3188
  - "rockchip,rk3228-io-voltage-domain" for rk3228
  - "rockchip,rk3288-io-voltage-domain" for rk3288
@@ -51,6 +53,19 @@ a phandle the relevant regulator. All specified supplies must be able
to report their voltage.  The IO Voltage Domain for any non-specified
supplies will be not be touched.

Possible supplies for PX30:
- vccio6-supply: The supply connected to VCCIO6.
- vccio1-supply: The supply connected to VCCIO1.
- vccio2-supply: The supply connected to VCCIO2.
- vccio3-supply: The supply connected to VCCIO3.
- vccio4-supply: The supply connected to VCCIO4.
- vccio5-supply: The supply connected to VCCIO5.
- vccio-oscgpi-supply: The supply connected to VCCIO_OSCGPI.

Possible supplies for PX30 pmu-domains:
- pmuio1-supply: The supply connected to PMUIO1.
- pmuio2-supply: The supply connected to PMUIO2.

Possible supplies for rk3188:
- ap0-supply:    The supply connected to AP0_VCC.
- ap1-supply:    The supply connected to AP1_VCC.
+16 −0
Original line number Diff line number Diff line
@@ -11663,6 +11663,13 @@ F: Documentation/devicetree/bindings/media/qcom,camss.txt
F:	Documentation/media/v4l-drivers/qcom_camss.rst
F:	drivers/media/platform/qcom/camss-8x16/

QUALCOMM CPUFREQ DRIVER MSM8996/APQ8096
M:  Ilia Lin <ilia.lin@gmail.com>
L:  linux-pm@vger.kernel.org
S:  Maintained
F:  Documentation/devicetree/bindings/opp/kryo-cpufreq.txt
F:  drivers/cpufreq/qcom-cpufreq-kryo.c

QUALCOMM EMAC GIGABIT ETHERNET DRIVER
M:	Timur Tabi <timur@codeaurora.org>
L:	netdev@vger.kernel.org
@@ -14380,6 +14387,15 @@ S: Maintained
F:	drivers/tc/
F:	include/linux/tc.h

TURBOSTAT UTILITY
M:	"Len Brown" <lenb@kernel.org>
L:	linux-pm@vger.kernel.org
B:	https://bugzilla.kernel.org
Q:	https://patchwork.kernel.org/project/linux-pm/list/
T:	git git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux.git turbostat
S:	Supported
F:	tools/power/x86/turbostat/

TW5864 VIDEO4LINUX DRIVER
M:	Bluecherry Maintainers <maintainers@bluecherrydvr.com>
M:	Anton Sviridenko <anton@corp.bluecherry.net>
Loading