devicetree.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 0/7] RK3588 Hardware Random Number Generator Driver
@ 2025-02-04 15:35 Nicolas Frattaroli
  2025-02-04 15:35 ` [PATCH v2 1/7] dt-bindings: reset: Add SCMI reset IDs for RK3588 Nicolas Frattaroli
                   ` (8 more replies)
  0 siblings, 9 replies; 11+ messages in thread
From: Nicolas Frattaroli @ 2025-02-04 15:35 UTC (permalink / raw)
  To: Philipp Zabel, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
	Heiko Stuebner, Olivia Mackall, Herbert Xu, Daniel Golle,
	Aurelien Jarno
  Cc: Sebastian Reichel, kernel, devicetree, linux-arm-kernel,
	linux-rockchip, linux-kernel, linux-crypto, Nicolas Frattaroli,
	XiaoDong Huang, Conor Dooley, Lin Jinhan

This series adds support for the Rockchip RK3588's standalone hardware
random number generator to the existing mainline rockchip-rng driver.

The RK3588 has several hardware random number generators, one in each
the secure-world and non-secure-world crypto accelerator, and one
standalone one in each the secure-world and non-secure-world, so 4
hwrngs in total. This series adds support for the standalone hwrng,
which is an entirely new IP on this SoC and distinct from the one in the
Crypto IP.

The decision to integrate this into the existing rockchip-rng driver was
made based on a few factors:

1. The driver is fairly small.
2. While not much code is shared, some code is, specifically relating to
   power management, the hwrng interface and the probe function.
3. I don't want users to figure out why "CONFIG_HW_RANDOM_ROCKCHIP"
   doesn't enable the RK3588 one, and I really don't see a reason to
   build without both of them considering the other RK3588 TRNG (for
   which there is not yet a driver iirc) *does* share code with the
   existing rockchip-rng driver.

Here are the rngtest5 results from this new driver on my board:

  user@debian-rockchip-rock5b-rk3588:~$ cat /sys/class/misc/hw_random/rng_current 
  rockchip-rng
  user@debian-rockchip-rock5b-rk3588:~$ sudo cat /dev/hwrng | rngtest -c 10000 
  [...]
  rngtest: bits received from input: 200000032
  rngtest: FIPS 140-2 successes: 9990
  rngtest: FIPS 140-2 failures: 10
  rngtest: FIPS 140-2(2001-10-10) Monobit: 1
  rngtest: FIPS 140-2(2001-10-10) Poker: 0
  rngtest: FIPS 140-2(2001-10-10) Runs: 5
  rngtest: FIPS 140-2(2001-10-10) Long run: 4
  rngtest: FIPS 140-2(2001-10-10) Continuous run: 0
  rngtest: input channel speed: (min=212.255; avg=29089.272; max=19531250.000)Kibits/s
  rngtest: FIPS tests speed: (min=64.005; avg=102.494; max=153.818)Mibits/s
  rngtest: Program run time: 11292340 microseconds

As you can see, the quality of the entropy is quite good, and the
throughput is an acceptable 29 Mibit/s.

The series starts out with two patches for the bindings. The bindings
are separate from the rockchip,rk3568-rng bindings, as the required
properties differ. The SCMI reset ID numbers are needed because mainline
uses a different reset numbering scheme, but TF-A uses the downstream
numbering scheme as far as I know. The TRNG must be reset through SCMI.

Next up are two cleanup patches for the existing driver. Even if a
decision is made to split the drivers for whatever reason, these two
patches should be used in the rk3568-rng driver as they get rid of small
peculiarities in the code without meaningfully changing how the driver
works.

Next up is the main driver patch that adds support for the new TRNG. As
the driver was developed by reading the downstream vendor code for this
particular device and reworking it, I've included the downstream vendor
developer who wrote the driver as a Co-developed-by tag with their
existing downstream sign-off.

The penultimate patch adds the node to the rk3588-base.dtsi, and
enables it.

The final patch adds myself to the MAINTAINERS of this driver and these
bindings.

Signed-off-by: Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
---
Changes in v2:
- Drop mailmap patch
- driver: restore the OF matching to how it was, and change soc_data to
  const
- dts: get rid of the board specific DTS enablement and instead enable
  it in rk3588-base
- bindings: drop the change of adding myself to maintainers from the
  bindings patch, make it a separate patch
- bindings: get rid of the comments
- bindings: set status = "okay" in the example
- bindings: make interrupts property required
- Add a patch to add me to the MAINTAINERS for this driver/binding
- Link to v1: https://lore.kernel.org/r/20250130-rk3588-trng-submission-v1-0-97ff76568e49@collabora.com

---
Nicolas Frattaroli (7):
      dt-bindings: reset: Add SCMI reset IDs for RK3588
      dt-bindings: rng: add binding for Rockchip RK3588 RNG
      hwrng: rockchip: store dev pointer in driver struct
      hwrng: rockchip: eliminate some unnecessary dereferences
      hwrng: rockchip: add support for rk3588's standalone TRNG
      arm64: dts: rockchip: Add rng node to RK3588
      MAINTAINERS: add Nicolas Frattaroli to rockchip-rng maintainers

 .../bindings/rng/rockchip,rk3588-rng.yaml          |  60 +++++
 MAINTAINERS                                        |   2 +
 arch/arm64/boot/dts/rockchip/rk3588-base.dtsi      |   9 +
 drivers/char/hw_random/Kconfig                     |   3 +-
 drivers/char/hw_random/rockchip-rng.c              | 250 ++++++++++++++++++---
 include/dt-bindings/reset/rockchip,rk3588-cru.h    |  41 +++-
 6 files changed, 335 insertions(+), 30 deletions(-)
---
base-commit: 72deda0abee6e705ae71a93f69f55e33be5bca5c
change-id: 20250130-rk3588-trng-submission-055255c96689

Best regards,
-- 
Nicolas Frattaroli <nicolas.frattaroli@collabora.com>


^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2025-02-16 15:34 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-02-04 15:35 [PATCH v2 0/7] RK3588 Hardware Random Number Generator Driver Nicolas Frattaroli
2025-02-04 15:35 ` [PATCH v2 1/7] dt-bindings: reset: Add SCMI reset IDs for RK3588 Nicolas Frattaroli
2025-02-04 15:35 ` [PATCH v2 2/7] dt-bindings: rng: add binding for Rockchip RK3588 RNG Nicolas Frattaroli
2025-02-04 19:26   ` Conor Dooley
2025-02-04 15:35 ` [PATCH v2 3/7] hwrng: rockchip: store dev pointer in driver struct Nicolas Frattaroli
2025-02-04 15:35 ` [PATCH v2 4/7] hwrng: rockchip: eliminate some unnecessary dereferences Nicolas Frattaroli
2025-02-04 15:35 ` [PATCH v2 5/7] hwrng: rockchip: add support for rk3588's standalone TRNG Nicolas Frattaroli
2025-02-04 15:35 ` [PATCH v2 6/7] arm64: dts: rockchip: Add rng node to RK3588 Nicolas Frattaroli
2025-02-04 15:35 ` [PATCH v2 7/7] MAINTAINERS: add Nicolas Frattaroli to rockchip-rng maintainers Nicolas Frattaroli
2025-02-16  5:25 ` [PATCH v2 0/7] RK3588 Hardware Random Number Generator Driver Herbert Xu
2025-02-16 15:33 ` (subset) " Heiko Stuebner

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).