Skip to content

Commit 34dcc46

Browse files
committed
Merge tag 'mailbox-v6.10' of git://git.kernel.org/pub/scm/linux/kernel/git/jassibrar/mailbox
Pull mailbox updates from Jassi Brar: - redo the omap driver from legacy to mailbox api - enable bufferless IPI for zynqmp - add mhu-v3 driver - convert from tasklet to BH workqueue - add qcom MSM8974 APCS compatible IDs * tag 'mailbox-v6.10' of git://git.kernel.org/pub/scm/linux/kernel/git/jassibrar/mailbox: (24 commits) dt-bindings: mailbox: qcom-ipcc: Document the SDX75 IPCC dt-bindings: mailbox: qcom: Add MSM8974 APCS compatible mailbox: Convert from tasklet to BH workqueue mailbox: mtk-cmdq: Fix pm_runtime_get_sync() warning in mbox shutdown mailbox: mtk-cmdq-mailbox: fix module autoloading mailbox: zynqmp: handle SGI for shared IPI mailbox: arm_mhuv3: Add driver dt-bindings: mailbox: arm,mhuv3: Add bindings mailbox: omap: Remove kernel FIFO message queuing mailbox: omap: Reverse FIFO busy check logic mailbox: omap: Remove mbox_chan_to_omap_mbox() mailbox: omap: Use mbox_controller channel list directly mailbox: omap: Use function local struct mbox_controller mailbox: omap: Merge mailbox child node setup loops mailbox: omap: Use devm_pm_runtime_enable() helper mailbox: omap: Remove device class mailbox: omap: Remove unneeded header omap-mailbox.h mailbox: omap: Move fifo size check to point of use mailbox: omap: Move omap_mbox_irq_t into driver mailbox: omap: Remove unused omap_mbox_request_channel() function ...
2 parents ab7b884 + 10b9858 commit 34dcc46

File tree

14 files changed

+1856
-502
lines changed

14 files changed

