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.

Reply via email to