Skip to contentSkip to conversation

hwrng: add hwrng support for Rockchip RK3568

PATCH Superseded Daniel Golle 6 participants 12 messages Jun 23, 2024 – Jun 26, 2024

Subsystems (5)

v4 of 9 Superseded Latest is v9 →

lore
Share & tools
lore

Daniel Golle

author maintainer
#0 lore raw

v4 cover hwrng: add hwrng support for Rockchip RK3568

Rockchip SoCs used to have a random number generator as part of their crypto device, and support for it has to be added to the corresponding driver.

However newer Rockchip SoCs like the RK3568 have an independent True Random Number Generator device. This patchset adds a driver for it and enable it in the device tree.

v3 -> v4:
* Patch 1: minor corrections
- fix Rokchip -> Rockchip typo
- change commit title as requested

* Patch 2: improved error handling and resource management
- Always use writel() instead of writel_relaxed()
- Use pm_runtime_resume_and_get
- Correctly return error code in rk_rng_read()
- Make use of devm_reset_control_array_get_exclusive
- Use devm_pm_runtime_enable and there by get rid of rk_rng_remove()

* Patch 3:
- Move node to conform with ordering by address

v2 -> v3: patch adopted by Daniel Golle
* Patch 1: address comments of Krzysztof Kozlowski, add MAINTAINERS
- improved description
- meaningful clock-names
- add entry in MAINTAINERS files

* Patch 2: numerous code-style improvements
- drop misleading rk_rng_write_ctl(), simplify I/O writes
- drop unused TRNG_RNG_DOUT_[1-7] macros
- handle error handling for pm_runtime_get_sync()
- use memcpy_fromio() instead of open coding for-loop
- some minor white-spaces fixes

* Patch 3:
- use clock-names as defined in dt-bindings

v1 -> v2:
* Patch 1: fix issues reported by Rob Herring and Krzysztof Kozlowski:
- Rename rockchip-rng.yaml into rockchip,rk3568-rng.yaml
- Fix binding title and description
- Fix compatible property
- Rename clocks and add the corresponding descriptions
- Drop reset-names
- Add a bus definition with #address-cells and #size-cells to the example.

* Patch 2: fix issue reported by kernel test robot <[email protected]>
- Do not read the random registers as big endian, looking at the RK3568 TRM this is actually not needed. This fixes a sparse warning.

* Patch 3: unchanged

Aurelien Jarno (3):
dt-bindings: rng: Add Rockchip RNG bindings
hwrng: add Rockchip SoC hwrng driver
arm64: dts: rockchip: add DT entry for RNG to RK356x

 .../bindings/rng/rockchip,rk3568-rng.yaml     |  61 +++++
 MAINTAINERS                                   |   7 +
 arch/arm64/boot/dts/rockchip/rk356x.dtsi      |   9 +
 drivers/char/hw_random/Kconfig                |  14 ++
 drivers/char/hw_random/Makefile               |   1 +
 drivers/char/hw_random/rockchip-rng.c         | 222 ++++++++++++++++++
 6 files changed, 314 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/rng/rockchip,rk3568-rng.yaml
 create mode 100644 drivers/char/hw_random/rockchip-rng.c
Signature · 1 line
2.45.2
author maintainer
#1 lore raw

PATCH v4 1/3 dt-bindings: rng: Add Rockchip RNG bindings

From: Aurelien Jarno <[email protected]>

Add the True Random Number Generator on the Rockchip RK3568 SoC.

---
 .../bindings/rng/rockchip,rk3568-rng.yaml     | 61 +++++++++++++++++++
 MAINTAINERS                                   |  6 ++
 2 files changed, 67 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/rng/rockchip,rk3568-rng.yaml
