Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ce3afa1c authored by Robin Getz's avatar Robin Getz Committed by Bryan Wu
Browse files

Blackfin arch: Enable earlyprintk earlier - so any error after our interrupt...


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: default avatarRobin Getz <robin.getz@analog.com>
Signed-off-by: default avatarBryan Wu <bryan.wu@analog.com>
parent 2ebcade5
Loading
Loading
Loading
Loading
+21 −17
Original line number Diff line number Diff line
@@ -44,6 +44,7 @@
#include <asm/blackfin.h>
#include <asm/cplbinit.h>
#include <asm/fixed_code.h>
#include <asm/early_printk.h>

u16 _bfin_swrst;

@@ -157,8 +158,10 @@ static __init void parse_cmdline_early(char *cmdline_p)
							    1;
					}
				}
			} else if (!memcmp(to, "earlyprintk=", 12)) {
				to += 12;
				setup_early_printk(to);
			}

		}
		c = *(to++);
		if (!c)
@@ -177,6 +180,23 @@ void __init setup_arch(char **cmdline_p)
#ifdef CONFIG_DUMMY_CONSOLE
	conswitchp = &dummy_con;
#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();
	sclk = get_sclk();

@@ -210,22 +230,6 @@ void __init setup_arch(char **cmdline_p)
	flash_probe();
#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)
		physical_mem_end = _ramend;

+4 −4
Original line number Diff line number Diff line
@@ -402,10 +402,6 @@ asmlinkage void trap_c(struct pt_regs *fp)
		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) {
		unsigned long stack;
		dump_bfin_regs(fp, (void *)fp->retx);
@@ -414,6 +410,10 @@ asmlinkage void trap_c(struct pt_regs *fp)
		if (current->mm == NULL)
			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
	 * to a valid address, if we have a current application or panic