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/src/wrapper | |
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/src/wrapper')
-rwxr-xr-x | drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_fm.c | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_fm.c b/drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_fm.c index 58809c2..7a86897 100755 --- a/drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_fm.c +++ b/drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_fm.c @@ -61,6 +61,7 @@ #include <linux/fsl/qe.h> /* For struct qe_firmware */ #include <sysdev/fsl_soc.h> #include <asm/fsl_pm.h> +#include <asm/fsl_guts.h> #include <linux/stat.h> /* For file access mask */ #include <linux/skbuff.h> #include <linux/proc_fs.h> @@ -889,6 +890,39 @@ static t_Error ConfigureFmDev(t_LnxWrpFmDev *p_LnxWrpFmDev) return FillRestFmInfo(p_LnxWrpFmDev); } +/* + * Table for matching compatible strings, for device tree + * guts node, for QorIQ SOCs. + * "fsl,qoriq-device-config-2.0" corresponds to T4 & B4 + * SOCs. For the older SOCs "fsl,qoriq-device-config-1.0" + * string would be used. +*/ +static const struct of_device_id guts_device_ids[] = { + { .compatible = "fsl,qoriq-device-config-1.0", }, + { .compatible = "fsl,qoriq-device-config-2.0", }, + {} +}; + +static unsigned int get_rcwsr(int regnum) +{ + struct ccsr_guts __iomem *guts_regs = NULL; + struct device_node *guts_node; + + guts_node = of_find_matching_node(NULL, guts_device_ids); + if (!guts_node) { + pr_err("could not find GUTS node\n"); + return 0; + } + guts_regs = of_iomap(guts_node, 0); + of_node_put(guts_node); + if (!guts_regs) { + pr_err("ioremap of GUTS node failed\n"); + return 0; + } + + return ioread32be(&guts_regs->rcwsr[regnum]); +} + static t_Error InitFmDev(t_LnxWrpFmDev *p_LnxWrpFmDev) { const struct qe_firmware *fw; @@ -927,6 +961,13 @@ static t_Error InitFmDev(t_LnxWrpFmDev *p_LnxWrpFmDev) } #endif + if(p_LnxWrpFmDev->fmDevSettings.param.fmId == 0) + p_LnxWrpFmDev->fmDevSettings.param.fmMacClkRatio = + !!(get_rcwsr(4) & 0x2); /* RCW[FM_MAC_RAT0] */ + else + p_LnxWrpFmDev->fmDevSettings.param.fmMacClkRatio = + !!(get_rcwsr(4) & 0x1); /* RCW[FM_MAC_RAT1] */ + if ((p_LnxWrpFmDev->h_Dev = FM_Config(&p_LnxWrpFmDev->fmDevSettings.param)) == NULL) RETURN_ERROR(MAJOR, E_INVALID_HANDLE, ("FM")); |