Unverified Commit 01e9d2c6 authored by Arnd Bergmann's avatar Arnd Bergmann
Browse files

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

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

Qualcomm driver updates for v6.3

This introduces a new driver for the Data Capture and Compare block,
which provides a mechanism for capturing hardware state (access MMIO
registers) either upon request of triggered automatically e.g. upon a
watchdog bite, for post mortem analysis.

The remote filesystem memory share driver gains support for having its
memory bound to more than a single VMID.

The SCM driver gains the minimal support needed to support a new
mechanism where secure world can put calls on hold and later request
them to be retried.

Support for the new SA8775P platform is added to rpmhpd, QDU1000 is
added to the SCM driver and a long list of platforms are added to the
socinfo driver. Support for socinfo data revision 16 is also introduced.

Lastly a driver to program the ramp controller in MSM8976 is introduced.

* tag 'qcom-drivers-for-6.3' of https://git.kernel.org/pub/scm/linux/kernel/git/qcom/linux: (33 commits)
  firmware: qcom: scm: Add wait-queue handling logic
  dt-bindings: firmware: qcom,scm: Add optional interrupt
  Revert "dt-bindings: power: rpmpd: Add SM4250 support"
  Revert "soc: qcom: rpmpd: Add SM4250 support"
  soc: qcom: socinfo: Add a bunch of older SoCs
  dt-bindings: arm: qcom,ids: Add a bunch of older SoCs
  dt-bindings: arm: qcom,ids: Add QRD board ID
  soc: qcom: socinfo: Fix soc_id order
  dt-bindings: soc: qcom: smd-rpm: Exclude MSM8936 from glink-channels
  dt-bindings: firmware: qcom: scm: Separate VMIDs from header to bindings
  soc: qcom: rmtfs: Optionally map RMTFS to more VMs
  dt-bindings: reserved-memory: rmtfs: Make qcom,vmid an array
  dt-bindings: firmware: scm: Add QDU1000/QRU1000 compatible
  dt-bindings: firmware: qcom,scm: narrow clocks and interconnects
  dt-bindings: firmware: qcom,scm: document MSM8226 clocks
  soc: qcom: ramp_controller: Make things static
  soc: qcom: rmphpd: add power domains for sa8775p
  dt-bindings: power: qcom,rpmpd: document sa8775p
  PM: AVS: qcom-cpr: Fix an error handling path in cpr_probe()
  soc: qcom: dcc: rewrite description of dcc sysfs files
  ...

Link: https://lore.kernel.org/r/20230126163008.3676950-1-andersson@kernel.org


Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
parents 4a54ecf3 6bf32599
Loading
Loading
Loading
Loading
+127 −0
Original line number Diff line number Diff line
What:           /sys/kernel/debug/dcc/.../ready
Date:           December 2022
Contact:        Souradeep Chowdhury <quic_schowdhu@quicinc.com>
Description:
		This file is used to check the status of the dcc
		hardware if it's ready to receive user configurations.
		A 'Y' here indicates dcc is ready.

What:           /sys/kernel/debug/dcc/.../trigger
Date:           December 2022
Contact:        Souradeep Chowdhury <quic_schowdhu@quicinc.com>
Description:
		This is the debugfs interface for manual software
		triggers. The trigger can be invoked by writing '1'
		to the file.

What:           /sys/kernel/debug/dcc/.../config_reset
Date:           December 2022
Contact:        Souradeep Chowdhury <quic_schowdhu@quicinc.com>
Description:
		This file is used to reset the configuration of
		a dcc driver to the default configuration. When '1'
		is written to the file, all the previous addresses
		stored in the driver gets removed and users need to
		reconfigure addresses again.

What:           /sys/kernel/debug/dcc/.../[list-number]/config
Date:		 December 2022
Contact:        Souradeep Chowdhury <quic_schowdhu@quicinc.com>
Description:
		This stores the addresses of the registers which
		can be read in case of a hardware crash or manual
		software triggers. The input addresses type
		can be one of following dcc instructions: read,
		write, read-write, and loop type. The lists need to
		be configured sequentially and not in a overlapping
		manner; e.g. users can jump to list x only after
		list y is configured and enabled. The input format for
		each type is as follows:

	        i) Read instruction

		   ::

		     echo R <addr> <n> <bus> >/sys/kernel/debug/dcc/../[list-number]/config

		   where:

		   <addr>
			The address to be read.

		   <n>
			The addresses word count, starting from address <1>.
			Each word is 32 bits (4 bytes). If omitted, defaulted
			to 1.

		   <bus type>
			The bus type, which can be either 'apb' or 'ahb'.
			The default is 'ahb' if leaved out.

		ii) Write instruction

		    ::

		      echo W <addr> <n> <bus type> > /sys/kernel/debug/dcc/../[list-number]/config

		    where:

		    <addr>
			The address to be written.

		    <n>
			The value to be written at <addr>.

		    <bus type>
			The bus type, which can be either 'apb' or 'ahb'.

	        iii) Read-write instruction

		     ::

		       echo RW <addr> <n> <mask> > /sys/kernel/debug/dcc/../[list-number]/config

		     where:

		     <addr>
			The address to be read and written.

		     <n>
		        The value to be written at <addr>.

		     <mask>
			The value mask.

		iv) Loop instruction

		    ::

		      echo L <loop count> <address count> <address>... > /sys/kernel/debug/dcc/../[list-number]/config

		    where:

		    <loop count>
			Number of iterations

		    <address count>
			total number of addresses to be written

		    <address>
			Space-separated list of addresses.

