Message ID | 20240207000301.3270722-11-jonas@kwiboo.se |
---|---|
State | Superseded |
Delegated to: | Kever Yang |
Headers | show |
Series | rockchip: rk3328: Update defconfigs, DTs and enable boot from SPI | expand |
On 2/7/24 01:02, Jonas Karlman wrote: > Replace the rockchip,cryptov1-rng compatible with compatibles used in > the linux device tree for RK3288, RK3328 and RK3399 to ease sync of SoC > device tree from linux. > > Signed-off-by: Jonas Karlman <jonas@kwiboo.se> It is strange that U-Boot only uses the random number generation while Linux only seems to use the crypto algorithm acceleration. U-Boot has some crypto accelerator drivers in drivers/crypto/. But here we only make use of modular exponentiation (see struct mod_exp_ops). We could improve on crypto acceleration. The current change looks good to me. Reviewed-by: Heinrich Schuchardt <xypron.glpk@gmx.de> > --- > arch/arm/dts/rk3328-u-boot.dtsi | 2 +- > arch/arm/dts/rk3399-u-boot.dtsi | 2 +- > drivers/rng/rockchip_rng.c | 10 +++++++++- > 3 files changed, 11 insertions(+), 3 deletions(-) > > diff --git a/arch/arm/dts/rk3328-u-boot.dtsi b/arch/arm/dts/rk3328-u-boot.dtsi > index e087b02893c1..d805c2f394f8 100644 > --- a/arch/arm/dts/rk3328-u-boot.dtsi > +++ b/arch/arm/dts/rk3328-u-boot.dtsi > @@ -28,7 +28,7 @@ > }; > > rng: rng@ff060000 { > - compatible = "rockchip,cryptov1-rng"; > + compatible = "rockchip,rk3328-crypto"; > reg = <0x0 0xff060000 0x0 0x4000>; > status = "okay"; > }; > diff --git a/arch/arm/dts/rk3399-u-boot.dtsi b/arch/arm/dts/rk3399-u-boot.dtsi > index 3423b882c437..87b173e59579 100644 > --- a/arch/arm/dts/rk3399-u-boot.dtsi > +++ b/arch/arm/dts/rk3399-u-boot.dtsi > @@ -30,7 +30,7 @@ > }; > > rng: rng@ff8b8000 { > - compatible = "rockchip,cryptov1-rng"; > + compatible = "rockchip,rk3399-crypto"; > reg = <0x0 0xff8b8000 0x0 0x1000>; > status = "okay"; > }; > diff --git a/drivers/rng/rockchip_rng.c b/drivers/rng/rockchip_rng.c > index 705b424cf3dd..e82b5572fec5 100644 > --- a/drivers/rng/rockchip_rng.c > +++ b/drivers/rng/rockchip_rng.c > @@ -302,7 +302,15 @@ static const struct dm_rng_ops rockchip_rng_ops = { > > static const struct udevice_id rockchip_rng_match[] = { > { > - .compatible = "rockchip,cryptov1-rng", > + .compatible = "rockchip,rk3288-crypto", > + .data = (ulong)&rk_cryptov1_soc_data, > + }, > + { > + .compatible = "rockchip,rk3328-crypto", > + .data = (ulong)&rk_cryptov1_soc_data, > + }, > + { > + .compatible = "rockchip,rk3399-crypto", > .data = (ulong)&rk_cryptov1_soc_data, > }, > {
Hello Heinrich, On 2024-02-07 08:12, Heinrich Schuchardt wrote: > On 2/7/24 01:02, Jonas Karlman wrote: >> Replace the rockchip,cryptov1-rng compatible with compatibles used in >> the linux device tree for RK3288, RK3328 and RK3399 to ease sync of >> SoC >> device tree from linux. >> >> Signed-off-by: Jonas Karlman <jonas@kwiboo.se> > > It is strange that U-Boot only uses the random number generation while > Linux only seems to use the crypto algorithm acceleration. > > U-Boot has some crypto accelerator drivers in drivers/crypto/. But here > we only make use of modular exponentiation (see struct mod_exp_ops). We > could improve on crypto acceleration. Pleas, let's keep in mind that using crypto accelerators doesn't always result in improved performance; it all depends on the workload and on the particular SoC. For example, performing crypto operations on small chunks of data may be much faster when performed on a CPU core. Another example is that some crypto IP cores don't use the available CPU caches at all, which inevitably slows them down. Though, crypto IP cores are quite often more power-efficient vs. performing the same crypto operations on a CPU core, which seems to be the main reason why they get included in a number of SoCs. Of course, this power efficiency becomes noticeable only when offloading crypto operations performed on large chunks of data, or when offloading for sizable amounts of time. > The current change looks good to me. > > Reviewed-by: Heinrich Schuchardt <xypron.glpk@gmx.de> > >> --- >> arch/arm/dts/rk3328-u-boot.dtsi | 2 +- >> arch/arm/dts/rk3399-u-boot.dtsi | 2 +- >> drivers/rng/rockchip_rng.c | 10 +++++++++- >> 3 files changed, 11 insertions(+), 3 deletions(-) >> >> diff --git a/arch/arm/dts/rk3328-u-boot.dtsi >> b/arch/arm/dts/rk3328-u-boot.dtsi >> index e087b02893c1..d805c2f394f8 100644 >> --- a/arch/arm/dts/rk3328-u-boot.dtsi >> +++ b/arch/arm/dts/rk3328-u-boot.dtsi >> @@ -28,7 +28,7 @@ >> }; >> >> rng: rng@ff060000 { >> - compatible = "rockchip,cryptov1-rng"; >> + compatible = "rockchip,rk3328-crypto"; >> reg = <0x0 0xff060000 0x0 0x4000>; >> status = "okay"; >> }; >> diff --git a/arch/arm/dts/rk3399-u-boot.dtsi >> b/arch/arm/dts/rk3399-u-boot.dtsi >> index 3423b882c437..87b173e59579 100644 >> --- a/arch/arm/dts/rk3399-u-boot.dtsi >> +++ b/arch/arm/dts/rk3399-u-boot.dtsi >> @@ -30,7 +30,7 @@ >> }; >> >> rng: rng@ff8b8000 { >> - compatible = "rockchip,cryptov1-rng"; >> + compatible = "rockchip,rk3399-crypto"; >> reg = <0x0 0xff8b8000 0x0 0x1000>; >> status = "okay"; >> }; >> diff --git a/drivers/rng/rockchip_rng.c b/drivers/rng/rockchip_rng.c >> index 705b424cf3dd..e82b5572fec5 100644 >> --- a/drivers/rng/rockchip_rng.c >> +++ b/drivers/rng/rockchip_rng.c >> @@ -302,7 +302,15 @@ static const struct dm_rng_ops rockchip_rng_ops = >> { >> >> static const struct udevice_id rockchip_rng_match[] = { >> { >> - .compatible = "rockchip,cryptov1-rng", >> + .compatible = "rockchip,rk3288-crypto", >> + .data = (ulong)&rk_cryptov1_soc_data, >> + }, >> + { >> + .compatible = "rockchip,rk3328-crypto", >> + .data = (ulong)&rk_cryptov1_soc_data, >> + }, >> + { >> + .compatible = "rockchip,rk3399-crypto", >> .data = (ulong)&rk_cryptov1_soc_data, >> }, >> {
On 2024-02-07 08:12, Heinrich Schuchardt wrote: > On 2/7/24 01:02, Jonas Karlman wrote: >> Replace the rockchip,cryptov1-rng compatible with compatibles used in >> the linux device tree for RK3288, RK3328 and RK3399 to ease sync of SoC >> device tree from linux. >> >> Signed-off-by: Jonas Karlman <jonas@kwiboo.se> > > It is strange that U-Boot only uses the random number generation while > Linux only seems to use the crypto algorithm acceleration. > > U-Boot has some crypto accelerator drivers in drivers/crypto/. But here > we only make use of modular exponentiation (see struct mod_exp_ops). We > could improve on crypto acceleration. I believe kaslrseed was the main intended use case of this driver in U-Boot, and the TRNG feature of crypto hw block can serve that purpose. Regards, Jonas > > The current change looks good to me. > > Reviewed-by: Heinrich Schuchardt <xypron.glpk@gmx.de> > >> --- >> arch/arm/dts/rk3328-u-boot.dtsi | 2 +- >> arch/arm/dts/rk3399-u-boot.dtsi | 2 +- >> drivers/rng/rockchip_rng.c | 10 +++++++++- >> 3 files changed, 11 insertions(+), 3 deletions(-) >> >> diff --git a/arch/arm/dts/rk3328-u-boot.dtsi b/arch/arm/dts/rk3328-u-boot.dtsi >> index e087b02893c1..d805c2f394f8 100644 >> --- a/arch/arm/dts/rk3328-u-boot.dtsi >> +++ b/arch/arm/dts/rk3328-u-boot.dtsi >> @@ -28,7 +28,7 @@ >> }; >> >> rng: rng@ff060000 { >> - compatible = "rockchip,cryptov1-rng"; >> + compatible = "rockchip,rk3328-crypto"; >> reg = <0x0 0xff060000 0x0 0x4000>; >> status = "okay"; >> }; >> diff --git a/arch/arm/dts/rk3399-u-boot.dtsi b/arch/arm/dts/rk3399-u-boot.dtsi >> index 3423b882c437..87b173e59579 100644 >> --- a/arch/arm/dts/rk3399-u-boot.dtsi >> +++ b/arch/arm/dts/rk3399-u-boot.dtsi >> @@ -30,7 +30,7 @@ >> }; >> >> rng: rng@ff8b8000 { >> - compatible = "rockchip,cryptov1-rng"; >> + compatible = "rockchip,rk3399-crypto"; >> reg = <0x0 0xff8b8000 0x0 0x1000>; >> status = "okay"; >> }; >> diff --git a/drivers/rng/rockchip_rng.c b/drivers/rng/rockchip_rng.c >> index 705b424cf3dd..e82b5572fec5 100644 >> --- a/drivers/rng/rockchip_rng.c >> +++ b/drivers/rng/rockchip_rng.c >> @@ -302,7 +302,15 @@ static const struct dm_rng_ops rockchip_rng_ops = { >> >> static const struct udevice_id rockchip_rng_match[] = { >> { >> - .compatible = "rockchip,cryptov1-rng", >> + .compatible = "rockchip,rk3288-crypto", >> + .data = (ulong)&rk_cryptov1_soc_data, >> + }, >> + { >> + .compatible = "rockchip,rk3328-crypto", >> + .data = (ulong)&rk_cryptov1_soc_data, >> + }, >> + { >> + .compatible = "rockchip,rk3399-crypto", >> .data = (ulong)&rk_cryptov1_soc_data, >> }, >> { >
diff --git a/arch/arm/dts/rk3328-u-boot.dtsi b/arch/arm/dts/rk3328-u-boot.dtsi index e087b02893c1..d805c2f394f8 100644 --- a/arch/arm/dts/rk3328-u-boot.dtsi +++ b/arch/arm/dts/rk3328-u-boot.dtsi @@ -28,7 +28,7 @@ }; rng: rng@ff060000 { - compatible = "rockchip,cryptov1-rng"; + compatible = "rockchip,rk3328-crypto"; reg = <0x0 0xff060000 0x0 0x4000>; status = "okay"; }; diff --git a/arch/arm/dts/rk3399-u-boot.dtsi b/arch/arm/dts/rk3399-u-boot.dtsi index 3423b882c437..87b173e59579 100644 --- a/arch/arm/dts/rk3399-u-boot.dtsi +++ b/arch/arm/dts/rk3399-u-boot.dtsi @@ -30,7 +30,7 @@ }; rng: rng@ff8b8000 { - compatible = "rockchip,cryptov1-rng"; + compatible = "rockchip,rk3399-crypto"; reg = <0x0 0xff8b8000 0x0 0x1000>; status = "okay"; }; diff --git a/drivers/rng/rockchip_rng.c b/drivers/rng/rockchip_rng.c index 705b424cf3dd..e82b5572fec5 100644 --- a/drivers/rng/rockchip_rng.c +++ b/drivers/rng/rockchip_rng.c @@ -302,7 +302,15 @@ static const struct dm_rng_ops rockchip_rng_ops = { static const struct udevice_id rockchip_rng_match[] = { { - .compatible = "rockchip,cryptov1-rng", + .compatible = "rockchip,rk3288-crypto", + .data = (ulong)&rk_cryptov1_soc_data, + }, + { + .compatible = "rockchip,rk3328-crypto", + .data = (ulong)&rk_cryptov1_soc_data, + }, + { + .compatible = "rockchip,rk3399-crypto", .data = (ulong)&rk_cryptov1_soc_data, }, {
Replace the rockchip,cryptov1-rng compatible with compatibles used in the linux device tree for RK3288, RK3328 and RK3399 to ease sync of SoC device tree from linux. Signed-off-by: Jonas Karlman <jonas@kwiboo.se> --- arch/arm/dts/rk3328-u-boot.dtsi | 2 +- arch/arm/dts/rk3399-u-boot.dtsi | 2 +- drivers/rng/rockchip_rng.c | 10 +++++++++- 3 files changed, 11 insertions(+), 3 deletions(-)