summaryrefslogtreecommitdiff
path: root/drivers/net/ethernet/freescale/fman/src/wrapper
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/src/wrapper
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/src/wrapper')
-rwxr-xr-xdrivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_fm.c41
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"));