diff --git a/arch/arm/mach-feroceon-kw2/include/mach/system.h b/arch/arm/mach-feroceon-kw2/include/mach/system.h
index 8133fe0..313c6e8 100755
--- 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.6.25_RC74"
+#define UPON_SDK_VERSION "uPON_2.6.25_RC76"
 
 #ifdef __BIG_ENDIAN
 #define MV_ARM_32BIT_LE(X) ((((X)&0xff)<<24) |                       \
diff --git a/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/core/epon/eponOnuApi.c b/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/core/epon/eponOnuApi.c
index 3fad804..9ea7d59 100755
--- a/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/core/epon/eponOnuApi.c
+++ b/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/core/epon/eponOnuApi.c
@@ -808,7 +808,7 @@
 
 MV_STATUS mvEponApi2kSupportedSet(MV_U32 pkt2kSupported)
 {
-    MV_STATUS status;
+    MV_STATUS status = 0;
     MV_U32    devId;
 
     devId = mvCtrlModelGet();
diff --git a/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/core/gpon/gponOnuAlloc.c b/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/core/gpon/gponOnuAlloc.c
index 5442fac..22c34d8 100755
--- a/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/core/gpon/gponOnuAlloc.c
+++ b/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/core/gpon/gponOnuAlloc.c
@@ -162,10 +162,10 @@
 **
 **  OUTPUTS:     MV_U32 *entry
 **
-**  RETURNS:     MV_TRUE or MV_FALSE
+**  RETURNS:     MV_OK or MV_ERROR
 **
 *******************************************************************************/
-MV_BOOL onuGponAllocIdMacAllocExistCheck(MV_U32 allocId, MV_U32 *entry, MV_U32 *tcont)
+MV_STATUS onuGponAllocIdMacAllocExistCheck(MV_U32 allocId, MV_U32 *entry, MV_U32 *tcont)
 {
 	MV_U32  iEntry;
 	MV_U32  macAllocId;
@@ -178,15 +178,50 @@
 		if ((status == MV_OK) && (macAllocId == allocId) && (valid == MV_TRUE)) {
 			*entry = iEntry;
 			*tcont = tcontNum;
-			return (MV_TRUE);
+			return (MV_OK);
 		}
 	}
 
-	return (MV_FALSE);
+	return (MV_ERROR);
 }
 
 /*******************************************************************************
 **
+**  onuGponAllocIdMacAllocCheck
+**  ____________________________________________________________________________
+**
+**  DESCRIPTION: The function checks if BW Map entry is valid and return T-Cont
+**               and Alloc Number
+**
+**  PARAMETERS:  none
+**
+**  OUTPUTS:     MV_U32 *allocId
+**      	 MV_U32 *tcont
+**
+**  RETURNS:     MV_OK or MV_ERROR
+**
+*******************************************************************************/
+MV_STATUS onuGponAllocIdMacAllocCheck(MV_U32 index, MV_U32 *allocId, MV_U32 *tcont)
+{
+	MV_U32  macAllocId;
+	MV_U32  tcontNum;
+	MV_BOOL valid;
+	MV_STATUS status;
+
+       status = mvOnuGponMacRxBwMapGet(index, &macAllocId, &valid, &tcontNum);
+       if ((status == MV_OK) && (valid == MV_TRUE))
+       {
+	       *allocId = macAllocId;
+	       *tcont   = tcontNum;
+	       return (MV_OK);
+       }
+
+       return (MV_ERROR);
+}
+
+
+/*******************************************************************************
+**
 **  onuGponAllocIdMacAllocFreeEntryGet
 **  ____________________________________________________________________________
 **
@@ -196,10 +231,10 @@
 **
 **  OUTPUTS:     MV_U32 *entry
 **
-**  RETURNS:     MV_TRUE or MV_FALSE
+**  RETURNS:     MV_OK or MV_ERROR
 **
 *******************************************************************************/
-MV_BOOL onuGponAllocIdMacAllocFreeEntryGet(MV_U32 *entry)
+MV_STATUS onuGponAllocIdMacAllocFreeEntryGet(MV_U32 *entry)
 {
 	MV_U32  iEntry;
 	MV_U32  macAllocId;
@@ -211,11 +246,11 @@
 		status = mvOnuGponMacRxBwMapGet(iEntry, &macAllocId, &valid, &tcontNum);
 		if ((status == MV_OK) && (valid == MV_FALSE)) {
 			*entry = iEntry;
-			return (MV_TRUE);
+			return (MV_OK);
 		}
 	}
 
-	return (MV_FALSE);
+	return (MV_ERROR);
 }
 
 /*******************************************************************************
@@ -237,10 +272,9 @@
 {
 	MV_STATUS status = MV_OK;
 	MV_U32    entry;
-	MV_BOOL   exist;
 
-	exist = onuGponAllocIdMacAllocFreeEntryGet(&entry);
-	if (exist == MV_FALSE)
+	status = onuGponAllocIdMacAllocFreeEntryGet(&entry);
+	if (status != MV_OK)
 		return (MV_ERROR);
 
 	status = mvOnuGponMacRxBwMapSet(entry, allocId, tcontId, MV_TRUE);
@@ -273,7 +307,6 @@
 MV_STATUS onuGponAllocIdMacConnect(MV_U32 allocId, MV_U32 tcontNum)
 {
 	MV_STATUS status;
-	MV_BOOL   exist;
 	MV_U32    entry;
 	MV_U32    tcont;
 	MV_U32    newIdleTcontEntry;
@@ -288,8 +321,8 @@
 #endif /* MV_GPON_DEBUG_PRINT */
 
 	/* validate that requested alloc-Id is configured in HW and is valid */
