X-Git-Url: http://git.rohieb.name/openwrt.git/blobdiff_plain/3a97a572ce9c12204f96803055032a8bce2271be..adde7768a2eab2950a7628319ec832c63a00ff03:/target/linux/rb532/files/arch/mips/rb500/prom.c diff --git a/target/linux/rb532/files/arch/mips/rb500/prom.c b/target/linux/rb532/files/arch/mips/rb500/prom.c index 2a33c0a05..b10172fb5 100644 --- a/target/linux/rb532/files/arch/mips/rb500/prom.c +++ b/target/linux/rb532/files/arch/mips/rb500/prom.c @@ -1,5 +1,5 @@ /* -* prom.c +* prom.c ********************************************************************** * P . Sadik Oct 10, 2003 * @@ -42,12 +42,9 @@ extern void __init setup_serial_port(void); unsigned int idt_cpu_freq = 132000000; EXPORT_SYMBOL(idt_cpu_freq); -char *board_type; -EXPORT_SYMBOL(board_type); unsigned int gpio_bootup_state = 0; EXPORT_SYMBOL(gpio_bootup_state); - char mips_mac_address[18] = "08:00:06:05:40:01"; EXPORT_SYMBOL(mips_mac_address); @@ -67,9 +64,6 @@ EXPORT_SYMBOL(soft_reboot); extern int remote_debug; #endif -extern unsigned long mips_machgroup; -extern unsigned long mips_machtype; - #define FREQ_TAG "HZ=" #define GPIO_TAG "gpio=" #define KMAC_TAG "kmac=" @@ -78,6 +72,9 @@ extern unsigned long mips_machtype; #define IGNORE_CMDLINE_MEM 1 #define DEBUG_DDR +#define BOARD_RB532 "500" +#define BOARD_RB532A "500r5" + void parse_soft_settings(unsigned *ptr, unsigned size); void parse_hard_settings(unsigned *ptr, unsigned size); @@ -87,7 +84,7 @@ void __init prom_init(void) { DDR_t ddr = (DDR_t) DDR_VirtualAddress; /* define the pointer to the DDR registers */ phys_t memsize = 0-ddr->ddrmask; - + /* this should be the very first message, even before serial is properly initialized */ prom_setup_cmdline(); setup_serial_port(); @@ -108,6 +105,17 @@ void __init prom_free_prom_memory(void) /* No prom memory to free */ } +static inline int match_tag(char *arg, const char *tag) +{ + return (strncmp(arg, tag, strlen(tag)) == 0); +} + +static inline unsigned long tag2ul(char *arg, const char *tag) +{ + char *num = arg+strlen(tag); + return simple_strtoul(num, 0, 10); +} + extern char _image_cmdline; void __init prom_setup_cmdline(void){ char cmd_line[CL_SIZE]; @@ -115,32 +123,36 @@ void __init prom_setup_cmdline(void){ int prom_argc; char **prom_argv, **prom_envp; int i; - + prom_argc = fw_arg0; prom_argv = (char **) fw_arg1; prom_envp = (char **) fw_arg2; - + cp=cmd_line; /* Note: it is common that parameters start at argv[1] and not argv[0], however, our elf loader starts at [0] */ for(i=0;i0) *(cp++) = ' '; - if (strncmp(prom_argv[i], BOARD_TAG, sizeof(BOARD_TAG) - 1) == 0) { - board_type = (char *)kzalloc((sizeof(prom_argv[i]) + sizeof(BOARD_TAG) -1), GFP_KERNEL); - strcpy(board_type, prom_argv[i] + sizeof(BOARD_TAG) -1); + if (match_tag(prom_argv[i], BOARD_TAG)) { + char *board = prom_argv[i] + strlen(BOARD_TAG); + if (match_tag(board, BOARD_RB532A)) + mips_machtype = MACH_MIKROTIK_RB532A; + else + mips_machtype = MACH_MIKROTIK_RB532; } - if (strncmp(prom_argv[i], GPIO_TAG, sizeof(GPIO_TAG) - 1) == 0) { - gpio_bootup_state = simple_strtoul(prom_argv[i] + sizeof(GPIO_TAG) - 1, 0, 10); + + if (match_tag(prom_argv[i], GPIO_TAG)) { + gpio_bootup_state = tag2ul(prom_argv[i], GPIO_TAG); } strcpy(cp,prom_argv[i]); cp+=strlen(prom_argv[i]); @@ -148,7 +160,7 @@ void __init prom_setup_cmdline(void){ *(cp++) = ' '; strcpy(cp,(&_image_cmdline + 8)); cp += strlen(&_image_cmdline); - + i=strlen(arcs_cmdline); if (i>0){ *(cp++) = ' '; @@ -160,7 +172,7 @@ void __init prom_setup_cmdline(void){ else strcpy(cp,GPIO_INIT_BUTTON); cmd_line[CL_SIZE-1] = '\0'; - + strcpy(arcs_cmdline,cmd_line); }