+1856
-502
lines changed
Lines changed: 224 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,224 @@
1+
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2+
%YAML 1.2
3+
---
4+
$id: http://devicetree.org/schemas/mailbox/arm,mhuv3.yaml#
5+
$schema: http://devicetree.org/meta-schemas/core.yaml#
6+
7+
title: ARM MHUv3 Mailbox Controller
8+
9+
maintainers:
10+
- Sudeep Holla <[email protected]>
11+
- Cristian Marussi <[email protected]>
12+
13+
description: |
14+
The Arm Message Handling Unit (MHU) Version 3 is a mailbox controller that
15+
enables unidirectional communications with remote processors through various
16+
possible transport protocols.
17+
The controller can optionally support a varying number of extensions that, in
18+
turn, enable different kinds of transport to be used for communication.
19+
Number, type and characteristics of each supported extension can be discovered
20+
dynamically at runtime.
21+
22+
Given the unidirectional nature of the controller, an MHUv3 mailbox controller
23+
is composed of a MHU Sender (MHUS) containing a PostBox (PBX) block and a MHU
24+
Receiver (MHUR) containing a MailBox (MBX) block, where
25+
26+
PBX is used to
27+
- Configure the MHU
28+
- Send Transfers to the Receiver
29+
- Optionally receive acknowledgment of a Transfer from the Receiver
30+
31+
MBX is used to
32+
- Configure the MHU
33+
- Receive Transfers from the Sender
34+
- Optionally acknowledge Transfers sent by the Sender
35+
36+
Both PBX and MBX need to be present and defined in the DT description if you
37+
need to establish a bidirectional communication, since you will have to
38+
acquire two distinct unidirectional channels, one for each block.
39+
40+
As a consequence both blocks needs to be represented separately and specified
41+
as distinct DT nodes in order to properly describe their resources.
42+
43+
Note that, though, thanks to the runtime discoverability, there is no need to
44+
identify the type of blocks with distinct compatibles.
45+
46+
Following are the MHUv3 possible extensions.
47+
48+
- Doorbell Extension (DBE): DBE defines a type of channel called a Doorbell
49+
Channel (DBCH). DBCH enables a single bit Transfer to be sent from the
50+
Sender to Receiver. The Transfer indicates that an event has occurred.
51+
When DBE is implemented, the number of DBCHs that an implementation of the
52+
MHU can support is between 1 and 128, numbered starting from 0 in ascending
53+
order and discoverable at run-time.
54+
Each DBCH contains 32 individual fields, referred to as flags, each of which
55+
can be used independently. It is possible for the Sender to send multiple
56+
Transfers at once using a single DBCH, so long as each Transfer uses
57+
a different flag in the DBCH.
58+
Optionally, data may be transmitted through an out-of-band shared memory
59+
region, wherein the MHU Doorbell is used strictly as an interrupt generation
60+
mechanism, but this is out of the scope of these bindings.
61+
62+
- FastChannel Extension (FCE): FCE defines a type of channel called a Fast
63+
Channel (FCH). FCH is intended for lower overhead communication between
64+
Sender and Receiver at the expense of determinism. An FCH allows the Sender
65+
to update the channel value at any time, regardless of whether the previous
66+
value has been seen by the Receiver. When the Receiver reads the channel's
67+
content it gets the last value written to the channel.
68+
FCH is considered lossy in nature, and means that the Sender has no way of
69+
knowing if, or when, the Receiver will act on the Transfer.
70+
FCHs are expected to behave as RAM which generates interrupts when writes
71+
occur to the locations within the RAM.
72+
When FCE is implemented, the number of FCHs that an implementation of the
73+
MHU can support is between 1-1024, if the FastChannel word-size is 32-bits,
74+
or between 1-512, when the FastChannel word-size is 64-bits.
75+
FCHs are numbered from 0 in ascending order.
76+
Note that the number of FCHs and the word-size are implementation defined,
77+
not configurable but discoverable at run-time.
78+
Optionally, data may be transmitted through an out-of-band shared memory
79+
region, wherein the MHU FastChannel is used as an interrupt generation
80+
mechanism which carries also a pointer to such out-of-band data, but this
81+
is out of the scope of these bindings.
82+
83+
- FIFO Extension (FE): FE defines a Channel type called a FIFO Channel (FFCH).
84+
FFCH allows a Sender to send
85+
- Multiple Transfers to the Receiver without having to wait for the
86+
previous Transfer to be acknowledged by the Receiver, as long as the
87+
FIFO has room for the Transfer.
88+
- Transfers which require the Receiver to provide acknowledgment.
89+
- Transfers which have in-band payload.
90+
In all cases, the data is guaranteed to be observed by the Receiver in the
91+
same order which the Sender sent it.
92+
When FE is implemented, the number of FFCHs that an implementation of the
93+
MHU can support is between 1 and 64, numbered starting from 0 in ascending
94+
order. The number of FFCHs, their depth (same for all implemented FFCHs) and
95+
the access-granularity are implementation defined, not configurable but
96+
discoverable at run-time.
97+
Optionally, additional data may be transmitted through an out-of-band shared
98+
memory region, wherein the MHU FIFO is used to transmit, in order, a small
99+
part of the payload (like a header) and a reference to the shared memory
100+
area holding the remaining, bigger, chunk of the payload, but this is out of
101+
the scope of these bindings.
102+
103+
properties:
104+
compatible:
105+
const: arm,mhuv3
106+
107+
reg:
108+
maxItems: 1
109+
110+
interrupts:
111+
minItems: 1
112+
maxItems: 74
113+
114+
interrupt-names:
115+
description: |
116+
The MHUv3 controller generates a number of events some of which are used
117+
to generate interrupts; as a consequence it can expose a varying number of
118+
optional PBX/MBX interrupts, representing the events generated during the
119+
operation of the various transport protocols associated with different
120+
extensions. All interrupts of the MHU are level-sensitive.
121+
Some of these optional interrupts are defined per-channel, where the
122+
number of channels effectively available is implementation defined and
123+
run-time discoverable.
124+
In the following names are enumerated using patterns, with per-channel
125+
interrupts implicitly capped at the maximum channels allowed by the
126+
specification for each extension type.
127+
For the sake of simplicity maxItems is anyway capped to a most plausible
128+
number, assuming way less channels would be implemented than actually
129+
possible.
130+
131+
The only mandatory interrupts on the MHU are:
132+
- combined
133+
- mbx-fch-xfer-<N> but only if mbx-fcgrp-xfer-<N> is not implemented.
134+
135+
minItems: 1
136+
maxItems: 74
137+
items:
138+
oneOf:
139+
- const: combined
140+
description: PBX/MBX Combined interrupt
141+
- const: combined-ffch
142+
description: PBX/MBX FIFO Combined interrupt
143+
- pattern: '^ffch-low-tide-[0-9]+$'
144+
description: PBX/MBX FIFO Channel <N> Low Tide interrupt
145+
- pattern: '^ffch-high-tide-[0-9]+$'
146+
description: PBX/MBX FIFO Channel <N> High Tide interrupt
147+
- pattern: '^ffch-flush-[0-9]+$'
148+
description: PBX/MBX FIFO Channel <N> Flush interrupt
149+
- pattern: '^mbx-dbch-xfer-[0-9]+$'
150+
description: MBX Doorbell Channel <N> Transfer interrupt
151+
- pattern: '^mbx-fch-xfer-[0-9]+$'
152+
description: MBX FastChannel <N> Transfer interrupt
153+
- pattern: '^mbx-fchgrp-xfer-[0-9]+$'
154+
description: MBX FastChannel <N> Group Transfer interrupt
155+
- pattern: '^mbx-ffch-xfer-[0-9]+$'
156+
description: MBX FIFO Channel <N> Transfer interrupt
157+
- pattern: '^pbx-dbch-xfer-ack-[0-9]+$'
158+
description: PBX Doorbell Channel <N> Transfer Ack interrupt
159+
- pattern: '^pbx-ffch-xfer-ack-[0-9]+$'
160+
description: PBX FIFO Channel <N> Transfer Ack interrupt
161+
162+
'#mbox-cells':
163+
description: |
164+
The first argument in the consumers 'mboxes' property represents the
165+
extension type, the second is for the channel number while the third
166+
depends on extension type.
167+
168+
Extension types constants are defined in <dt-bindings/arm/mhuv3-dt.h>.
169+
170+
Extension type for DBE is DBE_EXT and the third parameter represents the
171+
doorbell flag number to use.
172+
Extension type for FCE is FCE_EXT, third parameter unused.
173+
Extension type for FE is FE_EXT, third parameter unused.
174+
175+
mboxes = <&mhu DBE_EXT 0 5>; // DBE, Doorbell Channel Window 0, doorbell 5.
176+
mboxes = <&mhu DBE_EXT 7>; // DBE, Doorbell Channel Window 1, doorbell 7.
177+
mboxes = <&mhu FCE_EXT 0 0>; // FCE, FastChannel Window 0.
178+
mboxes = <&mhu FCE_EXT 3 0>; // FCE, FastChannel Window 3.
179+
mboxes = <&mhu FE_EXT 1 0>; // FE, FIFO Channel Window 1.
180+
mboxes = <&mhu FE_EXT 7 0>; // FE, FIFO Channel Window 7.
181+
const: 3
182+
183+
clocks:
184+
maxItems: 1
185+
186+
required:
187+
- compatible
188+
- reg
189+
- interrupts
190+
- interrupt-names
191+
- '#mbox-cells'
192+
193+
additionalProperties: false
194+
195+
examples:
196+
- |
197+
#include <dt-bindings/interrupt-controller/arm-gic.h>
198+
199+
soc {
200+
#address-cells = <2>;
201+
#size-cells = <2>;
202+
203+
mailbox@2aaa0000 {
204+
compatible = "arm,mhuv3";
205+
#mbox-cells = <3>;
206+
reg = <0 0x2aaa0000 0 0x10000>;
207+
clocks = <&clock 0>;
208+
interrupt-names = "combined", "pbx-dbch-xfer-ack-1",
209+
"ffch-high-tide-0";
210+
interrupts = <GIC_SPI 36 IRQ_TYPE_LEVEL_HIGH>,
211+
<GIC_SPI 37 IRQ_TYPE_LEVEL_HIGH>;
212+
};
213+
214+
mailbox@2ab00000 {
215+
compatible = "arm,mhuv3";
216+
#mbox-cells = <3>;
217+
reg = <0 0x2aab0000 0 0x10000>;
218+
clocks = <&clock 0>;
219+
interrupt-names = "combined", "mbx-dbch-xfer-1", "ffch-low-tide-0";
220+
interrupts = <GIC_SPI 35 IRQ_TYPE_LEVEL_HIGH>,
221+
<GIC_SPI 38 IRQ_TYPE_LEVEL_HIGH>,
222+
<GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH>;
223+
};
224+
};

