[U-Boot] [PATCH V4] console: Implement pre-console buffer

Graeme Russ graeme.russ at gmail.com
Tue Sep 27 13:22:36 CEST 2011


Hi Vadim,

On 27/09/11 08:50, Vadim Bendebury wrote:
> On Wed, Aug 31, 2011 at 5:58 AM, Graeme Russ <graeme.russ at gmail.com> wrote:
>> Allow redirection of console output prior to console initialisation to a
>> temporary buffer.
>>
>> To enable this functionality, the board configuration file must define:
>>  - CONFIG_PRE_CONSOLE_BUFFER - Enable pre-console buffer
>>  - CONFIG_PRE_CON_BUF_ADDR - Base address of pre-console buffer
>>  - CONFIG_PRE_CON_BUF_SZ - Size of pre-console buffer (in bytes)
>>
>> The pre-console buffer will buffer the last CONFIG_PRE_CON_BUF_SZ bytes
>> Any earlier characters are silently dropped.
>>
>> Signed-off-by: Graeme Russ <graeme.russ at gmail.com>

[snip]

> 
> I know I am late to the party here, but all of a sudden I need to
> implement something similar, albeit slightly different:

better late than never :)

> - the memory could be allocated by the "cold bootprom" which starts u-boot;

Typically, the pre-console buffer would exist in the CPU cache (or similar
non-(S)DRAM location)

> - all console output needs to be saved, not just until the moment when
> the console hardware is initialized.

That could be a _huge_ amount of info and highly variable. Remember, the
available space for a pre-console buffer could be tiny. If this is needed,
then maybe look at forking stdio instead (one branch to console, one branch
to you console buffer)

> I could work on top of this patch and send another one once this one
> has been accepted. May I suggest an improvement though:
> 
> is it really necessary to store the index in the global data
> structure. This requires editing all these .h files adding another
> unsighty  conditionally compiled field. Why not to store the index as
> the first word in the buffer allocated for this temp storage?

I like this - but instead:

struct pre_con_buff {
	int idx;
	char *buffer[CONFIG_PRE_CON_BUF_SZ];
}

struct pre_con_buff *pre_con_buffer;

pre_con_buffer = (struct pre_con_buff *)CONFIG_PRE_CON_BUF_ADDR;

Regards,

Graeme


More information about the U-Boot mailing list