fdt: msys: enabled Device Tree and BOOTZ support

	Enabled Device Tree manipulation support for MSYS platforms:
	- added dtb file and update settings: currently skip fdt update
	- wrapped fdt boardsetup unit routines with proper CONFIG defines:
	  CONFIG_PIC_GPIO, MV_INCLUDE_SATA, MV_INCLUDE_USB, MV_INCLUDE_USB_DEVICE
	- added missing board routines and enums in msys_family:
	  * mvBoardPortTypeGet, mvBoardGetDevBusNum, mvBoardSet/GetDevState,
	    mvBoardCompatibleNameGet, mvCpuIfMbusWindowSet
	  * updated Board Flash tables fields: status, busNum

Change-Id: Ie228f3d58fccc67ef85fe1395b8ab263230e9614
Signed-off-by: Omri Itach <omrii@marvell.com>
Reviewed-on: http://vgitil04.il.marvell.com:8080/20455
Tested-by: Star_Automation <star@marvell.com>
Reviewed-by: Hanna Hawa <hannah@marvell.com>
diff --git a/board/mv_ebu/common/USP/mv_fdt.c b/board/mv_ebu/common/USP/mv_fdt.c
index 016f251..b17c4d5 100644
--- a/board/mv_ebu/common/USP/mv_fdt.c
+++ b/board/mv_ebu/common/USP/mv_fdt.c
@@ -101,13 +101,19 @@
 static int mv_fdt_find_node(void *fdt, const char *name);
 static int mv_fdt_board_compatible_name_update(void *fdt);
 static int mv_fdt_update_serial(void *fdt);
+#ifdef CONFIG_PIC_GPIO
 static int mv_fdt_update_pic_gpio(void *fdt);
+#endif
 static int mv_fdt_update_cpus(void *fdt);
 static int mv_fdt_update_pex(void *fdt);
+#ifdef MV_INCLUDE_SATA
 static int mv_fdt_update_sata(void *fdt);
+#endif
+#ifdef MV_INCLUDE_USB
 static int mv_fdt_update_usb(void *fdt, MV_UNIT_ID unitType);
 static int mv_fdt_update_usb2(void *fdt);
 static int mv_fdt_update_usb3(void *fdt);
+#endif
 static int mv_fdt_update_ethnum(void *fdt);
 static int mv_fdt_update_flash(void *fdt);
 static int mv_fdt_set_node_prop(void *fdt, const char *node, const char *prop, const char *prop_val);
@@ -134,7 +140,9 @@
 #ifdef MV_USB_VBUS_CYCLE
 static int mv_fdt_update_usb_vbus(void *fdt);
 #endif
+#ifdef MV_INCLUDE_USB_DEVICE
 static int mv_fdt_update_usb_device(void *fdt);
+#endif
 
 #if 0 /* not compiled, since this routine is currently not in use  */
 static int mv_fdt_remove_prop(void *fdt, const char *path,
@@ -145,9 +153,13 @@
 update_fnc_t *update_sequence[] = {
 	mv_fdt_update_cpus,			/* Get number of CPUs and update dt */
 	mv_fdt_update_pex,			/* Get number of active PEX port and update DT */
+#ifdef MV_INCLUDE_SATA
 	mv_fdt_update_sata,			/* Get number of active SATA units and update DT */
+#endif
+#ifdef MV_INCLUDE_USB
 	mv_fdt_update_usb2,			/* Get number of active USB2.0 units and update DT */
 	mv_fdt_update_usb3,			/* Get number of active USB3.0 units and update DT */
+#endif
 	mv_fdt_update_ethnum,			/* Get number of active ETH port and update DT */
 #ifdef CONFIG_MV_SDHCI
 	mv_fdt_update_sdhci,			/* Update SDHCI driver settings in DT */
@@ -166,14 +178,18 @@
 	mv_fdt_update_pinctrl,			/* Update pinctrl driver settings in DT */
 	mv_fdt_board_compatible_name_update,	/* Update compatible (board name) in DT */
 	mv_fdt_update_serial,			/* Update serial/UART nodes in DT */
+#ifdef CONFIG_PIC_GPIO
 	mv_fdt_update_pic_gpio,
+#endif
 #ifdef MV_INCLUDE_AUDIO
 	mv_fdt_update_audio,			/* Update audio-controller+sound nodes in DT */
 #endif
 #ifdef MV_INCLUDE_SWITCH
 	mv_fdt_update_switch,
 #endif
+#ifdef MV_INCLUDE_USB_DEVICE
 	mv_fdt_update_usb_device,
+#endif
 	NULL,
 };
 
@@ -401,6 +417,7 @@
 	return 0;
 }
 