-	exist = onuGponAllocIdMacAllocExistCheck(allocId, &entry, &tcont);
-	if (exist != MV_TRUE) {
+	status = onuGponAllocIdMacAllocExistCheck(allocId, &entry, &tcont);
+	if (status != MV_OK) {
 		mvPonPrint(PON_PRINT_ERROR, PON_ALLOC_MODULE,
 					"ERROR: (%s:%d) onuGponAllocIdMacConnect, alloc Id(%d) entry(%d)\n",
 					__FILE_DESC__, __LINE__, allocId, entry);
@@ -301,8 +334,8 @@
 		** should be changed to another Idle T-Cont */
 
 		/* Check for a free (idle) entry in the Tcont DB table */
-		exist = onuGponDbBwTcontFreeGet(allocId, &freeTcontEntry);
-		if (exist != MV_TRUE) {
+		status = onuGponDbBwTcontFreeGet(allocId, &freeTcontEntry);
+		if (status != MV_OK) {
 #ifdef MV_GPON_DEBUG_PRINT
 			mvPonPrint(PON_PRINT_DEBUG, PON_ALLOC_MODULE,
 						"DEBUG: (%s:%d) onuGponAllocIdMacConnect, alloc Id(%d) freeTcontEntry(%d)\n",
@@ -318,8 +351,8 @@
 				onuGponDbBwIdleAllocGet(newIdleTcontEntry, &entryAllocId);
 				if (entryAllocId != PON_ONU_ALLOC_NOT_EXIST) {
 					/* Check if this idle Alloc ID exists in the HW table */
-					exist = onuGponAllocIdMacAllocExistCheck(entryAllocId, &bwMapEntry, &tcont);
-					if (exist == MV_TRUE) {
+					status = onuGponAllocIdMacAllocExistCheck(entryAllocId, &bwMapEntry, &tcont);
+					if (status == MV_OK) {
 						/* re-assign this Alloc ID to the new idle Tcont in HW */
 						status = mvOnuGponMacRxBwMapSet(bwMapEntry, entryAllocId, onuIdleAllocTcont, MV_TRUE);
 						if (status != MV_OK) {
@@ -345,19 +378,11 @@
 
 #ifdef MV_GPON_DEBUG_PRINT
 	mvPonPrint(PON_PRINT_DEBUG, PON_ALLOC_MODULE,
-              "DEBUG: (%s:%d) AllocIdMacConnect, tpm_active_tcont, Tcont(%d)\n",
-              __FILE_DESC__, __LINE__, tcontNum);
+		   "DEBUG: (%s:%d) TCONT (%d) active, Connect\n",
+		   __FILE_DESC__, __LINE__, tcontNum);
 #endif /* MV_GPON_DEBUG_PRINT */
 
-	printk("TCONT (%d) active, Connect\n", tcontNum);
-	status = onuGponWqTcontActivate(tcontNum);
-	if (status != MV_OK)
-	{
-		mvPonPrint(PON_PRINT_ERROR, PON_ALLOC_MODULE,
-			   "ERROR: (%s:%d) onuGponAllocIdMacAdd, failed to schedule T-Cont(%d) activate in WQ\n",
-			   __FILE_DESC__, __LINE__, tcontNum);
-		return (status);
-	}
+	onuGponWqTcontActivate(tcontNum);
 
 	return (status);
 }
@@ -379,7 +404,6 @@
 *******************************************************************************/
 MV_STATUS onuGponAllocIdMacReconnect(MV_U32 allocId, MV_U32 tcontNum)
 {
-	MV_BOOL   exist;
 	MV_STATUS status = MV_OK;
 	MV_U32    entry;
 	MV_U32    onuId;
@@ -393,12 +417,12 @@
 #endif /* MV_GPON_DEBUG_PRINT */
 
 	/* Get free entry */
-	exist = onuGponAllocIdMacAllocExistCheck(allocId, &entry, &tcont);
-	if (exist != MV_TRUE)
-		return (MV_ERROR);
+	status = onuGponAllocIdMacAllocExistCheck(allocId, &entry, &tcont);
+	if (status == MV_OK)
+		return(status);
 
-	exist = onuGponDbBwTcontFreeGet(allocId, &tcontFreeNum);
-	if (exist != MV_TRUE)
+	status = onuGponDbBwTcontFreeGet(allocId, &tcontFreeNum);
+	if (status != MV_OK)
 		onuIdleAllocTcont = tcontFreeNum;
 
 	/* Check if default Alloc Id */
@@ -411,15 +435,6 @@
                       __FILE_DESC__, __LINE__, tcontNum);
 #endif /* MV_GPON_DEBUG_PRINT */
 
-	       // printk("TCONT (%d) flush, Reconnect\n", tcontNum);
-	       // status = onuGponWqTcontFlush(tcontNum);
-	       // if (status != MV_OK)
-	       //{
-	       // 	mvPonPrint(PON_PRINT_ERROR, PON_ALLOC_MODULE,
-	       // 		   "ERROR: (%s:%d) onuGponAllocIdMacReconnect, failed to schedule T-Cont(%d) flush in WQ\n",
-	       // 		   __FILE_DESC__, __LINE__, tcontNum);
-	       //}
-
 		/* Set Alloc Id to T-Cont in the GMAC hardware */
 		status = mvOnuGponMacRxBwMapSet(entry, allocId, onuIdleAllocTcont, MV_TRUE);
 	}
@@ -427,6 +442,51 @@
 	return (status);
 }
 
+
+/*******************************************************************************
+**
+**  onuGponAllocIdMacReActivate
+**  ____________________________________________________________________________
+**
+**  DESCRIPTION: The function reactivate onu tcont incase the tcont is not
+**               clear and set by mng
+**
+**  PARAMETERS:  None
+**
+**  OUTPUTS:     None
+**
+**  RETURNS:     MV_OK or error
+**
+*******************************************************************************/
+MV_STATUS onuGponAllocIdMacReActivate(void)
+{
+	MV_STATUS status;
+	MV_U32    entry;
+	MV_U32	  allocId;
+	MV_U32    tcont;
+
+#ifdef MV_GPON_DEBUG_PRINT
+	mvPonPrint(PON_PRINT_DEBUG, PON_ALLOC_MODULE,
+              "DEBUG: (%s:%d) onuGponAllocIdMacReActivate\n", __FILE_DESC__, __LINE__);
+#endif /* MV_GPON_DEBUG_PRINT */
+
+	for (entry = 0; entry < ONU_GPON_MAX_NUM_OF_T_CONTS; entry++)
+	{
+		status = onuGponAllocIdMacAllocCheck(entry, &allocId, &tcont);
+		if (status == MV_OK)
+		{
+			mvPonPrint(PON_PRINT_DEBUG, PON_ALLOC_MODULE,
+				   "DEBUG: (%s:%d) TCONT (%d) active, Connect\n",
+				   __FILE_DESC__, __LINE__, tcont);
+
+			onuGponWqTcontActivate(tcont);
+		}
+	}
+
+
+	return (MV_OK);
+}
+
 /*******************************************************************************
 **
 **  onuGponAllocIdMacDisconnect
@@ -446,7 +506,6 @@
 	MV_U32  onuId;
 	MV_U32  entry;
 	MV_U32  tcont;
-	MV_BOOL exist;
 	MV_STATUS status = MV_OK;
 
 #ifdef MV_GPON_DEBUG_PRINT
@@ -456,28 +515,21 @@
 #endif /* MV_GPON_DEBUG_PRINT */
 
 	/* Check if already exist */
-	exist = onuGponAllocIdMacAllocExistCheck(allocId, &entry, &tcont);
-	if (exist == MV_FALSE)
-		return (MV_ERROR);
+	status = onuGponAllocIdMacAllocExistCheck(allocId, &entry, &tcont);
+	if (status != MV_OK)
+		return(MV_ERROR);
 
 	/* Check if default Alloc Id */
 	onuId = onuGponDbOnuIdGet();
 	if (allocId != onuId)
 	{
 #ifdef MV_GPON_DEBUG_PRINT
-	        mvPonPrint(PON_PRINT_DEBUG, PON_ALLOC_MODULE,
-                      "DEBUG: (%s:%d) tpm_deactive_tcont, Tcont(%d)\n",
-                      __FILE_DESC__, __LINE__, tcont);
+		mvPonPrint(PON_PRINT_DEBUG, PON_ALLOC_MODULE,
+			   "DEBUG: (%s:%d) TCONT (%d) flush, Disconnect\n",
+			   __FILE_DESC__, __LINE__, tcont);
 #endif /* MV_GPON_DEBUG_PRINT */
 
-		printk("TCONT (%d) flush, Disconnect\n", tcont);
-		status = onuGponWqTcontFlush(tcont);
-		if (status != MV_OK)
-		{
-			mvPonPrint(PON_PRINT_ERROR, PON_ALLOC_MODULE,
-				   "ERROR: (%s:%d) onuGponAllocIdMacDisconnect, failed to schedule T-Cont(%d) flush in WQ\n",
-				   __FILE_DESC__, __LINE__, tcont);
-		}
+		onuGponWqTcontFlush(tcont);
 
 		status = mvOnuGponMacRxBwMapSet(entry, 0, 0, MV_FALSE);
 		if (status != MV_OK)
@@ -560,7 +612,7 @@
 	/* check if Alloc-Id exist in the alloc Id DB table */
 	allocIdExist = onuGponDbBwAllocExist(allocId);
 	if (allocIdExist == MV_TRUE)
-		return (MV_OK);
+		return (MV_NO_CHANGE/*MV_OK*/);
 
 	/* set the Alloc-Id exist to the database */
 	status = onuGponDbBwAllocInsert(allocId, &entry);
@@ -714,21 +766,15 @@
 *******************************************************************************/
 MV_STATUS onuGponAllocIdFreeAllBuffers(void)
 {
-    MV_STATUS status;
+    MV_STATUS status = MV_OK;
     MV_U32    tcontNum = 0xFF;
+
 #ifdef MV_GPON_DEBUG_PRINT
     mvPonPrint(PON_PRINT_DEBUG, PON_ALLOC_MODULE,
-               "DEBUG: (%s:%d) release All T-Conts buffers, tpm_deactive_tcont\n", __FILE_DESC__, __LINE__);
+	       "DEBUG: (%s:%d) FreeAllBuffers\n", __FILE_DESC__, __LINE__);
 #endif /* MV_GPON_DEBUG_PRINT */
 
-    printk("TCONT flush, FreeAllBuffers\n");
-    status = onuGponWqTcontFlush(tcontNum);
-    if (status != MV_OK)
-    {
-            mvPonPrint(PON_PRINT_ERROR, PON_ALLOC_MODULE,
-        	       "ERROR: (%s:%d) onuGponAllocIdFreeAllBuffers, failed to schedule All T-Cont flush in WQ\n",
-        	       __FILE_DESC__, __LINE__, tcontNum);
-    }
+    onuGponWqTcontFlush(tcontNum);
 
     return(status);
 }
@@ -961,14 +1007,14 @@
 *******************************************************************************/
 MV_STATUS onuGponAllocIdTcontClearAll(void)
 {
-	MV_U32  iEntry;
-	MV_BOOL exist;
-	MV_STATUS status;
+	MV_U32    iEntry;
+	MV_BOOL   exist;
+	MV_STATUS status = MV_OK;
 	MV_U32    tcontNum = 0xFF;
 
 #ifdef MV_GPON_DEBUG_PRINT
 	mvPonPrint(PON_PRINT_DEBUG, PON_ALLOC_MODULE,
-				"DEBUG: (%s:%d) Clear All Alloc-Ids from T-TCONTs\n", __FILE_DESC__, __LINE__);
+		   "DEBUG: (%s:%d) TCONT flush, Clear All\n", __FILE_DESC__, __LINE__);
 #endif /* MV_GPON_DEBUG_PRINT */
 
 	for (iEntry = 0 ; iEntry < ONU_GPON_MAX_NUM_OF_T_CONTS ; iEntry++) {
@@ -978,15 +1024,7 @@
 			onuGponAllocIdTcontClear(iEntry);
 	}
 
-	printk("TCONT flush, Clear All\n");
-	status = onuGponWqTcontFlush(tcontNum);
-	if (status != MV_OK)
-	{
-	 	mvPonPrint(PON_PRINT_ERROR, PON_ALLOC_MODULE,
-	 		   "ERROR: (%s:%d) onuGponAllocIdTcontClearAll, failed to schedule All T-Cont flush in WQ\n",
-	 		   __FILE_DESC__, __LINE__);
-	}
-
+	onuGponWqTcontFlush(tcontNum);
 
 	return (MV_OK);
 }
diff --git a/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/core/gpon/gponOnuAlloc.h b/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/core/gpon/gponOnuAlloc.h
index 14d2f5c..5ca2db5 100755
--- a/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/core/gpon/gponOnuAlloc.h
+++ b/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/core/gpon/gponOnuAlloc.h
@@ -105,6 +105,7 @@
 MV_STATUS onuGponAllocIdDeAssignAll(void);
 MV_STATUS onuGponAllocIdFreeAllBuffers(void);
 MV_STATUS onuGponAllocIdTcontClearAll(void);
+MV_STATUS onuGponAllocIdMacReActivate(void);
 MV_U32    onuGponIdleAllocIdTcontGet(void);
 
 /* Macros
diff --git a/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/core/gpon/gponOnuDb.c b/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/core/gpon/gponOnuDb.c
index 391bc35..52c6ddc 100755
--- a/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/core/gpon/gponOnuDb.c
+++ b/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/core/gpon/gponOnuDb.c
@@ -3254,10 +3254,10 @@
 **
 **  OUTPUTS:     None
 **
-**  RETURNS:     MV_TRUE if there is a free entry, MV_FALSE otherwise
+**  RETURNS:     MV_OK if there is a free entry, MV_ERROR otherwise
 **
 *******************************************************************************/
-MV_BOOL onuGponDbBwTcontFreeGet(MV_U32 allocId, MV_U32 *tcontNum)
+MV_STATUS onuGponDbBwTcontFreeGet(MV_U32 allocId, MV_U32 *tcontNum)
 {
 	MV_BOOL exist;
 	MV_U32  dbAllocId;
@@ -3270,7 +3270,7 @@
 		onuGponDbBwTcontGet(iTcont, &exist, &dbAllocId, &dbValid);
 		if ((exist == MV_TRUE) && (dbValid == MV_FALSE)) {
 			*tcontNum = iTcont;
-			return(MV_TRUE);
+			return(MV_OK);
 		}
 
 		if (dbAllocId == allocId)
@@ -3279,7 +3279,7 @@
 
 	*tcontNum = tempTcont;
 
-	return(MV_FALSE);
+	return(MV_ERROR);
 }
 
 /*******************************************************************************
diff --git a/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/core/gpon/gponOnuDb.h b/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/core/gpon/gponOnuDb.h
index 535b6ea..59deb72 100755
--- a/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/core/gpon/gponOnuDb.h
+++ b/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/core/gpon/gponOnuDb.h
@@ -392,7 +392,7 @@
 MV_STATUS onuGponDbBwTcontClear(MV_U32 tcontNum);
 MV_STATUS onuGponDbBwTcontAlloc(MV_U32 tcontNum, MV_U32 allocId);
 MV_STATUS onuGponDbBwTcontConnectCheck(MV_U32 allocId, MV_U32 *tcontNum, MV_BOOL *valid);
-MV_BOOL   onuGponDbBwTcontFreeGet(MV_U32 allocId, MV_U32 *tcontNum);
+MV_STATUS onuGponDbBwTcontFreeGet(MV_U32 allocId, MV_U32 *tcontNum);
 
 MV_STATUS onuGponDbBwMapCntDumpSet(MV_U32 enable);
 MV_BOOL   onuGponDbBwMapCntDumpGet(void);
diff --git a/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/core/gpon/gponOnuIsr.h b/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/core/gpon/gponOnuIsr.h
index 11ee96b..49f5c92 100755
--- a/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/core/gpon/gponOnuIsr.h
+++ b/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/core/gpon/gponOnuIsr.h
@@ -113,8 +113,7 @@
                                                
 #define ON_GPON_MAX_ALARMS                      (3)
 
-#define ONU_GPON_INT_ALARMS                     (ONU_GPON_LOF_ALARM_MASK |\
-                                                 ONU_GPON_LCDG_ALARM_MASK)
+#define ONU_GPON_INT_ALARMS                     (ONU_GPON_LOF_ALARM_MASK)
 
 #define ONU_GPON_PARITY_ERROR                   (ONU_GPON_RAM_TEST_GRX_PARITY_ERR_MASK  |\
                                                  ONU_GPON_RAM_TEST_GEM_PARITY_ERR_MASK  |\
diff --git a/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/core/gpon/gponOnuMngr.c b/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/core/gpon/gponOnuMngr.c
index 139e964..ec1957c 100755
--- a/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/core/gpon/gponOnuMngr.c
+++ b/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/core/gpon/gponOnuMngr.c
@@ -364,7 +364,7 @@
   MV_U32          onuState;
   GPONFUNCPTR     ptrFunc;
   S_OnuGponGenTbl *onuGponGenTbl_p = &(onuGponDb_s.onuGponGenTbl_s);
-  MV_U32          *msgData_p = msgData;
+  MV_U32          *msgData_p = (MV_U32*)msgData;
 
   /* get onu Id */
   appOnuId = onuGponDbOnuIdGet();
@@ -388,11 +388,11 @@
       }
       else
       {
+	onuGponSyncLog(ONU_GPON_LOG_MSG, onuId, msgId, 0);
+	onuGponSyncLog(ONU_GPON_LOG_MSG_CONTENT, *(msgData_p), *(msgData_p + 1), *(msgData_p + 2));
         (*ptrFunc)(onuId, msgId, msgData);
       }           
 
-      onuGponSyncLog(ONU_GPON_LOG_MSG, onuId, msgId, 0);
-      onuGponSyncLog(ONU_GPON_LOG_MSG_CONTENT, *(msgData_p), *(msgData_p + 1), *(msgData_p + 2));
     }
     /* handle invalid messages */
     else
diff --git a/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/core/gpon/gponOnuMngrStateMachine.c b/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/core/gpon/gponOnuMngrStateMachine.c
index f645b34..2686826 100755
--- a/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/core/gpon/gponOnuMngrStateMachine.c
+++ b/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/core/gpon/gponOnuMngrStateMachine.c
@@ -84,6 +84,12 @@
 ------------------------------------------------------------------------------*/
 #define __FILE_DESC__ "mv_pon/core/gpon/gponOnuStateMachine.c"
 
+#define INDICATION_BIT_MAP_NONE                 (0x00000000)
+#define INDICATION_BIT_MAP_FIBER_EVENT          (0x00000001)
+#define INDICATION_BIT_MAP_FORCE_TCONT_CLEAR    (0x00000002)
+#define INDICATION_BIT_MAP_FORCE_TCONT_RECONFIG (0x00000004)
+#define INDICATION_BIT_MAP_RESERVED             (0x00000008)
+
 /* Global Variables
 ------------------------------------------------------------------------------*/
 extern spinlock_t onuPonIrqLock;
@@ -101,9 +107,9 @@
 /* Local Functions
 ------------------------------------------------------------------------------*/
 MV_STATUS onuGponPonMngrUpdateState(MV_U32 newState);
-MV_STATUS onuGponPonMngClearOnuInfo(void);
-MV_STATUS onuGponPonMngClearOnuBuffers(void);
-MV_STATUS onuGponPonMngClearOnuTconts(void);
+MV_STATUS onuGponPonMngClearOnuInfo(MV_U32 indicationBitMap);
+MV_STATUS onuGponPonMngClearOnuTconts(MV_U32 indicationBitMap);
+MV_STATUS onuGponPonMngClearOnuBuffers(MV_U32 indicationBitMap);
 MV_STATUS onuGponPonMngClearOnuPorts(void);
 MV_STATUS onuGponPonMngClearOnuId(void);
 MV_STATUS onuGponPonMngClearOnuDelay(void);
@@ -247,9 +253,9 @@
 **  RETURNS:     MV_OK or error
 **
 *******************************************************************************/
-MV_STATUS onuGponPonMngClearOnuBuffers(void)
+MV_STATUS onuGponPonMngClearOnuBuffers(MV_U32 indicationBitMap)
 {
-   MV_STATUS rcode;
+   MV_STATUS rcode = MV_OK;
 
    rcode = onuGponAllocIdFreeAllBuffers();
    if (rcode != MV_OK)
@@ -258,6 +264,19 @@
    	     "ERROR: (%s:%d) onuGponPonMngClearOnuBuffers\n", __FILE_DESC__, __LINE__);
    }
 
+
+   if ((onuGponDbTcontResetGet() != MV_TRUE) &&
+       (indicationBitMap & INDICATION_BIT_MAP_FIBER_EVENT))
+   {
+	 rcode = onuGponAllocIdMacReActivate();
+	 if (rcode != MV_OK)
+	 {
+	   mvPonPrint(PON_PRINT_ERROR, PON_SM_MODULE,
+		      "ERROR: (%s:%d) onuGponPonMngClearOnuTconts\n", __FILE_DESC__, __LINE__);
+	   return(rcode);
+	 }
+   }
+
    return(MV_OK);
 }
 