Documentation/devicetree/bindings/rng/rockchip,rk3568-rng.yaml new file +61 -0
new file mode 100644
index 000000000000..ad3648b96f82
@@ -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,rk3568-rng.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Rockchip TRNG
+
+description: True Random Number Generator on Rockchip RK3568 SoC
+
+maintainers:
+  - Aurelien Jarno <[email protected]>
+  - Daniel Golle <[email protected]>
+
+properties:
+  compatible:
+    enum:
+      - rockchip,rk3568-rng
+
+  reg:
+    maxItems: 1
+
+  clocks:
+    items:
+      - description: TRNG clock
+      - description: TRNG AHB clock
+
+  clock-names:
+    items:
+      - const: core
+      - const: ahb
+
+  resets:
+    maxItems: 1
+
+required:
+  - compatible
+  - reg
+  - clocks
+  - clock-names
+  - resets
+
+additionalProperties: false
+
+examples:
+  - |
+    #include <dt-bindings/clock/rk3568-cru.h>
+    bus {
+      #address-cells = <2>;
+      #size-cells = <2>;
+
+      rng@fe388000 {
+        compatible = "rockchip,rk3568-rng";
+        reg = <0x0 0xfe388000 0x0 0x4000>;
+        clocks = <&cru CLK_TRNG_NS>, <&cru HCLK_TRNG_NS>;
+        clock-names = "core", "ahb";
+        resets = <&cru SRST_TRNG_NS>;
+      };
+    };
+
+...
MAINTAINERS +6 -0
index 807feae089c4..5cd3bc2b034f 100644
@@ -19498,6 +19498,12 @@ F:	Documentation/userspace-api/media/v4l/metafmt-rkisp1.rst
 F:	drivers/media/platform/rockchip/rkisp1
 F:	include/uapi/linux/rkisp1-config.h
 
+ROCKCHIP RANDOM NUMBER GENERATOR SUPPORT
+M:	Daniel Golle <[email protected]>
+M:	Aurelien Jarno <[email protected]>
+S:	Maintained
+F:	Documentation/devicetree/bindings/rng/rockchip,rk3568-rng.yaml
+
 ROCKCHIP RASTER 2D GRAPHIC ACCELERATION UNIT DRIVER
 M:	Jacob Chen <[email protected]>
 M:	Ezequiel Garcia <[email protected]>
Signature · 1 line
2.45.2
#2 lore raw

Re: [PATCH v4 1/3] dt-bindings: rng: Add Rockchip RNG bindings

Quoted 6 lines · Daniel Golle

From: Aurelien Jarno <[email protected]>

Add the True Random Number Generator on the Rockchip RK3568 SoC.

My comments from v2, which I reminded at v3, were not addressed.

Respond to each of them and acknowledge that you are going to implement the change.

Best regards,
Krzysztof

author maintainer
#3 lore raw

Re: [PATCH v4 1/3] dt-bindings: rng: Add Rockchip RNG bindings

Hi Krzysztof,

thank you for your patiente and repeated review of this series.

Quoted 5 lines · Krzysztof Kozlowski
Quoted 4 lines · Daniel Golle

From: Aurelien Jarno <[email protected]>

Add the True Random Number Generator on the Rockchip RK3568 SoC.

Quoted 7 lines
Quoted 2 lines

My comments from v2, which I reminded at v3, were not addressed.

Respond to each of them and acknowledge that you are going to implement the change.

Your comments to v1which I'm aware of are:
https://patchwork.kernel.org/comment/25087874/

Quoted 2 lines
Quoted 1 line

+++ b/Documentation/devicetree/bindings/rng/rockchip-rng.yaml

Filename matching compatible, so "rockchip,rk3568-rng.yaml"

I've changed the filename.

Quoted 3 lines
Quoted 1 line

+title: Rockchip TRNG bindings

Drop "bindings"

I've changed the title accordingly (now: "Rockchip TRNG" in v4).

Quoted 5 lines

Review

Quoted 2 lines
(quoted diff) +2 -0
+description:
+  This driver interface with the True Random Number Generator present in some

Drop "This driver interface" and make it a proper sentence. Bindings are not about drivers.

This has been addressed by Aurelien and further improved by me in v3.

Quoted 4 lines

Review

Quoted 2 lines
(quoted diff) +2 -0
+  clocks:
+    minItems: 2

Drop minItems.

Aurelien did that in v2.

Quoted 7 lines

