MLK-21208 net: fec: add sleep mode support for i.MX8QM/QXP
authorFugang Duan <fugang.duan@nxp.com>
Thu, 21 Mar 2019 06:14:20 +0000 (14:14 +0800)
committerLeonard Crestez <leonard.crestez@nxp.com>
Wed, 17 Apr 2019 23:51:34 +0000 (02:51 +0300)
commit ae136b3cfe7c(MLK-18483-04 net: fec: close the mu ipc channel
when it is not used) merge part of code from commit 379ede4dfd95
(MLK-18483-02 net: fec: add sleep mode support for i.MX8QM/QXP),
but miss the commit.

So add the feature support for i.MX8QM/QXP by merge the commit 379ede4dfd95
(MLK-18483-02 net: fec: add sleep mode support for i.MX8QM/QXP)

Reviewed-by: Richard Zhu <hongxing.zhu@nxp.com>
Signed-off-by: Fugang Duan <fugang.duan@nxp.com>
drivers/net/ethernet/freescale/fec.h
drivers/net/ethernet/freescale/fec_fixup.c
drivers/net/ethernet/freescale/fec_main.c

index 9dd388c..0052fbb 100644 (file)
@@ -650,6 +650,7 @@ uint fec_ptp_check_pps_event(struct fec_enet_private *fep);
 void fec_enet_register_fixup(struct net_device *ndev);
 int of_fec_enet_parse_fixup(struct device_node *np);
 void fec_enet_get_mac_from_fuse(struct device_node *np, unsigned char *mac);
+void fec_enet_ipg_stop_misc_set(struct device_node *np, bool enabled);
 
 /****************************************************************************/
 #endif /* FEC_H */
index 1b71d53..20d070f 100644 (file)
@@ -202,6 +202,7 @@ static void imx8qm_ipg_stop_enable(int dev_id, bool enabled)
 }
 #else
 static void imx8qm_get_mac_from_fuse(int dev_id, unsigned char *mac) {}
+static void imx8qm_ipg_stop_enable(int dev_id, bool enabled) {}
 #endif
 
 void fec_enet_get_mac_from_fuse(struct device_node *np, unsigned char *mac)
@@ -221,3 +222,19 @@ void fec_enet_get_mac_from_fuse(struct device_node *np, unsigned char *mac)
        else if (of_machine_is_compatible("fsl,imx8mq"))
                imx8mq_get_mac_from_fuse(idx, mac);
 }
+
+void fec_enet_ipg_stop_misc_set(struct device_node *np, bool enabled)
+{
+       int idx;
+
+       if (!np)
+               return;
+
+       idx = of_alias_get_id(np, "ethernet");
+       if (idx < 0)
+               idx = 0;
+
+       if (of_machine_is_compatible("fsl,imx8qm") ||
+           of_machine_is_compatible("fsl,imx8qxp"))
+               imx8qm_ipg_stop_enable(idx, enabled);
+}
index f2dd692..50c44cb 100644 (file)
@@ -1135,6 +1135,7 @@ fec_restart(struct net_device *ndev)
 static int fec_enet_stop_mode(struct fec_enet_private *fep, bool enabled)
 {
        struct fec_platform_data *pdata = fep->pdev->dev.platform_data;
+       struct device_node *np = fep->pdev->dev.of_node;
 
        if (fep->gpr.gpr) {
                if (enabled)
@@ -1147,6 +1148,8 @@ static int fec_enet_stop_mode(struct fec_enet_private *fep, bool enabled)
                                           0);
        } else if (pdata && pdata->sleep_mode_enable) {
                pdata->sleep_mode_enable(enabled);
+       } else {
+               fec_enet_ipg_stop_misc_set(np, enabled);
        }
 
        return 0;