@@ -276,7 +295,7 @@
 **  RETURNS:     MV_OK or error
 **
 *******************************************************************************/
-MV_STATUS onuGponPonMngClearOnuInfo(void)
+MV_STATUS onuGponPonMngClearOnuInfo(MV_U32 indicationBitMap)
 {
   MV_STATUS rcode;
 
@@ -284,29 +303,32 @@
   if (rcode != MV_OK)
   {
     mvPonPrint(PON_PRINT_ERROR, PON_SM_MODULE,
-               "ERROR: (%s:%d) onuGponPonMngClearOnuPorts\n", __FILE_DESC__, __LINE__);    return(rcode);
+               "ERROR: (%s:%d) onuGponPonMngClearOnuPorts\n", __FILE_DESC__, __LINE__);
+    return(rcode);
   }
 
-  rcode = onuGponPonMngClearOnuTconts();
+  rcode = onuGponPonMngClearOnuTconts(indicationBitMap);
   if (rcode != MV_OK)
   {
     mvPonPrint(PON_PRINT_ERROR, PON_SM_MODULE,
-               "ERROR: (%s:%d) onuGponPonMngClearOnuTconts\n", __FILE_DESC__, __LINE__);    return(rcode);
+               "ERROR: (%s:%d) onuGponPonMngClearOnuTconts\n", __FILE_DESC__, __LINE__);
+    return(rcode);
   }
 
