On Fri, May 15, 2020 at 11:17 AM Stefan Sperling <[email protected]> wrote:
> On Fri, May 15, 2020 at 11:11:44AM -0400, sven falempin wrote:
> > Index: if_iwx.c
> > ===================================================================
> > RCS file: /cvs/src/sys/dev/pci/if_iwx.c,v
> > retrieving revision 1.11
> > diff -u -p -r1.11 if_iwx.c
> > --- if_iwx.c 29 Apr 2020 13:13:30 -0000 1.11
> > +++ if_iwx.c 15 May 2020 15:08:45 -0000
> > @@ -3222,6 +3222,9 @@ iwx_run_init_mvm_ucode(struct iwx_softc
> > * Send init config command to mark that we are sending NVM
> > * access commands
> > */
> > + printf("%s: DELAYING\n", DEVNAME(sc));
> > + DELAY(5000);
> > +
> > err = iwx_send_cmd_pdu(sc, IWX_WIDE_ID(IWX_SYSTEM_GROUP,
> > IWX_INIT_EXTENDED_CFG_CMD), 0, sizeof(init_cfg), &init_cfg);
> > if (err)
> >
> > Gave
> >
> > iwx0: DELAYING
> > iwx0: dumping device error log
> > iwx0: Start Error Log Dump:
> > iwx0: Status: 0x1, count: 6
> > iwx0: 0x00000071 | NMI_INTERRUPT_UMAC_FATAL
> > iwx0: 0020A2F0 | trm_hw_status0
> > iwx0: 00000000 | trm_hw_status1
> > iwx0: 004FC308 | branchlink2
> > iwx0: 00016E5A | interruptlink1
> > iwx0: 00016E5A | interruptlink2
> > iwx0: 004F9F62 | data1
> > iwx0: 00001000 | data2
> > iwx0: F0000008 | data3
> > iwx0: 00000000 | beacon time
> > iwx0: 000115E1 | tsf low
> > iwx0: 00000000 | tsf hi
> > iwx0: 00000000 | time gp1
> > iwx0: 000115E2 | time gp2
> > iwx0: 00000001 | uCode revision type
> > iwx0: 0000002E | uCode version major
> > iwx0: 177B3E46 | uCode version minor
> > iwx0: 00000340 | hw version
> > iwx0: 18889000 | board version
> > iwx0: 800AFD0C | hcmd
> > iwx0: 20020000 | isr0
> > iwx0: 00000000 | isr1
> > iwx0: 18F00002 | isr2
> > iwx0: 00C0000C | isr3
> > iwx0: 00000000 | isr4
> > iwx0: 00000000 | last cmd Id
> > iwx0: 004F9F62 | wait_event
> > iwx0: 00000000 | l2p_control
> > iwx0: 00000020 | l2p_duration
> > iwx0: 00000000 | l2p_mhvalid
> > iwx0: 00000000 | l2p_addr_match
> > iwx0: 00000009 | lmpm_pmg_sel
> > iwx0: 19071335 | timestamp
> > iwx0: 00000828 | flow_handler
> > iwx0: Start UMAC Error Log Dump:
> > iwx0: Status: 0x1, count: 7
> > iwx0: 0x201010A3 | ADVANCED_SYSASSERT
> > iwx0: 0x00000000 | umac branchlink1
> > iwx0: 0xC008B1C0 | umac branchlink2
> > iwx0: 0xC0084E04 | umac interruptlink1
> > iwx0: 0x00000000 | umac interruptlink2
> > iwx0: 0x00000002 | umac data1
> > iwx0: 0x00000001 | umac data2
> > iwx0: 0xDEADBEEF | umac data3
> > iwx0: 0x0000002E | umac major
> > iwx0: 0x177B3E46 | umac minor
> > iwx0: 0x000115D2 | frame pointer
> > iwx0: 0xC0886C6C | stack pointer
> > iwx0: 0x00050C00 | last host cmd
> > iwx0: 0x00000000 | isr status reg
> > driver status:
> > tx ring 0: qid=0 cur=6 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=0 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
> > tx ring 20: qid=20 cur=0 queued=0
> > tx ring 21: qid=21 cur=0 queued=0
> > tx ring 22: qid=22 cur=0 queued=0
> > tx ring 23: qid=23 cur=0 queued=0
> > tx ring 24: qid=24 cur=0 queued=0
> > tx ring 25: qid=25 cur=0 queued=0
> > tx ring 26: qid=26 cur=0 queued=0
> > tx ring 27: qid=27 cur=0 queued=0
> > tx ring 28: qid=28 cur=0 queued=0
> > tx ring 29: qid=29 cur=0 queued=0
> > tx ring 30: qid=30 cur=0 queued=0
> > rx ring: cur=265
> > 802.11 state INIT
> > iwx0: fatal firmware error
> >
> > I think the delay must be somewhere after.
>
> Ouch. Yes, looks like that's a bad spot.
>
> Though it is an interesting observation that waiting there for a long time
> causes another problem.
>
> > I know it s a bit silly , but would a test with
> >
> > #ifdef IWX_DEBUG
> > #define DPRINTF(x) do { if (iwx_debug > 0) printf x; } while (0)
> > #define DPRINTFN(n, x) do { if (iwx_debug >= (n)) printf x; } while (0)
> > int iwx_debug = 1;
> > #else
> > #define DPRINTF(x) do { DELAY(10); } while (1)
> > #define DPRINTFN(n, x) do { DELAY(10); } while (1)
> > #endif
> >
> > makes sense ?
>
> Not really. That just puts DELAY(10) in some arbitrary places.
> What we need to know is where exactly the driver is going too fast.
>
Current test.
# dmesg | grep fatal
iwx0: fatal firmware error 1
iwx0: fatal firmware error 1
iwx0: fatal firmware error 1
iwx0: fatal firmware error 1
iwx0: fatal firmware error 1
iwx0: fatal firmware error 1
iwx0: fatal firmware error 1
iwx0: fatal firmware error 1
iwx0: fatal firmware error 1
iwx0: fatal firmware error 1
iwx0: fatal firmware error 1
iwx0: fatal firmware error 1
iwx0: fatal firmware error 1
iwx0: fatal firmware error 1
iwx0: fatal firmware error 1
iwx0: fatal firmware error 1
iwx0: fatal firmware error 1
iwx0: fatal firmware error 1
iwx0: fatal firmware error 1
iwx0: fatal firmware error 1
iwx0: fatal firmware error 1
iwx0: fatal firmware error 1
iwx0: fatal firmware error 1
iwx0: fatal firmware error 1
iwx0: fatal firmware error 1
iwx0: fatal firmware error 1
[0]-[current]-[/usr/src/sys/dev/pci]
# cd /usr/src/sys/dev/pci/ ; cvs diff 2>/dev/null
Index: if_iwx.c
===================================================================
RCS file: /cvs/src/sys/dev/pci/if_iwx.c,v
retrieving revision 1.11
diff -u -p -r1.11 if_iwx.c
--- if_iwx.c 29 Apr 2020 13:13:30 -0000 1.11
+++ if_iwx.c 16 May 2020 22:49:21 -0000
@@ -343,10 +343,8 @@ void iwx_rx_tx_cmd(struct iwx_softc *, s
void iwx_rx_bmiss(struct iwx_softc *, struct iwx_rx_packet *,
struct iwx_rx_data *);
int iwx_binding_cmd(struct iwx_softc *, struct iwx_node *, uint32_t);
-void iwx_phy_ctxt_cmd_hdr(struct iwx_softc *, struct iwx_phy_ctxt *,
- struct iwx_phy_context_cmd *, uint32_t, uint32_t);
-void iwx_phy_ctxt_cmd_data(struct iwx_softc *, struct
iwx_phy_context_cmd *,
- struct ieee80211_channel *, uint8_t, uint8_t);
+int iwx_phy_ctxt_cmd_uhb(struct iwx_softc *, struct iwx_phy_ctxt *,
uint8_t,
+ uint8_t, uint32_t, uint32_t);
int iwx_phy_ctxt_cmd(struct iwx_softc *, struct iwx_phy_ctxt *, uint8_t,
uint8_t, uint32_t, uint32_t);
int iwx_send_cmd(struct iwx_softc *, struct iwx_host_cmd *);
@@ -738,6 +736,7 @@ iwx_apply_debug_destination(struct iwx_s
DEVNAME(sc), op));
break;
}
+ // DELAY(2);
}
monitor:
@@ -1380,7 +1379,7 @@ iwx_poll_bit(struct iwx_softc *sc, int r
return 0;
}
timo -= 10;
- DELAY(10);
+ DELAY(20);
}
}
@@ -1396,7 +1395,7 @@ iwx_nic_lock(struct iwx_softc *sc)
IWX_SETBITS(sc, IWX_CSR_GP_CNTRL,
IWX_CSR_GP_CNTRL_REG_FLAG_MAC_ACCESS_REQ);
- DELAY(2);
+ DELAY(20);
if (iwx_poll_bit(sc, IWX_CSR_GP_CNTRL,
IWX_CSR_GP_CNTRL_REG_VAL_MAC_ACCESS_EN,
@@ -3240,6 +3239,9 @@ iwx_run_init_mvm_ucode(struct iwx_softc
if (err)
return err;
+ // printf("%s: DELAYING\n", DEVNAME(sc));
+ // DELAY(2000);
+
/* Wait for the init complete notification from the firmware. */
while ((sc->sc_init_complete & wait_flags) != wait_flags) {
err = tsleep_nsec(&sc->sc_init_complete, 0, "iwxinit",
@@ -3773,52 +3775,38 @@ iwx_binding_cmd(struct iwx_softc *sc, st
return err;
}
-void
-iwx_phy_ctxt_cmd_hdr(struct iwx_softc *sc, struct iwx_phy_ctxt *ctxt,
- struct iwx_phy_context_cmd *cmd, uint32_t action, uint32_t apply_time)
+int
+iwx_phy_ctxt_cmd_uhb(struct iwx_softc *sc, struct iwx_phy_ctxt *ctxt,
+ uint8_t chains_static, uint8_t chains_dynamic, uint32_t action,
+ uint32_t apply_time)
{
- memset(cmd, 0, sizeof(struct iwx_phy_context_cmd));
+ struct ieee80211com *ic = &sc->sc_ic;
+ struct iwx_phy_context_cmd_uhb cmd;
+ uint8_t active_cnt, idle_cnt;
+ struct ieee80211_channel *chan = ctxt->channel;
- cmd->id_and_color = htole32(IWX_FW_CMD_ID_AND_COLOR(ctxt->id,
+ memset(&cmd, 0, sizeof(cmd));
+ cmd.id_and_color = htole32(IWX_FW_CMD_ID_AND_COLOR(ctxt->id,
ctxt->color));
- cmd->action = htole32(action);
- cmd->apply_time = htole32(apply_time);
-}
+ cmd.action = htole32(action);
+ cmd.apply_time = htole32(apply_time);
-void
-iwx_phy_ctxt_cmd_data(struct iwx_softc *sc, struct iwx_phy_context_cmd
*cmd,
- struct ieee80211_channel *chan, uint8_t chains_static,
- uint8_t chains_dynamic)
-{
- struct ieee80211com *ic = &sc->sc_ic;
- uint8_t active_cnt, idle_cnt;
+ cmd.ci.band = IEEE80211_IS_CHAN_2GHZ(chan) ?
+ IWX_PHY_BAND_24 : IWX_PHY_BAND_5;
+ cmd.ci.channel = htole32(ieee80211_chan2ieee(ic, chan));
+ cmd.ci.width = IWX_PHY_VHT_CHANNEL_MODE20;
+ cmd.ci.ctrl_pos = IWX_PHY_VHT_CTRL_POS_1_BELOW;
- if (isset(sc->sc_enabled_capa,
IWX_UCODE_TLV_CAPA_ULTRA_HB_CHANNELS)) {
- cmd->ci.band = IEEE80211_IS_CHAN_2GHZ(chan) ?
- IWX_PHY_BAND_24 : IWX_PHY_BAND_5;
- cmd->ci.channel = htole32(ieee80211_chan2ieee(ic, chan));
- cmd->ci.width = IWX_PHY_VHT_CHANNEL_MODE20;
- cmd->ci.ctrl_pos = IWX_PHY_VHT_CTRL_POS_1_BELOW;
- } else {
- struct iwx_fw_channel_info_v1 *ci_v1;
- ci_v1 = (struct iwx_fw_channel_info_v1 *)&cmd->ci;
- ci_v1->band = IEEE80211_IS_CHAN_2GHZ(chan) ?
- IWX_PHY_BAND_24 : IWX_PHY_BAND_5;
- ci_v1->channel = ieee80211_chan2ieee(ic, chan);
- ci_v1->width = IWX_PHY_VHT_CHANNEL_MODE20;
- ci_v1->ctrl_pos = IWX_PHY_VHT_CTRL_POS_1_BELOW;
- }
- /* Set rx the chains */
idle_cnt = chains_static;
active_cnt = chains_dynamic;
-
- cmd->rxchain_info = htole32(iwx_fw_valid_rx_ant(sc) <<
+ cmd.rxchain_info = htole32(iwx_fw_valid_rx_ant(sc) <<
IWX_PHY_RX_CHAIN_VALID_POS);
- cmd->rxchain_info |= htole32(idle_cnt << IWX_PHY_RX_CHAIN_CNT_POS);
- cmd->rxchain_info |= htole32(active_cnt <<
+ cmd.rxchain_info |= htole32(idle_cnt << IWX_PHY_RX_CHAIN_CNT_POS);
+ cmd.rxchain_info |= htole32(active_cnt <<
IWX_PHY_RX_CHAIN_MIMO_CNT_POS);
+ cmd.txchain_info = htole32(iwx_fw_valid_tx_ant(sc));
- cmd->txchain_info = htole32(iwx_fw_valid_tx_ant(sc));
+ return iwx_send_cmd_pdu(sc, IWX_PHY_CONTEXT_CMD, 0, sizeof(cmd),
&cmd);
}
int
@@ -3826,23 +3814,44 @@ iwx_phy_ctxt_cmd(struct iwx_softc *sc, s
uint8_t chains_static, uint8_t chains_dynamic, uint32_t action,
uint32_t apply_time)
{
+ struct ieee80211com *ic = &sc->sc_ic;
struct iwx_phy_context_cmd cmd;
- size_t len;
-
- iwx_phy_ctxt_cmd_hdr(sc, ctxt, &cmd, action, apply_time);
+ uint8_t active_cnt, idle_cnt;
+ struct ieee80211_channel *chan = ctxt->channel;
/*
- * Intel resized fw_channel_info struct and neglected to resize the
- * phy_context_cmd struct which contains it; so magic happens with
- * command length adjustments at run-time... :(
+ * Intel increased the size of the fw_channel_info struct and
neglected
+ * to bump the phy_context_cmd struct, which contains an
fw_channel_info
+ * member in the middle.
+ * To keep things simple we use a separate function to handle the
larger
+ * variant of the phy context command.
*/
- iwx_phy_ctxt_cmd_data(sc, &cmd, ctxt->channel,
- chains_static, chains_dynamic);
- len = sizeof(struct iwx_phy_context_cmd);
- if (!isset(sc->sc_enabled_capa,
IWX_UCODE_TLV_CAPA_ULTRA_HB_CHANNELS))
- len -= (sizeof(struct iwx_fw_channel_info) -
- sizeof(struct iwx_fw_channel_info_v1));
- return iwx_send_cmd_pdu(sc, IWX_PHY_CONTEXT_CMD, 0, len, &cmd);
+ if (isset(sc->sc_enabled_capa,
IWX_UCODE_TLV_CAPA_ULTRA_HB_CHANNELS))
+ return iwx_phy_ctxt_cmd_uhb(sc, ctxt, chains_static,
+ chains_dynamic, action, apply_time);
+
+ memset(&cmd, 0, sizeof(cmd));
+ cmd.id_and_color = htole32(IWX_FW_CMD_ID_AND_COLOR(ctxt->id,
+ ctxt->color));
+ cmd.action = htole32(action);
+ cmd.apply_time = htole32(apply_time);
+
+ cmd.ci.band = IEEE80211_IS_CHAN_2GHZ(chan) ?
+ IWX_PHY_BAND_24 : IWX_PHY_BAND_5;
+ cmd.ci.channel = ieee80211_chan2ieee(ic, chan);
+ cmd.ci.width = IWX_PHY_VHT_CHANNEL_MODE20;
+ cmd.ci.ctrl_pos = IWX_PHY_VHT_CTRL_POS_1_BELOW;
+
+ idle_cnt = chains_static;
+ active_cnt = chains_dynamic;
+ cmd.rxchain_info = htole32(iwx_fw_valid_rx_ant(sc) <<
+ IWX_PHY_RX_CHAIN_VALID_POS);
+ cmd.rxchain_info |= htole32(idle_cnt << IWX_PHY_RX_CHAIN_CNT_POS);
+ cmd.rxchain_info |= htole32(active_cnt <<
+ IWX_PHY_RX_CHAIN_MIMO_CNT_POS);
+ cmd.txchain_info = htole32(iwx_fw_valid_tx_ant(sc));
+
+ return iwx_send_cmd_pdu(sc, IWX_PHY_CONTEXT_CMD, 0, sizeof(cmd),
&cmd);
}
int
@@ -7335,7 +7344,7 @@ iwx_intr(void *arg)
ieee80211_state_name[sc->sc_ic.ic_state]);
#endif
- printf("%s: fatal firmware error\n", DEVNAME(sc));
+ printf("%s: fatal firmware error 2\n", DEVNAME(sc));
if ((sc->sc_flags & IWX_FLAG_SHUTDOWN) == 0)
task_add(systq, &sc->init_task);
rv = 1;
@@ -7445,7 +7454,7 @@ iwx_intr_msix(void *arg)
ieee80211_state_name[sc->sc_ic.ic_state]);
#endif
- printf("%s: fatal firmware error\n", DEVNAME(sc));
+ printf("%s: fatal firmware error 1\n", DEVNAME(sc));
if ((sc->sc_flags & IWX_FLAG_SHUTDOWN) == 0)
task_add(systq, &sc->init_task);
return 1;
Index: if_iwxreg.h
===================================================================
RCS file: /cvs/src/sys/dev/pci/if_iwxreg.h,v
retrieving revision 1.2
diff -u -p -r1.2 if_iwxreg.h
--- if_iwxreg.h 28 Feb 2020 14:51:53 -0000 1.2
+++ if_iwxreg.h 16 May 2020 22:49:22 -0000
@@ -2794,7 +2794,15 @@ struct iwx_fw_channel_info {
* @acquisition_data: ???
* @dsp_cfg_flags: set to 0
*/
-struct iwx_phy_context_cmd {
+/*
+ * XXX Intel forgot to bump the PHY_CONTEXT command API when they increased
+ * the size of fw_channel_info from v1 to v2.
+ * To keep things simple we define two versions of this struct, and both
+ * are labled as CMD_API_VER_1. (The Linux iwlwifi driver performs dark
+ * magic with pointers to struct members instead.)
+ */
+/* This version must be used if IWX_UCODE_TLV_CAPA_ULTRA_HB_CHANNELS is
set: */
+struct iwx_phy_context_cmd_uhb {
/* COMMON_INDEX_HDR_API_S_VER_1 */
uint32_t id_and_color;
uint32_t action;
@@ -2807,6 +2815,21 @@ struct iwx_phy_context_cmd {
uint32_t acquisition_data;
uint32_t dsp_cfg_flags;
} __packed; /* IWX_PHY_CONTEXT_CMD_API_VER_1 */
+/* This version must be used otherwise: */
+struct iwx_phy_context_cmd {
+ /* COMMON_INDEX_HDR_API_S_VER_1 */
+ uint32_t id_and_color;
+ uint32_t action;
+ /* IWX_PHY_CONTEXT_DATA_API_S_VER_1 */
+ uint32_t apply_time;
+ uint32_t tx_param_color;
+ struct iwx_fw_channel_info_v1 ci;
+ uint32_t txchain_info;
+ uint32_t rxchain_info;
+ uint32_t acquisition_data;
+ uint32_t dsp_cfg_flags;
+} __packed; /* IWX_PHY_CONTEXT_CMD_API_VER_1 */
+
#define IWX_RX_INFO_PHY_CNT 8
#define IWX_RX_INFO_ENERGY_ANT_ABC_ID
#dmesg snip
iwx0: dumping device error log
iwx0: Start Error Log Dump:
iwx0: Status: 0x5, count: 6
iwx0: 0x00002073 | ADVANCED_SYSASSERT
iwx0: 000022F0 | trm_hw_status0
iwx0: 00000000 | trm_hw_status1
iwx0: 004FC308 | branchlink2
iwx0: 004E8926 | interruptlink1
iwx0: 004E8926 | interruptlink2
iwx0: 00000001 | data1
iwx0: 00000000 | data2
iwx0: DEADBEEF | data3
iwx0: 00000000 | beacon time
iwx0: 05C18CA0 | tsf low
iwx0: 00000000 | tsf hi
iwx0: 00000000 | time gp1
iwx0: 05C18CA1 | time gp2
iwx0: 00000001 | uCode revision type
iwx0: 0000002E | uCode version major
iwx0: 177B3E46 | uCode version minor
iwx0: 00000340 | hw version
iwx0: 18889000 | board version
iwx0: 80F9FC07 | hcmd
iwx0: 00020000 | isr0
iwx0: 00000000 | isr1
iwx0: 18F80002 | isr2
iwx0: 00C0A64C | isr3
iwx0: 00000000 | isr4
iwx0: 000900D2 | last cmd Id
iwx0: 00017240 | wait_event
iwx0: 00000000 | l2p_control
iwx0: 00000020 | l2p_duration
iwx0: 00000000 | l2p_mhvalid
iwx0: 00000080 | l2p_addr_match
iwx0: 00000009 | lmpm_pmg_sel
iwx0: 19071335 | timestamp
iwx0: 000098B8 | flow_handler
iwx0: Start UMAC Error Log Dump:
iwx0: Status: 0x5, count: 7
iwx0: 0x20000070 | NMI_INTERRUPT_LMAC_FATAL
iwx0: 0x00000000 | umac branchlink1
iwx0: 0xC008B1C0 | umac branchlink2
iwx0: 0x80489F5E | umac interruptlink1
iwx0: 0x80489F5E | umac interruptlink2
iwx0: 0x00000400 | umac data1
iwx0: 0x80489F5E | umac data2
iwx0: 0xDEADBEEF | umac data3
iwx0: 0x0000002E | umac major
iwx0: 0x177B3E46 | umac minor
iwx0: 0x05C18CB1 | frame pointer
iwx0: 0xC088628C | stack pointer
iwx0: 0x00030018 | last host cmd
iwx0: 0x00000000 | isr status reg
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=0 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
tx ring 20: qid=20 cur=0 queued=0
tx ring 21: qid=21 cur=0 queued=0
tx ring 22: qid=22 cur=0 queued=0
tx ring 23: qid=23 cur=0 queued=0
tx ring 24: qid=24 cur=0 queued=0
tx ring 25: qid=25 cur=0 queued=0
tx ring 26: qid=26 cur=0 queued=0
tx ring 27: qid=27 cur=0 queued=0
tx ring 28: qid=28 cur=0 queued=0
tx ring 29: qid=29 cur=0 queued=0
tx ring 30: qid=30 cur=0 queued=0
rx ring: cur=154
802.11 state SCAN
iwx0: fatal firmware error 1
Unsure it s a delay , maybe some kind of interrupt is missing
or a instruction is missing .
// DELAY , failed to fix anything ( tested one at a time ) last test same.
FAILED Sat May 16 17:52:42 EDT 2020 1589665962
OK Sat May 16 17:53:20 EDT 2020 1589666000
OK Sat May 16 17:53:59 EDT 2020 1589666039
OK Sat May 16 17:54:38 EDT 2020 1589666078
FAILED Sat May 16 17:55:21 EDT 2020 1589666121
OK Sat May 16 17:56:00 EDT 2020 1589666160
OK Sat May 16 17:56:39 EDT 2020 1589666199
OK Sat May 16 17:57:21 EDT 2020 1589666241
FAILED Sat May 16 17:58:06 EDT 2020 1589666286
OK Sat May 16 17:58:44 EDT 2020 1589666324
OK Sat May 16 17:59:23 EDT 2020 1589666363
OK Sat May 16 18:00:04 EDT 2020 1589666404
FAILED Sat May 16 18:00:48 EDT 2020 1589666448
OK Sat May 16 18:01:26 EDT 2020 1589666486
FAILED Sat May 16 18:02:10 EDT 2020 1589666530
FAILED Sat May 16 18:02:54 EDT 2020 1589666574
OK Sat May 16 18:03:33 EDT 2020 1589666613
FAILED Sat May 16 18:04:17 EDT 2020 1589666657
FAILED Sat May 16 18:05:00 EDT 2020 1589666700
OK Sat May 16 18:05:38 EDT 2020 1589666738
FAILED Sat May 16 18:06:22 EDT 2020 1589666782
OK Sat May 16 18:07:00 EDT 2020 1589666820
FAILED Sat May 16 18:07:43 EDT 2020 1589666863
FAILED Sat May 16 18:08:27 EDT 2020 1589666907
FAILED Sat May 16 18:09:10 EDT 2020 1589666950
OK Sat May 16 18:09:50 EDT 2020 1589666990
OK Sat May 16 18:10:29 EDT 2020 1589667029
FAILED Sat May 16 18:12:13 EDT 2020 1589667133
OK Sat May 16 18:12:53 EDT 2020 1589667173
FAILED Sat May 16 18:13:37 EDT 2020 1589667217
FAILED Sat May 16 18:14:20 EDT 2020 1589667260
FAILED Sat May 16 18:15:03 EDT 2020 1589667303
FAILED Sat May 16 18:15:46 EDT 2020 1589667346
FAILED Sat May 16 18:16:28 EDT 2020 1589667388
OK Sat May 16 18:17:07 EDT 2020 1589667427
OK Sat May 16 18:17:46 EDT 2020 1589667466
OK Sat May 16 18:18:25 EDT 2020 1589667505
--
--
---------------------------------------------------------------------------------------------------------------------
Knowing is not enough; we must apply. Willing is not enough; we must do