[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