diff --git a/arch/arc/cpu/u-boot.lds b/arch/arc/cpu/u-boot.lds
index ccddbf7dc9b754997b9ae7abc81d8d3b7351a5d6..693df74061f5c1203f18668a832fb7464abce999 100644
--- a/arch/arc/cpu/u-boot.lds
+++ b/arch/arc/cpu/u-boot.lds
@@ -13,6 +13,7 @@ SECTIONS
 	.text :	{
 		*(.__text_start)
 		*(.__image_copy_start)
+		arch/arc/lib/start.o (.text*)
 		*(.text*)
 	}
 
diff --git a/arch/arc/lib/Makefile b/arch/arc/lib/Makefile
index b88790492d2a2805819905a667430a5d807bcc7d..e592802907786938db5f36fc2a819fefe3c38639 100644
--- a/arch/arc/lib/Makefile
+++ b/arch/arc/lib/Makefile
@@ -4,6 +4,8 @@
 # SPDX-License-Identifier:	GPL-2.0+
 #
 
+extra-y	= start.o
+head-y := start.o
 obj-y += cache.o
 obj-y += cpu.o
 obj-y += interrupts.o
@@ -18,7 +20,6 @@ obj-y += memcpy-700.o
 obj-y += memset.o
 obj-y += reset.o
 obj-y += timer.o
-obj-y += start.o
 obj-y += ints_low.o
 obj-y += init_helpers.o
 
diff --git a/board/synopsys/axs101/axs101.c b/board/synopsys/axs101/axs101.c
index 774204976e5de4e911e643e09ee664d49554bdbb..8c16410944d4714f6ffdfb8dc5b1e2eca3c5c026 100644
--- a/board/synopsys/axs101/axs101.c
+++ b/board/synopsys/axs101/axs101.c
@@ -9,6 +9,7 @@
 #include <malloc.h>
 #include <netdev.h>
 #include <phy.h>
+#include "axs10x.h"
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -42,3 +43,16 @@ int board_eth_init(bd_t *bis)
 
 	return 0;
 }
+
+
+#define AXS_MB_CREG	0xE0011000
+
+int board_early_init_f(void)
+{
+	if (readl((void __iomem *)AXS_MB_CREG + 0x234) & (1 << 28))
+		gd->board_type = AXS_MB_V3;
+	else
+		gd->board_type = AXS_MB_V2;
+
+	return 0;
+}
diff --git a/board/synopsys/axs101/axs10x.h b/board/synopsys/axs101/axs10x.h
new file mode 100644
index 0000000000000000000000000000000000000000..8e8c41f865dae6b9e47bd88e0c4748a4477ff9af
--- /dev/null
+++ b/board/synopsys/axs101/axs10x.h
@@ -0,0 +1,16 @@
+/*
+ * Copyright (C) 2015 Synopsys, Inc. All rights reserved.
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
+ */
+
+#ifndef _BOARD_SYNOPSYS_AXS10X_H
+#define _BOARD_SYNOPSYS_AXS10X_H
+
+enum {
+	AXS_MB_V2,
+	AXS_MB_V3
+};
+
+#endif /* _BOARD_SYNOPSYS_AXS10X_H */
+
diff --git a/board/synopsys/axs101/nand.c b/board/synopsys/axs101/nand.c
index ff35286c6efdb2e14474830fc6fc5cee6df9da31..4be52e22c0bad6596d3e0309293988dba59fd17a 100644
--- a/board/synopsys/axs101/nand.c
+++ b/board/synopsys/axs101/nand.c
@@ -9,6 +9,9 @@
 #include <malloc.h>
 #include <nand.h>
 #include <asm/io.h>
+#include "axs10x.h"
+
+DECLARE_GLOBAL_DATA_PTR;
 
 #define BUS_WIDTH	8		/* AXI data bus width in bytes	*/
 
@@ -232,5 +235,9 @@ int board_nand_init(struct nand_chip *nand)
 	nand->write_buf = axs101_nand_write_buf;
 	nand->read_buf = axs101_nand_read_buf;
 
+	/* MBv3 has NAND IC with 16-bit data bus */
+	if (gd->board_type == AXS_MB_V3)
+		nand->options |= NAND_BUSWIDTH_16;
+
 	return 0;
 }
diff --git a/include/configs/axs101.h b/include/configs/axs101.h
index 5fb8aca4bca95f3fa307407649e2d084b65ff2af..8a7095c5b242ecf40a10ec111ad568e78d68281b 100644
--- a/include/configs/axs101.h
+++ b/include/configs/axs101.h
@@ -33,6 +33,12 @@
 #define CONFIG_SYS_BOOTM_LEN		0x2000000	/* 32 MB */
 #define CONFIG_SYS_LOAD_ADDR		0x82000000
 
+/*
+ * This board might be of different versions so handle it
+ */
+#define CONFIG_BOARD_TYPES
+#define CONFIG_BOARD_EARLY_INIT_F
+
 /*
  * NAND Flash configuration
  */