Documentation/devicetree/bindings/mailbox/qcom,apcs-kpss-global.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ properties:
3030
- const: syscon
3131
- items:
3232
- enum:
33+
- qcom,msm8974-apcs-kpss-global
3334
- qcom,msm8976-apcs-kpss-global
3435
- const: qcom,msm8994-apcs-kpss-global
3536
- const: syscon

Documentation/devicetree/bindings/mailbox/qcom-ipcc.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ properties:
2828
- qcom,sa8775p-ipcc
2929
- qcom,sc7280-ipcc
3030
- qcom,sc8280xp-ipcc
31+
- qcom,sdx75-ipcc
3132
- qcom,sm6350-ipcc
3233
- qcom,sm6375-ipcc
3334
- qcom,sm8250-ipcc

MAINTAINERS

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13195,6 +13195,15 @@ F: Documentation/devicetree/bindings/mailbox/arm,mhuv2.yaml
1319513195
F: drivers/mailbox/arm_mhuv2.c
1319613196
F: include/linux/mailbox/arm_mhuv2_message.h
1319713197

13198+
MAILBOX ARM MHUv3
13199+
M: Sudeep Holla <[email protected]>
13200+
M: Cristian Marussi <[email protected]>
13201+
13202+
L: [email protected] (moderated for non-subscribers)
13203+
S: Maintained
13204+
F: Documentation/devicetree/bindings/mailbox/arm,mhuv3.yaml
13205+
F: drivers/mailbox/arm_mhuv3.c
13206+
1319813207
MAN-PAGES: MANUAL PAGES FOR LINUX -- Sections 2, 3, 4, 5, and 7
1319913208
M: Alejandro Colomar <[email protected]>
1320013209

