All of lore.kernel.org
 help / color / mirror / Atom feed
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;
>>   }
>>
>>

  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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.