Blackfin arch: Enable earlyprintk earlier - so any error after our interrupt tables are set up will print out
Also ensure that the traps_c code doesn't cause a double fault, by sending a signal to a faulting kernel before the memory subsystem is fully initialized, by printing out the error message before sending the signal. Signed-off-by: Robin Getz <robin.getz@analog.com> Signed-off-by: Bryan Wu <bryan.wu@analog.com>
This commit is contained in:
parent
2ebcade590
commit
ce3afa1c04
|
@ -44,6 +44,7 @@
|
||||||
#include <asm/blackfin.h>
|
#include <asm/blackfin.h>
|
||||||
#include <asm/cplbinit.h>
|
#include <asm/cplbinit.h>
|
||||||
#include <asm/fixed_code.h>
|
#include <asm/fixed_code.h>
|
||||||
|
#include <asm/early_printk.h>
|
||||||
|
|
||||||
u16 _bfin_swrst;
|
u16 _bfin_swrst;
|
||||||
|
|
||||||
|
@ -157,8 +158,10 @@ static __init void parse_cmdline_early(char *cmdline_p)
|
||||||
1;
|
1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else if (!memcmp(to, "earlyprintk=", 12)) {
|
||||||
|
to += 12;
|
||||||
|
setup_early_printk(to);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
c = *(to++);
|
c = *(to++);
|
||||||
if (!c)
|
if (!c)
|
||||||
|
@ -177,6 +180,23 @@ void __init setup_arch(char **cmdline_p)
|
||||||
#ifdef CONFIG_DUMMY_CONSOLE
|
#ifdef CONFIG_DUMMY_CONSOLE
|
||||||
conswitchp = &dummy_con;
|
conswitchp = &dummy_con;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(CONFIG_CMDLINE_BOOL)
|
||||||
|
strncpy(&command_line[0], CONFIG_CMDLINE, sizeof(command_line));
|
||||||
|
command_line[sizeof(command_line) - 1] = 0;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Keep a copy of command line */
|
||||||
|
*cmdline_p = &command_line[0];
|
||||||
|
memcpy(boot_command_line, command_line, COMMAND_LINE_SIZE);
|
||||||
|
boot_command_line[COMMAND_LINE_SIZE - 1] = '\0';
|
||||||
|
|
||||||
|
/* setup memory defaults from the user config */
|
||||||
|
physical_mem_end = 0;
|
||||||
|
_ramend = CONFIG_MEM_SIZE * 1024 * 1024;
|
||||||
|
|
||||||
|
parse_cmdline_early(&command_line[0]);
|
||||||
|
|
||||||
cclk = get_cclk();
|
cclk = get_cclk();
|
||||||
sclk = get_sclk();
|
sclk = get_sclk();
|
||||||
|
|
||||||
|
@ -210,22 +230,6 @@ void __init setup_arch(char **cmdline_p)
|
||||||
flash_probe();
|
flash_probe();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(CONFIG_CMDLINE_BOOL)
|
|
||||||
strncpy(&command_line[0], CONFIG_CMDLINE, sizeof(command_line));
|
|
||||||
command_line[sizeof(command_line) - 1] = 0;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Keep a copy of command line */
|
|
||||||
*cmdline_p = &command_line[0];
|
|
||||||
memcpy(boot_command_line, command_line, COMMAND_LINE_SIZE);
|
|
||||||
boot_command_line[COMMAND_LINE_SIZE - 1] = '\0';
|
|
||||||
|
|
||||||
/* setup memory defaults from the user config */
|
|
||||||
physical_mem_end = 0;
|
|
||||||
_ramend = CONFIG_MEM_SIZE * 1024 * 1024;
|
|
||||||
|
|
||||||
parse_cmdline_early(&command_line[0]);
|
|
||||||
|
|
||||||
if (physical_mem_end == 0)
|
if (physical_mem_end == 0)
|
||||||
physical_mem_end = _ramend;
|
physical_mem_end = _ramend;
|
||||||
|
|
||||||
|
|
|
@ -402,10 +402,6 @@ asmlinkage void trap_c(struct pt_regs *fp)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
info.si_signo = sig;
|
|
||||||
info.si_errno = 0;
|
|
||||||
info.si_addr = (void *)fp->pc;
|
|
||||||
force_sig_info(sig, &info, current);
|
|
||||||
if (sig != 0 && sig != SIGTRAP) {
|
if (sig != 0 && sig != SIGTRAP) {
|
||||||
unsigned long stack;
|
unsigned long stack;
|
||||||
dump_bfin_regs(fp, (void *)fp->retx);
|
dump_bfin_regs(fp, (void *)fp->retx);
|
||||||
|
@ -414,6 +410,10 @@ asmlinkage void trap_c(struct pt_regs *fp)
|
||||||
if (current->mm == NULL)
|
if (current->mm == NULL)
|
||||||
panic("Kernel exception");
|
panic("Kernel exception");
|
||||||
}
|
}
|
||||||
|
info.si_signo = sig;
|
||||||
|
info.si_errno = 0;
|
||||||
|
info.si_addr = (void *)fp->pc;
|
||||||
|
force_sig_info(sig, &info, current);
|
||||||
|
|
||||||
/* if the address that we are about to return to is not valid, set it
|
/* if the address that we are about to return to is not valid, set it
|
||||||
* to a valid address, if we have a current application or panic
|
* to a valid address, if we have a current application or panic
|
||||||
|
|
Loading…
Reference in New Issue