diff options
author | Mandy Lavi <mandy.lavi@freescale.com> | 2015-04-15 13:06:07 (GMT) |
---|---|---|
committer | Honghua Yin <Hong-Hua.Yin@freescale.com> | 2015-04-21 05:13:04 (GMT) |
commit | d87b597f379009caec4d2f66d2eb5012c868051e (patch) | |
tree | f72dbcf0e2a2638fedf8ec613e504d64c1007573 /drivers/net/ethernet/freescale/fman/Peripherals/FM | |
parent | 5d416e1f6cd73adbc857936e82c4fca409e82e39 (diff) | |
download | linux-fsl-qoriq-d87b597f379009caec4d2f66d2eb5012c868051e.tar.xz |
fmd: rtc: consider RCW[FM_MAC_RAT] when calcuating rtc ref clock
Change-Id: I1b8a2966ad45f995e7e6b3cdca7f8ed5e0dd397a
Signed-off-by: Mandy Lavi <mandy.lavi@freescale.com>
Reviewed-on: http://git.am.freescale.net:8181/35026
Reviewed-by: Igal Liberman <Igal.Liberman@freescale.com>
Reviewed-by: Yangbo Lu <yangbo.lu@freescale.com>
Reviewed-by: Honghua Yin <Hong-Hua.Yin@freescale.com>
Tested-by: Honghua Yin <Hong-Hua.Yin@freescale.com>
Diffstat (limited to 'drivers/net/ethernet/freescale/fman/Peripherals/FM')
5 files changed, 27 insertions, 2 deletions
diff --git a/drivers/net/ethernet/freescale/fman/Peripherals/FM/Rtc/fm_rtc.c b/drivers/net/ethernet/freescale/fman/Peripherals/FM/Rtc/fm_rtc.c index 5ea7a16..b0bcf26 100644 --- a/drivers/net/ethernet/freescale/fman/Peripherals/FM/Rtc/fm_rtc.c +++ b/drivers/net/ethernet/freescale/fman/Peripherals/FM/Rtc/fm_rtc.c @@ -209,9 +209,9 @@ t_Error FM_RTC_Init(t_Handle h_FmRtc) /* find source clock frequency in Mhz */ if (p_Rtc->p_RtcDriverParam->src_clk != E_FMAN_RTC_SOURCE_CLOCK_SYSTEM) - p_Rtc->srcClkFreqMhz = p_Rtc->p_RtcDriverParam->ext_src_clk_freq; + p_Rtc->srcClkFreqMhz = p_Rtc->p_RtcDriverParam->ext_src_clk_freq; else - p_Rtc->srcClkFreqMhz = (uint32_t)(FmGetClockFreq(p_Rtc->h_Fm)/2); + p_Rtc->srcClkFreqMhz = (uint32_t)(FmGetMacClockFreq(p_Rtc->h_Fm)); /* if timer in Master mode Initialize TMR_CTRL */ /* We want the counter (TMR_CNT) to count in nano-seconds */ diff --git a/drivers/net/ethernet/freescale/fman/Peripherals/FM/fm.c b/drivers/net/ethernet/freescale/fman/Peripherals/FM/fm.c index 3b28099..7225ad6 100644 --- a/drivers/net/ethernet/freescale/fman/Peripherals/FM/fm.c +++ b/drivers/net/ethernet/freescale/fman/Peripherals/FM/fm.c @@ -1030,6 +1030,7 @@ static t_Error FmHandleIpcMsgCB(t_Handle h_Fm, /* Get clock frequency */ ipcParams.fmClkFreq = p_Fm->p_FmStateStruct->fmClkFreq; + ipcParams.fmMacClkFreq = p_Fm->p_FmStateStruct->fmMacClkFreq; fman_get_revision(p_Fm->p_FmFpmRegs,&ipcParams.majorRev,&ipcParams.minorRev); @@ -2464,6 +2465,13 @@ uint16_t FmGetClockFreq(t_Handle h_Fm) return p_Fm->p_FmStateStruct->fmClkFreq; } +uint16_t FmGetMacClockFreq(t_Handle h_Fm) +{ + t_Fm *p_Fm = (t_Fm*)h_Fm; + + return p_Fm->p_FmStateStruct->fmMacClkFreq; +} + uint32_t FmGetTimeStampScale(t_Handle h_Fm) { t_Fm *p_Fm = (t_Fm*)h_Fm; @@ -3085,6 +3093,7 @@ static t_Error InitGuestMode(t_Fm *p_Fm) memcpy((uint8_t*)&ipcParams, reply.replyBody, sizeof(t_FmIpcParams)); p_Fm->p_FmStateStruct->fmClkFreq = ipcParams.fmClkFreq; + p_Fm->p_FmStateStruct->fmMacClkFreq = ipcParams.fmMacClkFreq; p_Fm->p_FmStateStruct->revInfo.majorRev = ipcParams.majorRev; p_Fm->p_FmStateStruct->revInfo.minorRev = ipcParams.minorRev; } @@ -3321,6 +3330,7 @@ t_Handle FM_Config(t_FmParams *p_FmParam) p_Fm->h_FmMuram = p_FmParam->h_FmMuram; p_Fm->h_App = p_FmParam->h_App; p_Fm->p_FmStateStruct->fmClkFreq = p_FmParam->fmClkFreq; + p_Fm->p_FmStateStruct->fmMacClkFreq = p_FmParam->fmClkFreq / ((!p_FmParam->fmMacClkRatio)? 2: p_FmParam->fmMacClkRatio); p_Fm->f_Exception = p_FmParam->f_Exception; p_Fm->f_BusError = p_FmParam->f_BusError; p_Fm->p_FmFpmRegs = (struct fman_fpm_regs *)UINT_TO_PTR(baseAddr + FM_MM_FPM); diff --git a/drivers/net/ethernet/freescale/fman/Peripherals/FM/fm.h b/drivers/net/ethernet/freescale/fman/Peripherals/FM/fm.h index ea103db..72121f3 100644 --- a/drivers/net/ethernet/freescale/fman/Peripherals/FM/fm.h +++ b/drivers/net/ethernet/freescale/fman/Peripherals/FM/fm.h @@ -543,6 +543,7 @@ typedef struct uint8_t fmId; e_FmPortType portsTypes[FM_MAX_NUM_OF_HW_PORT_IDS]; uint16_t fmClkFreq; + uint16_t fmMacClkFreq; t_FmRevisionInfo revInfo; /**************************/ /* Master Only parameters */ diff --git a/drivers/net/ethernet/freescale/fman/Peripherals/FM/fm_ipc.h b/drivers/net/ethernet/freescale/fman/Peripherals/FM/fm_ipc.h index f39d5d9..7ce36a7 100644 --- a/drivers/net/ethernet/freescale/fman/Peripherals/FM/fm_ipc.h +++ b/drivers/net/ethernet/freescale/fman/Peripherals/FM/fm_ipc.h @@ -192,6 +192,7 @@ typedef _Packed struct t_FmIpcIsr *//***************************************************************************/ typedef _Packed struct t_FmIpcParams { uint16_t fmClkFreq; /**< OUT: FM Clock frequency */ + uint16_t fmMacClkFreq; /**< OUT: FM MAC clock frequence */ uint8_t majorRev; /**< OUT: FM Major revision */ uint8_t minorRev; /**< OUT: FM Minor revision */ } _PackedType t_FmIpcParams; diff --git a/drivers/net/ethernet/freescale/fman/Peripherals/FM/inc/fm_common.h b/drivers/net/ethernet/freescale/fman/Peripherals/FM/inc/fm_common.h index 1c08bb1..30eae1b 100644 --- a/drivers/net/ethernet/freescale/fman/Peripherals/FM/inc/fm_common.h +++ b/drivers/net/ethernet/freescale/fman/Peripherals/FM/inc/fm_common.h @@ -1019,6 +1019,19 @@ t_Error FmResetMac(t_Handle h_Fm, e_FmMacType type, uint8_t macId); uint16_t FmGetClockFreq(t_Handle h_Fm); /**************************************************************************//** + @Function FmGetMacClockFreq + + @Description Used by MAC driver to get the MAC clock frequency + + @Param[in] h_Fm A handle to an FM Module. + + @Return clock-freq on success; 0 otherwise. + + @Cautions Allowed only following FM_Init(). +*//***************************************************************************/ +uint16_t FmGetMacClockFreq(t_Handle h_Fm); + +/**************************************************************************//** @Function FmGetId @Description Used by PCD driver to read rhe FM id |