[PATCH v3 0/2] rng: Provide a RNG based on the RISC-V Zkr ISA extension

Heinrich Schuchardt heinrich.schuchardt at canonical.com
Wed Nov 8 15:23:37 CET 2023


On 11/7/23 16:34, Tom Rini wrote:
> On Wed, Nov 08, 2023 at 12:29:03AM +0000, Conor Dooley wrote:
>> On Tue, Nov 07, 2023 at 06:23:05PM -0500, Tom Rini wrote:
> [snip]
>>> Thanks. Setting aside Simon's follow-up, this is what I was looking for.
>>> We might have to wait for Heinrich to return from the conference to have
>>> time to look at how to utilize the above and see what we can do from
>>> there.
>>
>> I did read that, but I don't think most of it is relevant to the binding
>> itself. His five things were:
>> | - U-Boot models hardware (and other things) as devices in driver model [1]
>>
>> This I think should be satisfied. The Zkr CSR is a property of the CPU,
>> and shouldn't have its own DT node IMO. Is it problematic for U-Boot to
>> populate multiple devices for its driver model based on one DT node?

Devices in U-Boot are bound on the basis of a compatible string. All 
RISC-V CPU nodes have a compatible string 'riscv' but that does not 
provide any information about the existence of the Zkr extension. That 
information is in the 'riscv,isa-extensions' property of the cpu nodes 
(see Documentation/devicetree/bindings/riscv/cpus.yaml).

>> I know in Linux that I can create devices using something like
>> platform_device_register(), does U-Boot have a similar facility?

This is what the U_BOOT_DRVINFO() macro in my driver does and which 
Simon discourages.

The discussion boils down to whether U-Boot can force every M-mode 
firmware invoking it to provide a compatible string for Zkr if the 
extension is provided (or to be more restrictive if mseccfg.sseed is set 
to 1).

I would prefer to avoid duplicate encoding of RISC-V extensions in the 
device-tree.

>> https://elixir.bootlin.com/linux/latest/source/drivers/base/platform.c#L767
>>
>> | - U-Boot requires devices to be in the devicetree, with very limited
>> | exceptions [2]
>>
>> | - Where multiple devices exist in a uclass, it is desirable to be able
>> | to number them [3]
>>
>> I'm not sure really how this one ties in. Do you need a number for each
>> CPU that supports Zkr, since a system may be heterogeneous? I think that
>> how you treat things like that is beyond communicating support via DT
>> though, IMO the job of the DT is just to tell U-Boot on which CPUs it
>> can access the seed CSR.

U-Boot only uses a single hart. It is for this specific hart that we 
need to find out if the seed register provided by the Zkr extension is 
readable. The register is only readable if additionally the 
mseccfg.sseed bit is set by machine mode firmware.

Thus any additional device-tree node related to the Zkr extension would 
have to be provided per Zkr enabled 'cpu' device-tree node.

Best regards

Heinrich

>>
>> | - Similarly it is useful to be able select a particular device, e.g.
>> | with a phandle [4]
>>
>> I suppose a phandle to the CPU would work in this case.
>>
>> | - U-Boot uses devicetree for configuration as it has no userspace
> 
> I mean, the reason I was setting aside Simon's question is that in my
> mind, we (U-Boot) need to think about what we're declaring as a MUST
> because the constant feedback that we get is "No, why does that need to
> get added to DT? Can't you just use ... ?". So I do find your answers
> above enlightening in that regard.
> 



More information about the U-Boot mailing list