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); > > > --