[3.16.y-ckt stable] Patch "ath5k: fix spontaneus AR5312 freezes" has been added to staging queue

Luis Henriques luis.henriques at canonical.com
Thu Mar 19 10:13:47 UTC 2015

This is a note to let you know that I have just added a patch titled

    ath5k: fix spontaneus AR5312 freezes

to the linux-3.16.y-queue branch of the 3.16.y-ckt extended stable tree 
which can be found at:


This patch is scheduled to be released in version 3.16.7-ckt9.

If you, or anyone else, feels it should not be added to this tree, please 
reply to this email.

For more information about the 3.16.y-ckt tree, see



>From 032f0e4fcc8816a774284f0179baf5869db81e30 Mon Sep 17 00:00:00 2001
From: Sergey Ryazanov <ryazanov.s.a at gmail.com>
Date: Wed, 4 Feb 2015 00:21:13 +0300
Subject: ath5k: fix spontaneus AR5312 freezes

commit 8bfae4f9938b6c1f033a5159febe97e441d6d526 upstream.

Sometimes while CPU have some load and ath5k doing the wireless
interface reset the whole WiSoC completely freezes. Set of tests shows
that using atomic delay function while we wait interface reset helps to
avoid such freezes.

The easiest way to reproduce this issue: create a station interface,
start continous scan with wpa_supplicant and load CPU by something. Or
just create multiple station interfaces and put them all in continous

This patch partially reverts the commit 1846ac3dbec0 ("ath5k: Use
usleep_range where possible"), which replaces initial udelay()
by usleep_range().

I do not know actual source of this issue, but all looks like that HW
freeze is caused by transaction on internal SoC bus, while wireless
block is in reset state.

Also I should note that I do not know how many chips are affected, but I
did not see this issue with chips, other than AR5312.

CC: Jiri Slaby <jirislaby at gmail.com>
CC: Nick Kossifidis <mickflemm at gmail.com>
CC: Luis R. Rodriguez <mcgrof at do-not-panic.com>
Fixes: 1846ac3dbec0 ("ath5k: Use usleep_range where possible")
Reported-by: Christophe Prevotaux <c.prevotaux at rural-networks.com>
Tested-by: Christophe Prevotaux <c.prevotaux at rural-networks.com>
Tested-by: Eric Bree <ebree at nltinc.com>
Signed-off-by: Sergey Ryazanov <ryazanov.s.a at gmail.com>
Signed-off-by: Kalle Valo <kvalo at codeaurora.org>
Signed-off-by: Luis Henriques <luis.henriques at canonical.com>
 drivers/net/wireless/ath/ath5k/reset.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/wireless/ath/ath5k/reset.c b/drivers/net/wireless/ath/ath5k/reset.c
index a3399c4f13a9..b9b651ea9851 100644
--- a/drivers/net/wireless/ath/ath5k/reset.c
+++ b/drivers/net/wireless/ath/ath5k/reset.c
@@ -478,7 +478,7 @@ ath5k_hw_wisoc_reset(struct ath5k_hw *ah, u32 flags)
 	regval = ioread32(reg);
 	iowrite32(regval | val, reg);
 	regval = ioread32(reg);
-	usleep_range(100, 150);
+	udelay(100);	/* NB: should be atomic */

 	/* Bring BB/MAC out of reset */
 	iowrite32(regval & ~val, reg);

More information about the kernel-team mailing list