Commit 333505a4 authored by Olof Johansson's avatar Olof Johansson
Browse files

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

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

Qualcomm driver updates for v5.6

* SCM major refactoring and cleanup
* Properly flag active only power domains as active only
* Add SC7180 and SM8150 RPMH power domains
* Return EPROBE_DEFER from QMI if packet family is not yet available

* tag 'qcom-drivers-for-5.6' of https://git.kernel.org/pub/scm/linux/kernel/git/qcom/linux: (27 commits)
  firmware: qcom_scm: Dynamically support SMCCC and legacy conventions
  firmware: qcom_scm: Remove thin wrappers
  firmware: qcom_scm: Order functions, definitions by service/command
  firmware: qcom_scm-32: Add device argument to atomic calls
  firmware: qcom_scm-32: Create common legacy atomic call
  firmware: qcom_scm-32: Move SMCCC register filling to qcom_scm_call
  firmware: qcom_scm-32: Use qcom_scm_desc in non-atomic calls
  firmware: qcom_scm-32: Add funcnum IDs
  firmware: qcom_scm-32: Use SMC arch wrappers
  firmware: qcom_scm-64: Improve SMC convention detection
  firmware: qcom_scm-64: Move SMC register filling to qcom_scm_call_smccc
  firmware: qcom_scm-64: Add SCM results struct
  firmware: qcom_scm-64: Move svc/cmd/owner into qcom_scm_desc
  firmware: qcom_scm-64: Make SMC macros less magical
  firmware: qcom_scm: Remove unused qcom_scm_get_version
  firmware: qcom_scm: Apply consistent naming scheme to command IDs
  firmware: qcom_scm: Rename macros and structures
  soc: qcom: rpmhpd: Set 'active_only' for active only power domains
  firmware: scm: Add stubs for OCMEM and restore_sec_cfg_available
  dt-bindings: power: rpmpd: Convert rpmpd bindings to yaml
  ...

Link: https://lore.kernel.org/r/20200113204405.GD3325@yoga


Signed-off-by: default avatarOlof Johansson <olof@lixom.net>
parents a9e3e12f 9a434cee
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -47,7 +47,7 @@ examples:
  - |
    #include <dt-bindings/interrupt-controller/arm-gic.h>

    cache-controller@1100000 {
    system-cache-controller@1100000 {
      compatible = "qcom,sdm845-llcc";
      reg = <0x1100000 0x200000>, <0x1300000 0x50000> ;
      reg-names = "llcc_base", "llcc_broadcast_base";
+0 −148
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,msm8976-rpmpd: RPM Power domain for the msm8976 family of SoC
	* qcom,msm8996-rpmpd: RPM Power domain for the msm8996 family of SoC
	* qcom,msm8998-rpmpd: RPM Power domain for the msm8998 family of SoC
	* qcom,qcs404-rpmpd: RPM Power domain for the qcs404 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>;
		};
	};
+170 −0
Original line number Diff line number Diff line
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/power/qcom,rpmpd.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Qualcomm RPM/RPMh Power domains

maintainers:
  - Rajendra Nayak <rnayak@codeaurora.org>

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

properties:
  compatible:
    enum:
      - qcom,msm8976-rpmpd
      - qcom,msm8996-rpmpd
      - qcom,msm8998-rpmpd
      - qcom,qcs404-rpmpd
      - qcom,sc7180-rpmhpd
      - qcom,sdm845-rpmhpd
      - qcom,sm8150-rpmhpd

  '#power-domain-cells':
    const: 1

  operating-points-v2: true

  opp-table:
    type: object

required:
  - compatible
  - '#power-domain-cells'
  - operating-points-v2

additionalProperties: false

examples:
  - |

    // Example 1 (rpmh power domain controller and OPP table):

    #include <dt-bindings/power/qcom-rpmpd.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 2 (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 3 (Client/Consumer device using OPP table):

    leaky-device0@12350000 {
      compatible = "foo,i-leak-current";
      reg = <0x12350000 0x1000>;
      power-domains = <&rpmhpd 0>;
      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>;
      };
    };
...
+0 −8
Original line number Diff line number Diff line
@@ -239,14 +239,6 @@ config QCOM_SCM
	depends on ARM || ARM64
	select RESET_CONTROLLER

config QCOM_SCM_32
	def_bool y
	depends on QCOM_SCM && ARM

config QCOM_SCM_64
	def_bool y
	depends on QCOM_SCM && ARM64

config QCOM_SCM_DOWNLOAD_MODE_DEFAULT
	bool "Qualcomm download mode enabled by default"
	depends on QCOM_SCM
+1 −4
Original line number Diff line number Diff line
@@ -17,10 +17,7 @@ obj-$(CONFIG_ISCSI_IBFT) += iscsi_ibft.o
obj-$(CONFIG_FIRMWARE_MEMMAP)	+= memmap.o
obj-$(CONFIG_RASPBERRYPI_FIRMWARE) += raspberrypi.o
obj-$(CONFIG_FW_CFG_SYSFS)	+= qemu_fw_cfg.o
obj-$(CONFIG_QCOM_SCM)		+= qcom_scm.o
obj-$(CONFIG_QCOM_SCM_64)	+= qcom_scm-64.o
obj-$(CONFIG_QCOM_SCM_32)	+= qcom_scm-32.o
CFLAGS_qcom_scm-32.o :=$(call as-instr,.arch armv7-a\n.arch_extension sec,-DREQUIRES_SEC=1) -march=armv7-a
obj-$(CONFIG_QCOM_SCM)		+= qcom_scm.o qcom_scm-smc.o qcom_scm-legacy.o
obj-$(CONFIG_TI_SCI_PROTOCOL)	+= ti_sci.o
obj-$(CONFIG_TRUSTED_FOUNDATIONS) += trusted_foundations.o
obj-$(CONFIG_TURRIS_MOX_RWTM)	+= turris-mox-rwtm.o
Loading