Documentation/devicetree/bindings/rng/rockchip,rk3568-rng.yaml

Quoted 4 lines
Documentation/devicetree/bindings/rng/rockchip,rk3568-rng.yaml new file +4 -0
+  clock-names:
+    items:
+      - const: clk
+      - const: hclk

You need to explain what are these in clocks. Also you need better names. A clock name "clk" is useless.

Clocks now have meaningful names and descriptions.

Quoted 5 lines

Review

Quoted 3 lines
(quoted diff) +3 -0
+  reset-names:
+    items:
+      - const: reset

Drop reset-names entirely, not useful.

Aurelien did so in v2.

Your comments to v2 which I'm aware of are:
https://patchwork.kernel.org/comment/25111597/

Quoted 7 lines
Quoted 1 line

Add the RNG bindings for the RK3568 SoC from Rockchip

Use subject prefixes matching the subsystem (git log --oneline -- ...), so it is rng, not RNG. Also, you are not adding all-Rockhip RNG but a specific device.

Subject: drop second, redundant "bindings".

I've changed 'RNG' into 'rng' in the subject and spelled it out in the commit message.

Quoted 3 lines
Quoted 1 line

+description: True Random Number Generator for some Rockchip SoCs

s/for some Rockchip SoCs/on Rokchip RK3568 SoC/

I've adopted your suggestion in v3 and then fixed the typo in v4.

Quoted 9 lines

Documentation/devicetree/bindings/rng/rockchip,rk3568-rng.yaml

Quoted 5 lines
Documentation/devicetree/bindings/rng/rockchip,rk3568-rng.yaml new file +4 -0
+  clock-names:
+    items:
+      - const: trng_clk
+      - const: trng_hclk

These are too vague names. Everything is a clk in clock-names, so no need usually to add it as name suffix. Give them some descriptive names, e.g. core and ahb.

If changed the names to the suggested 'core' and 'ahb'.

Before sending another round of patches, just to make sure we are on the same page, please confirm that what remains is
Subject: dt-bindings: rng: Add Rockchip RNG bindings
which not only should be 'rng' in small letters but also name the exact chip, eg.:
Subject: dt-bindings: rng: add TRNG on the Rockchip RK3568 SoC

If there are any other comments you made which I'm not aware of, please point me to them.

Cheers

Daniel

#4 lore raw

Re: [PATCH v4 1/3] dt-bindings: rng: Add Rockchip RNG bindings

Quoted 13 lines · Daniel Golle

Hi Krzysztof,

thank you for your patiente and repeated review of this series.

Quoted 8 lines · Krzysztof Kozlowski
Quoted 6 lines · Daniel Golle

From: Aurelien Jarno <[email protected]>

Add the True Random Number Generator on the Rockchip RK3568 SoC.

Quoted 7 lines
Quoted 4 lines

My comments from v2, which I reminded at v3, were not addressed.

Respond to each of them and acknowledge that you are going to implement the change.

Your comments to v1which I'm aware of are:
https://patchwork.kernel.org/comment/25087874/

We talk about comments from v2, not v1.

Quoted 50 lines
Quoted 3 lines
Quoted 2 lines

+++ b/Documentation/devicetree/bindings/rng/rockchip-rng.yaml

Filename matching compatible, so "rockchip,rk3568-rng.yaml"

I've changed the filename.

Quoted 3 lines
Quoted 1 line

+title: Rockchip TRNG bindings

Drop "bindings"

I've changed the title accordingly (now: "Rockchip TRNG" in v4).

Quoted 5 lines

Review

Quoted 2 lines
(quoted diff) +2 -0
+description:
+  This driver interface with the True Random Number Generator present in some

Drop "This driver interface" and make it a proper sentence. Bindings are not about drivers.

This has been addressed by Aurelien and further improved by me in v3.

Quoted 4 lines

Review

Quoted 2 lines
(quoted diff) +2 -0
+  clocks:
+    minItems: 2

Drop minItems.

Aurelien did that in v2.

Quoted 7 lines

Documentation/devicetree/bindings/rng/rockchip,rk3568-rng.yaml

