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 fbc82683286cba8892371df585ff431c1922bf56..9ae596c2234fb36579633e7d51d060defca248fe 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 1ca808beaf543375de559cdafd945f3092750ba5..d2476a89c39d8e9d6d8d2ac117153a479c7931b8 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 222bfe2d23ae3700d6fc8c92e6d262298f53c7cc..b10172fb5126683e6e0367576c382cfeae554d02 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 ee6bfb7235c6c914b70131731f090fd6620ceda2..2fda0e2ab1c1901cb6d565166046247fec697204 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 fcb6d7c5d5e0f692fd8a07198d7abedd09cc7530..57150236db38c7cd525407e40060f9510cfbdc64 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