From: Sven Eckelmann <sven@narfation.org>
To: Felix Fietkau <nbd@openwrt.org>
Cc: Adrian Chadd <adrian@freebsd.org>,
Simon Wunderlich <simon.wunderlich@s2003.tu-chemnitz.de>,
linux-wireless@vger.kernel.org, linville@tuxdriver.com,
mcgrof@qca.qualcomm.com, ath9k-devel@lists.ath9k.org,
lindner_marek@yahoo.de
Subject: Re: [ath9k-devel] [PATCHv2] ath9k_hw: Handle AR_INTR_SYNC_HOST1_FATAL on AR9003
Date: Fri, 05 Oct 2012 17:03:50 +0200 [thread overview]
Message-ID: <1661867.OB0LbMnEW9@bentobox> (raw)
In-Reply-To: <506EDF89.5000805@openwrt.org>
[-- Attachment #1.1: Type: text/plain, Size: 2887 bytes --]
On Friday 05 October 2012 15:24:25 Felix Fietkau wrote:
> On 2012-10-05 3:07 PM, Sven Eckelmann wrote:
> > On Friday 05 October 2012 14:34:28 Felix Fietkau wrote:
> >> On 2012-10-05 1:08 PM, Sven Eckelmann wrote:
> > [...]
> >
> >> Please try this patch to see if it gets rid of these interrupts:
> >> ---
> >> --- a/drivers/net/wireless/ath/ath9k/ani.c
> >> +++ b/drivers/net/wireless/ath/ath9k/ani.c
> >> @@ -307,7 +307,8 @@ void ath9k_ani_reset(struct ath_hw *ah,
> >>
> >> if (IS_CHAN_2GHZ(chan)) {
> >>
> >> ah->ani_function = (ATH9K_ANI_SPUR_IMMUNITY_LEVEL |
> >>
> >> ATH9K_ANI_FIRSTEP_LEVEL);
> >>
> >> - if (AR_SREV_9300_20_OR_LATER(ah))
> >> + if (AR_SREV_9300_20_OR_LATER(ah) &&
> >> + ah->caps.rx_chainmask != 1)
> >>
> >> ah->ani_function |= ATH9K_ANI_MRC_CCK;
> >>
> >> } else
> >>
> >> ah->ani_function = 0;
> >
> > Looks partially good. At least this patch fixed parts my friday :D
> >
> > I have more similar bugs, but at least this one is related to a bandwidth
> > problem which I also wanted to check today. But it didn't fix _this_
> > invalid register access on the client device (but I don't see it anymore
> > on the AP device).
>
> Are you sure that it's still the same register access on the client
> side? I don't see how it could still access MRC related registers with
> this part masked out.
Yes, I am sure. Let's read some code:
if (ah->opmode == NL80211_IFTYPE_AP) {
if (IS_CHAN_2GHZ(chan)) {
ah->ani_function = (ATH9K_ANI_SPUR_IMMUNITY_LEVEL |
ATH9K_ANI_FIRSTEP_LEVEL);
if (AR_SREV_9300_20_OR_LATER(ah) &&
ah->caps.rx_chainmask != 1)
ah->ani_function |= ATH9K_ANI_MRC_CCK;
} else
ah->ani_function = 0;
}
Now raise your hands when you see the "ah->opmode == NL80211_IFTYPE_AP". I've
just added following after this block
if (!AR_SREV_9300_20_OR_LATER(ah) || ah->caps.rx_chainmask == 1)
ah->ani_function &= ~ATH9K_ANI_MRC_CCK;
But maybe it is better to fix the test in __ath9k_hw_init
if (!AR_SREV_9300_20_OR_LATER(ah) || ah->caps.rx_chainmask == 1)
ah->ani_function &= ~ATH9K_ANI_MRC_CCK;
The problem in __ath9k_hw_init is the value of ah->caps.rx_chainmask ... which
is not yet initialized correctly (and therefore ends up as 0).
I've attached my "please don't enable MRC CCK" version of the patch. Feel free
to submit it because you've submitted the initial version... or other things
with it ;)
And thanks a lot for the help.
> Maybe it would make sense to come up with a debugging patch that checks
> the IRQ status register on every register access to see if an error was
> reported by the last one, and if there is an error, throw a stack trace.
Already done that. But got not enough useful information from this spam of
half backed stackdumps. But storing the value of the sync_cause register
helped a lot.
Kind regards,
Sven
[-- Attachment #1.2: 991-ani_mrc_cck.patch --]
[-- Type: text/x-patch, Size: 1159 bytes --]
--- a/drivers/net/wireless/ath/ath9k/ani.c
+++ b/drivers/net/wireless/ath/ath9k/ani.c
@@ -307,12 +307,16 @@ void ath9k_ani_reset(struct ath_hw *ah,
if (IS_CHAN_2GHZ(chan)) {
ah->ani_function = (ATH9K_ANI_SPUR_IMMUNITY_LEVEL |
ATH9K_ANI_FIRSTEP_LEVEL);
- if (AR_SREV_9300_20_OR_LATER(ah))
+ if (AR_SREV_9300_20_OR_LATER(ah) &&
+ ah->caps.rx_chainmask != 1)
ah->ani_function |= ATH9K_ANI_MRC_CCK;
} else
ah->ani_function = 0;
}
+ if (!AR_SREV_9300_20_OR_LATER(ah) || ah->caps.rx_chainmask == 1)
+ ah->ani_function &= ~ATH9K_ANI_MRC_CCK;
+
/* always allow mode (on/off) to be controlled */
ah->ani_function |= ATH9K_ANI_MODE;
--- a/drivers/net/wireless/ath/ath9k/hw.c
+++ b/drivers/net/wireless/ath/ath9k/hw.c
@@ -674,7 +674,7 @@ static int __ath9k_hw_init(struct ath_hw
ah->ani_function = ATH9K_ANI_ALL;
if (AR_SREV_9280_20_OR_LATER(ah) && !AR_SREV_9300_20_OR_LATER(ah))
ah->ani_function &= ~ATH9K_ANI_NOISE_IMMUNITY_LEVEL;
- if (!AR_SREV_9300_20_OR_LATER(ah))
+ if (!AR_SREV_9300_20_OR_LATER(ah) || ah->caps.rx_chainmask == 1)
ah->ani_function &= ~ATH9K_ANI_MRC_CCK;
ath9k_hw_init_mode_regs(ah);
[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 836 bytes --]
next prev parent reply other threads:[~2012-10-05 15:03 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-09-27 14:41 [PATCH] ath9k_hw: Handle AR_INTR_SYNC_HOST1_(FATAL|PERR) on AR9003 Sven Eckelmann
2012-10-02 10:33 ` [PATCHv2] ath9k_hw: Handle AR_INTR_SYNC_HOST1_FATAL " Sven Eckelmann
2012-10-02 13:13 ` Adrian Chadd
2012-10-02 13:33 ` [ath9k-devel] " Felix Fietkau
2012-10-02 13:35 ` Simon Wunderlich
2012-10-02 14:06 ` Adrian Chadd
2012-10-02 15:02 ` Sven Eckelmann
2012-10-02 15:20 ` [ath9k-devel] " Felix Fietkau
2012-10-03 14:51 ` Adrian Chadd
2012-10-05 11:08 ` Sven Eckelmann
2012-10-05 12:34 ` Felix Fietkau
2012-10-05 13:07 ` Sven Eckelmann
2012-10-05 13:24 ` Felix Fietkau
2012-10-05 15:03 ` Sven Eckelmann [this message]
2012-10-05 15:15 ` Felix Fietkau
2012-10-05 16:05 ` Sven Eckelmann
2012-10-05 16:21 ` Adrian Chadd
2012-10-05 16:51 ` Sven Eckelmann
2012-10-05 23:48 ` Adrian Chadd
2012-10-06 9:03 ` Felix Fietkau
2013-02-21 11:14 ` Felix Liao
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1661867.OB0LbMnEW9@bentobox \
--to=sven@narfation.org \
--cc=adrian@freebsd.org \
--cc=ath9k-devel@lists.ath9k.org \
--cc=lindner_marek@yahoo.de \
--cc=linux-wireless@vger.kernel.org \
--cc=linville@tuxdriver.com \
--cc=mcgrof@qca.qualcomm.com \
--cc=nbd@openwrt.org \
--cc=simon.wunderlich@s2003.tu-chemnitz.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).