#include <linux/timer.h>
#include <linux/of_platform.h>
#include <linux/of_address.h>
+#include <linux/of_mdio.h>
#include <linux/clk.h>
#include <linux/string.h>
#include <linux/reset.h>
struct device_node *np = pdev->dev.of_node;
struct device_node *pnp;
struct device_node *mdio_node = NULL;
- struct platform_device *mdio_plat = NULL;
struct mii_bus *miibus = NULL;
- struct edma_mdio_data *mdio_data = NULL;
int i, j, k, err = 0;
int portid_bmp;
int idx = 0, idx_mac = 0;
goto err_mdiobus_init_fail;
}
- mdio_plat = of_find_device_by_node(mdio_node);
- if (!mdio_plat) {
- dev_err(&pdev->dev,
- "cannot find platform device from mdio node");
- of_node_put(mdio_node);
- err = -EIO;
- goto err_mdiobus_init_fail;
- }
-
- mdio_data = dev_get_drvdata(&mdio_plat->dev);
- if (!mdio_data) {
- dev_err(&pdev->dev,
- "cannot get mii bus reference from device data");
- of_node_put(mdio_node);
- err = -EIO;
- goto err_mdiobus_init_fail;
- }
-
- miibus = mdio_data->mii_bus;
+ miibus = of_mdio_find_bus(mdio_node);
+ if (!miibus)
+ return -EINVAL;
}
if (of_property_read_bool(np, "qcom,single-phy") &&
}
for_each_available_child_of_node(np, pnp) {
- const char *mac_addr;
-
/* this check is needed if parent and daughter dts have
* different number of gmac nodes
*/
break;
}
- mac_addr = of_get_mac_address(pnp);
- if (!IS_ERR(mac_addr))
- memcpy(edma_netdev[idx_mac]->dev_addr, mac_addr, ETH_ALEN);
+ of_get_mac_address(pnp, edma_netdev[idx_mac]->dev_addr);
idx_mac++;
}
edma_netdev[i]->max_mtu = 9000;
edma_netdev[i]->features = NETIF_F_HW_CSUM | NETIF_F_RXCSUM
| NETIF_F_HW_VLAN_CTAG_RX | NETIF_F_SG |
- NETIF_F_TSO | NETIF_F_GRO;
+ NETIF_F_TSO | NETIF_F_GRO | NETIF_F_HW_VLAN_CTAG_TX;
edma_netdev[i]->hw_features = NETIF_F_HW_CSUM | NETIF_F_RXCSUM |
NETIF_F_HW_VLAN_CTAG_RX
| NETIF_F_SG | NETIF_F_TSO | NETIF_F_GRO;
NETIF_F_TSO | NETIF_F_GRO;
#ifdef CONFIG_RFS_ACCEL
- edma_netdev[i]->features |= NETIF_F_NTUPLE;
- edma_netdev[i]->hw_features |= NETIF_F_NTUPLE;
- edma_netdev[i]->vlan_features |= NETIF_F_NTUPLE;
- edma_netdev[i]->wanted_features |= NETIF_F_NTUPLE;
+ edma_netdev[i]->features |= NETIF_F_NTUPLE | NETIF_F_RXHASH;
+ edma_netdev[i]->hw_features |= NETIF_F_NTUPLE | NETIF_F_RXHASH;
+ edma_netdev[i]->vlan_features |= NETIF_F_NTUPLE | NETIF_F_RXHASH;
+ edma_netdev[i]->wanted_features |= NETIF_F_NTUPLE | NETIF_F_RXHASH;
#endif
edma_set_ethtool_ops(edma_netdev[i]);