drivers/net/ethernet/mediatek/mtk_eth_soc.c | 24 +++++++++++++-------- 1 file changed, 15 insertions(+), 9 deletions(-)
From: Frank Wunderlich <frank-w@public-files.de>
Add named interrupts and keep index based fallback for exiting devicetrees.
Currently only rx and tx IRQs are defined to be used with mt7988, but
later extended with RSS/LRO support.
Signed-off-by: Frank Wunderlich <frank-w@public-files.de>
---
drivers/net/ethernet/mediatek/mtk_eth_soc.c | 24 +++++++++++++--------
1 file changed, 15 insertions(+), 9 deletions(-)
diff --git a/drivers/net/ethernet/mediatek/mtk_eth_soc.c b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
index b76d35069887..fcec5f95685e 100644
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -5106,17 +5106,23 @@ static int mtk_probe(struct platform_device *pdev)
}
}
- for (i = 0; i < 3; i++) {
- if (MTK_HAS_CAPS(eth->soc->caps, MTK_SHARED_INT) && i > 0)
- eth->irq[i] = eth->irq[0];
- else
- eth->irq[i] = platform_get_irq(pdev, i);
- if (eth->irq[i] < 0) {
- dev_err(&pdev->dev, "no IRQ%d resource found\n", i);
- err = -ENXIO;
- goto err_wed_exit;
+ eth->irq[1] = platform_get_irq_byname(pdev, "tx");
+ eth->irq[2] = platform_get_irq_byname(pdev, "rx");
+ if (eth->irq[1] < 0 || eth->irq[2] < 0) {
+ for (i = 0; i < 3; i++) {
+ if (MTK_HAS_CAPS(eth->soc->caps, MTK_SHARED_INT) && i > 0)
+ eth->irq[i] = eth->irq[0];
+ else
+ eth->irq[i] = platform_get_irq(pdev, i);
+
+ if (eth->irq[i] < 0) {
+ dev_err(&pdev->dev, "no IRQ%d resource found\n", i);
+ err = -ENXIO;
+ goto err_wed_exit;
+ }
}
}
+
for (i = 0; i < ARRAY_SIZE(eth->clks); i++) {
eth->clks[i] = devm_clk_get(eth->dev,
mtk_clks_source_name[i]);
--
2.43.0
On Fri, Jun 13, 2025 at 04:45:23PM +0200, Frank Wunderlich wrote: > From: Frank Wunderlich <frank-w@public-files.de> > > Add named interrupts and keep index based fallback for exiting devicetrees. > > Currently only rx and tx IRQs are defined to be used with mt7988, but > later extended with RSS/LRO support. > > Signed-off-by: Frank Wunderlich <frank-w@public-files.de> > --- > drivers/net/ethernet/mediatek/mtk_eth_soc.c | 24 +++++++++++++-------- > 1 file changed, 15 insertions(+), 9 deletions(-) > > diff --git a/drivers/net/ethernet/mediatek/mtk_eth_soc.c b/drivers/net/ethernet/mediatek/mtk_eth_soc.c > index b76d35069887..fcec5f95685e 100644 > --- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c > +++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c > @@ -5106,17 +5106,23 @@ static int mtk_probe(struct platform_device *pdev) > } > } > > - for (i = 0; i < 3; i++) { > - if (MTK_HAS_CAPS(eth->soc->caps, MTK_SHARED_INT) && i > 0) > - eth->irq[i] = eth->irq[0]; > - else > - eth->irq[i] = platform_get_irq(pdev, i); > - if (eth->irq[i] < 0) { > - dev_err(&pdev->dev, "no IRQ%d resource found\n", i); > - err = -ENXIO; > - goto err_wed_exit; > + eth->irq[1] = platform_get_irq_byname(pdev, "tx"); > + eth->irq[2] = platform_get_irq_byname(pdev, "rx"); > + if (eth->irq[1] < 0 || eth->irq[2] < 0) { > + for (i = 0; i < 3; i++) { > + if (MTK_HAS_CAPS(eth->soc->caps, MTK_SHARED_INT) && i > 0) > + eth->irq[i] = eth->irq[0]; > + else > + eth->irq[i] = platform_get_irq(pdev, i); > + > + if (eth->irq[i] < 0) { > + dev_err(&pdev->dev, "no IRQ%d resource found\n", i); > + err = -ENXIO; > + goto err_wed_exit; > + } > } > } > + Thanks Frank, The above looks correct to me. But I do think it could be improved by moving the irq lookup logic - either the unnamed portion or all of it - into a helper. That suggestion notwithstanding, Reviewed-by: Simon Horman <horms@kernel.org> > for (i = 0; i < ARRAY_SIZE(eth->clks); i++) { > eth->clks[i] = devm_clk_get(eth->dev, > mtk_clks_source_name[i]); > -- > 2.43.0 > >
© 2016 - 2025 Red Hat, Inc.