Public feed
#726614
Index: target/linux/rb532/files/arch/mips/rb500/devices.c===================================================================--- target/linux/rb532/files/arch/mips/rb500/devices.c (revision 9134)+++ target/linux/rb532/files/arch/mips/rb500/devices.c (working copy)@@ -23,6 +23,8 @@ #include <linux/mtd/mtd.h> #include <linux/mtd/partitions.h> +#include <asm/bootinfo.h>+ #include <asm/rc32434/rc32434.h> #include <asm/rc32434/dma.h> #include <asm/rc32434/dma_v.h>@@ -230,10 +232,14 @@ static void __init rb500_nand_setup(void) {- if (!strcmp(board_type, "500r5"))+ switch (mips_machtype) {+ case MACH_MIKROTIK_RB532A: changeLatchU5(LO_FOFF | LO_CEX, LO_ULED | LO_ALE | LO_CLE | LO_WPX);- else+ break;+ default: changeLatchU5(LO_WPX | LO_FOFF | LO_CEX, LO_ULED | LO_ALE | LO_CLE);+ break;+ } /* Setup NAND specific settings */ rb500_nand_data.chip.nr_chips = 1;@@ -258,7 +264,7 @@ /* Read the NAND resources from the device controller */ nand_slot0_res[0].start = readl(CFG_DC_DEV2 + CFG_DC_DEVBASE); nand_slot0_res[0].end = nand_slot0_res[0].start + 0x1000;- + /* Initialise the NAND device */ rb500_nand_setup(); Index: target/linux/rb532/files/arch/mips/rb500/prom.c===================================================================--- target/linux/rb532/files/arch/mips/rb500/prom.c (revision 9134)+++ target/linux/rb532/files/arch/mips/rb500/prom.c (working copy)@@ -1,5 +1,5 @@ /*-* prom.c +* prom.c ********************************************************************** * P . Sadik Oct 10, 2003 *@@ -42,12 +42,9 @@ unsigned int idt_cpu_freq = 132000000; EXPORT_SYMBOL(idt_cpu_freq);-char board_type[11];-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 @@ 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 @@ #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 @@ { 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 @@ /* 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,40 +123,44 @@ 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;i<prom_argc;i++){- if (strncmp(prom_argv[i], FREQ_TAG, sizeof(FREQ_TAG) - 1) == 0) {- idt_cpu_freq = simple_strtoul(prom_argv[i] + sizeof(FREQ_TAG) - 1, 0, 10);+ if (match_tag(prom_argv[i], FREQ_TAG)) {+ idt_cpu_freq = tag2ul(prom_argv[i], FREQ_TAG); continue; } #ifdef IGNORE_CMDLINE_MEM /* parses out the "mem=xx" arg */- if (strncmp(prom_argv[i], MEM_TAG, sizeof(MEM_TAG) - 1) == 0) {+ if (match_tag(prom_argv[i], MEM_TAG)) { continue; } #endif if (i>0) *(cp++) = ' ';+ 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], BOARD_TAG, sizeof(BOARD_TAG) - 1) == 0) {- strcpy(board_type, prom_argv[i] + sizeof(BOARD_TAG) -1);+ if (match_tag(prom_argv[i], GPIO_TAG)) {+ gpio_bootup_state = tag2ul(prom_argv[i], GPIO_TAG); }- 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);- } strcpy(cp,prom_argv[i]); cp+=strlen(prom_argv[i]); } *(cp++) = ' '; strcpy(cp,(&_image_cmdline + 8)); cp += strlen(&_image_cmdline);- + i=strlen(arcs_cmdline); if (i>0){ *(cp++) = ' ';@@ -160,7 +172,7 @@ else strcpy(cp,GPIO_INIT_BUTTON); cmd_line[CL_SIZE-1] = '\0';- + strcpy(arcs_cmdline,cmd_line); } Index: target/linux/rb532/patches/100-rb5xx_support.patch===================================================================--- target/linux/rb532/patches/100-rb5xx_support.patch (revision 9134)+++ target/linux/rb532/patches/100-rb5xx_support.patch (working copy)@@ -69,11 +69,13 @@ diff -urN linux.old/include/asm-mips/bootinfo.h linux.dev/include/asm-mips/bootinfo.h --- linux.old/include/asm-mips/bootinfo.h 2006-11-29 22:57:37.000000000 +0100 +++ linux.dev/include/asm-mips/bootinfo.h 2006-12-14 04:09:50.000000000 +0100-@@ -212,6 +212,8 @@+@@ -212,6 +212,10 @@ #define MACH_GROUP_NEC_EMMA2RH 25 /* NEC EMMA2RH (was 23) */ #define MACH_NEC_MARKEINS 0 /* NEC EMMA2RH Mark-eins */ -+#define MACH_GROUP_MIKROTIK 24 /* Mikrotik Boards */++#define MACH_GROUP_MIKROTIK 26 /* Mikrotik Boards */++#define MACH_MIKROTIK_RB532 0 /* Mikrotik RouterBoard 532 */++#define MACH_MIKROTIK_RB532A 1 /* Mikrotik RouterBoard 532A */ + #define CL_SIZE COMMAND_LINE_SIZE