• Michael Walle's avatar
    net: phy: mxl-gpy: add MDINT workaround · 5f4d487d
    Michael Walle authored
    At least the GPY215B and GPY215C has a bug where it is still driving the
    interrupt line (MDINT) even after the interrupt status register is read
    and its bits are cleared. This will cause an interrupt storm.
    
    Although the MDINT is multiplexed with a GPIO pin and theoretically we
    could switch the pinmux to GPIO input mode, this isn't possible because
    the access to this register will stall exactly as long as the interrupt
    line is asserted. We exploit this very fact and just read a random
    internal register in our interrupt handler. This way, it will be delayed
    until the external interrupt line is released and an interrupt storm is
    avoided.
    
    The internal register access via the mailbox was deduced by looking at
    the downstream PHY API because the datasheet doesn't mention any of
    this.
    
    Fixes: 7d901a1e ("net: phy: add Maxlinear GPY115/21x/24x driver")
    Signed-off-by: default avatarMichael Walle <michael@walle.cc>
    Reviewed-by: default avatarAndrew Lunn <andrew@lunn.ch>
    Link: https://lore.kernel.org/r/20221205200453.3447866-1-michael@walle.ccSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
    5f4d487d
mxl-gpy.c 24.9 KB