On 22.10.2018 19:31, Martin Fuzzey wrote: > When the "w1 bus" command is used with no bus master present > a data abort may occur. > > This is because uclass_first_device() returns zero, but sets the output > struct udevice pointer to NULL in the no device found case. > > Fix w1_get_bus() to account for this and return an error code > as is expected by the callers. > > Signed-off-by: Martin Fuzzey <martin.fuzzey@flowbird.group> > --- > drivers/w1/w1-uclass.c | 14 ++++++++------ > 1 file changed, 8 insertions(+), 6 deletions(-) > > diff --git a/drivers/w1/w1-uclass.c b/drivers/w1/w1-uclass.c > index aecf7fe..cb41b68 100644 > --- a/drivers/w1/w1-uclass.c > +++ b/drivers/w1/w1-uclass.c > @@ -115,17 +115,19 @@ int w1_get_bus(int busnum, struct udevice **busp) > struct udevice *dev; > > for (ret = uclass_first_device(UCLASS_W1, &dev); > - !ret; > - uclass_next_device(&dev), i++) { > - if (ret) { > - debug("Cannot find w1 bus %d\n", busnum); > - return ret; > - } > + dev && !ret; > + ret = uclass_next_device(&dev), i++) { > if (i == busnum) { > *busp = dev; > return 0; > } > } > + > + if (!ret) {
Hi Martin, Does this mean that if ret != 0 , we had errors, but we are not printing this debug message ? Perhaps we should print out here the debug error regardless of the ret value ? Since we exited with a return 0 if we did find the proper bus. May I also ask on which board setup you tested this ? And which defconfig. Thanks, Eugen > + debug("Cannot find w1 bus %d\n", busnum); > + ret = -ENODEV; > + } > + > return ret; > } > > _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot