[PATCH v4 2/2] drivers: serial: probe all uart devices

Sean Anderson seanga2 at gmail.com
Tue Dec 1 13:44:37 CET 2020


On 11/23/20 2:14 AM, Vabhav Sharma (OSS) wrote:
> 
> 
>> -----Original Message-----
>> From: Sean Anderson <seanga2 at gmail.com>
>> Sent: Thursday, November 19, 2020 9:01 AM
>> To: Vabhav Sharma (OSS) <vabhav.sharma at oss.nxp.com>;
>> sjg at chromium.org; sr at denx.de
>> Cc: u-boot at lists.denx.de; Varun Sethi <V.Sethi at nxp.com>;
>> andre.przywara at arm.com; Vabhav Sharma <vabhav.sharma at nxp.com>
>> Subject: Re: [PATCH v4 2/2] drivers: serial: probe all uart devices
>>
>> On 11/17/20 10:00 AM, Vabhav Sharma wrote:
>>> From: Vabhav Sharma <vabhav.sharma at nxp.com>
>>>
>>> U-Boot DM model probe only single device at a time which is enabled
>>> and configured using device tree or platform data method.
>>>
>>> PL011 UART IP is SBSA compliant and firmware does the serial port
>>> set-up, initialization and let the kernel use UART port for sending
>>> and receiving characters.
>>>
>>> Normally software talk to one serial port time but some LayerScape
>>> platform require all the UART devices enabled in Linux for various use
>>> case.
>>>
>>> Adding support to probe all enabled serial devices like SBSA compliant
>>> PL011 UART ports probe and initialization by firmware.
>>>
>>> Signed-off-by: Vabhav Sharma <vabhav.sharma at nxp.com>
>>> Reviewed-by: Stefan Roese <sr at denx.de>
>>> Reviewed-by: Simon Glass <sjg at chromium.org>
>>> --
>>> v3:
>>>    Incorporated Simon and Stephan review comment
>>>    - Define generic function uclass_probe_all(enum uclass_id)
>>>      in drivers/core/uclass.c
>>>    - Added the function in caller of serial_find_console_or_panic()
>>>    - Removed repeated sequence with generic function call uclass_probe_all()
>>>    - Dependent on other patch [PATCH] dm: core: add function
>> uclass_probe_all()
>>>      to probe all devices
>>>
>>> v2:
>>>    Incorporated Stefan review comment, Update #ifdef with macro
>>>    if (IS_ENABLED)..
>>> ---
>>>   drivers/serial/Kconfig         | 17 +++++++++++++++++
>>>   drivers/serial/serial-uclass.c |  4 ++++
>>>   2 files changed, 21 insertions(+)
>>>
>>> diff --git a/drivers/serial/Kconfig b/drivers/serial/Kconfig index
>>> b4805a2..af8779b 100644
>>> --- a/drivers/serial/Kconfig
>>> +++ b/drivers/serial/Kconfig
>>> @@ -134,6 +134,23 @@ config SERIAL_SEARCH_ALL
>>>
>>>   	  If unsure, say N.
>>>
>>> +config SERIAL_PROBE_ALL
>>> +	bool "Probe all available serial devices"
>>> +	depends on DM_SERIAL
>>> +	default n
>>> +	help
>>> +	  The serial subsystem only probe for single serial device,
>>
>> nit: probes for a
> Ok
>>
>>> +	  but does not probe for other remaining serial devices.
>>> +	  With this option set,we make probing and searching for
>>
>> nit: set, we
> Sure
>>
>>> +	  all available devices optional.
>>> +	  Normally, U-Boot talk to one serial port at a time but SBSA
>>
>> nit: talks
>> nit: time, but
> Agree
>>
>>> +	  compliant UART devices like PL011 require initialization
>>> +	  by firmware and let the kernel use serial port for sending
>>
>> nit: to let the kernel use the
> I understand
>>
>>> +	  and receiving the characters.
>>> +
>>> +	  If probing is not required for all remaining available
>>> +	  devices other than default current console device, say N.
>>
>> Perhaps use the "If unsure, say N." wording like other Kconfigs.
> Got it
>>
>>> +
>>>   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 f3c25d4..417d3af 100644
>>> --- a/drivers/serial/serial-uclass.c
>>> +++ b/drivers/serial/serial-uclass.c
>>> @@ -172,6 +172,10 @@ int serial_init(void)
>>>   /* Called after relocation */
>>>   int serial_initialize(void)
>>>   {
>>> +	/* Scanning uclass to probe devices */
>>> +	if (IS_ENABLED(CONFIG_SERIAL_PROBE_ALL))
>>> +		uclass_probe_all(UCLASS_SERIAL);
>>> +

Note that you will also need to check the return value here. E.g.

if (IS_ENABLED(CONFIG_SERIAL_PROBE_ALL))
	int ret = uclass_probe_all(UCLASS_SERIAL);
	if (ret)
		return ret;

>>>   	return serial_init();
>>>   }
>>>
>>>
> 



More information about the U-Boot mailing list