Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 785bf6f7 authored by Jonas Gorski's avatar Jonas Gorski Committed by David S. Miller
Browse files

net: mv643xx_eth: do not use port number as platform device id



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: default avatarJonas Gorski <jogo@openwrt.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 8c2f414a
Loading
Loading
Loading
Loading
+11 −2
Original line number Original line Diff line number Diff line
@@ -2483,6 +2483,7 @@ static int mv643xx_eth_shared_of_add_port(struct platform_device *pdev,
	struct resource res;
	struct resource res;
	const char *mac_addr;
	const char *mac_addr;
	int ret;
	int ret;
	int dev_num = 0;


	memset(&ppd, 0, sizeof(ppd));
	memset(&ppd, 0, sizeof(ppd));
	ppd.shared = pdev;
	ppd.shared = pdev;
@@ -2503,6 +2504,14 @@ static int mv643xx_eth_shared_of_add_port(struct platform_device *pdev,
		return -EINVAL;
		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);
	mac_addr = of_get_mac_address(pnp);
	if (mac_addr)
	if (mac_addr)
		memcpy(ppd.mac_addr, mac_addr, 6);
		memcpy(ppd.mac_addr, mac_addr, 6);
@@ -2521,7 +2530,7 @@ static int mv643xx_eth_shared_of_add_port(struct platform_device *pdev,
		of_property_read_u32(pnp, "duplex", &ppd.duplex);
		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)
	if (!ppdev)
		return -ENOMEM;
		return -ENOMEM;
	ppdev->dev.coherent_dma_mask = DMA_BIT_MASK(32);
	ppdev->dev.coherent_dma_mask = DMA_BIT_MASK(32);
@@ -2538,7 +2547,7 @@ static int mv643xx_eth_shared_of_add_port(struct platform_device *pdev,
	if (ret)
	if (ret)
		goto port_err;
		goto port_err;


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


	return 0;
	return 0;