Quoted 4 lines
Documentation/devicetree/bindings/rng/rockchip,rk3568-rng.yaml new file +4 -0
+  clock-names:
+    items:
+      - const: clk
+      - const: hclk

You need to explain what are these in clocks. Also you need better names. A clock name "clk" is useless.

Clocks now have meaningful names and descriptions.

Quoted 5 lines

Review

Quoted 3 lines
(quoted diff) +3 -0
+  reset-names:
+    items:
+      - const: reset

Drop reset-names entirely, not useful.

Aurelien did so in v2.

Your comments to v2 which I'm aware of are:
https://patchwork.kernel.org/comment/25111597/

Quoted 1 line
Quoted 1 line

Add the RNG bindings for the RK3568 SoC from Rockchip

Quoted 8 lines
Quoted 5 lines

Use subject prefixes matching the subsystem (git log --oneline -- ...), so it is rng, not RNG. Also, you are not adding all-Rockhip RNG but a specific device.

Subject: drop second, redundant "bindings".

I've changed 'RNG' into 'rng' in the subject and spelled it out in the commit message.

And where did you drop the redundant bindings? You just quoted the sentence and ignored it.

Best regards,
Krzysztof

author maintainer
#5 lore raw

PATCH v4 2/3 hwrng: add Rockchip SoC hwrng driver

In reply to Daniel Golle

From: Aurelien Jarno <[email protected]>

Rockchip SoCs used to have a random number generator as part of their crypto device, and support for it has to be added to the corresponding driver. However newer Rockchip SoCs like the RK356x have an independent True Random Number Generator device. This patch adds a driver for it, greatly inspired from the downstream driver.

The TRNG device does not seem to have a signal conditionner and the FIPS 140-2 test returns a lot of failures. They can be reduced by increasing RK_RNG_SAMPLE_CNT, in a tradeoff between quality and speed. This value has been adjusted to get ~90% of successes and the quality value has been set accordingly.

---
 MAINTAINERS                           |   1 +
 drivers/char/hw_random/Kconfig        |  14 ++
 drivers/char/hw_random/Makefile       |   1 +
 drivers/char/hw_random/rockchip-rng.c | 222 ++++++++++++++++++++++++++
 4 files changed, 238 insertions(+)
 create mode 100644 drivers/char/hw_random/rockchip-rng.c
MAINTAINERS +1 -0
index 5cd3bc2b034f..580536b72d25 100644
@@ -19503,6 +19503,7 @@ M:	Daniel Golle <[email protected]>
 M:	Aurelien Jarno <[email protected]>
 S:	Maintained
 F:	Documentation/devicetree/bindings/rng/rockchip,rk3568-rng.yaml
+F:	drivers/char/hw_random/rockchip-rng.c
 
 ROCKCHIP RASTER 2D GRAPHIC ACCELERATION UNIT DRIVER
 M:	Jacob Chen <[email protected]>
drivers/char/hw_random/Kconfig +14 -0
index 442c40efb200..2b62cd08f91a 100644
@@ -573,6 +573,20 @@ config HW_RANDOM_JH7110
 	  To compile this driver as a module, choose M here.
 	  The module will be called jh7110-trng.
 
+config HW_RANDOM_ROCKCHIP
+	tristate "Rockchip True Random Number Generator"
+	depends on HW_RANDOM && (ARCH_ROCKCHIP || COMPILE_TEST)
+	depends on HAS_IOMEM
+	default HW_RANDOM
+	help
+	  This driver provides kernel-side support for the True Random Number
+	  Generator hardware found on some Rockchip SoC like RK3566 or RK3568.
+
+	  To compile this driver as a module, choose M here: the
+	  module will be called rockchip-rng.
+
+	  If unsure, say Y.
+
 endif # HW_RANDOM
 
 config UML_RANDOM
