Merge "Marvell: MHSLPONLGCY-166 l2fwserver doesn't work on AvantaMC when working in GMAC's bridge mode"
diff --git a/arch/arm/mach-feroceon-kw2/core.c b/arch/arm/mach-feroceon-kw2/core.c
index 613d635..4c761d7 100755
--- a/arch/arm/mach-feroceon-kw2/core.c
+++ b/arch/arm/mach-feroceon-kw2/core.c
@@ -157,7 +157,8 @@
 
 	gBoardId =  (mvUbootVer & 0xff);
 #ifdef CONFIG_MACH_GFLT110
-	if ((gBoardId != GFLT110_ID) && (gBoardId != GFLT300_ID)) {
+	if ((gBoardId != GFLT110_ID) && (gBoardId != GFLT300_ID) &&
+	    (gBoardId != GFLT400_ID)) {
 		printk("Unknown boardId from uboot: %x: Defaulting to GFLT110.\n", gBoardId);
 		gBoardId = GFLT110_ID;
 	}
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 7a9c1ee..bd55fb0 100755
--- a/arch/arm/mach-feroceon-kw2/kw2_family/boardEnv/mvBoardEnvSpec.c
+++ b/arch/arm/mach-feroceon-kw2/kw2_family/boardEnv/mvBoardEnvSpec.c
@@ -1995,8 +1995,8 @@
 	&rd88f6601Info,
 	&gflt200Info,
 	&gflt110Info,
-	&rd88f6601MC2LInfo,
-	&rd88f6601SFPInfo,
+	&rd88f6601MC2LInfo, /* disabled (NULL) in uboot */
 	&gflt300Info,
 	&gflt400Info,
+	&rd88f6601SFPInfo /* not present in uboot, moved to back of list */
 };
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 436f6ae..2cdda78 100755
--- a/arch/arm/mach-feroceon-kw2/kw2_family/boardEnv/mvBoardEnvSpec.h
+++ b/arch/arm/mach-feroceon-kw2/kw2_family/boardEnv/mvBoardEnvSpec.h
@@ -115,9 +115,15 @@
 #define GFLT200_ID			DB_CUSTOMER_ID
 #define GFLT110_ID			(BOARD_ID_BASE+0x8)
 #define RD_88F6601_MC2L_ID		(BOARD_ID_BASE+0x9)
-#define RD_88F6601_SFP_ID		(BOARD_ID_BASE+0xA)
-#define GFLT300_ID			(BOARD_ID_BASE+0xB)
-#define GFLT400_ID			(BOARD_ID_BASE+0xC)
+#define GFLT300_ID			(BOARD_ID_BASE+0xA)
+#define GFLT400_ID			(BOARD_ID_BASE+0xB)
+// When Marvell upgraded their SDK from RC32 -> thunderbolt_v1, they added a
+// new ID. We did not upgrade the uboot half of our SDK. This means the IDs are
+// out of sync. Since uboot doesn't have this ID at all, we manually move it
+// in the kernel half to the end of list so that it stays out of the way, and
+// every other boardID still lines up.
+#define RD_88F6601_SFP_ID		(BOARD_ID_BASE+0xC)
+
 #define MV_MAX_BOARD_ID			(DB_CUSTOMER_ID + 6)
 // These are Marvells defines, we should switch to match these in
 // uboot to make future merges easier.
diff --git a/arch/arm/plat-feroceon/mv_drivers_lsp/mv_cph/mv_cph_app.c b/arch/arm/plat-feroceon/mv_drivers_lsp/mv_cph/mv_cph_app.c
index c86e5ea..dbe07b3 100755
--- a/arch/arm/plat-feroceon/mv_drivers_lsp/mv_cph/mv_cph_app.c
+++ b/arch/arm/plat-feroceon/mv_drivers_lsp/mv_cph/mv_cph_app.c
@@ -1325,6 +1325,10 @@
                 skb_new = skb_old;
                 goto out;
             }
+            // Remove CRC from original message. It is not needed when forwarding to WAN interface
+            skb_old->tail -= MV_ETH_CRC_SIZE;  // Remove CRC
+            skb_old->len  -= MV_ETH_CRC_SIZE;  // Remove CRC
+
             /* If WAN interface is GMAC1, remove MH in upstream  */
             if ((profile_id == TPM_PON_G1_SGMII_WAN_G0_SINGLE_PORT) && (active_port == MV_APP_GMAC_PORT_1))
             {