[PATCH] console: Use flush() before panic and reset

Stefan Roese sr at denx.de
Thu Mar 16 10:00:09 CET 2023


On 3/15/23 21:29, Tony Dinh wrote:
> Hi Simon,
> 
> On Wed, Mar 15, 2023 at 12:43 PM Simon Glass <sjg at chromium.org> wrote:
>>
>> On Tue, 14 Mar 2023 at 18:24, Tony Dinh <mibodhi at gmail.com> wrote:
>>>
>>> To make sure the panic and the reset messages will go out, console flush() should be used.
>>> Sleep periods do not work in early u-boot phase when timer driver is not initialized yet.
>>>
>>> Reference: https://lists.denx.de/pipermail/u-boot/2023-March/512233.html
>>>
>>> Signed-off-by: Tony Dinh <mibodhi at gmail.com>
>>> ---
>>>
>>>   arch/arm/lib/reset.c | 4 ++--
>>>   lib/panic.c          | 4 +++-
>>>   2 files changed, 5 insertions(+), 3 deletions(-)
>>>
>>> diff --git a/arch/arm/lib/reset.c b/arch/arm/lib/reset.c
>>> index 95169bae1c..3e051e36f1 100644
>>> --- a/arch/arm/lib/reset.c
>>> +++ b/arch/arm/lib/reset.c
>>> @@ -25,6 +25,7 @@
>>>   #include <cpu_func.h>
>>>   #include <irq_func.h>
>>>   #include <linux/delay.h>
>>> +#include <stdio.h>
>>
>> Reviewed-by: Simon Glass <sjg at chromium.org>
>>
>> Is flush implemented widely?
> 
> Pali wrote that flush function and here was his comment on the
> referenced thread:
> "Moreover there is already new function named flush() which
> does "wait until stdout message was sent" and can be used instead of
> those sleeps. I have already did it on some places (see git history for
> flush function) but seems that you find some more."
> 
> So I think the answer is not yet widely implemented.

I just checked and it seems it's supported for all platforms using
DM_SERIAL when the serial driver supports the pending() function:

drivers/serial/serial-uclass.c:
#ifdef CONFIG_CONSOLE_FLUSH_SUPPORT
static void _serial_flush(struct udevice *dev)
{
	struct dm_serial_ops *ops = serial_get_ops(dev);

	if (!ops->pending)
		return;
	while (ops->pending(dev, false) > 0)
		;
}
#endif

So AFAICT it's implemented widely. Not sure, why
CONFIG_CONSOLE_FLUSH_SUPPORT was introduced. It's enabled by default
and should be available in all cases IMHO.

Thanks,
Stefan


More information about the U-Boot mailing list