MIPS: FW: sead3: Use new common FW library variable processing.
Remove old YAMON prom code and use common firmware library code. Signed-off-by: Steven J. Hill <Steven.Hill@imgtec.com>
This commit is contained in:
Родитель
14aecdd419
Коммит
0be2abbcee
|
@ -8,10 +8,10 @@
|
||||||
# Copyright (C) 2012 MIPS Technoligies, Inc. All rights reserved.
|
# Copyright (C) 2012 MIPS Technoligies, Inc. All rights reserved.
|
||||||
# Steven J. Hill <sjhill@mips.com>
|
# Steven J. Hill <sjhill@mips.com>
|
||||||
#
|
#
|
||||||
obj-y := sead3-lcd.o sead3-cmdline.o \
|
obj-y := sead3-lcd.o sead3-display.o sead3-init.o \
|
||||||
sead3-display.o sead3-init.o sead3-int.o \
|
sead3-int.o sead3-mtd.o sead3-net.o \
|
||||||
sead3-mtd.o sead3-net.o sead3-platform.o \
|
sead3-platform.o sead3-reset.o \
|
||||||
sead3-reset.o sead3-setup.o sead3-time.o
|
sead3-setup.o sead3-time.o
|
||||||
|
|
||||||
obj-y += sead3-i2c-dev.o sead3-i2c.o \
|
obj-y += sead3-i2c-dev.o sead3-i2c.o \
|
||||||
sead3-pic32-i2c-drv.o sead3-pic32-bus.o \
|
sead3-pic32-i2c-drv.o sead3-pic32-bus.o \
|
||||||
|
|
|
@ -1,46 +0,0 @@
|
||||||
/*
|
|
||||||
* 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';
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -26,7 +26,7 @@ static inline void serial_out(int offset, int value, unsigned int base_addr)
|
||||||
__raw_writel(value, PORT(base_addr, offset));
|
__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;
|
console_port = port;
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,37 +13,51 @@
|
||||||
#include <asm/traps.h>
|
#include <asm/traps.h>
|
||||||
#include <asm/mips-boards/generic.h>
|
#include <asm/mips-boards/generic.h>
|
||||||
#include <asm/mips-boards/prom.h>
|
#include <asm/mips-boards/prom.h>
|
||||||
|
#include <asm/fw/fw.h>
|
||||||
extern void prom_init_early_console(char port);
|
|
||||||
|
|
||||||
extern char except_vec_nmi;
|
extern char except_vec_nmi;
|
||||||
extern char except_vec_ejtag_debug;
|
extern char except_vec_ejtag_debug;
|
||||||
|
|
||||||
int prom_argc;
|
#ifdef CONFIG_SERIAL_8250_CONSOLE
|
||||||
int *_prom_argv, *_prom_envp;
|
static void __init console_config(void)
|
||||||
|
|
||||||
#define prom_envp(index) ((char *)(long)_prom_envp[(index)])
|
|
||||||
|
|
||||||
char *prom_getenv(char *envname)
|
|
||||||
{
|
{
|
||||||
/*
|
char console_string[40];
|
||||||
* Return a pointer to the given environment variable.
|
int baud = 0;
|
||||||
* In 64-bit mode: we're using 64-bit pointers, but all pointers
|
char parity = '\0', bits = '\0', flow = '\0';
|
||||||
* in the PROM structures are only 32-bit, so we need some
|
char *s;
|
||||||
* workarounds, if we are running in 64-bit mode.
|
|
||||||
*/
|
|
||||||
int i, index = 0;
|
|
||||||
|
|
||||||
i = strlen(envname);
|
if ((strstr(fw_getcmdline(), "console=")) == NULL) {
|
||||||
|
s = fw_getenv("modetty0");
|
||||||
while (prom_envp(index)) {
|
if (s) {
|
||||||
if (strncmp(envname, prom_envp(index), i) == 0)
|
while (*s >= '0' && *s <= '9')
|
||||||
return prom_envp(index+1);
|
baud = baud*10 + *s++ - '0';
|
||||||
index += 2;
|
if (*s == ',')
|
||||||
|
s++;
|
||||||
|
if (*s)
|
||||||
|
parity = *s++;
|
||||||
|
if (*s == ',')
|
||||||
|
s++;
|
||||||
|
if (*s)
|
||||||
|
bits = *s++;
|
||||||
|
if (*s == ',')
|
||||||
|
s++;
|
||||||
|
if (*s == 'h')
|
||||||
|
flow = 'r';
|
||||||
|
}
|
||||||
|
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static void __init mips_nmi_setup(void)
|
static void __init mips_nmi_setup(void)
|
||||||
{
|
{
|
||||||
|
@ -69,23 +83,20 @@ static void __init mips_ejtag_setup(void)
|
||||||
|
|
||||||
void __init prom_init(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_nmi_handler_setup = mips_nmi_setup;
|
||||||
board_ejtag_handler_setup = mips_ejtag_setup;
|
board_ejtag_handler_setup = mips_ejtag_setup;
|
||||||
|
|
||||||
prom_init_cmdline();
|
fw_init_cmdline();
|
||||||
#ifdef CONFIG_EARLY_PRINTK
|
#ifdef CONFIG_EARLY_PRINTK
|
||||||
if ((strstr(prom_getcmdline(), "console=ttyS0")) != NULL)
|
if ((strstr(fw_getcmdline(), "console=ttyS0")) != NULL)
|
||||||
prom_init_early_console(0);
|
fw_init_early_console(0);
|
||||||
else if ((strstr(prom_getcmdline(), "console=ttyS1")) != NULL)
|
else if ((strstr(fw_getcmdline(), "console=ttyS1")) != NULL)
|
||||||
prom_init_early_console(1);
|
fw_init_early_console(1);
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_SERIAL_8250_CONSOLE
|
#ifdef CONFIG_SERIAL_8250_CONSOLE
|
||||||
if ((strstr(prom_getcmdline(), "console=")) == NULL)
|
if ((strstr(fw_getcmdline(), "console=")) == NULL)
|
||||||
strcat(prom_getcmdline(), " console=ttyS0,38400n8r");
|
strcat(fw_getcmdline(), " console=ttyS0,38400n8r");
|
||||||
|
console_config();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче