summaryrefslogtreecommitdiff
path: root/drivers/net/ethernet/freescale/fman/src/wrapper
diff options
context:
space:
mode:
authorEyal Harari <Eyal.Harari@freesacle.com>2014-05-14 05:30:51 (GMT)
committerJose Rivera <German.Rivera@freescale.com>2014-05-14 19:29:11 (GMT)
commit701d1fa7c066a36d9520e3c0cacf788117f50eec (patch)
treeea6e4f062fa5b0ee649c86fc4f8710a745dd1e36 /drivers/net/ethernet/freescale/fman/src/wrapper
parent8d5cd1658cb0c97d5429124f9fb5caa88c460186 (diff)
downloadlinux-fsl-qoriq-701d1fa7c066a36d9520e3c0cacf788117f50eec.tar.xz
FMD: Added functions for fm soc configuration during Deep Sleep
Signed-off-by: Eyal Harari <Eyal.Harari@freesacle.com> Change-Id: I2b775e3609510a0290e751adc1cf3726cf11904f Reviewed-on: http://git.am.freescale.net:8181/12341 Tested-by: Review Code-CDREVIEW <CDREVIEW@freescale.com> Reviewed-by: Cristian-Constantin Sovaiala <Cristian.Sovaiala@freescale.com> Reviewed-by: Jose Rivera <German.Rivera@freescale.com>
Diffstat (limited to 'drivers/net/ethernet/freescale/fman/src/wrapper')
-rwxr-xr-xdrivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_fm.c36
1 files changed, 36 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 0ffb014..9815278 100755
--- a/drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_fm.c
+++ b/drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_fm.c
@@ -1094,11 +1094,47 @@ static const struct of_device_id fm_match[] = {
MODULE_DEVICE_TABLE(of, fm_match);
#endif /* !MODULE */
+#ifdef CONFIG_PM
+
+#define SCFG_FMCLKDPSLPCR_ADDR 0xFFE0FC00C
+#define SCFG_FMCLKDPSLPCR_DS_VAL 0x48402000
+#define SCFG_FMCLKDPSLPCR_NORMAL_VAL 0x00402000
+
+static int fm_soc_suspend(struct device *dev)
+{
+ uint32_t *fmclk;
+ fmclk = ioremap(SCFG_FMCLKDPSLPCR_ADDR, 4);
+ WRITE_UINT32(*fmclk, SCFG_FMCLKDPSLPCR_DS_VAL);
+ return 0;
+}
+
+static int fm_soc_resume(struct device *dev)
+{
+ uint32_t *fmclk;
+ fmclk = ioremap(SCFG_FMCLKDPSLPCR_ADDR, 4);
+ WRITE_UINT32(*fmclk, SCFG_FMCLKDPSLPCR_NORMAL_VAL);
+ return 0;
+}
+
+static const struct dev_pm_ops fm_pm_ops = {
+ .suspend_noirq = fm_soc_suspend,
+ .resume_noirq = fm_soc_resume,
+};
+
+#define FM_PM_OPS (&fm_pm_ops)
+
+#else /* CONFIG_PM */
+
+#define FM_PM_OPS NULL
+
+#endif /* CONFIG_PM */
+
static struct platform_driver fm_driver = {
.driver = {
.name = "fsl-fman",
.of_match_table = fm_match,
.owner = THIS_MODULE,
+ .pm = FM_PM_OPS,
},
.probe = fm_probe,
.remove = fm_remove