Update to SDK_2.7.25-RC24

      rm -rf *
      cp -prf ~/marvel/kernel.rc24/* .
      git add -Af .
      git commit

Change-Id: Ie46d551d08dce04555dc59178f848ea10db51b2e
diff --git a/arch/arm/mach-feroceon-kw2/include/mach/system.h b/arch/arm/mach-feroceon-kw2/include/mach/system.h
index 393cf1b..527509b 100644
--- a/arch/arm/mach-feroceon-kw2/include/mach/system.h
+++ b/arch/arm/mach-feroceon-kw2/include/mach/system.h
@@ -31,7 +31,7 @@
 	cpu_do_idle();
 }
 
-#define UPON_SDK_VERSION "uPON_2.7.25_RC22"
+#define UPON_SDK_VERSION "uPON_2.7.25_RC24"
 
 #ifdef __BIG_ENDIAN
 #define MV_ARM_32BIT_LE(X) ((((X)&0xff)<<24) |                       \
diff --git a/arch/arm/plat-feroceon/mv_drivers_lsp/mv_cph/mv_cph_flow.c b/arch/arm/plat-feroceon/mv_drivers_lsp/mv_cph/mv_cph_flow.c
old mode 100755
new mode 100644
index 7014319..edc1598
--- a/arch/arm/plat-feroceon/mv_drivers_lsp/mv_cph/mv_cph_flow.c
+++ b/arch/arm/plat-feroceon/mv_drivers_lsp/mv_cph/mv_cph_flow.c
@@ -1298,8 +1298,10 @@
         p_field += MV_IPV4_PROTO_OFFSET;
         proto = *(UINT8 *)p_field;
 
-        if (IPPROTO_IGMP == proto)
+        if (IPPROTO_IGMP == proto) {
             flow->parse_bm |= CPH_FLOW_PARSE_MC_PROTO;
+            flow->ip_type   = IPPROTO_IGMP;
+	}
     }
     else if (MV_CPH_ETH_TYPE_IPV6 == flow->eth_type) {
         p_ipv6_hdr = (struct ipv6hdr *)(p_field + MV_CPH_ETH_TYPE_LEN);
@@ -1316,6 +1318,7 @@
                     case ICMPV6_MGM_REDUCTION:
                     case ICMPV6_MLD2_REPORT:
                         flow->parse_bm |= CPH_FLOW_PARSE_MC_PROTO;
+			flow->ip_type = IPPROTO_ICMPV6;
                         break;
                     default:
                         break;
@@ -1401,6 +1404,12 @@
             return FALSE;
     }
 
+    if (db_rule->parse_bm & CPH_FLOW_PARSE_MC_PROTO)
+    {
+        if (parse_rule->ip_type != db_rule->ip_type)
+            return FALSE;
+    }
+
     return TRUE;
 }
 
@@ -1434,6 +1443,11 @@
             return FALSE;
     }
 
+	if (packet_rule->parse_bm & CPH_FLOW_PARSE_MC_PROTO) {
+		if ((db_rule->ip_type != MV_CPH_IP_TYPE_ANY) && (db_rule->ip_type != packet_rule->ip_type))
+			return false;
+	}
+
     /* Check MH if needed */
     if ((db_rule->parse_bm & CPH_FLOW_PARSE_MH) &&
         (packet_rule->parse_bm & CPH_FLOW_PARSE_MH) )
@@ -1522,6 +1536,11 @@
             return FALSE;
     }
 
+	if (packet_rule->parse_bm & CPH_FLOW_PARSE_MC_PROTO) {
+		if ((db_rule->ip_type != MV_CPH_IP_TYPE_ANY) && (db_rule->ip_type != packet_rule->ip_type))
+			return false;
+	}
+
     /* Check MH if needed */
     if ((db_rule->parse_bm & CPH_FLOW_PARSE_MH) &&
         (packet_rule->parse_bm & CPH_FLOW_PARSE_MH) )
@@ -1997,7 +2016,7 @@
 
     printk(KERN_INFO "-------------------------------------------------------------------------------------------------------------------------------------------------------\n");
     printk(KERN_INFO "                                |Parse outer       |Parse inner       |Mod outer         |Mod Inner         |Forward\n");
