Skip to content

Commit 373014b

Browse files
committed
Merge tag 'mailbox-v5.10' of git://git.linaro.org/landing-teams/working/fujitsu/integration
Pull mailbox updates from Jassi Brar: - arm: implementation of mhu as a doorbell driver and conversion of dt-bindings to json-schema - mediatek: fix platform_get_irq error handling - bcm: convert tasklets to use new tasklet_setup api - core: fix race cause by hrtimer starting inappropriately * tag 'mailbox-v5.10' of git://git.linaro.org/landing-teams/working/fujitsu/integration: mailbox: avoid timer start from callback maiblox: mediatek: Fix handling of platform_get_irq() error mailbox: arm_mhu: Add ARM MHU doorbell driver mailbox: arm_mhu: Match only if compatible is "arm,mhu" dt-bindings: mailbox: add doorbell support to ARM MHU dt-bindings: mailbox : arm,mhu: Convert to Json-schema mailbox: bcm: convert tasklets to use new tasklet_setup() API
2 parents f66179c + c7dacf5 commit 373014b

File tree

8 files changed

+506
-57
lines changed

8 files changed

+506
-57
lines changed
Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,135 @@
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,mhu.yaml#
5+
$schema: http://devicetree.org/meta-schemas/core.yaml#
6+
7+
title: ARM MHU Mailbox Controller
8+
9+
maintainers:
10+
- Jassi Brar <[email protected]>
11+
12+
description: |
13+
The ARM's Message-Handling-Unit (MHU) is a mailbox controller that has 3
14+
independent channels/links to communicate with remote processor(s). MHU links
15+
are hardwired on a platform. A link raises interrupt for any received data.
16+
However, there is no specified way of knowing if the sent data has been read
17+
by the remote. This driver assumes the sender polls STAT register and the
18+
remote clears it after having read the data. The last channel is specified to
19+
be a 'Secure' resource, hence can't be used by Linux running NS.
20+
21+
The MHU hardware also allows operations in doorbell mode. The MHU drives the
22+
interrupt signal using a 32-bit register, with all 32-bits logically ORed
23+
together. It provides a set of registers to enable software to set, clear and
24+
check the status of each of the bits of this register independently. The use
25+
of 32 bits per interrupt line enables software to provide more information
26+
about the source of the interrupt. For example, each bit of the register can
27+
be associated with a type of event that can contribute to raising the
28+
interrupt. Each of the 32-bits can be used as "doorbell" to alert the remote
29+
processor.
30+
31+
# We need a select here so we don't match all nodes with 'arm,primecell'
32+
select:
33+
properties:
34+
compatible:
35+
contains:
36+
enum:
37+
- arm,mhu
38+
- arm,mhu-doorbell
39+
required:
40+
- compatible
41+
42+
properties:
43+
compatible:
44+
oneOf:
45+
- description: Data transfer mode
46+
items:
47+
- const: arm,mhu
48+
- const: arm,primecell
49+
50+
- description: Doorbell mode
51+
items:
52+
- const: arm,mhu-doorbell
53+
- const: arm,primecell
54+
55+
56+
reg:
57+
maxItems: 1
58+
59+
interrupts:
60+
items:
61+
- description: low-priority non-secure
62+
- description: high-priority non-secure
63+
- description: Secure
64+
maxItems: 3
65+
66+
clocks:
67+
maxItems: 1
68+
69+
clock-names:
70+
items:
71+
- const: apb_pclk
72+
73+
'#mbox-cells':
74+
description: |
75+
Set to 1 in data transfer mode and represents index of the channel.
76+
Set to 2 in doorbell mode and represents index of the channel and doorbell
77+
number.
78+
enum: [ 1, 2 ]
79+
80+
required:
81+
- compatible
82+
- reg
83+
- interrupts
84+
- '#mbox-cells'
85+
86+
additionalProperties: false
87+
88+
examples:
89+
# Data transfer mode.
90+
- |
91+
soc {
92+
#address-cells = <2>;
93+
#size-cells = <2>;
94+
95+
mhuA: mailbox@2b1f0000 {
96+
#mbox-cells = <1>;
97+
compatible = "arm,mhu", "arm,primecell";
98+
reg = <0 0x2b1f0000 0 0x1000>;
99+
interrupts = <0 36 4>, /* LP-NonSecure */
100+
<0 35 4>, /* HP-NonSecure */
101+
<0 37 4>; /* Secure */
102+
clocks = <&clock 0 2 1>;
103+
clock-names = "apb_pclk";
104+
};
105+
106+
mhu_client_scb: scb@2e000000 {
107+
compatible = "fujitsu,mb86s70-scb-1.0";
108+
reg = <0 0x2e000000 0 0x4000>;
109+
mboxes = <&mhuA 1>; /* HP-NonSecure */
110+
};
111+
};
112+
113+
# Doorbell mode.
114+
- |
115+
soc {
116+
#address-cells = <2>;
117+
#size-cells = <2>;
118+
119+
mhuB: mailbox@2b2f0000 {
120+
#mbox-cells = <2>;
121+
compatible = "arm,mhu-doorbell", "arm,primecell";
122+
reg = <0 0x2b2f0000 0 0x1000>;
123+
interrupts = <0 36 4>, /* LP-NonSecure */
124+
<0 35 4>, /* HP-NonSecure */
125+
<0 37 4>; /* Secure */
126+
clocks = <&clock 0 2 1>;
127+
clock-names = "apb_pclk";
128+
};
129+
130+
mhu_client_scpi: scpi@2f000000 {
131+
compatible = "arm,scpi";
132+
reg = <0 0x2f000000 0 0x200>;
133+
mboxes = <&mhuB 1 4>; /* HP-NonSecure, 5th doorbell */
134+
};
135+
};

Documentation/devicetree/bindings/mailbox/arm-mhu.txt

Lines changed: 0 additions & 43 deletions
This file was deleted.

drivers/mailbox/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ obj-$(CONFIG_MAILBOX) += mailbox.o
55

66
obj-$(CONFIG_MAILBOX_TEST) += mailbox-test.o
77

8-
obj-$(CONFIG_ARM_MHU) += arm_mhu.o
8+
obj-$(CONFIG_ARM_MHU) += arm_mhu.o arm_mhu_db.o
99

1010
obj-$(CONFIG_IMX_MBOX) += imx-mailbox.o
1111

drivers/mailbox/arm_mhu.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,9 @@ static int mhu_probe(struct amba_device *adev, const struct amba_id *id)
113113
struct device *dev = &adev->dev;
114114
int mhu_reg[MHU_CHANS] = {MHU_LP_OFFSET, MHU_HP_OFFSET, MHU_SEC_OFFSET};
115115

116+
if (!of_device_is_compatible(dev->of_node, "arm,mhu"))
117+
return -ENODEV;
118+
116119
/* Allocate memory for device */
117120
mhu = devm_kzalloc(dev, sizeof(*mhu), GFP_KERNEL);
118121
if (!mhu)

0 commit comments

Comments
 (0)