[PATCH 1/1] rng: fix ARMv8.5 RNDR driver
Heinrich Schuchardt
heinrich.schuchardt at canonical.com
Sat Nov 4 19:27:45 CET 2023
On 11/4/23 19:13, Andre Przywara wrote:
> On Sat, 4 Nov 2023 09:00:07 +0200
> Heinrich Schuchardt <heinrich.schuchardt at canonical.com> wrote:
>
> Hi Heinrich,
>
> many thanks for finding and fixing this!
>
>> In different parts of our code we assume that the first RNG device is the
>> one to be used. Therefore it is preferable to detect the availability of
>> the RNDR register already in the bind method.
>>
>> For signaling the non-existence of a device the driver model requires using
>> ENOENT (and not ENODEV).
>
> Doh, now I feel silly! I thought I checked the call path, and looked at
> initcall_run_list(), which prints the error message, and suggests that
> only 0 would be acceptable.
> But indeed -ENOENT works, with the slight caveat of printing:
> ================
> No match for driver 'arm-rndr'
> Some drivers were not found
The message texts are definitively wrong. They should be:
No device for driver 'arm-rndr'.
Some devices not found.
@Simon
I think we should make these messages log_debug().
Best regards
Heinrich
> ================
>
> But it's definitely an improvement over the current situation, and I
> don't feel like boiling the DM ocean for this stupid little driver.
>
>> Fixes: 31565bb0aa2d ("driver: rng: Add DM_RNG interface for ARMv8.5 RNDR registers")
>> Signed-off-by: Heinrich Schuchardt> <heinrich.schuchardt at canonical.com>
>
> Reviewed-by: Andre Przywara <andre.przywara at arm.com>
> Tested-by: Andre Przywara <andre.przywara at arm.com>
>
> Many thanks!
> Andre
>
> ---
>> drivers/rng/arm_rndr.c | 6 +++---
>> 1 file changed, 3 insertions(+), 3 deletions(-)
>>
>> diff --git a/drivers/rng/arm_rndr.c b/drivers/rng/arm_rndr.c
>> index 55989743ea..4512330e68 100644
>> --- a/drivers/rng/arm_rndr.c
>> +++ b/drivers/rng/arm_rndr.c
>> @@ -62,10 +62,10 @@ static const struct dm_rng_ops arm_rndr_ops = {
>> .read = arm_rndr_read,
>> };
>>
>> -static int arm_rndr_probe(struct udevice *dev)
>> +static int arm_rndr_bind(struct udevice *dev)
>> {
>> if (!cpu_has_rndr())
>> - return -ENODEV;
>> + return -ENOENT;
>>
>> return 0;
>> }
>> @@ -74,7 +74,7 @@ U_BOOT_DRIVER(arm_rndr) = {
>> .name = DRIVER_NAME,
>> .id = UCLASS_RNG,
>> .ops = &arm_rndr_ops,
>> - .probe = arm_rndr_probe,
>> + .bind = arm_rndr_bind,
>> };
>>
>> U_BOOT_DRVINFO(cpu_arm_rndr) = {
>
More information about the U-Boot
mailing list