BCM4331 reset leads to wl lockup

Lukas Wunner <[email protected]>
Newsgroups org.infradead.lists.b43-dev,org.kernel.vger.linux-wireless
Message-ID <[email protected]>
On Thu, May 26, 2016 at 02:42:46PM +0200, Michael B?sch wrote:
> On Thu, 26 May 2016 14:12:10 +0200 Lukas Wunner <[email protected]> wrote:
> > +	mmio = early_ioremap(addr, BCM4331_MMIO_SIZE);
> > +	if (!mmio) {
> > +		pr_err("Cannot iomap Apple AirPort card\n");
> > +		return;
> > +	}
> > +	pr_info("Resetting Apple AirPort card\n");
> > +	iowrite32(BCMA_RESET_CTL_RESET,
> > +		  mmio + (1 * BCMA_CORE_SIZE) + BCMA_RESET_CTL);
> > +	early_iounmap(mmio, BCM4331_MMIO_SIZE);
> 
> Just writing that bit is not the correct reset procedure.
> So it might cause problems depending on how wl does the core reset
> later.
> 
> Please try this:
> - wait for BCMA_RESET_ST to be 0
> - set reset bit
> - flush
> - wait 1us
> - reset reset bit
> - flush
> - wait 10us
> 
> See bcma_core_disable()

It turned out that the lockups are triggered by bec3cfdca36b
("net: skb_segment() provides list head and tail") in Linux 3.18
and that Eric Duzamet has kindly provided a fix for broadcom-sta:
https://bugs.gentoo.org/show_bug.cgi?id=523326#c24
https://523326.bugs.gentoo.org/attachment.cgi?id=393374

@Broadcom: Please consider releasing a new driver version which
incorporates that patch. The latest version 6.30.223.271 of your
driver is still missing it even though the issue has existed for
almost 18 months now.

Nevertheless I amended my patch to follow the reset procedure you
specified above, just to cover all bases. Thanks Michael.

Best regards,

Lukas
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.