
On 12/28/2017 03:25 PM, Lukasz Majewski wrote:
Hi Marek,
If the loader->load_image returns -EAGAIN, it is an indication the loading process should restart the loading, possible due to DTO being applied on the U-Boot's DT. Restart the loading until the loader stops returning -EAGAIN.
Signed-off-by: Marek Vasut marex@denx.de Cc: Pantelis Antoniou pantelis.antoniou@konsulko.com Cc: Simon Glass sjg@chromium.org
common/spl/spl.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/common/spl/spl.c b/common/spl/spl.c index 2444abbb08..27f44c27b0 100644 --- a/common/spl/spl.c +++ b/common/spl/spl.c @@ -413,11 +413,16 @@ static int spl_load_image(struct spl_image_info *spl_image, struct spl_image_loader *loader) { struct spl_boot_device bootdev;
int ret;
bootdev.boot_device = loader->boot_device; bootdev.boot_device_name = NULL;
- return loader->load_image(spl_image, &bootdev);
- do {
ret = loader->load_image(spl_image, &bootdev);
- } while (ret == -EAGAIN);
Maybe it would be good to have some counter or timeout (although, I doubt if any timer is set properly so early) to give the user some information if we fail?
If you fail, ret won't be EAGAIN and you'd exit the loop and propagate the error.