-  rcode = onuGponPonMngClearOnuBuffers();
+  rcode = onuGponPonMngClearOnuBuffers(indicationBitMap);
   if (rcode != MV_OK)
   {
     mvPonPrint(PON_PRINT_ERROR, PON_SM_MODULE,
                "ERROR: (%s:%d) onuGponPonMngClearOnuBuffers\n", __FILE_DESC__, __LINE__);
-    return;
+    return(rcode);
   }
 
   rcode = onuGponPonMngClearOnuId();
   if (rcode != MV_OK)
   {
     mvPonPrint(PON_PRINT_ERROR, PON_SM_MODULE,
-               "ERROR: (%s:%d) onuGponPonMngClearOnuId\n", __FILE_DESC__, __LINE__);    return(rcode);
+               "ERROR: (%s:%d) onuGponPonMngClearOnuId\n", __FILE_DESC__, __LINE__);
+    return(rcode);
   }
 
   rcode = onuGponPonMngClearOnuDelay();
@@ -387,18 +409,20 @@
 **  RETURNS:     MV_OK or error
 **
 *******************************************************************************/
-MV_STATUS onuGponPonMngClearOnuTconts(void)
+MV_STATUS onuGponPonMngClearOnuTconts(MV_U32 indicationBitMap)
 {
   MV_STATUS rcode = MV_OK;
 
-  if (onuGponDbTcontResetGet()==MV_TRUE) {
-      rcode = onuGponAllocIdDeAssignAll();
-      if (rcode != MV_OK)
-      {
-        mvPonPrint(PON_PRINT_ERROR, PON_SM_MODULE,
-                   "ERROR: (%s:%d) onuGponAllocIdDeAssignAll\n", __FILE_DESC__, __LINE__);
-        return(rcode);
-      }
+  if ((onuGponDbTcontResetGet() == MV_TRUE) ||
+      (indicationBitMap & INDICATION_BIT_MAP_FORCE_TCONT_CLEAR))
+  {
+	rcode = onuGponAllocIdDeAssignAll();
+	if (rcode != MV_OK)
+	{
+	  mvPonPrint(PON_PRINT_ERROR, PON_SM_MODULE,
+		     "ERROR: (%s:%d) onuGponPonMngClearOnuTconts\n", __FILE_DESC__, __LINE__);
+	  return(rcode);
+	}
   }
 
   return(MV_OK);
@@ -988,14 +1012,21 @@
 
     /* set Default allocId according to the onuId */
     rcode = onuGponAllocIdAssign(msgOnuId, 0);
-    if (rcode != MV_OK)
+    if ((rcode != MV_OK) && (rcode != MV_NO_CHANGE))
     {
-      mvPonPrint(PON_PRINT_ERROR, PON_SM_MODULE,
-                 "ERROR: (%s:%d) onuGponAllocIdAssign\n", __FILE_DESC__, __LINE__);
-      return;
+	    mvPonPrint(PON_PRINT_ERROR, PON_SM_MODULE,
+		       "ERROR: (%s:%d) onuGponAllocIdAssign\n", __FILE_DESC__, __LINE__);
+		       return;
     }
-
-    onuGponAllocIdMacAdd(msgOnuId, PON_ONU_DEFAULT_ALLOC_TCONT);
+    else if ((rcode != MV_OK) && (rcode == MV_NO_CHANGE))
+    {
+	    mvPonPrint(PON_PRINT_ERROR, PON_SM_MODULE,
+		       "ERROR: (%s:%d) onuGponAllocIdAssign, Alloc Id exist\n", __FILE_DESC__, __LINE__);
+    }
+    else /* MV_OK */
+    {
+	    onuGponAllocIdMacAdd(msgOnuId, PON_ONU_DEFAULT_ALLOC_TCONT);
+    }
 
     /* Set delay received from OLT */
     equalizationDelayTemp = onuGponDbEqualizationDelayGet();
@@ -1263,12 +1294,12 @@
 		 __FILE_DESC__, __LINE__, currFinalDelay);
 
       /* Check if can change the TX Final Delay only */
-      if (changeDelay + currFinalDelay > GPON_TX_FINAL_DELAY_MAX)
+      if (changeDelay + currFinalDelay <= GPON_TX_FINAL_DELAY_MAX)
       {
         finalDelay = currFinalDelay + changeDelay;
 
 	mvPonPrint(PON_PRINT_DEBUG, PON_SM_STATE_MODULE,
-		   "Range Debug Info: (%s:%d), State O5, Change delay + current Final delay > MAX Final delay(0x3F), updated final delay, finalDelay = currFinalDelay + changeDelay, (0x%x)\n",
+		   "Range Debug Info: (%s:%d), State O5, Change delay + current Final delay <= MAX Final delay(0x3F), updated final delay, finalDelay = currFinalDelay + changeDelay, (0x%x)\n",
 		   __FILE_DESC__, __LINE__, finalDelay);
       }
       else
@@ -1279,7 +1310,7 @@
 #endif /* MV_GPON_DEBUG_PRINT */
 
 	mvPonPrint(PON_PRINT_DEBUG, PON_SM_STATE_MODULE,
-		   "Range Debug Info: (%s:%d), State O5, Change delay + Final delay < MAX Final delay = 0x3F, updated equalization delay\n",
+		   "Range Debug Info: (%s:%d), State O5, Change delay + Final delay > MAX Final delay = 0x3F, updated equalization delay\n",
 		   __FILE_DESC__, __LINE__);
 
         /* calc delay */
@@ -1372,7 +1403,7 @@
 
   /* clear onu information */
   /* ===================== */
-  rcode = onuGponPonMngClearOnuInfo();
+  rcode = onuGponPonMngClearOnuInfo(INDICATION_BIT_MAP_FORCE_TCONT_CLEAR);
   if (rcode != MV_OK)
   {
     mvPonPrint(PON_PRINT_ERROR, PON_SM_MODULE,
@@ -1468,7 +1499,7 @@
 
 		/* clear onu information */
 		/* ===================== */
-		rcode = onuGponPonMngClearOnuInfo();
+		rcode = onuGponPonMngClearOnuInfo(INDICATION_BIT_MAP_FORCE_TCONT_CLEAR);
 		if (rcode != MV_OK) {
 			mvPonPrint(PON_PRINT_ERROR, PON_SM_MODULE,
 					   "ERROR: (%s:%d) DISABLE: onuGponPonMngClearOnuInfo\n", __FILE_DESC__, __LINE__);
@@ -1840,7 +1871,7 @@
     if (newAllocStatus == MV_TRUE)
     {
       status = onuGponAllocIdAssign(allocId, 1);
-      if (status != MV_OK)
+      if ((status != MV_OK) && (status != MV_NO_CHANGE))
       {
         mvPonPrint(PON_PRINT_ERROR, PON_SM_MODULE,
                    "ERROR: (%s:%d) onuGponAllocIdAssign onuId(%d), allocId(%d)\n", __FILE_DESC__, __LINE__, onuId, allocId);
@@ -2631,7 +2662,7 @@
 
   /* clear onu information */
   /* ===================== */
-  rcode = onuGponPonMngClearOnuInfo();
+  rcode = onuGponPonMngClearOnuInfo(INDICATION_BIT_MAP_FIBER_EVENT);
   if (rcode != MV_OK)
   {
     mvPonPrint(PON_PRINT_ERROR, PON_SM_MODULE,
@@ -2704,7 +2735,7 @@
 
   /* clear onu information */
   /* ===================== */
-  rcode = onuGponPonMngClearOnuInfo();
+  rcode = onuGponPonMngClearOnuInfo(INDICATION_BIT_MAP_FIBER_EVENT);
   if (rcode != MV_OK)
   {
     mvPonPrint(PON_PRINT_ERROR, PON_SM_MODULE,
@@ -2888,7 +2919,7 @@
 
     /* clear onu information */
     /* ===================== */
-    rcode = onuGponPonMngClearOnuInfo();
+    rcode = onuGponPonMngClearOnuInfo(INDICATION_BIT_MAP_FIBER_EVENT);
     if (rcode != MV_OK)
     {
       mvPonPrint(PON_PRINT_ERROR, PON_SM_MODULE,
diff --git a/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/core/gpon/gponOnuSrvc.c b/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/core/gpon/gponOnuSrvc.c
index 044f589..5b3c454 100755
--- a/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/core/gpon/gponOnuSrvc.c
+++ b/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/core/gpon/gponOnuSrvc.c
@@ -1221,7 +1221,7 @@
             break;
 
         case ONU_GPON_LOG_MSG_CONTENT:
-            printk("[%03d] PLOAM message, data=0x%08x%08x%08x\n", printEntry,
+            printk("[%03d] PLOAM message, data=0x%08x%08x%08x [030201000706050411100908]\n", printEntry,
                     onuGponLogDb[printEntry].dataVal1,
                     onuGponLogDb[printEntry].dataVal2,
                     onuGponLogDb[printEntry].dataVal3);
@@ -1232,6 +1232,7 @@
                     onuGponLogDb[printEntry].state,
                     onuGponLogDb[printEntry].time,
                     onuGponLogDb[printEntry].dataVal1);
+            printk("==========================================================\n");
             break;
 
         case ONU_GPON_LOG_INTERRUPT_XVR_SD:
@@ -1255,7 +1256,7 @@
             break;
 
         case ONU_GPON_LOG_INTERRUPT_SERDES_STOP:
-            printk("[%03d] Interrupt, state=%d, time=%08x\n", printEntry,
+            printk("[%03d] SERDES Stop, state=%d, time=%08x\n", printEntry,
                     onuGponLogDb[printEntry].state,
                     onuGponLogDb[printEntry].time);
             break;
@@ -1266,6 +1267,14 @@
                     onuGponLogDb[printEntry].time);
             break;
 
+        case ONU_GPON_LOG_FREE_TEXT:
+            printk("[%03d] Free, time=%08x %d %d %d\n", printEntry,
+                   onuGponLogDb[printEntry].time,
+		   onuGponLogDb[printEntry].dataVal1,
+		   onuGponLogDb[printEntry].dataVal2,
+		   onuGponLogDb[printEntry].dataVal3);
+            break;
+
         default:
             printk("[%03d] Other\r\n", printEntry);
             break;
@@ -1301,15 +1310,10 @@
 *******************************************************************************/
 MV_STATUS onuGponWqTcontFlush(MV_U32 tcont)
 {
-    MV_STATUS rcode;
-
     if (tcont != 0xFF)
-	rcode = queue_work(gponTcontFlushWq.ponWq, (struct work_struct *)&gponTcontCleanWork[tcont]);
+	queue_work(gponTcontFlushWq.ponWq, (struct work_struct *)&gponTcontCleanWork[tcont]);
     else
-        rcode = queue_work(gponTcontFlushWq.ponWq, (struct work_struct *)&gponTcontCleanAllWork);
-
-    if(rcode == 0)
-	return(MV_ERROR);
+        queue_work(gponTcontFlushWq.ponWq, (struct work_struct *)&gponTcontCleanAllWork);
 
     return(MV_OK);
 }
@@ -1331,11 +1335,7 @@
 *******************************************************************************/
 MV_STATUS onuGponWqTcontActivate(MV_U32 tcont)
 {
-    MV_STATUS rcode;
-
-    rcode = queue_work(gponTcontFlushWq.ponWq, (struct work_struct *)&gponTcontActiveWork[tcont]);
-    if(rcode == 0)
-        return(MV_ERROR);
+    queue_work(gponTcontFlushWq.ponWq, (struct work_struct *)&gponTcontActiveWork[tcont]);
 
     return(MV_OK);
 }
@@ -1371,14 +1371,17 @@
     {
 	if (onuGponTcontFlushState[tcont] == TCONT_FLUSH_RUNNING_STATE)
 	{
-	   onuGponTcontFlushState[tcont] = TCONT_FLUSH_BLOCKING_STATE;
-	   tpm_deactive_tcont(tcont);
-	   printk("TCONT (%d) CLEAN_EVENT\n", tcont);
-	   onuGponTcontFlushState[tcont] = TCONT_FLUSH_READY_STATE;
+		mvPonPrint(PON_PRINT_DEBUG, PON_ALLOC_MODULE,
+			   "DEBUG: (%s:%d) TCONT (%d) CLEAN_EVENT\n", __FILE_DESC__, __LINE__, tcont);
+		onuGponTcontFlushState[tcont] = TCONT_FLUSH_BLOCKING_STATE;
+		tpm_deactive_tcont(tcont);
+		onuGponTcontFlushState[tcont] = TCONT_FLUSH_READY_STATE;
 	}
 	else
 	{
-	   printk("Received TCONT_CLEAN_EVENT while in T-CONT(%d) state(%s)\n", tcont, stateText[onuGponTcontFlushState[tcont]]);
+		mvPonPrint(PON_PRINT_DEBUG, PON_ALLOC_MODULE,
+			   "DEBUG: (%s:%d) Received TCONT_CLEAN_EVENT while in T-CONT(%d) state(%s)\n",
+			   __FILE_DESC__, __LINE__, tcont, stateText[onuGponTcontFlushState[tcont]]);
 	}
     }
 
@@ -1390,14 +1393,17 @@
 	{
 	    if (onuGponTcontFlushState[tcont] == TCONT_FLUSH_RUNNING_STATE)
 	    {
-	       onuGponTcontFlushState[tcont] = TCONT_FLUSH_BLOCKING_STATE;
-	       tpm_deactive_tcont(tcont);
-	       printk("TCONT (%d) CLEAN_EVENT\n", tcont);
-	       onuGponTcontFlushState[tcont] = TCONT_FLUSH_READY_STATE;
+		    mvPonPrint(PON_PRINT_DEBUG, PON_ALLOC_MODULE,
+			       "DEBUG: (%s:%d) TCONT (%d) CLEAN_EVENT\n", __FILE_DESC__, __LINE__, tcont);
+		    onuGponTcontFlushState[tcont] = TCONT_FLUSH_BLOCKING_STATE;
+		    tpm_deactive_tcont(tcont);
+		    onuGponTcontFlushState[tcont] = TCONT_FLUSH_READY_STATE;
 	    }
 	    else
 	    {
-	       printk("Received TCONT_CLEAN_EVENT while in T-CONT(%d) state(%s)\n", tcont, stateText[onuGponTcontFlushState[tcont]]);
+		    mvPonPrint(PON_PRINT_DEBUG, PON_ALLOC_MODULE,
+			       "DEBUG: (%s:%d) Received TCONT_CLEAN_EVENT while in T-CONT(%d) state(%s)\n",
+			       __FILE_DESC__, __LINE__, tcont, stateText[onuGponTcontFlushState[tcont]]);
 	    }
 	}
     }
@@ -1408,13 +1414,16 @@
     {
        if (onuGponTcontFlushState[tcont] == TCONT_FLUSH_READY_STATE)
        {
-          onuGponTcontFlushState[tcont] = TCONT_FLUSH_RUNNING_STATE;
-          tpm_active_tcont(tcont);
-          printk("TCONT (%d) ACTIVE_EVENT\n", tcont);
+	       mvPonPrint(PON_PRINT_DEBUG, PON_ALLOC_MODULE,
+	            "DEBUG: (%s:%d) TCONT (%d) ACTIVE_EVENT\n", __FILE_DESC__, __LINE__, tcont);
+	       onuGponTcontFlushState[tcont] = TCONT_FLUSH_RUNNING_STATE;
+	       tpm_active_tcont(tcont);
        }
        else
        {
-           printk("Received TCONT_ACTIVE_EVENT while in T-CONT state(%s)\n", stateText[onuGponTcontFlushState[tcont]]);
+	       mvPonPrint(PON_PRINT_DEBUG, PON_ALLOC_MODULE,
+			  "DEBUG: (%s:%d) Received TCONT_ACTIVE_EVENT while in T-CONT state(%s)\n",
+			  __FILE_DESC__, __LINE__, stateText[onuGponTcontFlushState[tcont]]);
        }
     }
 
diff --git a/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/core/gpon/gponOnuSrvc.h b/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/core/gpon/gponOnuSrvc.h
index ed08b2d..5d84b13 100755
--- a/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/core/gpon/gponOnuSrvc.h
+++ b/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/core/gpon/gponOnuSrvc.h
@@ -89,6 +89,7 @@
 #define ONU_GPON_LOG_STATE			(6)
 #define ONU_GPON_LOG_MSG			(7)
 #define ONU_GPON_LOG_MSG_CONTENT		(8)
+#define ONU_GPON_LOG_FREE_TEXT			(9)
 
 #define ONU_GPON_LOG_SIZE                       (512)
 
diff --git a/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/perf/epon/eponOnuLnxKsMI.c b/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/perf/epon/eponOnuLnxKsMI.c
index e5baf82..cb527e0 100755
--- a/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/perf/epon/eponOnuLnxKsMI.c
+++ b/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/perf/epon/eponOnuLnxKsMI.c
@@ -89,6 +89,8 @@
 
 /* Local Variables
 ------------------------------------------------------------------------------*/
+static   S_EponIoctlTdmQueue ioctlTdmQueue;
+static   S_EponIoctlDba      ioctlDba;
 
 /* Export Functions
 ------------------------------------------------------------------------------*/
@@ -648,10 +650,8 @@
   S_EponIoctlFec      ioctlFec;
   S_EponIoctlEnc      ioctlEnc;
   S_EponIoctlOamTx    ioctlTxOam;
-  S_EponIoctlDba      ioctlDba;
   S_EponIoctlHoldOver ioctlHoldover;
   S_EponIoctlSilence  ioctlSilence;
-  S_EponIoctlTdmQueue ioctlTdmQueue;
   MV_U32              ioctlState;
   MV_U32              ioctlAlarm;
   S_EponIoctlRogueOnu ioctlRogueOnu;
@@ -925,7 +925,7 @@
 
         spin_lock_irqsave(&onuPonIrqLock, flags);
         
-        onuEponDbP2PForceModeSet(ioctlState);
+        status = onuEponDbP2PForceModeSet(ioctlState);
         
         spin_unlock_irqrestore(&onuPonIrqLock, flags);
 
diff --git a/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/perf/epon/eponOnuLnxKsUI.c b/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/perf/epon/eponOnuLnxKsUI.c
index ce98eb1..a49d831 100755
--- a/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/perf/epon/eponOnuLnxKsUI.c
+++ b/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/perf/epon/eponOnuLnxKsUI.c
@@ -101,6 +101,7 @@
 /* Local Variables
 ------------------------------------------------------------------------------*/
 MV_BOOL infoEponCntReadClearInd = MV_TRUE;
+static S_EponIoctlDba ioctlDba;
 
 /* Export Functions
 ------------------------------------------------------------------------------*/
@@ -1088,7 +1089,6 @@
   MV_U32         idx;
   MV_U32         qsetidx;
   MV_U32         numOfQueues = 0;
-  S_EponIoctlDba ioctlDba;
 
   memset (&ioctlDba, 0, sizeof(S_EponIoctlDba));
 
diff --git a/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/plat/gpon/gponOnuLnxKsOs.c b/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/plat/gpon/gponOnuLnxKsOs.c
index 86b921c..acd659e 100755
--- a/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/plat/gpon/gponOnuLnxKsOs.c
+++ b/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/plat/gpon/gponOnuLnxKsOs.c
@@ -154,8 +154,6 @@
     INIT_WORK((struct work_struct *) &gponTcontCleanAllWork, onuGponWqTcontFunc);
     gponTcontCleanAllWork.action = TCONT_CLEAN_ALL_EVENT;
 
-    printk("STARTING PON WORK QUEUE!!!!!\n");
-
     return(MV_OK);
   }
 
diff --git a/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/plat/ponOnuLnxKsOs.h b/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/plat/ponOnuLnxKsOs.h
index e5b3293..5205e1c 100755
--- a/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/plat/ponOnuLnxKsOs.h
+++ b/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/plat/ponOnuLnxKsOs.h
@@ -187,7 +187,7 @@
 #define ONU_PON_TIMER_SILENCE_INTERVAL       (60000) /* 60 sec */
 #define ONU_PON_TIMER_TX_MOD_INTERVAL        (1)   /* 1 msec */
 #define ONU_PON_TIMER_EVENT_MISS_INTERVAL    (10)   /* 10 msec */
-#define ONU_PON_TIMER_TX_PWR_INTERVAL        (1000)  /* 1 sec */
+#define ONU_PON_TIMER_TX_PWR_INTERVAL        (6000)  /* 1   sec  */
 
 #define ONU_PON_TIMER_ACTIVE                 (1)
 #define ONU_PON_TIMER_NOT_ACTIVE             (0)
diff --git a/arch/arm/plat-feroceon/mv_drivers_lsp/mv_tpm/core/tpm_pkt_proc_logic.c b/arch/arm/plat-feroceon/mv_drivers_lsp/mv_tpm/core/tpm_pkt_proc_logic.c
index 3098a69..fd0a827 100755
--- a/arch/arm/plat-feroceon/mv_drivers_lsp/mv_tpm/core/tpm_pkt_proc_logic.c
+++ b/arch/arm/plat-feroceon/mv_drivers_lsp/mv_tpm/core/tpm_pkt_proc_logic.c
@@ -17825,7 +17825,7 @@
 
 	//TPM_OS_INFO(TPM_PNCL_MOD, "port = %d txp = %d enable = %d\n", port, txp, enable);
 
-	printk("TPM T-Cont API, port(%d), txp(%d) enable(%d)\n", port, txp, enable);
+    printk(KERN_DEBUG "TPM T-Cont API, port(%d), txp(%d) enable(%d)\n", port, txp, enable);
 
 	tx_mod = port + txp;
 
@@ -17855,7 +17855,7 @@
 
 			/* enable/disable hwf */
 			if (enable == true)
-				printk("HWF T-Cont active, port(%d), txp(%d), que(%d)\n", port, txp, q_num);
+                printk(KERN_DEBUG "HWF T-Cont active, port(%d), txp(%d), que(%d)\n", port, txp, q_num);
 
 			mvNetaHwfTxqEnable((queue_owner - 1), port, txp, q_num, enable);
 
@@ -17864,7 +17864,7 @@
 			if ((!enable) && (curr_state))
 			{
 				//TPM_OS_INFO(TPM_PNCL_MOD, "Call mv_eth_txq_clean - current state: %d, enable %d\n", curr_state, enable);
-				printk("HWF T-Cont stop/clean, port(%d), txp(%d), que(%d)\n", port, txp, q_num);
+                printk(KERN_DEBUG "HWF T-Cont stop/clean, port(%d), txp(%d), que(%d)\n", port, txp, q_num);
 				mv_eth_txq_clean(port, txp, q_num);
 			}
 		}
@@ -17874,13 +17874,13 @@
 		{
 			if (!enable)
 			{
-				printk("SWF T-Cont stop/clean, port(%d), txp(%d), que(%d)\n", port, txp, q_num);
+                printk(KERN_DEBUG "SWF T-Cont stop/clean, port(%d), txp(%d), que(%d)\n", port, txp, q_num);
 				mv_cust_set_tcont_state(txp, false);
 				mv_eth_txq_clean(port, txp, q_num);
 			}
 			else
 			{
-				printk("SWF T-Cont active, port(%d), txp(%d), que(%d)\n", port, txp, q_num);
+                printk(KERN_DEBUG "SWF T-Cont active, port(%d), txp(%d), que(%d)\n", port, txp, q_num);
 				mv_cust_set_tcont_state(txp, true);
 			}
 		}
