[U-Boot] [U-Boot-DM] [PATCH] drivers: serial: probe all serial devices

Marek Vasut marex at denx.de
Tue Oct 16 06:59:01 UTC 2018


On 10/15/2018 02:09 AM, Vabhav Sharma wrote:
> Serial subsystem search and probe only one first serial
> device and unable to use remaining available UART devices

The serial devices are bound and you can switch to them. What is the
real problem ?

> This patch changes the logic to probe all available serial devices
> using platform data or device tree in DM model in order to use all
> UART devices

Get rid of the ifdeffery and copied code please.

> Signed-off-by: Vabhav Sharma <vabhav.sharma at nxp.com>
> ---
>  drivers/serial/Kconfig         | 12 ++++++++++++
>  drivers/serial/serial-uclass.c | 42 ++++++++++++++++++++++++++++++++++++++++++
>  2 files changed, 54 insertions(+)
> 
> diff --git a/drivers/serial/Kconfig b/drivers/serial/Kconfig
> index 597db4b..d6451b1 100644
> --- a/drivers/serial/Kconfig
> +++ b/drivers/serial/Kconfig
> @@ -133,6 +133,18 @@ config SERIAL_SEARCH_ALL
>  
>  	  If unsure, say N.
>  
> +config SERIAL_PROBE_ALL
> +	bool "Probe all available serial devices"
> +	depends on DM_SERIAL
> +	help
> +	 The serial subsystem only probe for single serial device, but does
> +	 not probe for remaining available devices.
> +	 With this option set,we make probing for all available devices
> +	 mandatory.
> +
> +	 If probing is not required for all remaining available
> +	 devices other than default current console device, say N.
> +
>  config SPL_DM_SERIAL
>  	bool "Enable Driver Model for serial drivers in SPL"
>  	depends on DM_SERIAL && SPL_DM
> diff --git a/drivers/serial/serial-uclass.c b/drivers/serial/serial-uclass.c
> index e50f0aa..405e60e 100644
> --- a/drivers/serial/serial-uclass.c
> +++ b/drivers/serial/serial-uclass.c
> @@ -82,6 +82,13 @@ static void serial_find_console_or_panic(void)
>  		uclass_first_device(UCLASS_SERIAL, &dev);
>  		if (dev) {
>  			gd->cur_serial_dev = dev;
> +#ifdef CONFIG_SERIAL_PROBE_ALL
> +			/* Scanning uclass to probe all devices */
> +			for (;
> +			     dev;
> +			     uclass_next_device(&dev))
> +				;
> +#endif
>  			return;
>  		}
>  	} else if (CONFIG_IS_ENABLED(OF_CONTROL) && blob) {
> @@ -92,11 +99,25 @@ static void serial_find_console_or_panic(void)
>  			if (np && !uclass_get_device_by_ofnode(UCLASS_SERIAL,
>  					np_to_ofnode(np), &dev)) {
>  				gd->cur_serial_dev = dev;
> +#ifdef CONFIG_SERIAL_PROBE_ALL
> +				/* Scanning uclass to probe all devices */
> +				for (;
> +				     dev;
> +				     uclass_next_device(&dev))
> +					;
> +#endif
>  				return;
>  			}
>  		} else {
>  			if (!serial_check_stdout(blob, &dev)) {
>  				gd->cur_serial_dev = dev;
> +#ifdef CONFIG_SERIAL_PROBE_ALL
> +				/* Scanning uclass to probe all devices */
> +				for (;
> +				     dev;
> +				     uclass_next_device(&dev))
> +					;
> +#endif
>  				return;
>  			}
>  		}
> @@ -121,6 +142,13 @@ static void serial_find_console_or_panic(void)
>  		    !uclass_get_device(UCLASS_SERIAL, INDEX, &dev)) {
>  			if (dev->flags & DM_FLAG_ACTIVATED) {
>  				gd->cur_serial_dev = dev;
> +#ifdef CONFIG_SERIAL_PROBE_ALL
> +				/* Scanning uclass to probe all devices */
> +				for (;
> +				     dev;
> +				     uclass_next_device(&dev))
> +					;
> +#endif
>  				return;
>  			}
>  		}
> @@ -132,6 +160,13 @@ static void serial_find_console_or_panic(void)
>  			if (!ret) {
>  				/* Device did succeed probing */
>  				gd->cur_serial_dev = dev;
> +#ifdef CONFIG_SERIAL_PROBE_ALL
> +				/* Scanning uclass to probe all devices */
> +				for (;
> +				     dev;
> +				     uclass_next_device(&dev))
> +					;
> +#endif
>  				return;
>  			}
>  		}
> @@ -140,6 +175,13 @@ static void serial_find_console_or_panic(void)
>  		    !uclass_get_device(UCLASS_SERIAL, INDEX, &dev) ||
>  		    (!uclass_first_device(UCLASS_SERIAL, &dev) && dev)) {
>  			gd->cur_serial_dev = dev;
> +#ifdef CONFIG_SERIAL_PROBE_ALL
> +			/* Scanning uclass to probe all devices */
> +			for (;
> +			     dev;
> +			     uclass_next_device(&dev))
> +				;
> +#endif
>  			return;
>  		}
>  #endif
> 


-- 
Best regards,
Marek Vasut


More information about the U-Boot mailing list