Re: [PATCH v4 01/19] dt-bindings: crypto: add Rambus CryptoManager Hub

Conor Dooley <[email protected]>
Newsgroups org.infradead.lists.linux-riscv,org.kernel.vger.linux-api,org.kernel.vger.linux-crypto,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-doc,org.kernel.vger.linux-kernel,org.kernel.vger.linux-kselftest
Message-ID <20260826-unwritten-marshland-47cdf3c17cad@spud>
On Tue, Aug 25, 2026 at 03:15:20PM -0700, Alex Ousherovitch wrote:
> Add device tree binding schema for the Rambus CryptoManager Hub (CMH)
> hardware crypto accelerator.  The binding describes the parent
> SoC-level node with its SIC register region and one queue@N child
> node per mailbox the host owns, each carrying a reg (mailbox instance
> index), an optional interrupt, VCQ ring geometry (rambus,num-slots /
> rambus,slot-stride-bytes) and a rambus,cores affinity list.  Which crypto cores
> are present is discovered from the SIC CORE_ENABLE register at probe,
> not described in the device tree.
> 
> Register the 'rambus' vendor prefix for Rambus Inc.
> 
> Signed-off-by: Alex Ousherovitch <[email protected]>
> Co-developed-by: Saravanakrishnan Krishnamoorthy <[email protected]>
> Signed-off-by: Saravanakrishnan Krishnamoorthy <[email protected]>
> ---
>  .../bindings/crypto/rambus,cmh-v1030.yaml     | 194 ++++++++++++++++++
>  .../devicetree/bindings/vendor-prefixes.yaml  |   2 +
>  2 files changed, 196 insertions(+)
>  create mode 100644 Documentation/devicetree/bindings/crypto/rambus,cmh-v1030.yaml
> 
> diff --git a/Documentation/devicetree/bindings/crypto/rambus,cmh-v1030.yaml b/Documentation/devicetree/bindings/crypto/rambus,cmh-v1030.yaml
> new file mode 100644
> index 000000000000..d9598b0f3bbc
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/crypto/rambus,cmh-v1030.yaml
> @@ -0,0 +1,194 @@
> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/crypto/rambus,cmh-v1030.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: Rambus CryptoManager Hub (CMH) Hardware Crypto Accelerator
> +
> +maintainers:
> +  - Alex Ousherovitch <[email protected]>
> +  - Saravanakrishnan Krishnamoorthy <[email protected]>
> +  - Joel Wittenauer <[email protected]>
> +
> +description: |
> +  The Rambus CryptoManager Hub (CMH) is a hardware cryptographic accelerator
> +  accessed via a mailbox-based VCQ (Virtual Command Queue) interface.  The
> +  host writes VCQ command sequences into per-mailbox DMA queue buffers and
> +  rings a doorbell; the CMH eSW processes them and signals completion via
> +  interrupt.
> +
> +  The management host statically partitions the hardware mailboxes across
> +  the SoC's host interfaces at integration time; the set of mailboxes a
> +  given host owns is therefore fixed and not runtime-discoverable (a
> +  mailbox locked to a host reads as unavailable in the SIC availability
> +  register).  Each owned mailbox is described by a child node.  Which
> +  crypto cores are present is a fixed silicon-build property indicated by
> +  the SIC CORE_ENABLE register, so cores are not described in the device
> +  tree.
> +
> +  CMH gates access to a locked mailbox by a hardware HOST ID presented on
> +  the bus with every access, permitting only the owning host's ID.  An
> +  integration must present a single, stable HOST ID for all accesses to a
> +  given mailbox, independent of the issuing CPU (relevant on SMP hosts
> +  whose interconnect encodes the issuing CPU in the HOST ID).
> +
> +properties:
> +  compatible:
> +    const: rambus,cmh-v1030
> +    description:
> +      Identifies the CryptoManager Hub v1.030 IP revision (register map and
> +      command ABI).  A specific SoC integration should list its own
> +      "<vendor>,<soc>-cmh" compatible first with "rambus,cmh-v1030" as a
> +      fallback; that extended form will be added when such a platform is
> +      upstreamed.

This commentary should just not be here.
Instead, do what's been done in sifive,clint.yaml for the clint2. I
don't feel great about suggesting that, and it feels like it's becoming
more common - although maybe that's a good thing because it means IP
vendors are being more proactive about upstreaming.

