diff --git a/Makefile b/Makefile
index 2adc076..305bb9e 100644
--- a/Makefile
+++ b/Makefile
@@ -2693,6 +2693,7 @@
 rd88f6530mdu_config \
 db88f6601bp_config \
 rd88f6601mc_config \
+gflt400_config \
 gflt200_config \
 gflt110_config \
 kw2_test:
@@ -2727,7 +2728,8 @@
 	elif [ "$(findstring gflt200,$(RULE))" ] ; then \
 		echo "#define MV88F6601" > $(obj)include/config.h ;	\
 		echo "  * Configured for MV88F6601"; \
-	elif [ "$(findstring gflt110,$(RULE))" ] ; then \
+	elif [ "$(findstring gflt110,$(RULE))" ] || \
+		[ "$(findstring gflt400,$(RULE))" ]; then \
 		echo "#define MV88F6601" > $(obj)include/config.h ;	\
 		echo "  * Configured for MV88F6601"; \
 	else \
@@ -2811,6 +2813,12 @@
 		echo "#define MV_BOOTROM" >> $(obj)include/config.h ;	\
 		echo "MV_DDR_FREQ=256mb_400mhz_gflt110" >> $(obj)include/config.mk ;\
 		echo "  * Configured for GFLT110"; \
+	elif [ "$(findstring gflt400_config,$(RULE))" ] ; then\
+		echo "#define GFLT400" >> $(obj)include/config.h ;	\
+		echo "#define MV_BOOTSIZE_512K" >> $(obj)include/config.h ; \
+		echo "#define MV_BOOTROM" >> $(obj)include/config.h ;	\
+		echo "MV_DDR_FREQ=256mb_400mhz_gflt110" >> $(obj)include/config.mk ;\
+		echo "  * Configured for GFLT400"; \
 	else \
 		echo "  * Error no board was configured"; \
 	fi;
@@ -2963,7 +2971,8 @@
 
 	@if [ "$(findstring gflt200_config,$(RULE))" ] ; then \
 		echo "#include <configs/gflt200.h>" >> $(obj)include/config.h ; \
-	elif [ "$(findstring gflt110_config,$(RULE))" ] ; then \
+	elif [ "$(findstring gflt110_config,$(RULE))" ] || \
+		[ "$(findstring gflt400_config,$(RULE))" ]; then \
 		echo "#include <configs/gflt110.h>" >> $(obj)include/config.h ; \
 	else \
 		echo "#include <configs/mv_kw2.h>" >> $(obj)include/config.h ; \
diff --git a/board/mv_feroceon/mv_kw2/kw2_family/boardEnv/mvBoardEnvLib.c b/board/mv_feroceon/mv_kw2/kw2_family/boardEnv/mvBoardEnvLib.c
index 91471eb..48f19b4 100644
--- a/board/mv_feroceon/mv_kw2/kw2_family/boardEnv/mvBoardEnvLib.c
+++ b/board/mv_feroceon/mv_kw2/kw2_family/boardEnv/mvBoardEnvLib.c
@@ -159,24 +159,24 @@
 	MV_REG_WRITE(GPP_DATA_OUT_REG(0), BOARD_INFO(boardId)->gppOutValLow);
 	MV_REG_WRITE(GPP_DATA_OUT_REG(1), BOARD_INFO(boardId)->gppOutValMid);
 	if ((boardId != DB_88F6601_BP_ID) && (boardId != RD_88F6601_MC_ID)
-		&& (boardId != GFLT300_ID) && (boardId != GFLT200_ID)
-		&& (boardId != GFLT110_ID))
+		&& (boardId != GFLT400_ID) && (boardId != GFLT300_ID)
+		&& (boardId != GFLT200_ID) && (boardId != GFLT110_ID))
 		MV_REG_WRITE(GPP_DATA_OUT_REG(2), BOARD_INFO(boardId)->gppOutValHigh);
 
 	/* set GPP polarity */
 	mvGppPolaritySet(0, 0xFFFFFFFF, BOARD_INFO(boardId)->gppPolarityValLow);
 	mvGppPolaritySet(1, 0xFFFFFFFF, BOARD_INFO(boardId)->gppPolarityValMid);
 	if ((boardId != DB_88F6601_BP_ID) && (boardId != RD_88F6601_MC_ID)
-		&& (boardId != GFLT300_ID) && (boardId != GFLT200_ID)
-		&& (boardId != GFLT110_ID))
+		&& (boardId != GFLT400_ID) && (boardId != GFLT300_ID)
+		&& (boardId != GFLT200_ID) && (boardId != GFLT110_ID))
 		mvGppPolaritySet(2, 0xFFFFFFFF, BOARD_INFO(boardId)->gppPolarityValHigh);
 
 	/* Set GPP Out Enable */
 	mvGppTypeSet(0, 0xFFFFFFFF, BOARD_INFO(boardId)->gppOutEnValLow);
 	mvGppTypeSet(1, 0xFFFFFFFF, BOARD_INFO(boardId)->gppOutEnValMid);
 	if ((boardId != DB_88F6601_BP_ID) && (boardId != RD_88F6601_MC_ID)
-		&& (boardId != GFLT300_ID) && (boardId != GFLT200_ID)
-		&& (boardId != GFLT110_ID))
+		&& (boardId != GFLT400_ID) && (boardId != GFLT300_ID)
+		&& (boardId != GFLT200_ID) && (boardId != GFLT110_ID))
 		mvGppTypeSet(2, 0xFFFFFFFF, BOARD_INFO(boardId)->gppOutEnValHigh);
 
 	/* Nand CE */
@@ -361,8 +361,8 @@
 	}
 
 	if ((RD_88F6601_MC_ID == mvBoardIdGet()) ||
-		(GFLT300_ID == mvBoardIdGet()) || (GFLT200_ID == mvBoardIdGet()) ||
-		(GFLT110_ID == mvBoardIdGet()))
+		(GFLT400_ID == mvBoardIdGet()) || (GFLT300_ID == mvBoardIdGet()) ||
+		(GFLT200_ID == mvBoardIdGet()) || (GFLT110_ID == mvBoardIdGet()))
 		return MV_FALSE;
 
 	if ((ethPortNum > 0) || (ethCompOpt & ESC_OPT_SGMII_2_SW_P1))
@@ -661,8 +661,8 @@
 		return MV_ERROR;
 	}
 	if ((RD_88F6601_MC_ID == boardId) || (DB_88F6601_BP_ID == boardId)
-		|| (GFLT300_ID == boardId) || (GFLT200_ID == boardId)
-		|| (GFLT110_ID == boardId))
+		|| (GFLT400_ID == boardId) || (GFLT300_ID == boardId)
+		|| (GFLT200_ID == boardId) || (GFLT110_ID == boardId))
 	{
 		return 0;
 	}
@@ -1264,8 +1264,8 @@
 
 	tmpTClkRate = MV_REG_READ(MPP_SAMPLE_AT_RESET(0));
 	if ((RD_88F6601_MC_ID == boardId) || (DB_88F6601_BP_ID == boardId)
-		|| (GFLT300_ID == boardId) || (GFLT200_ID == boardId)
-		|| (GFLT110_ID == boardId)) {
+		|| (GFLT400_ID == boardId) || (GFLT300_ID == boardId)
+		|| (GFLT200_ID == boardId) || (GFLT110_ID == boardId)) {
 		tmpTClkRate &= MSAR_TCLCK_6601_MASK;
 		if (tmpTClkRate )
 			return MV_BOARD_TCLK_200MHZ;
@@ -1321,8 +1321,8 @@
 	clockSatr = MSAR_CPU_DDR_L2_CLCK_EXTRACT(sar0);
 	i = 0;
 	if ((RD_88F6601_MC_ID == boardId) || (DB_88F6601_BP_ID == boardId)
-		|| (GFLT300_ID == boardId)  || (GFLT200_ID == boardId)
-		|| (GFLT110_ID == boardId)) {
+		|| (GFLT400_ID == boardId) || (GFLT300_ID == boardId)
+		|| (GFLT200_ID == boardId) || (GFLT110_ID == boardId)) {
 		while (cpuDdrTbl6601[i].satrValue != -1) {
 			if (cpuDdrTbl6601[i].satrValue == clockSatr) {
 				res = i;
@@ -2369,8 +2369,8 @@
 		return MV_FALSE;
 	}
 	if ((RD_88F6601_MC_ID == mvBoardIdGet())
-		|| (GFLT300_ID == mvBoardIdGet()) || (GFLT200_ID == mvBoardIdGet())
-		|| (GFLT110_ID == mvBoardIdGet())) {
+		|| (GFLT400_ID == mvBoardIdGet()) || (GFLT300_ID == mvBoardIdGet())
+		|| (GFLT200_ID == mvBoardIdGet()) || (GFLT110_ID == mvBoardIdGet())) {
 		if (ethPortNum == 0)
 			return MV_TRUE;
 		return MV_FALSE;
@@ -2775,6 +2775,8 @@
 		tmpBoardId = DB_CUSTOMER_ID;
 #elif defined(GFLT200)
 		tmpBoardId = GFLT200_ID;
+#elif defined(GFLT400)
+		tmpBoardId = GFLT400_ID;
 #elif defined(GFLT110)
 		if (MV_REG_READ(MV_GPP_REGS_OFFSET_0 + 0x10 ) & BIT15)
 			tmpBoardId = GFLT110_ID;
diff --git a/board/mv_feroceon/mv_kw2/kw2_family/boardEnv/mvBoardEnvSpec.c b/board/mv_feroceon/mv_kw2/kw2_family/boardEnv/mvBoardEnvSpec.c
index ace6787..902a50e 100644
--- a/board/mv_feroceon/mv_kw2/kw2_family/boardEnv/mvBoardEnvSpec.c
+++ b/board/mv_feroceon/mv_kw2/kw2_family/boardEnv/mvBoardEnvSpec.c
@@ -1696,6 +1696,147 @@
 	.moduleAutoDetect = MV_FALSE
 };
 
+/***************************************************************************
+** GFLT400 - Copied from GFLT300
+****************************************************************************/
+
+MV_BOARD_TWSI_INFO gflt400InfoBoardTwsiDev[] = {
+	/* {{MV_BOARD_DEV_CLASS devClass, MV_U8 twsiDevAddr, MV_U8 twsiDevAddrType}} */
+};
+
+MV_BOARD_MAC_INFO gflt400InfoBoardMacInfo[] = {
+	/* {{MV_BOARD_MAC_SPEED boardMacSpeed, MV_U8 boardEthSmiAddr}} */
+	{BOARD_MAC_SPEED_AUTO, 0x0},
+	{BOARD_MAC_SPEED_AUTO, 0x1},
+	{N_A,N_A}
+};
+
+MV_BOARD_MPP_TYPE_INFO gflt400InfoBoardMppTypeInfo[] = {
+	{
+		.boardMppTdm = MV_BOARD_AUTO,
+		.ethSataComplexOpt = ESC_OPT_GEPHY_MAC0,
+		.ethPortsMode = 0x0
+	}
+};
+
+MV_BOARD_GPP_INFO gflt400InfoBoardGppInfo[] = {
+	/* {{MV_BOARD_GPP_CLASS devClass, MV_U8 gppPinNum}} */
+	{BOARD_GPP_LED,  9, .activeLow = 1, .name = "pon-blue"},
+	{BOARD_GPP_LED, 10, .activeLow = 1, .name = "pon-red"},
+};
+
+
+MV_DEV_CS_INFO gflt400InfoBoardDeCsInfo[] = {
+	/*{deviceCS, params, devType, devWidth} */
+#ifdef MV_SPI
+	{SPI_CS0, N_A, BOARD_DEV_SPI_FLASH, 8},		/* SPI DEV */
+#endif
+#if !defined(MV_SPI)
+	{N_A, N_A, N_A, N_A}			/* No device */
+#endif
+};
+
+MV_BOARD_MPP_INFO gflt400InfoBoardMppConfigValue[] = {
+	{{
+	  GFLT400_MPP0_7,
+	  GFLT400_MPP8_15,
+	  GFLT400_MPP16_23,
+	  GFLT400_MPP24_31,
+	  GFLT400_MPP32_37
+	  }
+	 }
+};
+
+
+static MV_VOID gflt400BoardEgigaPhyInit(MV_BOARD_INFO *pBoardInfo)
+{
+	MV_U16 value = 0;
+	/* pass led control to internal phy */
+	MV_REG_WRITE(LED_MATRIX_CTRL_REG(0), 0x82);
+
+	/* link = mpp 14 = c2 = phy led[2] */
+	/* data = mpp 26 = c1 = phy led[1] */
+	mvEthPhyRegWrite(0, 22, 3);
+	mvEthPhyRegRead(0, 16, &value);
+	value = (value & ~0xff) | 0x37;
+	mvEthPhyRegWrite(0, 16, value);
+	mvEthPhyRegWrite(0, 22, 0);
+}
+
+
+static MV_VOID gflt400BoardPreBootOs(MV_BOARD_INFO *pBoardInfo)
+{
+	gfltConfigWatchDog();
+}
+
+MV_BOARD_INFO gflt400Info = {
+	.boardName = "GFLT400",
+	.pBoardEgigaPhyInit = gflt400BoardEgigaPhyInit,
+	.pBoardPreBootOs = gflt400BoardPreBootOs,
+	.numBoardMppTypeValue = MV_ARRAY_SIZE(gflt400InfoBoardMppTypeInfo),
+	.pBoardMppTypeValue = gflt400InfoBoardMppTypeInfo,
+	.numBoardMppConfigValue = MV_ARRAY_SIZE(gflt400InfoBoardMppConfigValue),
+	.pBoardMppConfigValue = gflt400InfoBoardMppConfigValue,
+	.intsGppMaskLow = 0,
+	.intsGppMaskMid = 0,
+	.intsGppMaskHigh = 0,
+	.numBoardDeviceIf = MV_ARRAY_SIZE(gflt400InfoBoardDeCsInfo),
+	.pDevCsInfo = gflt400InfoBoardDeCsInfo,
+	.numBoardTwsiDev = MV_ARRAY_SIZE(gflt400InfoBoardTwsiDev),
+	.pBoardTwsiDev = gflt400InfoBoardTwsiDev,
+	.numBoardMacInfo = MV_ARRAY_SIZE(gflt400InfoBoardMacInfo),
+	.pBoardMacInfo = gflt400InfoBoardMacInfo,
+	.numBoardGppInfo = MV_ARRAY_SIZE(gflt400InfoBoardGppInfo),
+	.pBoardGppInfo = gflt400InfoBoardGppInfo,
+	.activeLedsNumber = 0,
+	.pLedGppPin = NULL,
+	.ledsPolarity = 0,
+
+	/* GPP values */
+	.gppOutEnValLow = GFLT400_GPP_OUT_ENA_LOW,
+	.gppOutEnValMid = GFLT400_GPP_OUT_ENA_MID,
+	.gppOutEnValHigh = 0,
+	.gppOutValLow = GFLT400_GPP_OUT_VAL_LOW,
+	.gppOutValMid = GFLT400_GPP_OUT_VAL_MID,
+	.gppOutValHigh = 0,
+	.gppPolarityValLow = GFLT400_GPP_POL_LOW,
+	.gppPolarityValMid = GFLT400_GPP_POL_MID,
+	.gppPolarityValHigh = 0,
+
+	/* External Switch Configuration */
+	.pSwitchInfo = NULL,
+	.switchInfoNum = 0,
+
+	/* PON configuration. */
+	.ponConfigValue = BOARD_GPON_CONFIG,
+
+	/* TDM configuration */
+	/* We hold a different configuration array for each possible slic that
+	 ** can be connected to board.
+	 ** When modules are scanned, then we select the index of the relevant
+	 ** slic's information array.
+	 ** For RD and Customers boards we only need to initialize a single
+	 ** entry of the arrays below, and set the boardTdmInfoIndex to 0.
+	 */
+	.numBoardTdmInfo = {0},
+	.pBoardTdmInt2CsInfo = {NULL},
+	.boardTdmInfoIndex = -1,
+
+	.pBoardSpecInit = NULL,			/* gflt400BoardSpecInit, */
+
+	.deepIdlePwrUpDelay = 2400,	/* 12uS */
+
+	/* NAND init params */
+	.nandFlashParamsValid = MV_FALSE,
+	.nandFlashReadParams = 0,
+	.nandFlashWriteParams = 0,
+	.nandFlashControl = 0,
+	.pBoardTdmSpiInfo = NULL,
+
+	/* Enable modules auto-detection. */
+	.moduleAutoDetect = MV_FALSE
+};
+
 MV_BOARD_INFO *boardInfoTbl[] = {
 	&db88f6535Info,
 	&rd88f6510Info,
@@ -1708,4 +1849,5 @@
 	&gflt110Info,
 	NULL,  /* unsupported RD_88F6601_MC2L_ID */
 	&gflt300Info,
+	&gflt400Info,
 };
diff --git a/board/mv_feroceon/mv_kw2/kw2_family/boardEnv/mvBoardEnvSpec.h b/board/mv_feroceon/mv_kw2/kw2_family/boardEnv/mvBoardEnvSpec.h
index ed329a6..a1af2a5 100644
--- a/board/mv_feroceon/mv_kw2/kw2_family/boardEnv/mvBoardEnvSpec.h
+++ b/board/mv_feroceon/mv_kw2/kw2_family/boardEnv/mvBoardEnvSpec.h
@@ -112,7 +112,8 @@
 #define GFLT110_ID			DB_CUSTOMER_ID + 1
 #define RD_88F6601_MC2L_ID		DB_CUSTOMER_ID + 2   /* for an upstream kernel */
 #define GFLT300_ID			DB_CUSTOMER_ID + 3
-#define MV_MAX_BOARD_ID			(DB_CUSTOMER_ID + 4)
+#define GFLT400_ID			DB_CUSTOMER_ID + 4
+#define MV_MAX_BOARD_ID			(DB_CUSTOMER_ID + 5)
 
 /***************************************************************************
 ** RD-88F6510-SFU
@@ -640,4 +641,49 @@
 #define GFLT300_GPP_POL_LOW	(BIT17)
 #define GFLT300_GPP_POL_MID	0x0
 
+/***************************************************************************
+** GFLT400 - Copied from GFLT300
+****************************************************************************/
+/* GPIO settings for GFLT400: http://go/gflt400-gpio-config */
+
+/* GPPs
+ 0  GHN_RESET_N_L
+ 1  SPI_MOSI
+ 2  SPI_CLK
+ 3  SPI_CS_L
+ 4  SPI_MISO
+ 7  UART0_TX
+ 8  UART0_RX
+ 9  LED_BLUE_L
+ 10 LED_RED_L
+ 13 BOARD_VER[0]
+ 14 GE_LINK_RED
+ 15 BOARD_VER[1]
+ 17 SW_RESET
+ 18 BOARD_VER[2]
+ 20 DYING_GASP_INT_R2
+ 26 GE_DATA_LED
+ 28 SPI_WP_L(out)
+ 33 DYING_GASP_INT_R
+*/
+
+#define GFLT400_MPP0_7		0x20022220
+#define GFLT400_MPP8_15		0x05000002
+#define GFLT400_MPP16_23	0x00000000
+#define GFLT400_MPP24_31	0x00000500
+#define GFLT400_MPP32_37	0x00000000
+
+/* Default all ones-inputs, invert for outputs */
+#define GFLT400_GPP_OUT_ENA_LOW	 (~(BIT9 | BIT10))
+#define GFLT400_GPP_OUT_ENA_MID	 0x0
+
+/* BIT09 turns the LED blue.
+ * BIT10 turns the LED red. */
+#define GFLT400_GPP_OUT_VAL_LOW	(BIT9)
+#define GFLT400_GPP_OUT_VAL_MID	(0)
+
+/* GFLT400 has the reset button signal inverted */
+#define GFLT400_GPP_POL_LOW	(BIT17)
+#define GFLT400_GPP_POL_MID	0x0
+
 #endif /* __INCmvBoardEnvSpech */
diff --git a/board/mv_feroceon/mv_kw2/kw2_family/cpu/mvCpu.c b/board/mv_feroceon/mv_kw2/kw2_family/cpu/mvCpu.c
index 5dc1829..69e6693 100644
--- a/board/mv_feroceon/mv_kw2/kw2_family/cpu/mvCpu.c
+++ b/board/mv_feroceon/mv_kw2/kw2_family/cpu/mvCpu.c
@@ -112,7 +112,8 @@
 	/* Search for a matching entry */
 	i = 0;
 	if ((RD_88F6601_MC_ID == boardId) || (DB_88F6601_BP_ID == boardId) ||
-		(GFLT300_ID == boardId) || (GFLT200_ID == boardId) || (GFLT110_ID == boardId)){
+		(GFLT400_ID == boardId) || (GFLT300_ID == boardId) ||
+		(GFLT200_ID == boardId) || (GFLT110_ID == boardId)) {
 		while (cpuDdrTbl6601[i].satrValue != -1) {
 			if (cpuDdrTbl6601[i].satrValue == clockSatr) {
 				res = i;
@@ -160,8 +161,10 @@
 	if (idx == 0xFFFFFFFF)
 		return 0;
 	else {
-		if ((RD_88F6601_MC_ID == boardId) || (DB_88F6601_BP_ID == boardId)
-			|| (GFLT300_ID == boardId) || (GFLT200_ID == boardId) || (GFLT110_ID == boardId))
+		if ((RD_88F6601_MC_ID == boardId) ||
+			(DB_88F6601_BP_ID == boardId) ||
+			(GFLT400_ID == boardId) || (GFLT300_ID == boardId) ||
+			(GFLT200_ID == boardId) || (GFLT110_ID == boardId))
 			return cpuDdrTbl6601[idx].cpuClk;
 		else
 			return cpuDdrL2Tbl[idx].cpuClk;
@@ -194,8 +197,10 @@
 	if (idx == 0xFFFFFFFF)
 		return 0;
 	else {
-		if ((RD_88F6601_MC_ID == boardId) || (DB_88F6601_BP_ID == boardId)
-			|| (GFLT300_ID == boardId) || (GFLT200_ID == boardId) || (GFLT110_ID == boardId))
+		if ((RD_88F6601_MC_ID == boardId) ||
+			(DB_88F6601_BP_ID == boardId) ||
+			(GFLT400_ID == boardId) || (GFLT300_ID == boardId) ||
+			(GFLT200_ID == boardId) || (GFLT110_ID == boardId))
 			return cpuDdrTbl6601[idx].l2Clk;
 		else
 			return cpuDdrL2Tbl[idx].l2Clk;
@@ -224,7 +229,8 @@
 	if ((RD_88F6510_SFU_ID == mvBoardId) ||
 		(RD_88F6601_MC_ID == mvBoardId) ||
 		(DB_88F6601_BP_ID == mvBoardId) ||
-	        (GFLT300_ID == mvBoardId) ||
+		(GFLT400_ID == mvBoardId) ||
+		(GFLT300_ID == mvBoardId) ||
 		(GFLT200_ID == mvBoardId) ||
 		(GFLT110_ID == mvBoardId))
 		return MV_FALSE;
