On Tue, Jan 12, 2016 at 11:59:08AM +0100, Stefan Sperling wrote:
> On Sat, Jan 09, 2016 at 10:25:45PM +0100, Stefan Sperling wrote:
> > I've run into an issue where iwn(4) fails to init the hardware.
> > 
> > Running 'ifconfig iwn0 scan' resulted in:
> > 
> > setting configuration
> > iwn0: fatal firmware error
> > firmware error log:
> >   error type      = "SYSASSERT" (0x00000005)
> >   program counter = 0x00022088
> >   source line     = 0x000000A4
> >   error data      = 0x000000A400000000
> >   branch link     = 0x0002225800022258
> >   interrupt link  = 0x0000153200000000
> >   time            = 27873
> > driver status:
> >   tx ring  0: qid=0  cur=0   queued=0  
> >   tx ring  1: qid=1  cur=0   queued=0  
> >   tx ring  2: qid=2  cur=0   queued=0  
> >   tx ring  3: qid=3  cur=0   queued=0  
> >   tx ring  4: qid=4  cur=6   queued=0  
> >   tx ring  5: qid=5  cur=0   queued=0  
> >   tx ring  6: qid=6  cur=0   queued=0  
> >   tx ring  7: qid=7  cur=0   queued=0  
> >   tx ring  8: qid=8  cur=0   queued=0  
> >   tx ring  9: qid=9  cur=0   queued=0  
> >   tx ring 10: qid=10 cur=0   queued=0  
> >   tx ring 11: qid=11 cur=0   queued=0  
> >   tx ring 12: qid=12 cur=0   queued=0  
> >   tx ring 13: qid=13 cur=0   queued=0  
> >   tx ring 14: qid=14 cur=0   queued=0  
> >   tx ring 15: qid=15 cur=0   queued=0  
> >   tx ring 16: qid=16 cur=0   queued=0  
> >   tx ring 17: qid=17 cur=0   queued=0  
> >   tx ring 18: qid=18 cur=0   queued=0  
> >   tx ring 19: qid=19 cur=0   queued=0  
> >   rx ring: cur=7
> >   802.11 state 0
> > iwn0: RXON command failed
> > iwn0: could not configure device
> > iwn0: could not load firmware .data section
> > iwn0: could not load firmware
> > iwn0: could not initialize hardware
> > 
> > A debug printf revealed the rxon command channel was set to zero:
> > 
> >   iwn_config: rxon chan 0 flags 40008000 cck f ofdm ff
> > 
> > I haven't been able to reproduce the problem with the diff below.
> > Note that this code runs during hardware initialization only.
> > It shouldn't really matter what channel we set here as long as
> > it isn't zero.
> > 
> > Fix a misplaced curly brace while here...
> > 
> > ok?
> 
> Anyone?
> 
> I've been running with this for 3 days without issues.
> 

This fixed it for me.

OK reyk@

> > Index: if_iwn.c
> > ===================================================================
> > RCS file: /cvs/src/sys/dev/pci/if_iwn.c,v
> > retrieving revision 1.153
> > diff -u -p -r1.153 if_iwn.c
> > --- if_iwn.c        7 Jan 2016 23:08:38 -0000       1.153
> > +++ if_iwn.c        9 Jan 2016 21:12:23 -0000
> > @@ -3429,7 +3429,7 @@ iwn_set_link_quality(struct iwn_softc *s
> >                     /* Next retry at immediate lower bit-rate. */
> >                     if (txrate > 0)
> >                             txrate--;
> > -                   }
> > +           }
> >     }
> >  
> >     return iwn_cmd(sc, IWN_CMD_LINK_QUALITY, &linkq, sizeof linkq, 1);
> > @@ -4455,15 +4455,9 @@ iwn_config(struct iwn_softc *sc)
> >     IEEE80211_ADDR_COPY(ic->ic_myaddr, LLADDR(ifp->if_sadl));
> >     IEEE80211_ADDR_COPY(sc->rxon.myaddr, ic->ic_myaddr);
> >     IEEE80211_ADDR_COPY(sc->rxon.wlap, ic->ic_myaddr);
> > -   sc->rxon.chan = ieee80211_chan2ieee(ic, ic->ic_ibss_chan);
> > +   sc->rxon.chan = 1;
> >     sc->rxon.flags = htole32(IWN_RXON_TSF | IWN_RXON_CTS_TO_SELF);
> > -   if (IEEE80211_IS_CHAN_2GHZ(ic->ic_ibss_chan)) {
> > -           sc->rxon.flags |= htole32(IWN_RXON_AUTO | IWN_RXON_24GHZ);
> > -           if (ic->ic_flags & IEEE80211_F_USEPROT)
> > -                   sc->rxon.flags |= htole32(IWN_RXON_TGG_PROT);
> > -           DPRINTF(("%s: 2ghz prot 0x%x\n", __func__,
> > -               le32toh(sc->rxon.flags)));
> > -   }
> > +   sc->rxon.flags |= htole32(IWN_RXON_AUTO | IWN_RXON_24GHZ);
> >     switch (ic->ic_opmode) {
> >     case IEEE80211_M_STA:
> >             sc->rxon.mode = IWN_MODE_STA;
> > @@ -4489,6 +4483,9 @@ iwn_config(struct iwn_softc *sc)
> >         IWN_RXCHAIN_IDLE_COUNT(2);
> >     sc->rxon.rxchain = htole16(rxchain);
> >     DPRINTF(("setting configuration\n"));
> > +   DPRINTF(("%s: rxon chan %d flags %x cck %x ofdm %x\n", __func__,
> > +       sc->rxon.chan, le32toh(sc->rxon.flags), sc->rxon.cck_mask,
> > +       sc->rxon.ofdm_mask));
> >     error = iwn_cmd(sc, IWN_CMD_RXON, &sc->rxon, sc->rxonsz, 0);
> >     if (error != 0) {
> >             printf("%s: RXON command failed\n", sc->sc_dev.dv_xname);
> > 
> 

-- 

Reply via email to