2019-11-20 03:17:36

by Stephen Brennan

[permalink] [raw]
Subject: [PATCH v3 0/4] Raspberry Pi 4 HWRNG Support

This patch series enables support for the HWRNG included on the Raspberry
Pi 4. It is simply a rebase of Stefan's branch [1]. I went ahead and
tested this out on a Pi 4. Prior to this patch series, attempting to use
the hwrng gives:

$ head -c 2 /dev/hwrng
head: /dev/hwrng: Input/output error

After this series, the same command gives two random bytes.

Changes in v3:
- drop interrupts from bcm2711 rng node
- move bcm283x rng into bcm2835-common.dtsi
- add reviewed-by tag
- separated out patch 3 into two parts

Changes in v2:
- specify the correct size for the region in the dts, refactor bcm283x rng

---

Stefan Wahren (2):
dt-bindings: rng: add BCM2711 RNG compatible
hwrng: iproc-rng200: Add support for BCM2711

Stephen Brennan (2):
ARM: dts: bcm2835: Move rng definition to common location
ARM: dts: bcm2711: Enable HWRNG support

.../devicetree/bindings/rng/brcm,iproc-rng200.txt | 1 +
arch/arm/boot/dts/bcm2711.dtsi | 7 +++----
arch/arm/boot/dts/bcm2835-common.dtsi | 6 ++++++
arch/arm/boot/dts/bcm283x.dtsi | 6 ------
drivers/char/hw_random/Kconfig | 2 +-
drivers/char/hw_random/iproc-rng200.c | 1 +
6 files changed, 12 insertions(+), 11 deletions(-)

--
2.24.0





2019-11-20 03:18:00

by Stephen Brennan

[permalink] [raw]
Subject: [PATCH v3 1/4] dt-bindings: rng: add BCM2711 RNG compatible

From: Stefan Wahren <[email protected]>

The BCM2711 has a RNG200 block, so document its compatible string.

Signed-off-by: Stefan Wahren <[email protected]>
Signed-off-by: Stephen Brennan <[email protected]>
---
Documentation/devicetree/bindings/rng/brcm,iproc-rng200.txt | 1 +
1 file changed, 1 insertion(+)

diff --git a/Documentation/devicetree/bindings/rng/brcm,iproc-rng200.txt b/Documentation/devicetree/bindings/rng/brcm,iproc-rng200.txt
index c223e54452da..802523196ee5 100644
--- a/Documentation/devicetree/bindings/rng/brcm,iproc-rng200.txt
+++ b/Documentation/devicetree/bindings/rng/brcm,iproc-rng200.txt
@@ -2,6 +2,7 @@ HWRNG support for the iproc-rng200 driver

Required properties:
- compatible : Must be one of:
+ "brcm,bcm2711-rng200"
"brcm,bcm7211-rng200"
"brcm,bcm7278-rng200"
"brcm,iproc-rng200"
--
2.24.0




2019-11-20 03:20:54

by Stephen Brennan

[permalink] [raw]
Subject: [PATCH v3 2/4] hwrng: iproc-rng200: Add support for BCM2711

From: Stefan Wahren <[email protected]>

BCM2711 features a RNG200 hardware random number generator block.
So make the driver available.

Signed-off-by: Stefan Wahren <[email protected]>
Signed-off-by: Stephen Brennan <[email protected]>
Reviewed-by: Matthias Brugger <[email protected]>
---
drivers/char/hw_random/Kconfig | 2 +-
drivers/char/hw_random/iproc-rng200.c | 1 +
2 files changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/char/hw_random/Kconfig b/drivers/char/hw_random/Kconfig
index 7c7fecfa2fb2..77e848fca531 100644
--- a/drivers/char/hw_random/Kconfig
+++ b/drivers/char/hw_random/Kconfig
@@ -90,7 +90,7 @@ config HW_RANDOM_BCM2835

