• Prashant Sreedharan's avatar
    tg3: tg3_disable_ints using uninitialized mailbox value to disable interrupts · 05b0aa57
    Prashant Sreedharan authored
    During driver load in tg3_init_one, if the driver detects DMA activity before
    intializing the chip tg3_halt is called. As part of tg3_halt interrupts are
    disabled using routine tg3_disable_ints. This routine was using mailbox value
    which was not initialized (default value is 0). As a result driver was writing
    0x00000001 to pci config space register 0, which is the vendor id / device id.
    
    This driver bug was exposed because of the commit a7877b17a667 (PCI: Check only
    the Vendor ID to identify Configuration Request Retry). Also this issue is only
    seen in older generation chipsets like 5722 because config space write to offset
    0 from driver is possible. The newer generation chips ignore writes to offset 0.
    Also without commit a7877b17a667, for these older chips when a GRC reset is
    issued the Bootcode would reprogram the vendor id/device id, which is the reason
    this bug was masked earlier.
    
    Fixed by initializing the interrupt mailbox registers before calling tg3_halt.
    
    Please queue for -stable.
    Reported-by: default avatarNils Holland <nholland@tisys.org>
    Reported-by: default avatarMarcelo Ricardo Leitner <marcelo.leitner@gmail.com>
    Signed-off-by: default avatarPrashant Sreedharan <prashant@broadcom.com>
    Signed-off-by: default avatarMichael Chan <mchan@broadcom.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    05b0aa57
tg3.c 465 KB