Along with CForth commit 1a604a37e340da67419a1df5d840ee319090b619 provides a dump of the kernel log buffer on serial port after a watchdog restart. Intended for when the kernel serial driver is disabled.
The kernel patch creates an aligned structure with pointers to the kernel log buffer, and a pointer for calculating the offset from virtual to physical addresses. Harmless if used without the CForth change present. Not intended for upstream. --- arch/arm/mach-mmp/olpc-xo-1-75.c | 19 +++++++++++++++++++ include/linux/printk.h | 5 +++++ kernel/printk.c | 7 +++++++ 3 files changed, 31 insertions(+), 0 deletions(-) diff --git a/arch/arm/mach-mmp/olpc-xo-1-75.c b/arch/arm/mach-mmp/olpc-xo-1-75.c index e0db8a8..adb1f15 100644 --- a/arch/arm/mach-mmp/olpc-xo-1-75.c +++ b/arch/arm/mach-mmp/olpc-xo-1-75.c @@ -548,10 +548,29 @@ static void __init olpc_init_early(void) } extern struct olpc_platform_t olpc_platform_info; +struct epitaph { + u32 magic_1; + u32 magic_2; + u32 myself; + u32 log_buf_len; + u32 log_buf; + u32 log_end; +}; + +static struct epitaph epitaph __attribute__((aligned(4096))) = { + .magic_1 = 0x2163666f, + .magic_2 = 0x72746821 +}; + static void __init olpc_xo_1_75_init(void) { u32 twsi6_lcr; + log_buf_olpc_setup(&epitaph.log_buf_len, + &epitaph.log_buf, + &epitaph.log_end); + epitaph.myself = (u32) &epitaph; + pm_power_off = olpc_xo_1_75_poweroff; arm_pm_restart = olpc_xo_1_75_restart; diff --git a/include/linux/printk.h b/include/linux/printk.h index 0101d55..795ed5a 100644 --- a/include/linux/printk.h +++ b/include/linux/printk.h @@ -115,6 +115,7 @@ extern int dmesg_restrict; extern int kptr_restrict; void log_buf_kexec_setup(void); +void log_buf_olpc_setup(u32 *len, u32 *buf, u32 *end); void __init setup_log_buf(int early); #else static inline __attribute__ ((format (printf, 1, 0))) @@ -141,6 +142,10 @@ static inline void log_buf_kexec_setup(void) { } +static inline void log_buf_olpc_setup(u32 *len, u32 *buf, u32 *end) +{ +} + static inline void setup_log_buf(int early) { } diff --git a/kernel/printk.c b/kernel/printk.c index 084982f..4cc9c00 100644 --- a/kernel/printk.c +++ b/kernel/printk.c @@ -168,6 +168,13 @@ void log_buf_kexec_setup(void) } #endif +void log_buf_olpc_setup(u32 *len, u32 *buf, u32 *end) +{ + *len = log_buf_len; + *buf = (u32) log_buf; + *end = (u32) &log_end; +} + /* requested log_buf_len from kernel cmdline */ static unsigned long __initdata new_log_buf_len; -- 1.7.5.4 -- James Cameron http://quozl.linux.org.au/ _______________________________________________ Devel mailing list Devel@lists.laptop.org http://lists.laptop.org/listinfo/devel