> +
> +  reg:
> +    maxItems: 1
> +    description:
> +      SIC (System Interface Controller) MMIO region.  The registers of
> +      mailbox instance N are at offset N * 0x1000 within this region.
> +
> +  clocks:
> +    minItems: 1
> +    items:
> +      - description: Main functional clock ("core").
> +      - description:
> +          Half-rate "core-div2" clock (present only on configurations with
> +          side-channel-protected cores) or the "rt" real-time tick clock.
> +      - description: Real-time tick clock ("rt") for the internal timer.
> +
> +  clock-names:
> +    oneOf:
> +      - items:
> +          - const: core
> +      - items:
> +          - const: core
> +          - const: core-div2
> +      - items:
> +          - const: core
> +          - const: rt
> +      - items:
> +          - const: core
> +          - const: core-div2
> +          - const: rt
> +
> +  reset-gpios:
> +    maxItems: 1
> +    description:
> +      Host-controlled reset for the CryptoManager Hub.  The hub has two
> +      external, active-low reset inputs -- a power-on reset and a hard
> +      reset; where a board routes one of them to a host GPIO, that line is
> +      described here.
> +
> +  "#address-cells":
> +    const: 1
> +
> +  "#size-cells":
> +    const: 0
> +
> +patternProperties:
> +  "^queue@[0-9a-f]+$":
> +    type: object
> +    description:
> +      One node per hardware mailbox (VCQ command queue) this host owns.
> +      The set of owned mailboxes is fixed by the management host at
> +      integration time and enumerated here.
> +    properties:
> +      reg:
> +        maxItems: 1
> +        description:
> +          0-based mailbox instance index.  The instance's registers are
> +          at reg * 0x1000 within the SIC region.
> +
> +      interrupts:
> +        maxItems: 1
> +        description: Completion/error interrupt for this mailbox.
> +
> +      rambus,num-slots:
> +        $ref: /schemas/types.yaml#/definitions/uint32
> +        enum: [2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192,
> +               16384, 32768]
> +        default: 64
> +        description:
> +          Number of VCQ ring slots for this mailbox's command queue in
> +          host DMA memory.  This is a per-board, per-mailbox host-memory
> +          ring geometry -- boards built around the same SoC (hence the
> +          same compatible) may use different ring sizes, so it is
> +          described per mailbox rather than derived from the compatible.
> +
> +      rambus,slot-stride-bytes:
> +        $ref: /schemas/types.yaml#/definitions/uint32
> +        enum: [128, 256, 512, 1024]
> +        default: 512
> +        description:
> +          Stride in bytes between consecutive VCQ ring slots for this
> +          mailbox's command queue.  Like rambus,num-slots this is a
> +          per-board host-memory ring geometry, not derived from the
> +          compatible.
> +
> +      rambus,cores:
> +        $ref: /schemas/types.yaml#/definitions/uint32-array
> +        items:
> +          enum: [0x02, 0x03, 0x04, 0x05, 0x08, 0x09, 0x0a, 0x18]
> +        description: |
> +          Core-affinity list: the hardware core IDs whose work is
> +          dispatched to this mailbox.  A core ID may appear on at most one
> +          mailbox.  Cores not listed on any mailbox are load-balanced
> +          across all mailboxes.  Optional (default: none -- the mailbox
> +          only serves the load-balanced pool).
> +
> +          Because each core instance has a distinct ID, separate
> +          instances of the same core type can be pinned to different
> +          mailboxes.
> +
> +          Core IDs:
> +            0x02 HC, 0x03 AES, 0x04 SM4, 0x05 SM3,
> +            0x08 HCQ, 0x09 QSE, 0x0a PKE, 0x18 CCP.

You could just make this a string array, and then you'd not need this
mapping of unintelligible hex values. Of course then your driver has to
do it, but I'd rather see understandable (and portable, since a new
revision could change the IDs) values in DT.

> +
> +    required:
> +      - reg
> +
> +    additionalProperties: false
> +
> +required:
> +  - compatible
> +  - reg
> +  - "#address-cells"
> +  - "#size-cells"

Surely clocks are also mandatory?

pw-bot: changes-requested

Cheers,
Conor.

> +
> +additionalProperties: false
> +
> +examples:
> +  - |
> +    soc {
> +        #address-cells = <2>;
> +        #size-cells = <2>;
> +
> +        crypto@a4800000 {
> +            compatible = "rambus,cmh-v1030";
> +            reg = <0x0 0xa4800000 0x0 0x41000>;
> +            clocks = <&cmh_core_clk>;
> +            clock-names = "core";
> +            #address-cells = <1>;
> +            #size-cells = <0>;
> +
> +            /* Fast symmetric cores dedicated to mailbox 0:
> +             * HC 0x02, AES 0x03, SM4 0x04, SM3 0x05, CCP 0x18 */
> +            queue@0 {
> +                reg = <0>;
> +                interrupts = <1>;
> +                rambus,cores = <0x02 0x03 0x04 0x05 0x18>;
> +            };
> +
> +            /* Slow asymmetric/PQC cores dedicated to mailbox 1:
> +             * HCQ 0x08, QSE 0x09, PKE 0x0a */
> +            queue@1 {
> +                reg = <1>;
> +                interrupts = <2>;
> +                rambus,cores = <0x08 0x09 0x0a>;
> +                rambus,num-slots = <64>;
> +                rambus,slot-stride-bytes = <512>;
> +            };
> +        };
> +    };
> diff --git a/Documentation/devicetree/bindings/vendor-prefixes.yaml b/Documentation/devicetree/bindings/vendor-prefixes.yaml
> index 396044f368e7..8b1a8f0a673d 100644
> --- a/Documentation/devicetree/bindings/vendor-prefixes.yaml
> +++ b/Documentation/devicetree/bindings/vendor-prefixes.yaml
> @@ -1371,6 +1371,8 @@ patternProperties:
>      description: RaidSonic Technology GmbH
>    "^ralink,.*":
>      description: Mediatek/Ralink Technology Corp.
> +  "^rambus,.*":
> +    description: Rambus Inc.
>    "^ramtron,.*":
>      description: Ramtron International
>    "^raspberrypi,.*":
> -- 
> 2.43.7
>

_______________________________________________
linux-riscv mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/linux-riscv
signature.asc (application/pgp-signature, 228 B)
-----BEGIN PGP SIGNATURE-----

iHUEABYKAB0WIQRh246EGq/8RLhDjO14tDGHoIJi0gUCao8cGAAKCRB4tDGHoIJi
0sjsAQCs5O4ETXRJy6kouRnk1/OQzmyoUsRPrpeb9rM/21hfJAD9EpAJQfU5xwoJ
RERZNwRIPTsmZQlDVlrThF4+t3HV5wM=
=dVOj
-----END PGP SIGNATURE-----
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.