Commit 562ed38d authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'mailbox-v6.3' of git://git.linaro.org/landing-teams/working/fujitsu/integration

Pull mailbox updates from Jassi Brar:

 - qcom: misc changes to bindings for sa8775p, QDU1000/QRU1000, IPQ5332,
   SDX55, msm8976, glink-rpm-edge

 - sti: convert to DT schema

 - zynq: switch to flexible array to simplify code

* tag 'mailbox-v6.3' of git://git.linaro.org/landing-teams/working/fujitsu/integration:
  dt-bindings: mailbox: qcom-ipcc: Add compatible for QDU1000/QRU1000
  mailbox: qcom-apcs-ipc: add IPQ5332 APSS clock support
  dt-bindings: mailbox: qcom: add compatible for the IPQ5332 SoC
  dt-bindings: remoteproc: qcom,glink-rpm-edge: convert to DT schema
  mailbox: qcom-apcs-ipc: enable APCS clock device for MSM8996
  dt-bindings: mailbox: qcom: add #clock-cells to msm8996 example
  dt-bindings: mailbox: qcom: add missing platforms to conditional clauses
  dt-bindings: mailbox: qcom: correct the list of platforms using clocks
  dt-bindings: mailbox: qcom: enable syscon compatible for msm8976
  dt-bindings: mailbox: qcom: add SDX55 compatible
  dt-bindings: mailbox: qcom-ipcc: document the sa8775p platform
  dt-bindings: mailbox: sti-mailbox: convert to DT schema
  mailbox: zynq: Switch to flexible array to simplify code
