• Lukas Wunner's avatar
    net: ks8851: Set initial carrier state to down · a3c43491
    Lukas Wunner authored
    [ Upstream commit 9624bafa ]
    
    The ks8851 chip's initial carrier state is down. A Link Change Interrupt
    is signaled once interrupts are enabled if the carrier is up.
    
    The ks8851 driver has it backwards by assuming that the initial carrier
    state is up. The state is therefore misrepresented if the interface is
    opened with no cable attached. Fix it.
    
    The Link Change interrupt is sometimes not signaled unless the P1MBSR
    register (which contains the Link Status bit) is read on ->ndo_open().
    This might be a hardware erratum. Read the register by calling
    mii_check_link(), which has the desirable side effect of setting the
    carrier state to down if the cable was detached while the interface was
    closed.
    Signed-off-by: default avatarLukas Wunner <lukas@wunner.de>
    Cc: Frank Pavlic <f.pavlic@kunbus.de>
    Cc: Ben Dooks <ben.dooks@codethink.co.uk>
    Cc: Tristram Ha <Tristram.Ha@microchip.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    Signed-off-by: default avatarSasha Levin (Microsoft) <sashal@kernel.org>
    a3c43491
ks8851.c 40.6 KB