]> git.itanic.dy.fi Git - linux-stable/commitdiff
net: fman: Move initialization to mac-specific files
authorSean Anderson <sean.anderson@seco.com>
Fri, 2 Sep 2022 21:57:23 +0000 (17:57 -0400)
committerDavid S. Miller <davem@davemloft.net>
Mon, 5 Sep 2022 13:27:38 +0000 (14:27 +0100)
This moves mac-specific initialization to mac-specific files. This will
make it easier to work with individual macs. It will also make it easier
to refactor the initialization to simplify the control flow. No
functional change intended.

Signed-off-by: Sean Anderson <sean.anderson@seco.com>
Acked-by: Camelia Groza <camelia.groza@nxp.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/freescale/fman/fman_dtsec.c
drivers/net/ethernet/freescale/fman/fman_dtsec.h
drivers/net/ethernet/freescale/fman/fman_memac.c
drivers/net/ethernet/freescale/fman/fman_memac.h
drivers/net/ethernet/freescale/fman/fman_tgec.c
drivers/net/ethernet/freescale/fman/fman_tgec.h
drivers/net/ethernet/freescale/fman/mac.c

index 7f4f3d797a8dc13987c7d1a150760af203760223..92c2e35d3b4f02fc8529e3ca438ac5f50774ace9 100644 (file)
@@ -7,6 +7,7 @@
 
 #include "fman_dtsec.h"
 #include "fman.h"
+#include "mac.h"
 
 #include <linux/slab.h>
 #include <linux/bitrev.h>
@@ -1247,6 +1248,28 @@ int dtsec_restart_autoneg(struct fman_mac *dtsec)
        return 0;
 }
 
+static void adjust_link_dtsec(struct mac_device *mac_dev)
+{
+       struct phy_device *phy_dev = mac_dev->phy_dev;
+       struct fman_mac *fman_mac;
+       bool rx_pause, tx_pause;
+       int err;
+
+       fman_mac = mac_dev->fman_mac;
+       if (!phy_dev->link) {
+               dtsec_restart_autoneg(fman_mac);
+
+               return;
+       }
+
+       dtsec_adjust_link(fman_mac, phy_dev->speed);
+       fman_get_pause_cfg(mac_dev, &rx_pause, &tx_pause);
+       err = fman_set_mac_active_pause(mac_dev, rx_pause, tx_pause);
+       if (err < 0)
+               dev_err(mac_dev->dev, "fman_set_mac_active_pause() = %d\n",
+                       err);
+}
+
 int dtsec_get_version(struct fman_mac *dtsec, u32 *mac_version)
 {
        struct dtsec_regs __iomem *regs = dtsec->regs;
@@ -1492,3 +1515,68 @@ struct fman_mac *dtsec_config(struct fman_mac_params *params)
        kfree(dtsec);
        return NULL;
 }
+
+int dtsec_initialization(struct mac_device *mac_dev,
+                        struct device_node *mac_node)
+{
+       int                     err;
+       struct fman_mac_params  params;
+       u32                     version;
+
+       mac_dev->set_promisc            = dtsec_set_promiscuous;
+       mac_dev->change_addr            = dtsec_modify_mac_address;
+       mac_dev->add_hash_mac_addr      = dtsec_add_hash_mac_address;
+       mac_dev->remove_hash_mac_addr   = dtsec_del_hash_mac_address;
+       mac_dev->set_tx_pause           = dtsec_set_tx_pause_frames;
+       mac_dev->set_rx_pause           = dtsec_accept_rx_pause_frames;
+       mac_dev->set_exception          = dtsec_set_exception;
+       mac_dev->set_allmulti           = dtsec_set_allmulti;
+       mac_dev->set_tstamp             = dtsec_set_tstamp;
+       mac_dev->set_multi              = fman_set_multi;
+       mac_dev->adjust_link            = adjust_link_dtsec;
+       mac_dev->enable                 = dtsec_enable;
+       mac_dev->disable                = dtsec_disable;
+
+       err = set_fman_mac_params(mac_dev, &params);
+       if (err)
+               goto _return;
+       params.internal_phy_node = of_parse_phandle(mac_node, "tbi-handle", 0);
+
+       mac_dev->fman_mac = dtsec_config(&params);
+       if (!mac_dev->fman_mac) {
+               err = -EINVAL;
+               goto _return;
+       }
+
+       err = dtsec_cfg_max_frame_len(mac_dev->fman_mac, fman_get_max_frm());
+       if (err < 0)
+               goto _return_fm_mac_free;
+
+       err = dtsec_cfg_pad_and_crc(mac_dev->fman_mac, true);
+       if (err < 0)
+               goto _return_fm_mac_free;
+
+       err = dtsec_init(mac_dev->fman_mac);
+       if (err < 0)
+               goto _return_fm_mac_free;
+
+       /* For 1G MAC, disable by default the MIB counters overflow interrupt */
+       err = mac_dev->set_exception(mac_dev->fman_mac,
+                                    FM_MAC_EX_1G_RX_MIB_CNT_OVFL, false);
+       if (err < 0)
+               goto _return_fm_mac_free;
+
+       err = dtsec_get_version(mac_dev->fman_mac, &version);
+       if (err < 0)
+               goto _return_fm_mac_free;
+
+       dev_info(mac_dev->dev, "FMan dTSEC version: 0x%08x\n", version);
+
+       goto _return;
+
+_return_fm_mac_free:
+       dtsec_free(mac_dev->fman_mac);
+
+_return:
+       return err;
+}
index f072cdc560ba4959e49dc849e7a1e692a5adc180..cf3e683c089c53a9827e8fafad2d97ea7a013324 100644 (file)
@@ -8,27 +8,9 @@
 
 #include "fman_mac.h"
 
-struct fman_mac *dtsec_config(struct fman_mac_params *params);
-int dtsec_set_promiscuous(struct fman_mac *dtsec, bool new_val);
-int dtsec_modify_mac_address(struct fman_mac *dtsec, const enet_addr_t *enet_addr);
-int dtsec_adjust_link(struct fman_mac *dtsec,
-                     u16 speed);
-int dtsec_restart_autoneg(struct fman_mac *dtsec);
-int dtsec_cfg_max_frame_len(struct fman_mac *dtsec, u16 new_val);
-int dtsec_cfg_pad_and_crc(struct fman_mac *dtsec, bool new_val);
-int dtsec_enable(struct fman_mac *dtsec);
-int dtsec_disable(struct fman_mac *dtsec);
-int dtsec_init(struct fman_mac *dtsec);
-int dtsec_free(struct fman_mac *dtsec);
-int dtsec_accept_rx_pause_frames(struct fman_mac *dtsec, bool en);
-int dtsec_set_tx_pause_frames(struct fman_mac *dtsec, u8 priority,
-                             u16 pause_time, u16 thresh_time);
-int dtsec_set_exception(struct fman_mac *dtsec,
-                       enum fman_mac_exceptions exception, bool enable);
-int dtsec_add_hash_mac_address(struct fman_mac *dtsec, enet_addr_t *eth_addr);
-int dtsec_del_hash_mac_address(struct fman_mac *dtsec, enet_addr_t *eth_addr);
-int dtsec_get_version(struct fman_mac *dtsec, u32 *mac_version);
-int dtsec_set_allmulti(struct fman_mac *dtsec, bool enable);
-int dtsec_set_tstamp(struct fman_mac *dtsec, bool enable);
+struct mac_device;
+
+int dtsec_initialization(struct mac_device *mac_dev,
+                        struct device_node *mac_node);
 
 #endif /* __DTSEC_H */
index c34da49aed31d59a4498fe6eeb1e7ab2c45f191d..fc5abd65f620ee23eb38370932093e20a4ffd818 100644 (file)
@@ -7,6 +7,7 @@
 
 #include "fman_memac.h"
 #include "fman.h"
+#include "mac.h"
 
 #include <linux/slab.h>
 #include <linux/io.h>
@@ -774,6 +775,23 @@ int memac_adjust_link(struct fman_mac *memac, u16 speed)
        return 0;
 }
 