What:           /sys/kernel/debug/dcc/.../[list-number]/enable
Date:           December 2022
Contact:        Souradeep Chowdhury <quic_schowdhu@quicinc.com>
Description:
		This debugfs interface is used for enabling the
		the dcc hardware. A file named "enable" is in the
		directory list number where users can enable/disable
		the specific list by writing boolean (1 or 0) to the
		file.

		On enabling the dcc, all the addresses specified
		by the user for the corresponding list is written
		into dcc sram which is read by the dcc hardware
		on manual or crash induced triggers. Lists must
		be configured and enabled sequentially, e.g. list
		2 can only be enabled when list 1 have so.
+57 −7
Original line number Diff line number Diff line
@@ -38,6 +38,7 @@ properties:
          - qcom,scm-msm8994
          - qcom,scm-msm8996
          - qcom,scm-msm8998
          - qcom,scm-qdu1000
          - qcom,scm-sc7180
          - qcom,scm-sc7280
          - qcom,scm-sc8280xp
@@ -73,6 +74,12 @@ properties:
  '#reset-cells':
    const: 1

  interrupts:
    description:
      The wait-queue interrupt that firmware raises as part of handshake
      protocol to handle sleeping SCM calls.
    maxItems: 1

  qcom,dload-mode:
    $ref: /schemas/types.yaml#/definitions/phandle-array
    items:
@@ -82,6 +89,32 @@ properties:
    description: TCSR hardware block

allOf:
  # Clocks
  - if:
      properties:
        compatible:
          contains:
            enum:
              - qcom,scm-apq8064
              - qcom,scm-apq8084
              - qcom,scm-mdm9607
              - qcom,scm-msm8226
              - qcom,scm-msm8660
              - qcom,scm-msm8916
              - qcom,scm-msm8953
              - qcom,scm-msm8960
              - qcom,scm-msm8974
              - qcom,scm-msm8976
              - qcom,scm-sm6375
    then:
      required:
        - clocks
        - clock-names
    else:
      properties:
        clock-names: false
        clocks: false

  - if:
      properties:
        compatible:
@@ -100,10 +133,6 @@ allOf:
        clocks:
          maxItems: 1

      required:
        - clocks
        - clock-names

  - if:
      properties:
        compatible:
@@ -111,6 +140,7 @@ allOf:
            enum:
              - qcom,scm-apq8084
              - qcom,scm-mdm9607
              - qcom,scm-msm8226
              - qcom,scm-msm8916
              - qcom,scm-msm8953
              - qcom,scm-msm8974
@@ -127,9 +157,29 @@ allOf:
          minItems: 3
          maxItems: 3

      required:
        - clocks
        - clock-names
  # Interconnects
  - if:
      not:
        properties:
          compatible:
            contains:
              enum:
                - qcom,scm-sm8450
    then:
      properties:
        interconnects: false

  # Interrupts
  - if:
      not:
        properties:
          compatible:
            contains:
              enum:
                - qcom,scm-sm8450
    then:
      properties:
        interrupts: false

required:
  - compatible
+0 −283
Original line number Diff line number Diff line
Qualcomm Resource Power Manager (RPM)

This driver is used to interface with the Resource Power Manager (RPM) found in
various Qualcomm platforms. The RPM allows each component in the system to vote
for state of the system resources, such as clocks, regulators and bus
frequencies.

- compatible:
	Usage: required
	Value type: <string>
	Definition: must be one of:
		    "qcom,rpm-apq8064"
		    "qcom,rpm-msm8660"
		    "qcom,rpm-msm8960"
		    "qcom,rpm-ipq8064"
		    "qcom,rpm-mdm9615"

- reg:
	Usage: required
	Value type: <prop-encoded-array>
	Definition: base address and size of the RPM's message ram

- interrupts:
	Usage: required
	Value type: <prop-encoded-array>
	Definition: three entries specifying the RPM's:
		    1. acknowledgement interrupt
		    2. error interrupt
		    3. wakeup interrupt

- interrupt-names:
	Usage: required
	Value type: <string-array>
	Definition: must be the three strings "ack", "err" and "wakeup", in order

