Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f8af11af authored by Michael Buesch's avatar Michael Buesch Committed by David S. Miller
Browse files

b44: Unconditionally enable interrupt routing on reset



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: default avatarPantelis Koukousoulas <pktoss@gmail.com>
Signed-off-by: default avatarMichael Buesch <mb@bu3sch.de>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 9b58027b
Loading
Loading
Loading
Loading
+8 −4
Original line number Diff line number Diff line
@@ -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);
@@ -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);

	/*