Skip to content

Commit

Permalink
net: mv643xx_eth: do not use port number as platform device id
Browse files Browse the repository at this point in the history
The port number is only local to the ethernet block, not global, so
there can be two ethernet blocks both using the same port, like
kirkwood with both using port 0.

Fix this by using the array index offset for the allocated platform
devices as the id.

Signed-off-by: Jonas Gorski <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
  • Loading branch information
KanjiMonster authored and davem330 committed Jul 9, 2013
1 parent 8c2f414 commit 785bf6f
Showing 1 changed file with 11 additions and 2 deletions.
13 changes: 11 additions & 2 deletions drivers/net/ethernet/marvell/mv643xx_eth.c
Original file line number Diff line number Diff line change
Expand Up @@ -2483,6 +2483,7 @@ static int mv643xx_eth_shared_of_add_port(struct platform_device *pdev,
struct resource res;
const char *mac_addr;
int ret;
int dev_num = 0;

memset(&ppd, 0, sizeof(ppd));
ppd.shared = pdev;
Expand All @@ -2503,6 +2504,14 @@ static int mv643xx_eth_shared_of_add_port(struct platform_device *pdev,
return -EINVAL;
}

while (dev_num < 3 && port_platdev[dev_num])
dev_num++;

if (dev_num == 3) {
dev_err(&pdev->dev, "too many ports registered\n");
return -EINVAL;
}

mac_addr = of_get_mac_address(pnp);
if (mac_addr)
memcpy(ppd.mac_addr, mac_addr, 6);
Expand All @@ -2521,7 +2530,7 @@ static int mv643xx_eth_shared_of_add_port(struct platform_device *pdev,
of_property_read_u32(pnp, "duplex", &ppd.duplex);
}

ppdev = platform_device_alloc(MV643XX_ETH_NAME, ppd.port_number);
ppdev = platform_device_alloc(MV643XX_ETH_NAME, dev_num);
if (!ppdev)
return -ENOMEM;
ppdev->dev.coherent_dma_mask = DMA_BIT_MASK(32);
Expand All @@ -2538,7 +2547,7 @@ static int mv643xx_eth_shared_of_add_port(struct platform_device *pdev,
if (ret)
goto port_err;

port_platdev[ppd.port_number] = ppdev;
port_platdev[dev_num] = ppdev;

return 0;

Expand Down

0 comments on commit 785bf6f

Please sign in to comment.