-    printk(KERN_INFO "dir default parse_bm mh   ety    tpid   vid  pbits  tpid   vid  pbits  tpid   vid  pbits  tpid   vid  pbits  port queue hwf_queue gem  count    op_type\n");
+    printk(KERN_INFO "dir default parse_bm mh   ety    tpid   vid  pbits  tpid   vid  pbits  tpid   vid  pbits  tpid   vid  pbits  port queue hwf_queue gem  count    ip_type op_type\n");
     /* Traverse CPH flow rule tale */
     for (idx = 0, rule_idx = 0; (idx < CPH_FLOW_ENTRY_NUM) && (rule_idx < gs_flow_table.rule_num); idx++)
     {
@@ -2009,7 +2028,7 @@
             rule_idx++;
 
             printk(KERN_INFO  
-                   "%2.2s  %3.3s     0x%04x   %-4d 0x%04x 0x%04x %-4d %1d      0x%04x %-4d %1d      0x%04x %-4d %1d      0x%04x %-4d %1d      %1d    %1d     %1d         %-4d %-8d %s\n",
+                   "%2.2s  %3.3s     0x%04x   %-4d 0x%04x 0x%04x %-4d %1d      0x%04x %-4d %1d      0x%04x %-4d %1d      0x%04x %-4d %1d      %1d    %1d     %1d         %-4d %-8d %7d %s\n",
                    cph_app_lookup_dir(p_flow_rule->dir), (p_flow_rule->is_default == TRUE)? "Yes":"No ", 
                    p_flow_rule->parse_bm,             p_flow_rule->mh,                  p_flow_rule->eth_type,
                    p_flow_rule->parse_outer_tci.tpid, p_flow_rule->parse_outer_tci.vid, p_flow_rule->parse_outer_tci.pbits, 
@@ -2017,7 +2036,7 @@
                    p_flow_rule->mod_outer_tci.tpid,   p_flow_rule->mod_outer_tci.vid,   p_flow_rule->mod_outer_tci.pbits,
                    p_flow_rule->mod_inner_tci.tpid,   p_flow_rule->mod_inner_tci.vid,   p_flow_rule->mod_inner_tci.pbits,
                    p_flow_rule->pkt_frwd.trg_port,    p_flow_rule->pkt_frwd.trg_queue,  p_flow_rule->pkt_frwd.trg_hwf_queue, p_flow_rule->pkt_frwd.gem_port, 
-                   p_flow_rule->count,                cph_flow_lookup_op_type(p_flow_rule->op_type));
+                   p_flow_rule->count,                p_flow_rule->ip_type,             cph_flow_lookup_op_type(p_flow_rule->op_type));
         }
     }   
 
diff --git a/arch/arm/plat-feroceon/mv_drivers_lsp/mv_cph/mv_cph_flow.h b/arch/arm/plat-feroceon/mv_drivers_lsp/mv_cph/mv_cph_flow.h
old mode 100755
new mode 100644
index 96e9ee2..39f8a05
--- a/arch/arm/plat-feroceon/mv_drivers_lsp/mv_cph/mv_cph_flow.h
+++ b/arch/arm/plat-feroceon/mv_drivers_lsp/mv_cph/mv_cph_flow.h
@@ -101,6 +101,8 @@
 #define MV_CPH_DEFAULT_SINGLE_TAG_RULE   (4096+2)/* Default sinlge tagged  rule*/
 #define MV_CPH_DEFAULT_DOUBLE_UNTAG_RULE (4096+3)/* Default double tagged  rule*/
 
+#define MV_CPH_IP_TYPE_ANY               (0)   /* Dummy IP type, do not care IP type*/
+
 /* CPH flow mapping rule definition
 ------------------------------------------------------------------------------*/
 typedef enum
@@ -168,6 +170,7 @@
     CPH_FLOW_TCI_T     parse_outer_tci;
     CPH_FLOW_TCI_T     parse_inner_tci;
     UINT16             eth_type;
+    UINT16             ip_type;
     CPH_VLAN_OP_TYPE_E op_type;
     CPH_FLOW_TCI_T     mod_outer_tci;
     CPH_FLOW_TCI_T     mod_inner_tci;
diff --git a/arch/arm/plat-feroceon/mv_drivers_lsp/mv_cph/mv_cph_netdev.c b/arch/arm/plat-feroceon/mv_drivers_lsp/mv_cph/mv_cph_netdev.c
old mode 100755
new mode 100644
index 883620c..2049016
--- a/arch/arm/plat-feroceon/mv_drivers_lsp/mv_cph/mv_cph_netdev.c
+++ b/arch/arm/plat-feroceon/mv_drivers_lsp/mv_cph/mv_cph_netdev.c
@@ -630,6 +630,8 @@
     BOOL             l_mh;
     BOOL             state  = FALSE;
     MV_STATUS        rc     = MV_OK;
