
Hi Heinrih,
On 19 April 2017 at 09:55, Heinrich Schuchardt xypron.glpk@gmx.de wrote:
On 04/19/2017 04:28 PM, Simon Glass wrote:
Hi Heinrich,
On 19 April 2017 at 05:26, Heinrich Schuchardt xypron.glpk@gmx.de wrote:
When iterating over the devices of an uclass the iteration stops at the first device that cannot be probed. When calling booefi this will result in no block device being passed to the EFI executable if the first device cannot be probed.
The problem was reported by Andreas Färber in https://lists.denx.de/pipermail/u-boot/2017-April/287432.html
For testing I used an odroid-c2 with a dts including &sd_emmc_a { status = "okay"; } This device does not exist on the board and cannot be initialized.
With the patch uclass_first_device and uclass_next_device iterate internally until they find the first device that can be probed or the end of the device list is reached.
I would like to avoid changing the API that much. Can you please change it to stop calling the tail function and always set the device, like you did in v1?
Hello Simon,
with the patch nothing changes if the the available devices an contiguous starting at index 0.
Not calling the tail function would really change the API function in all cases. So why would we want to do so?
The current behavior is to stop at the first device that cannot be probed. Which use of uclass_first_device/uclass_next_device do you see in the U-Boot code that would benefit from this?
Also don't forget to add a test for this bahaviour. You may need to have sandbox device that returns an error when probing. Perhaps add another compatible string to denx,u-boot-fdt-test?
I will give it a try.
See my follow-up replies. I don't think we should change that function, actually.
Best regards
Heinrich
Debug output is provided for the two functions.
Reported-by: Andreas Färber afaerber@suse.de Cc: Simon Glass sjg@chromium.org Signed-off-by: Heinrich Schuchardt xypron.glpk@gmx.de
v2: As suggested by Simon Glass correct uclass_first_device() and uclass_next_device() instead of uclass_get_device_tail() to avoid side effects. v1: The original patch was posted as core/uclass: uclass_get_device_tail: always set devp https://lists.denx.de/pipermail/u-boot/2017-April/288068.html
drivers/core/uclass.c | 44 +++++++++++++++++++++++++++++++++----------- 1 file changed, 33 insertions(+), 11 deletions(-)
Regards, Simon