summaryrefslogtreecommitdiff
path: root/drivers/net/ethernet/freescale/fman/Peripherals/FM
diff options
context:
space:
mode:
authorMandy Lavi <mandy.lavi@freescale.com>2015-04-15 13:06:07 (GMT)
committerHonghua Yin <Hong-Hua.Yin@freescale.com>2015-04-21 05:13:04 (GMT)
commitd87b597f379009caec4d2f66d2eb5012c868051e (patch)
treef72dbcf0e2a2638fedf8ec613e504d64c1007573 /drivers/net/ethernet/freescale/fman/Peripherals/FM
parent5d416e1f6cd73adbc857936e82c4fca409e82e39 (diff)
downloadlinux-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')
-rw-r--r--drivers/net/ethernet/freescale/fman/Peripherals/FM/Rtc/fm_rtc.c4
-rw-r--r--drivers/net/ethernet/freescale/fman/Peripherals/FM/fm.c10
-rw-r--r--drivers/net/ethernet/freescale/fman/Peripherals/FM/fm.h1
-rw-r--r--drivers/net/ethernet/freescale/fman/Peripherals/FM/fm_ipc.h1
-rw-r--r--drivers/net/ethernet/freescale/fman/Peripherals/FM/inc/fm_common.h13
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