From: Mike Frysinger <vapier@gentoo.org>
To: linux-kernel@vger.kernel.org
Cc: uclinux-dist-devel@blackfin.uclinux.org,
Robin Getz <robin.getz@analog.com>
Subject: [PATCH 27/72] Blackfin: add an early shadow console
Date: Mon, 14 Sep 2009 16:07:31 -0400 [thread overview]
Message-ID: <1252958896-25150-28-git-send-email-vapier@gentoo.org> (raw)
In-Reply-To: <1252958896-25150-1-git-send-email-vapier@gentoo.org>
From: Robin Getz <robin.getz@analog.com>
Add a memory based shadow console to keep a copy of the printk buffer in a
location which can be found externally. This allows bootloaders to locate
and utilize the log buffer in case of silent (early/resume/etc...) crashes.
Signed-off-by: Robin Getz <robin.getz@analog.com>
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
---
arch/blackfin/include/asm/early_printk.h | 2 +
arch/blackfin/kernel/Makefile | 1 +
arch/blackfin/kernel/setup.c | 2 +
arch/blackfin/kernel/shadow_console.c | 78 ++++++++++++++++++++++++++++++
4 files changed, 83 insertions(+), 0 deletions(-)
create mode 100644 arch/blackfin/kernel/shadow_console.c
diff --git a/arch/blackfin/include/asm/early_printk.h b/arch/blackfin/include/asm/early_printk.h
index 110f1c1..f5b6b7d 100644
--- a/arch/blackfin/include/asm/early_printk.h
+++ b/arch/blackfin/include/asm/early_printk.h
@@ -23,6 +23,8 @@
#ifdef CONFIG_EARLY_PRINTK
extern int setup_early_printk(char *);
+extern void enable_shadow_console(void);
#else
#define setup_early_printk(fmt) do { } while (0)
+#define enable_shadow_console(fmt) do { } while (0)
#endif /* CONFIG_EARLY_PRINTK */
diff --git a/arch/blackfin/kernel/Makefile b/arch/blackfin/kernel/Makefile
index 141d928..a8ddbc8 100644
--- a/arch/blackfin/kernel/Makefile
+++ b/arch/blackfin/kernel/Makefile
@@ -26,6 +26,7 @@ obj-$(CONFIG_MODULES) += module.o
obj-$(CONFIG_KGDB) += kgdb.o
obj-$(CONFIG_KGDB_TESTS) += kgdb_test.o
obj-$(CONFIG_EARLY_PRINTK) += early_printk.o
+obj-$(CONFIG_EARLY_PRINTK) += shadow_console.o
obj-$(CONFIG_STACKTRACE) += stacktrace.o
# the kgdb test puts code into L2 and without linker
diff --git a/arch/blackfin/kernel/setup.c b/arch/blackfin/kernel/setup.c
index 6dbf219..3974764 100644
--- a/arch/blackfin/kernel/setup.c
+++ b/arch/blackfin/kernel/setup.c
@@ -810,6 +810,8 @@ void __init setup_arch(char **cmdline_p)
{
unsigned long sclk, cclk;
+ enable_shadow_console();
+
/* Check to make sure we are running on the right processor */
if (unlikely(CPUID != bfin_cpuid()))
printk(KERN_ERR "ERROR: Not running on ADSP-%s: unknown CPUID 0x%04x Rev 0.%d\n",
diff --git a/arch/blackfin/kernel/shadow_console.c b/arch/blackfin/kernel/shadow_console.c
new file mode 100644
index 0000000..15819ff
--- /dev/null
+++ b/arch/blackfin/kernel/shadow_console.c
@@ -0,0 +1,78 @@
+/*
+ * manage a small early shadow of the log buffer which we can pass between the
+ * bootloader so early crash messages are communicated properly and easily
+ *
+ * Copyright 2009 Analog Devices Inc.
+ *
+ * Enter bugs at http://blackfin.uclinux.org/
+ *
+ * Licensed under the GPL-2 or later.
+ */
+
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/console.h>
+#include <linux/string.h>
+#include <asm/blackfin.h>
+#include <asm/irq_handler.h>
+#include <asm/early_printk.h>
+
+#define SHADOW_CONSOLE_START (0x500)
+#define SHADOW_CONSOLE_END (0x1000)
+#define SHADOW_CONSOLE_MAGIC_LOC (0x4F0)
+#define SHADOW_CONSOLE_MAGIC (0xDEADBEEF)
+
+static __initdata char *shadow_console_buffer = (char *)SHADOW_CONSOLE_START;
+
+static __init void early_shadow_write(struct console *con, const char *s,
+ unsigned int n)
+{
+ /*
+ * save 2 bytes for the double null at the end
+ * once we fail on a long line, make sure we don't write a short line afterwards
+ */
+ if ((shadow_console_buffer + n) <= (char *)(SHADOW_CONSOLE_END - 2)) {
+ memcpy(shadow_console_buffer, s, n);
+ shadow_console_buffer += n;
+ shadow_console_buffer[0] = 0;
+ shadow_console_buffer[1] = 0;
+ } else
+ shadow_console_buffer = (char *)SHADOW_CONSOLE_END;
+}
+
+static __initdata struct console early_shadow_console = {
+ .name = "early_shadow",
+ .write = early_shadow_write,
+ .flags = CON_BOOT | CON_PRINTBUFFER,
+ .index = -1,
+ .device = 0,
+};
+
+__init void enable_shadow_console(void)
+{
+ int *loc = (int *)SHADOW_CONSOLE_MAGIC_LOC;
+
+ if (!(early_shadow_console.flags & CON_ENABLED)) {
+ register_console(&early_shadow_console);
+ /* for now, assume things are going to fail */
+ *loc = SHADOW_CONSOLE_MAGIC;
+ loc++;
+ *loc = SHADOW_CONSOLE_START;
+ }
+}
+
+static __init int disable_shadow_console(void)
+{
+ /*
+ * by the time pure_initcall runs, the standard console is enabled,
+ * and the early_console is off, so unset the magic numbers
+ * unregistering the console is taken care of in common code (See
+ * ./kernel/printk:disable_boot_consoles() )
+ */
+ int *loc = (int *)SHADOW_CONSOLE_MAGIC_LOC;
+
+ *loc = 0;
+
+ return 0;
+}
+pure_initcall(disable_shadow_console);
--
1.6.4.2
next prev parent reply other threads:[~2009-09-14 20:19 UTC|newest]
Thread overview: 86+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-09-14 20:07 [PATCH 00/72] Blackfin updates for 2.6.32 Mike Frysinger
2009-09-14 20:07 ` [PATCH 01/72] Blackfin: bf537-stamp: update ADP5588 header name Mike Frysinger
2009-09-14 20:07 ` [PATCH 02/72] Blackfin: bf537-stamp: declare SPI IRQ resources Mike Frysinger
2009-09-14 20:07 ` [PATCH 03/72] Blackfin: bf537-stamp: add resources for AD1938 audio card Mike Frysinger
2009-09-14 20:07 ` [PATCH 04/72] Blackfin: make EVT3->EVT5 lowering more robust wrt IPEND[4] Mike Frysinger
2009-09-14 20:07 ` [PATCH 05/72] Blackfin: checkpatch --file arch/blackfin/kernel/ipipe.c Mike Frysinger
2009-09-14 20:07 ` [PATCH 06/72] Blackfin: fix misnomer of some I-pipe helpers Mike Frysinger
2009-09-14 20:07 ` [PATCH 07/72] Blackfin: export show_stack() to modules Mike Frysinger
2009-09-14 20:07 ` [PATCH 08/72] Blackfin: allow high priority domains to preempt schedule_tail() Mike Frysinger
2009-09-14 20:07 ` [PATCH 09/72] Blackfin: use generic name for EVT14 handler Mike Frysinger
2009-09-14 20:07 ` [PATCH 10/72] Blackfin: reuse evt_evt14 handler to perform irqtail epilogue Mike Frysinger
2009-09-14 20:07 ` [PATCH 11/72] Blackfin: allow EVT5 to preempt irqtail prologue (CONFIG_DEBUG_HWERR) Mike Frysinger
2009-09-14 20:07 ` [PATCH 12/72] Blackfin: document __ipipe_call_irqtail Mike Frysinger
2009-09-14 20:07 ` [PATCH 13/72] Blackfin: sanitize manual control of IPEND[4] Mike Frysinger
2009-09-14 20:07 ` [PATCH 14/72] Blackfin: inline I-pipe bypass code in ret_from_exception Mike Frysinger
2009-09-14 20:07 ` [PATCH 15/72] Blackfin: cleanup traps decode_address() a bit Mike Frysinger
2009-09-14 20:07 ` [PATCH 16/72] Blackfin: convert ptrace to new memory functions Mike Frysinger
2009-09-14 20:07 ` [PATCH 17/72] Blackfin: reject outdated/unused/wrong relocation types Mike Frysinger
2009-09-14 20:07 ` [PATCH 18/72] Blackfin: cleanup printk() usage in module code Mike Frysinger
2009-09-14 20:07 ` [PATCH 19/72] Blackfin: convert malloc()/memset() to zalloc() " Mike Frysinger
2009-09-14 20:07 ` [PATCH 20/72] Blackfin: cleanup module section checking Mike Frysinger
2009-09-14 20:07 ` [PATCH 21/72] Blackfin: fix module reloc handling for all memory regions Mike Frysinger
2009-09-14 20:07 ` [PATCH 22/72] Blackfin: clean up early memory setup code Mike Frysinger
2009-09-14 20:07 ` [PATCH 23/72] Blackfin: rename PCF8574 driver config Mike Frysinger
2009-09-14 20:07 ` [PATCH 24/72] Blackfin: unify duplicated SMP checks in L2 cache kconfig Mike Frysinger
2009-09-14 20:07 ` [PATCH 25/72] Blackfin: push SRAM locks down into related ifdefs Mike Frysinger
2009-09-14 20:07 ` [PATCH 26/72] Blackfin: add support for common FDPIC ptrace requests Mike Frysinger
2009-09-14 20:07 ` Mike Frysinger [this message]
2009-09-14 20:07 ` [PATCH 28/72] Blackfin: catch hardware errors earlier during booting Mike Frysinger
2009-09-14 20:07 ` [PATCH 29/72] Blackfin: fix BF548 UART0 DMA IRQ translation Mike Frysinger
2009-09-14 20:07 ` [PATCH 30/72] Blackfin: bf538: add bfin_clear_PPI_STATUS() helper Mike Frysinger
2009-09-14 20:07 ` [PATCH 31/72] Blackfin: bf533-stamp: add resources for mmc_spi card Mike Frysinger
2009-09-14 20:07 ` [PATCH 32/72] Blackfin: do not try displaying the end of the stack Mike Frysinger
2009-09-14 20:07 ` [PATCH 33/72] Blackfin: bf537-stamp: update AD714x resources Mike Frysinger
2009-09-14 20:07 ` [PATCH 34/72] Blackfin: clean up duplicate I2C device type definitions Mike Frysinger
2009-09-14 20:07 ` [PATCH 35/72] Blackfin: fix MPU handling of invalid memory accesses Mike Frysinger
2009-09-14 20:07 ` [PATCH 36/72] Blackfin: bf533-stamp: fix typo in SPI frequency for ad1836 codec Mike Frysinger
2009-09-14 20:07 ` [PATCH 37/72] Blackfin: improve double fault debug handling Mike Frysinger
2009-09-14 20:07 ` [PATCH 38/72] Blackfin: bf537-stamp: drop ATA interrupt probe workaround Mike Frysinger
2009-09-14 20:07 ` [PATCH 39/72] Blackfin: convert boards to use platform data with smc91x Mike Frysinger
2009-09-14 20:07 ` [PATCH 40/72] Blackfin: drop unused MMR defines that only cause bad code to be written Mike Frysinger
2009-09-14 20:07 ` [PATCH 41/72] Blackfin: cm-bf527/bf537-stamp: fix dm9000 resources Mike Frysinger
2009-09-14 20:07 ` [PATCH 42/72] Blackfin: bf548-ezkit: fix incorrect LCD size parameters Mike Frysinger
2009-09-14 20:07 ` [PATCH 43/72] Blackfin: fix read buffer overflow Mike Frysinger
2009-09-14 20:07 ` [PATCH 44/72] Blackfin: bf538-ezkit: add resources for parallel flash Mike Frysinger
2009-09-14 20:07 ` [PATCH 45/72] Blackfin: update anomaly lists Mike Frysinger
2009-09-14 20:07 ` [PATCH 46/72] Blackfin: bf537-stamp: update ad1836 resources Mike Frysinger
2009-09-14 20:07 ` [PATCH 47/72] Blackfin: cleanup sync handling when enabling/disabling cplbs Mike Frysinger
2009-09-14 20:07 ` [PATCH 48/72] Blackfin: SMP port does not yet support cpu frequency scaling Mike Frysinger
2009-09-14 20:07 ` [PATCH 49/72] Blackfin: fix BF522/BF523 max VCO mixup Mike Frysinger
2009-09-14 20:07 ` [PATCH 50/72] Blackfin: do not trace the exception handler Mike Frysinger
2009-09-14 20:07 ` [PATCH 51/72] Blackfin: drop board resources for dead devices (pbx/ad9960) Mike Frysinger
2009-09-14 20:07 ` [PATCH 52/72] Blackfin: punt dead cache locking code Mike Frysinger
2009-09-14 20:07 ` [PATCH 53/72] Blackfin: delete '-spi' suffix in ad1836/ad1938 driver name Mike Frysinger
2009-09-14 20:07 ` [PATCH 54/72] Blackfin: optimize fixed code handling for the most common case Mike Frysinger
2009-09-14 20:07 ` [PATCH 55/72] Blackfin: handle the core timer interrupt with handle_percpu_irq on SMP Mike Frysinger
2009-09-14 20:08 ` [PATCH 56/72] Blackfin: Fix link errors with binutils 2.19 and GCC 4.3 Mike Frysinger
2009-09-14 20:08 ` [PATCH 57/72] Blackfin: remove useless duplicated assignment in gpio code Mike Frysinger
2009-09-14 20:08 ` [PATCH 58/72] Blackfin: use raw_smp_processor_id() in exception code Mike Frysinger
2009-09-14 20:08 ` [PATCH 59/72] Blackfin: fix spelling in a few comments Mike Frysinger
2009-09-14 20:08 ` [PATCH 60/72] Blackfin: workaround anomaly 05000283 Mike Frysinger
2009-09-14 20:08 ` [PATCH 61/72] Blackfin: add some isram-driver self tests Mike Frysinger
2009-09-14 20:08 ` [PATCH 62/72] Blackfin: bf537-stamp: add adp5588 gpio resources Mike Frysinger
2009-09-14 20:08 ` [PATCH 63/72] Blackfin: fix typo in isram_write() Mike Frysinger
2009-09-14 20:08 ` [PATCH 64/72] Blackfin: fix BF54x SPI CS resources Mike Frysinger
2009-09-14 20:08 ` [PATCH 65/72] Blackfin: use KERN_ALERT in all kgdb_test output Mike Frysinger
2009-09-14 20:08 ` [PATCH 66/72] Blackfin: add ICPLB coverage for async banks Mike Frysinger
2009-09-14 20:08 ` [PATCH 67/72] Blackfin: increase default async timings for parallel flashes Mike Frysinger
2009-09-14 20:08 ` [PATCH 68/72] Blackfin: bf538-ezkit: add SPI IRQ resources Mike Frysinger
2009-09-14 20:08 ` [PATCH 69/72] Blackfin: cm-bf537u: split board from cm-bf537e Mike Frysinger
2009-09-14 20:08 ` [PATCH 70/72] Blackfin: update cm board resources Mike Frysinger
2009-09-14 20:08 ` [PATCH 71/72] Blackfin: update ftrace_push_return_trace() breakage Mike Frysinger
2009-09-14 20:08 ` [PATCH 72/72] Blackfin: swap clocksource ratings for gptimer/cycles Mike Frysinger
2009-09-14 20:50 ` [PATCH 00/72] Blackfin updates for 2.6.32 Daniel Walker
2009-09-14 20:57 ` Mike Frysinger
2009-09-14 21:04 ` Daniel Walker
2009-09-14 21:07 ` Mike Frysinger
2009-09-14 21:21 ` Daniel Walker
2009-09-14 22:17 ` Mike Frysinger
2009-09-14 22:36 ` Daniel Walker
2009-09-16 2:54 ` Mike Frysinger
2009-09-16 2:56 ` Mike Frysinger
2009-09-16 3:06 ` Daniel Walker
2009-09-16 3:21 ` Mike Frysinger
2009-09-16 3:59 ` Daniel Walker
2009-09-16 4:13 ` Mike Frysinger
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=1252958896-25150-28-git-send-email-vapier@gentoo.org \
--to=vapier@gentoo.org \
--cc=linux-kernel@vger.kernel.org \
--cc=robin.getz@analog.com \
--cc=uclinux-dist-devel@blackfin.uclinux.org \
/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
all inboxes | Powered by JetHome®