* [PATCH net-next 1/6] net: ag71xx: add COMPILE_TEST to test compilation
2024-08-29 21:48 [PATCH net-next 0/6] various cleanups Rosen Penev
@ 2024-08-29 21:48 ` Rosen Penev
2024-08-30 15:49 ` Simon Horman
2024-08-29 21:48 ` [PATCH net-next 2/6] net: ag71xx: update FIFO bits and descriptions Rosen Penev
` (4 subsequent siblings)
5 siblings, 1 reply; 13+ messages in thread
From: Rosen Penev @ 2024-08-29 21:48 UTC (permalink / raw)
To: netdev
Cc: davem, edumazet, kuba, pabeni, linux, linux-kernel, o.rempel,
p.zabel
While this driver is meant for MIPS only, it can be compiled on x86 just
fine. Remove pointless parentheses while at it.
Enables CI building of this driver.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
drivers/net/ethernet/atheros/Kconfig | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/net/ethernet/atheros/Kconfig b/drivers/net/ethernet/atheros/Kconfig
index 482c58c4c584..03b31bedc9a5 100644
--- a/drivers/net/ethernet/atheros/Kconfig
+++ b/drivers/net/ethernet/atheros/Kconfig
@@ -6,7 +6,7 @@
config NET_VENDOR_ATHEROS
bool "Atheros devices"
default y
- depends on (PCI || ATH79)
+ depends on PCI || ATH79 || COMPILE_TEST
help
If you have a network (Ethernet) card belonging to this class, say Y.
@@ -19,7 +19,7 @@ if NET_VENDOR_ATHEROS
config AG71XX
tristate "Atheros AR7XXX/AR9XXX built-in ethernet mac support"
- depends on ATH79
+ depends on ATH79 || COMPILE_TEST
select PHYLINK
imply NET_SELFTESTS
help
--
2.46.0
^ permalink raw reply related [flat|nested] 13+ messages in thread* Re: [PATCH net-next 1/6] net: ag71xx: add COMPILE_TEST to test compilation
2024-08-29 21:48 ` [PATCH net-next 1/6] net: ag71xx: add COMPILE_TEST to test compilation Rosen Penev
@ 2024-08-30 15:49 ` Simon Horman
2024-08-30 17:32 ` Rosen Penev
0 siblings, 1 reply; 13+ messages in thread
From: Simon Horman @ 2024-08-30 15:49 UTC (permalink / raw)
To: Rosen Penev
Cc: netdev, davem, edumazet, kuba, pabeni, linux, linux-kernel,
o.rempel, p.zabel
On Thu, Aug 29, 2024 at 02:48:20PM -0700, Rosen Penev wrote:
> While this driver is meant for MIPS only, it can be compiled on x86 just
> fine. Remove pointless parentheses while at it.
>
> Enables CI building of this driver.
>
> Signed-off-by: Rosen Penev <rosenp@gmail.com>
Thanks, this seems to work well.
Reviewed-by: Simon Horman <horms@kernel.org>
As a follow-up, could you consider adding a MODULE_DESCRIPTION()
to this module. It now gets flagged on x86_64 allmodconfig W=1 builds.
...
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH net-next 1/6] net: ag71xx: add COMPILE_TEST to test compilation
2024-08-30 15:49 ` Simon Horman
@ 2024-08-30 17:32 ` Rosen Penev
2024-08-30 18:14 ` Simon Horman
0 siblings, 1 reply; 13+ messages in thread
From: Rosen Penev @ 2024-08-30 17:32 UTC (permalink / raw)
To: Simon Horman
Cc: netdev, davem, edumazet, kuba, pabeni, linux, linux-kernel,
o.rempel, p.zabel
On Fri, Aug 30, 2024 at 8:49 AM Simon Horman <horms@kernel.org> wrote:
>
> On Thu, Aug 29, 2024 at 02:48:20PM -0700, Rosen Penev wrote:
> > While this driver is meant for MIPS only, it can be compiled on x86 just
> > fine. Remove pointless parentheses while at it.
> >
> > Enables CI building of this driver.
> >
> > Signed-off-by: Rosen Penev <rosenp@gmail.com>
>
> Thanks, this seems to work well.
>
> Reviewed-by: Simon Horman <horms@kernel.org>
>
> As a follow-up, could you consider adding a MODULE_DESCRIPTION()
> to this module. It now gets flagged on x86_64 allmodconfig W=1 builds.
v2 patchset?
>
> ...
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH net-next 1/6] net: ag71xx: add COMPILE_TEST to test compilation
2024-08-30 17:32 ` Rosen Penev
@ 2024-08-30 18:14 ` Simon Horman
0 siblings, 0 replies; 13+ messages in thread
From: Simon Horman @ 2024-08-30 18:14 UTC (permalink / raw)
To: Rosen Penev
Cc: netdev, davem, edumazet, kuba, pabeni, linux, linux-kernel,
o.rempel, p.zabel
On Fri, Aug 30, 2024 at 10:32:08AM -0700, Rosen Penev wrote:
> On Fri, Aug 30, 2024 at 8:49 AM Simon Horman <horms@kernel.org> wrote:
> >
> > On Thu, Aug 29, 2024 at 02:48:20PM -0700, Rosen Penev wrote:
> > > While this driver is meant for MIPS only, it can be compiled on x86 just
> > > fine. Remove pointless parentheses while at it.
> > >
> > > Enables CI building of this driver.
> > >
> > > Signed-off-by: Rosen Penev <rosenp@gmail.com>
> >
> > Thanks, this seems to work well.
> >
> > Reviewed-by: Simon Horman <horms@kernel.org>
> >
> > As a follow-up, could you consider adding a MODULE_DESCRIPTION()
> > to this module. It now gets flagged on x86_64 allmodconfig W=1 builds.
> v2 patchset?
I'd wait to see if this patchset is accepted.
And if so, send a new patch separately.
If not, perhaps add it to v2.
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH net-next 2/6] net: ag71xx: update FIFO bits and descriptions
2024-08-29 21:48 [PATCH net-next 0/6] various cleanups Rosen Penev
2024-08-29 21:48 ` [PATCH net-next 1/6] net: ag71xx: add COMPILE_TEST to test compilation Rosen Penev
@ 2024-08-29 21:48 ` Rosen Penev
2024-08-30 4:54 ` Oleksij Rempel
2024-08-29 21:48 ` [PATCH net-next 3/6] net: ag71xx: use ethtool_puts Rosen Penev
` (3 subsequent siblings)
5 siblings, 1 reply; 13+ messages in thread
From: Rosen Penev @ 2024-08-29 21:48 UTC (permalink / raw)
To: netdev
Cc: davem, edumazet, kuba, pabeni, linux, linux-kernel, o.rempel,
p.zabel
Taken from QCA SDK. No functional difference as same bits get applied.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
drivers/net/ethernet/atheros/ag71xx.c | 48 +++++++++++++--------------
1 file changed, 24 insertions(+), 24 deletions(-)
diff --git a/drivers/net/ethernet/atheros/ag71xx.c b/drivers/net/ethernet/atheros/ag71xx.c
index db2a8ade6205..89c966b43427 100644
--- a/drivers/net/ethernet/atheros/ag71xx.c
+++ b/drivers/net/ethernet/atheros/ag71xx.c
@@ -149,11 +149,11 @@
#define FIFO_CFG4_MC BIT(8) /* Multicast Packet */
#define FIFO_CFG4_BC BIT(9) /* Broadcast Packet */
#define FIFO_CFG4_DR BIT(10) /* Dribble */
-#define FIFO_CFG4_LE BIT(11) /* Long Event */
-#define FIFO_CFG4_CF BIT(12) /* Control Frame */
-#define FIFO_CFG4_PF BIT(13) /* Pause Frame */
-#define FIFO_CFG4_UO BIT(14) /* Unsupported Opcode */
-#define FIFO_CFG4_VT BIT(15) /* VLAN tag detected */
+#define FIFO_CFG4_CF BIT(11) /* Control Frame */
+#define FIFO_CFG4_PF BIT(12) /* Pause Frame */
+#define FIFO_CFG4_UO BIT(13) /* Unsupported Opcode */
+#define FIFO_CFG4_VT BIT(14) /* VLAN tag detected */
+#define FIFO_CFG4_LE BIT(15) /* Long Event */
#define FIFO_CFG4_FT BIT(16) /* Frame Truncated */
#define FIFO_CFG4_UC BIT(17) /* Unicast Packet */
#define FIFO_CFG4_INIT (FIFO_CFG4_DE | FIFO_CFG4_DV | FIFO_CFG4_FC | \
@@ -168,28 +168,28 @@
#define FIFO_CFG5_DV BIT(1) /* RX_DV Event */
#define FIFO_CFG5_FC BIT(2) /* False Carrier */
#define FIFO_CFG5_CE BIT(3) /* Code Error */
-#define FIFO_CFG5_LM BIT(4) /* Length Mismatch */
-#define FIFO_CFG5_LO BIT(5) /* Length Out of Range */
-#define FIFO_CFG5_OK BIT(6) /* Packet is OK */
-#define FIFO_CFG5_MC BIT(7) /* Multicast Packet */
-#define FIFO_CFG5_BC BIT(8) /* Broadcast Packet */
-#define FIFO_CFG5_DR BIT(9) /* Dribble */
-#define FIFO_CFG5_CF BIT(10) /* Control Frame */
-#define FIFO_CFG5_PF BIT(11) /* Pause Frame */
-#define FIFO_CFG5_UO BIT(12) /* Unsupported Opcode */
-#define FIFO_CFG5_VT BIT(13) /* VLAN tag detected */
-#define FIFO_CFG5_LE BIT(14) /* Long Event */
-#define FIFO_CFG5_FT BIT(15) /* Frame Truncated */
-#define FIFO_CFG5_16 BIT(16) /* unknown */
-#define FIFO_CFG5_17 BIT(17) /* unknown */
+#define FIFO_CFG5_CR BIT(4) /* CRC error */
+#define FIFO_CFG5_LM BIT(5) /* Length Mismatch */
+#define FIFO_CFG5_LO BIT(6) /* Length Out of Range */
+#define FIFO_CFG5_OK BIT(7) /* Packet is OK */
+#define FIFO_CFG5_MC BIT(8) /* Multicast Packet */
+#define FIFO_CFG5_BC BIT(9) /* Broadcast Packet */
+#define FIFO_CFG5_DR BIT(10) /* Dribble */
+#define FIFO_CFG5_CF BIT(11) /* Control Frame */
+#define FIFO_CFG5_PF BIT(12) /* Pause Frame */
+#define FIFO_CFG5_UO BIT(13) /* Unsupported Opcode */
+#define FIFO_CFG5_VT BIT(14) /* VLAN tag detected */
+#define FIFO_CFG5_LE BIT(15) /* Long Event */
+#define FIFO_CFG5_FT BIT(16) /* Frame Truncated */
+#define FIFO_CFG5_UC BIT(17) /* Unicast Packet */
#define FIFO_CFG5_SF BIT(18) /* Short Frame */
#define FIFO_CFG5_BM BIT(19) /* Byte Mode */
#define FIFO_CFG5_INIT (FIFO_CFG5_DE | FIFO_CFG5_DV | FIFO_CFG5_FC | \
- FIFO_CFG5_CE | FIFO_CFG5_LO | FIFO_CFG5_OK | \
- FIFO_CFG5_MC | FIFO_CFG5_BC | FIFO_CFG5_DR | \
- FIFO_CFG5_CF | FIFO_CFG5_PF | FIFO_CFG5_VT | \
- FIFO_CFG5_LE | FIFO_CFG5_FT | FIFO_CFG5_16 | \
- FIFO_CFG5_17 | FIFO_CFG5_SF)
+ FIFO_CFG5_CE | FIFO_CFG5_LM | FIFO_CFG5_LO | \
+ FIFO_CFG5_OK | FIFO_CFG5_MC | FIFO_CFG5_BC | \
+ FIFO_CFG5_DR | FIFO_CFG5_CF | FIFO_CFG5_UO | \
+ FIFO_CFG5_VT | FIFO_CFG5_LE | FIFO_CFG5_FT | \
+ FIFO_CFG5_UC | FIFO_CFG5_SF)
#define AG71XX_REG_TX_CTRL 0x0180
#define TX_CTRL_TXE BIT(0) /* Tx Enable */
--
2.46.0
^ permalink raw reply related [flat|nested] 13+ messages in thread* Re: [PATCH net-next 2/6] net: ag71xx: update FIFO bits and descriptions
2024-08-29 21:48 ` [PATCH net-next 2/6] net: ag71xx: update FIFO bits and descriptions Rosen Penev
@ 2024-08-30 4:54 ` Oleksij Rempel
0 siblings, 0 replies; 13+ messages in thread
From: Oleksij Rempel @ 2024-08-30 4:54 UTC (permalink / raw)
To: Rosen Penev
Cc: netdev, davem, edumazet, kuba, pabeni, linux, linux-kernel,
p.zabel
On Thu, Aug 29, 2024 at 02:48:21PM -0700, Rosen Penev wrote:
> Taken from QCA SDK. No functional difference as same bits get applied.
>
> Signed-off-by: Rosen Penev <rosenp@gmail.com>
Reviewed-by: Oleksij Rempel <o.rempel@pengutronix.de>
Thank you!
This values can be confirmed by AR9341 documentation
8.19.20 ETH Configuration 4
8.19.21 ETH Configuration 5
Regards,
Oleksij
--
Pengutronix e.K. | |
Steuerwalder Str. 21 | http://www.pengutronix.de/ |
31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH net-next 3/6] net: ag71xx: use ethtool_puts
2024-08-29 21:48 [PATCH net-next 0/6] various cleanups Rosen Penev
2024-08-29 21:48 ` [PATCH net-next 1/6] net: ag71xx: add COMPILE_TEST to test compilation Rosen Penev
2024-08-29 21:48 ` [PATCH net-next 2/6] net: ag71xx: update FIFO bits and descriptions Rosen Penev
@ 2024-08-29 21:48 ` Rosen Penev
2024-08-30 4:55 ` Oleksij Rempel
2024-08-29 21:48 ` [PATCH net-next 4/6] net: ag71xx: get reset control using devm api Rosen Penev
` (2 subsequent siblings)
5 siblings, 1 reply; 13+ messages in thread
From: Rosen Penev @ 2024-08-29 21:48 UTC (permalink / raw)
To: netdev
Cc: davem, edumazet, kuba, pabeni, linux, linux-kernel, o.rempel,
p.zabel
Allows simplifying get_strings and avoids manual pointer manipulation.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
drivers/net/ethernet/atheros/ag71xx.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/drivers/net/ethernet/atheros/ag71xx.c b/drivers/net/ethernet/atheros/ag71xx.c
index 89c966b43427..b2e68e6eae12 100644
--- a/drivers/net/ethernet/atheros/ag71xx.c
+++ b/drivers/net/ethernet/atheros/ag71xx.c
@@ -509,8 +509,7 @@ static void ag71xx_ethtool_get_strings(struct net_device *netdev, u32 sset,
switch (sset) {
case ETH_SS_STATS:
for (i = 0; i < ARRAY_SIZE(ag71xx_statistics); i++)
- memcpy(data + i * ETH_GSTRING_LEN,
- ag71xx_statistics[i].name, ETH_GSTRING_LEN);
+ ethtool_puts(&data, ag71xx_statistics[i].name);
break;
case ETH_SS_TEST:
net_selftest_get_strings(data);
--
2.46.0
^ permalink raw reply related [flat|nested] 13+ messages in thread* Re: [PATCH net-next 3/6] net: ag71xx: use ethtool_puts
2024-08-29 21:48 ` [PATCH net-next 3/6] net: ag71xx: use ethtool_puts Rosen Penev
@ 2024-08-30 4:55 ` Oleksij Rempel
0 siblings, 0 replies; 13+ messages in thread
From: Oleksij Rempel @ 2024-08-30 4:55 UTC (permalink / raw)
To: Rosen Penev
Cc: netdev, davem, edumazet, kuba, pabeni, linux, linux-kernel,
p.zabel
On Thu, Aug 29, 2024 at 02:48:22PM -0700, Rosen Penev wrote:
> Allows simplifying get_strings and avoids manual pointer manipulation.
>
> Signed-off-by: Rosen Penev <rosenp@gmail.com>
Reviewed-by: Oleksij Rempel <o.rempel@pengutronix.de>
--
Pengutronix e.K. | |
Steuerwalder Str. 21 | http://www.pengutronix.de/ |
31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH net-next 4/6] net: ag71xx: get reset control using devm api
2024-08-29 21:48 [PATCH net-next 0/6] various cleanups Rosen Penev
` (2 preceding siblings ...)
2024-08-29 21:48 ` [PATCH net-next 3/6] net: ag71xx: use ethtool_puts Rosen Penev
@ 2024-08-29 21:48 ` Rosen Penev
2024-08-29 21:48 ` [PATCH net-next 5/6] net: ag71xx: remove always true branch Rosen Penev
2024-08-29 21:48 ` [PATCH net-next 6/6] net: ag71xx: disable napi interrupts during probe Rosen Penev
5 siblings, 0 replies; 13+ messages in thread
From: Rosen Penev @ 2024-08-29 21:48 UTC (permalink / raw)
To: netdev
Cc: davem, edumazet, kuba, pabeni, linux, linux-kernel, o.rempel,
p.zabel
Currently, the of variant is missing reset_control_put in error paths.
The devm variant does not require it.
Allows removing mdio_reset from the struct as it is not used outside the
function.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
Reviewed-by: Oleksij Rempel <o.rempel@pengutronix.de>
---
drivers/net/ethernet/atheros/ag71xx.c | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/drivers/net/ethernet/atheros/ag71xx.c b/drivers/net/ethernet/atheros/ag71xx.c
index b2e68e6eae12..d7d1735acab7 100644
--- a/drivers/net/ethernet/atheros/ag71xx.c
+++ b/drivers/net/ethernet/atheros/ag71xx.c
@@ -379,7 +379,6 @@ struct ag71xx {
u32 fifodata[3];
int mac_idx;
- struct reset_control *mdio_reset;
struct clk *clk_mdio;
};
@@ -690,6 +689,7 @@ static int ag71xx_mdio_probe(struct ag71xx *ag)
struct device *dev = &ag->pdev->dev;
struct net_device *ndev = ag->ndev;
static struct mii_bus *mii_bus;
+ struct reset_control *mdio_reset;
struct device_node *np, *mnp;
int err;
@@ -705,10 +705,10 @@ static int ag71xx_mdio_probe(struct ag71xx *ag)
if (!mii_bus)
return -ENOMEM;
- ag->mdio_reset = of_reset_control_get_exclusive(np, "mdio");
- if (IS_ERR(ag->mdio_reset)) {
+ mdio_reset = devm_reset_control_get_exclusive(dev, "mdio");
+ if (IS_ERR(mdio_reset)) {
netif_err(ag, probe, ndev, "Failed to get reset mdio.\n");
- return PTR_ERR(ag->mdio_reset);
+ return PTR_ERR(mdio_reset);
}
mii_bus->name = "ag71xx_mdio";
@@ -719,10 +719,10 @@ static int ag71xx_mdio_probe(struct ag71xx *ag)
mii_bus->parent = dev;
snprintf(mii_bus->id, MII_BUS_ID_SIZE, "%s.%d", np->name, ag->mac_idx);
- if (!IS_ERR(ag->mdio_reset)) {
- reset_control_assert(ag->mdio_reset);
+ if (!IS_ERR(mdio_reset)) {
+ reset_control_assert(mdio_reset);
msleep(100);
- reset_control_deassert(ag->mdio_reset);
+ reset_control_deassert(mdio_reset);
msleep(200);
}
--
2.46.0
^ permalink raw reply related [flat|nested] 13+ messages in thread* [PATCH net-next 5/6] net: ag71xx: remove always true branch
2024-08-29 21:48 [PATCH net-next 0/6] various cleanups Rosen Penev
` (3 preceding siblings ...)
2024-08-29 21:48 ` [PATCH net-next 4/6] net: ag71xx: get reset control using devm api Rosen Penev
@ 2024-08-29 21:48 ` Rosen Penev
2024-08-30 4:56 ` Oleksij Rempel
2024-08-29 21:48 ` [PATCH net-next 6/6] net: ag71xx: disable napi interrupts during probe Rosen Penev
5 siblings, 1 reply; 13+ messages in thread
From: Rosen Penev @ 2024-08-29 21:48 UTC (permalink / raw)
To: netdev
Cc: davem, edumazet, kuba, pabeni, linux, linux-kernel, o.rempel,
p.zabel
The opposite of this condition is checked above and if true, function
returns. Which means this can never be false.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
drivers/net/ethernet/atheros/ag71xx.c | 10 ++++------
1 file changed, 4 insertions(+), 6 deletions(-)
diff --git a/drivers/net/ethernet/atheros/ag71xx.c b/drivers/net/ethernet/atheros/ag71xx.c
index d7d1735acab7..25e9de9aedbc 100644
--- a/drivers/net/ethernet/atheros/ag71xx.c
+++ b/drivers/net/ethernet/atheros/ag71xx.c
@@ -719,12 +719,10 @@ static int ag71xx_mdio_probe(struct ag71xx *ag)
mii_bus->parent = dev;
snprintf(mii_bus->id, MII_BUS_ID_SIZE, "%s.%d", np->name, ag->mac_idx);
- if (!IS_ERR(mdio_reset)) {
- reset_control_assert(mdio_reset);
- msleep(100);
- reset_control_deassert(mdio_reset);
- msleep(200);
- }
+ reset_control_assert(mdio_reset);
+ msleep(100);
+ reset_control_deassert(mdio_reset);
+ msleep(200);
mnp = of_get_child_by_name(np, "mdio");
err = devm_of_mdiobus_register(dev, mii_bus, mnp);
--
2.46.0
^ permalink raw reply related [flat|nested] 13+ messages in thread* Re: [PATCH net-next 5/6] net: ag71xx: remove always true branch
2024-08-29 21:48 ` [PATCH net-next 5/6] net: ag71xx: remove always true branch Rosen Penev
@ 2024-08-30 4:56 ` Oleksij Rempel
0 siblings, 0 replies; 13+ messages in thread
From: Oleksij Rempel @ 2024-08-30 4:56 UTC (permalink / raw)
To: Rosen Penev
Cc: netdev, davem, edumazet, kuba, pabeni, linux, linux-kernel,
p.zabel
On Thu, Aug 29, 2024 at 02:48:24PM -0700, Rosen Penev wrote:
> The opposite of this condition is checked above and if true, function
> returns. Which means this can never be false.
>
> Signed-off-by: Rosen Penev <rosenp@gmail.com>
Reviewed-by: Oleksij Rempel <o.rempel@pengutronix.de>
--
Pengutronix e.K. | |
Steuerwalder Str. 21 | http://www.pengutronix.de/ |
31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH net-next 6/6] net: ag71xx: disable napi interrupts during probe
2024-08-29 21:48 [PATCH net-next 0/6] various cleanups Rosen Penev
` (4 preceding siblings ...)
2024-08-29 21:48 ` [PATCH net-next 5/6] net: ag71xx: remove always true branch Rosen Penev
@ 2024-08-29 21:48 ` Rosen Penev
5 siblings, 0 replies; 13+ messages in thread
From: Rosen Penev @ 2024-08-29 21:48 UTC (permalink / raw)
To: netdev
Cc: davem, edumazet, kuba, pabeni, linux, linux-kernel, o.rempel,
p.zabel
From: Sven Eckelmann <sven@narfation.org>
ag71xx_probe is registering ag71xx_interrupt as handler for gmac0/gmac1
interrupts. The handler is trying to use napi_schedule to handle the
processing of packets. But the netif_napi_add for this device is
called a lot later in ag71xx_probe.
It can therefore happen that a still running gmac0/gmac1 is triggering the
interrupt handler with a bit from AG71XX_INT_POLL set in
AG71XX_REG_INT_STATUS. The handler will then call napi_schedule and the
napi code will crash the system because the ag->napi is not yet
initialized.
The gmcc0/gmac1 must be brought in a state in which it doesn't signal a
AG71XX_INT_POLL related status bits as interrupt before registering the
interrupt handler. ag71xx_hw_start will take care of re-initializing the
AG71XX_REG_INT_ENABLE.
This will become relevant when dual GMAC devices get added here.
Signed-off-by: Sven Eckelmann <sven@narfation.org>
Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
drivers/net/ethernet/atheros/ag71xx.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/drivers/net/ethernet/atheros/ag71xx.c b/drivers/net/ethernet/atheros/ag71xx.c
index 25e9de9aedbc..ed47914a0e0c 100644
--- a/drivers/net/ethernet/atheros/ag71xx.c
+++ b/drivers/net/ethernet/atheros/ag71xx.c
@@ -1850,6 +1850,12 @@ static int ag71xx_probe(struct platform_device *pdev)
if (!ag->mac_base)
return -ENOMEM;
+ /* ensure that HW is in manual polling mode before interrupts are
+ * activated. Otherwise ag71xx_interrupt might call napi_schedule
+ * before it is initialized by netif_napi_add.
+ */
+ ag71xx_int_disable(ag, AG71XX_INT_POLL);
+
ndev->irq = platform_get_irq(pdev, 0);
err = devm_request_irq(&pdev->dev, ndev->irq, ag71xx_interrupt,
0x0, dev_name(&pdev->dev), ndev);
--
2.46.0
^ permalink raw reply related [flat|nested] 13+ messages in thread