diff mbox series

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

Message ID 20210907145501.69161-3-sven@svenpeter.dev (mailing list archive)
State New, archived
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. 7, 2021, 8:26 p.m. UTC | #2
Hi,


On Tue, Sep 7, 2021, at 20:56, 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.

> 
> > +  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.

> 
> > +  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.



Sven
Alyssa Rosenzweig Sept. 7, 2021, 8:48 p.m. UTC | #3
> > > +      - 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.

> > > +  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 
Sven Peter Sept. 8, 2021, 3:36 p.m. UTC | #4
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 
Mark Kettenis Sept. 11, 2021, 1:16 p.m. UTC | #5
> 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