[PATCH 2/4] lib: utils: Improve fdt_serial_init
Anup Patel
anup at brainfault.org
Sun May 21 20:49:12 PDT 2023
On Tue, May 9, 2023 at 8:17 PM Xiang W <wxjstz at 126.com> wrote:
>
> 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 at 126.com>
Looks good to me.
Reviewed-by: Anup Patel <anup at brainfault.org>
Regards,
Anup
> ---
> lib/utils/serial/fdt_serial.c | 48 +++++++++++++----------------------
> 1 file changed, 17 insertions(+), 31 deletions(-)
>
> diff --git a/lib/utils/serial/fdt_serial.c b/lib/utils/serial/fdt_serial.c
> index 1a4bf9e..0baa722 100644
> --- a/lib/utils/serial/fdt_serial.c
> +++ b/lib/utils/serial/fdt_serial.c
> @@ -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;
> }
> --
> 2.39.2
>
More information about the opensbi
mailing list