Skip to content

Commit e7f4dc3

Browse files
lunndavem330
authored andcommitted
mdio: Move allocation of interrupts into core
Have mdio_alloc() create the array of interrupt numbers, and initialize it to POLLING. This is what most MDIO drivers want, so allowing code to be removed from the drivers. Signed-off-by: Andrew Lunn <andrew@lunn.ch> Reviewed-by: Florian Fainelli <f.fainelli@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent 35d2aea commit e7f4dc3

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+48
-396
lines changed

arch/powerpc/platforms/82xx/ep8248e.c

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -131,23 +131,15 @@ static int ep8248e_mdio_probe(struct platform_device *ofdev)
131131
if (!bus)
132132
return -ENOMEM;
133133

134-
bus->irq = kmalloc(sizeof(int) * PHY_MAX_ADDR, GFP_KERNEL);
135-
if (bus->irq == NULL) {
136-
ret = -ENOMEM;
137-
goto err_free_bus;
138-
}
139-
140134
bus->name = "ep8248e-mdio-bitbang";
141135
bus->parent = &ofdev->dev;
142136
snprintf(bus->id, MII_BUS_ID_SIZE, "%x", res.start);
143137

144138
ret = of_mdiobus_register(bus, ofdev->dev.of_node);
145139
if (ret)
146-
goto err_free_irq;
140+
goto err_free_bus;
147141

148142
return 0;
149-
err_free_irq:
150-
kfree(bus->irq);
151143
err_free_bus:
152144
free_mdio_bitbang(bus);
153145
return ret;

arch/powerpc/platforms/pasemi/gpio_mdio.c

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@ static void __iomem *gpio_regs;
4141
struct gpio_priv {
4242
int mdc_pin;
4343
int mdio_pin;
44-
int mdio_irqs[PHY_MAX_ADDR];
4544
};
4645

4746
#define MDC_PIN(bus) (((struct gpio_priv *)bus->priv)->mdc_pin)
@@ -245,8 +244,6 @@ static int gpio_mdio_probe(struct platform_device *ofdev)
245244
snprintf(new_bus->id, MII_BUS_ID_SIZE, "%x", *prop);
246245
new_bus->priv = priv;
247246

248-
new_bus->irq = priv->mdio_irqs;
249-
250247
prop = of_get_property(np, "mdc-pin", NULL);
251248
priv->mdc_pin = *prop;
252249

drivers/net/ethernet/8390/ax88796.c

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -627,7 +627,7 @@ static int ax_mii_init(struct net_device *dev)
627627
struct platform_device *pdev = to_platform_device(dev->dev.parent);
628628
struct ei_device *ei_local = netdev_priv(dev);
629629
struct ax_device *ax = to_ax_dev(dev);
630-
int err, i;
630+
int err;
631631

632632
ax->bb_ctrl.ops = &bb_ops;
633633
ax->addr_memr = ei_local->mem + AX_MEMR;
@@ -642,23 +642,12 @@ static int ax_mii_init(struct net_device *dev)
642642
snprintf(ax->mii_bus->id, MII_BUS_ID_SIZE, "%s-%x",
643643
pdev->name, pdev->id);
644644

645-
ax->mii_bus->irq = kmalloc(sizeof(int) * PHY_MAX_ADDR, GFP_KERNEL);
646-
if (!ax->mii_bus->irq) {
647-
err = -ENOMEM;
648-
goto out_free_mdio_bitbang;
649-
}
650-
651-
for (i = 0; i < PHY_MAX_ADDR; i++)
652-
ax->mii_bus->irq[i] = PHY_POLL;
653-
654645
err = mdiobus_register(ax->mii_bus);
655646
if (err)
656-
goto out_free_irq;
647+
goto out_free_mdio_bitbang;
657648

658649
return 0;
659650

660-
out_free_irq:
661-
kfree(ax->mii_bus->irq);
662651
out_free_mdio_bitbang:
663652
free_mdio_bitbang(ax->mii_bus);
664653
out:

drivers/net/ethernet/adi/bfin_mac.c

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1838,12 +1838,6 @@ static int bfin_mii_bus_probe(struct platform_device *pdev)
18381838

18391839
snprintf(miibus->id, MII_BUS_ID_SIZE, "%s-%x",
18401840
pdev->name, pdev->id);
1841-
miibus->irq = kmalloc(sizeof(int)*PHY_MAX_ADDR, GFP_KERNEL);
1842-
if (!miibus->irq)
1843-
goto out_err_irq_alloc;
1844-
1845-
for (i = rc; i < PHY_MAX_ADDR; ++i)
1846-
miibus->irq[i] = PHY_POLL;
18471841

18481842
rc = clamp(mii_bus_pd->phydev_number, 0, PHY_MAX_ADDR);
18491843
if (rc != mii_bus_pd->phydev_number)
@@ -1862,14 +1856,12 @@ static int bfin_mii_bus_probe(struct platform_device *pdev)
18621856
rc = mdiobus_register(miibus);
18631857
if (rc) {
18641858
dev_err(&pdev->dev, "Cannot register MDIO bus!\n");
1865-
goto out_err_mdiobus_register;
1859+
goto out_err_alloc;
18661860
}
18671861

18681862
platform_set_drvdata(pdev, miibus);
18691863
return 0;
18701864

1871-
out_err_mdiobus_register:
1872-
kfree(miibus->irq);
18731865
out_err_irq_alloc:
18741866
mdiobus_free(miibus);
18751867
out_err_alloc:
@@ -1885,7 +1877,6 @@ static int bfin_mii_bus_remove(struct platform_device *pdev)
18851877
dev_get_platdata(&pdev->dev);
18861878

18871879
mdiobus_unregister(miibus);
1888-
kfree(miibus->irq);
18891880
mdiobus_free(miibus);
18901881
peripheral_free_list(mii_bus_pd->mac_peripherals);
18911882

drivers/net/ethernet/aeroflex/greth.c

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1337,11 +1337,6 @@ static int greth_mdio_init(struct greth_private *greth)
13371337
greth->mdio->write = greth_mdio_write;
13381338
greth->mdio->priv = greth;
13391339

1340-
greth->mdio->irq = greth->mdio_irqs;
1341-
1342-
for (phy = 0; phy < PHY_MAX_ADDR; phy++)
1343-
greth->mdio->irq[phy] = PHY_POLL;
1344-
13451340
ret = mdiobus_register(greth->mdio);
13461341
if (ret) {
13471342
goto error;

drivers/net/ethernet/aeroflex/greth.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,6 @@ struct greth_private {
125125

126126
struct phy_device *phy;
127127
struct mii_bus *mdio;
128-
int mdio_irqs[PHY_MAX_ADDR];
129128
unsigned int link;
130129
unsigned int speed;
131130
unsigned int duplex;

drivers/net/ethernet/agere/et131x.c

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3325,7 +3325,6 @@ static void et131x_pci_remove(struct pci_dev *pdev)
33253325
netif_napi_del(&adapter->napi);
33263326
phy_disconnect(adapter->phydev);
33273327
mdiobus_unregister(adapter->mii_bus);
3328-
kfree(adapter->mii_bus->irq);
33293328
mdiobus_free(adapter->mii_bus);
33303329

33313330
et131x_adapter_memory_free(adapter);
@@ -3944,7 +3943,6 @@ static int et131x_pci_setup(struct pci_dev *pdev,
39443943
struct net_device *netdev;
39453944
struct et131x_adapter *adapter;
39463945
int rc;
3947-
int ii;
39483946

39493947
rc = pci_enable_device(pdev);
39503948
if (rc < 0) {
@@ -4034,18 +4032,11 @@ static int et131x_pci_setup(struct pci_dev *pdev,
40344032
adapter->mii_bus->priv = netdev;
40354033
adapter->mii_bus->read = et131x_mdio_read;
40364034
adapter->mii_bus->write = et131x_mdio_write;
4037-
adapter->mii_bus->irq = kmalloc_array(PHY_MAX_ADDR, sizeof(int),
4038-
GFP_KERNEL);
4039-
if (!adapter->mii_bus->irq)
4040-
goto err_mdio_free;
4041-
4042-
for (ii = 0; ii < PHY_MAX_ADDR; ii++)
4043-
adapter->mii_bus->irq[ii] = PHY_POLL;
40444035

40454036
rc = mdiobus_register(adapter->mii_bus);
40464037
if (rc < 0) {
40474038
dev_err(&pdev->dev, "failed to register MII bus\n");
4048-
goto err_mdio_free_irq;
4039+
goto err_mdio_free;
40494040
}
40504041

40514042
rc = et131x_mii_probe(netdev);
@@ -4085,8 +4076,6 @@ static int et131x_pci_setup(struct pci_dev *pdev,
40854076
phy_disconnect(adapter->phydev);
40864077
err_mdio_unregister:
40874078
mdiobus_unregister(adapter->mii_bus);
4088-
err_mdio_free_irq:
4089-
kfree(adapter->mii_bus->irq);
40904079
err_mdio_free:
40914080
mdiobus_free(adapter->mii_bus);
40924081
err_mem_free:

drivers/net/ethernet/altera/altera_tse_main.c

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,6 @@ static int altera_tse_mdio_create(struct net_device *dev, unsigned int id)
131131
{
132132
struct altera_tse_private *priv = netdev_priv(dev);
133133
int ret;
134-
int i;
135134
struct device_node *mdio_node = NULL;
136135
struct mii_bus *mdio = NULL;
137136
struct device_node *child_node = NULL;
@@ -161,31 +160,21 @@ static int altera_tse_mdio_create(struct net_device *dev, unsigned int id)
161160
mdio->write = &altera_tse_mdio_write;
162161
snprintf(mdio->id, MII_BUS_ID_SIZE, "%s-%u", mdio->name, id);
163162

164-
mdio->irq = kcalloc(PHY_MAX_ADDR, sizeof(int), GFP_KERNEL);
165-
if (mdio->irq == NULL) {
166-
ret = -ENOMEM;
167-
goto out_free_mdio;
168-
}
169-
for (i = 0; i < PHY_MAX_ADDR; i++)
170-
mdio->irq[i] = PHY_POLL;
171-
172163
mdio->priv = dev;
173164
mdio->parent = priv->device;
174165

175166
ret = of_mdiobus_register(mdio, mdio_node);
176167
if (ret != 0) {
177168
netdev_err(dev, "Cannot register MDIO bus %s\n",
178169
mdio->id);
179-
goto out_free_mdio_irq;
170+
goto out_free_mdio;
180171
}
181172

182173
if (netif_msg_drv(priv))
183174
netdev_info(dev, "MDIO bus %s: created\n", mdio->id);
184175

185176
priv->mdio = mdio;
186177
return 0;
187-
out_free_mdio_irq:
188-
kfree(mdio->irq);
189178
out_free_mdio:
190179
mdiobus_free(mdio);
191180
mdio = NULL;

drivers/net/ethernet/amd/au1000_eth.c

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1291,14 +1291,7 @@ static int au1000_probe(struct platform_device *pdev)
12911291
aup->mii_bus->name = "au1000_eth_mii";
12921292
snprintf(aup->mii_bus->id, MII_BUS_ID_SIZE, "%s-%x",
12931293
pdev->name, aup->mac_id);
1294-
aup->mii_bus->irq = kmalloc(sizeof(int)*PHY_MAX_ADDR, GFP_KERNEL);
1295-
if (aup->mii_bus->irq == NULL) {
1296-
err = -ENOMEM;
1297-
goto err_out;
1298-
}
12991294

1300-
for (i = 0; i < PHY_MAX_ADDR; ++i)
1301-
aup->mii_bus->irq[i] = PHY_POLL;
13021295
/* if known, set corresponding PHY IRQs */
13031296
if (aup->phy_static_config)
13041297
if (aup->phy_irq && aup->phy_busid == aup->mac_id)

drivers/net/ethernet/broadcom/b44.c

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2263,21 +2263,13 @@ static int b44_register_phy_one(struct b44 *bp)
22632263
mii_bus->parent = sdev->dev;
22642264
mii_bus->phy_mask = ~(1 << bp->phy_addr);
22652265
snprintf(mii_bus->id, MII_BUS_ID_SIZE, "%x", instance);
2266-
mii_bus->irq = kmalloc(sizeof(int) * PHY_MAX_ADDR, GFP_KERNEL);
2267-
if (!mii_bus->irq) {
2268-
dev_err(sdev->dev, "mii_bus irq allocation failed\n");
2269-
err = -ENOMEM;
2270-
goto err_out_mdiobus;
2271-
}
2272-
2273-
memset(mii_bus->irq, PHY_POLL, sizeof(int) * PHY_MAX_ADDR);
22742266

22752267
bp->mii_bus = mii_bus;
22762268

22772269
err = mdiobus_register(mii_bus);
22782270
if (err) {
22792271
dev_err(sdev->dev, "failed to register MII bus\n");
2280-
goto err_out_mdiobus_irq;
2272+
goto err_out_mdiobus;
22812273
}
22822274

22832275
if (!bp->mii_bus->phy_map[bp->phy_addr] &&
@@ -2322,9 +2314,6 @@ static int b44_register_phy_one(struct b44 *bp)
23222314
err_out_mdiobus_unregister:
23232315
mdiobus_unregister(mii_bus);
23242316

2325-
err_out_mdiobus_irq:
2326-
kfree(mii_bus->irq);
2327-
23282317
err_out_mdiobus:
23292318
mdiobus_free(mii_bus);
23302319

@@ -2338,7 +2327,6 @@ static void b44_unregister_phy_one(struct b44 *bp)
23382327

23392328
phy_disconnect(bp->phydev);
23402329
mdiobus_unregister(mii_bus);
2341-
kfree(mii_bus->irq);
23422330
mdiobus_free(mii_bus);
23432331
}
23442332

drivers/net/ethernet/broadcom/bcm63xx_enet.c

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1848,17 +1848,8 @@ static int bcm_enet_probe(struct platform_device *pdev)
18481848
* if a slave is not present on hw */
18491849
bus->phy_mask = ~(1 << priv->phy_id);
18501850

1851-
bus->irq = devm_kzalloc(&pdev->dev, sizeof(int) * PHY_MAX_ADDR,
1852-
GFP_KERNEL);
1853-
if (!bus->irq) {
1854-
ret = -ENOMEM;
1855-
goto out_free_mdio;
1856-
}
1857-
18581851
if (priv->has_phy_interrupt)
18591852
bus->irq[priv->phy_id] = priv->phy_interrupt;
1860-
else
1861-
bus->irq[priv->phy_id] = PHY_POLL;
18621853

18631854
ret = mdiobus_register(bus);
18641855
if (ret) {

drivers/net/ethernet/broadcom/bgmac.c

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1471,7 +1471,7 @@ static int bgmac_mii_register(struct bgmac *bgmac)
14711471
struct mii_bus *mii_bus;
14721472
struct phy_device *phy_dev;
14731473
char bus_id[MII_BUS_ID_SIZE + 3];
1474-
int i, err = 0;
1474+
int err = 0;
14751475

14761476
if (ci->id == BCMA_CHIP_ID_BCM4707 ||
14771477
ci->id == BCMA_CHIP_ID_BCM53018)
@@ -1490,18 +1490,10 @@ static int bgmac_mii_register(struct bgmac *bgmac)
14901490
mii_bus->parent = &bgmac->core->dev;
14911491
mii_bus->phy_mask = ~(1 << bgmac->phyaddr);
14921492

1493-
mii_bus->irq = kmalloc_array(PHY_MAX_ADDR, sizeof(int), GFP_KERNEL);
1494-
if (!mii_bus->irq) {
1495-
err = -ENOMEM;
1496-
goto err_free_bus;
1497-
}
1498-
for (i = 0; i < PHY_MAX_ADDR; i++)
1499-
mii_bus->irq[i] = PHY_POLL;
1500-
15011493
err = mdiobus_register(mii_bus);
15021494
if (err) {
15031495
bgmac_err(bgmac, "Registration of mii bus failed\n");
1504-
goto err_free_irq;
1496+
goto err_free_bus;
15051497
}
15061498

15071499
bgmac->mii_bus = mii_bus;
@@ -1522,8 +1514,6 @@ static int bgmac_mii_register(struct bgmac *bgmac)
15221514

15231515
err_unregister_bus:
15241516
mdiobus_unregister(mii_bus);
1525-
err_free_irq:
1526-
kfree(mii_bus->irq);
15271517
err_free_bus:
15281518
mdiobus_free(mii_bus);
15291519
return err;
@@ -1534,7 +1524,6 @@ static void bgmac_mii_unregister(struct bgmac *bgmac)
15341524
struct mii_bus *mii_bus = bgmac->mii_bus;
15351525

15361526
mdiobus_unregister(mii_bus);
1537-
kfree(mii_bus->irq);
15381527
mdiobus_free(mii_bus);
15391528
}
15401529

drivers/net/ethernet/broadcom/genet/bcmmii.c

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -402,8 +402,6 @@ int bcmgenet_mii_probe(struct net_device *dev)
402402
*/
403403
if (priv->internal_phy)
404404
priv->mii_bus->irq[phydev->addr] = PHY_IGNORE_INTERRUPT;
405-
else
406-
priv->mii_bus->irq[phydev->addr] = PHY_POLL;
407405

408406
return 0;
409407
}
@@ -477,12 +475,6 @@ static int bcmgenet_mii_alloc(struct bcmgenet_priv *priv)
477475
snprintf(bus->id, MII_BUS_ID_SIZE, "%s-%d",
478476
priv->pdev->name, priv->pdev->id);
479477

480-
bus->irq = kcalloc(PHY_MAX_ADDR, sizeof(int), GFP_KERNEL);
481-
if (!bus->irq) {
482-
mdiobus_free(priv->mii_bus);
483-
return -ENOMEM;
484-
}
485-
486478
return 0;
487479
}
488480

@@ -648,7 +640,6 @@ int bcmgenet_mii_init(struct net_device *dev)
648640
out:
649641
of_node_put(priv->phy_dn);
650642
mdiobus_unregister(priv->mii_bus);
651-
kfree(priv->mii_bus->irq);
652643
mdiobus_free(priv->mii_bus);
653644
return ret;
654645
}
@@ -659,6 +650,5 @@ void bcmgenet_mii_exit(struct net_device *dev)
659650

660651
of_node_put(priv->phy_dn);
661652
mdiobus_unregister(priv->mii_bus);
662-
kfree(priv->mii_bus->irq);
663653
mdiobus_free(priv->mii_bus);
664654
}

drivers/net/ethernet/broadcom/sb1250-mac.c

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,6 @@ struct sbmac_softc {
238238
struct napi_struct napi;
239239
struct phy_device *phy_dev; /* the associated PHY device */
240240
struct mii_bus *mii_bus; /* the MII bus */
241-
int phy_irq[PHY_MAX_ADDR];
242241
spinlock_t sbm_lock; /* spin lock */
243242
int sbm_devflags; /* current device flags */
244243

@@ -2250,9 +2249,6 @@ static int sbmac_init(struct platform_device *pldev, long long base)
22502249
sc->mii_bus->priv = sc;
22512250
sc->mii_bus->read = sbmac_mii_read;
22522251
sc->mii_bus->write = sbmac_mii_write;
2253-
sc->mii_bus->irq = sc->phy_irq;
2254-
for (i = 0; i < PHY_MAX_ADDR; ++i)
2255-
sc->mii_bus->irq[i] = SBMAC_PHY_INT;
22562252

22572253
sc->mii_bus->parent = &pldev->dev;
22582254
/*

0 commit comments

Comments
 (0)