public inbox for u-boot@lists.denx.de
 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: Mon, 12 Jan 2015 12:05:57 +0100	[thread overview]
Message-ID: <54B3AA95.2010902@redhat.com> (raw)
In-Reply-To: <1420700552-17474-1-git-send-email-siarhei.siamashka@gmail.com>

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 ?

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-12 11:05 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 ` Hans de Goede [this message]
2015-01-12 13:30   ` [U-Boot] [U-Boot, 1/2] console: Use pre-console buffer to get complete log on all consoles Tom Rini
2015-01-12 15:45     ` Hans de Goede
2015-01-13 10:59   ` Hans de Goede
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=54B3AA95.2010902@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