Thread (4 messages) 4 messages, 2 authors, 2024-06-20

RE: [PATCH v1 net] net: dsa: microchip: fix wrong register write when masking interrupt

From: <hidden>
Date: 2024-06-18 23:55:39
Also in: lkml

Subject: Re: [PATCH v1 net] net: dsa: microchip: fix wrong register write when
masking interrupt

EXTERNAL EMAIL: Do not click links or open attachments unless you know the content
is safe

On Thu, May 30, 2024 at 06:39:13PM -0700, Tristram.Ha@microchip.com wrote:
quoted
From: Tristram Ha <redacted>

Initially the macro REG_SW_PORT_INT_MASK__4 is defined as 0x001C in
ksz9477_reg.h and REG_PORT_INT_MASK is defined as 0x#01F.  Because the
global and port interrupt handling is about the same the new
REG_SW_PORT_INT_MASK__1 is defined as 0x1F in ksz_common.h.  This works
as only the least significant bits have effect.  As a result the 32-bit
write needs to be changed to 8-bit.

Fixes: e1add7dd6183 ("net: dsa: microchip: use common irq routines for girq and
pirq")
quoted
Signed-off-by: Tristram Ha <redacted>
---
v1
 - clarify the reason to change the code
After v1 comes v2.
I thought the initial version starts at index 0?
quoted
 drivers/net/dsa/microchip/ksz_common.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/dsa/microchip/ksz_common.c
b/drivers/net/dsa/microchip/ksz_common.c
quoted
index 1e0085cd9a9a..3ad0879b00cd 100644
--- a/drivers/net/dsa/microchip/ksz_common.c
+++ b/drivers/net/dsa/microchip/ksz_common.c
@@ -2185,7 +2185,7 @@ static void ksz_irq_bus_sync_unlock(struct irq_data *d)
      struct ksz_device *dev = kirq->dev;
      int ret;

-     ret = ksz_write32(dev, kirq->reg_mask, kirq->masked);
+     ret = ksz_write8(dev, kirq->reg_mask, kirq->masked);
      if (ret)
              dev_err(dev->dev, "failed to change IRQ mask\n");

--
2.34.1
What is the user-visible functional impact of the 32-bit access? Justify
why this is a bug worth sending to stable kernels please.

FWIW, struct ksz_irq operates on 16-bit registers.
As explained before the initial code uses register 0x1C but now it is
changed to 0x1F.

See the real operating code if not modified:

ret = ksz_write32(dev, 0x1F, 0x0000007F);

The original code looks like this:

ret = ksz_write32(dev, 0x1C, 0x0000007F);

BTW, all other KSZ switches except KSZ9897/KSZ9893 and LAN937X families
use only 8-bit access.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help