MIPS: TXx9: Improve handling of built-in and command-line args
* Make prom_init_cmdline() static and be called from prom_init. * Append built-in args if the first character was '+'. * Drop command-line args if the first character of built-in was '-'. * Enclose args include spaces by quotes. * TX4938_NAND_BOOT is no longer needed. Signed-off-by: Atsushi Nemoto <anemo@mba.ocn.ne.jp> Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
This commit is contained in:
committed by
Ralf Baechle
parent
f96a3383cf
commit
e0dfb20c2b
@@ -97,13 +97,6 @@ config TOSHIBA_RBTX4938_MPLEX_ATA
|
|||||||
|
|
||||||
endchoice
|
endchoice
|
||||||
|
|
||||||
config TX4938_NAND_BOOT
|
|
||||||
depends on EXPERIMENTAL && TOSHIBA_RBTX4938_MPLEX_NAND
|
|
||||||
bool "NAND Boot Support (EXPERIMENTAL)"
|
|
||||||
help
|
|
||||||
This is only for Toshiba RBTX4938 reference board, which has NAND IPL.
|
|
||||||
Select this option if you need to use NAND boot.
|
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
config PCI_TX4927
|
config PCI_TX4927
|
||||||
|
@@ -127,31 +127,51 @@ extern struct txx9_board_vec rbtx4938_vec;
|
|||||||
struct txx9_board_vec *txx9_board_vec __initdata;
|
struct txx9_board_vec *txx9_board_vec __initdata;
|
||||||
static char txx9_system_type[32];
|
static char txx9_system_type[32];
|
||||||
|
|
||||||
void __init prom_init_cmdline(void)
|
static void __init prom_init_cmdline(void)
|
||||||
{
|
{
|
||||||
int argc = (int)fw_arg0;
|
int argc = (int)fw_arg0;
|
||||||
char **argv = (char **)fw_arg1;
|
int *argv32 = (int *)fw_arg1;
|
||||||
int i; /* Always ignore the "-c" at argv[0] */
|
int i; /* Always ignore the "-c" at argv[0] */
|
||||||
#ifdef CONFIG_64BIT
|
char builtin[CL_SIZE];
|
||||||
char *fixed_argv[32];
|
|
||||||
for (i = 0; i < argc; i++)
|
|
||||||
fixed_argv[i] = (char *)(long)(*((__s32 *)argv + i));
|
|
||||||
argv = fixed_argv;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* ignore all built-in args if any f/w args given */
|
/* ignore all built-in args if any f/w args given */
|
||||||
if (argc > 1)
|
/*
|
||||||
*arcs_cmdline = '\0';
|
* But if built-in strings was started with '+', append them
|
||||||
|
* to command line args. If built-in was started with '-',
|
||||||
|
* ignore all f/w args.
|
||||||
|
*/
|
||||||
|
builtin[0] = '\0';
|
||||||
|
if (arcs_cmdline[0] == '+')
|
||||||
|
strcpy(builtin, arcs_cmdline + 1);
|
||||||
|
else if (arcs_cmdline[0] == '-') {
|
||||||
|
strcpy(builtin, arcs_cmdline + 1);
|
||||||
|
argc = 0;
|
||||||
|
} else if (argc <= 1)
|
||||||
|
strcpy(builtin, arcs_cmdline);
|
||||||
|
arcs_cmdline[0] = '\0';
|
||||||
|
|
||||||
for (i = 1; i < argc; i++) {
|
for (i = 1; i < argc; i++) {
|
||||||
|
char *str = (char *)(long)argv32[i];
|
||||||
if (i != 1)
|
if (i != 1)
|
||||||
strcat(arcs_cmdline, " ");
|
strcat(arcs_cmdline, " ");
|
||||||
strcat(arcs_cmdline, argv[i]);
|
if (strchr(str, ' ')) {
|
||||||
|
strcat(arcs_cmdline, "\"");
|
||||||
|
strcat(arcs_cmdline, str);
|
||||||
|
strcat(arcs_cmdline, "\"");
|
||||||
|
} else
|
||||||
|
strcat(arcs_cmdline, str);
|
||||||
|
}
|
||||||
|
/* append saved builtin args */
|
||||||
|
if (builtin[0]) {
|
||||||
|
if (arcs_cmdline[0])
|
||||||
|
strcat(arcs_cmdline, " ");
|
||||||
|
strcat(arcs_cmdline, builtin);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void __init prom_init(void)
|
void __init prom_init(void)
|
||||||
{
|
{
|
||||||
|
prom_init_cmdline();
|
||||||
#ifdef CONFIG_CPU_TX39XX
|
#ifdef CONFIG_CPU_TX39XX
|
||||||
txx9_board_vec = &jmr3927_vec;
|
txx9_board_vec = &jmr3927_vec;
|
||||||
#endif
|
#endif
|
||||||
|
@@ -47,7 +47,6 @@ void __init jmr3927_prom_init(void)
|
|||||||
if ((tx3927_ccfgptr->ccfg & TX3927_CCFG_TLBOFF) == 0)
|
if ((tx3927_ccfgptr->ccfg & TX3927_CCFG_TLBOFF) == 0)
|
||||||
printk(KERN_ERR "TX3927 TLB off\n");
|
printk(KERN_ERR "TX3927 TLB off\n");
|
||||||
|
|
||||||
prom_init_cmdline();
|
|
||||||
add_memory_region(0, JMR3927_SDRAM_SIZE, BOOT_MEM_RAM);
|
add_memory_region(0, JMR3927_SDRAM_SIZE, BOOT_MEM_RAM);
|
||||||
txx9_sio_putchar_init(TX3927_SIO_REG(1));
|
txx9_sio_putchar_init(TX3927_SIO_REG(1));
|
||||||
}
|
}
|
||||||
|
@@ -36,7 +36,6 @@
|
|||||||
|
|
||||||
void __init rbtx4927_prom_init(void)
|
void __init rbtx4927_prom_init(void)
|
||||||
{
|
{
|
||||||
prom_init_cmdline();
|
|
||||||
add_memory_region(0, tx4927_get_mem_size(), BOOT_MEM_RAM);
|
add_memory_region(0, tx4927_get_mem_size(), BOOT_MEM_RAM);
|
||||||
txx9_sio_putchar_init(TX4927_SIO_REG(0) & 0xfffffffffULL);
|
txx9_sio_putchar_init(TX4927_SIO_REG(0) & 0xfffffffffULL);
|
||||||
}
|
}
|
||||||
|
@@ -18,9 +18,6 @@
|
|||||||
|
|
||||||
void __init rbtx4938_prom_init(void)
|
void __init rbtx4938_prom_init(void)
|
||||||
{
|
{
|
||||||
#ifndef CONFIG_TX4938_NAND_BOOT
|
|
||||||
prom_init_cmdline();
|
|
||||||
#endif
|
|
||||||
add_memory_region(0, tx4938_get_mem_size(), BOOT_MEM_RAM);
|
add_memory_region(0, tx4938_get_mem_size(), BOOT_MEM_RAM);
|
||||||
txx9_sio_putchar_init(TX4938_SIO_REG(0) & 0xfffffffffULL);
|
txx9_sio_putchar_init(TX4938_SIO_REG(0) & 0xfffffffffULL);
|
||||||
}
|
}
|
||||||
|
@@ -42,7 +42,6 @@ struct txx9_board_vec {
|
|||||||
};
|
};
|
||||||
extern struct txx9_board_vec *txx9_board_vec;
|
extern struct txx9_board_vec *txx9_board_vec;
|
||||||
extern int (*txx9_irq_dispatch)(int pending);
|
extern int (*txx9_irq_dispatch)(int pending);
|
||||||
void prom_init_cmdline(void);
|
|
||||||
char *prom_getcmdline(void);
|
char *prom_getcmdline(void);
|
||||||
void txx9_wdt_init(unsigned long base);
|
void txx9_wdt_init(unsigned long base);
|
||||||
void txx9_spi_init(int busid, unsigned long base, int irq);
|
void txx9_spi_init(int busid, unsigned long base, int irq);
|
||||||
|
Reference in New Issue
Block a user