Index: net/dsa/Kconfig =================================================================== --- net/dsa/Kconfig +++ linux-imx/net/dsa/Kconfig @@ -40,4 +40,9 @@ config NET_DSA_TAG_TRAILER config NET_DSA_TAG_QCA bool +config NET_DSA_SLAVE_MAC + bool "DSA Extension for Tiesse TGR" + ---help--- + This enables a Tiesse TGR specific mac assignement schema + endif Index: net/dsa/slave.c =================================================================== --- net/dsa/slave.c +++ linux-imx/net/dsa/slave.c @@ -27,6 +27,18 @@ static bool dsa_slave_dev_check(struct net_device *dev); +#ifdef CONFIG_NET_DSA_SLAVE_MAC +static inline void eth_hw_addr_assign(int port_index, + struct net_device *dst, + struct net_device *src) +{ + u64 temp = ether_addr_to_u64(src->dev_addr); + temp += port_index-1; + u64_to_ether_addr(temp, dst->dev_addr); + dst->addr_assign_type = src->addr_assign_type; +} +#endif + /* slave mii_bus handling ***************************************************/ static int dsa_slave_phy_read(struct mii_bus *bus, int addr, int reg) { @@ -1277,7 +1289,11 @@ int dsa_slave_create(struct dsa_port *po slave_dev->features = master->vlan_features | NETIF_F_HW_TC; slave_dev->hw_features |= NETIF_F_HW_TC; slave_dev->ethtool_ops = &dsa_slave_ethtool_ops; +#ifdef CONFIG_NET_DSA_SLAVE_MAC + eth_hw_addr_assign(port->index, slave_dev, master); +#else eth_hw_addr_inherit(slave_dev, master); +#endif slave_dev->priv_flags |= IFF_NO_QUEUE; slave_dev->netdev_ops = &dsa_slave_netdev_ops; slave_dev->switchdev_ops = &dsa_slave_switchdev_ops;