parents 2e3036a2 6ccbe33a
...@@ -16,11 +16,14 @@ maintainers: ...@@ -16,11 +16,14 @@ maintainers:
properties: properties:
compatible: compatible:
oneOf: oneOf:
- items:
- enum:
- qcom,ipq5332-apcs-apps-global
- const: qcom,ipq6018-apcs-apps-global
- items: - items:
- enum: - enum:
- qcom,ipq6018-apcs-apps-global - qcom,ipq6018-apcs-apps-global
- qcom,ipq8074-apcs-apps-global - qcom,ipq8074-apcs-apps-global
- qcom,msm8976-apcs-kpss-global
- qcom,msm8996-apcs-hmss-global - qcom,msm8996-apcs-hmss-global
- qcom,msm8998-apcs-hmss-global - qcom,msm8998-apcs-hmss-global
- qcom,qcm2290-apcs-hmss-global - qcom,qcm2290-apcs-hmss-global
...@@ -37,8 +40,10 @@ properties: ...@@ -37,8 +40,10 @@ properties:
- qcom,msm8916-apcs-kpss-global - qcom,msm8916-apcs-kpss-global
- qcom,msm8939-apcs-kpss-global - qcom,msm8939-apcs-kpss-global
- qcom,msm8953-apcs-kpss-global - qcom,msm8953-apcs-kpss-global
- qcom,msm8976-apcs-kpss-global
- qcom,msm8994-apcs-kpss-global - qcom,msm8994-apcs-kpss-global
- qcom,qcs404-apcs-apps-global - qcom,qcs404-apcs-apps-global
- qcom,sdx55-apcs-gcc
- const: syscon - const: syscon
reg: reg:
maxItems: 1 maxItems: 1
...@@ -71,15 +76,8 @@ allOf: ...@@ -71,15 +76,8 @@ allOf:
compatible: compatible:
enum: enum:
- qcom,msm8916-apcs-kpss-global - qcom,msm8916-apcs-kpss-global
- qcom,msm8994-apcs-kpss-global - qcom,msm8939-apcs-kpss-global
- qcom,msm8996-apcs-hmss-global
- qcom,msm8998-apcs-hmss-global
- qcom,qcs404-apcs-apps-global - qcom,qcs404-apcs-apps-global
- qcom,sc7180-apss-shared
- qcom,sdm660-apcs-hmss-global
- qcom,sdm845-apss-shared
- qcom,sm6125-apcs-hmss-global
- qcom,sm8150-apss-shared
then: then:
properties: properties:
clocks: clocks:
...@@ -110,9 +108,10 @@ allOf: ...@@ -110,9 +108,10 @@ allOf:
- if: - if:
properties: properties:
compatible: compatible:
enum: contains:
- qcom,ipq6018-apcs-apps-global enum:
- qcom,ipq8074-apcs-apps-global - qcom,ipq6018-apcs-apps-global
- qcom,ipq8074-apcs-apps-global
then: then:
properties: properties:
clocks: clocks:
...@@ -123,12 +122,37 @@ allOf: ...@@ -123,12 +122,37 @@ allOf:
items: items:
- const: pll - const: pll
- const: xo - const: xo
- if: - if:
properties: properties:
compatible: compatible:
enum: enum:
- qcom,ipq6018-apcs-apps-global - qcom,msm8953-apcs-kpss-global
- qcom,ipq8074-apcs-apps-global - qcom,msm8976-apcs-kpss-global
- qcom,msm8994-apcs-kpss-global
- qcom,msm8996-apcs-hmss-global
- qcom,msm8998-apcs-hmss-global
- qcom,qcm2290-apcs-hmss-global
- qcom,sc7180-apss-shared
- qcom,sc8180x-apss-shared
- qcom,sdm660-apcs-hmss-global
- qcom,sdm845-apss-shared
- qcom,sm4250-apcs-hmss-global
- qcom,sm6115-apcs-hmss-global
- qcom,sm6125-apcs-hmss-global
- qcom,sm8150-apss-shared
then:
properties:
clocks: false
clock-names: false
- if:
properties:
compatible:
contains:
enum:
- qcom,ipq6018-apcs-apps-global
- qcom,ipq8074-apcs-apps-global
then: then:
properties: properties:
'#clock-cells': '#clock-cells':
...@@ -148,6 +172,7 @@ examples: ...@@ -148,6 +172,7 @@ examples:
reg = <0x9820000 0x1000>; reg = <0x9820000 0x1000>;
#mbox-cells = <1>; #mbox-cells = <1>;
#clock-cells = <0>;
}; };
rpm-glink { rpm-glink {
......
...@@ -24,6 +24,8 @@ properties: ...@@ -24,6 +24,8 @@ properties:
compatible: compatible:
items: items:
- enum: - enum:
- qcom,qdu1000-ipcc
- qcom,sa8775p-ipcc
- qcom,sc7280-ipcc - qcom,sc7280-ipcc
- qcom,sc8280xp-ipcc - qcom,sc8280xp-ipcc
- qcom,sm6350-ipcc - qcom,sm6350-ipcc
......
# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/mailbox/st,sti-mailbox.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#
title: STMicroelectronics Mailbox Driver for STi platform
description:
Each ST Mailbox IP currently consists of 4 instances of 32 channels.
Messages are passed between Application and Remote processors using
shared memory.
maintainers:
- Patrice Chotard <patrice.chotard@foss.st.com>
properties:
compatible:
const: st,stih407-mailbox
reg:
maxItems: 1
mbox-name:
$ref: /schemas/types.yaml#/definitions/string
description: name of the mailbox IP
interrupts:
description: the irq line for the RX mailbox
maxItems: 1
"#mbox-cells":
const: 2
required:
- compatible
- reg
- "#mbox-cells"
additionalProperties: false
examples:
- |
#include <dt-bindings/interrupt-controller/arm-gic.h>
mailbox0: mailbox@8f00000 {
compatible = "st,stih407-mailbox";
reg = <0x8f00000 0x1000>;
interrupts = <GIC_SPI 1 IRQ_TYPE_LEVEL_HIGH>;
#mbox-cells = <2>;
mbox-name = "a9";
};
...
ST Microelectronics Mailbox Driver
Each ST Mailbox IP currently consists of 4 instances of 32 channels. Messages
are passed between Application and Remote processors using shared memory.
Controller
----------
Required properties:
- compatible : Should be "st,stih407-mailbox"
- reg : Offset and length of the device's register set
- mbox-name : Name of the mailbox
- #mbox-cells: : Must be 2
<&phandle instance channel direction>
phandle : Label name of controller
instance : Instance number
channel : Channel number
Optional properties
- interrupts : Contains the IRQ line for a Rx mailbox
Example:
mailbox0: mailbox@0 {
compatible = "st,stih407-mailbox";
reg = <0x08f00000 0x1000>;
interrupts = <GIC_SPI 1 IRQ_TYPE_NONE>;
#mbox-cells = <2>;
mbox-name = "a9";
};
Client
------
Required properties:
- compatible : Many (See the client docs)
- reg : Shared (between Application and Remote) memory address
- mboxes : Standard property to specify a Mailbox (See ./mailbox.txt)
Cells must match 'mbox-cells' (See Controller docs above)
Optional properties
- mbox-names : Name given to channels seen in the 'mboxes' property.
Example:
mailbox_test {
compatible = "mailbox-test";
reg = <0x[shared_memory_address], [shared_memory_size]>;
mboxes = <&mailbox2 0 1>, <&mailbox0 2 1>;
mbox-names = "tx", "rx";
};
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/remoteproc/qcom,glink-rpm-edge.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#
title: Qualcomm G-Link RPM edge
description: |
Qualcomm G-Link edge, a FIFO based mechanism for communication with Resource
Power Manager (RPM) on various Qualcomm platforms.
maintainers:
- Bjorn Andersson <andersson@kernel.org>
properties:
compatible:
const: qcom,glink-rpm
label:
$ref: /schemas/types.yaml#/definitions/string
description:
Name of the edge, used for debugging and identification purposes. The
node name will be used if this is not present.
interrupts:
maxItems: 1
mboxes:
items:
- description: rpm_hlos mailbox in APCS
qcom,remote-pid:
$ref: /schemas/types.yaml#/definitions/uint32
description:
The identifier for the remote processor as known by the rest of the
system.
qcom,rpm-msg-ram:
$ref: /schemas/types.yaml#/definitions/phandle
description: |
RPM message memory resource (compatible: qcom,rpm-msg-ram).
rpm-requests:
type: object
$ref: /schemas/soc/qcom/qcom,smd-rpm.yaml#
unevaluatedProperties: false
description:
Qualcomm Resource Power Manager (RPM) over G-Link
properties:
qcom,intents:
$ref: /schemas/types.yaml#/definitions/uint32-matrix
minItems: 1
maxItems: 32
items:
items:
- description: size of each intent to preallocate
- description: amount of intents to preallocate
minimum: 1
description:
List of (size, amount) pairs describing what intents should be
preallocated for this virtual channel. This can be used to tweak the
default intents available for the channel to meet expectations of the
remote.
required:
- qcom,glink-channels
required:
- compatible
- interrupts
- mboxes
anyOf:
- required:
- qcom,remote-pid
- required:
- qcom,rpm-msg-ram
additionalProperties: false
examples:
- |
#include <dt-bindings/interrupt-controller/arm-gic.h>
rpm-glink {
compatible = "qcom,glink-rpm";
interrupts = <GIC_SPI 168 IRQ_TYPE_EDGE_RISING>;
mboxes = <&apcs_glb 0>;
qcom,rpm-msg-ram = <&rpm_msg_ram>;
rpm-requests {
compatible = "qcom,rpm-msm8996";
qcom,glink-channels = "rpm_requests";
/* ... */
};
};
Qualcomm GLINK edge binding
This binding describes a Qualcomm GLINK edge, a fifo based mechanism for
communication between subsystem-pairs on various Qualcomm platforms. Two types
of edges can be described by the binding; the GLINK RPM edge and a SMEM based
edge.
- compatible:
Usage: required for glink-rpm
Value type: <stringlist>
Definition: must be "qcom,glink-rpm"
- label:
Usage: optional
Value type: <string>
Definition: should specify the subsystem name this edge corresponds to.
- interrupts:
Usage: required
Value type: <prop-encoded-array>
Definition: should specify the IRQ used by the remote processor to
signal this processor about communication related events
- qcom,remote-pid:
Usage: required for glink-smem
Value type: <u32>
Definition: specifies the identifier of the remote endpoint of this edge
- qcom,rpm-msg-ram:
Usage: required for glink-rpm
Value type: <prop-encoded-array>
Definition: handle to RPM message memory resource
- mboxes:
Usage: required
Value type: <prop-encoded-array>
Definition: reference to the "rpm_hlos" mailbox in APCS, as described
in mailbox/mailbox.txt
= GLINK DEVICES
Each subnode of the GLINK node represent function tied to a virtual
communication channel. The name of the nodes are not important. The properties
of these nodes are defined by the individual bindings for the specific function
- but must contain the following property:
- qcom,glink-channels:
Usage: required
Value type: <stringlist>
Definition: a list of channels tied to this function, used for matching
the function to a set of virtual channels
- qcom,intents:
Usage: optional
Value type: <prop-encoded-array>
Definition: a list of size,amount pairs describing what intents should
be preallocated for this virtual channel. This can be used
to tweak the default intents available for the channel to
meet expectations of the remote.
= EXAMPLE
The following example represents the GLINK RPM node on a MSM8996 device, with
the function for the "rpm_request" channel defined, which is used for
regulators and root clocks.
apcs_glb: mailbox@9820000 {
compatible = "qcom,msm8996-apcs-hmss-global";
reg = <0x9820000 0x1000>;
#mbox-cells = <1>;
};
rpm_msg_ram: memory@68000 {
compatible = "qcom,rpm-msg-ram";
reg = <0x68000 0x6000>;
};
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>;
rpm-requests {
compatible = "qcom,rpm-msm8996";
qcom,glink-channels = "rpm_requests";
qcom,intents = <0x400 5
0x800 1>;
...
};
};
...@@ -42,7 +42,7 @@ static const struct qcom_apcs_ipc_data msm8994_apcs_data = { ...@@ -42,7 +42,7 @@ static const struct qcom_apcs_ipc_data msm8994_apcs_data = {
}; };
static const struct qcom_apcs_ipc_data msm8996_apcs_data = { static const struct qcom_apcs_ipc_data msm8996_apcs_data = {
.offset = 16, .clk_name = NULL .offset = 16, .clk_name = "qcom-apcs-msm8996-clk"
}; };
static const struct qcom_apcs_ipc_data apps_shared_apcs_data = { static const struct qcom_apcs_ipc_data apps_shared_apcs_data = {
...@@ -141,6 +141,7 @@ static int qcom_apcs_ipc_remove(struct platform_device *pdev) ...@@ -141,6 +141,7 @@ static int qcom_apcs_ipc_remove(struct platform_device *pdev)
/* .data is the offset of the ipc register within the global block */ /* .data is the offset of the ipc register within the global block */
static const struct of_device_id qcom_apcs_ipc_of_match[] = { static const struct of_device_id qcom_apcs_ipc_of_match[] = {
{ .compatible = "qcom,ipq5332-apcs-apps-global", .data = &ipq6018_apcs_data },
{ .compatible = "qcom,ipq6018-apcs-apps-global", .data = &ipq6018_apcs_data }, { .compatible = "qcom,ipq6018-apcs-apps-global", .data = &ipq6018_apcs_data },
{ .compatible = "qcom,ipq8074-apcs-apps-global", .data = &ipq6018_apcs_data }, { .compatible = "qcom,ipq8074-apcs-apps-global", .data = &ipq6018_apcs_data },
{ .compatible = "qcom,msm8916-apcs-kpss-global", .data = &msm8916_apcs_data }, { .compatible = "qcom,msm8916-apcs-kpss-global", .data = &msm8916_apcs_data },
......
...@@ -110,7 +110,7 @@ struct zynqmp_ipi_pdata { ...@@ -110,7 +110,7 @@ struct zynqmp_ipi_pdata {
unsigned int method; unsigned int method;
u32 local_id; u32 local_id;
int num_mboxes; int num_mboxes;
struct zynqmp_ipi_mbox *ipi_mboxes; struct zynqmp_ipi_mbox ipi_mboxes[];
}; };
static struct device_driver zynqmp_ipi_mbox_driver = { static struct device_driver zynqmp_ipi_mbox_driver = {
...@@ -635,7 +635,7 @@ static int zynqmp_ipi_probe(struct platform_device *pdev) ...@@ -635,7 +635,7 @@ static int zynqmp_ipi_probe(struct platform_device *pdev)
int num_mboxes, ret = -EINVAL; int num_mboxes, ret = -EINVAL;
num_mboxes = of_get_child_count(np); num_mboxes = of_get_child_count(np);
pdata = devm_kzalloc(dev, sizeof(*pdata) + (num_mboxes * sizeof(*mbox)), pdata = devm_kzalloc(dev, struct_size(pdata, ipi_mboxes, num_mboxes),
GFP_KERNEL); GFP_KERNEL);
if (!pdata) if (!pdata)
return -ENOMEM; return -ENOMEM;
...@@ -649,8 +649,6 @@ static int zynqmp_ipi_probe(struct platform_device *pdev) ...@@ -649,8 +649,6 @@ static int zynqmp_ipi_probe(struct platform_device *pdev)
} }
pdata->num_mboxes = num_mboxes; pdata->num_mboxes = num_mboxes;
pdata->ipi_mboxes = (struct zynqmp_ipi_mbox *)
((char *)pdata + sizeof(*pdata));
mbox = pdata->ipi_mboxes; mbox = pdata->ipi_mboxes;
for_each_available_child_of_node(np, nc) { for_each_available_child_of_node(np, nc) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment