From: Hans de Goede <hdegoede@redhat.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [U-Boot, 1/2] console: Use pre-console buffer to get complete log on all consoles
Date: Tue, 13 Jan 2015 11:59:02 +0100 [thread overview]
Message-ID: <54B4FA76.7090109@redhat.com> (raw)
In-Reply-To: <54B3AA95.2010902@redhat.com>
Hi,
On 12-01-15 12:05, Hans de Goede wrote:
> Hi,
>
> On 08-01-15 08:02, Siarhei Siamashka wrote:
>> Currently the pre-console buffer can accumulate early log messages
>> and flush them to the serial console as soon as it becomes available.
>>
>> This patch just adds one more pre-console buffer flushing point and
>> does all the same for the other consoles too. This is particularly
>> useful for the vga/hdmi/lcd console, where we can see all the older
>> messages now (except for the log messages from SPL).
>>
>> Naturally, we don't want to get an extra copy of the log messages
>> on the serial console again at the second flushing point, so the
>> serial console has to be explicitly filtered out.
>>
>> Signed-off-by: Siarhei Siamashka <siarhei.siamashka@gmail.com>
>
> Thanks for writing this, this is something which I wanted to have
> for a while now :)
>
> Code wise this looks good to me:
>
> Acked-by: Hans de Goede <hdegoede@redhat.com>
>
> I wonder who should pick this patch up though, Tom can you pick
> this up ?
>
> Siarhei can you respin the sunxi patch for this using the address
> I suggested in my other mail ?
Never mind, given Tom's ack to take 1/2 upstream through the sunxi
tree I've fixed up the address myself, and queued both for merging
in u-boot-sunxi/next
Regards,
Hans
>
> Regards,
>
> Hans
>
>
>> ---
>> common/console.c | 46 +++++++++++++++++++++++++++++++++++++++++-----
>> 1 file changed, 41 insertions(+), 5 deletions(-)
>>
>> diff --git a/common/console.c b/common/console.c
>> index 29560c3..fc1963b 100644
>> --- a/common/console.c
>> +++ b/common/console.c
>> @@ -199,6 +199,20 @@ static void console_putc(int file, const char c)
>> }
>> }
>>
>> +#ifdef CONFIG_PRE_CONSOLE_BUFFER
>> +static void console_putc_noserial(int file, const char c)
>> +{
>> + int i;
>> + struct stdio_dev *dev;
>> +
>> + for (i = 0; i < cd_count[file]; i++) {
>> + dev = console_devices[file][i];
>> + if (dev->putc != NULL && strcmp(dev->name, "serial") != 0)
>> + dev->putc(dev, c);
>> + }
>> +}
>> +#endif
>> +
>> static void console_puts(int file, const char *s)
>> {
>> int i;
>> @@ -236,6 +250,14 @@ static inline void console_putc(int file, const char c)
>> stdio_devices[file]->putc(stdio_devices[file], c);
>> }
>>
>> +#ifdef CONFIG_PRE_CONSOLE_BUFFER
>> +static inline void console_putc_noserial(int file, const char c)
>> +{
>> + if (strcmp(stdio_devices[file]->name, "serial") != 0)
>> + stdio_devices[file]->putc(stdio_devices[file], c);
>> +}
>> +#endif
>> +
>> static inline void console_puts(int file, const char *s)
>> {
>> stdio_devices[file]->puts(stdio_devices[file], s);
>> @@ -382,6 +404,9 @@ int tstc(void)
>> return serial_tstc();
>> }
>>
>> +#define PRE_CONSOLE_FLUSHPOINT1_SERIAL 0
>> +#define PRE_CONSOLE_FLUSHPOINT2_EVERYTHING_BUT_SERIAL 1
>> +
>> #ifdef CONFIG_PRE_CONSOLE_BUFFER
>> #define CIRC_BUF_IDX(idx) ((idx) % (unsigned long)CONFIG_PRE_CON_BUF_SZ)
>>
>> @@ -398,7 +423,7 @@ static void pre_console_puts(const char *s)
>> pre_console_putc(*s++);
>> }
>>
>> -static void print_pre_console_buffer(void)
>> +static void print_pre_console_buffer(int flushpoint)
>> {
>> unsigned long i = 0;
>> char *buffer = (char *)CONFIG_PRE_CON_BUF_ADDR;
>> @@ -407,12 +432,20 @@ static void print_pre_console_buffer(void)
>> i = gd->precon_buf_idx - CONFIG_PRE_CON_BUF_SZ;
>>
>> while (i < gd->precon_buf_idx)
>> - putc(buffer[CIRC_BUF_IDX(i++)]);
>> + switch (flushpoint) {
>> + case PRE_CONSOLE_FLUSHPOINT1_SERIAL:
>> + putc(buffer[CIRC_BUF_IDX(i++)]);
>> + break;
>> + case PRE_CONSOLE_FLUSHPOINT2_EVERYTHING_BUT_SERIAL:
>> + console_putc_noserial(stdout,
>> + buffer[CIRC_BUF_IDX(i++)]);
>> + break;
>> + }
>> }
>> #else
>> static inline void pre_console_putc(const char c) {}
>> static inline void pre_console_puts(const char *s) {}
>> -static inline void print_pre_console_buffer(void) {}
>> +static inline void print_pre_console_buffer(int flushpoint) {}
>> #endif
>>
>> void putc(const char c)
>> @@ -441,6 +474,7 @@ void putc(const char c)
>> fputc(stdout, c);
>> } else {
>> /* Send directly to the handler */
>> + pre_console_putc(c);
>> serial_putc(c);
>> }
>> }
>> @@ -472,6 +506,7 @@ void puts(const char *s)
>> fputs(stdout, s);
>> } else {
>> /* Send directly to the handler */
>> + pre_console_puts(s);
>> serial_puts(s);
>> }
>> }
>> @@ -679,7 +714,7 @@ int console_init_f(void)
>> gd->flags |= GD_FLG_SILENT;
>> #endif
>>
>> - print_pre_console_buffer();
>> + print_pre_console_buffer(PRE_CONSOLE_FLUSHPOINT1_SERIAL);
>>
>> return 0;
>> }
>> @@ -794,6 +829,7 @@ done:
>> if ((stdio_devices[stdin] == NULL) && (stdio_devices[stdout] == NULL))
>> return 0;
>> #endif
>> + print_pre_console_buffer(PRE_CONSOLE_FLUSHPOINT2_EVERYTHING_BUT_SERIAL);
>> return 0;
>> }
>>
>> @@ -869,7 +905,7 @@ int console_init_r(void)
>> if ((stdio_devices[stdin] == NULL) && (stdio_devices[stdout] == NULL))
>> return 0;
>> #endif
>> -
>> + print_pre_console_buffer(PRE_CONSOLE_FLUSHPOINT2_EVERYTHING_BUT_SERIAL);
>> return 0;
>> }
>>
>>
next prev parent reply other threads:[~2015-01-13 10:59 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-01-08 7:02 [U-Boot] [PATCH 1/2] console: Use pre-console buffer to get complete log on all consoles Siarhei Siamashka
2015-01-08 7:02 ` [U-Boot] [PATCH 2/2] sunxi: Enable pre-console buffer Siarhei Siamashka
2015-01-08 8:49 ` Ian Campbell
2015-01-09 11:13 ` Siarhei Siamashka
2015-01-10 10:50 ` Ian Campbell
2015-01-10 15:24 ` Simon Glass
2015-01-11 23:28 ` Siarhei Siamashka
2015-01-12 2:04 ` Simon Glass
2015-01-13 1:17 ` Simon Glass
2015-01-11 23:16 ` Siarhei Siamashka
2015-01-12 10:50 ` Hans de Goede
2015-01-12 11:05 ` [U-Boot] [U-Boot, 1/2] console: Use pre-console buffer to get complete log on all consoles Hans de Goede
2015-01-12 13:30 ` Tom Rini
2015-01-12 15:45 ` Hans de Goede
2015-01-13 10:59 ` Hans de Goede [this message]
2015-01-13 12:36 ` Siarhei Siamashka
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=54B4FA76.7090109@redhat.com \
--to=hdegoede@redhat.com \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox