diff mbox series

[2/7] dt-bindings: rng: add binding for Rockchip RK3588 RNG

Message ID 20250130-rk3588-trng-submission-v1-2-97ff76568e49@collabora.com (mailing list archive)
State New
Headers show
Series RK3588 Hardware Random Number Generator Driver | expand

Commit Message

Nicolas Frattaroli Jan. 30, 2025, 4:31 p.m. UTC
The Rockchip RK3588 SoC has two hardware RNGs accessible to the
non-secure world: an RNG in the Crypto IP, and a standalone RNG that is
new to this SoC.

Add a binding for this new standalone RNG.

The RNG is capable of firing an interrupt when entropy is ready, but
all known driver implementations choose to poll instead for performance
reasons. Hence, make the interrupt optional, as it may disappear in
future hardware revisions entirely and certainly isn't needed for the
hardware to function.

The reset is optional as well, as the RNG functions without an explicit
reset. Rockchip's downstream driver does not use the reset at all,
indicating that their engineers have deemed it unnecessary.

Signed-off-by: Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
---
 .../bindings/rng/rockchip,rk3588-rng.yaml          | 61 ++++++++++++++++++++++
 MAINTAINERS                                        |  2 +
 2 files changed, 63 insertions(+)

Comments

Conor Dooley Jan. 30, 2025, 6:42 p.m. UTC | #1
On Thu, Jan 30, 2025 at 05:31:16PM +0100, Nicolas Frattaroli wrote:
> The Rockchip RK3588 SoC has two hardware RNGs accessible to the
> non-secure world: an RNG in the Crypto IP, and a standalone RNG that is
> new to this SoC.
> 
> Add a binding for this new standalone RNG.
> 
> The RNG is capable of firing an interrupt when entropy is ready, but
> all known driver implementations choose to poll instead for performance
> reasons. Hence, make the interrupt optional, as it may disappear in
> future hardware revisions entirely and certainly isn't needed for the
> hardware to function.
> 
> The reset is optional as well, as the RNG functions without an explicit
> reset. Rockchip's downstream driver does not use the reset at all,
> indicating that their engineers have deemed it unnecessary.
> 
> Signed-off-by: Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
> ---
>  .../bindings/rng/rockchip,rk3588-rng.yaml          | 61 ++++++++++++++++++++++
>  MAINTAINERS                                        |  2 +
>  2 files changed, 63 insertions(+)
> 
> diff --git a/Documentation/devicetree/bindings/rng/rockchip,rk3588-rng.yaml b/Documentation/devicetree/bindings/rng/rockchip,rk3588-rng.yaml
> new file mode 100644
> index 0000000000000000000000000000000000000000..dff843fa4bf9d5704bbcd106398328588d80b02d
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/rng/rockchip,rk3588-rng.yaml
> @@ -0,0 +1,61 @@
> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/rng/rockchip,rk3588-rng.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: Rockchip RK3588 TRNG
> +
> +description: True Random Number Generator on Rockchip RK3588 SoC
> +
> +maintainers:
> +  - Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
> +
> +properties:
> +  compatible:
> +    enum:
> +      - rockchip,rk3588-rng
> +
> +  reg:
> +    maxItems: 1
> +
> +  clocks:
> +    items:
> +      - description: TRNG AHB clock
> +
> +  # Optional, not used by some driver implementations
> +  interrupts:
> +    maxItems: 1
> +
> +  # Optional, hardware works without explicit reset

These sorts of comments are not needed, "required" conveys this
information.

