diff mbox series

[2/3] dt-bindings: mailbox: Add Apple mailbox bindings

Message ID 20210907145501.69161-3-sven@svenpeter.dev
State New
Headers show
Series Apple Mailbox Controller support | expand

Commit Message

Sven Peter Sept. 7, 2021, 2:55 p.m. UTC
Apple mailbox controller are found on the M1 and are used for
communication with various co-processors.

Signed-off-by: Sven Peter <sven@svenpeter.dev>
---
 .../bindings/mailbox/apple,mailbox.yaml       | 81 +++++++++++++++++++
 MAINTAINERS                                   |  1 +
 2 files changed, 82 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/mailbox/apple,mailbox.yaml

Comments

Alyssa Rosenzweig Sept. 7, 2021, 6:56 p.m. UTC | #1
> +      - description:
> +          M3 mailboxes are an older variant with a slightly different MMIO
> +          interface still found on the M1.
> +        items:
> +          - const: apple,t8103-m3-mailbox

Would be nice to document an example of where an M3 mailbox is found.

> +  interrupts:
> +    minItems: 4
> +    items:
> +      - description: send fifo is empty interrupt
> +      - description: send fifo is not empty interrupt
> +      - description: receive fifo is empty interrupt
> +      - description: receive fifo is not empty interrupt
> +
> +  interrupt-names:
> +    minItems: 4
> +    items:
> +      - const: send-empty
> +      - const: send-not-empty
> +      - const: recv-empty
> +      - const: recv-not-empty

If the names became not-constant the asprintf thing goes away, not sure
that's better or worse.

> +  clocks:
> +    description:
> +      Reference to the clock gate phandle(s) if required for this mailbox.
> +      Optional since not all mailboxes are attached to a clock gate.

Do we do anything with the clocks at this point?
Sven Peter Sept. 8, 2021, 3:36 p.m. UTC | #2
On Tue, Sep 7, 2021, at 22:48, Alyssa Rosenzweig wrote:
> > > > +      - description:

> > > > +          M3 mailboxes are an older variant with a slightly different MMIO

> > > > +          interface still found on the M1.

> > > > +        items:

> > > > +          - const: apple,t8103-m3-mailbox

> > > 

> > > Would be nice to document an example of where an M3 mailbox is found.

> > 

> > Sure, I can add a comment that this is used for the coprocessor controlling Thunderbolt.

> 

> That raises another issue ... how do we know the M3 code works at all

> without TB support yet? It "looks" correct but some of the IRQ handling

> stuff is nontrivial.


Enabling the mailbox interface just requires a few clocks to be ungated.
Then I injected messages manually to verify that the code works.
In addition I also brought up parts of the Thunderbolt controller which
then allowed the co-processor on the other end of the mailbox to boot.
After that I was also able to successfully talk to that processor using
the same protocol used by most other processors.


> 

> > > > +  interrupts:

> > > > +    minItems: 4

> > > > +    items:

> > > > +      - description: send fifo is empty interrupt

> > > > +      - description: send fifo is not empty interrupt

> > > > +      - description: receive fifo is empty interrupt

> > > > +      - description: receive fifo is not empty interrupt

> > > > +

> > > > +  interrupt-names:

> > > > +    minItems: 4

> > > > +    items:

> > > > +      - const: send-empty

> > > > +      - const: send-not-empty

> > > > +      - const: recv-empty

> > > > +      - const: recv-not-empty

> > > 

> > > If the names became not-constant the asprintf thing goes away, not sure

> > > that's better or worse.

> > 

> > I'm not sure I understand your comment here. This property just gives a name

> > to the interrupts so that they can be referenced by that instead of a magic

> > number between 0 and 4 in the driver.

> 

> D'oh, right, retracted. (Both this comment and the corresponding comment

> on the driver itself). Sorry about that.

> 

> > > > +  clocks:

> > > > +    description:

> > > > +      Reference to the clock gate phandle(s) if required for this mailbox.

> > > > +      Optional since not all mailboxes are attached to a clock gate.

> > > 

> > > Do we do anything with the clocks at this point?

> > > 

> > 

> > The device tree bindings describe the hardware (as best as we can without proper

> > documentation) and some of these mailboxes have clock gates which need to be turned

> > on before accessing their MMIO. This driver already tries to do that and works fine

> > with the downstream clock driver(s) we have.