+    UINT16  		old_vid;
+    UINT8   		old_pbits;
 
     if (MV_PON_PORT_ID != port)
         return 0;
@@ -654,31 +656,46 @@
         /* Get CPH data flow rule */
         flow_rule.is_default = FALSE;
         rc = cph_flow_get_rule(&flow_rule);
-        if (rc != MV_OK)
-        {
-            /* Handle multicat packets as unicast one */
-            if (flow_rule.parse_bm & CPH_FLOW_PARSE_MC_PROTO) {
-                flow_rule.parse_bm &= ~CPH_FLOW_PARSE_MC_PROTO;
-                rc = cph_flow_get_rule_by_vid(&flow_rule);
-                if (rc != MV_OK)
-                {
-                    rc = cph_flow_get_rule(&flow_rule);
+        if (rc != MV_OK) {
+		if (flow_rule.parse_bm & CPH_FLOW_PARSE_MC_PROTO) {
+			/*search */
+			flow_rule.is_default = TRUE;
+			old_vid = flow_rule.parse_outer_tci.vid;
+			old_pbits = flow_rule.parse_outer_tci.pbits;
+			flow_rule.parse_outer_tci.vid   = MV_CPH_VID_NOT_CARE_VALUE;
+			flow_rule.parse_outer_tci.pbits = MV_CPH_PBITS_NOT_CARE_VALUE;
+			rc = cph_flow_get_rule(&flow_rule);
 
-                    if (rc != MV_OK)
-                    {
-                        flow_rule.is_default = TRUE;
-                        rc = cph_flow_get_rule(&flow_rule);
-                        if (rc != MV_OK)
-                        {
-                            MV_CPH_PRINT(CPH_DEBUG_LEVEL, "%s():fail to call cph_flow_get_rule, rc<%d> \n", __FUNCTION__, rc);
-                            return 0;
-                        }
-                    }
-                }
-            }
+			/* Handle multicat packets as unicast one */
+			if (rc != MV_OK)
+			{
+				flow_rule.parse_outer_tci.vid   = old_vid;
+				flow_rule.parse_outer_tci.pbits = old_pbits;
+				flow_rule.is_default = FALSE;
+				flow_rule.parse_bm &= ~CPH_FLOW_PARSE_MC_PROTO;
+				rc = cph_flow_get_rule_by_vid(&flow_rule);
+				if (rc != MV_OK)
+					rc = cph_flow_get_rule(&flow_rule);
+
+				if (rc != MV_OK)
+				{
+					flow_rule.is_default = TRUE;
+					flow_rule.parse_outer_tci.vid   = MV_CPH_VID_NOT_CARE_VALUE;
+					flow_rule.parse_outer_tci.pbits = MV_CPH_PBITS_NOT_CARE_VALUE;
+					rc = cph_flow_get_rule(&flow_rule);
+					if (rc != MV_OK)
+					{
+						MV_CPH_PRINT(CPH_DEBUG_LEVEL, "%s():fail to call cph_flow_get_rule, rc<%d> \n", __FUNCTION__, rc);
+						return 0;
+					}
+				}
+			}
+		}
             else {
 
-                flow_rule.is_default = TRUE;
+		flow_rule.is_default = TRUE;
+		flow_rule.parse_outer_tci.vid   = MV_CPH_VID_NOT_CARE_VALUE;
+		flow_rule.parse_outer_tci.pbits = MV_CPH_PBITS_NOT_CARE_VALUE;
                 rc = cph_flow_get_rule(&flow_rule);
                 if (rc != MV_OK)
                 {
diff --git a/arch/arm/plat-feroceon/mv_drivers_lsp/mv_tpm/plat/tpm_switch_mgr.c b/arch/arm/plat-feroceon/mv_drivers_lsp/mv_tpm/plat/tpm_switch_mgr.c
old mode 100755
new mode 100644
index 0ba9472..46cf9ca
--- a/arch/arm/plat-feroceon/mv_drivers_lsp/mv_tpm/plat/tpm_switch_mgr.c
+++ b/arch/arm/plat-feroceon/mv_drivers_lsp/mv_tpm/plat/tpm_switch_mgr.c
@@ -83,6 +83,9 @@
 
 uint32_t trace_sw_dbg_flag = 0;
 
+static tpm_swport_pm_1_t g_mc_tpm_swport_pm_1;
+static tpm_swport_pm_3_all_t g_mc_tpm_swport_pm_3;
+
 #define IF_ERROR(ret)\
     if (ret != TPM_DB_OK) {\
         printk(KERN_ERR "ERROR: (%s) call not allowed, switch not initialized\n", __FUNCTION__);\
@@ -7582,6 +7585,57 @@
             printk(KERN_ERR "ERROR: (%s:%d) tpm_sw_pm_3_from_gmac failed\n", __FUNCTION__, __LINE__);
             return ERR_GENERAL;
         }
+
+	g_mc_tpm_swport_pm_1.fcsErrors                       += tpm_swport_pm_1->fcsErrors;
+        g_mc_tpm_swport_pm_1.excessiveCollisionCounter       += tpm_swport_pm_1->excessiveCollisionCounter;
+        g_mc_tpm_swport_pm_1.lateCollisionCounter            += tpm_swport_pm_1->lateCollisionCounter;
+        g_mc_tpm_swport_pm_1.frameTooLongs                   += tpm_swport_pm_1->frameTooLongs;
+        g_mc_tpm_swport_pm_1.bufferOverflowsOnReceive        += tpm_swport_pm_1->bufferOverflowsOnReceive;
+        g_mc_tpm_swport_pm_1.bufferOverflowsOnTransmit       += tpm_swport_pm_1->bufferOverflowsOnTransmit;
+        g_mc_tpm_swport_pm_1.singleCollisionFrameCounter     += tpm_swport_pm_1->singleCollisionFrameCounter;
+        g_mc_tpm_swport_pm_1.multipleCollisionsFrameCounter  += tpm_swport_pm_1->multipleCollisionsFrameCounter;
+        g_mc_tpm_swport_pm_1.sqeCounter                      += tpm_swport_pm_1->sqeCounter;
+        g_mc_tpm_swport_pm_1.deferredTransmissionCounter     += tpm_swport_pm_1->deferredTransmissionCounter;
+        g_mc_tpm_swport_pm_1.internalMacTransmitErrorCounter += tpm_swport_pm_1->internalMacTransmitErrorCounter;
+        g_mc_tpm_swport_pm_1.carrierSenseErrorCounter        += tpm_swport_pm_1->carrierSenseErrorCounter;
+        g_mc_tpm_swport_pm_1.alignmentErrorCounter           += tpm_swport_pm_1->alignmentErrorCounter;
+        g_mc_tpm_swport_pm_1.internalMacReceiveErrorCounter  += tpm_swport_pm_1->internalMacReceiveErrorCounter;
+
+	g_mc_tpm_swport_pm_3.dropEvents		+= tpm_swport_pm_3.dropEvents;
+        g_mc_tpm_swport_pm_3.InGoodOctetsLo	+= tpm_swport_pm_3.InGoodOctetsLo;
+        g_mc_tpm_swport_pm_3.InGoodOctetsHi	+= tpm_swport_pm_3.InGoodOctetsHi;
+        g_mc_tpm_swport_pm_3.InBadOctets	+= tpm_swport_pm_3.InBadOctets;
+        g_mc_tpm_swport_pm_3.OutFCSErr		+= tpm_swport_pm_3.OutFCSErr;
+        g_mc_tpm_swport_pm_3.InUnicasts		+= tpm_swport_pm_3.InUnicasts;
+        g_mc_tpm_swport_pm_3.Deferred		+= tpm_swport_pm_3.Deferred;
+        g_mc_tpm_swport_pm_3.InBroadcasts	+= tpm_swport_pm_3.InBroadcasts;
+        g_mc_tpm_swport_pm_3.InMulticasts	+= tpm_swport_pm_3.InMulticasts;
+        g_mc_tpm_swport_pm_3.Octets64		+= tpm_swport_pm_3.Octets64;
+        g_mc_tpm_swport_pm_3.Octets127		+= tpm_swport_pm_3.Octets127;
+        g_mc_tpm_swport_pm_3.Octets255		+= tpm_swport_pm_3.Octets255;
+        g_mc_tpm_swport_pm_3.Octets511		+= tpm_swport_pm_3.Octets511;
+        g_mc_tpm_swport_pm_3.Octets1023		+= tpm_swport_pm_3.Octets1023;
+        g_mc_tpm_swport_pm_3.OctetsMax		+= tpm_swport_pm_3.OctetsMax;
+        g_mc_tpm_swport_pm_3.OutOctetsLo	+= tpm_swport_pm_3.OutOctetsLo;
+        g_mc_tpm_swport_pm_3.OutOctetsHi	+= tpm_swport_pm_3.OutOctetsHi;
+        g_mc_tpm_swport_pm_3.OutUnicasts	+= tpm_swport_pm_3.OutUnicasts;
+        g_mc_tpm_swport_pm_3.Excessive		+= tpm_swport_pm_3.Excessive;
+        g_mc_tpm_swport_pm_3.OutMulticasts	+= tpm_swport_pm_3.OutMulticasts;
+        g_mc_tpm_swport_pm_3.OutBroadcasts	+= tpm_swport_pm_3.OutBroadcasts;
+        g_mc_tpm_swport_pm_3.Single		+= tpm_swport_pm_3.Single;
+        g_mc_tpm_swport_pm_3.OutPause		+= tpm_swport_pm_3.OutPause;
+        g_mc_tpm_swport_pm_3.InPause		+= tpm_swport_pm_3.InPause;
+        g_mc_tpm_swport_pm_3.Multiple		+= tpm_swport_pm_3.Multiple;
+        g_mc_tpm_swport_pm_3.Undersize		+= tpm_swport_pm_3.Undersize;
+        g_mc_tpm_swport_pm_3.Fragments		+= tpm_swport_pm_3.Fragments;
+        g_mc_tpm_swport_pm_3.Oversize		+= tpm_swport_pm_3.Oversize;
+        g_mc_tpm_swport_pm_3.Jabber		+= tpm_swport_pm_3.Jabber;
+        g_mc_tpm_swport_pm_3.InMACRcvErr	+= tpm_swport_pm_3.InMACRcvErr;
+        g_mc_tpm_swport_pm_3.InFCSErr		+= tpm_swport_pm_3.InFCSErr;
+        g_mc_tpm_swport_pm_3.Collisions		+= tpm_swport_pm_3.Collisions;
+        g_mc_tpm_swport_pm_3.Late		+= tpm_swport_pm_3.Late;
+
+	memcpy(tpm_swport_pm_1, &g_mc_tpm_swport_pm_1, sizeof(g_mc_tpm_swport_pm_1));
     }
 
     if (trace_sw_dbg_flag)
@@ -7721,6 +7775,57 @@
             printk(KERN_ERR "ERROR: (%s:%d) tpm_sw_pm_3_from_gmac failed\n", __FUNCTION__, __LINE__);
             return ERR_GENERAL;
         }
+
+	g_mc_tpm_swport_pm_1.fcsErrors                       += tpm_swport_pm_1.fcsErrors;
+        g_mc_tpm_swport_pm_1.excessiveCollisionCounter       += tpm_swport_pm_1.excessiveCollisionCounter;
+        g_mc_tpm_swport_pm_1.lateCollisionCounter            += tpm_swport_pm_1.lateCollisionCounter;
+        g_mc_tpm_swport_pm_1.frameTooLongs                   += tpm_swport_pm_1.frameTooLongs;
+        g_mc_tpm_swport_pm_1.bufferOverflowsOnReceive        += tpm_swport_pm_1.bufferOverflowsOnReceive;
+        g_mc_tpm_swport_pm_1.bufferOverflowsOnTransmit       += tpm_swport_pm_1.bufferOverflowsOnTransmit;
+        g_mc_tpm_swport_pm_1.singleCollisionFrameCounter     += tpm_swport_pm_1.singleCollisionFrameCounter;
+        g_mc_tpm_swport_pm_1.multipleCollisionsFrameCounter  += tpm_swport_pm_1.multipleCollisionsFrameCounter;
+        g_mc_tpm_swport_pm_1.sqeCounter                      += tpm_swport_pm_1.sqeCounter;
+        g_mc_tpm_swport_pm_1.deferredTransmissionCounter     += tpm_swport_pm_1.deferredTransmissionCounter;
+        g_mc_tpm_swport_pm_1.internalMacTransmitErrorCounter += tpm_swport_pm_1.internalMacTransmitErrorCounter;
+        g_mc_tpm_swport_pm_1.carrierSenseErrorCounter        += tpm_swport_pm_1.carrierSenseErrorCounter;
+        g_mc_tpm_swport_pm_1.alignmentErrorCounter           += tpm_swport_pm_1.alignmentErrorCounter;
+        g_mc_tpm_swport_pm_1.internalMacReceiveErrorCounter  += tpm_swport_pm_1.internalMacReceiveErrorCounter;
+
+	g_mc_tpm_swport_pm_3.dropEvents		+= tpm_swport_pm_3->dropEvents;
+        g_mc_tpm_swport_pm_3.InGoodOctetsLo	+= tpm_swport_pm_3->InGoodOctetsLo;
+        g_mc_tpm_swport_pm_3.InGoodOctetsHi	+= tpm_swport_pm_3->InGoodOctetsHi;
+        g_mc_tpm_swport_pm_3.InBadOctets	+= tpm_swport_pm_3->InBadOctets;
+        g_mc_tpm_swport_pm_3.OutFCSErr		+= tpm_swport_pm_3->OutFCSErr;
+        g_mc_tpm_swport_pm_3.InUnicasts		+= tpm_swport_pm_3->InUnicasts;
+        g_mc_tpm_swport_pm_3.Deferred		+= tpm_swport_pm_3->Deferred;
+        g_mc_tpm_swport_pm_3.InBroadcasts	+= tpm_swport_pm_3->InBroadcasts;
+        g_mc_tpm_swport_pm_3.InMulticasts	+= tpm_swport_pm_3->InMulticasts;
+        g_mc_tpm_swport_pm_3.Octets64		+= tpm_swport_pm_3->Octets64;
+        g_mc_tpm_swport_pm_3.Octets127		+= tpm_swport_pm_3->Octets127;
+        g_mc_tpm_swport_pm_3.Octets255		+= tpm_swport_pm_3->Octets255;
+        g_mc_tpm_swport_pm_3.Octets511		+= tpm_swport_pm_3->Octets511;
+        g_mc_tpm_swport_pm_3.Octets1023		+= tpm_swport_pm_3->Octets1023;
+        g_mc_tpm_swport_pm_3.OctetsMax		+= tpm_swport_pm_3->OctetsMax;
+        g_mc_tpm_swport_pm_3.OutOctetsLo	+= tpm_swport_pm_3->OutOctetsLo;
+        g_mc_tpm_swport_pm_3.OutOctetsHi	+= tpm_swport_pm_3->OutOctetsHi;
+        g_mc_tpm_swport_pm_3.OutUnicasts	+= tpm_swport_pm_3->OutUnicasts;
+        g_mc_tpm_swport_pm_3.Excessive		+= tpm_swport_pm_3->Excessive;
+        g_mc_tpm_swport_pm_3.OutMulticasts	+= tpm_swport_pm_3->OutMulticasts;
+        g_mc_tpm_swport_pm_3.OutBroadcasts	+= tpm_swport_pm_3->OutBroadcasts;
+        g_mc_tpm_swport_pm_3.Single		+= tpm_swport_pm_3->Single;
+        g_mc_tpm_swport_pm_3.OutPause		+= tpm_swport_pm_3->OutPause;
+        g_mc_tpm_swport_pm_3.InPause		+= tpm_swport_pm_3->InPause;
+        g_mc_tpm_swport_pm_3.Multiple		+= tpm_swport_pm_3->Multiple;
+        g_mc_tpm_swport_pm_3.Undersize		+= tpm_swport_pm_3->Undersize;
+        g_mc_tpm_swport_pm_3.Fragments		+= tpm_swport_pm_3->Fragments;
+        g_mc_tpm_swport_pm_3.Oversize		+= tpm_swport_pm_3->Oversize;
+        g_mc_tpm_swport_pm_3.Jabber		+= tpm_swport_pm_3->Jabber;
+        g_mc_tpm_swport_pm_3.InMACRcvErr	+= tpm_swport_pm_3->InMACRcvErr;
+        g_mc_tpm_swport_pm_3.InFCSErr		+= tpm_swport_pm_3->InFCSErr;
+        g_mc_tpm_swport_pm_3.Collisions		+= tpm_swport_pm_3->Collisions;
+        g_mc_tpm_swport_pm_3.Late		+= tpm_swport_pm_3->Late;
+
+	memcpy(tpm_swport_pm_3, &g_mc_tpm_swport_pm_3, sizeof(g_mc_tpm_swport_pm_3));
     }
 
     if (trace_sw_dbg_flag)