+#ifdef MV_INCLUDE_SATA
 /*******************************************************************************
 * mv_fdt_update_sata
 *
@@ -443,6 +460,7 @@
 
 	return 0;
 }
+#endif /* MV_INCLUDE_SATA */
 
 #ifdef MV_INCLUDE_TDM
 /*******************************************************************************
@@ -822,7 +840,7 @@
 	}
 	return 0;
 }
-
+#ifdef MV_INCLUDE_USB
 /*******************************************************************************
 * mv_fdt_update_usb
 *
@@ -885,7 +903,9 @@
 {
 	return mv_fdt_update_usb(fdt, USB3_UNIT_ID);
 }
+#endif /* MV_INCLUDE_USB */
 
+#ifdef MV_INCLUDE_USB_DEVICE
 /*******************************************************************************
 * mv_fdt_update_usb_device
 *
@@ -937,7 +957,7 @@
 	}
 	return 0;
 }
-
+#endif /* MV_INCLUDE_USB_DEVICE */
 /*******************************************************************************
 * mv_fdt_update_pinctrl
 *
@@ -1238,7 +1258,6 @@
 			return 0;
 		}
 	}
-
 	return 0;
 }
 
@@ -1709,7 +1728,7 @@
 
 	return 0;
 }
-
+#ifdef CONFIG_PIC_GPIO
 /*******************************************************************************
 * mv_fdt_update_pic_gpio
 *
@@ -1825,8 +1844,9 @@
 	mv_fdt_dprintf("Set '%s' property in '%s' node\n", ctrl_gpios_prop, pm_picNode);
 
 	return 0;
-}
 
+}
+#endif /* CONFIG_PIC_GPIO */
 #ifdef MV_INCLUDE_SWITCH
 /*******************************************************************************
 * mv_fdt_update_switch
diff --git a/board/mv_ebu/common/USP/mv_main.c b/board/mv_ebu/common/USP/mv_main.c
index 2bc8aa4..2aaa439 100755
--- a/board/mv_ebu/common/USP/mv_main.c
+++ b/board/mv_ebu/common/USP/mv_main.c
@@ -98,7 +98,7 @@
 #else
 #define DB(x)
 #endif
-
+extern void fdt_env_setup(char *fdtfile, MV_BOOL runUpdate);
 extern int display_dram_config(int print);
 int late_print_cpuinfo(void);
 /* CPU address decode table. */
@@ -465,6 +465,13 @@
 	envSetDefault("enaLPAE", "no");;
 #endif
 
+	/* Flatten Device Tree environment setup */
+#ifdef CONFIG_CUSTOMER_BOARD_SUPPORT
+	fdt_env_setup("msys.dtb", MV_FALSE); /* static setup: Skip DT update for customer */
+#else
+	fdt_env_setup("msys.dtb", MV_FALSE); /* dynamic setup: run DT update (false since not supported yet) */
+#endif
+
 #if (CONFIG_BOOTDELAY >= 0)
 	env = getenv("bootcmd");
 	if(!env)
diff --git a/board/mv_ebu/msys/msys_family/boardEnv/mvBoardEnvLib.c b/board/mv_ebu/msys/msys_family/boardEnv/mvBoardEnvLib.c
index b231f58..cbbde7c 100755
--- a/board/mv_ebu/msys/msys_family/boardEnv/mvBoardEnvLib.c
+++ b/board/mv_ebu/msys/msys_family/boardEnv/mvBoardEnvLib.c
@@ -377,6 +377,30 @@
 }
 
 /*******************************************************************************
+* mvBoardPortTypeGet
+*
+* DESCRIPTION:
+*       This routine returns port type
+*
+* INPUT:
+*       ethPortNum - Ethernet port number.
+*
+* OUTPUT:
+*       None
+*
+* RETURN:
+*       Mode of the port
+*
+*******************************************************************************/
+MV_U32 mvBoardPortTypeGet(MV_U32 ethPortNum)
+{
+	if (mvBoardIsPortInSgmii(ethPortNum))
+		return MV_PORT_TYPE_SGMII;
+	else
+		return MV_PORT_TYPE_RGMII;
+}
+
+/*******************************************************************************
 * mvBoardIsPortInMii
 *
 * DESCRIPTION:
@@ -1042,6 +1066,92 @@
 }
 
 /*******************************************************************************
+* mvBoardGetDevBusNum
+*
+* DESCRIPTION:
+*	Return the device's bus number.
+*
+* INPUT:
+*	devIndex - The device sequential number on the board
+*	devType - The device type ( Flash,RTC , etc .. )
+*
+* OUTPUT:
+*	None.
+*
+* RETURN:
+*	If the device is found on the board the then the functions returns the
+*	dev bus number else the function returns 0xFFFFFFFF
+*
+*******************************************************************************/
+MV_U32 mvBoardGetDevBusNum(MV_32 devNum, MV_BOARD_DEV_CLASS devClass)
+{
+	MV_DEV_CS_INFO *devEntry = mvBoardGetDevEntry(devNum, devClass);
+
+	if (devEntry)
+		return devEntry->busNum;
+
+	return 0xFFFFFFFF;
+}
+
+/*******************************************************************************
+* mvBoardGetDevState
+*
+* DESCRIPTION:
+*	Return the device's activity state.
+*
+* INPUT:
+*	devIndex - The device sequential number on the board
+*	devType - The device type ( Flash,RTC , etc .. )
+*
+* OUTPUT:
+*	None.
+*
+* RETURN:
+*	If the device is found on the board the then the functions returns the
+*	dev activity state else the function returns 0xFFFFFFFF
+*
+*******************************************************************************/
+MV_BOOL mvBoardGetDevState(MV_32 devNum, MV_BOARD_DEV_CLASS devClass)
+{
+	MV_DEV_CS_INFO *devEntry = mvBoardGetDevEntry(devNum, devClass);
+
+	if (devEntry)
+		return devEntry->active;
+
+	return 0xFFFFFFFF;
+}
+
+/*******************************************************************************
+* mvBoardSetDevState
+*
+* DESCRIPTION:
+*	Sets the device's activity state.
+*
+* INPUT:
+*	devIndex - The device sequential number on the board
+*   devType - The device type ( Flash,RTC , etc .. )
+*   newState - requested deevice state
+*
+* OUTPUT:
+*	None.
+*
+* RETURN:
+*	If the device is found on the board the then the functions returns
+*	MV_OK else MV_ERROR
+*
+*******************************************************************************/
+MV_STATUS mvBoardSetDevState(MV_32 devNum, MV_BOARD_DEV_CLASS devClass, MV_BOOL newState)
+{
+	MV_DEV_CS_INFO *devEntry = mvBoardGetDevEntry(devNum, devClass);
+
+	if (devEntry) {
+		devEntry->active = newState;
+		return MV_OK;
+	} else
+		return MV_ERROR;
+}
+
+/*******************************************************************************
 * mvBoardTwsiAddrTypeGet -
 *
 * DESCRIPTION:
@@ -2486,6 +2596,34 @@
 	return MV_NFC_ECC_DISABLE;
 #endif
 }
+/*******************************************************************************
+* mvBoardCompatibleNameGet
+*
+* DESCRIPTION: return string containing 'compatible' property value
+*		needed for Device Tree auto-update parsing sequence
+*
+* INPUT:  None
+* OUTPUT: None.
+*
+* RETURN: length of returned string (including special delimiters)
+*
+*******************************************************************************/
+MV_U8 mvBoardCompatibleNameGet(char *pNameBuff)
+{
+	MV_U8 len = 0;
+	/* i.e: compatible = "marvell,msys", "marvell,msys-bc2", "marvell,msys-bc2-db", "marvell,armada-370-xp"; */
+	len = sprintf(pNameBuff, "marvell,msys") + 1;
+	/*
+	 * append next strings after the NULL character that the previous
+	 * sprintf wrote.  This is how a device tree stores multiple
+	 * strings in a property.
+	 */
+	len += sprintf(pNameBuff + len, "marvell,msys-bc2") + 1;
+	len += sprintf(pNameBuff + len, "marvell,msys-bc2-db") + 1;
+	len += sprintf(pNameBuff + len, "marvell,armada-370-xp") + 1;
+
+	return len;
+}
 
 MV_NAND_IF_MODE mvBoardNandIfGet()
 {
diff --git a/board/mv_ebu/msys/msys_family/boardEnv/mvBoardEnvLib.h b/board/mv_ebu/msys/msys_family/boardEnv/mvBoardEnvLib.h
index 33a5996..75ba82c 100755
--- a/board/mv_ebu/msys/msys_family/boardEnv/mvBoardEnvLib.h
+++ b/board/mv_ebu/msys/msys_family/boardEnv/mvBoardEnvLib.h
@@ -84,6 +84,13 @@
 #define MV_BOARD_MAX_MPP		9	/* number of MPP conf registers */
 #define MV_BOARD_NAME_LEN  		0x20
 
+enum {
+	MV_PORT_TYPE_SGMII,
+	MV_PORT_TYPE_QSGMII,
+	MV_PORT_TYPE_RGMII,
+	MV_PORT_TYPE_UNKNOWN = -1,
+};
+
 typedef enum _devBoardMppTypeClass {
 	MV_BOARD_AUTO = 0,
 	MV_BOARD_MII_GMII,
@@ -153,6 +160,8 @@
 	MV_U32 devClass;	/* MV_BOARD_DEV_CLASS */
 	MV_U8 devWidth;
 	MV_U8 busWidth;
+	MV_U8 busNum;
+	MV_BOOL active;
 } MV_DEV_CS_INFO;
 
 typedef struct _boardSwitchInfo {
@@ -266,6 +275,7 @@
 MV_BOOL mvBoardIsEthActive(MV_U32 ethNum);
 MV_BOOL mvBoardIsPortInSgmii(MV_U32 ethPortNum);
 MV_BOOL mvBoardIsPortInGmii(MV_U32 ethPortNum);
+MV_U32 mvBoardPortTypeGet(MV_U32 ethPortNum);
 MV_BOOL mvBoardIsPortInMii(MV_U32 ethPortNum);
 MV_BOOL mvBoardIsPortInRgmii(MV_U32 ethPortNum);
 MV_32 mvBoardPhyAddrGet(MV_U32 ethPortNum);
@@ -289,6 +299,9 @@
 MV_32 mvBoardGetDeviceWidth(MV_32 devNum, MV_BOARD_DEV_CLASS devClass);
 MV_32 mvBoardGetDeviceWinSize(MV_32 devNum, MV_BOARD_DEV_CLASS devClass);
 MV_U32 mvBoardGetDevCSNum(MV_32 devNum, MV_BOARD_DEV_CLASS devClass);
+MV_U32 mvBoardGetDevBusNum(MV_32 devNum, MV_BOARD_DEV_CLASS devClass);
+MV_BOOL mvBoardGetDevState(MV_32 devNum, MV_BOARD_DEV_CLASS devClass);
+MV_STATUS mvBoardSetDevState(MV_32 devNum, MV_BOARD_DEV_CLASS devClass, MV_BOOL newState);
 MV_U8 mvBoardTwsiAddrTypeGet(MV_BOARD_TWSI_CLASS twsiClass, MV_U32 index);
 MV_U8 mvBoardTwsiAddrGet(MV_BOARD_TWSI_CLASS twsiClass, MV_U32 index);
 MV_32 mvBoardNandWidthGet(void);
@@ -362,6 +375,7 @@
 MV_VOID mvBoardDebugLed(MV_U32 hexNum);
 MV_NFC_ECC_MODE mvBoardNandECCModeGet(void);
 MV_U32 mvBoardCpssBoardIdSet(MV_U8);
+MV_U8 mvBoardCompatibleNameGet(char *pNameBuff);
 MV_NAND_IF_MODE mvBoardNandIfGet(void);
 MV_STATUS mvBoardOobPortCfgSet(MV_VOID);
 MV_BOOL mvBoardIsUsbPortConnected(MV_UNIT_ID usbTypeID, MV_U8 usbPortNumber);
diff --git a/board/mv_ebu/msys/msys_family/boardEnv/mvBoardEnvSpec.c b/board/mv_ebu/msys/msys_family/boardEnv/mvBoardEnvSpec.c
index fc1e7a3..7a206f0 100644
--- a/board/mv_ebu/msys/msys_family/boardEnv/mvBoardEnvSpec.c
+++ b/board/mv_ebu/msys/msys_family/boardEnv/mvBoardEnvSpec.c
@@ -109,12 +109,12 @@
 };
 
 MV_DEV_CS_INFO bobcat2_customer_board_0_InfoBoardDeCsInfo[] = {
-	/*{deviceCS, params, devType, devWidth, busWidth }*/
+	/*{deviceCS, params, devType, devWidth, busWidth, busNum, active }*/
 #if defined(MV_INCLUDE_SPI)
-	{SPI_CS0, N_A, BOARD_DEV_SPI_FLASH, 8, 8}, /* SPI DEV */
+	{SPI_CS0, N_A, BOARD_DEV_SPI_FLASH, 8, 8, 0, MV_TRUE}, /* SPI DEV */
 #endif
 #if defined(MV_INCLUDE_NOR)
-	{DEV_BOOCS, N_A, BOARD_DEV_NOR_FLASH, 16, 16} /* NOR DEV */
+	{DEV_BOOCS, N_A, BOARD_DEV_NOR_FLASH, 16, 16, 0, MV_TRUE} /* NOR DEV */
 #endif
 };
 
@@ -218,12 +218,12 @@
 };
 
 MV_DEV_CS_INFO alleycat3_customer_board_0_InfoBoardDeCsInfo[] = {
-	/*{deviceCS, params, devType, devWidth, busWidth }*/
+	/*{deviceCS, params, devType, devWidth, busWidth, busNum, active }*/
 #if defined(MV_INCLUDE_SPI)
-	{SPI_CS0, N_A, BOARD_DEV_SPI_FLASH, 8, 8}, /* SPI DEV */
+	{SPI_CS0, N_A, BOARD_DEV_SPI_FLASH, 8, 8, 0, MV_TRUE}, /* SPI DEV */
 #endif
 #if defined(MV_INCLUDE_NOR)
-	{DEV_BOOCS, N_A, BOARD_DEV_NOR_FLASH, 16, 16} /* NOR DEV */
+	{DEV_BOOCS, N_A, BOARD_DEV_NOR_FLASH, 16, 16, 0, MV_TRUE} /* NOR DEV */
 #endif
 };
 
@@ -327,12 +327,12 @@
 };
 
 MV_DEV_CS_INFO db_dx_bc2InfoBoardDeCsInfo[] = {
-	/*{deviceCS, params, devType, devWidth, busWidth }*/
+	/*{deviceCS, params, devType, devWidth, busWidth, busNum, active }*/
 #if defined(MV_INCLUDE_SPI)
-	{SPI_CS0, N_A, BOARD_DEV_SPI_FLASH, 8, 8}, /* SPI DEV */
+	{SPI_CS0, N_A, BOARD_DEV_SPI_FLASH, 8, 8, 0, MV_TRUE}, /* SPI DEV */
 #endif
 #if defined(MV_INCLUDE_NOR)
-	{DEV_BOOCS, N_A, BOARD_DEV_NOR_FLASH, 8, 8} /* NOR DEV */
+	{DEV_BOOCS, N_A, BOARD_DEV_NOR_FLASH, 8, 8, 0, MV_TRUE} /* NOR DEV */
 #endif
 };
 
@@ -418,9 +418,9 @@
 };
 
 MV_DEV_CS_INFO rd_dx_bc2InfoBoardDeCsInfo[] = {
-	/*{deviceCS, params, devType, devWidth}*/
+	/*{deviceCS, params, devType, devWidth, busNum, active}*/
 #if defined(MV_INCLUDE_SPI)
-	{SPI_CS0, N_A, BOARD_DEV_SPI_FLASH, 8} /* SPI DEV */
+	{SPI_CS0, N_A, BOARD_DEV_SPI_FLASH, 8, 0, MV_TRUE} /* SPI DEV */
 #endif
 };
 
@@ -503,9 +503,9 @@
 };
 
 MV_DEV_CS_INFO bc2_rd_mtlInfoBoardDeCsInfo[] = {
-	/*{deviceCS, params, devType, devWidth}*/
+	/*{deviceCS, params, devType, devWidth, busNum, active}*/
 #if defined(MV_INCLUDE_SPI)
-	{SPI_CS0, N_A, BOARD_DEV_SPI_FLASH, 8} /* SPI DEV */
+	{SPI_CS0, N_A, BOARD_DEV_SPI_FLASH, 8, 0, MV_TRUE} /* SPI DEV */
 #endif
 };
 
@@ -600,12 +600,12 @@
 };
 
 MV_DEV_CS_INFO db_dx_ac3InfoBoardDeCsInfo[] = {
-	/*{deviceCS, params, devType, devWidth, busWidth }*/
+	/*{deviceCS, params, devType, devWidth, busWidth, busNum, active }*/
 #if defined(MV_INCLUDE_SPI)
-	{SPI_CS0, N_A, BOARD_DEV_SPI_FLASH, 8, 8}, /* SPI DEV */
+	{SPI_CS0, N_A, BOARD_DEV_SPI_FLASH, 8, 8, 0, MV_TRUE}, /* SPI DEV */
 #endif
 #if defined(MV_INCLUDE_NOR)
-	{DEV_BOOCS, N_A, BOARD_DEV_NOR_FLASH, 16, 16} /* NOR DEV */
+	{DEV_BOOCS, N_A, BOARD_DEV_NOR_FLASH, 16, 16, 0, MV_TRUE} /* NOR DEV */
 #endif
 };
 
diff --git a/board/mv_ebu/msys/msys_family/ctrlEnv/mvCtrlEnvSpec.h b/board/mv_ebu/msys/msys_family/ctrlEnv/mvCtrlEnvSpec.h
index 028268a..9087e58 100755
--- a/board/mv_ebu/msys/msys_family/ctrlEnv/mvCtrlEnvSpec.h
+++ b/board/mv_ebu/msys/msys_family/ctrlEnv/mvCtrlEnvSpec.h
@@ -114,6 +114,7 @@
 			(pexIf < 8 ? (0x40000 + ((pexIf) / 4) * 0x40000 + ((pexIf) % 4) * 0x4000)\
 	: (0X42000 + ((pexIf) % 8) * 0x40000))
 #define MV_USB_REGS_OFFSET(dev)			(0x50000 + (dev * 0x1000))
+#define MV_USB2_USB3_REGS_OFFSET(unitType, dev) (MV_USB_REGS_OFFSET(dev))
 #define MV_XOR_REGS_OFFSET(unit)		(0xF0800)
 #if defined(MV_INCLUDE_IDMA)
 #define MV_IDMA_REGS_OFFSET			(0x60800)
@@ -185,6 +186,12 @@
 /* This define describes the maximum number of supported PCI Interfaces 	*/
 #define MV_DEVICE_MAX_CS      			4
 
+#ifdef CONFIG_ALLEYCAT3
+#define MV_USB_MAX_PORTS 1
+#else /* BC2 no USB ports */
+#define MV_USB_MAX_PORTS 0
+#endif
+#define MV_USB3_MAX_HOST_PORTS 0
 
 /* This define describes the maximum number of supported Ethernet ports */
 /* TODO - verify all these numbers */
diff --git a/board/mv_ebu/msys/msys_family/ctrlEnv/sys/mvCpuIf.c b/board/mv_ebu/msys/msys_family/ctrlEnv/sys/mvCpuIf.c
index 58db349..6149eb9 100755
--- a/board/mv_ebu/msys/msys_family/ctrlEnv/sys/mvCpuIf.c
+++ b/board/mv_ebu/msys/msys_family/ctrlEnv/sys/mvCpuIf.c
@@ -940,3 +940,32 @@
 
 	return MV_OK;
 }
+
+/*******************************************************************************
+* mvCpuIfMbusWindowSet
+*
+* DESCRIPTION:
+*	Set Mbus Bridge Window register
+*
+* INPUT:
+*	Windows Base Address
+*
+* OUTPUT:
+*       None.
+*
+* RETURN:
+*       None.
+*
+*******************************************************************************/
+MV_VOID mvCpuIfMbusWindowSet(MV_U32 base, MV_U32 size)
+{
+	MV_U32 reg;
+
+	MV_REG_WRITE(MBUS_BRIDGE_WIN_BASE_REG, base);
+	/* Align window size to 64KB */
+	size = ((size / _64K) - 1) << BRIDGWCR_SIZE_OFFS;
+	reg = MV_REG_READ(MBUS_BRIDGE_WIN_CTRL_REG);
+	reg &= ~BRIDGWCR_SIZE_MASK;
+	reg |= (size & BRIDGWCR_SIZE_MASK);
+	MV_REG_WRITE(MBUS_BRIDGE_WIN_CTRL_REG, reg);
+}
diff --git a/include/configs/armada_38x.h b/include/configs/armada_38x.h
index 1a07b42..8adb219 100644
--- a/include/configs/armada_38x.h
+++ b/include/configs/armada_38x.h
@@ -82,6 +82,7 @@
 #define MV_FS
 #define CONFIG_CMD_DATE
 #define CONFIG_BOARD_EARLY_INIT_F
+#define CONFIG_PIC_GPIO 		/*  support GPIO signals for PIC (programmable interface circuit) */
 
 #define MV_DDR_TRAINING_CMD_NEW_TIP
 
@@ -499,6 +500,7 @@
 	#define CONFIG_USB_XHCI
 	#define CONFIG_SYS_USB_XHCI_MAX_ROOT_PORTS  1
 	#define MV_INCLUDE_USB
+	#define MV_INCLUDE_USB_DEVICE
 	#define CONFIG_CMD_USB
 	#define CONFIG_USB_STORAGE
 	#define CONFIG_EHCI_IS_TDI
diff --git a/include/configs/msys.h b/include/configs/msys.h
index b374f30..8cd137f 100644
--- a/include/configs/msys.h
+++ b/include/configs/msys.h
@@ -114,6 +114,7 @@
 #ifndef __ASSEMBLY__
 	extern unsigned int mvCpuDdrClkGet(void);
 	extern unsigned int mvTclkGet(void);
+	extern unsigned int mvUartPortGet(void);
 	#define UBOOT_CNTR		0		/* counter to use for uboot timer */
 	#define MV_TCLK_CNTR		1		/* counter to use for uboot timer */
 	#define MV_REF_CLK_DEV_BIT	1000		/* Number of cycle to eanble timer */
@@ -204,6 +205,11 @@
 #define CONFIG_BOOTP_PXE_CLIENTARCH	0x100
 #define CONFIG_BOOTP_VCI_STRING		"U-boot.armv7.armada_xp"
 
+/* Flattened Device Tree (FDT) support */
+#define CONFIG_OF_LIBFDT               1
+#define CONFIG_OF_BOARD_SETUP
+#undef CONFIG_OF_LIBFDT_IS_DEFAULT   /* dft is the default for bootcmd */
+
 /* FS supported */
 #define CONFIG_CMD_EXT2
 #define CONFIG_CMD_EXT4