Re: athn(4) resets entire chip when switching channels

2012-10-21 Thread Mark Kettenis
 Date: Sat, 20 Oct 2012 21:16:38 +0200
 From: Stefan Sperling s...@openbsd.org
 
 This looks like an obvious and accidental coding error. But I have no
 working athn(4) hardware to confirm that fixing it doesn't do any harm.
 Can athn(4) users please test this? Thanks.
 
 Index: athn.c
 ===
 RCS file: /cvs/src/sys/dev/ic/athn.c,v
 retrieving revision 1.74
 diff -u -p -r1.74 athn.c
 --- athn.c20 Oct 2012 09:54:20 -  1.74
 +++ athn.c20 Oct 2012 19:07:52 -
 @@ -915,8 +915,8 @@ athn_switch_chan(struct athn_softc *sc, 
  #ifdef notyet
   /* AR9280 needs a full reset. */
   if (AR_SREV_9280(sc))
 -#endif
   goto reset;
 +#endif
  
   /* If band or bandwidth changes, we need to do a full reset. */
   if (c-ic_flags != sc-curchan-ic_flags ||

I don't think this diff is right.  Looking at the Linux code, it seems
that the AR9280 indeed always needs a reset when channel switching.
So I think the diff you want is:

Index: athn.c
===
RCS file: /cvs/src/sys/dev/ic/athn.c,v
retrieving revision 1.74
diff -u -p -r1.74 athn.c
--- athn.c  20 Oct 2012 09:54:20 -  1.74
+++ athn.c  21 Oct 2012 10:23:32 -
@@ -912,10 +912,8 @@ athn_switch_chan(struct athn_softc *sc, 
if (error != 0)
goto reset;
 
-#ifdef notyet
/* AR9280 needs a full reset. */
if (AR_SREV_9280(sc))
-#endif
goto reset;
 
/* If band or bandwidth changes, we need to do a full reset. */



athn(4) resets entire chip when switching channels

2012-10-20 Thread Stefan Sperling
This looks like an obvious and accidental coding error. But I have no
working athn(4) hardware to confirm that fixing it doesn't do any harm.
Can athn(4) users please test this? Thanks.

Index: athn.c
===
RCS file: /cvs/src/sys/dev/ic/athn.c,v
retrieving revision 1.74
diff -u -p -r1.74 athn.c
--- athn.c  20 Oct 2012 09:54:20 -  1.74
+++ athn.c  20 Oct 2012 19:07:52 -
@@ -915,8 +915,8 @@ athn_switch_chan(struct athn_softc *sc, 
 #ifdef notyet
/* AR9280 needs a full reset. */
if (AR_SREV_9280(sc))
-#endif
goto reset;
+#endif
 
/* If band or bandwidth changes, we need to do a full reset. */
if (c-ic_flags != sc-curchan-ic_flags ||



Re: athn(4) resets entire chip when switching channels

2012-10-20 Thread Kenneth R Westerback
On Sat, Oct 20, 2012 at 09:16:38PM +0200, Stefan Sperling wrote:
 This looks like an obvious and accidental coding error. But I have no
 working athn(4) hardware to confirm that fixing it doesn't do any harm.
 Can athn(4) users please test this? Thanks.
 
 Index: athn.c
 ===
 RCS file: /cvs/src/sys/dev/ic/athn.c,v
 retrieving revision 1.74
 diff -u -p -r1.74 athn.c
 --- athn.c20 Oct 2012 09:54:20 -  1.74
 +++ athn.c20 Oct 2012 19:07:52 -
 @@ -915,8 +915,8 @@ athn_switch_chan(struct athn_softc *sc, 
  #ifdef notyet
   /* AR9280 needs a full reset. */
   if (AR_SREV_9280(sc))
 -#endif
   goto reset;
 +#endif
  
   /* If band or bandwidth changes, we need to do a full reset. */
   if (c-ic_flags != sc-curchan-ic_flags ||
 

If anything the athn0 in my Acer Aspire 1551 works better. Along with
the kill switch fix, it now seems to attach quicker to the crappy
net at the hospital and I can now reboot the box without losing
the athn.

My athn is

athn0 at pci3 dev 0 function 0 Atheros AR9287 rev 0x01: apic 2 int 17
athn0: AR9287 rev 2 (2T2R), ROM rev 4, address ec:55:f9:3e:18:fa

 Ken