- qcom,ipc:
	Usage: required
	Value type: <prop-encoded-array>

	Definition: three entries specifying the outgoing ipc bit used for
		    signaling the RPM:
		    - phandle to a syscon node representing the apcs registers
		    - u32 representing offset to the register within the syscon
		    - u32 representing the ipc bit within the register


= SUBNODES

The RPM exposes resources to its subnodes. The below bindings specify the set
of valid subnodes that can operate on these resources.

== Regulators

Regulator nodes are identified by their compatible:

- compatible:
	Usage: required
	Value type: <string>
	Definition: must be one of:
		    "qcom,rpm-pm8058-regulators"
		    "qcom,rpm-pm8901-regulators"
		    "qcom,rpm-pm8921-regulators"
		    "qcom,rpm-pm8018-regulators"
		    "qcom,rpm-smb208-regulators"

- vdd_l0_l1_lvs-supply:
- vdd_l2_l11_l12-supply:
- vdd_l3_l4_l5-supply:
- vdd_l6_l7-supply:
- vdd_l8-supply:
- vdd_l9-supply:
- vdd_l10-supply:
- vdd_l13_l16-supply:
- vdd_l14_l15-supply:
- vdd_l17_l18-supply:
- vdd_l19_l20-supply:
- vdd_l21-supply:
- vdd_l22-supply:
- vdd_l23_l24_l25-supply:
- vdd_ncp-supply:
- vdd_s0-supply:
- vdd_s1-supply:
- vdd_s2-supply:
- vdd_s3-supply:
- vdd_s4-supply:
	Usage: optional (pm8058 only)
	Value type: <phandle>
	Definition: reference to regulator supplying the input pin, as
		    described in the data sheet

- lvs0_in-supply:
- lvs1_in-supply:
- lvs2_in-supply:
- lvs3_in-supply:
- mvs_in-supply:
- vdd_l0-supply:
- vdd_l1-supply:
- vdd_l2-supply:
- vdd_l3-supply:
- vdd_l4-supply:
- vdd_l5-supply:
- vdd_l6-supply:
- vdd_s0-supply:
- vdd_s1-supply:
- vdd_s2-supply:
- vdd_s3-supply:
- vdd_s4-supply:
	Usage: optional (pm8901 only)
	Value type: <phandle>
	Definition: reference to regulator supplying the input pin, as
		    described in the data sheet

- vdd_l1_l2_l12_l18-supply:
- vdd_l3_l15_l17-supply:
- vdd_l4_l14-supply:
- vdd_l5_l8_l16-supply:
- vdd_l6_l7-supply:
- vdd_l9_l11-supply:
- vdd_l10_l22-supply:
- vdd_l21_l23_l29-supply:
- vdd_l24-supply:
- vdd_l25-supply:
- vdd_l26-supply:
- vdd_l27-supply:
- vdd_l28-supply:
- vdd_ncp-supply:
- vdd_s1-supply:
- vdd_s2-supply:
- vdd_s4-supply:
- vdd_s5-supply:
- vdd_s6-supply:
- vdd_s7-supply:
- vdd_s8-supply:
- vin_5vs-supply:
- vin_lvs1_3_6-supply:
- vin_lvs2-supply:
- vin_lvs4_5_7-supply:
	Usage: optional (pm8921 only)
	Value type: <phandle>
	Definition: reference to regulator supplying the input pin, as
		    described in the data sheet

- vin_lvs1-supply:
- vdd_l7-supply:
- vdd_l8-supply:
- vdd_l9_l10_l11_l12-supply:
	Usage: optional (pm8018 only)
	Value type: <phandle>
	Definition: reference to regulator supplying the input pin, as
		    described in the data sheet

The regulator node houses sub-nodes for each regulator within the device. Each
sub-node is identified using the node's name, with valid values listed for each
of the pmics below.

pm8058:
	l0, l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13, l14, l15,
	l16, l17, l18, l19, l20, l21, l22, l23, l24, l25, s0, s1, s2, s3, s4,
	lvs0, lvs1, ncp

pm8901:
	l0, l1, l2, l3, l4, l5, l6, s0, s1, s2, s3, s4, lvs0, lvs1, lvs2, lvs3,
	mvs

pm8921:
	s1, s2, s3, s4, s7, s8, l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11,
	l12, l14, l15, l16, l17, l18, l21, l22, l23, l24, l25, l26, l27, l28,
	l29, lvs1, lvs2, lvs3, lvs4, lvs5, lvs6, lvs7, usb-switch, hdmi-switch,
	ncp

pm8018:
	s1, s2, s3, s4, s5, , l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11,
	l12, l14, lvs1

smb208:
	s1a, s1b, s2a, s2b

The content of each sub-node is defined by the standard binding for regulators -
see regulator.txt - with additional custom properties described below:

