[PATCH 1/6] dt-bindings: Add Bao IPC shared memory driver binding
João Peixoto
jpeixoto at osyx.tech
Fri Aug 7 00:41:59 PDT 2026
On 1/7/26 16:46, Krzysztof Kozlowski wrote:
> On 07/01/2026 17:28,joaopeixoto at osyx.tech wrote:
>> From: João Peixoto<joaopeixoto at osyx.tech>
>>
>> This patch introduces a device tree binding for the Bao IPC Shared Memory
>> device, which enables communication between Bao hypervisor guests through
>> dedicated shared-memory regions.
>>
>> Signed-off-by: João Peixoto<joaopeixoto at osyx.tech>
> Respond to feedback instead of ignoring it. I don't see any changelog
> either.
>
> Last posting was LLM junk so I will not spend much time on this.
Apologies. v2 was sent without a changelog and, worse, threaded onto the v1
thread. Both are fixed: v3 is its own thread with a changelog in the cover
letter and under each patch's --- line. I have also gone back through every
comment from v1 and v2 and addressed them one by one; each is answered in
this thread and summarised in the cover letter.
> A nit, subject: drop second/last, redundant "binding". The "dt-bindings"
> prefix is already stating that these are bindings.
> See also:
> https://elixir.bootlin.com/linux/v6.17-rc3/source/Documentation/devicetree/bindings/submitting-patches.rst#L18
Done. The subject is now "dt-bindings: bao: add IPC shared-memory device".
> Do not attach (thread) your patchsets to some other threads (unrelated
> or older versions). This buries them deep in the mailbox and might
> interfere with applying entire sets. See also:
> https://elixir.bootlin.com/linux/v6.16-rc2/source/Documentation/process/submitting-patches.rst#L830
>
Understood, sorry. v3 is a fresh thread, not a reply to the previous
version.
>> ---
>> .../devicetree/bindings/bao/bao,ipcshmem.yaml | 82 +++++++++++++++++++
>> .../devicetree/bindings/vendor-prefixes.yaml | 2 +
>> 2 files changed, 84 insertions(+)
>> create mode 100644 Documentation/devicetree/bindings/bao/bao,ipcshmem.yaml
>>
>> diff --git a/Documentation/devicetree/bindings/bao/bao,ipcshmem.yaml b/Documentation/devicetree/bindings/bao/bao,ipcshmem.yaml
>> new file mode 100644
>> index 000000000000..fa91800db99a
>> --- /dev/null
>> +++ b/Documentation/devicetree/bindings/bao/bao,ipcshmem.yaml
>> @@ -0,0 +1,82 @@
>> +# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
>> +%YAML 1.2
>> +---
>> +$id:http://devicetree.org/schemas/bao/bao,ipcshmem.yaml#
>> +$schema:http://devicetree.org/meta-schemas/core.yaml#
>> +
>> +title: Bao IPC Shared Memory Device
> Nothing here is suitable for bindings, really. Simplified node for
> establishing channel of communication to hypervisor would be allowed.
> But multiple devices for that? No point. Develop proper interface with
> your hypervisor for all this.
>
>> +
>> +maintainers:
>> + - José Martins<jose at osyx.tech>
>> + - David Cerdeira<davidmcerdeira at osyx.tech>
>> + - João Peixoto<joaopeixoto at osyx.tech>
>> +
>> +description: |
>> + Shared memory based communication device for Bao hypervisor guests.
>> +
>> + The device describes a set of shared-memory regions used for
>> + communication between Bao guests. Each guest instantiating this
>> + device uses one region for reading data produced by a peer guest
>> + and another region for writing data consumed by that peer.
>> +
>> +properties:
>> + compatible:
>> + const: bao,ipcshmem
>> +
>> + reg:
>> + description:
>> + Shared memory region used for IPC.
>> + minItems: 2
>> + maxItems: 2
> Look at other bindings.
>
>> +
>> + read-channel:
>> + description: |
>> + Shared-memory sub-region that this guest reads from.
>> +
>> + This region is written by the peer Bao guest and read by the
>> + guest instantiating this device.
>> +
>> + Consists of two cells:
>> + - offset into the shared-memory region defined by `reg`
>> + - size in bytes
>> + $ref: /schemas/types.yaml#/definitions/uint32-array
>> + minItems: 2
>> + maxItems: 2
> Drop property, reg defines it.
>
>> +
>> + write-channel:
> Drop property, reg defines it.
>
>
>> + description: |
>> + Shared-memory sub-region that this guest writes to.
>> +
>> + This region is written by the guest instantiating this device and
>> + read by the peer Bao guest.
>> +
>> + Consists of two cells:
>> + - offset into the shared-memory region defined by `reg`
>> + - size in bytes
>> + $ref: /schemas/types.yaml#/definitions/uint32-array
>> + minItems: 2
>> + maxItems: 2
Reworked exactly as you suggested. The two channels are now described by reg
itself instead of by separate offset/size properties:
reg = <0xf0000000 0x2000>, /* region this guest reads from */
<0xf0002000 0x2000>; /* region this guest writes to */
reg-names = "read", "write";
read-channel and write-channel are gone; the driver derives both regions
from
reg/reg-names.
>> +
>> + id:
>> + description:
>> + Driver instance ID.
>> + $ref: /schemas/types.yaml#/definitions/uint32
> NAK, not allowed. Read writing bindings.
The bare "id" is dropped. The one value the driver still needs is the
hypervisor-assigned channel number it passes to the notify hypercall - that
is part of the guest<->hypervisor ABI, not a Linux instance number. It
is now
a vendor property, "bao,id", documented as "must match the identifier
configured for the channel in the hypervisor". If you would prefer this
expressed differently (e.g. derived from an alias), I am happy to change it,
please let me know.
>> +
>> +required:
>> + - compatible
>> + - reg
>> + - read-channel
>> + - write-channel
>> + - id
>> +
>> +additionalProperties: false
>> +
>> +examples:
>> + - |
>> + bao-ipc at f0000000 {
> Node names should be generic. See also an explanation and list of
> examples (not exhaustive) in DT specification:
> https://devicetree-specification.readthedocs.io/en/latest/chapter2-devicetree-basics.html#generic-names-recommendation
> If you cannot find a name matching your device, please check in kernel
> sources for similar cases or you can grow the spec (via pull request to
> DT spec repo).
The example node is now generic: "shmem at f0000000".
>> + compatible = "bao,ipcshmem";
>> + reg = <0x0 0xf0000000 0x0 0x00010000>;
>> + read-channel = <0x0 0x2000>;
>> + write-channel = <0x2000 0x2000>;
>> + id = <0>;
>> + };
>> diff --git a/Documentation/devicetree/bindings/vendor-prefixes.yaml b/Documentation/devicetree/bindings/vendor-prefixes.yaml
>> index c7591b2aec2a..c047fbd6b91a 100644
>> --- a/Documentation/devicetree/bindings/vendor-prefixes.yaml
>> +++ b/Documentation/devicetree/bindings/vendor-prefixes.yaml
>> @@ -223,6 +223,8 @@ patternProperties:
>> description: Shenzhen AZW Technology Co., Ltd.
>> "^baikal,.*":
>> description: BAIKAL ELECTRONICS, JSC
>> + "^bao,.*":
>> + description: Bao Hypervisor
> Vendor prefixes are for companies. What is the company here? What is
> stock ticker or website?
>
>
>> "^bananapi,.*":
>> description: BIPAI KEJI LIMITED
>> "^beacon,.*":
"bao" is the Bao Project, an open-source static-partitioning hypervisor
(https://github.com/bao-project), not a single company - analogous to the
existing "qemu" and "virtio" prefixes, which likewise name a software
interface rather than a vendor. I have updated the vendor-prefixes entry
accordingly. If you would rather namespace this under the maintaining
company
(https://www.osyx.tech/) instead of the project, say the word and I will
switch it.
> Best regards,
> Krzysztof
More information about the linux-arm-kernel
mailing list