#define CPSW_XDP_CONSUMED              1
 #define CPSW_XDP_PASS                  0
 
+static int cpsw_slave_index_priv(struct cpsw_common *cpsw,
+                                struct cpsw_priv *priv)
+{
+       return cpsw->data.dual_emac ? priv->emac_port : cpsw->data.active_slave;
+}
+
+static int cpsw_get_slave_port(u32 slave_num)
+{
+       return slave_num + 1;
+}
+
 static int cpsw_ndo_vlan_rx_add_vid(struct net_device *ndev,
                                    __be16 proto, u16 vid);
 
                return -ENOMEM;
 
        platform_set_drvdata(pdev, cpsw);
+       cpsw_slave_index = cpsw_slave_index_priv;
+
        cpsw->dev = dev;
 
        mode = devm_gpiod_get_array_optional(dev, "mode", GPIOD_OUT_LOW);
 
 #include "cpsw_sl.h"
 #include "davinci_cpdma.h"
 
+int (*cpsw_slave_index)(struct cpsw_common *cpsw, struct cpsw_priv *priv);
+
 int cpsw_init_common(struct cpsw_common *cpsw, void __iomem *ss_regs,
                     int ale_ageout, phys_addr_t desc_mem_phys,
                     int descs_pool_size)
 
 #define ndev_to_cpsw(ndev) (((struct cpsw_priv *)netdev_priv(ndev))->cpsw)
 #define napi_to_cpsw(napi)     container_of(napi, struct cpsw_common, napi)
 
-#define cpsw_slave_index(cpsw, priv)                           \
-               ((cpsw->data.dual_emac) ? priv->emac_port :     \
-               cpsw->data.active_slave)
-
-static inline int cpsw_get_slave_port(u32 slave_num)
-{
-       return slave_num + 1;
-}
+extern int (*cpsw_slave_index)(struct cpsw_common *cpsw,
+                              struct cpsw_priv *priv);
 
 struct addr_sync_ctx {
        struct net_device *ndev;