> +  resets:
> +    maxItems: 1
> +
> +required:
> +  - compatible
> +  - reg
> +  - clocks
> +
> +additionalProperties: false
> +
> +examples:
> +  - |
> +    #include <dt-bindings/clock/rockchip,rk3588-cru.h>
> +    #include <dt-bindings/interrupt-controller/arm-gic.h>
> +    #include <dt-bindings/interrupt-controller/irq.h>
> +    #include <dt-bindings/reset/rockchip,rk3588-cru.h>
> +    bus {
> +      #address-cells = <2>;
> +      #size-cells = <2>;
> +
> +      rng@fe378000 {
> +        compatible = "rockchip,rk3588-rng";
> +        reg = <0x0 0xfe378000 0x0 0x200>;
> +        interrupts = <GIC_SPI 400 IRQ_TYPE_LEVEL_HIGH 0>;
> +        clocks = <&scmi_clk SCMI_HCLK_SECURE_NS>;
> +        resets = <&scmi_reset SCMI_SRST_H_TRNG_NS>;
> +        status = "disabled";
> +      };
> +    };
> +
> +...
> diff --git a/MAINTAINERS b/MAINTAINERS
> index bc8ce7af3303f747e0ef028e5a7b29b0bbba99f4..7daf9bfeb0cb4e9e594b809012c7aa243b0558ae 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -20420,8 +20420,10 @@ F:	include/uapi/linux/rkisp1-config.h
>  ROCKCHIP RK3568 RANDOM NUMBER GENERATOR SUPPORT
>  M:	Daniel Golle <daniel@makrotopia.org>
>  M:	Aurelien Jarno <aurelien@aurel32.net>

> +M:	Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
^^
tbh, not really sure this part of the change should be in this patch

>  S:	Maintained
>  F:	Documentation/devicetree/bindings/rng/rockchip,rk3568-rng.yaml
> +F:	Documentation/devicetree/bindings/rng/rockchip,rk3588-rng.yaml
>  F:	drivers/char/hw_random/rockchip-rng.c
>  
>  ROCKCHIP RASTER 2D GRAPHIC ACCELERATION UNIT DRIVER
> 
> -- 
> 2.48.1
>
diff mbox series

Patch

diff --git a/Documentation/devicetree/bindings/rng/rockchip,rk3588-rng.yaml b/Documentation/devicetree/bindings/rng/rockchip,rk3588-rng.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..dff843fa4bf9d5704bbcd106398328588d80b02d
--- /dev/null
+++ b/Documentation/devicetree/bindings/rng/rockchip,rk3588-rng.yaml
@@ -0,0 +1,61 @@ 
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/rng/rockchip,rk3588-rng.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Rockchip RK3588 TRNG
+
+description: True Random Number Generator on Rockchip RK3588 SoC
+
+maintainers:
+  - Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
+
+properties:
+  compatible:
+    enum:
+      - rockchip,rk3588-rng
+
+  reg:
+    maxItems: 1
+
+  clocks:
+    items:
+      - description: TRNG AHB clock
+
+  # Optional, not used by some driver implementations
+  interrupts:
+    maxItems: 1
+
+  # Optional, hardware works without explicit reset
+  resets:
+    maxItems: 1
+
+required:
+  - compatible
+  - reg
+  - clocks
+
+additionalProperties: false
+
+examples:
+  - |
+    #include <dt-bindings/clock/rockchip,rk3588-cru.h>
+    #include <dt-bindings/interrupt-controller/arm-gic.h>
+    #include <dt-bindings/interrupt-controller/irq.h>
+    #include <dt-bindings/reset/rockchip,rk3588-cru.h>
+    bus {
+      #address-cells = <2>;
+      #size-cells = <2>;
+
+      rng@fe378000 {
+        compatible = "rockchip,rk3588-rng";
+        reg = <0x0 0xfe378000 0x0 0x200>;
+        interrupts = <GIC_SPI 400 IRQ_TYPE_LEVEL_HIGH 0>;
+        clocks = <&scmi_clk SCMI_HCLK_SECURE_NS>;
+        resets = <&scmi_reset SCMI_SRST_H_TRNG_NS>;
+        status = "disabled";
+      };
+    };
+
+...
diff --git a/MAINTAINERS b/MAINTAINERS
index bc8ce7af3303f747e0ef028e5a7b29b0bbba99f4..7daf9bfeb0cb4e9e594b809012c7aa243b0558ae 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -20420,8 +20420,10 @@  F:	include/uapi/linux/rkisp1-config.h
 ROCKCHIP RK3568 RANDOM NUMBER GENERATOR SUPPORT
 M:	Daniel Golle <daniel@makrotopia.org>
 M:	Aurelien Jarno <aurelien@aurel32.net>
+M:	Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
 S:	Maintained
 F:	Documentation/devicetree/bindings/rng/rockchip,rk3568-rng.yaml
+F:	Documentation/devicetree/bindings/rng/rockchip,rk3588-rng.yaml
 F:	drivers/char/hw_random/rockchip-rng.c
 
 ROCKCHIP RASTER 2D GRAPHIC ACCELERATION UNIT DRIVER