From: Michal Wilczynski <m.wilczynski@samsung.com>
To: Samuel Holland <samuel.holland@sifive.com>
Cc: linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org,
devicetree@vger.kernel.org,
Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>,
drew@pdp7.com, guoren@kernel.org, wefu@redhat.com,
jassisinghbrar@gmail.com, robh@kernel.org, krzk+dt@kernel.org,
conor+dt@kernel.org, paul.walmsley@sifive.com,
palmer@dabbelt.com, aou@eecs.berkeley.edu,
m.szyprowski@samsung.com
Subject: Re: [PATCH v4 2/3] dt-bindings: mailbox: Add thead,th1520-mailbox bindings
Date: Sun, 20 Oct 2024 09:32:51 +0200 [thread overview]
Message-ID: <5707ef09-c447-40ec-ba3a-44630d165f63@samsung.com> (raw)
In-Reply-To: <f1c1af8c-18e0-433d-a61c-90080919378f@sifive.com>
On 10/16/24 01:14, Samuel Holland wrote:
> Hi Michal,
>
> On 2024-10-14 7:33 AM, Michal Wilczynski wrote:
>> Add bindings for the mailbox controller. This work is based on the vendor
>> kernel. [1]
>>
>> Link: https://protect2.fireeye.com/v1/url?k=deccc9a8-815707cc-decd42e7-000babda0201-ff79d4aaff73f36c&q=1&e=7028c1ef-1c3d-4e17-b7ed-76d362b80caf&u=https%3A%2F%2Fgithub.com%2Frevyos%2Fthead-kernel.git [1]
>>
>> Signed-off-by: Michal Wilczynski <m.wilczynski@samsung.com>
>> Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
>> ---
>> .../bindings/mailbox/thead,th1520-mbox.yaml | 80 +++++++++++++++++++
>> MAINTAINERS | 1 +
>> 2 files changed, 81 insertions(+)
>> create mode 100644 Documentation/devicetree/bindings/mailbox/thead,th1520-mbox.yaml
>>
>> diff --git a/Documentation/devicetree/bindings/mailbox/thead,th1520-mbox.yaml b/Documentation/devicetree/bindings/mailbox/thead,th1520-mbox.yaml
>> new file mode 100644
>> index 000000000000..12507c426691
>> --- /dev/null
>> +++ b/Documentation/devicetree/bindings/mailbox/thead,th1520-mbox.yaml
>> @@ -0,0 +1,80 @@
>> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
>> +%YAML 1.2
>> +---
>> +$id: https://protect2.fireeye.com/v1/url?k=7fcda92a-2056674e-7fcc2265-000babda0201-c5d541bdd4cc5f35&q=1&e=7028c1ef-1c3d-4e17-b7ed-76d362b80caf&u=http%3A%2F%2Fdevicetree.org%2Fschemas%2Fmailbox%2Fthead%2Cth1520-mbox.yaml%23
>> +$schema: https://protect2.fireeye.com/v1/url?k=068c7881-5917b6e5-068df3ce-000babda0201-b045bd7290e64f0e&q=1&e=7028c1ef-1c3d-4e17-b7ed-76d362b80caf&u=http%3A%2F%2Fdevicetree.org%2Fmeta-schemas%2Fcore.yaml%23
>> +
>> +title: T-head TH1520 Mailbox Controller
>> +
>> +description:
>> + The T-head mailbox controller enables communication and coordination between
>> + cores within the SoC by passing messages (e.g., data, status, and control)
>> + through mailbox channels. It also allows one core to signal another processor
>> + using interrupts via the Interrupt Controller Unit (ICU).
>> +
>> +maintainers:
>> + - Michal Wilczynski <m.wilczynski@samsung.com>
>> +
>> +properties:
>> + compatible:
>> + const: thead,th1520-mbox
>> +
>> + reg:
>> + items:
>> + - description: Mailbox local base address
>> + - description: Remote ICU 0 base address
>> + - description: Remote ICU 1 base address
>> + - description: Remote ICU 2 base address
>
>>From the SoC documentation, it looks like these are four different instances of
> the same IP block, each containing 4 unidirectional mailbox channels and an
> interrupt output. So these should be four separate nodes, no? The C910 would
> receive on channels 1-3 of instance 0, and send on channel 0 of instances 1-3.
>
Hi, and thank you for your review.
I wanted to take some time to familiarize myself with the device tree
documentation and review best practices for mailbox drivers before
responding.
Upon reviewing the Linux device tree documentation, I couldn’t find any
specific rule that mandates having one device node per IP block in the
hardware. The T-Head manual is more focused on the hardware from a
programmer’s perspective rather than describing how exaclty the ICU's
are implemented in the HW. The device tree documentation provides
guidelines for how hardware blocks should be represented, but it doesn't
impose a strict requirement for separate device nodes per hardware
block, especially when it comes to devices like mailbox controllers.
Technically, your suggestion to create separate nodes for each ICU
instance is possible. However, doing so would require additional
complexity in the driver, as it would need to handle each node
individually. For instance, the driver would need to request interrupts
only in the case of mailbox910_t_0, while handling other device nodes
like mailbox910_t_1, mailbox910_t_2, and mailbox910_t_3 separately.
In my opinion, this approach would add unnecessary complexity to the
driver code. The current approach — using a single device node for the
mailbox controller and utilizing channels to steer messages seems to
align better with existing best practices for mailbox drivers. Many
mailbox drivers create a single mailbox controller and leverage multiple
channels for different communication paths, which simplifies both the
device tree and the driver implementation.
I hope this explanation clarifies my perspective, and I’d like to
propose keeping the current design as it stands.
>> +
>> + reg-names:
>> + items:
>> + - const: local
>> + - const: remote-icu0
>> + - const: remote-icu1
>> + - const: remote-icu2
>> +
>> + interrupts:
>> + maxItems: 1
>> +
>> + '#mbox-cells':
>> + const: 2
>> + description: |
>> + Specifies the number of cells needed to encode the mailbox specifier.
>> + The mailbox specifier consists of two cells:
>> + - Destination CPU ID.
>> + - Type, which can be one of the following:
>> + - 0:
>> + - TX & RX channels share the same channel.
>> + - Equipped with 7 info registers to facilitate data sharing.
>> + - Supports IRQ for signaling.
>> + - 1:
>> + - TX & RX operate as doorbell channels.
>> + - Does not have dedicated info registers.
>> + - Lacks ACK support.
>
> It appears that these types are not describing hardware, but the protocol used
> by the Linux driver to glue two unidirectional hardware channels together to
> make a virtual bidirectional channel. This is really the responsibility of the
> mailbox client to know what protocol it needs, not the devicetree.
>
The protocols in question are actually handled by the firmware running
on the other cores, like the E902. I couldn’t find the firmware source
code, as it’s distributed as binary blobs. For example, the firmware
binary [1] gets loaded by U-Boot at specific addresses.
For the current case — communicating with the E902 core — the Type ‘0’
protocol is all we need. So, I don’t see any issue in removing the
second cell, since we’re only using one protocol here.
[1] -
https://git.beagleboard.org/beaglev-ahead/xuantie-ubuntu/-/blob/48bc51286483257f153ba58813bb601267d0f087/bins/light_aon_fpga.bin
Thanks,
Michał
> Regards,
> Samuel
>
>> +
>> +required:
>> + - compatible
>> + - reg
>> + - reg-names
>> + - interrupts
>> + - '#mbox-cells'
>> +
>> +additionalProperties: false
>> +
>> +examples:
>> + - |
>> +
>> + soc {
>> + #address-cells = <2>;
>> + #size-cells = <2>;
>> + mailbox@ffffc38000 {
>> + compatible = "thead,th1520-mbox";
>> + reg = <0xff 0xffc38000 0x0 0x4000>,
>> + <0xff 0xffc44000 0x0 0x1000>,
>> + <0xff 0xffc4c000 0x0 0x1000>,
>> + <0xff 0xffc54000 0x0 0x1000>;
>> + reg-names = "local", "remote-icu0", "remote-icu1", "remote-icu2";
>> + interrupts = <28>;
>> + #mbox-cells = <2>;
>> + };
>> + };
>> diff --git a/MAINTAINERS b/MAINTAINERS
>> index 0655c6ba5435..7401c7cb6533 100644
>> --- a/MAINTAINERS
>> +++ b/MAINTAINERS
>> @@ -19951,6 +19951,7 @@ L: linux-riscv@lists.infradead.org
>> S: Maintained
>> T: git https://protect2.fireeye.com/v1/url?k=9b23b6b0-c4b878d4-9b223dff-000babda0201-68366f7c65442b8f&q=1&e=7028c1ef-1c3d-4e17-b7ed-76d362b80caf&u=https%3A%2F%2Fgithub.com%2Fpdp7%2Flinux.git
>> F: Documentation/devicetree/bindings/clock/thead,th1520-clk-ap.yaml
>> +F: Documentation/devicetree/bindings/mailbox/thead,th1520-mbox.yaml
>> F: arch/riscv/boot/dts/thead/
>> F: drivers/clk/thead/clk-th1520-ap.c
>> F: drivers/mailbox/mailbox-th1520.c
>
>
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
next prev parent reply other threads:[~2024-10-20 7:33 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <CGME20241014123409eucas1p2a3a3f085c0630073326ca299a870f3ee@eucas1p2.samsung.com>
2024-10-14 12:33 ` [PATCH v4 0/3] Introduce support for T-head TH1520 Mailbox Michal Wilczynski
2024-10-14 12:33 ` [PATCH v4 1/3] mailbox: Introduce support for T-head TH1520 Mailbox driver Michal Wilczynski
2024-10-14 12:33 ` [PATCH v4 2/3] dt-bindings: mailbox: Add thead,th1520-mailbox bindings Michal Wilczynski
2024-10-15 23:14 ` Samuel Holland
2024-10-16 6:31 ` Krzysztof Kozlowski
2024-10-20 7:31 ` Michal Wilczynski
2024-10-20 7:32 ` Michal Wilczynski [this message]
2024-10-14 12:33 ` [PATCH v4 3/3] riscv: dts: thead: Add mailbox node Michal Wilczynski
2024-10-14 14:57 ` Emil Renner Berthing
2024-10-15 18:44 ` Michal Wilczynski
2024-10-17 11:20 ` Emil Renner Berthing
2024-10-14 18:31 ` [PATCH v4 0/3] Introduce support for T-head TH1520 Mailbox Drew Fustini
2024-10-15 22:03 ` Michal Wilczynski
2024-10-16 18:08 ` Drew Fustini
2024-10-22 11:54 ` Michal Wilczynski
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5707ef09-c447-40ec-ba3a-44630d165f63@samsung.com \
--to=m.wilczynski@samsung.com \
--cc=aou@eecs.berkeley.edu \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=drew@pdp7.com \
--cc=guoren@kernel.org \
--cc=jassisinghbrar@gmail.com \
--cc=krzk+dt@kernel.org \
--cc=krzysztof.kozlowski@linaro.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-riscv@lists.infradead.org \
--cc=m.szyprowski@samsung.com \
--cc=palmer@dabbelt.com \
--cc=paul.walmsley@sifive.com \
--cc=robh@kernel.org \
--cc=samuel.holland@sifive.com \
--cc=wefu@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox