Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
This commit is contained in:
@@ -2026,45 +2026,54 @@ static int cpsw_probe_dt(struct cpsw_priv *priv,
|
||||
for_each_child_of_node(node, slave_node) {
|
||||
struct cpsw_slave_data *slave_data = data->slave_data + i;
|
||||
const void *mac_addr = NULL;
|
||||
u32 phyid;
|
||||
int lenp;
|
||||
const __be32 *parp;
|
||||
struct device_node *mdio_node;
|
||||
struct platform_device *mdio;
|
||||
|
||||
/* This is no slave child node, continue */
|
||||
if (strcmp(slave_node->name, "slave"))
|
||||
continue;
|
||||
|
||||
priv->phy_node = of_parse_phandle(slave_node, "phy-handle", 0);
|
||||
parp = of_get_property(slave_node, "phy_id", &lenp);
|
||||
if (of_phy_is_fixed_link(slave_node)) {
|
||||
struct phy_device *pd;
|
||||
struct device_node *phy_node;
|
||||
struct phy_device *phy_dev;
|
||||
|
||||
/* In the case of a fixed PHY, the DT node associated
|
||||
* to the PHY is the Ethernet MAC DT node.
|
||||
*/
|
||||
ret = of_phy_register_fixed_link(slave_node);
|
||||
if (ret)
|
||||
return ret;
|
||||
pd = of_phy_find_device(slave_node);
|
||||
if (!pd)
|
||||
phy_node = of_node_get(slave_node);
|
||||
phy_dev = of_phy_find_device(phy_node);
|
||||
if (!phy_dev)
|
||||
return -ENODEV;
|
||||
snprintf(slave_data->phy_id, sizeof(slave_data->phy_id),
|
||||
PHY_ID_FMT, pd->bus->id, pd->phy_id);
|
||||
PHY_ID_FMT, phy_dev->bus->id, phy_dev->addr);
|
||||
} else if (parp) {
|
||||
u32 phyid;
|
||||
struct device_node *mdio_node;
|
||||
struct platform_device *mdio;
|
||||
|
||||
if (lenp != (sizeof(__be32) * 2)) {
|
||||
dev_err(&pdev->dev, "Invalid slave[%d] phy_id property\n", i);
|
||||
goto no_phy_slave;
|
||||
}
|
||||
mdio_node = of_find_node_by_phandle(be32_to_cpup(parp));
|
||||
phyid = be32_to_cpup(parp+1);
|
||||
mdio = of_find_device_by_node(mdio_node);
|
||||
of_node_put(mdio_node);
|
||||
if (!mdio) {
|
||||
dev_err(&pdev->dev, "Missing mdio platform device\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
snprintf(slave_data->phy_id, sizeof(slave_data->phy_id),
|
||||
PHY_ID_FMT, mdio->name, phyid);
|
||||
} else {
|
||||
dev_err(&pdev->dev, "No slave[%d] phy_id or fixed-link property\n", i);
|
||||
goto no_phy_slave;
|
||||
}
|
||||
parp = of_get_property(slave_node, "phy_id", &lenp);
|
||||
if ((parp == NULL) || (lenp != (sizeof(void *) * 2))) {
|
||||
dev_err(&pdev->dev, "Missing slave[%d] phy_id property\n", i);
|
||||
goto no_phy_slave;
|
||||
}
|
||||
mdio_node = of_find_node_by_phandle(be32_to_cpup(parp));
|
||||
phyid = be32_to_cpup(parp+1);
|
||||
mdio = of_find_device_by_node(mdio_node);
|
||||
of_node_put(mdio_node);
|
||||
if (!mdio) {
|
||||
dev_err(&pdev->dev, "Missing mdio platform device\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
snprintf(slave_data->phy_id, sizeof(slave_data->phy_id),
|
||||
PHY_ID_FMT, mdio->name, phyid);
|
||||
slave_data->phy_if = of_get_phy_mode(slave_node);
|
||||
if (slave_data->phy_if < 0) {
|
||||
dev_err(&pdev->dev, "Missing or malformed slave[%d] phy-mode property\n",
|
||||
@@ -2418,7 +2427,7 @@ static int cpsw_probe(struct platform_device *pdev)
|
||||
ndev->irq = platform_get_irq(pdev, 1);
|
||||
if (ndev->irq < 0) {
|
||||
dev_err(priv->dev, "error getting irq resource\n");
|
||||
ret = -ENOENT;
|
||||
ret = ndev->irq;
|
||||
goto clean_ale_ret;
|
||||
}
|
||||
|
||||
@@ -2439,8 +2448,10 @@ static int cpsw_probe(struct platform_device *pdev)
|
||||
|
||||
/* RX IRQ */
|
||||
irq = platform_get_irq(pdev, 1);
|
||||
if (irq < 0)
|
||||
if (irq < 0) {
|
||||
ret = irq;
|
||||
goto clean_ale_ret;
|
||||
}
|
||||
|
||||
priv->irqs_table[0] = irq;
|
||||
ret = devm_request_irq(&pdev->dev, irq, cpsw_rx_interrupt,
|
||||
@@ -2452,8 +2463,10 @@ static int cpsw_probe(struct platform_device *pdev)
|
||||
|
||||
/* TX IRQ */
|
||||
irq = platform_get_irq(pdev, 2);
|
||||
if (irq < 0)
|
||||
if (irq < 0) {
|
||||
ret = irq;
|
||||
goto clean_ale_ret;
|
||||
}
|
||||
|
||||
priv->irqs_table[1] = irq;
|
||||
ret = devm_request_irq(&pdev->dev, irq, cpsw_tx_interrupt,
|
||||
|
Reference in New Issue
Block a user