drivers/mailbox/Kconfig

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,18 @@ config ARM_MHU_V2
2323
Say Y here if you want to build the ARM MHUv2 controller driver,
2424
which provides unidirectional mailboxes between processing elements.
2525

26+
config ARM_MHU_V3
27+
tristate "ARM MHUv3 Mailbox"
28+
depends on HAS_IOMEM || COMPILE_TEST
29+
depends on OF
30+
help
31+
Say Y here if you want to build the ARM MHUv3 controller driver,
32+
which provides unidirectional mailboxes between processing elements.
33+
34+
ARM MHUv3 controllers can implement a varying number of extensions
35+
that provides different means of transports: supported extensions
36+
will be discovered and possibly managed at probe-time.
37+
2638
config IMX_MBOX
2739
tristate "i.MX Mailbox"
2840
depends on ARCH_MXC || COMPILE_TEST
@@ -68,15 +80,6 @@ config OMAP2PLUS_MBOX
6880
OMAP2/3; or IPU, IVA HD and DSP in OMAP4/5. Say Y here if you
6981
want to use OMAP2+ Mailbox framework support.
7082

71-
config OMAP_MBOX_KFIFO_SIZE
72-
int "Mailbox kfifo default buffer size (bytes)"
73-
depends on OMAP2PLUS_MBOX
74-
default 256
75-
help
76-
Specify the default size of mailbox's kfifo buffers (bytes).
77-
This can also be changed at runtime (via the mbox_kfifo_size
78-
module parameter).
79-
8083
config ROCKCHIP_MBOX
8184
bool "Rockchip Soc Integrated Mailbox Support"
8285
depends on ARCH_ROCKCHIP || COMPILE_TEST

drivers/mailbox/Makefile

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ obj-$(CONFIG_ARM_MHU) += arm_mhu.o arm_mhu_db.o
99

1010
obj-$(CONFIG_ARM_MHU_V2) += arm_mhuv2.o
1111

12+
obj-$(CONFIG_ARM_MHU_V3) += arm_mhuv3.o
13+
1214
obj-$(CONFIG_IMX_MBOX) += imx-mailbox.o
1315

1416
obj-$(CONFIG_ARMADA_37XX_RWTM_MBOX) += armada-37xx-rwtm-mailbox.o

0 commit comments

Comments
 (0)