mbox series

[v3,0/6] hwrng: exynos: Add support for Exynos850

Message ID 20240620231339.1574-1-semen.protsenko@linaro.org (mailing list archive)
Headers show
Series hwrng: exynos: Add support for Exynos850 | expand

Message

Sam Protsenko June 20, 2024, 11:13 p.m. UTC
Exynos850 has True Random Number Generator (TRNG) block which is very
similar to Exynos5250 for which the driver already exists
(exynos-trng.c). There are two differences though:
  1. Additional SSS PCLK clock has to be enabled to make TRNG registers
     accessible.
  2. All SSS registers (including TRNG area) are protected with
     TrustZone and can only be accessed from EL3 monitor. So the
     corresponding SMC calls have to be used instead to interact with
     TRNG block.

This patch series enables TRNG support on Exynos850 SoC. It was tested
on the E850-96 board running Debian rootfs like this:

    8<-------------------------------------------------------------->8
    # cat /sys/devices/virtual/misc/hw_random/rng_current
    12081400.rng

    # dd if=/dev/hwrng bs=100000 count=1 > /dev/null
    ...
    122KB/s

    # apt install rng-tools5
    # rngtest -c 1000 < /dev/hwrng
    ...
    rngtest: starting FIPS tests...
    rngtest: bits received from input: 20000032
    rngtest: FIPS 140-2 successes: 1000
    rngtest: FIPS 140-2 failures: 0
    rngtest: FIPS 140-2(2001-10-10) Monobit: 0
    rngtest: FIPS 140-2(2001-10-10) Poker: 0
    rngtest: FIPS 140-2(2001-10-10) Runs: 0
    rngtest: FIPS 140-2(2001-10-10) Long run: 0
    rngtest: FIPS 140-2(2001-10-10) Continuous run: 0
    rngtest: input channel speed: (min=941.855; avg=965.515;
             max=968.236)Kibits/s
    rngtest: FIPS tests speed: (min=49.542; avg=52.886;
             max=53.577)Mibits/s
    rngtest: Program run time: 20590194 microseconds
    8<-------------------------------------------------------------->8

SMC commands added in this series require LDFW (Loadable Firmware) to be
loaded by the bootloader. In case of E850-96 board, at the moment only
the LittleKernel based bootloader [1] is able to load LDFW. It is
expected to be added into U-Boot port soon as well. See [2] for more
details.

[1] https://gitlab.com/Linaro/96boards/e850-96/lk
[2] https://docs.u-boot.org/en/latest/board/samsung/e850-96.html

Changes in v3:
  - Rebased on top of the most recent linux-next
  - Removed dts patch (7/7) from the series, as suggested by Krzysztof
  - Addressed all review comments for v2 series

Changes in v2:
  - Removed the patch for renaming the dt-bindings doc file
  - Added the patch for using devm_clk_get_enabled() to get the clock
  - Addressed all review comments for v1 series

Sam Protsenko (6):
  dt-bindings: rng: Add Exynos850 support to exynos-trng
  hwrng: exynos: Improve coding style
  hwrng: exynos: Use devm_clk_get_enabled() to get the clock
  hwrng: exynos: Implement bus clock control
  hwrng: exynos: Add SMC based TRNG operation
  hwrng: exynos: Enable Exynos850 support

 .../bindings/rng/samsung,exynos5250-trng.yaml |  40 +++-
 drivers/char/hw_random/exynos-trng.c          | 225 +++++++++++++-----
 2 files changed, 206 insertions(+), 59 deletions(-)

Comments

Herbert Xu June 28, 2024, 1:52 a.m. UTC | #1
On Thu, Jun 20, 2024 at 06:13:33PM -0500, Sam Protsenko wrote:
> Exynos850 has True Random Number Generator (TRNG) block which is very
> similar to Exynos5250 for which the driver already exists
> (exynos-trng.c). There are two differences though:
>   1. Additional SSS PCLK clock has to be enabled to make TRNG registers
>      accessible.
>   2. All SSS registers (including TRNG area) are protected with
>      TrustZone and can only be accessed from EL3 monitor. So the
>      corresponding SMC calls have to be used instead to interact with
>      TRNG block.
> 
> This patch series enables TRNG support on Exynos850 SoC. It was tested
> on the E850-96 board running Debian rootfs like this:
> 
>     8<-------------------------------------------------------------->8
>     # cat /sys/devices/virtual/misc/hw_random/rng_current
>     12081400.rng
> 
>     # dd if=/dev/hwrng bs=100000 count=1 > /dev/null
>     ...
>     122KB/s
> 
>     # apt install rng-tools5
>     # rngtest -c 1000 < /dev/hwrng
>     ...
>     rngtest: starting FIPS tests...
>     rngtest: bits received from input: 20000032
>     rngtest: FIPS 140-2 successes: 1000
>     rngtest: FIPS 140-2 failures: 0
>     rngtest: FIPS 140-2(2001-10-10) Monobit: 0
>     rngtest: FIPS 140-2(2001-10-10) Poker: 0
>     rngtest: FIPS 140-2(2001-10-10) Runs: 0
>     rngtest: FIPS 140-2(2001-10-10) Long run: 0
>     rngtest: FIPS 140-2(2001-10-10) Continuous run: 0
>     rngtest: input channel speed: (min=941.855; avg=965.515;
>              max=968.236)Kibits/s
>     rngtest: FIPS tests speed: (min=49.542; avg=52.886;
>              max=53.577)Mibits/s
>     rngtest: Program run time: 20590194 microseconds
>     8<-------------------------------------------------------------->8
> 
> SMC commands added in this series require LDFW (Loadable Firmware) to be
> loaded by the bootloader. In case of E850-96 board, at the moment only
> the LittleKernel based bootloader [1] is able to load LDFW. It is
> expected to be added into U-Boot port soon as well. See [2] for more
> details.
> 
> [1] https://gitlab.com/Linaro/96boards/e850-96/lk
> [2] https://docs.u-boot.org/en/latest/board/samsung/e850-96.html
> 
> Changes in v3:
>   - Rebased on top of the most recent linux-next
>   - Removed dts patch (7/7) from the series, as suggested by Krzysztof
>   - Addressed all review comments for v2 series
> 
> Changes in v2:
>   - Removed the patch for renaming the dt-bindings doc file
>   - Added the patch for using devm_clk_get_enabled() to get the clock
>   - Addressed all review comments for v1 series
> 
> Sam Protsenko (6):
>   dt-bindings: rng: Add Exynos850 support to exynos-trng
>   hwrng: exynos: Improve coding style
>   hwrng: exynos: Use devm_clk_get_enabled() to get the clock
>   hwrng: exynos: Implement bus clock control
>   hwrng: exynos: Add SMC based TRNG operation
>   hwrng: exynos: Enable Exynos850 support
> 
>  .../bindings/rng/samsung,exynos5250-trng.yaml |  40 +++-
>  drivers/char/hw_random/exynos-trng.c          | 225 +++++++++++++-----
>  2 files changed, 206 insertions(+), 59 deletions(-)
> 
> -- 
> 2.39.2

All applied.  Thanks.