drivers/char/hw_random/Makefile +1 -0
index 32549a1186dc..01f012eab440 100644
@@ -48,4 +48,5 @@ obj-$(CONFIG_HW_RANDOM_XIPHERA) += xiphera-trng.o
 obj-$(CONFIG_HW_RANDOM_ARM_SMCCC_TRNG) += arm_smccc_trng.o
 obj-$(CONFIG_HW_RANDOM_CN10K) += cn10k-rng.o
 obj-$(CONFIG_HW_RANDOM_POLARFIRE_SOC) += mpfs-rng.o
+obj-$(CONFIG_HW_RANDOM_ROCKCHIP) += rockchip-rng.o
 obj-$(CONFIG_HW_RANDOM_JH7110) += jh7110-trng.o
drivers/char/hw_random/rockchip-rng.c new file +222 -0

222 lines not on this page · raw message

Signature · 1 line
2.45.2
#6 lore raw

Re: [PATCH v4 2/3] hwrng: add Rockchip SoC hwrng driver

drivers/char/hw_random/rockchip-rng.c line 162

Quoted 9 lines · Daniel Golle
drivers/char/hw_random/rockchip-rng.c new file +9 -0
+
+	rk_rng->rng.name = dev_driver_string(dev);
+#ifndef CONFIG_PM
+	rk_rng->rng.init = rk_rng_init;
+	rk_rng->rng.cleanup = rk_rng_cleanup;
+#endif
+	rk_rng->rng.read = rk_rng_read;
+	rk_rng->rng.priv = (unsigned long) dev;
+	rk_rng->rng.quality = 900;

I doubt in this value. Usually SoC vendors do not provide datasheet with any reliable and verifiable (so one which could be proven by 3rd party) information. Can you provide a source? (and vendor downstream tree does not really count)

drivers/char/hw_random/rockchip-rng.c line 172

Quoted 10 lines
drivers/char/hw_random/rockchip-rng.c new file +10 -0
+
+	pm_runtime_set_autosuspend_delay(dev, RK_RNG_AUTOSUSPEND_DELAY);
+	pm_runtime_use_autosuspend(dev);
+	devm_pm_runtime_enable(dev);
+
+	ret = devm_hwrng_register(dev, &rk_rng->rng);
+	if (ret)
+		return dev_err_probe(&pdev->dev, ret, "Failed to register Rockchip hwrng\n");
+
+	dev_dbg(&pdev->dev, "Registered Rockchip hwrng\n");

Drop, it is not useful at all. Srsly, we had already long enough talk, which wasted time of three people. Why do you insist on wasting more?

There is no single benefit of such debug statement. sysfs already provides you this information. Simple entry/exit is provided by tracing. You duplicate existing interfaces without any benefit, because this prints nothing more.

Best regards,
Krzysztof

#7 lore raw

Re: [PATCH v4 2/3] hwrng: add Rockchip SoC hwrng driver

Hello Krzysztof,

Quoted 14 lines · Krzysztof Kozlowski

drivers/char/hw_random/rockchip-rng.c line 172

Quoted 10 lines · Daniel Golle
drivers/char/hw_random/rockchip-rng.c new file +10 -0
+
+	pm_runtime_set_autosuspend_delay(dev, RK_RNG_AUTOSUSPEND_DELAY);
+	pm_runtime_use_autosuspend(dev);
+	devm_pm_runtime_enable(dev);
+
+	ret = devm_hwrng_register(dev, &rk_rng->rng);
+	if (ret)
+		return dev_err_probe(&pdev->dev, ret, "Failed to register Rockchip hwrng\n");
+
+	dev_dbg(&pdev->dev, "Registered Rockchip hwrng\n");

Drop, it is not useful at all. Srsly, we had already long enough talk, [...]

And in this long talk using dev_dbg() was one of the suggestions for a compromise. For me this is ok.

Quoted 4 lines

There is no single benefit of such debug statement. sysfs already provides you this information. Simple entry/exit is provided by tracing. You duplicate existing interfaces without any benefit, because this prints nothing more.

There might be a (small) value if you want to know when during boot the device becomes available. So having a dev_dbg() that can be enabled dynamically (assuming DYNAMIC_DEBUG=y) and isn't in the way otherwise might be justified. IMHO a dev_dbg is lightweight enough that *I* won't continue the discussion.

