From c617aa4aa3e4509ef581243872a8151661a5da42 Mon Sep 17 00:00:00 2001 From: Mandy Lavi Date: Thu, 27 Mar 2014 13:51:52 +0200 Subject: fmd: Handled clearing of plcr profile and scheme for re-use Change-Id: I0058a7152ec34038961bdfb7598d280b7ec47777 Signed-off-by: Mandy Lavi Reviewed-on: http://git.am.freescale.net:8181/10411 Reviewed-by: Jose Rivera Tested-by: Jose Rivera diff --git a/drivers/net/ethernet/freescale/fman/Peripherals/FM/Pcd/fm_kg.c b/drivers/net/ethernet/freescale/fman/Peripherals/FM/Pcd/fm_kg.c index b271204..769a7ab 100644 --- a/drivers/net/ethernet/freescale/fman/Peripherals/FM/Pcd/fm_kg.c +++ b/drivers/net/ethernet/freescale/fman/Peripherals/FM/Pcd/fm_kg.c @@ -769,7 +769,10 @@ static void UpdateRequiredActionFlag(t_FmPcdKgScheme *p_Scheme, bool set) if (set) p_Scheme->requiredActionFlag = TRUE; else + { + p_Scheme->requiredAction = 0; p_Scheme->requiredActionFlag = FALSE; + } } static t_Error KgWriteSp(t_FmPcd *p_FmPcd, uint8_t hardwarePortId, uint32_t spReg, bool add) @@ -2943,6 +2946,8 @@ t_Handle FM_PCD_KgSchemeSet(t_Handle h_FmPcd, t_FmPcdKgSchemeParams *p_SchemePa ("Scheme id (%d)!", relativeSchemeId)); return NULL; } + /* Clear all fields, scheme may have beed previously used */ + memset(p_Scheme, 0, sizeof(t_FmPcdKgScheme)); p_Scheme->schemeId = p_FmPcd->p_FmPcdKg->schemesIds[relativeSchemeId]; p_Scheme->h_FmPcd = p_FmPcd; diff --git a/drivers/net/ethernet/freescale/fman/Peripherals/FM/Pcd/fm_plcr.c b/drivers/net/ethernet/freescale/fman/Peripherals/FM/Pcd/fm_plcr.c index d08293a..e4eeddc 100644 --- a/drivers/net/ethernet/freescale/fman/Peripherals/FM/Pcd/fm_plcr.c +++ b/drivers/net/ethernet/freescale/fman/Peripherals/FM/Pcd/fm_plcr.c @@ -596,7 +596,10 @@ static void UpdateRequiredActionFlag(t_Handle h_FmPcd, uint16_t absoluteProfileI if (set) p_FmPcd->p_FmPcdPlcr->profiles[absoluteProfileId].requiredActionFlag = TRUE; else + { + p_FmPcd->p_FmPcdPlcr->profiles[absoluteProfileId].requiredAction = 0; p_FmPcd->p_FmPcdPlcr->profiles[absoluteProfileId].requiredActionFlag = FALSE; + } } /*********************************************/ @@ -1637,6 +1640,7 @@ t_Handle FM_PCD_PlcrProfileSet(t_Handle h_FmPcd, /* initialize profile struct */ p_Profile = &p_FmPcd->p_FmPcdPlcr->profiles[absoluteProfileId]; + p_Profile->h_FmPcd = p_FmPcd; p_Profile->absoluteProfileId = absoluteProfileId; @@ -1761,10 +1765,13 @@ t_Error FM_PCD_PlcrProfileDelete(t_Handle h_Profile) WritePar(p_FmPcd, tmpReg32); PlcrHwUnlock(p_FmPcd->p_FmPcdPlcr, intFlags); + if (p_Profile->p_Lock) /* release allocated Profile lock */ FmPcdReleaseLock(p_FmPcd, p_Profile->p_Lock); + /* we do not memset profile as all its fields are being re-initialized at "set", + * plus its allocation information is still valid. */ return E_OK; } -- cgit v0.10.2