mirror of
https://github.com/torvalds/linux.git
synced 2026-04-22 00:33:58 -04:00
APCS "global" is sort of a "miscellaneous" hardware block that combines
multiple registers inside the application processor subsystem. Two distinct
use cases are currently stuffed together in a single device tree node:
- Mailbox: to communicate with other remoteprocs in the system.
- Clock: for controlling the CPU frequency.
These two use cases have unavoidable circular dependencies: the mailbox is
needed as early as possible during boot to start controlling shared
resources like clocks and power domains, while the clock controller needs
one of these shared clocks as its parent. Currently, there is no way to
distinguish these two use cases for generic mechanisms like fw_devlink.
This is currently blocking conversion of the deprecated custom "qcom,ipc"
properties to the standard "mboxes", see e.g. commit d92e9ea2f0
("arm64: dts: qcom: msm8939: revert use of APCS mbox for RPM"):
1. remoteproc &rpm needs mboxes = <&apcs1_mbox 8>;
2. The clock controller inside &apcs1_mbox needs
clocks = <&rpmcc RPM_SMD_XO_CLK_SRC>.
3. &rpmcc is a child of remoteproc &rpm
The mailbox itself does not need any clocks and should probe early to
unblock the rest of the boot process. The "clocks" are only needed for the
separate clock controller. In Linux, these are already two separate drivers
that can probe independently.
Break up the circular dependency chain in the device tree by separating the
clock controller into a separate child node. Deprecate the old approach of
specifying the clock properties as part of the root node, but keep them for
backwards compatibility.
Signed-off-by: Stephan Gerhold <stephan.gerhold@linaro.org>
Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Signed-off-by: Jassi Brar <jassisinghbrar@gmail.com>
299 lines
7.5 KiB
YAML
299 lines
7.5 KiB
YAML
# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
|
|
%YAML 1.2
|
|
---
|
|
$id: http://devicetree.org/schemas/mailbox/qcom,apcs-kpss-global.yaml#
|
|
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
|
|
|
title: Qualcomm APCS global block
|
|
|
|
description:
|
|
This binding describes the APCS "global" block found in various Qualcomm
|
|
platforms.
|
|
|
|
maintainers:
|
|
- Jassi Brar <jassisinghbrar@gmail.com>
|
|
|
|
properties:
|
|
compatible:
|
|
oneOf:
|
|
- items:
|
|
- enum:
|
|
- qcom,ipq5018-apcs-apps-global
|
|
- qcom,ipq5332-apcs-apps-global
|
|
- qcom,ipq5424-apcs-apps-global
|
|
- qcom,ipq8074-apcs-apps-global
|
|
- qcom,ipq9574-apcs-apps-global
|
|
- const: qcom,ipq6018-apcs-apps-global
|
|
- items:
|
|
- enum:
|
|
- qcom,msm8226-apcs-kpss-global
|
|
- qcom,qcs404-apcs-apps-global
|
|
- const: qcom,msm8916-apcs-kpss-global
|
|
- const: syscon
|
|
- items:
|
|
- enum:
|
|
- qcom,msm8974-apcs-kpss-global
|
|
- qcom,msm8976-apcs-kpss-global
|
|
- const: qcom,msm8994-apcs-kpss-global
|
|
- const: syscon
|
|
- items:
|
|
- enum:
|
|
- qcom,msm8998-apcs-hmss-global
|
|
- qcom,sdm660-apcs-hmss-global
|
|
- qcom,sm4250-apcs-hmss-global
|
|
- qcom,sm6115-apcs-hmss-global
|
|
- qcom,sm6125-apcs-hmss-global
|
|
- const: qcom,msm8994-apcs-kpss-global
|
|
- items:
|
|
- enum:
|
|
- qcom,qcs615-apss-shared
|
|
- qcom,sc7180-apss-shared
|
|
- qcom,sc8180x-apss-shared
|
|
- qcom,sm7150-apss-shared
|
|
- qcom,sm8150-apss-shared
|
|
- const: qcom,sdm845-apss-shared
|
|
- items:
|
|
- enum:
|
|
- qcom,msm8916-apcs-kpss-global
|
|
- qcom,msm8939-apcs-kpss-global
|
|
- qcom,msm8953-apcs-kpss-global
|
|
- qcom,msm8994-apcs-kpss-global
|
|
- qcom,sdx55-apcs-gcc
|
|
- const: syscon
|
|
- enum:
|
|
- qcom,ipq6018-apcs-apps-global
|
|
- qcom,msm8996-apcs-hmss-global
|
|
- qcom,qcm2290-apcs-hmss-global
|
|
- qcom,sdm845-apss-shared
|
|
|
|
reg:
|
|
maxItems: 1
|
|
|
|
clocks:
|
|
description: phandles to the parent clocks of the clock driver
|
|
minItems: 2
|
|
maxItems: 3
|
|
deprecated: true
|
|
|
|
'#mbox-cells':
|
|
const: 1
|
|
|
|
'#clock-cells':
|
|
enum: [0, 1]
|
|
|
|
clock-names:
|
|
minItems: 2
|
|
maxItems: 3
|
|
deprecated: true
|
|
|
|
clock-controller:
|
|
type: object
|
|
additionalProperties: false
|
|
properties:
|
|
clocks:
|
|
description: phandles to the parent clocks of the clock driver
|
|
minItems: 2
|
|
maxItems: 3
|
|
|
|
'#clock-cells':
|
|
enum: [0, 1]
|
|
|
|
clock-names:
|
|
minItems: 2
|
|
maxItems: 3
|
|
|
|
required:
|
|
- compatible
|
|
- reg
|
|
- '#mbox-cells'
|
|
|
|
additionalProperties: false
|
|
|
|
# Clocks should be specified either on the parent node or on the child node
|
|
oneOf:
|
|
- required:
|
|
- clock-controller
|
|
properties:
|
|
clocks: false
|
|
clock-names: false
|
|
'#clock-cells': false
|
|
- properties:
|
|
clock-controller: false
|
|
|
|
$defs:
|
|
msm8916-apcs-clock-controller:
|
|
properties:
|
|
clocks:
|
|
items:
|
|
- description: primary pll parent of the clock driver
|
|
- description: auxiliary parent
|
|
clock-names:
|
|
items:
|
|
- const: pll
|
|
- const: aux
|
|
'#clock-cells':
|
|
const: 0
|
|
|
|
msm8939-apcs-clock-controller:
|
|
properties:
|
|
clocks:
|
|
items:
|
|
- description: primary pll parent of the clock driver
|
|
- description: auxiliary parent
|
|
- description: reference clock
|
|
clock-names:
|
|
items:
|
|
- const: pll
|
|
- const: aux
|
|
- const: ref
|
|
'#clock-cells':
|
|
const: 0
|
|
|
|
sdx55-apcs-clock-controller:
|
|
properties:
|
|
clocks:
|
|
items:
|
|
- description: reference clock
|
|
- description: primary pll parent of the clock driver
|
|
- description: auxiliary parent
|
|
clock-names:
|
|
items:
|
|
- const: ref
|
|
- const: pll
|
|
- const: aux
|
|
'#clock-cells':
|
|
const: 0
|
|
|
|
ipq6018-apcs-clock-controller:
|
|
properties:
|
|
clocks:
|
|
items:
|
|
- description: primary pll parent of the clock driver
|
|
- description: XO clock
|
|
- description: GCC GPLL0 clock source
|
|
clock-names:
|
|
items:
|
|
- const: pll
|
|
- const: xo
|
|
- const: gpll0
|
|
'#clock-cells':
|
|
const: 1
|
|
|
|
allOf:
|
|
- if:
|
|
properties:
|
|
compatible:
|
|
contains:
|
|
enum:
|
|
- qcom,msm8916-apcs-kpss-global
|
|
then:
|
|
$ref: "#/$defs/msm8916-apcs-clock-controller"
|
|
properties:
|
|
clock-controller:
|
|
$ref: "#/$defs/msm8916-apcs-clock-controller"
|
|
|
|
- if:
|
|
properties:
|
|
compatible:
|
|
contains:
|
|
enum:
|
|
- qcom,msm8939-apcs-kpss-global
|
|
then:
|
|
$ref: "#/$defs/msm8939-apcs-clock-controller"
|
|
properties:
|
|
clock-controller:
|
|
$ref: "#/$defs/msm8939-apcs-clock-controller"
|
|
|
|
- if:
|
|
properties:
|
|
compatible:
|
|
contains:
|
|
enum:
|
|
- qcom,sdx55-apcs-gcc
|
|
then:
|
|
$ref: "#/$defs/sdx55-apcs-clock-controller"
|
|
properties:
|
|
clock-controller:
|
|
$ref: "#/$defs/sdx55-apcs-clock-controller"
|
|
|
|
- if:
|
|
properties:
|
|
compatible:
|
|
contains:
|
|
enum:
|
|
- qcom,ipq6018-apcs-apps-global
|
|
then:
|
|
$ref: "#/$defs/ipq6018-apcs-clock-controller"
|
|
properties:
|
|
clock-controller:
|
|
$ref: "#/$defs/ipq6018-apcs-clock-controller"
|
|
|
|
- if:
|
|
properties:
|
|
compatible:
|
|
contains:
|
|
enum:
|
|
- qcom,msm8953-apcs-kpss-global
|
|
- qcom,msm8994-apcs-kpss-global
|
|
- qcom,msm8996-apcs-hmss-global
|
|
- qcom,qcm2290-apcs-hmss-global
|
|
- qcom,sdm845-apss-shared
|
|
then:
|
|
properties:
|
|
clocks: false
|
|
clock-names: false
|
|
clock-controller: false
|
|
'#clock-cells':
|
|
const: 0
|
|
|
|
examples:
|
|
|
|
# Example apcs with msm8996
|
|
- |
|
|
#include <dt-bindings/interrupt-controller/arm-gic.h>
|
|
apcs_glb: mailbox@9820000 {
|
|
compatible = "qcom,msm8996-apcs-hmss-global";
|
|
reg = <0x9820000 0x1000>;
|
|
|
|
#mbox-cells = <1>;
|
|
#clock-cells = <0>;
|
|
};
|
|
|
|
rpm-glink {
|
|
compatible = "qcom,glink-rpm";
|
|
interrupts = <GIC_SPI 168 IRQ_TYPE_EDGE_RISING>;
|
|
qcom,rpm-msg-ram = <&rpm_msg_ram>;
|
|
mboxes = <&apcs_glb 0>;
|
|
};
|
|
|
|
# Example apcs with qcs404
|
|
- |
|
|
#define GCC_APSS_AHB_CLK_SRC 1
|
|
#define GCC_GPLL0_AO_OUT_MAIN 123
|
|
mailbox@b011000 {
|
|
compatible = "qcom,qcs404-apcs-apps-global",
|
|
"qcom,msm8916-apcs-kpss-global", "syscon";
|
|
reg = <0x0b011000 0x1000>;
|
|
#mbox-cells = <1>;
|
|
|
|
apcs_clk: clock-controller {
|
|
clocks = <&apcs_hfpll>, <&gcc GCC_GPLL0_AO_OUT_MAIN>;
|
|
clock-names = "pll", "aux";
|
|
#clock-cells = <0>;
|
|
};
|
|
};
|
|
|
|
# Example apcs with qcs404 (deprecated: use clock-controller subnode)
|
|
- |
|
|
#define GCC_APSS_AHB_CLK_SRC 1
|
|
#define GCC_GPLL0_AO_OUT_MAIN 123
|
|
apcs: mailbox@b011000 {
|
|
compatible = "qcom,qcs404-apcs-apps-global",
|
|
"qcom,msm8916-apcs-kpss-global", "syscon";
|
|
reg = <0x0b011000 0x1000>;
|
|
#mbox-cells = <1>;
|
|
clocks = <&apcs_hfpll>, <&gcc GCC_GPLL0_AO_OUT_MAIN>;
|
|
clock-names = "pll", "aux";
|
|
#clock-cells = <0>;
|
|
};
|