+static void adjust_link_memac(struct mac_device *mac_dev)
+{
+       struct phy_device *phy_dev = mac_dev->phy_dev;
+       struct fman_mac *fman_mac;
+       bool rx_pause, tx_pause;
+       int err;
+
+       fman_mac = mac_dev->fman_mac;
+       memac_adjust_link(fman_mac, phy_dev->speed);
+
+       fman_get_pause_cfg(mac_dev, &rx_pause, &tx_pause);
+       err = fman_set_mac_active_pause(mac_dev, rx_pause, tx_pause);
+       if (err < 0)
+               dev_err(mac_dev->dev, "fman_set_mac_active_pause() = %d\n",
+                       err);
+}
+
 int memac_cfg_max_frame_len(struct fman_mac *memac, u16 new_val)
 {
        if (is_init_done(memac->memac_drv_param))
@@ -995,7 +1013,7 @@ int memac_init(struct fman_mac *memac)
        u8 i;
        enet_addr_t eth_addr;
        bool slow_10g_if = false;
-       struct fixed_phy_status *fixed_link;
+       struct fixed_phy_status *fixed_link = NULL;
        int err;
        u32 reg32 = 0;
 
@@ -1178,3 +1196,96 @@ struct fman_mac *memac_config(struct fman_mac_params *params)
 
        return memac;
 }
+
+int memac_initialization(struct mac_device *mac_dev,
+                        struct device_node *mac_node)
+{
+       int                      err;
+       struct fman_mac_params   params;
+       struct fixed_phy_status *fixed_link;
+
+       mac_dev->set_promisc            = memac_set_promiscuous;
+       mac_dev->change_addr            = memac_modify_mac_address;
+       mac_dev->add_hash_mac_addr      = memac_add_hash_mac_address;
+       mac_dev->remove_hash_mac_addr   = memac_del_hash_mac_address;
+       mac_dev->set_tx_pause           = memac_set_tx_pause_frames;
+       mac_dev->set_rx_pause           = memac_accept_rx_pause_frames;
+       mac_dev->set_exception          = memac_set_exception;
+       mac_dev->set_allmulti           = memac_set_allmulti;
+       mac_dev->set_tstamp             = memac_set_tstamp;
+       mac_dev->set_multi              = fman_set_multi;
+       mac_dev->adjust_link            = adjust_link_memac;
+       mac_dev->enable                 = memac_enable;
+       mac_dev->disable                = memac_disable;
+
+       err = set_fman_mac_params(mac_dev, &params);
+       if (err)
+               goto _return;
+       params.internal_phy_node = of_parse_phandle(mac_node, "pcsphy-handle", 0);
+
+       if (params.max_speed == SPEED_10000)
+               params.phy_if = PHY_INTERFACE_MODE_XGMII;
+
+       mac_dev->fman_mac = memac_config(&params);
+       if (!mac_dev->fman_mac) {
+               err = -EINVAL;
+               goto _return;
+       }
+
+       err = memac_cfg_max_frame_len(mac_dev->fman_mac, fman_get_max_frm());
+       if (err < 0)
+               goto _return_fm_mac_free;
+
+       err = memac_cfg_reset_on_init(mac_dev->fman_mac, true);
+       if (err < 0)
+               goto _return_fm_mac_free;
+
+       if (!mac_dev->phy_node && of_phy_is_fixed_link(mac_node)) {
+               struct phy_device *phy;
+
+               err = of_phy_register_fixed_link(mac_node);
+               if (err)
+                       goto _return_fm_mac_free;
+
+               fixed_link = kzalloc(sizeof(*fixed_link), GFP_KERNEL);
+               if (!fixed_link) {
+                       err = -ENOMEM;
+                       goto _return_fm_mac_free;
+               }
+
+               mac_dev->phy_node = of_node_get(mac_node);
+               phy = of_phy_find_device(mac_dev->phy_node);
+               if (!phy) {
+                       err = -EINVAL;
+                       of_node_put(mac_dev->phy_node);
+                       goto _return_fixed_link_free;
+               }
+
+               fixed_link->link = phy->link;
+               fixed_link->speed = phy->speed;
+               fixed_link->duplex = phy->duplex;
+               fixed_link->pause = phy->pause;
+               fixed_link->asym_pause = phy->asym_pause;
+
+               put_device(&phy->mdio.dev);
+
+               err = memac_cfg_fixed_link(mac_dev->fman_mac, fixed_link);
+               if (err < 0)
+                       goto _return_fixed_link_free;
+       }
+
+       err = memac_init(mac_dev->fman_mac);
+       if (err < 0)
+               goto _return_fixed_link_free;
+
+       dev_info(mac_dev->dev, "FMan MEMAC\n");
+
+       goto _return;
+
+_return_fixed_link_free:
+       kfree(fixed_link);
+_return_fm_mac_free:
+       memac_free(mac_dev->fman_mac);
+_return:
+       return err;
+}
index 535ecd2b2ab438360f52b68753af5ce4c7720db7..a58215a3b1d98d181f483080b05ab099c16b2ffb 100644 (file)
 #include <linux/netdevice.h>
 #include <linux/phy_fixed.h>
 
-struct fman_mac *memac_config(struct fman_mac_params *params);
-int memac_set_promiscuous(struct fman_mac *memac, bool new_val);
-int memac_modify_mac_address(struct fman_mac *memac, const enet_addr_t *enet_addr);
-int memac_adjust_link(struct fman_mac *memac, u16 speed);
-int memac_cfg_max_frame_len(struct fman_mac *memac, u16 new_val);
-int memac_cfg_reset_on_init(struct fman_mac *memac, bool enable);
-int memac_cfg_fixed_link(struct fman_mac *memac,
-                        struct fixed_phy_status *fixed_link);
-int memac_enable(struct fman_mac *memac);
-int memac_disable(struct fman_mac *memac);
-int memac_init(struct fman_mac *memac);
-int memac_free(struct fman_mac *memac);
-int memac_accept_rx_pause_frames(struct fman_mac *memac, bool en);
-int memac_set_tx_pause_frames(struct fman_mac *memac, u8 priority,
-                             u16 pause_time, u16 thresh_time);
-int memac_set_exception(struct fman_mac *memac,
-                       enum fman_mac_exceptions exception, bool enable);
-int memac_add_hash_mac_address(struct fman_mac *memac, enet_addr_t *eth_addr);
-int memac_del_hash_mac_address(struct fman_mac *memac, enet_addr_t *eth_addr);
-int memac_set_allmulti(struct fman_mac *memac, bool enable);
-int memac_set_tstamp(struct fman_mac *memac, bool enable);
+struct mac_device;
+
+int memac_initialization(struct mac_device *mac_dev,
+                        struct device_node *mac_node);
 
 #endif /* __MEMAC_H */
index 2b38d22c863d1efcd4168e65e1527cb78d105b72..2f2c4ef45f6f34ba23a0b43de66341a405d1e950 100644 (file)
@@ -7,6 +7,7 @@
 
 #include "fman_tgec.h"
 #include "fman.h"
+#include "mac.h"
 
 #include <linux/slab.h>
 #include <linux/bitrev.h>
@@ -609,6 +610,10 @@ int tgec_del_hash_mac_address(struct fman_mac *tgec, enet_addr_t *eth_addr)
        return 0;
 }
 
+static void adjust_link_void(struct mac_device *mac_dev)
+{
+}
+
 int tgec_get_version(struct fman_mac *tgec, u32 *mac_version)
 {
        struct tgec_regs __iomem *regs = tgec->regs;
@@ -794,3 +799,63 @@ struct fman_mac *tgec_config(struct fman_mac_params *params)
 
        return tgec;
 }
+
+int tgec_initialization(struct mac_device *mac_dev,
+                       struct device_node *mac_node)
+{
+       int err;
+       struct fman_mac_params  params;
+       u32                     version;
+
+       mac_dev->set_promisc            = tgec_set_promiscuous;
+       mac_dev->change_addr            = tgec_modify_mac_address;
+       mac_dev->add_hash_mac_addr      = tgec_add_hash_mac_address;
+       mac_dev->remove_hash_mac_addr   = tgec_del_hash_mac_address;
+       mac_dev->set_tx_pause           = tgec_set_tx_pause_frames;
+       mac_dev->set_rx_pause           = tgec_accept_rx_pause_frames;
+       mac_dev->set_exception          = tgec_set_exception;
+       mac_dev->set_allmulti           = tgec_set_allmulti;
+       mac_dev->set_tstamp             = tgec_set_tstamp;
+       mac_dev->set_multi              = fman_set_multi;
+       mac_dev->adjust_link            = adjust_link_void;
+       mac_dev->enable                 = tgec_enable;
+       mac_dev->disable                = tgec_disable;
+
+       err = set_fman_mac_params(mac_dev, &params);
+       if (err)
+               goto _return;
+
+       mac_dev->fman_mac = tgec_config(&params);
+       if (!mac_dev->fman_mac) {
+               err = -EINVAL;
+               goto _return;
+       }
+
+       err = tgec_cfg_max_frame_len(mac_dev->fman_mac, fman_get_max_frm());
+       if (err < 0)
+               goto _return_fm_mac_free;
+
+       err = tgec_init(mac_dev->fman_mac);
+       if (err < 0)
+               goto _return_fm_mac_free;
+
+       /* For 10G MAC, disable Tx ECC exception */
+       err = mac_dev->set_exception(mac_dev->fman_mac,
+                                    FM_MAC_EX_10G_TX_ECC_ER, false);
+       if (err < 0)
+               goto _return_fm_mac_free;
+
+       err = tgec_get_version(mac_dev->fman_mac, &version);
+       if (err < 0)
+               goto _return_fm_mac_free;
+
+       pr_info("FMan XGEC version: 0x%08x\n", version);
+
+       goto _return;
+
+_return_fm_mac_free:
+       tgec_free(mac_dev->fman_mac);
+
+_return:
+       return err;
+}
index 5b256758cbecf52333025073741a9b92d660b77f..2e45b9fea352b3091c5671bda093cbe87ef7b061 100644 (file)
@@ -8,23 +8,9 @@
 
 #include "fman_mac.h"
 
-struct fman_mac *tgec_config(struct fman_mac_params *params);
-int tgec_set_promiscuous(struct fman_mac *tgec, bool new_val);
-int tgec_modify_mac_address(struct fman_mac *tgec, const enet_addr_t *enet_addr);
-int tgec_cfg_max_frame_len(struct fman_mac *tgec, u16 new_val);
-int tgec_enable(struct fman_mac *tgec);
-int tgec_disable(struct fman_mac *tgec);
-int tgec_init(struct fman_mac *tgec);
-int tgec_free(struct fman_mac *tgec);
-int tgec_accept_rx_pause_frames(struct fman_mac *tgec, bool en);
-int tgec_set_tx_pause_frames(struct fman_mac *tgec, u8 priority,
-                            u16 pause_time, u16 thresh_time);
-int tgec_set_exception(struct fman_mac *tgec,
-                      enum fman_mac_exceptions exception, bool enable);
-int tgec_add_hash_mac_address(struct fman_mac *tgec, enet_addr_t *eth_addr);
-int tgec_del_hash_mac_address(struct fman_mac *tgec, enet_addr_t *eth_addr);
-int tgec_get_version(struct fman_mac *tgec, u32 *mac_version);
-int tgec_set_allmulti(struct fman_mac *tgec, bool enable);
-int tgec_set_tstamp(struct fman_mac *tgec, bool enable);
+struct mac_device;
+
+int tgec_initialization(struct mac_device *mac_dev,
+                       struct device_node *mac_node);
 
 #endif /* __TGEC_H */
index f9a3f85760fb9914811fcd32fd0c98093c298a31..7afedd4995c9ea7c94ed194fe14c7369edbfd814 100644 (file)
@@ -216,267 +216,6 @@ void fman_get_pause_cfg(struct mac_device *mac_dev, bool *rx_pause,
 }
 EXPORT_SYMBOL(fman_get_pause_cfg);
 
-static void adjust_link_void(struct mac_device *mac_dev)
-{
-}
-
-static void adjust_link_dtsec(struct mac_device *mac_dev)
-{
-       struct phy_device *phy_dev = mac_dev->phy_dev;
-       struct fman_mac *fman_mac;
-       bool rx_pause, tx_pause;
-       int err;
-
-       fman_mac = mac_dev->fman_mac;
-       if (!phy_dev->link) {
-               dtsec_restart_autoneg(fman_mac);
-
-               return;
-       }
-
-       dtsec_adjust_link(fman_mac, phy_dev->speed);
-       fman_get_pause_cfg(mac_dev, &rx_pause, &tx_pause);
-       err = fman_set_mac_active_pause(mac_dev, rx_pause, tx_pause);
-       if (err < 0)
-               dev_err(mac_dev->dev, "fman_set_mac_active_pause() = %d\n",
-                       err);
-}
-
-static void adjust_link_memac(struct mac_device *mac_dev)
-{
-       struct phy_device *phy_dev = mac_dev->phy_dev;
-       struct fman_mac *fman_mac;
-       bool rx_pause, tx_pause;
-       int err;
-
-       fman_mac = mac_dev->fman_mac;
-       memac_adjust_link(fman_mac, phy_dev->speed);
-
-       fman_get_pause_cfg(mac_dev, &rx_pause, &tx_pause);
-       err = fman_set_mac_active_pause(mac_dev, rx_pause, tx_pause);
-       if (err < 0)
-               dev_err(mac_dev->dev, "fman_set_mac_active_pause() = %d\n",
-                       err);
-}
-
-static int tgec_initialization(struct mac_device *mac_dev,
-                              struct device_node *mac_node)
-{
-       int err;
-       struct fman_mac_params  params;
-       u32                     version;
-
-       mac_dev->set_promisc            = tgec_set_promiscuous;
-       mac_dev->change_addr            = tgec_modify_mac_address;
-       mac_dev->add_hash_mac_addr      = tgec_add_hash_mac_address;
-       mac_dev->remove_hash_mac_addr   = tgec_del_hash_mac_address;
-       mac_dev->set_tx_pause           = tgec_set_tx_pause_frames;
-       mac_dev->set_rx_pause           = tgec_accept_rx_pause_frames;
-       mac_dev->set_exception          = tgec_set_exception;
-       mac_dev->set_allmulti           = tgec_set_allmulti;
-       mac_dev->set_tstamp             = tgec_set_tstamp;
-       mac_dev->set_multi              = fman_set_multi;
-       mac_dev->adjust_link            = adjust_link_void;
-       mac_dev->enable                 = tgec_enable;
-       mac_dev->disable                = tgec_disable;
-
-       err = set_fman_mac_params(mac_dev, &params);
-       if (err)
-               goto _return;
-
-       mac_dev->fman_mac = tgec_config(&params);
-       if (!mac_dev->fman_mac) {
-               err = -EINVAL;
-               goto _return;
-       }
-
-       err = tgec_cfg_max_frame_len(mac_dev->fman_mac, fman_get_max_frm());
-       if (err < 0)
-               goto _return_fm_mac_free;
-
-       err = tgec_init(mac_dev->fman_mac);
-       if (err < 0)
-               goto _return_fm_mac_free;
-
-       /* For 10G MAC, disable Tx ECC exception */
-       err = mac_dev->set_exception(mac_dev->fman_mac,
-                                    FM_MAC_EX_10G_TX_ECC_ER, false);
-       if (err < 0)
-               goto _return_fm_mac_free;
-
-       err = tgec_get_version(mac_dev->fman_mac, &version);
-       if (err < 0)
-               goto _return_fm_mac_free;
-
-       dev_info(mac_dev->dev, "FMan XGEC version: 0x%08x\n", version);
-
-       goto _return;
-
-_return_fm_mac_free:
-       tgec_free(mac_dev->fman_mac);
-
-_return:
-       return err;
-}
-
-static int dtsec_initialization(struct mac_device *mac_dev,
-                               struct device_node *mac_node)
-{
-       int                     err;
-       struct fman_mac_params  params;
-       u32                     version;
-
-       mac_dev->set_promisc            = dtsec_set_promiscuous;
-       mac_dev->change_addr            = dtsec_modify_mac_address;
-       mac_dev->add_hash_mac_addr      = dtsec_add_hash_mac_address;
-       mac_dev->remove_hash_mac_addr   = dtsec_del_hash_mac_address;
-       mac_dev->set_tx_pause           = dtsec_set_tx_pause_frames;
-       mac_dev->set_rx_pause           = dtsec_accept_rx_pause_frames;
-       mac_dev->set_exception          = dtsec_set_exception;
-       mac_dev->set_allmulti           = dtsec_set_allmulti;
-       mac_dev->set_tstamp             = dtsec_set_tstamp;
-       mac_dev->set_multi              = fman_set_multi;
-       mac_dev->adjust_link            = adjust_link_dtsec;
-       mac_dev->enable                 = dtsec_enable;
-       mac_dev->disable                = dtsec_disable;
-
-       err = set_fman_mac_params(mac_dev, &params);
-       if (err)
-               goto _return;
-       params.internal_phy_node = of_parse_phandle(mac_node, "tbi-handle", 0);
-
-       mac_dev->fman_mac = dtsec_config(&params);
-       if (!mac_dev->fman_mac) {
-               err = -EINVAL;
-               goto _return;
-       }
-
-       err = dtsec_cfg_max_frame_len(mac_dev->fman_mac, fman_get_max_frm());
-       if (err < 0)
-               goto _return_fm_mac_free;
-
-       err = dtsec_cfg_pad_and_crc(mac_dev->fman_mac, true);
-       if (err < 0)
-               goto _return_fm_mac_free;
-
-       err = dtsec_init(mac_dev->fman_mac);
-       if (err < 0)
-               goto _return_fm_mac_free;
-
-       /* For 1G MAC, disable by default the MIB counters overflow interrupt */
-       err = mac_dev->set_exception(mac_dev->fman_mac,
-                                    FM_MAC_EX_1G_RX_MIB_CNT_OVFL, false);
-       if (err < 0)
-               goto _return_fm_mac_free;
-
-       err = dtsec_get_version(mac_dev->fman_mac, &version);
-       if (err < 0)
-               goto _return_fm_mac_free;
-
-       dev_info(mac_dev->dev, "FMan dTSEC version: 0x%08x\n", version);
-
-       goto _return;
-
-_return_fm_mac_free:
-       dtsec_free(mac_dev->fman_mac);
-
-_return:
-       return err;
-}
-
-static int memac_initialization(struct mac_device *mac_dev,
-                               struct device_node *mac_node)
-{
-       int                      err;
-       struct fman_mac_params   params;
-       struct fixed_phy_status *fixed_link = NULL;
-
-       mac_dev->set_promisc            = memac_set_promiscuous;
-       mac_dev->change_addr            = memac_modify_mac_address;
-       mac_dev->add_hash_mac_addr      = memac_add_hash_mac_address;
-       mac_dev->remove_hash_mac_addr   = memac_del_hash_mac_address;
-       mac_dev->set_tx_pause           = memac_set_tx_pause_frames;
-       mac_dev->set_rx_pause           = memac_accept_rx_pause_frames;
-       mac_dev->set_exception          = memac_set_exception;
-       mac_dev->set_allmulti           = memac_set_allmulti;
-       mac_dev->set_tstamp             = memac_set_tstamp;
-       mac_dev->set_multi              = fman_set_multi;
-       mac_dev->adjust_link            = adjust_link_memac;
-       mac_dev->enable                 = memac_enable;
-       mac_dev->disable                = memac_disable;
-
-       err = set_fman_mac_params(mac_dev, &params);
-       if (err)
-               goto _return;
-       params.internal_phy_node = of_parse_phandle(mac_node, "pcsphy-handle", 0);
-
-       if (params.max_speed == SPEED_10000)
-               params.phy_if = PHY_INTERFACE_MODE_XGMII;
-
-       mac_dev->fman_mac = memac_config(&params);
-       if (!mac_dev->fman_mac) {
-               err = -EINVAL;
-               goto _return;
-       }
-
-       err = memac_cfg_max_frame_len(mac_dev->fman_mac, fman_get_max_frm());
-       if (err < 0)
-               goto _return_fm_mac_free;
-
-       err = memac_cfg_reset_on_init(mac_dev->fman_mac, true);
-       if (err < 0)
-               goto _return_fm_mac_free;
-
-       if (!mac_dev->phy_node && of_phy_is_fixed_link(mac_node)) {
-               struct phy_device *phy;
-
-               err = of_phy_register_fixed_link(mac_node);
-               if (err)
-                       goto _return_fm_mac_free;
-
-               fixed_link = kzalloc(sizeof(*fixed_link), GFP_KERNEL);
-               if (!fixed_link) {
-                       err = -ENOMEM;
-                       goto _return_fm_mac_free;
-               }
-
-               mac_dev->phy_node = of_node_get(mac_node);
-               phy = of_phy_find_device(mac_dev->phy_node);
-               if (!phy) {
-                       err = -EINVAL;
-                       of_node_put(mac_dev->phy_node);
-                       goto _return_fixed_link_free;
-               }
-
-               fixed_link->link = phy->link;
-               fixed_link->speed = phy->speed;
-               fixed_link->duplex = phy->duplex;
-               fixed_link->pause = phy->pause;
-               fixed_link->asym_pause = phy->asym_pause;
-
-               put_device(&phy->mdio.dev);
-
-               err = memac_cfg_fixed_link(mac_dev->fman_mac, fixed_link);
-               if (err < 0)
-                       goto _return_fixed_link_free;
-       }
-
-       err = memac_init(mac_dev->fman_mac);
-       if (err < 0)
-               goto _return_fixed_link_free;
-
-       dev_info(mac_dev->dev, "FMan MEMAC\n");
-
-       goto _return;
-
-_return_fixed_link_free:
-       kfree(fixed_link);
-_return_fm_mac_free:
-       memac_free(mac_dev->fman_mac);
-_return:
-       return err;
-}
-
 #define DTSEC_SUPPORTED \
        (SUPPORTED_10baseT_Half \
        | SUPPORTED_10baseT_Full \