mirror of
https://github.com/Fishwaldo/opensbi.git
synced 2025-03-15 19:31:32 +00:00
lib: utils: Improve fdt_serial_init
A final check of all DT nodes does not necessarily find a match, so SBI_ENODEV needs to be returned. Optimize removal of current_driver. Signed-off-by: Xiang W <wxjstz@126.com> Reviewed-by: Anup Patel <anup@brainfault.org>
This commit is contained in:
parent
8b99a7f7d8
commit
264d0be1fd
1 changed files with 17 additions and 31 deletions
|
@ -17,13 +17,6 @@
|
|||
extern struct fdt_serial *fdt_serial_drivers[];
|
||||
extern unsigned long fdt_serial_drivers_size;
|
||||
|
||||
static struct fdt_serial dummy = {
|
||||
.match_table = NULL,
|
||||
.init = NULL,
|
||||
};
|
||||
|
||||
static struct fdt_serial *current_driver = &dummy;
|
||||
|
||||
int fdt_serial_init(void)
|
||||
{
|
||||
const void *prop;
|
||||
|
@ -57,20 +50,15 @@ int fdt_serial_init(void)
|
|||
if (!match)
|
||||
continue;
|
||||
|
||||
if (drv->init) {
|
||||
rc = drv->init(fdt, noff, match);
|
||||
if (rc == SBI_ENODEV)
|
||||
continue;
|
||||
if (rc)
|
||||
return rc;
|
||||
}
|
||||
current_driver = drv;
|
||||
break;
|
||||
}
|
||||
/* drv->init must not be NULL */
|
||||
if (drv->init == NULL)
|
||||
return SBI_EFAIL;
|
||||
|
||||
/* Check if we found desired driver */
|
||||
if (current_driver != &dummy)
|
||||
goto done;
|
||||
rc = drv->init(fdt, noff, match);
|
||||
if (rc == SBI_ENODEV)
|
||||
continue;
|
||||
return rc;
|
||||
}
|
||||
|
||||
/* Lastly check all DT nodes */
|
||||
for (pos = 0; pos < fdt_serial_drivers_size; pos++) {
|
||||
|
@ -80,17 +68,15 @@ int fdt_serial_init(void)
|
|||
if (noff < 0)
|
||||
continue;
|
||||
|
||||
if (drv->init) {
|
||||
rc = drv->init(fdt, noff, match);
|
||||
if (rc == SBI_ENODEV)
|
||||
continue;
|
||||
if (rc)
|
||||
return rc;
|
||||
}
|
||||
current_driver = drv;
|
||||
break;
|
||||
/* drv->init must not be NULL */
|
||||
if (drv->init == NULL)
|
||||
return SBI_EFAIL;
|
||||
|
||||
rc = drv->init(fdt, noff, match);
|
||||
if (rc == SBI_ENODEV)
|
||||
continue;
|
||||
return rc;
|
||||
}
|
||||
|
||||
done:
|
||||
return 0;
|
||||
return SBI_ENODEV;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue