Initial port from uboot

Change-Id: Ib3ca728f9da6a290848457c3cf5b2887ccd276c1
diff --git a/arch/arm/mach-feroceon-kw2/core.c b/arch/arm/mach-feroceon-kw2/core.c
index 7abeb6b..e68380a 100755
--- a/arch/arm/mach-feroceon-kw2/core.c
+++ b/arch/arm/mach-feroceon-kw2/core.c
@@ -153,9 +153,16 @@
 	mvUbootVer = tag->u.mv_uboot.uboot_version;
 	mvIsUsbHost = tag->u.mv_uboot.isUsbHost;
 
-	printk("Using UBoot passing parameters structure\n");
+	printk("Using UBoot passing parameters structure: UbootVer:%x\n", mvUbootVer);
 
 	gBoardId =  (mvUbootVer & 0xff);
+#ifdef CONFIG_MACH_GFLT110
+	if ((gBoardId != GFLT110_ID) && (gBoardId != GFLT300_ID)) {
+		printk("unknown boardID from uboot:%x  defaulting to GFLT110\n", gBoardId);
+		gBoardId = GFLT110_ID;
+	}
+#endif
+	printk("BoardId:%x\n", mvBoardIdGet());
 #ifdef CONFIG_MV_INCLUDE_GIG_ETH
 	for (i = 0; i < CONFIG_MV_ETH_PORTS_NUM; i++) {
 #if defined (CONFIG_OVERRIDE_ETH_CMDLINE)
diff --git a/arch/arm/mach-feroceon-kw2/kw2_family/boardEnv/mvBoardEnvLib.c b/arch/arm/mach-feroceon-kw2/kw2_family/boardEnv/mvBoardEnvLib.c
index 9803da1..8774fcc 100755
--- a/arch/arm/mach-feroceon-kw2/kw2_family/boardEnv/mvBoardEnvLib.c
+++ b/arch/arm/mach-feroceon-kw2/kw2_family/boardEnv/mvBoardEnvLib.c
@@ -160,7 +160,7 @@
 	MV_REG_WRITE(GPP_DATA_OUT_REG(1), BOARD_INFO(boardId)->gppOutValMid);
 	if (boardId != DB_88F6601_BP_ID && boardId != RD_88F6601_MC_ID &&
 	   boardId != RD_88F6601_MC2L_ID &&
-	   boardId != GFLT200_ID && boardId != GFLT110_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 */
@@ -168,7 +168,7 @@
 	mvGppPolaritySet(1, 0xFFFFFFFF, BOARD_INFO(boardId)->gppPolarityValMid);
 	if (boardId != DB_88F6601_BP_ID && boardId != RD_88F6601_MC_ID &&
 	   boardId != RD_88F6601_MC2L_ID &&
-	   boardId != GFLT200_ID && boardId != GFLT110_ID)
+	   boardId != GFLT300_ID && boardId != GFLT200_ID && boardId != GFLT110_ID)
 		mvGppPolaritySet(2, 0xFFFFFFFF, BOARD_INFO(boardId)->gppPolarityValHigh);
 
 	/* Set GPP Out Enable */
@@ -176,7 +176,7 @@
 	mvGppTypeSet(1, 0xFFFFFFFF, BOARD_INFO(boardId)->gppOutEnValMid);
 	if (boardId != DB_88F6601_BP_ID && boardId != RD_88F6601_MC_ID &&
 	    boardId != RD_88F6601_MC2L_ID &&
-	    boardId != GFLT200_ID && boardId != GFLT110_ID)
+	    boardId != GFLT300_ID && boardId != GFLT200_ID && boardId != GFLT110_ID)
 		mvGppTypeSet(2, 0xFFFFFFFF, BOARD_INFO(boardId)->gppOutEnValHigh);
 }
 
@@ -355,7 +355,7 @@
 		return MV_FALSE;
 	}
 	if (boardId == RD_88F6601_MC_ID || boardId == RD_88F6601_MC2L_ID ||
-	    GFLT200_ID == boardId || GFLT110_ID == boardId)
+	    GFLT300_ID == boardId || GFLT200_ID == boardId || GFLT110_ID == boardId)
 		return MV_FALSE;
 
 	if ((ethPortNum > 0) || (ethCompOpt & ESC_OPT_SGMII_2_SW_P1))
@@ -655,7 +655,7 @@
 	}
 	if (boardId == RD_88F6601_MC_ID || boardId == RD_88F6601_MC2L_ID ||
 	    boardId == DB_88F6601_BP_ID ||
-            GFLT200_ID == boardId || GFLT110_ID == boardId)
+            GFLT300_ID == boardId || GFLT200_ID == boardId || GFLT110_ID == boardId)
 		return 0;
 
 
@@ -1255,7 +1255,7 @@
 	tmpTClkRate = MV_REG_READ(MPP_SAMPLE_AT_RESET(0));
 	if (boardId == RD_88F6601_MC_ID || boardId == RD_88F6601_MC2L_ID ||
 	    boardId == DB_88F6601_BP_ID ||
-	    GFLT200_ID == boardId || GFLT110_ID == boardId) {
+	    GFLT300_ID == boardId || GFLT200_ID == boardId || GFLT110_ID == boardId) {
 		tmpTClkRate &= MSAR_TCLCK_6601_MASK;
 		if (tmpTClkRate)
 			return MV_BOARD_TCLK_200MHZ;
@@ -1312,7 +1312,7 @@
 	i = 0;
 	if (boardId == RD_88F6601_MC_ID || boardId == RD_88F6601_MC2L_ID ||
 	    boardId == DB_88F6601_BP_ID ||
-	    GFLT200_ID == boardId || GFLT110_ID == boardId) {
+	    GFLT300_ID == boardId || GFLT200_ID == boardId || GFLT110_ID == boardId) {
 		while (cpuDdrTbl6601[i].satrValue != -1) {
 			if (cpuDdrTbl6601[i].satrValue == clockSatr) {
 				res = i;
@@ -1722,7 +1722,7 @@
 
 	if (boardId != DB_88F6601_BP_ID && boardId != RD_88F6601_MC_ID &&
 	    boardId != RD_88F6601_MC2L_ID &&
-	    boardId != GFLT200_ID && boardId != GFLT110_ID) {
+	    boardId != GFLT300_ID && boardId != GFLT200_ID && boardId != GFLT110_ID) {
 		/* KW2 only */
 		/* Update link speed for MAC0 / 1 */
 		/* If MAC 0 is connected to switch, then set to speed 1000Mbps */
@@ -2354,7 +2354,7 @@
 		return MV_FALSE;
 	}
 	if (boardId == RD_88F6601_MC_ID || boardId == RD_88F6601_MC2L_ID ||
-	    GFLT200_ID == boardId || GFLT110_ID == boardId) {
+	    GFLT300_ID == boardId || GFLT200_ID == boardId || GFLT110_ID == boardId) {
 		if (ethPortNum == 0)
 			return MV_TRUE;
 		return MV_FALSE;
@@ -2764,6 +2764,7 @@
 		tmpBoardId = GFLT200_ID;
 #elif defined(GFLT110)
 		tmpBoardId = GFLT110_ID;
+#error " gBoardId is first set in mach-feroceon-kw2/core.c parse_tag_mv_uboot()"
 #endif
 		gBoardId = tmpBoardId;
 	}
diff --git a/arch/arm/mach-feroceon-kw2/kw2_family/boardEnv/mvBoardEnvSpec.c b/arch/arm/mach-feroceon-kw2/kw2_family/boardEnv/mvBoardEnvSpec.c
index dc7e9e3..209268c 100755
--- a/arch/arm/mach-feroceon-kw2/kw2_family/boardEnv/mvBoardEnvSpec.c
+++ b/arch/arm/mach-feroceon-kw2/kw2_family/boardEnv/mvBoardEnvSpec.c
@@ -1502,18 +1502,6 @@
 	{BOARD_GPP_PON_XVR_TX_IND, 24},
 };
 
-/* TODO(cgibson): For GFLT200, these are set to:
-     {BOARD_GPP_PON_XVR_TX, 21, 1},
-     {BOARD_GPP_PON_XVR_TX_POWER, 37, 0},
-   Which is correct?
-*/
-MV_BOARD_GPP_INFO gflt300InfoBoardGppInfo[] = {
-	/* {{MV_BOARD_GPP_CLASS devClass, MV_U8 gppPinNum}} */
-	{BOARD_GPP_PON_XVR_TX, 17},
-	{BOARD_GPP_PON_XVR_TX_POWER, 11},
-	{BOARD_GPP_PON_XVR_TX_IND, 24},
-};
-
 MV_DEV_CS_INFO gflt110InfoBoardDeCsInfo[] = {
 	/*{deviceCS, params, devType, devWidth} */
 #ifdef MV_SPI
@@ -1535,44 +1523,13 @@
 	 }
 };
 
-MV_BOARD_MPP_INFO gflt300InfoBoardMppConfigValue[] = {
-	{{
-	  GFLT300_MPP0_7,
-	  GFLT300_MPP8_15,
-	  GFLT300_MPP16_23,
-	  GFLT300_MPP24_31,
-	  GFLT300_MPP32_37
-	  }
-	 }
-};
-
-static MV_VOID gfltBoardInit(MV_BOARD_INFO *pBoardInfo)
-{
-	if (is_gflt300() == 1) {
-		pBoardInfo->numBoardGppInfo = MV_ARRAY_SIZE(
-				gflt300InfoBoardGppInfo);
-		pBoardInfo->pBoardGppInfo = gflt300InfoBoardGppInfo;
-		pBoardInfo->numBoardMppConfigValue = MV_ARRAY_SIZE(
-				gflt300InfoBoardMppConfigValue);
-		pBoardInfo->pBoardMppConfigValue =
-				gflt300InfoBoardMppConfigValue;
-		pBoardInfo->gppOutEnValLow = GFLT300_GPP_OUT_ENA_LOW;
-	} else {
-		pBoardInfo->numBoardGppInfo = MV_ARRAY_SIZE(
-				gflt110InfoBoardGppInfo);
-		pBoardInfo->pBoardGppInfo = gflt110InfoBoardGppInfo;
-		pBoardInfo->numBoardMppConfigValue = MV_ARRAY_SIZE(
-				gflt110InfoBoardMppConfigValue);
-		pBoardInfo->pBoardMppConfigValue =
-				gflt110InfoBoardMppConfigValue;
-		pBoardInfo->gppOutEnValLow = GFLT110_GPP_OUT_ENA_LOW;
-	}
-}
 
 MV_BOARD_INFO gflt110Info = {
 	.boardName = "GFLT110",
-	.pBoardInit = gfltBoardInit,
+	.pBoardInit = NULL,
 	.pBoardMppTypeValue = gflt110InfoBoardMppTypeInfo,
+	.pBoardMppConfigValue = gflt110InfoBoardMppConfigValue,
+	.numBoardMppConfigValue = MV_ARRAY_SIZE(gflt110InfoBoardMppConfigValue),
 	.intsGppMaskLow = 0,
 	.intsGppMaskMid = 0,
 	.intsGppMaskHigh = 0,
@@ -1582,11 +1539,14 @@
 	.pBoardTwsiDev = gflt110InfoBoardTwsiDev,
 	.numBoardMacInfo = MV_ARRAY_SIZE(gflt110InfoBoardMacInfo),
 	.pBoardMacInfo = gflt110InfoBoardMacInfo,
+	.numBoardGppInfo = MV_ARRAY_SIZE(gflt110InfoBoardGppInfo),
+	.pBoardGppInfo = gflt110InfoBoardGppInfo,
 	.activeLedsNumber = 0,
 	.pLedGppPin = NULL,
 	.ledsPolarity = 0,
 
 	/* GPP values */
+	.gppOutEnValLow = GFLT110_GPP_OUT_ENA_LOW,
 	.gppOutEnValMid = GFLT110_GPP_OUT_ENA_MID,
 	.gppOutEnValHigh = 0,
 	.gppOutValLow = GFLT110_GPP_OUT_VAL_LOW,
@@ -1630,6 +1590,145 @@
 	.moduleAutoDetect = MV_FALSE
 };
 
+
+/***************************************************************************
+** GFLT300
+****************************************************************************/
+
+MV_BOARD_TWSI_INFO gflt300InfoBoardTwsiDev[] = {
+	/* {{MV_BOARD_DEV_CLASS devClass, MV_U8 twsiDevAddr, MV_U8 twsiDevAddrType}} */
+};
+
+MV_BOARD_MAC_INFO gflt300InfoBoardMacInfo[] = {
+	/* {{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 gflt300InfoBoardMppTypeInfo[] = {
+	{
+		.boardMppTdm = MV_BOARD_AUTO,
+		.ethSataComplexOpt = ESC_OPT_GEPHY_MAC0,
+		.ethPortsMode = 0x0
+	}
+};
+
+MV_BOARD_GPP_INFO gflt300InfoBoardGppInfo[] = {
+	/* {{MV_BOARD_GPP_CLASS devClass, MV_U8 gppPinNum}} */
+
+	{BOARD_GPP_SYS_LED,  9 , 1},
+	{BOARD_GPP_SYS_LED, 10 , 1},
+};
+
+
+MV_DEV_CS_INFO gflt300InfoBoardDeCsInfo[] = {
+	/*{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 gflt300InfoBoardMppConfigValue[] = {
+	{{
+	  GFLT300_MPP0_7,
+	  GFLT300_MPP8_15,
+	  GFLT300_MPP16_23,
+	  GFLT300_MPP24_31,
+	  GFLT300_MPP32_37
+	  }
+	 }
+};
+
+#if 0
+static MV_VOID gflt300BoardEgigaPhyInit(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);
+}
+
+#endif
+
+MV_BOARD_INFO gflt300Info = {
+	.boardName = "GFLT300",
+	.pBoardInit = NULL,
+	//.pBoardEgigaPhyInit = gflt300BoardEgigaPhyInit,
+	.numBoardMppTypeValue = MV_ARRAY_SIZE(gflt300InfoBoardMppTypeInfo),
+	.pBoardMppTypeValue = gflt300InfoBoardMppTypeInfo,
+	.numBoardMppConfigValue = MV_ARRAY_SIZE(gflt300InfoBoardMppConfigValue),
+	.pBoardMppConfigValue = gflt300InfoBoardMppConfigValue,
+	.intsGppMaskLow = 0,
+	.intsGppMaskMid = 0,
+	.intsGppMaskHigh = 0,
+	.numBoardDeviceIf = MV_ARRAY_SIZE(gflt300InfoBoardDeCsInfo),
+	.pDevCsInfo = gflt300InfoBoardDeCsInfo,
+	.numBoardTwsiDev = MV_ARRAY_SIZE(gflt300InfoBoardTwsiDev),
+	.pBoardTwsiDev = gflt300InfoBoardTwsiDev,
+	.numBoardMacInfo = MV_ARRAY_SIZE(gflt300InfoBoardMacInfo),
+	.pBoardMacInfo = gflt300InfoBoardMacInfo,
+	.numBoardGppInfo = MV_ARRAY_SIZE(gflt300InfoBoardGppInfo),
+	.pBoardGppInfo = gflt300InfoBoardGppInfo,
+	.activeLedsNumber = 0,
+	.pLedGppPin = NULL,
+	.ledsPolarity = 0,
+
+	/* GPP values */
+	.gppOutEnValLow = GFLT300_GPP_OUT_ENA_LOW,
+	.gppOutEnValMid = GFLT300_GPP_OUT_ENA_MID,
+	.gppOutEnValHigh = 0,
+	.gppOutValLow = GFLT300_GPP_OUT_VAL_LOW,
+	.gppOutValMid = GFLT300_GPP_OUT_VAL_MID,
+	.gppOutValHigh = 0,
+	.gppPolarityValLow = GFLT300_GPP_POL_LOW,
+	.gppPolarityValMid = GFLT300_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,			/* gflt300BoardSpecInit, */
+
+	.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,
@@ -1641,4 +1740,5 @@
 	&gflt200Info,
 	&gflt110Info,
 	&rd88f6601MC2LInfo,
+	&gflt300Info,
 };
diff --git a/arch/arm/mach-feroceon-kw2/kw2_family/boardEnv/mvBoardEnvSpec.h b/arch/arm/mach-feroceon-kw2/kw2_family/boardEnv/mvBoardEnvSpec.h
index 64a804b..8dd507d 100755
--- a/arch/arm/mach-feroceon-kw2/kw2_family/boardEnv/mvBoardEnvSpec.h
+++ b/arch/arm/mach-feroceon-kw2/kw2_family/boardEnv/mvBoardEnvSpec.h
@@ -115,7 +115,8 @@
 #define GFLT200_ID			DB_CUSTOMER_ID
 #define GFLT110_ID			(BOARD_ID_BASE+0x8)
 #define RD_88F6601_MC2L_ID		(BOARD_ID_BASE+0x9)
-#define MV_MAX_BOARD_ID			(DB_CUSTOMER_ID + 3)
+#define GFLT300_ID			(BOARD_ID_BASE+0xA)
+#define MV_MAX_BOARD_ID			(DB_CUSTOMER_ID + 4)
 // These are Marvells defines, we should switch to match these in
 // uboot to make future merges easier.
 //#define DB_CUSTOMER_ID			(BOARD_ID_BASE+0x8)
@@ -538,7 +539,7 @@
 #define GFLT200_EVT2_GPP_POL_MID	0x0
 
 /***************************************************************************
-** GFLT110 & GFLT300
+** GFLT110
 ****************************************************************************/
 #define GFLT110_MPP0_7			0x22222220
 #define GFLT110_MPP8_15			0x00000002
@@ -546,12 +547,6 @@
 #define GFLT110_MPP24_31		0x00200550
 #define GFLT110_MPP32_37		0x00000000
 
-/* GFLT300 */
-#define GFLT300_MPP0_7			0x22222220
-#define GFLT300_MPP8_15			0x00000002
-#define GFLT300_MPP16_23		0x00000000
-#define GFLT300_MPP24_31		0x40200504
-#define GFLT300_MPP32_37		0x00000004
 
 /* GPPs
  1 SPI0_MOSI (out)
@@ -585,8 +580,31 @@
 #define GFLT110_GPP_POL_LOW		(BIT23)
 #define GFLT110_GPP_POL_MID		0x0
 
-/* GFLT300 */
-#define GFLT300_GPP_OUT_ENA_LOW	(BIT0 | BIT14 | BIT16 | BIT17 | BIT19 | BIT22 | BIT23 | BIT24 | BIT27| BIT30 | BIT31)
+/***************************************************************************
+** GFLT300
+****************************************************************************/
+/*spreadheet on GPIO settings:
+    https://goto.google.com/gflt300-gpio-config
+*/
+
+#define GFLT300_MPP0_7          0x22222220
+#define GFLT300_MPP8_15         0x05000002
+#define GFLT300_MPP16_23        0x00000000
+#define GFLT300_MPP24_31        0x40004544
+#define GFLT300_MPP32_37        0x00000004
+
+
+// default all ones-inputs, invert for outputs
+#define GFLT300_GPP_OUT_ENA_LOW	(~(BIT9 | BIT10 | BIT21))
+#define GFLT300_GPP_OUT_ENA_MID	(~(BIT4))
+
+// BIT09 turns the LED blue.
+// BIT10 turns the LED red.
+#define GFLT300_GPP_OUT_VAL_LOW	(BIT9)
+#define GFLT300_GPP_OUT_VAL_MID	(BIT4)
+
+#define GFLT300_GPP_POL_LOW	0x0
+#define GFLT300_GPP_POL_MID	0x0
 
 /***************************************************************************
 ** RD-88F6601MC2L
diff --git a/arch/arm/mach-feroceon-kw2/kw2_family/cpu/mvCpu.c b/arch/arm/mach-feroceon-kw2/kw2_family/cpu/mvCpu.c
index b20b1cb..1508074 100755
--- a/arch/arm/mach-feroceon-kw2/kw2_family/cpu/mvCpu.c
+++ b/arch/arm/mach-feroceon-kw2/kw2_family/cpu/mvCpu.c
@@ -113,7 +113,7 @@
 	i = 0;
 	if (boardId == RD_88F6601_MC_ID || boardId == RD_88F6601_MC2L_ID ||
 	    boardId == DB_88F6601_BP_ID ||
-	    GFLT200_ID == boardId || GFLT110_ID == boardId) {
+	    GFLT300_ID == boardId || GFLT200_ID == boardId || GFLT110_ID == boardId) {
 		while (cpuDdrTbl6601[i].satrValue != -1) {
 			if (cpuDdrTbl6601[i].satrValue == clockSatr) {
 				res = i;
@@ -163,7 +163,7 @@
 	else {
 		if (boardId == RD_88F6601_MC_ID || boardId == RD_88F6601_MC2L_ID ||
 		    boardId == DB_88F6601_BP_ID ||
-			(GFLT200_ID == boardId) || (GFLT110_ID == boardId))
+		    (GFLT300_ID == boardId) || (GFLT200_ID == boardId) || (GFLT110_ID == boardId))
 			return cpuDdrTbl6601[idx].cpuClk;
 		else
 			return cpuDdrL2Tbl[idx].cpuClk;
@@ -198,7 +198,7 @@
 	else {
 		if (boardId == RD_88F6601_MC_ID || boardId == RD_88F6601_MC2L_ID ||
 		    boardId == RD_88F6601_MC_ID ||
-			(GFLT200_ID == boardId) || (GFLT110_ID == boardId))
+			(GFLT300_ID == boardId) || (GFLT200_ID == boardId) || (GFLT110_ID == boardId))
 			return cpuDdrTbl6601[idx].l2Clk;
 		else
 			return cpuDdrL2Tbl[idx].l2Clk;
@@ -226,7 +226,7 @@
 
 	if (id == RD_88F6510_SFU_ID || id == DB_88F6601_BP_ID ||
 	    id == RD_88F6601_MC_ID || id == RD_88F6601_MC2L_ID ||
-	    GFLT200_ID == id || id == GFLT110_ID)
+	    GFLT300_ID == id || GFLT200_ID == id || id == GFLT110_ID)
 		return MV_FALSE;
 
 	/* Read S@R register value */
diff --git a/arch/arm/mach-feroceon-kw2/sysmap.c b/arch/arm/mach-feroceon-kw2/sysmap.c
index 3224c2b..88fa6c4 100755
--- a/arch/arm/mach-feroceon-kw2/sysmap.c
+++ b/arch/arm/mach-feroceon-kw2/sysmap.c
@@ -224,6 +224,7 @@
 		case DB_88F6601_BP_ID:
 		case RD_88F6601_MC_ID:
 		case RD_88F6601_MC2L_ID:
+		case GFLT300_ID:
 		case GFLT200_ID:
 		case GFLT110_ID:
 			return SYSMAP_88F6601;
diff --git a/arch/arm/plat-feroceon/mv_drivers_lsp/mv_tpm/core/tpm_init.c b/arch/arm/plat-feroceon/mv_drivers_lsp/mv_tpm/core/tpm_init.c
index b47d2af..9e4d381 100644
--- a/arch/arm/plat-feroceon/mv_drivers_lsp/mv_tpm/core/tpm_init.c
+++ b/arch/arm/plat-feroceon/mv_drivers_lsp/mv_tpm/core/tpm_init.c
@@ -687,7 +687,7 @@
 		if (DB_88F6601_BP_ID == mvBoardIdGet())
 			profile[0] = ESC_OPT_SGMII | ESC_OPT_GEPHY_MAC0 | ESC_OPT_LP_SERDES_FE_GE_PHY;
 		if ((RD_88F6601_MC_ID == mvBoardIdGet())
-			|| (GFLT200_ID == mvBoardIdGet()) || (GFLT110_ID == mvBoardIdGet()))
+			|| (GFLT300_ID == mvBoardIdGet()) || (GFLT200_ID == mvBoardIdGet()) || (GFLT110_ID == mvBoardIdGet()))
 			profile[0] = ESC_OPT_GEPHY_MAC0;
 		break;
 	case TPM_PON_WAN_G0_G1_DUAL_LAN: