Skip to content

Commit

Permalink
b44: Unconditionally enable interrupt routing on reset
Browse files Browse the repository at this point in the history
Unconditionally setup the IRQ routing on chip reset.
It's safe to call ssb_pcicore_dev_irqvecs_enable() unconditionally, because
it has internal checks for redundant calls.

This fixes problems where hardware will not come up properly
due to quirks in the enable-bit hardware.

Reported-by: Pantelis Koukousoulas <pktoss@gmail.com>
Signed-off-by: Michael Buesch <mb@bu3sch.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Michael Buesch authored and David S. Miller committed Feb 27, 2009
1 parent 9b58027 commit f8af11a
Showing 1 changed file with 8 additions and 4 deletions.
12 changes: 8 additions & 4 deletions drivers/net/b44.c
Original file line number Diff line number Diff line change
Expand Up @@ -1264,8 +1264,14 @@ static void b44_clear_stats(struct b44 *bp)
static void b44_chip_reset(struct b44 *bp, int reset_kind)
{
struct ssb_device *sdev = bp->sdev;
bool was_enabled;

if (ssb_device_is_enabled(bp->sdev)) {
was_enabled = ssb_device_is_enabled(bp->sdev);

ssb_device_enable(bp->sdev, 0);
ssb_pcicore_dev_irqvecs_enable(&sdev->bus->pcicore, sdev);

if (was_enabled) {
bw32(bp, B44_RCV_LAZY, 0);
bw32(bp, B44_ENET_CTRL, ENET_CTRL_DISABLE);
b44_wait_bit(bp, B44_ENET_CTRL, ENET_CTRL_DISABLE, 200, 1);
Expand All @@ -1277,10 +1283,8 @@ static void b44_chip_reset(struct b44 *bp, int reset_kind)
}
bw32(bp, B44_DMARX_CTRL, 0);
bp->rx_prod = bp->rx_cons = 0;
} else
ssb_pcicore_dev_irqvecs_enable(&sdev->bus->pcicore, sdev);
}

ssb_device_enable(bp->sdev, 0);
b44_clear_stats(bp);

/*
Expand Down

0 comments on commit f8af11a

Please sign in to comment.