=== Switch-mode Power Supply regulator custom properties

- bias-pull-down:
	Usage: optional
	Value type: <empty>
	Definition: enable pull down of the regulator when inactive

- qcom,switch-mode-frequency:
	Usage: required
	Value type: <u32>
	Definition: Frequency (Hz) of the switch-mode power supply;
		    must be one of:
		    19200000, 9600000, 6400000, 4800000, 3840000, 3200000,
		    2740000, 2400000, 2130000, 1920000, 1750000, 1600000,
		    1480000, 1370000, 1280000, 1200000

- qcom,force-mode:
	Usage: optional (default if no other qcom,force-mode is specified)
	Value type: <u32>
	Definition: indicates that the regulator should be forced to a
		   particular mode, valid values are:
		   QCOM_RPM_FORCE_MODE_NONE - do not force any mode
		   QCOM_RPM_FORCE_MODE_LPM - force into low power mode
		   QCOM_RPM_FORCE_MODE_HPM - force into high power mode
		   QCOM_RPM_FORCE_MODE_AUTO - allow regulator to automatically
					      select its own mode based on
					      realtime current draw, only for:
					      pm8921 smps and ftsmps

- qcom,power-mode-hysteretic:
	Usage: optional
	Value type: <empty>
	Definition: select that the power supply should operate in hysteretic
		    mode, instead of the default pwm mode

=== Low-dropout regulator custom properties

- bias-pull-down:
	Usage: optional
	Value type: <empty>
	Definition: enable pull down of the regulator when inactive

- qcom,force-mode:
	Usage: optional
	Value type: <u32>
	Definition: indicates that the regulator should not be forced to any
		   particular mode, valid values are:
		   QCOM_RPM_FORCE_MODE_NONE - do not force any mode
		   QCOM_RPM_FORCE_MODE_LPM - force into low power mode
		   QCOM_RPM_FORCE_MODE_HPM - force into high power mode
		   QCOM_RPM_FORCE_MODE_BYPASS - set regulator to use bypass
						mode, i.e.  to act as a switch
						and not regulate, only for:
						pm8921 pldo, nldo and nldo1200

=== Negative Charge Pump custom properties

- qcom,switch-mode-frequency:
	Usage: required
	Value type: <u32>
	Definition: Frequency (Hz) of the switch mode power supply;
		    must be one of:
		    19200000, 9600000, 6400000, 4800000, 3840000, 3200000,
		    2740000, 2400000, 2130000, 1920000, 1750000, 1600000,
		    1480000, 1370000, 1280000, 1200000

= EXAMPLE

	#include <dt-bindings/mfd/qcom-rpm.h>

	rpm@108000 {
		compatible = "qcom,rpm-msm8960";
		reg = <0x108000 0x1000>;
		qcom,ipc = <&apcs 0x8 2>;

		interrupts = <0 19 0>, <0 21 0>, <0 22 0>;
		interrupt-names = "ack", "err", "wakeup";

		regulators {
			compatible = "qcom,rpm-pm8921-regulators";
			vdd_l1_l2_l12_l18-supply = <&pm8921_s4>;

			s1 {
				regulator-min-microvolt = <1225000>;
				regulator-max-microvolt = <1225000>;

				bias-pull-down;

				qcom,switch-mode-frequency = <3200000>;
			};

			pm8921_s4: s4 {
				regulator-min-microvolt = <1800000>;
				regulator-max-microvolt = <1800000>;

				qcom,switch-mode-frequency = <1600000>;
				bias-pull-down;

				qcom,force-mode = <QCOM_RPM_FORCE_MODE_AUTO>;
			};
		};
	};
+1 −1
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ properties:
      - qcom,qcs404-rpmpd
      - qcom,qdu1000-rpmhpd
      - qcom,sa8540p-rpmhpd
      - qcom,sa8775p-rpmhpd
      - qcom,sdm660-rpmpd
      - qcom,sc7180-rpmhpd
      - qcom,sc7280-rpmhpd
@@ -39,7 +40,6 @@ properties:
      - qcom,sdm845-rpmhpd
      - qcom,sdx55-rpmhpd
      - qcom,sdx65-rpmhpd
      - qcom,sm4250-rpmpd
      - qcom,sm6115-rpmpd
      - qcom,sm6125-rpmpd
      - qcom,sm6350-rpmhpd
+4 −2
Original line number Diff line number Diff line
@@ -27,9 +27,11 @@ properties:
      identifier of the client to use this region for buffers

  qcom,vmid:
    $ref: /schemas/types.yaml#/definitions/uint32
    $ref: /schemas/types.yaml#/definitions/uint32-array
    description: >
      vmid of the remote processor, to set up memory protection
      Array of vmids of the remote processors, to set up memory protection
    minItems: 1
    maxItems: 2

required:
  - qcom,client-id
Loading