diff options
5 files changed, 48 insertions, 26 deletions
diff --git a/target/linux/rb532/files/arch/mips/pci/pci-rc32434.c b/target/linux/rb532/files/arch/mips/pci/pci-rc32434.c index fbc826832..9ae596c22 100644 --- a/target/linux/rb532/files/arch/mips/pci/pci-rc32434.c +++ b/target/linux/rb532/files/arch/mips/pci/pci-rc32434.c @@ -228,6 +228,8 @@ static int __init rc32434_pci_init(void) register_pci_controller(&rc32434_controller); rc32434_sync(); + + return 0; } arch_initcall(rc32434_pci_init); diff --git a/target/linux/rb532/files/arch/mips/rb500/devices.c b/target/linux/rb532/files/arch/mips/rb500/devices.c index 1ca808bea..d2476a89c 100644 --- a/target/linux/rb532/files/arch/mips/rb500/devices.c +++ b/target/linux/rb532/files/arch/mips/rb500/devices.c @@ -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 parse_mac_addr(char *macstr) 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 @@ static int __init plat_setup_devices(void) /* 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(); diff --git a/target/linux/rb532/files/arch/mips/rb500/prom.c b/target/linux/rb532/files/arch/mips/rb500/prom.c index 222bfe2d2..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[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 @@ 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;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 (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], 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); } diff --git a/target/linux/rb532/files/arch/mips/rb500/setup.c b/target/linux/rb532/files/arch/mips/rb500/setup.c index ee6bfb723..2fda0e2ab 100644 --- a/target/linux/rb532/files/arch/mips/rb500/setup.c +++ b/target/linux/rb532/files/arch/mips/rb500/setup.c @@ -19,7 +19,7 @@ #include <asm/rc32434/pci.h> #ifdef CONFIG_PCI -extern void *rc32434_time_init(void); +extern void rc32434_time_init(void); extern int __init rc32434_pcibridge_init(void); #endif diff --git a/target/linux/rb532/patches/100-rb5xx_support.patch b/target/linux/rb532/patches/100-rb5xx_support.patch index fcb6d7c5d..57150236d 100644 --- a/target/linux/rb532/patches/100-rb5xx_support.patch +++ b/target/linux/rb532/patches/100-rb5xx_support.patch @@ -69,11 +69,13 @@ diff -urN linux.old/drivers/pci/Makefile linux.dev/drivers/pci/Makefile 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 |