All of lore.kernel.org
 help / color / mirror / Atom feed
* [ath9k-devel] ath9k_hw_check_alive routine
@ 2011-01-10 20:23 ` Bill Jordan
  0 siblings, 0 replies; 6+ messages in thread
From: Bill Jordan @ 2011-01-10 20:23 UTC (permalink / raw)
  To: ath9k-devel

This routine is failing a lot on my AR9160. The ((reg & 0x7E7FFFEF) ==
0x00702400) test is the one that always fails. There is no debug
messages in this path, so it may not be obvious whether others are
experiencing the problem.

This forces ath9k_tasklet to reset the hardware. If I increase the
count to 500, I can eliminate most of the resets, so the hardware
isn't really hung. However, it sometimes takes over 25 milliseconds
before the test condition passes.

I don't have specs for the radio, and the numeric constants aren't
very useful, so I can't tell what condition we are waiting for or why.

Can someone with a spec shed some light on this problem?

bool ath9k_hw_check_alive(struct ath_hw *ah)
{
	int count = 50;
	u32 reg;

	if (AR_SREV_9285_10_OR_LATER(ah))
		return true;

	do {
		reg = REG_READ(ah, AR_OBS_BUS_1);

		if ((reg & 0x7E7FFFEF) == 0x00702400)
			continue;

		switch (reg & 0x7E000B00) {
		case 0x1E000000:
		case 0x52000B00:
		case 0x18000B00:
			continue;
		default:
			return true;
		}
	} while (count-- > 0);
	return false;
}

Thanks,
Bill Jordan

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2011-01-12  1:37 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-01-10 20:23 [ath9k-devel] ath9k_hw_check_alive routine Bill Jordan
2011-01-10 20:23 ` Bill Jordan
2011-01-11  0:26 ` [ath9k-devel] " Felix Fietkau
2011-01-11  0:26   ` Felix Fietkau
2011-01-12  1:37   ` [ath9k-devel] " Bill Jordan
2011-01-12  1:37     ` Bill Jordan

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.