diff options
author | Eyal Harari <Eyal.Harari@freesacle.com> | 2014-05-23 07:57:56 (GMT) |
---|---|---|
committer | Jose Rivera <German.Rivera@freescale.com> | 2014-05-27 14:05:57 (GMT) |
commit | 49a1bd52cb9a328460ee793967249223e379b809 (patch) | |
tree | 76da20971b5022834d33a007ad2d4f72955cdc0c /drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_fm.c | |
parent | 8596def61c88a5dad865f82e0067b0a2dbe003f2 (diff) | |
download | linux-fsl-qoriq-49a1bd52cb9a328460ee793967249223e379b809.tar.xz |
FMD: DSAR: workaround patch which enables AR in DS
Signed-off-by: Eyal Harari <Eyal.Harari@freesacle.com>
Change-Id: I90e7e97c9ff8a149893c8244cb0e8376c66eb2ad
Reviewed-on: http://git.am.freescale.net:8181/12925
Reviewed-by: Cristian-Constantin Sovaiala <Cristian.Sovaiala@freescale.com>
Tested-by: Richard Schmitt <richard.schmitt@freescale.com>
Reviewed-by: Jose Rivera <German.Rivera@freescale.com>
Tested-by: Jose Rivera <German.Rivera@freescale.com>
Diffstat (limited to 'drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_fm.c')
-rwxr-xr-x | drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_fm.c | 30 |
1 files changed, 22 insertions, 8 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 cdffe7a..646a90c 100755 --- a/drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_fm.c +++ b/drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_fm.c @@ -60,6 +60,7 @@ #include <asm/errno.h> #include <asm/qe.h> /* For struct qe_firmware */ #include <sysdev/fsl_soc.h> +#include <asm/fsl_pm.h> #include <linux/stat.h> /* For file access mask */ #include <linux/skbuff.h> #include <linux/proc_fs.h> @@ -1102,20 +1103,30 @@ MODULE_DEVICE_TABLE(of, fm_match); #define SCFG_FMCLKDPSLPCR_ADDR 0xFFE0FC00C #define SCFG_FMCLKDPSLPCR_DS_VAL 0x48402000 #define SCFG_FMCLKDPSLPCR_NORMAL_VAL 0x00402000 - +void FM_PORT_Dsar_enter_final(void); +static bool started_ar_enter = false; static int fm_soc_suspend(struct device *dev) { - uint32_t *fmclk; - fmclk = ioremap(SCFG_FMCLKDPSLPCR_ADDR, 4); - WRITE_UINT32(*fmclk, SCFG_FMCLKDPSLPCR_DS_VAL); + if (started_ar_enter) + { + uint32_t *fmclk; + fsl_set_power_except(dev,1); + FM_PORT_Dsar_enter_final(); + 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); + if (started_ar_enter) + { + uint32_t *fmclk; + fmclk = ioremap(SCFG_FMCLKDPSLPCR_ADDR, 4); + WRITE_UINT32(*fmclk, SCFG_FMCLKDPSLPCR_NORMAL_VAL); + started_ar_enter = false; + } return 0; } @@ -1360,6 +1371,7 @@ int fm_port_enter_autores_for_deepsleep(struct fm_port *port, return -EFAULT; FM_PORT_EnterDsar(p_LnxWrpFmPortDev->h_Dev, (t_FmPortDsarParams*)params); + started_ar_enter = true; return 0; } EXPORT_SYMBOL(fm_port_enter_autores_for_deepsleep); @@ -1367,7 +1379,9 @@ EXPORT_SYMBOL(fm_port_enter_autores_for_deepsleep); void fm_port_exit_auto_res_for_deep_sleep(struct fm_port *port_rx, struct fm_port *port_tx) { - FM_PORT_ExitDsar(port_rx, port_tx); + t_LnxWrpFmPortDev *p_LnxWrpFmPortDevRx = (t_LnxWrpFmPortDev *)port_rx; + t_LnxWrpFmPortDev *p_LnxWrpFmPortDevTx = (t_LnxWrpFmPortDev *)port_tx; + FM_PORT_ExitDsar(p_LnxWrpFmPortDevRx->h_Dev, p_LnxWrpFmPortDevTx->h_Dev); } EXPORT_SYMBOL(fm_port_exit_auto_res_for_deep_sleep); |