config HW_RANDOM_IPROC_RNG200
tristate "Broadcom iProc/STB RNG200 support"
- depends on ARCH_BCM_IPROC || ARCH_BRCMSTB
+ depends on ARCH_BCM_IPROC || ARCH_BCM2835 || ARCH_BRCMSTB
default HW_RANDOM
---help---
This driver provides kernel-side support for the RNG200
diff --git a/drivers/char/hw_random/iproc-rng200.c b/drivers/char/hw_random/iproc-rng200.c
index 899ff25f4f28..32d9fe61a225 100644
--- a/drivers/char/hw_random/iproc-rng200.c
+++ b/drivers/char/hw_random/iproc-rng200.c
@@ -213,6 +213,7 @@ static int iproc_rng200_probe(struct platform_device *pdev)
}

static const struct of_device_id iproc_rng200_of_match[] = {
+ { .compatible = "brcm,bcm2711-rng200", },
{ .compatible = "brcm,bcm7211-rng200", },
{ .compatible = "brcm,bcm7278-rng200", },
{ .compatible = "brcm,iproc-rng200", },
--
2.24.0




2019-11-20 03:21:11

by Stephen Brennan

[permalink] [raw]
Subject: [PATCH v3 3/4] ARM: dts: bcm2835: Move rng definition to common location

BCM2711 inherits from BCM283X, but has an incompatible HWRNG. Move this
node to bcm2835-common.dtsi, so that BCM2711 can define its own.

Signed-off-by: Stephen Brennan <[email protected]>
---

Changes in v3:
- moved the bcm2835 rng into bcm2835-common.dtsi rather than a new file
- split out enabling rng on bcm2711 into its own patch

arch/arm/boot/dts/bcm2835-common.dtsi | 6 ++++++
arch/arm/boot/dts/bcm283x.dtsi | 6 ------
2 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/arch/arm/boot/dts/bcm2835-common.dtsi b/arch/arm/boot/dts/bcm2835-common.dtsi
index fe1ab40c7f22..2b1d9d4c0cde 100644
--- a/arch/arm/boot/dts/bcm2835-common.dtsi
+++ b/arch/arm/boot/dts/bcm2835-common.dtsi
@@ -70,6 +70,12 @@ pm: watchdog@7e100000 {
system-power-controller;
};

+ rng@7e104000 {
+ compatible = "brcm,bcm2835-rng";
+ reg = <0x7e104000 0x10>;
+ interrupts = <2 29>;
+ };
+
pixelvalve@7e206000 {
compatible = "brcm,bcm2835-pixelvalve0";
reg = <0x7e206000 0x100>;
diff --git a/arch/arm/boot/dts/bcm283x.dtsi b/arch/arm/boot/dts/bcm283x.dtsi
index 3caaa57eb6c8..5219339fc27c 100644
--- a/arch/arm/boot/dts/bcm283x.dtsi
+++ b/arch/arm/boot/dts/bcm283x.dtsi
@@ -84,12 +84,6 @@ clocks: cprman@7e101000 {
<&dsi1 0>, <&dsi1 1>, <&dsi1 2>;
};

- rng@7e104000 {
- compatible = "brcm,bcm2835-rng";
- reg = <0x7e104000 0x10>;
- interrupts = <2 29>;
- };
-
mailbox: mailbox@7e00b880 {
compatible = "brcm,bcm2835-mbox";
reg = <0x7e00b880 0x40>;
--
2.24.0




2019-11-20 03:21:32

by Stephen Brennan

[permalink] [raw]
Subject: [PATCH v3 4/4] ARM: dts: bcm2711: Enable HWRNG support

This enables hardware random number generator support for the BCM2711
on the Raspberry Pi 4 board.

Signed-off-by: Stephen Brennan <[email protected]>
---
arch/arm/boot/dts/bcm2711.dtsi | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/arch/arm/boot/dts/bcm2711.dtsi b/arch/arm/boot/dts/bcm2711.dtsi
index ac83dac2e6ba..ed0877d5a1e9 100644
--- a/arch/arm/boot/dts/bcm2711.dtsi
+++ b/arch/arm/boot/dts/bcm2711.dtsi
@@ -92,10 +92,9 @@ pm: watchdog@7e100000 {
};

rng@7e104000 {
- interrupts = <GIC_SPI 125 IRQ_TYPE_LEVEL_HIGH>;
-
- /* RNG is incompatible with brcm,bcm2835-rng */
- status = "disabled";
+ compatible = "brcm,bcm2711-rng200";
+ reg = <0x7e104000 0x28>;
+ status = "okay";
};

uart2: serial@7e201400 {
--
2.24.0




2019-11-20 05:23:00

by Stephen Brennan

[permalink] [raw]
Subject: Re: [PATCH v3 1/4] dt-bindings: rng: add BCM2711 RNG compatible

Hi Baruch,

On Wed Nov 20, 2019 at 6:50 AM, Baruch Siach wrote:
> Hi Stephen, Stefan,
>
>
> On Wed, Nov 20 2019, Stephen Brennan wrote:
>
>
> > From: Stefan Wahren <[email protected]>
> >
> > The BCM2711 has a RNG200 block, so document its compatible string.
> >
> > Signed-off-by: Stefan Wahren <[email protected]>
> > Signed-off-by: Stephen Brennan <[email protected]>
>
>
> Isn't that duplicate of Florian's commit 6223949a1531?
>
>
> > ---
> > Documentation/devicetree/bindings/rng/brcm,iproc-rng200.txt | 1 +
> > 1 file changed, 1 insertion(+)
> >
> > diff --git a/Documentation/devicetree/bindings/rng/brcm,iproc-rng200.txt b/Documentation/devicetree/bindings/rng/brcm,iproc-rng200.txt
> > index c223e54452da..802523196ee5 100644
> > --- a/Documentation/devicetree/bindings/rng/brcm,iproc-rng200.txt
> > +++ b/Documentation/devicetree/bindings/rng/brcm,iproc-rng200.txt
> > @@ -2,6 +2,7 @@ HWRNG support for the iproc-rng200 driver
> >
> > Required properties:
> > - compatible : Must be one of:
> > + "brcm,bcm2711-rng200"
> > "brcm,bcm7211-rng200"
>
>
> Isn't this clear text duplication? Am I missing something obvious?
>

I understand the confusion, but they're different, we're looking at the
difference between:

bcm2711
bcm7211
^^

These are apparently separate but related chips, leading to confusion in
other places [1] as well. I double checked the commit 6223949a1531 you
pointed out, as well as 1fa6d053b2a5 from your other email, to verify that
this is the case. No duplication (as far as I can tell) is in the series.

[1]: https://github.com/raspberrypi/linux/issues/3163

Regards,
Stephen

>
> I was looking at versions of this patch series wondering why no one
> noticed that.
>
>
> baruch
>
>
> > "brcm,bcm7278-rng200"
> > "brcm,iproc-rng200"
>
>
> --
> http://baruch.siach.name/blog/ ~. .~ Tk Open Systems
> =}------------------------------------------------ooO--U--Ooo------------{=
> - [email protected] - tel: +972.52.368.4656, http://www.tkos.co.il -
>
>
>
>



2019-11-20 17:35:12

by Stefan Wahren

[permalink] [raw]
Subject: Re: [PATCH v3 3/4] ARM: dts: bcm2835: Move rng definition to common location

Am 20.11.19 um 04:16 schrieb Stephen Brennan:
> BCM2711 inherits from BCM283X, but has an incompatible HWRNG. Move this
> node to bcm2835-common.dtsi, so that BCM2711 can define its own.
>
> Signed-off-by: Stephen Brennan <[email protected]>
Acked-by: Stefan Wahren <[email protected]>

2019-11-20 17:35:15

by Stefan Wahren

[permalink] [raw]
Subject: Re: [PATCH v3 0/4] Raspberry Pi 4 HWRNG Support

Hi Stephen,

Am 20.11.19 um 04:16 schrieb Stephen Brennan:
> This patch series enables support for the HWRNG included on the Raspberry
> Pi 4. It is simply a rebase of Stefan's branch [1]. I went ahead and
> tested this out on a Pi 4. Prior to this patch series, attempting to use
> the hwrng gives:
>
> $ head -c 2 /dev/hwrng
> head: /dev/hwrng: Input/output error
>
> After this series, the same command gives two random bytes.

just a note: a more expressive test would be running rngtest (package
rng-tools) on this device.

Regards
Stefan



2019-11-20 17:35:23

by Stefan Wahren

[permalink] [raw]
Subject: Re: [PATCH v3 4/4] ARM: dts: bcm2711: Enable HWRNG support

Am 20.11.19 um 04:16 schrieb Stephen Brennan:
> This enables hardware random number generator support for the BCM2711
> on the Raspberry Pi 4 board.
>
> Signed-off-by: Stephen Brennan <[email protected]>

Acked-by: Stefan Wahren <[email protected]>

Thanks


2019-11-20 19:46:00

by Nicolas Saenz Julienne

[permalink] [raw]
Subject: Re: [PATCH v3 4/4] ARM: dts: bcm2711: Enable HWRNG support

On Tue, 2019-11-19 at 19:16 -0800, Stephen Brennan wrote:
> This enables hardware random number generator support for the BCM2711
> on the Raspberry Pi 4 board.
>
> Signed-off-by: Stephen Brennan <[email protected]>
> ---
> arch/arm/boot/dts/bcm2711.dtsi | 7 +++----
> 1 file changed, 3 insertions(+), 4 deletions(-)
>
> diff --git a/arch/arm/boot/dts/bcm2711.dtsi b/arch/arm/boot/dts/bcm2711.dtsi
> index ac83dac2e6ba..ed0877d5a1e9 100644
> --- a/arch/arm/boot/dts/bcm2711.dtsi
> +++ b/arch/arm/boot/dts/bcm2711.dtsi
> @@ -92,10 +92,9 @@ pm: watchdog@7e100000 {
> };
>
> rng@7e104000 {
> - interrupts = <GIC_SPI 125 IRQ_TYPE_LEVEL_HIGH>;
> -
> - /* RNG is incompatible with brcm,bcm2835-rng */
> - status = "disabled";
> + compatible = "brcm,bcm2711-rng200";
> + reg = <0x7e104000 0x28>;
> + status = "okay";

Small nitpick, the 'okay' status is set by default, so no need for this. But
it's something we can edit out once we pick the patch.

Regards,
Nicolas


Attachments:
signature.asc (499.00 B)
This is a digitally signed message part

2019-11-20 19:51:29

by Nicolas Saenz Julienne

[permalink] [raw]
Subject: Re: [PATCH v3 0/4] Raspberry Pi 4 HWRNG Support

On Wed, 2019-11-20 at 17:16 +0100, Stefan Wahren wrote:
> Hi Stephen,
>
> Am 20.11.19 um 04:16 schrieb Stephen Brennan:
> > This patch series enables support for the HWRNG included on the Raspberry
> > Pi 4. It is simply a rebase of Stefan's branch [1]. I went ahead and
> > tested this out on a Pi 4. Prior to this patch series, attempting to use
> > the hwrng gives:
> >
> > $ head -c 2 /dev/hwrng
> > head: /dev/hwrng: Input/output error
> >
> > After this series, the same command gives two random bytes.
>
> just a note: a more expressive test would be running rngtest (package
> rng-tools) on this device.

Just had a go at it,

root@rpi4:~# rngtest -c 1000 < /dev/hwrng
rngtest 2-unofficial-mt.14
Copyright (c) 2004 by Henrique de Moraes Holschuh
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

rngtest: starting FIPS tests...
rngtest: bits received from input: 20000032
rngtest: FIPS 140-2 successes: 998
rngtest: FIPS 140-2 failures: 2
rngtest: FIPS 140-2(2001-10-10) Monobit: 0
rngtest: FIPS 140-2(2001-10-10) Poker: 1
rngtest: FIPS 140-2(2001-10-10) Runs: 0
rngtest: FIPS 140-2(2001-10-10) Long run: 1
rngtest: FIPS 140-2(2001-10-10) Continuous run: 0
rngtest: input channel speed: (min=1.284; avg=113.786; max=126.213)Kibits/s
rngtest: FIPS tests speed: (min=17.122; avg=28.268; max=28.812)Mibits/s
rngtest: Program run time: 172323761 microseconds

AFAIR (Arch wiki) some small failures are acceptable.

Regards,
Nicolas


Attachments:
signature.asc (499.00 B)
This is a digitally signed message part

2019-11-20 19:56:12

by Florian Fainelli

[permalink] [raw]
Subject: Re: [PATCH v3 1/4] dt-bindings: rng: add BCM2711 RNG compatible

On 11/19/19 7:16 PM, Stephen Brennan wrote:
> From: Stefan Wahren <[email protected]>
>
> The BCM2711 has a RNG200 block, so document its compatible string.
>
> Signed-off-by: Stefan Wahren <[email protected]>
> Signed-off-by: Stephen Brennan <[email protected]>

Reviewed-by: Florian Fainelli <[email protected]>
--
Florian

2019-11-20 19:56:16

by Florian Fainelli

[permalink] [raw]
Subject: Re: [PATCH v3 2/4] hwrng: iproc-rng200: Add support for BCM2711

On 11/19/19 7:16 PM, Stephen Brennan wrote:
> From: Stefan Wahren <[email protected]>
>
> BCM2711 features a RNG200 hardware random number generator block.
> So make the driver available.
>
> Signed-off-by: Stefan Wahren <[email protected]>
> Signed-off-by: Stephen Brennan <[email protected]>
> Reviewed-by: Matthias Brugger <[email protected]>

Reviewed-by: Florian Fainelli <[email protected]>
--
Florian

2019-11-21 04:11:54

by Florian Fainelli

[permalink] [raw]
Subject: Re: [PATCH v3 0/4] Raspberry Pi 4 HWRNG Support

Hi Herbert,

On 11/19/2019 7:16 PM, Stephen Brennan wrote:
> This patch series enables support for the HWRNG included on the Raspberry
> Pi 4. It is simply a rebase of Stefan's branch [1]. I went ahead and
> tested this out on a Pi 4. Prior to this patch series, attempting to use
> the hwrng gives:
>
> $ head -c 2 /dev/hwrng
> head: /dev/hwrng: Input/output error
>
> After this series, the same command gives two random bytes.

When we get a review from Rob, you can take patches 1-2 through your
tree and Stefan/Nicholas can queue patches 3-4 through the BCM2835 tree
where the DTS files already exist. Does that work for you?

>
> Changes in v3:
> - drop interrupts from bcm2711 rng node
> - move bcm283x rng into bcm2835-common.dtsi
> - add reviewed-by tag
> - separated out patch 3 into two parts
>
> Changes in v2:
> - specify the correct size for the region in the dts, refactor bcm283x rng
>
> ---
>
> Stefan Wahren (2):
> dt-bindings: rng: add BCM2711 RNG compatible
> hwrng: iproc-rng200: Add support for BCM2711
>
> Stephen Brennan (2):
> ARM: dts: bcm2835: Move rng definition to common location
> ARM: dts: bcm2711: Enable HWRNG support
>
> .../devicetree/bindings/rng/brcm,iproc-rng200.txt | 1 +
> arch/arm/boot/dts/bcm2711.dtsi | 7 +++----
> arch/arm/boot/dts/bcm2835-common.dtsi | 6 ++++++
> arch/arm/boot/dts/bcm283x.dtsi | 6 ------
> drivers/char/hw_random/Kconfig | 2 +-
> drivers/char/hw_random/iproc-rng200.c | 1 +
> 6 files changed, 12 insertions(+), 11 deletions(-)
>

--
Florian

2019-11-21 10:16:58

by Stefan Wahren

[permalink] [raw]
Subject: Re: [PATCH v3 0/4] Raspberry Pi 4 HWRNG Support

Hi,

Am 20.11.19 um 20:50 schrieb Nicolas Saenz Julienne:
> On Wed, 2019-11-20 at 17:16 +0100, Stefan Wahren wrote:
>> Hi Stephen,
>>
>> Am 20.11.19 um 04:16 schrieb Stephen Brennan:
>>> This patch series enables support for the HWRNG included on the Raspberry
>>> Pi 4. It is simply a rebase of Stefan's branch [1]. I went ahead and
>>> tested this out on a Pi 4. Prior to this patch series, attempting to use
>>> the hwrng gives:
>>>
>>> $ head -c 2 /dev/hwrng
>>> head: /dev/hwrng: Input/output error
>>>
>>> After this series, the same command gives two random bytes.
>> just a note: a more expressive test would be running rngtest (package
>> rng-tools) on this device.
> Just had a go at it,
>
> root@rpi4:~# rngtest -c 1000 < /dev/hwrng
> rngtest 2-unofficial-mt.14
> Copyright (c) 2004 by Henrique de Moraes Holschuh
> This is free software; see the source for copying conditions. There is NO
> warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
>
> rngtest: starting FIPS tests...
> rngtest: bits received from input: 20000032
> rngtest: FIPS 140-2 successes: 998
> rngtest: FIPS 140-2 failures: 2
> rngtest: FIPS 140-2(2001-10-10) Monobit: 0
> rngtest: FIPS 140-2(2001-10-10) Poker: 1
> rngtest: FIPS 140-2(2001-10-10) Runs: 0
> rngtest: FIPS 140-2(2001-10-10) Long run: 1
> rngtest: FIPS 140-2(2001-10-10) Continuous run: 0
> rngtest: input channel speed: (min=1.284; avg=113.786; max=126.213)Kibits/s
> rngtest: FIPS tests speed: (min=17.122; avg=28.268; max=28.812)Mibits/s
> rngtest: Program run time: 172323761 microseconds
>
> AFAIR (Arch wiki) some small failures are acceptable.
>
> Regards,
> Nicolas
>
thanks for the results. AFAIR the downstream implementation [1] has a
significant higher input speed. So there is possibly some room for
optimizations later.

Regards
Stefan

[1] -
https://github.com/raspberrypi/linux/commit/5e74aadfd1e0e6c00994521863ba044ce25b40de

2019-11-23 00:40:25

by Rob Herring

[permalink] [raw]
Subject: Re: [PATCH v3 1/4] dt-bindings: rng: add BCM2711 RNG compatible

On Tue, 19 Nov 2019 19:16:19 -0800, Stephen Brennan wrote:
> From: Stefan Wahren <[email protected]>
>
> The BCM2711 has a RNG200 block, so document its compatible string.
>
> Signed-off-by: Stefan Wahren <[email protected]>
> Signed-off-by: Stephen Brennan <[email protected]>
> ---
> Documentation/devicetree/bindings/rng/brcm,iproc-rng200.txt | 1 +
> 1 file changed, 1 insertion(+)
>

Acked-by: Rob Herring <[email protected]>

2019-12-04 04:55:36

by Florian Fainelli

[permalink] [raw]
Subject: Re: [PATCH v3 0/4] Raspberry Pi 4 HWRNG Support



On 11/20/2019 9:30 PM, Herbert Xu wrote:
> On Wed, Nov 20, 2019 at 08:09:57PM -0800, Florian Fainelli wrote:
>> Hi Herbert,
>>
>> On 11/19/2019 7:16 PM, Stephen Brennan wrote:
>>> This patch series enables support for the HWRNG included on the Raspberry
>>> Pi 4. It is simply a rebase of Stefan's branch [1]. I went ahead and
>>> tested this out on a Pi 4. Prior to this patch series, attempting to use
>>> the hwrng gives:
>>>
>>> $ head -c 2 /dev/hwrng
>>> head: /dev/hwrng: Input/output error
>>>
>>> After this series, the same command gives two random bytes.
>>
>> When we get a review from Rob, you can take patches 1-2 through your
>> tree and Stefan/Nicholas can queue patches 3-4 through the BCM2835 tree
>> where the DTS files already exist. Does that work for you?
>
> Yes sure.

Rob has provided his Acked-by for the binding patch, are you targeting
these changes for 5.5 or 5.6 at this point?
--
Florian

2019-12-04 05:00:24

by Herbert Xu

[permalink] [raw]
Subject: Re: [PATCH v3 0/4] Raspberry Pi 4 HWRNG Support

On Tue, Dec 03, 2019 at 08:55:04PM -0800, Florian Fainelli wrote:
>
> Rob has provided his Acked-by for the binding patch, are you targeting
> these changes for 5.5 or 5.6 at this point?

They are too late for 5.5 so it's going to be 5.6.

Cheers,
--
Email: Herbert Xu <[email protected]>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt