[U-Boot] [PATCH v4] Add board_pre_console_putc to deal with early console output

Simon Glass sjg at chromium.org
Wed Dec 7 19:20:18 CET 2011


Hi Graeme,

On Sun, Dec 4, 2011 at 8:35 PM, Graeme Russ <graeme.russ at gmail.com> wrote:
> Hi Simon,
>
> On Mon, Dec 5, 2011 at 3:31 PM, Simon Glass <sjg at chromium.org> wrote:
>> Hi Graeme,
>>
>> On Sun, Dec 4, 2011 at 7:40 PM, Graeme Russ <graeme.russ at gmail.com> wrote:
>>> Hi Simon,
>>>
>>> On Mon, Dec 5, 2011 at 2:34 PM, Simon Glass <sjg at chromium.org> wrote:
>>>> Hi Stefan,
>>>>
>>>> On Sun, Dec 4, 2011 at 10:56 AM, Stefano Babic <sbabic at denx.de> wrote:
>>>>> On 02/12/2011 19:16, Simon Glass wrote:
>>>>>
>>>>>> It actually started as a last-ditch panic message printer. It morphed
>>>>>> into the general pre-console putc after discussions on the list (with
>>>>>> Graeme).
>>>>>>
>>>>>> It can happen that your early board code does not know what clocks to
>>>>>> use, or can't find a console, or some other critical error. It then
>>>>>> calls panic() which silently dies or maybe reboots if you are lucky.
>>>>>> This problem mostly comes about with device trees, where we must have
>>>>>> certain info in the device tree before we can even get to relocation.
>>>>>>
>>>>>> The idea is that boards provide a way of outputting characters which
>>>>>> tries to work on all types of boards with that SOC. For example, they
>>>>>> output the characters on all UARTs with various clock options, etc.
>>>>>>
>>>>>> We use it on Tegra to print a friendly panic message when something is
>>>>>> horribly wrong. In this case we will never make it to relocation so
>>>>>> the pre-console buffer will not be displayed. So we can't rely on
>>>>>> that.
>>>>>
>>>>> I do not know if this mechanism can be used on other SOCs, but IMHO it
>>>>> does not hurt and it helps at least on Tegra, as you explained me.
>>>>>
>>>>> Applied to u-boot-staging, sbabic at denx.de branch
>>>>
>>>> Thanks. I think it can be used on any SOC with internal UARTs and a
>>>> reasonably small list of permitted clock speeds. I suspect I will be
>>>> trying it out on a few before long.
>>>
>>> Can it be used in conjuction with PRE_CONSOLE_BUFFER? i.e. panic()
>>> prints the contents of the PRE_CONSOLE_BUFFER before the panic
>>> message? I think that would be invaluable in determining what was
>>> happening leading up to the panic
>>
>> It could have been when it was still a pre-console panic. But now that
>> it has morphed into a general putc(), I suppose the only option is to
>> somehow detect the first call and send the pre-console text first?
>
> Couldn't the panic() function detect that the pre console buffer is
> not empty and dump it before the panic message? Maybe even a generic
> panic_dump_pre_console_buffer() which checks if console has been
> initialised (in which case the buffer has already been dumped) and if
> the buffer is not empty, use pre_console_putc() to dump the buffer.
> This would be the first call in panic() followed by printing the panic
> message

Yes it could - sounds like a great idea. Patches welcome :-)

Regards,
Simon

>
> Regards,
>
> Graeme


More information about the U-Boot mailing list