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

Commit 0be2abbc authored by Steven J. Hill's avatar Steven J. Hill Committed by Ralf Baechle
Browse files

MIPS: FW: sead3: Use new common FW library variable processing.



Remove old YAMON prom code and use common firmware library code.

Signed-off-by: default avatarSteven J. Hill <Steven.Hill@imgtec.com>
parent 14aecdd4
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -8,10 +8,10 @@
# Copyright (C) 2012 MIPS Technoligies, Inc.  All rights reserved.
# Steven J. Hill <sjhill@mips.com>
#
obj-y				:= sead3-lcd.o sead3-cmdline.o \
				   sead3-display.o sead3-init.o sead3-int.o \
				   sead3-mtd.o sead3-net.o sead3-platform.o \
				   sead3-reset.o sead3-setup.o sead3-time.o
obj-y				:= sead3-lcd.o sead3-display.o sead3-init.o \
				   sead3-int.o sead3-mtd.o sead3-net.o \
				   sead3-platform.o sead3-reset.o \
				   sead3-setup.o sead3-time.o

obj-y				+= sead3-i2c-dev.o sead3-i2c.o \
				   sead3-pic32-i2c-drv.o sead3-pic32-bus.o \
+0 −46
Original line number Diff line number Diff line
/*
 * This file is subject to the terms and conditions of the GNU General Public
 * License.  See the file "COPYING" in the main directory of this archive
 * for more details.
 *
 * Copyright (C) 2012 MIPS Technologies, Inc.  All rights reserved.
 */
#include <linux/init.h>
#include <linux/string.h>

#include <asm/bootinfo.h>

extern int prom_argc;
extern int *_prom_argv;

/*
 * YAMON (32-bit PROM) pass arguments and environment as 32-bit pointer.
 * This macro take care of sign extension.
 */
#define prom_argv(index) ((char *)(long)_prom_argv[(index)])

char * __init prom_getcmdline(void)
{
	return &(arcs_cmdline[0]);
}

void  __init prom_init_cmdline(void)
{
	char *cp;
	int actr;

	actr = 1; /* Always ignore argv[0] */

	cp = &(arcs_cmdline[0]);
	while (actr < prom_argc) {
		strcpy(cp, prom_argv(actr));
		cp += strlen(prom_argv(actr));
		*cp++ = ' ';
		actr++;
	}
	if (cp != &(arcs_cmdline[0])) {
		/* get rid of trailing space */
		--cp;
		*cp = '\0';
	}
}
+1 −1
Original line number Diff line number Diff line
@@ -26,7 +26,7 @@ static inline void serial_out(int offset, int value, unsigned int base_addr)
	__raw_writel(value, PORT(base_addr, offset));
}

void __init prom_init_early_console(char port)
void __init fw_init_early_console(char port)
{
	console_port = port;
}
+46 −35
Original line number Diff line number Diff line
@@ -13,37 +13,51 @@
#include <asm/traps.h>
#include <asm/mips-boards/generic.h>
#include <asm/mips-boards/prom.h>

extern void prom_init_early_console(char port);
#include <asm/fw/fw.h>

extern char except_vec_nmi;
extern char except_vec_ejtag_debug;

int prom_argc;
int *_prom_argv, *_prom_envp;

#define prom_envp(index) ((char *)(long)_prom_envp[(index)])

char *prom_getenv(char *envname)
#ifdef CONFIG_SERIAL_8250_CONSOLE
static void __init console_config(void)
{
	/*
	 * Return a pointer to the given environment variable.
	 * In 64-bit mode: we're using 64-bit pointers, but all pointers
	 * in the PROM structures are only 32-bit, so we need some
	 * workarounds, if we are running in 64-bit mode.
	 */
	int i, index = 0;

	i = strlen(envname);

	while (prom_envp(index)) {
		if (strncmp(envname, prom_envp(index), i) == 0)
			return prom_envp(index+1);
		index += 2;
	char console_string[40];
	int baud = 0;
	char parity = '\0', bits = '\0', flow = '\0';
	char *s;

	if ((strstr(fw_getcmdline(), "console=")) == NULL) {
		s = fw_getenv("modetty0");
		if (s) {
			while (*s >= '0' && *s <= '9')
				baud = baud*10 + *s++ - '0';
			if (*s == ',')
				s++;
			if (*s)
				parity = *s++;
			if (*s == ',')
				s++;
			if (*s)
				bits = *s++;
			if (*s == ',')
				s++;
			if (*s == 'h')
				flow = 'r';
		}

	return NULL;
		if (baud == 0)
			baud = 38400;
		if (parity != 'n' && parity != 'o' && parity != 'e')
			parity = 'n';
		if (bits != '7' && bits != '8')
			bits = '8';
		if (flow == '\0')
			flow = 'r';
		sprintf(console_string, " console=ttyS0,%d%c%c%c", baud,
			parity, bits, flow);
		strcat(fw_getcmdline(), console_string);
	}
}
#endif

static void __init mips_nmi_setup(void)
{
@@ -69,23 +83,20 @@ static void __init mips_ejtag_setup(void)

void __init prom_init(void)
{
	prom_argc = fw_arg0;
	_prom_argv = (int *) fw_arg1;
	_prom_envp = (int *) fw_arg2;

	board_nmi_handler_setup = mips_nmi_setup;
	board_ejtag_handler_setup = mips_ejtag_setup;

	prom_init_cmdline();
	fw_init_cmdline();
#ifdef CONFIG_EARLY_PRINTK
	if ((strstr(prom_getcmdline(), "console=ttyS0")) != NULL)
		prom_init_early_console(0);
	else if ((strstr(prom_getcmdline(), "console=ttyS1")) != NULL)
		prom_init_early_console(1);
	if ((strstr(fw_getcmdline(), "console=ttyS0")) != NULL)
		fw_init_early_console(0);
	else if ((strstr(fw_getcmdline(), "console=ttyS1")) != NULL)
		fw_init_early_console(1);
#endif
#ifdef CONFIG_SERIAL_8250_CONSOLE
	if ((strstr(prom_getcmdline(), "console=")) == NULL)
		strcat(prom_getcmdline(), " console=ttyS0,38400n8r");
	if ((strstr(fw_getcmdline(), "console=")) == NULL)
		strcat(fw_getcmdline(), " console=ttyS0,38400n8r");
	console_config();
#endif
}