> 

> Good enough for me, thanks for clarifying 👍

> 

> Commit r-b, though Rob will surely point out problems and I'll need to

> rereview 😉

> 


Thanks!



Sven
Mark Kettenis Sept. 11, 2021, 1:16 p.m. UTC | #3
> From: Sven Peter <sven@svenpeter.dev>

> Date: Tue,  7 Sep 2021 16:55:00 +0200

> 

> Apple mailbox controller are found on the M1 and are used for

> communication with various co-processors.

> 

> Signed-off-by: Sven Peter <sven@svenpeter.dev>

> ---

>  .../bindings/mailbox/apple,mailbox.yaml       | 81 +++++++++++++++++++

>  MAINTAINERS                                   |  1 +

>  2 files changed, 82 insertions(+)

>  create mode 100644 Documentation/devicetree/bindings/mailbox/apple,mailbox.yaml


Reviewed-by: Mark Kettenis <kettenis@openbsd.org>
diff mbox series

Patch

diff --git a/Documentation/devicetree/bindings/mailbox/apple,mailbox.yaml b/Documentation/devicetree/bindings/mailbox/apple,mailbox.yaml
new file mode 100644
index 000000000000..360d8a162cc5
--- /dev/null
+++ b/Documentation/devicetree/bindings/mailbox/apple,mailbox.yaml
@@ -0,0 +1,81 @@ 
+# SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/mailbox/apple,mailbox.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Apple Mailbox Controller
+
+maintainers:
+  - Hector Martin <marcan@marcan.st>
+  - Sven Peter <sven@svenpeter.dev>
+
+description:
+  The Apple mailbox consists of two FIFOs used to exchange 64+32 bit
+  messages between the main CPU and a co-processor. Multiple instances
+  of this mailbox can be found on Apple SoCs.
+  One of the two FIFOs is used to send data to a co-processor while the other
+  FIFO is used for the other direction.
+  Various clients implement different IPC protocols based on these simple
+  messages and shared memory buffers.
+
+properties:
+  compatible:
+    oneOf:
+      - description:
+          ASC mailboxes are the most common variant found on the M1.
+        items:
+          - const: apple,t8103-asc-mailbox
+
+      - description:
+          M3 mailboxes are an older variant with a slightly different MMIO
+          interface still found on the M1.
+        items:
+          - const: apple,t8103-m3-mailbox
+
+  reg:
+    maxItems: 1
+
+  interrupts:
+    minItems: 4
+    items:
+      - description: send fifo is empty interrupt
+      - description: send fifo is not empty interrupt
+      - description: receive fifo is empty interrupt
+      - description: receive fifo is not empty interrupt
+
+  interrupt-names:
+    minItems: 4
+    items:
+      - const: send-empty
+      - const: send-not-empty
+      - const: recv-empty
+      - const: recv-not-empty
+
+  clocks:
+    description:
+      Reference to the clock gate phandle(s) if required for this mailbox.
+      Optional since not all mailboxes are attached to a clock gate.
+
+  "#mbox-cells":
+    const: 0
+
+required:
+  - compatible
+  - reg
+  - interrupts
+  - interrupt-names
+  - "#mbox-cells"
+
+additionalProperties: false
+
+examples:
+  - |
+        mailbox@77408000 {
+                compatible = "apple,t8103-asc-mailbox";
+                reg = <0x77408000 0x4000>;
+                interrupts = <1 583 4>, <1 584 4>, <1 585 4>, <1 586 4>;
+                interrupt-names = "send-empty", "send-not-empty",
+                 "recv-empty", "recv-not-empty";
+                #mbox-cells = <0>;
+        };
diff --git a/MAINTAINERS b/MAINTAINERS
index cad1289793db..47de27282c98 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -1720,6 +1720,7 @@  C:	irc://irc.oftc.net/asahi-dev
 T:	git https://github.com/AsahiLinux/linux.git
 F:	Documentation/devicetree/bindings/arm/apple.yaml
 F:	Documentation/devicetree/bindings/interrupt-controller/apple,aic.yaml
+F:	Documentation/devicetree/bindings/mailbox/apple,mailbox.yaml
 F:	Documentation/devicetree/bindings/pinctrl/apple,pinctrl.yaml
 F:	arch/arm64/boot/dts/apple/
 F:	drivers/irqchip/irq-apple-aic.c