Best regards
Uwe

#8 lore raw

Re: [PATCH v4 2/3] hwrng: add Rockchip SoC hwrng driver

Hello Uwe,

Quoted 25 lines · Uwe Kleine-König
Quoted 15 lines · Krzysztof Kozlowski

Review

Quoted 11 lines · Daniel Golle
drivers/char/hw_random/rockchip-rng.c new file +8 -0
+
+	pm_runtime_set_autosuspend_delay(dev, RK_RNG_AUTOSUSPEND_DELAY);
+	pm_runtime_use_autosuspend(dev);
+	devm_pm_runtime_enable(dev);
+
+	ret = devm_hwrng_register(dev, &rk_rng->rng);
+	if (ret)
+		return dev_err_probe(&pdev->dev, ret, "Failed to register Rockchip 

hwrng\n");

(quoted diff) +2 -0
+
+	dev_dbg(&pdev->dev, "Registered Rockchip hwrng\n");

Drop, it is not useful at all. Srsly, we had already long enough talk, [...]

And in this long talk using dev_dbg() was one of the suggestions for a compromise. For me this is ok.

Quoted 4 lines

There is no single benefit of such debug statement. sysfs already provides you this information. Simple entry/exit is provided by tracing. You duplicate existing interfaces without any benefit, because this prints nothing more.

Quoted 5 lines

There might be a (small) value if you want to know when during boot the device becomes available. So having a dev_dbg() that can be enabled dynamically (assuming DYNAMIC_DEBUG=y) and isn't in the way otherwise might be justified. IMHO a dev_dbg is lightweight enough that *I* won't continue the discussion.

For anyone interested, below is an example that shows the usability of knowing when a device becomes available:

https://gitlab.manjaro.org/manjaro-arm/packages/core/linux/-/issues/21

maintainer
#9 lore raw

Re: [PATCH v4 2/3] hwrng: add Rockchip SoC hwrng driver

In reply to Krzysztof Kozlowski

Hi,

Quoted 15 lines · Krzysztof Kozlowski

drivers/char/hw_random/rockchip-rng.c line 162

Quoted 9 lines · Daniel Golle
drivers/char/hw_random/rockchip-rng.c new file +9 -0
+
+	rk_rng->rng.name = dev_driver_string(dev);
+#ifndef CONFIG_PM
+	rk_rng->rng.init = rk_rng_init;
+	rk_rng->rng.cleanup = rk_rng_cleanup;
+#endif
+	rk_rng->rng.read = rk_rng_read;
+	rk_rng->rng.priv = (unsigned long) dev;
+	rk_rng->rng.quality = 900;

I doubt in this value. Usually SoC vendors do not provide datasheet with any reliable and verifiable (so one which could be proven by 3rd party) information. Can you provide a source? (and vendor downstream tree does not really count)

As the original author of the patch, I am the one who have chosen the value. I did it as explained in the commit message:

| The TRNG device does not seem to have a signal conditionner and the FIPS
| 140-2 test returns a lot of failures. They can be reduced by increasing
| RK_RNG_SAMPLE_CNT, in a tradeoff between quality and speed. This value
| has been adjusted to get ~90% of successes and the quality value has
| been set accordingly.

It is also explained, admittedly more briefly, above the RK_RNG_SAMPLE_CNT #define, as the commit messages are not really relevant anymore once the patches are accepted:

| * TRNG collects osc ring output bit every RK_RNG_SAMPLE_CNT time. The value is
| * a tradeoff between speed and quality and has been adjusted to get a quality
| * of ~900 (~90% of FIPS 140-2 successes).
| */

The decision to adjust RK_RNG_SAMPLE_CNT to reach ~90% of FIPS 140-2 successes was based on the quality chosen by most hw_random drivers currently in the kernel sources. The FIPS 140-2 tests were performed using rngtest from the rng-tools project.

All that said, I am not an expert in that domain, so feel free to point to the documentation or provide the correct method to determine the quality.

Regards
Aurelien

[1] https://git.kernel.org/pub/scm/utils/kernel/rng-tools/rng-tools.git/

Signature · 7 lines
Aurelien Jarno                          GPG: 4096R/1DDD8C9B
[email protected]                     http://aurel32.net

_______________________________________________
Linux-rockchip mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/linux-rockchip
#10 lore raw

Re: [PATCH v4 2/3] hwrng: add Rockchip SoC hwrng driver

Hi,

Quoted 43 lines · Aurelien Jarno

Hi,

Quoted 15 lines · Krzysztof Kozlowski

drivers/char/hw_random/rockchip-rng.c line 162

Quoted 9 lines · Daniel Golle
drivers/char/hw_random/rockchip-rng.c new file +9 -0
+
+   rk_rng->rng.name = dev_driver_string(dev);
+#ifndef CONFIG_PM
+   rk_rng->rng.init = rk_rng_init;
+   rk_rng->rng.cleanup = rk_rng_cleanup;
+#endif
+   rk_rng->rng.read = rk_rng_read;
+   rk_rng->rng.priv = (unsigned long) dev;
+   rk_rng->rng.quality = 900;

I doubt in this value. Usually SoC vendors do not provide datasheet with any reliable and verifiable (so one which could be proven by 3rd party) information. Can you provide a source? (and vendor downstream tree does not really count)

As the original author of the patch, I am the one who have chosen the value. I did it as explained in the commit message:

| The TRNG device does not seem to have a signal conditionner and the FIPS
| 140-2 test returns a lot of failures. They can be reduced by increasing
| RK_RNG_SAMPLE_CNT, in a tradeoff between quality and speed. This value
| has been adjusted to get ~90% of successes and the quality value has
| been set accordingly.

It is also explained, admittedly more briefly, above the RK_RNG_SAMPLE_CNT #define, as the commit messages are not really relevant anymore once the patches are accepted:

| * TRNG collects osc ring output bit every RK_RNG_SAMPLE_CNT time. The value is
| * a tradeoff between speed and quality and has been adjusted to get a quality
| * of ~900 (~90% of FIPS 140-2 successes).
| */

The decision to adjust RK_RNG_SAMPLE_CNT to reach ~90% of FIPS 140-2 successes was based on the quality chosen by most hw_random drivers currently in the kernel sources. The FIPS 140-2 tests were performed using rngtest from the rng-tools project.

Quoted 8 lines

All that said, I am not an expert in that domain, so feel free to point to the documentation or provide the correct method to determine the quality.

Regards
Aurelien

[1] https://git.kernel.org/pub/scm/utils/kernel/rng-tools/rng-tools.git/

This is an old repository, the latest can be found below
[1] https://github.com/nhorman/rng-tools

However, I could not find the support from ARM and ARM64 in the repository below because all the assembly is written for the X86 arch.

Thanks

-Anand

author maintainer
#11 lore raw

PATCH v4 3/3 arm64: dts: rockchip: add DT entry for RNG to RK356x

In reply to Daniel Golle

From: Aurelien Jarno <[email protected]>

Enable the just added Rockchip RNG driver for RK356x SoCs.

---
 arch/arm64/boot/dts/rockchip/rk356x.dtsi | 9 +++++++++
 1 file changed, 9 insertions(+)
arch/arm64/boot/dts/rockchip/rk356x.dtsi +9 -0
index d8543b5557ee..d43d59b44ea5 100644
@@ -1112,6 +1112,15 @@ sdhci: mmc@fe310000 {
 		status = "disabled";
 	};
 
+	rng: rng@fe388000 {
+		compatible = "rockchip,rk3568-rng";
+		reg = <0x0 0xfe388000 0x0 0x4000>;
+		clocks = <&cru CLK_TRNG_NS>, <&cru HCLK_TRNG_NS>;
+		clock-names = "core", "ahb";
+		resets = <&cru SRST_TRNG_NS>;
+		reset-names = "reset";
+	};
+
 	i2s0_8ch: i2s@fe400000 {
 		compatible = "rockchip,rk3568-i2s-tdm";
 		reg = <0x0 0xfe400000 0x0 0x1000>;
Signature · 1 line
2.45.2