WIP SDIO works!

(Josh, check out line 7030 of cfg80211.c - this affects USB work too.)

 * *  Weirdness warning!  * *
If you comment out "define PTHREAD_PRINTER" on sdio.c:3873, you get
[00017.665] 02952.05847> brcmfmac 0x41c8954f6000 (brcmf_sdio_wd_timer)(0): 'WD would be active, but state is 0'
[00017.665] 02952.03371> aml_sd_emmc_irq_thread: Got a spurious interrupt
[00017.734] 02319.02556> Waiting for GPIO Test Input Interrupt
...and I have no idea why. But in 10 trials each, it happens if
and only if that line is commented out.

To get the driver working, I completely disabled the interrupt
handling thread, and I'm polling for interrupts every 10 msec.
GPIO interrupt just doesn't work yet. Depending on which firmware
file I use, we either get one interrupt and then never again, or
we get constant interrupts although the chipset says there's no
interrupt condition. Penguin can't reproduce the constant-interrupts.

F2 transfers larger than 512 bytes fail. I worked around that in bcmsdh.c.
[00166.884] 02935.02981> brcmfmac main (brcmf_proto_bcdc_query_dcmd)(56): 'Enter, cmd 262 len 1546, ifidx 0'
[00166.894] 02935.05849> Request transfer size is greater than max transfer size
[00166.894] 02935.05849> aml_sd_emmc_request: Failed to setup data descriptors
[00166.894] 02935.05849> sdio: SDIO_IO_RW_DIRECT_EXTENDED failed, retcode = -2
[00166.894] 02935.05849> sdio_rw_data: Error reading data.func: 2 status: -2
[00166.894] 02935.05849> brcmfmac bwdg (brcmf_sdiod_transfer)(58): 'Why did this fail?? result -2'

Porting errors I've made (look out for similar ones):
 - Not resetting a completion, causing it to fall through before it
 was signaled the second time the code waits.
 - Putting an extra & on a pointer (taking its address rather than
 reading its data) - I've done this at least twice.

If you want to see what the firmware is doing,
brcmf_debug_check_console() may be useful with tonight's "debug"
firmware from Penguin (I'll send it via email). Also,
PTHREAD_PRINTER will dump all SDIO transactions after a
time delay (adjust the delay to something useful).

Test: All the following work:
wlan scan
wlan connect GoogleGuest-Legacy
ping google.com
curl www.google.com

Change-Id: I18c803dc48690633bcf9e1e925fad98a533a074b
diff --git a/drivers/wlan/third_party/broadcom/brcmfmac/BUILD.gn b/drivers/wlan/third_party/broadcom/brcmfmac/BUILD.gn
index 602ad25..1f6b266 100644
--- a/drivers/wlan/third_party/broadcom/brcmfmac/BUILD.gn
+++ b/drivers/wlan/third_party/broadcom/brcmfmac/BUILD.gn
@@ -29,8 +29,6 @@
   ]
 
   sources = [
-    "sdio_test.c",
-    
     "bcdc.c",
     "bcdc.h",
     "bcmsdh.c",
@@ -66,6 +64,7 @@
     "fwil_types.h",
     "fwsignal.c",
     "fwsignal.h",
+    "linuxisms.c",
     "linuxisms.h",
     "msgbuf.c",
     "msgbuf.h",
diff --git a/drivers/wlan/third_party/broadcom/brcmfmac/bcdc.c b/drivers/wlan/third_party/broadcom/brcmfmac/bcdc.c
index 7873032..bfddabf 100644
--- a/drivers/wlan/third_party/broadcom/brcmfmac/bcdc.c
+++ b/drivers/wlan/third_party/broadcom/brcmfmac/bcdc.c
@@ -92,6 +92,7 @@
  * the BCDC header and packet data in the tx path.
  */
 #define BRCMF_PROT_FW_SIGNAL_MAX_TXBYTES 12
+void brcmf_debug_check_console();
 
 #define RETRIES 2 /* # of retries to retrieve matching dcmd response */
 /* Must be atleast SDPCM_RESERVE
@@ -152,7 +153,7 @@
     zx_status_t ret;
     struct brcmf_bcdc* bcdc = (struct brcmf_bcdc*)drvr->proto->pd;
 
-    //brcmf_dbg(BCDC, "Enter\n");
+   // brcmf_dbg(BCDC, "Enter\n");
     len += sizeof(struct brcmf_proto_bcdc_dcmd);
     do {
         ret = brcmf_bus_rxctl(drvr->bus_if, (unsigned char*)&bcdc->msg, len, rxlen_out);
@@ -175,19 +176,27 @@
     uint32_t id, flags;
 
     brcmf_dbg(BCDC, "Enter, cmd %d len %d, ifidx %d\n", cmd, len, ifidx);
-    PAUSE; brcmf_dbg(BCDC, "aaaEnter, cmd %d len %d, ifidx %d\n", cmd, len, ifidx);
+    //PAUSE; brcmf_dbg(BCDC, "aaaEnter, cmd %d len %d, ifidx %d\n", cmd, len, ifidx);
 
     *fwerr = ZX_OK;
     ret = brcmf_proto_bcdc_msg(drvr, ifidx, cmd, buf, len, false);
     if (ret != ZX_OK) {
         brcmf_err("brcmf_proto_bcdc_msg failed w/status %d\n", ret);
+        brcmf_debug_check_console();
         goto done;
     }
+    zx_nanosleep(zx_deadline_after(ZX_MSEC(2)));
+   // brcmf_dbg(TEMP, "2 msec after sending message...");
+   // brcmf_debug_check_console();
 
 retry:
     /* wait for interrupt and get first fragment */
     ret = brcmf_proto_bcdc_cmplt(drvr, bcdc->reqid, len, &rxlen);
     if (ret != ZX_OK) {
+        brcmf_dbg(TEMP, "Just got back from message cmplt, result %d", ret);
+    }
+   // brcmf_debug_check_console();
+    if (ret != ZX_OK) {
         goto done;
     }
 
@@ -235,16 +244,23 @@
     int rxlen_out;
 
     brcmf_dbg(BCDC, "Enter, cmd %d len %d ifidx %d\n", cmd, len, ifidx);
-    brcmf_hexdump("set dcmd", buf, len);
+    //brcmf_hexdump("set dcmd", buf, len);
 
     *fwerr = ZX_OK;
     ret = brcmf_proto_bcdc_msg(drvr, ifidx, cmd, buf, len, true);
     if (ret != ZX_OK) {
         goto done;
     }
+    zx_nanosleep(zx_deadline_after(ZX_MSEC(2)));
+    //brcmf_dbg(TEMP, "2 msec after sending message...");
+   // brcmf_debug_check_console();
 
     ret = brcmf_proto_bcdc_cmplt(drvr, bcdc->reqid, len, &rxlen_out);
     if (ret != ZX_OK) {
+        brcmf_dbg(TEMP, "Just got back from message cmplt, result %d", ret);
+    }
+  //  brcmf_debug_check_console();
+    if (ret != ZX_OK) {
         goto done;
     }
 
diff --git a/drivers/wlan/third_party/broadcom/brcmfmac/bcmsdh.c b/drivers/wlan/third_party/broadcom/brcmfmac/bcmsdh.c
index 907a3e6..7084ce9 100644
--- a/drivers/wlan/third_party/broadcom/brcmfmac/bcmsdh.c
+++ b/drivers/wlan/third_party/broadcom/brcmfmac/bcmsdh.c
@@ -20,6 +20,7 @@
 #include <lib/sync/completion.h>
 #include <zircon/status.h>
 
+#include <pthread.h>
 #include <stdatomic.h>
 #ifndef _ALL_SOURCE
 #define _ALL_SOURCE // Enables thrd_create_with_name in <threads.h>.
@@ -72,22 +73,6 @@
   return sum;
 }
 
-extern thrd_t gl_interrupt_thread;
-static int brcmf_sdiod_oob_irqhandler(void* cookie) {
-    struct brcmf_sdio_dev* sdiodev = cookie;
-    zx_status_t status;
-
-    gl_interrupt_thread = thrd_current();
-    while ((status = zx_interrupt_wait(sdiodev->irq_handle, NULL)) == ZX_OK) {
-        //brcmf_dbg(INTR, "OOB intr triggered\n");
-
-        brcmf_sdio_isr(sdiodev->bus);
-    }
-
-    brcmf_err("ISR exiting with status %s\n", zx_status_get_string(status));
-    return (int)status;
-}
-
 static void brcmf_sdiod_ib_irqhandler(struct brcmf_sdio_dev* sdiodev) {
     brcmf_dbg(INTR, "IB intr triggered\n");
 
@@ -96,7 +81,6 @@
 
 /* dummy handler for SDIO function 2 interrupt */
 static void brcmf_sdiod_dummy_irqhandler(struct brcmf_sdio_dev* sdiodev) {}
-bool gl_intr_print;
 extern atomic_int dw_state;
 extern atomic_int dw_count;
 extern bool gl_print_sdio;
@@ -122,10 +106,10 @@
         // thrd_success and maybe thrd_nomem. See zircon/third_party/ulib/musl/include/threads.h
 
         ret = enable_irq_wake(sdiodev->irq_handle);
-        brcmf_dbg(TEMP, "ddpc state %d, times %d", atomic_load(&dw_state), atomic_load(&dw_count));
+        //brcmf_dbg(TEMP, "ddpc state %d, times %d", atomic_load(&dw_state), atomic_load(&dw_count));
         remember_sdio(15, 0xffff, 1, &ret, 4, 0);
-        brcmf_dbg(SDIO, "4Enter, register OOB IRQ\n"); PAUSE; PAUSE;
-        brcmf_dbg(TEMP, "edpc state %d, times %d", atomic_load(&dw_state), atomic_load(&dw_count));
+        //brcmf_dbg(SDIO, "4Enter, register OOB IRQ\n"); PAUSE; PAUSE;
+        //brcmf_dbg(TEMP, "edpc state %d, times %d", atomic_load(&dw_state), atomic_load(&dw_count));
         remember_sdio(16, 0xffff, 1, &ret, 4, 0);
         if (ret != ZX_OK) {
             brcmf_err("enable_irq_wake failed %d\n", ret);
@@ -133,28 +117,30 @@
         }
         sdiodev->irq_wake = true;
 
+        sdio_claim_host(sdiodev->func1);
+
         if (sdiodev->bus_if->chip == BRCM_CC_43362_CHIP_ID) {
-        brcmf_dbg(SDIO, "5Enter, register OOB IRQ\n"); PAUSE; PAUSE;
+        ///brcmf_dbg(SDIO, "5Enter, register OOB IRQ\n"); PAUSE; PAUSE;
             /* assign GPIO to SDIO core */
             addr = CORE_CC_REG(SI_ENUM_BASE, gpiocontrol);
-        brcmf_dbg(SDIO, "6Enter, register OOB IRQ\n"); PAUSE; PAUSE;
+        //brcmf_dbg(SDIO, "6Enter, register OOB IRQ\n"); PAUSE; PAUSE;
             gpiocontrol = brcmf_sdiod_func1_rl(sdiodev, addr, &ret);
-        brcmf_dbg(SDIO, "7Enter, register OOB IRQ\n"); PAUSE; PAUSE;
+        //brcmf_dbg(SDIO, "7Enter, register OOB IRQ\n"); PAUSE; PAUSE;
             gpiocontrol |= 0x2;
             brcmf_sdiod_func1_wl(sdiodev, addr, gpiocontrol, &ret);
 
             brcmf_sdiod_func1_wb(sdiodev, SBSDIO_GPIO_SELECT, 0xf, &ret);
             brcmf_sdiod_func1_wb(sdiodev, SBSDIO_GPIO_OUT, 0, &ret);
             brcmf_sdiod_func1_wb(sdiodev, SBSDIO_GPIO_EN, 0x2, &ret);
-        brcmf_dbg(SDIO, "8Enter, register OOB IRQ\n"); PAUSE; PAUSE;
+        //brcmf_dbg(SDIO, "8Enter, register OOB IRQ\n"); PAUSE; PAUSE;
         }
 
-        brcmf_dbg(SDIO, "9Enter, register OOB IRQ\n"); PAUSE; PAUSE;
+        //brcmf_dbg(SDIO, "9Enter, register OOB IRQ\n"); PAUSE; PAUSE;
         /* must configure SDIO_CCCR_INT_ENABLE to enable irq */
-        brcmf_dbg(TEMP, "fdpc state %d, times %d", atomic_load(&dw_state), atomic_load(&dw_count));
+        //brcmf_dbg(TEMP, "fdpc state %d, times %d", atomic_load(&dw_state), atomic_load(&dw_count));
         remember_sdio(17, 0xffff, 1, &ret, 4, 0);
         data = brcmf_sdiod_func0_rb(sdiodev, SDIO_CCCR_INT_ENABLE, &ret);
-        brcmf_dbg(TEMP, "gdpc state %d, times %d", atomic_load(&dw_state), atomic_load(&dw_count));
+        //brcmf_dbg(TEMP, "gdpc state %d, times %d", atomic_load(&dw_state), atomic_load(&dw_count));
         remember_sdio(18, 0xffff, 1, &ret, 4, 0);
         data |= SDIO_CCCR_IEN_FUNC1 | SDIO_CCCR_IEN_FUNC2 | SDIO_CCCR_IEN_FUNC0;
         brcmf_sdiod_func0_wb(sdiodev, SDIO_CCCR_INT_ENABLE, data, &ret);
@@ -165,47 +151,52 @@
         if (pdata->oob_irq_flags & IRQ_FLAG_LEVEL_HIGH) {
             data |= SDIO_CCCR_BRCM_SEPINT_ACT_HI;
         }
-        gl_intr_print = true;
         brcmf_sdiod_func0_wb(sdiodev, SDIO_CCCR_BRCM_SEPINT, data, &ret);
-        brcmf_dbg(SDIO, "aEnter, register OOB IRQ\n"); PAUSE; PAUSE;
+        //brcmf_dbg(SDIO, "aEnter, register OOB IRQ\n"); PAUSE; PAUSE;
 
 
         sdio_get_oob_irq(&sdiodev->sdio_proto, &sdiodev->irq_handle);
         PAUSE; PAUSE; brcmf_dbg(SDIO, "Did get OOB IRQ 100 msec ago");
-        thrd_create_with_name(&sdiodev->isr_thread, brcmf_sdiod_oob_irqhandler, sdiodev,
-                              "brcmf-sdio-isr");
-        remember_sdio(12, 0xffff, 1, &ret, 4, 0);
-        brcmf_dbg(TEMP, "adpc state %d, times %d", atomic_load(&dw_state), atomic_load(&dw_count));
-        brcmf_dbg(TEMP, "bdpc state %d, times %d", atomic_load(&dw_state), atomic_load(&dw_count));
-        brcmf_dbg(SDIO, "2Enter, register OOB IRQ\n"); PAUSE; PAUSE;
-        brcmf_dbg(TEMP, "cdpc state %d, times %d", atomic_load(&dw_state), atomic_load(&dw_count));
-        thrd_detach(sdiodev->isr_thread);
-        remember_sdio(13, 0xffff, 1, &ret, 4, 0);
-        brcmf_dbg(SDIO, "3Enter, register OOB IRQ\n"); PAUSE; PAUSE;
-        brcmf_dbg(TEMP, "ddpc state %d, times %d", atomic_load(&dw_state), atomic_load(&dw_count));
-        remember_sdio(21, 0xffff, 1, &ret, 4, 0); PAUSE; PAUSE;
-        brcmf_dbg(TEMP, "gdpc state %d, times %d", atomic_load(&dw_state), atomic_load(&dw_count));
-        remember_sdio(22, 0xffff, 1, &ret, 4, 0); PAUSE; PAUSE;
-        brcmf_dbg(TEMP, "hdpc state %d, times %d", atomic_load(&dw_state), atomic_load(&dw_count));
-        remember_sdio(23, 0xffff, 1, &ret, 4, 0); PAUSE; PAUSE;
-        brcmf_dbg(TEMP, "idpc state %d, times %d", atomic_load(&dw_state), atomic_load(&dw_count));
-        remember_sdio(24, 0xffff, 1, &ret, 4, 0); PAUSE; PAUSE; PAUSE; PAUSE; PAUSE; PAUSE;
-        brcmf_dbg(TEMP, "jdpc state %d, times %d", atomic_load(&dw_state), atomic_load(&dw_count));
-        remember_sdio(25, 0xffff, 1, &ret, 4, 0);
-        sdiodev->oob_irq_requested = true;
-        remember_sdio(24, 0xffff, 1, &ret, 4, 0);
-        brcmf_dbg(TEMP, "jdpc state %d, times %d", atomic_load(&dw_state), atomic_load(&dw_count));
-        PAUSE; PAUSE;
-        remember_sdio(24, 0xffff, 1, &ret, 4, 0);
-        brcmf_dbg(TEMP, "jdpc state %d, times %d", atomic_load(&dw_state), atomic_load(&dw_count));
+        brcmf_dbg(TEMP, "* * * NOT starting oob_irqhandler! Depending on watchdog.* * *");
+        //thrd_create_with_name(&sdiodev->isr_thread, brcmf_sdio_oob_irqhandler, sdiodev,
+          //                    "brcmf-sdio-isr");
+        //thrd_detach(sdiodev->isr_thread);
 
 
+        //brcmf_dbg(TEMP, "adpc state %d, times %d", atomic_load(&dw_state), atomic_load(&dw_count));
+        //brcmf_dbg(TEMP, "bdpc state %d, times %d", atomic_load(&dw_state), atomic_load(&dw_count));
+        //brcmf_dbg(SDIO, "2Enter, register OOB IRQ\n"); PAUSE; PAUSE;
+        //brcmf_dbg(TEMP, "cdpc state %d, times %d", atomic_load(&dw_state), atomic_load(&dw_count));
+        remember_sdio(13, 0xffff, 1, &ret, 4, 0);
+        //brcmf_dbg(SDIO, "3Enter, register OOB IRQ\n"); PAUSE; PAUSE;
+        //brcmf_dbg(TEMP, "ddpc state %d, times %d", atomic_load(&dw_state), atomic_load(&dw_count));
+        //remember_sdio(21, 0xffff, 1, &ret, 4, 0); PAUSE; PAUSE;
+        //brcmf_dbg(TEMP, "gdpc state %d, times %d", atomic_load(&dw_state), atomic_load(&dw_count));
+        //remember_sdio(22, 0xffff, 1, &ret, 4, 0); PAUSE; PAUSE;
+        //brcmf_dbg(TEMP, "hdpc state %d, times %d", atomic_load(&dw_state), atomic_load(&dw_count));
+        //remember_sdio(23, 0xffff, 1, &ret, 4, 0); PAUSE; PAUSE;
+        //brcmf_dbg(TEMP, "idpc state %d, times %d", atomic_load(&dw_state), atomic_load(&dw_count));
+        //remember_sdio(24, 0xffff, 1, &ret, 4, 0); PAUSE; PAUSE; PAUSE; PAUSE; PAUSE; PAUSE;
+        //brcmf_dbg(TEMP, "jdpc state %d, times %d", atomic_load(&dw_state), atomic_load(&dw_count));
+        //remember_sdio(25, 0xffff, 1, &ret, 4, 0);
+        sdiodev->oob_irq_requested = true;
+        //remember_sdio(24, 0xffff, 1, &ret, 4, 0);
+        //brcmf_dbg(TEMP, "jdpc state %d, times %d", atomic_load(&dw_state), atomic_load(&dw_count));
+        //PAUSE; PAUSE;
+        //remember_sdio(24, 0xffff, 1, &ret, 4, 0);
+        //brcmf_dbg(TEMP, "jdpc state %d, times %d", atomic_load(&dw_state), atomic_load(&dw_count));
+
+        sdio_release_host(sdiodev->func1);
+
     } else {
         brcmf_dbg(SDIO, "Entering\n");
+        sdio_claim_host(sdiodev->func1);
+
         sdio_enable_fn_intr(&sdiodev->sdio_proto, SDIO_FN_1);
         (void)brcmf_sdiod_ib_irqhandler; // TODO(cphoenix): If we use these, plug them in later.
         sdio_enable_fn_intr(&sdiodev->sdio_proto, SDIO_FN_2);
         (void)brcmf_sdiod_dummy_irqhandler;
+        sdio_release_host(sdiodev->func1);
         sdiodev->sd_irq_requested = true;
     }
 
@@ -220,8 +211,10 @@
         struct brcmfmac_sdio_pd* pdata;
 
         pdata = &sdiodev->settings->bus.sdio;
+        sdio_claim_host(sdiodev->func1);
         brcmf_sdiod_func0_wb(sdiodev, SDIO_CCCR_BRCM_SEPINT, 0, NULL);
         brcmf_sdiod_func0_wb(sdiodev, SDIO_CCCR_INT_ENABLE, 0, NULL);
+        sdio_release_host(sdiodev->func1);
 
         sdiodev->oob_irq_requested = false;
         if (sdiodev->irq_wake) {
@@ -233,8 +226,10 @@
     }
 
     if (sdiodev->sd_irq_requested) {
+        sdio_claim_host(sdiodev->func1);
         sdio_disable_fn_intr(&sdiodev->sdio_proto, SDIO_FN_2);
         sdio_disable_fn_intr(&sdiodev->sdio_proto, SDIO_FN_1);
+        sdio_release_host(sdiodev->func1);
         sdiodev->sd_irq_requested = false;
     }
 }
@@ -276,8 +271,11 @@
     int dw_state;
     uint32_t checksum;
     thrd_t thread;
+    zx_time_t time;
 } sdio_record_t;
-thrd_t gl_interrupt_thread, gl_main_thread, gl_worker_thread, gl_watchdog_thread;
+thrd_t gl_interrupt_thread, gl_main_thread, gl_worker_thread, gl_watchdog_thread,
+       gl_bus_watchdog_thread;
+extern thrd_t gl_workqueue_runner_thread;
 
 static sdio_record_t sdio_records[SR_DATA_RECORD_COUNT];
 
@@ -291,15 +289,22 @@
         } else if (rec->thread == gl_worker_thread) {
             name = "work";
         } else if (rec->thread == gl_watchdog_thread) {
-            name = "watch";
+            name = "wdog";
+        } else if (rec->thread == gl_bus_watchdog_thread) {
+            name = "bwdg";
+        } else if (rec->thread == gl_workqueue_runner_thread) {
+            name = "wrun";
         } else if (rec->thread == gl_main_thread) {
-            name = "";
+            name = "main";
         } else {
             sprintf(namebuf, "%p", rec->thread);
             name = namebuf;
         }
-        brcmf_dbg(TEMP, "sdio %d: F%d%s%d%s %x %lx (%x) %s %d", i, rec->func, rec->write ? "w" : "r",
-                  rec->size, rec->fifo ? "f" : "", rec->addr, *(uint64_t*)rec->data, rec->checksum, name,
+        int sec = rec->time / ZX_SEC(1);
+        int msec = (rec->time - ZX_SEC(sec)) / ZX_MSEC(1);
+        brcmf_dbg(TEMP, "sdio %d %d.%d %s: F%d%s%d%s %x %lx (%x) %d", i, sec, msec, name,
+                  rec->func, rec->write ? "w" : "r",
+                  rec->size, rec->fifo ? "f" : "", rec->addr, *(uint64_t*)rec->data, rec->checksum,
                   rec->dw_state);
 }
 bool gl_print_sdio;
@@ -318,9 +323,14 @@
     rec->dw_state = atomic_load(&dw_state);
     rec->checksum = checksum(data, size);
     rec->thread = thrd_current();
+    rec->time = zx_deadline_after(0);
     if (gl_print_sdio && rec->thread == gl_main_thread) {
         pr(12345, rec);
     }
+    if (func == 2) {
+        //pr(54321, rec);
+        //brcmf_hexdump("F2", data, size);
+    }
 }
 
 void psr() {
@@ -334,6 +344,38 @@
     }
 }
 atomic_bool gl_writing_firmware;
+static zx_status_t brcmf_sdiod_transferfff(struct brcmf_sdio_dev* sdiodev, uint8_t func,
+                                           uint32_t addr, bool write, void* data, size_t size,
+                                           bool fifo) {
+    sdio_rw_txn_t txn;
+
+    txn.addr = addr;
+    txn.write = write;
+    txn.virt = data;
+    txn.data_size = size;
+    txn.incr = !fifo;
+    txn.fifo = fifo;
+    txn.use_dma = false; // TODO(cphoenix): Decide when to use DMA
+    txn.buf_offset = 0;
+    zx_status_t result;
+        atomic_store(&dw_state, 3513);
+        brcmf_dbg(TEMP, "sdio  F%d%s%ld%s %x %lx %p", func, write ? "w" : "r",
+                  size, fifo ? "f" : "", addr, *(uint64_t*)data, data);
+
+    result = sdio_do_rw_txn(&sdiodev->sdio_proto, func, &txn);
+        atomic_store(&dw_state, 3514);
+    if (result != ZX_OK) {
+        brcmf_dbg(TEMP, "Why did this fail?? result %d", result);
+        return result;
+    }
+        atomic_store(&dw_state, 3515);
+                  atomic_store(&dw_state, 3516);
+
+        remember_sdio(func, addr, write, data, size, fifo);
+            atomic_store(&dw_state, 3517);
+
+    return result;
+}
 static zx_status_t brcmf_sdiod_transfer(struct brcmf_sdio_dev* sdiodev, uint8_t func,
                                            uint32_t addr, bool write, void* data, size_t size,
                                            bool fifo) {
@@ -354,8 +396,7 @@
         brcmf_dbg(TEMP, "Why did this fail?? result %d", result);
         return result;
     }
-    if (!(addr == 0xd020 && *(uint32_t*)data == 0x80000000 && atomic_load(&dw_state) == 0) &&
-      !atomic_load(&gl_writing_firmware)) {
+    if (!atomic_load(&gl_writing_firmware)) {
         remember_sdio(func, addr, write, data, size, fifo);
     }
     return result;
@@ -475,6 +516,26 @@
     return data;
 }
 
+void brcmf_sdiod_func1_wlfff(struct brcmf_sdio_dev* sdiodev, uint32_t addr, uint32_t data,
+                          zx_status_t* ret) {
+    zx_status_t retval;
+        atomic_store(&dw_state, 3411);
+
+    retval = brcmf_sdiod_set_backplane_window(sdiodev, addr);
+        atomic_store(&dw_state, 3412);
+    if (retval == ZX_OK) {
+        addr &= SBSDIO_SB_OFT_ADDR_MASK;
+        addr |= SBSDIO_SB_ACCESS_2_4B_FLAG;
+        atomic_store(&dw_state, 3413);
+        retval = brcmf_sdiod_transferfff(sdiodev, SDIO_FN_1, addr, true, &data, sizeof(data), false);
+        atomic_store(&dw_state, 3414);
+    }
+    if (ret) {
+        *ret = retval;
+    }
+        atomic_store(&dw_state, 3415);
+}
+
 void brcmf_sdiod_func1_wl(struct brcmf_sdio_dev* sdiodev, uint32_t addr, uint32_t data,
                           zx_status_t* ret) {
     zx_status_t retval;
@@ -490,19 +551,59 @@
     }
 }
 
+#define F2_XFER_SIZE 512
+
 zx_status_t brcmf_sdiod_read(struct brcmf_sdio_dev* sdiodev, uint8_t func, uint32_t addr,
                              void* data, size_t size) {
-    return brcmf_sdiod_transfer(sdiodev, func, addr, false, data, size, false);
+    zx_status_t err = ZX_OK;
+    while (func == 2 && size > F2_XFER_SIZE) {
+        err = brcmf_sdiod_transfer(sdiodev, func, addr, false, data, F2_XFER_SIZE, false);
+        if (err != ZX_OK) {
+            break;
+        }
+        data += F2_XFER_SIZE;
+        size -= F2_XFER_SIZE;
+        addr += F2_XFER_SIZE;
+    }
+    if (err == ZX_OK) {
+        err = brcmf_sdiod_transfer(sdiodev, func, addr, false, data, size, false);
+    }
+    return err;
 }
 
 zx_status_t brcmf_sdiod_write(struct brcmf_sdio_dev* sdiodev, uint8_t func, uint32_t addr,
                               void* data, size_t size) {
-    return brcmf_sdiod_transfer(sdiodev, func, addr, true, data, size, false);
+    zx_status_t err = ZX_OK;
+    while (func == 2 && size > F2_XFER_SIZE) {
+        err = brcmf_sdiod_transfer(sdiodev, func, addr, true, data, F2_XFER_SIZE, false);
+        if (err != ZX_OK) {
+            break;
+        }
+        data += F2_XFER_SIZE;
+        size -= F2_XFER_SIZE;
+        addr += F2_XFER_SIZE;
+    }
+    if (err == ZX_OK) {
+        err = brcmf_sdiod_transfer(sdiodev, func, addr, true, data, size, false);
+    }
+    return err;
 }
 
 zx_status_t brcmf_sdiod_read_fifo(struct brcmf_sdio_dev* sdiodev, uint8_t func, uint32_t addr,
                                   void* data, size_t size) {
-    return brcmf_sdiod_transfer(sdiodev, func, addr, false, data, size, true);
+    zx_status_t err = ZX_OK;
+    while (func == 2 && size > F2_XFER_SIZE) {
+        err = brcmf_sdiod_transfer(sdiodev, func, addr, false, data, F2_XFER_SIZE, true);
+        if (err != ZX_OK) {
+            break;
+        }
+        data += F2_XFER_SIZE;
+        size -= F2_XFER_SIZE;
+    }
+    if (err == ZX_OK) {
+        err = brcmf_sdiod_transfer(sdiodev, func, addr, false, data, size, true);
+    }
+    return err;
 }
 
 static zx_status_t brcmf_sdiod_netbuf_read(struct brcmf_sdio_dev* sdiodev, uint32_t func,
@@ -537,7 +638,7 @@
 static zx_status_t brcmf_sdiod_netbuf_write(struct brcmf_sdio_dev* sdiodev, uint32_t func,
                                             uint32_t addr, struct brcmf_netbuf* netbuf) {
     unsigned int req_sz;
-    zx_status_t err;
+    zx_status_t err = ZX_OK;
 
     /* Single netbuf use the standard mmc interface */
     req_sz = netbuf->len + 3;
@@ -575,7 +676,7 @@
     uint32_t addr = sdiodev->cc_core->base;
     zx_status_t err = ZX_OK;
 
-    brcmf_dbg(SDIO, "addr = 0x%x, size = %d\n", addr, pkt->len);
+  //  THROTTLE(20, brcmf_dbg(SDIO, "addr = 0x%x, size = %d\n", addr, pkt->len););
 
     err = brcmf_sdiod_set_backplane_window(sdiodev, addr);
     if (err != ZX_OK) {
@@ -586,6 +687,7 @@
     addr |= SBSDIO_SB_ACCESS_2_4B_FLAG;
 
     err = brcmf_sdiod_netbuf_read(sdiodev, SDIO_FN_2, addr, pkt);
+  //  THROTTLE(20, brcmf_dbg(SDIO, "err = %d\n", err););
 
 done:
     return err;
@@ -713,6 +815,7 @@
     } else {
         this_transfer_size = packet_size;
     }
+    sdio_claim_host(sdiodev->func1);
 
     /* Do the transfer(s) */
     while (size) {
@@ -757,6 +860,8 @@
 
     brcmf_netbuf_free(pkt);
 
+    sdio_release_host(sdiodev->func1);
+
     return err;
 }
 
@@ -799,12 +904,16 @@
     atomic_store(&sdiodev->freezer->freezing, 1);
     brcmf_sdio_trigger_dpc(sdiodev->bus);
     sync_completion_wait(&sdiodev->freezer->thread_freeze, ZX_TIME_INFINITE);
+    sdio_claim_host(sdiodev->func1);
     res = brcmf_sdio_sleep(sdiodev->bus, true);
+    sdio_release_host(sdiodev->func1);
     return res;
 }
 
 static void brcmf_sdiod_freezer_off(struct brcmf_sdio_dev* sdiodev) {
+    sdio_claim_host(sdiodev->func1);
     brcmf_sdio_sleep(sdiodev->bus, false);
+    sdio_release_host(sdiodev->func1);
     atomic_store(&sdiodev->freezer->freezing, 0);
     sync_completion_signal(&sdiodev->freezer->resumed);
 }
@@ -849,10 +958,14 @@
     brcmf_sdiod_freezer_detach(sdiodev);
 
     /* Disable Function 2 */
+    sdio_claim_host(sdiodev->func2);
     sdio_disable_fn(&sdiodev->sdio_proto, SDIO_FN_2);
+    sdio_release_host(sdiodev->func2);
 
     /* Disable Function 1 */
+    sdio_claim_host(sdiodev->func1);
     sdio_disable_fn(&sdiodev->sdio_proto, SDIO_FN_1);
+    sdio_release_host(sdiodev->func1);
 
     sdiodev->sbwad = 0;
 
@@ -956,10 +1069,13 @@
 
 zx_status_t brcmf_sdio_register(zx_device_t* zxdev, sdio_protocol_t* sdio_proto) {
     zx_status_t err;
-    struct brcmf_sdio_dev* sdiodev;
-    struct brcmf_bus* bus_if;
     struct brcmf_device* dev;
 
+    struct brcmf_bus* bus_if = NULL;
+    struct sdio_func* func1 = NULL;
+    struct sdio_func* func2 = NULL;
+    struct brcmf_sdio_dev* sdiodev = NULL;
+
     brcmf_dbg(SDIO, "Enter\n");
     sdio_hw_info_t devinfo;
     sdio_get_dev_hw_info(sdio_proto, &devinfo);
@@ -984,20 +1100,45 @@
     // TODO(cphoenix): Linux power management stuff
     brcmf_sdiod_acpi_set_power_manageable(NULL, 0);
 
+    pthread_mutexattr_t attr_recursive;
+	if (pthread_mutexattr_init(&attr_recursive)) {
+		return ZX_ERR_INTERNAL;
+    }
+	if (pthread_mutexattr_settype(&attr_recursive, PTHREAD_MUTEX_RECURSIVE)) {
+		return ZX_ERR_INTERNAL;
+    }
+
     bus_if = calloc(1, sizeof(struct brcmf_bus));
     if (!bus_if) {
-        return ZX_ERR_NO_MEMORY;
+        err = ZX_ERR_NO_MEMORY;
+        goto fail;
+    }
+    func1 = calloc(1, sizeof(struct sdio_func));
+    if (!func1) {
+        err = ZX_ERR_NO_MEMORY;
+        goto fail;
+    } else {
+        pthread_mutex_init(&func1->lock, &attr_recursive);
+    }
+    func2 = calloc(1, sizeof(struct sdio_func));
+    if (!func2) {
+        err = ZX_ERR_NO_MEMORY;
+        goto fail;
+    } else {
+        pthread_mutex_init(&func2->lock, &attr_recursive);
     }
     sdiodev = calloc(1, sizeof(struct brcmf_sdio_dev));
     if (!sdiodev) {
-        free(bus_if);
-        return ZX_ERR_NO_MEMORY;
+        err = ZX_ERR_NO_MEMORY;
+        goto fail;
     }
     dev = &sdiodev->dev;
     dev->zxdev = zxdev;
     memcpy(&sdiodev->sdio_proto, sdio_proto, sizeof(sdiodev->sdio_proto));
 
     sdiodev->bus_if = bus_if;
+    sdiodev->func1 = func1;
+    sdiodev->func2 = func2;
     bus_if->bus_priv.sdio = sdiodev;
     bus_if->proto_type = BRCMF_PROTO_BCDC;
     dev->bus = bus_if;
@@ -1018,8 +1159,15 @@
     return ZX_OK;
 
 fail:
-    dev->bus = NULL;
     free(sdiodev);
+    if (func2) {
+        pthread_mutex_destroy(&func2->lock);
+        free(func2);
+    }
+    if (func1) {
+        pthread_mutex_destroy(&func1->lock);
+        free(func1);
+    }
     free(bus_if);
     return err;
 }
@@ -1042,6 +1190,14 @@
         brcmf_sdiod_remove(sdiodev);
 
         free(bus_if);
+        if (sdiodev->func1) {
+            pthread_mutex_destroy(&sdiodev->func1->lock);
+            free(sdiodev->func1);
+        }
+        if (sdiodev->func2) {
+            pthread_mutex_destroy(&sdiodev->func2->lock);
+            free(sdiodev->func2);
+        }
         free(sdiodev);
     }
 
diff --git a/drivers/wlan/third_party/broadcom/brcmfmac/cfg80211.c b/drivers/wlan/third_party/broadcom/brcmfmac/cfg80211.c
index 24d6eba..fb4a0da 100644
--- a/drivers/wlan/third_party/broadcom/brcmfmac/cfg80211.c
+++ b/drivers/wlan/third_party/broadcom/brcmfmac/cfg80211.c
@@ -7027,7 +7027,7 @@
         goto ops_out;
     }
     wiphy->ops = ops;
-    wiphy->cfg80211_info = malloc(sizeof(struct brcmf_cfg80211_info));
+    wiphy->cfg80211_info = calloc(1, sizeof(struct brcmf_cfg80211_info));
     if (wiphy->cfg80211_info == NULL) {
         free(wiphy);
         goto ops_out;
diff --git a/drivers/wlan/third_party/broadcom/brcmfmac/chip.c b/drivers/wlan/third_party/broadcom/brcmfmac/chip.c
index a749d2a..f90bea1 100644
--- a/drivers/wlan/third_party/broadcom/brcmfmac/chip.c
+++ b/drivers/wlan/third_party/broadcom/brcmfmac/chip.c
@@ -361,31 +361,25 @@
     /* if core is already in reset, skip reset */
     regdata = ci->ops->read32(ci->ctx, core->wrapbase + BC_CORE_RESET_CONTROL);
     gl_compare_now = false;
-    brcmf_dbg(TEMP, "En2");
     if ((regdata & BC_CORE_RESET_CONTROL_RESET) != 0) {
         goto in_reset_configure;
     }
-    brcmf_dbg(TEMP, "En3");
 
     /* configure reset */
     ci->ops->write32(ci->ctx, core->wrapbase + BC_CORE_CONTROL,
                      prereset | BC_CORE_CONTROL_FGC | BC_CORE_CONTROL_CLOCK);
     ci->ops->read32(ci->ctx, core->wrapbase + BC_CORE_CONTROL);
-    brcmf_dbg(TEMP, "En4");
 
     /* put in reset */
     ci->ops->write32(ci->ctx, core->wrapbase + BC_CORE_RESET_CONTROL, BC_CORE_RESET_CONTROL_RESET);
-    brcmf_dbg(TEMP, "En5");
     usleep_range(10, 20);
-    brcmf_dbg(TEMP, "About to wait");
     /* wait till reset is 1 */
     uint32_t spinresult;
     SPINWAIT((spinresult = ci->ops->read32(ci->ctx, core->wrapbase + BC_CORE_RESET_CONTROL)) !=
              BC_CORE_RESET_CONTROL_RESET,
              300);
-    brcmf_dbg(TEMP, "Survived wait, spinresult %d", spinresult);
+    brcmf_dbg(TEMP, "Survived wait, spinresult %d (should be 1)", spinresult);
 in_reset_configure:
-    brcmf_dbg(TEMP, "En6");
 
     /* in-reset configure */
     ci->ops->write32(ci->ctx, core->wrapbase + BC_CORE_CONTROL, reset | BC_CORE_CONTROL_FGC |
@@ -672,14 +666,11 @@
     nab = (corecap & ARMCR4_TCBANB_MASK) >> ARMCR4_TCBANB_SHIFT;
     nbb = (corecap & ARMCR4_TCBBNB_MASK) >> ARMCR4_TCBBNB_SHIFT;
     totb = nab + nbb;
-    brcmf_dbg(TEMP, "corecap 0x%x, nab %d, nbb %d, totb %d", corecap, nab, nbb, totb);
     for (idx = 0; idx < totb; idx++) {
         brcmf_chip_core_write32(cr4, ARMCR4_BANKIDX, idx);
         bxinfo = brcmf_chip_core_read32(cr4, ARMCR4_BANKINFO);
         memsize += ((bxinfo & ARMCR4_BSZ_MASK) + 1) * ARMCR4_BSZ_MULT;
-        brcmf_dbg(TEMP, "memsize %d, bxinfo 0x%x", memsize, bxinfo);
     }
-    brcmf_dbg(TEMP, "memsize 0x%x", memsize);
 
     return memsize;
 }
diff --git a/drivers/wlan/third_party/broadcom/brcmfmac/common.c b/drivers/wlan/third_party/broadcom/brcmfmac/common.c
index 65bd32e..0e33453 100644
--- a/drivers/wlan/third_party/broadcom/brcmfmac/common.c
+++ b/drivers/wlan/third_party/broadcom/brcmfmac/common.c
@@ -377,6 +377,12 @@
 #endif
 
 #if defined(CONFIG_BRCM_TRACING) || defined(CONFIG_BRCMDBG)
+
+#include <threads.h>
+
+extern thrd_t gl_interrupt_thread, gl_main_thread, gl_worker_thread, gl_watchdog_thread,
+       gl_bus_watchdog_thread, gl_workqueue_runner_thread;
+
 extern atomic_int dw_count;
 void __brcmf_dbg(uint32_t filter, const char* func, const char* fmt, ...) {
     va_list args;
@@ -402,7 +408,27 @@
         } else if (n_printed > 0 && msg[n_printed - 1] == '\n') {
             msg[--n_printed] = 0;
         }
-        zxlogf(INFO, "brcmfmac (%s)(%d): '%s'\n", func, atomic_load(&dw_count), msg);
+        char namebuf[64];
+        char* name;
+        thrd_t thread = thrd_current();
+        if (thread == gl_interrupt_thread) {
+            name = "intr";
+        } else if (thread == gl_worker_thread) {
+            name = "work";
+        } else if (thread == gl_watchdog_thread) {
+            name = "wdog";
+        } else if (thread == gl_bus_watchdog_thread) {
+            name = "bwdg";
+        } else if (thread == gl_workqueue_runner_thread) {
+            name = "wrun";
+        } else if (thread == gl_main_thread) {
+            name = "main";
+        } else {
+            sprintf(namebuf, "%p", thread);
+            name = namebuf;
+        }
+
+        zxlogf(INFO, "brcmfmac %s (%s)(%d): '%s'\n", name, func, atomic_load(&dw_count), msg);
     }
 }
 #endif
diff --git a/drivers/wlan/third_party/broadcom/brcmfmac/core.c b/drivers/wlan/third_party/broadcom/brcmfmac/core.c
index 2991054..074a449 100644
--- a/drivers/wlan/third_party/broadcom/brcmfmac/core.c
+++ b/drivers/wlan/third_party/broadcom/brcmfmac/core.c
@@ -682,7 +682,6 @@
     if (if_out) {
         *if_out = NULL;
     }
-
     brcmf_dbg(TRACE, "Enter, bsscfgidx=%d, ifidx=%d\n", bsscfgidx, ifidx);
 
     ifp = drvr->iflist[bsscfgidx];
diff --git a/drivers/wlan/third_party/broadcom/brcmfmac/debug.c b/drivers/wlan/third_party/broadcom/brcmfmac/debug.c
index c391ae7..8796660 100644
--- a/drivers/wlan/third_party/broadcom/brcmfmac/debug.c
+++ b/drivers/wlan/third_party/broadcom/brcmfmac/debug.c
@@ -26,13 +26,13 @@
 
 static zx_handle_t root_folder;
 
-void brcmf_hexdump(char* prefix, const void* buf, size_t len) {
+void brcmf_hexdump(const char* prefix, const void* buf, size_t len) {
     if (len > 4096) {
-        brcmf_dbg(INFO, "Truncating hexdump to 4096 bytes");
+        brcmf_dbg(INFO, "%s: Truncating hexdump to 4096 bytes", prefix);
         len = 4096;
     }
     if (len == 0) {
-        brcmf_dbg(INFO, "Empty hexdump %p", buf);
+        brcmf_dbg(INFO, "%s: Empty hexdump %p", prefix, buf);
         return;
     }
     char output[150];
@@ -44,8 +44,9 @@
         next += sprintf(next, "%02x ", *bytes++);
         if ((i % 32) == 31) {
             brcmf_dbg(INFO, "%s", output);
+            zx_nanosleep(zx_deadline_after(ZX_MSEC(1)));
             next = output;
-            next += sprintf(next, "%s %4lx: ", prefix, i + 1);
+            next += min(snprintf(next, 30, "%s %4lx: ", prefix, i), 30);
         }
     }
     if ((i % 32) != 0) {
diff --git a/drivers/wlan/third_party/broadcom/brcmfmac/debug.h b/drivers/wlan/third_party/broadcom/brcmfmac/debug.h
index 050bdd3..55511df 100644
--- a/drivers/wlan/third_party/broadcom/brcmfmac/debug.h
+++ b/drivers/wlan/third_party/broadcom/brcmfmac/debug.h
@@ -71,6 +71,8 @@
         __brcmf_dbg(BRCMF_##filter##_VAL, __func__, fmt, ##__VA_ARGS__); \
     } while (0)
 
+#define THROTTLE(n, event) { static int times = n; if (times) { event; times--;}}
+
 // clang-format off
 
 #define BRCMF_DATA_ON()  (brcmf_msg_filter & BRCMF_DATA_VAL)
@@ -110,11 +112,11 @@
 // probably too spammy.
 #define brcmf_dbg_hex_dump(test, data, len, fmt, ...)                \
     do {                                                             \
-        brcmf_hexdump("dbg_hex_dump", (void*)data, len);                             \
+        brcmf_hexdump(__func__, (void*)data, len);                             \
         if (test) brcmu_dbg_hex_dump(data, len, fmt, ##__VA_ARGS__); \
     } while (0)
 
-void brcmf_hexdump(char* prefix, const void* buf, size_t len);
+void brcmf_hexdump(const char* prefix, const void* buf, size_t len);
 
 void brcmf_alphadump(const void* buf, size_t len);
 
diff --git a/drivers/wlan/third_party/broadcom/brcmfmac/fuchsia.print b/drivers/wlan/third_party/broadcom/brcmfmac/fuchsia.print
new file mode 100644
index 0000000..e5ccf76
--- /dev/null
+++ b/drivers/wlan/third_party/broadcom/brcmfmac/fuchsia.print
@@ -0,0 +1,294 @@
+[00016.682] 02954.03014> brcmfmac: Bind was called!!
+[00016.682] 02954.03014> brcmfmac 0xb1aebbab5000 (brcmf_core_init)(0): 'brcmfmac: core_init was called'
+[00016.682] 02954.03014> brcmfmac 0xb1aebbab5000 (brcmf_sdio_register)(0): 'Enter'
+[00016.682] 02954.03014> brcmfmac 0xb1aebbab5000 (brcmf_sdio_register)(0): 'sdio vendor ID: 0x02d0'
+[00016.682] 02954.03014> brcmfmac 0xb1aebbab5000 (brcmf_sdio_register)(0): 'sdio device ID: 0x4356'
+[00016.682] 02954.03014> brcmfmac 0xb1aebbab5000 (brcmf_sdio_register)(0): 'F2 found, calling brcmf_sdiod_probe...'
+[00016.682] 02954.03014> brcmfmac 0xb1aebbab5000 (brcmf_sdio_probe)(0): 'Enter'
+[00016.683] 02954.03014> brcmfmac main (brcmf_sdio_probe_attach)(0): 'brcmfmac: F1 signature read @0x18000000=0x17224356'
+[00016.683] 02954.05148> brcmfmac 0x24a67fa4b000 (sdio_printer)(0): 'SDIO printer started'
+[00016.683] 02954.03014> brcmfmac main (brcmf_sdio_probe_attach)(0): 'Survived signature read'
+[00016.683] 02954.03014> brcmfmac main (brcmf_chip_recognition)(0): 'found AXI chip: BCM4356, rev=2'
+[00016.683] 02954.03014> brcmfmac main (brcmf_chip_recognition)(0): 'about to erom_scan in SOCI_AI'
+[00016.684] 02954.03014> brcmfmac main (brcmf_chip_recognition)(0): 'Survived erom scan'
+[00016.684] 02954.03014> brcmfmac main (brcmf_chip_cores_check)(0): ' [1 ] core 0x800:47 base 0x18000000 wrap 0x18100000'
+[00016.684] 02954.03014> brcmfmac main (brcmf_chip_cores_check)(0): ' [2 ] core 0x812:48 base 0x18001000 wrap 0x18101000'
+[00016.684] 02954.03014> brcmfmac main (brcmf_chip_cores_check)(0): ' [3 ] core 0x83e:6  base 0x18002000 wrap 0x18102000'
+[00016.684] 02954.03014> brcmfmac main (brcmf_chip_cores_check)(0): ' [4 ] core 0x83c:11 base 0x18003000 wrap 0x18103000'
+[00016.684] 02954.03014> brcmfmac main (brcmf_chip_cores_check)(0): ' [5 ] core 0x81a:22 base 0x18004000 wrap 0x18104000'
+[00016.684] 02954.03014> brcmfmac main (brcmf_chip_cores_check)(0): ' [6 ] core 0x829:21 base 0x18005000 wrap 0x18105000'
+[00016.684] 02954.03014> brcmfmac main (brcmf_chip_cores_check)(0): ' [7 ] core 0x83d:2  base 0x18006000 wrap 0x18106000'
+[00016.684] 02954.03014> brcmfmac main (brcmf_chip_cores_check)(0): ' [8 ] core 0x135:0  base 0x00000000 wrap 0x1810a000'
+[00016.684] 02954.03014> brcmfmac main (brcmf_chip_cores_check)(0): ' [9 ] core 0x240:0  base 0x00000000 wrap 0x00000000'
+[00016.684] 02954.03014> brcmfmac main (brcmf_chip_recognition)(0): 'Survived cores_check'
+[00016.684] 02954.03014> brcmfmac main (brcmf_chip_set_passive)(0): 'Enter'
+[00016.684] 02954.03014> brcmfmac main (brcmf_chip_get_core)(0): 'Enter, coreid 2110'
+[00016.684] 02954.03014> brcmfmac main (brcmf_chip_get_core)(0): 'Found'
+[00016.684] 02954.03014> brcmfmac main (brcmf_chip_set_passive)(0): 'cr4 arm 0x97da7f1e71e0'
+[00016.684] 02954.03014> brcmfmac main (brcmf_chip_cr4_set_passive)(0): '1'
+[00016.684] 02954.03014> brcmfmac main (brcmf_chip_get_core)(0): 'Enter, coreid 2110'
+[00016.684] 02954.03014> brcmfmac main (brcmf_chip_get_core)(0): 'Found'
+[00016.685] 02954.03014> brcmfmac main (brcmf_chip_disable_arm)(0): 'About to resetcore, id 2110, val 32, CPUHALT'
+[00016.685] 02954.03014> brcmfmac main (brcmf_chip_resetcore)(0): '->resetcore'
+[00016.685] 02954.03014> brcmfmac main (brcmf_chip_ai_resetcore)(0): 'Enter'
+[00016.685] 02954.03014> brcmfmac main (brcmf_chip_ai_coredisable)(0): 'Enter'
+[00016.685] 02954.03014> brcmfmac main (brcmf_sdiod_set_backplane_window)(0): 'bar0 equal, addr was 0x18102800'
+[00016.685] 02954.03014> brcmfmac main (brcmf_chip_ai_coredisable)(0): 'Survived wait, spinresult 1 (should be 1)'
+[00016.685] 02954.03014> brcmfmac main (brcmf_chip_ai_resetcore)(0): 'Past disable'
+[00016.685] 02954.03014> brcmfmac main (brcmf_chip_resetcore)(0): '<-resetcore'
+[00016.685] 02954.03014> brcmfmac main (brcmf_chip_cr4_set_passive)(0): '2'
+[00016.685] 02954.03014> brcmfmac main (brcmf_chip_get_core)(0): 'Enter, coreid 2066'
+[00016.685] 02954.03014> brcmfmac main (brcmf_chip_get_core)(0): 'Found'
+[00016.685] 02954.03014> brcmfmac main (brcmf_chip_cr4_set_passive)(0): 'resetcore, id 2066, val 12, PHYCLOCKEN'
+[00016.688] 02797.02835> [INFO] driver_bind: binding
+[00016.688] 02797.02835> [INFO] ARM mali ID 8201000
+[00016.688] 02797.02835> [INFO] Cache coherency unsupported
+[00016.735] 02954.03014> brcmfmac main (brcmf_chip_resetcore)(0): '->resetcore'
+[00016.735] 02954.03014> brcmfmac main (brcmf_chip_ai_resetcore)(0): 'Enter'
+[00016.735] 02954.03014> brcmfmac main (brcmf_chip_ai_coredisable)(0): 'Enter'
+[00016.735] 02954.03014> brcmfmac main (brcmf_sdiod_set_backplane_window)(0): 'bar0 equal, addr was 0x18101800'
+[00016.735] 02954.03014> brcmfmac main (brcmf_chip_ai_resetcore)(0): 'Past disable'
+[00016.735] 02954.03014> brcmfmac main (brcmf_chip_resetcore)(0): '<-resetcore'
+[00016.735] 02954.03014> brcmfmac main (brcmf_chip_cr4_set_passive)(0): '4'
+[00016.785] 02954.03014> brcmfmac main (brcmf_chip_recognition)(0): 'Survived set_passive'
+[00016.835] 02954.03014> brcmfmac main (brcmf_chip_get_core)(0): 'Enter, coreid 2110'
+[00016.835] 02954.03014> brcmfmac main (brcmf_chip_get_core)(0): 'Found'
+[00016.835] 02954.03014> brcmfmac main (brcmf_chip_get_raminfo)(0): 'ramsize 786432 in mem'
+[00016.835] 02954.03014> brcmfmac main (brcmf_chip_get_raminfo)(0): 'chip ID is 17238 0x4356'
+[00016.836] 02954.03014> brcmfmac main (brcmf_chip_get_raminfo)(0): 'RAM: base=0x180000 size=786432 (0xc0000) sr=0 (0x0)'
+[00016.836] 02954.03014> brcmfmac main (brcmf_chip_recognition)(0): 'chip_get_raminfo returned 0'
+[00016.886] 02954.03014> brcmfmac main (brcmf_chip_attach)(0): 'survived chip_recognition, err ZX_OK'
+[00016.886] 02954.03014> brcmfmac main (brcmf_chip_setup)(0): 'ccrev=47, pmurev=24, pmucaps=0x420e5f18'
+[00016.886] 02954.03014> brcmfmac main (brcmf_chip_attach)(0): 'survived chip_setup, err ZX_OK'
+[00016.886] 02954.03014> brcmfmac main (brcmf_chip_get_core)(0): 'Enter, coreid 2089'
+[00016.886] 02954.03014> brcmfmac main (brcmf_chip_get_core)(0): 'Found'
+[00016.886] 02954.03014> brcmfmac main (brcmf_chip_get_core)(0): 'Enter, coreid 2048'
+[00016.886] 02954.03014> brcmfmac main (brcmf_chip_get_core)(0): 'Found'
+[00016.886] 02954.03014> brcmfmac main (brcmf_get_module_param)(0): 'Enter, bus=0, chip=17238, rev=2'
+[00016.886] 02954.03014> brcmfmac main (brcmf_sdio_kso_init)(0): 'Enter'
+[00016.886] 02954.03014> brcmfmac main (brcmf_sdio_drivestrengthinit)(0): 'No SDIO driver strength init needed for chip 4356 rev 2 pmurev 24'
+[00016.886] 02954.03014> brcmfmac main (brcmf_sdio_probe_attach)(0): 'Exit'
+[00016.886] 02954.03014> brcmfmac main (brcmf_attach)(0): 'Enter'
+[00016.886] 02954.03014> brcmfmac main (brcmf_proto_attach)(0): 'Enter'
+[00016.886] 02954.03014> brcmfmac main (brcmf_sdio_probe)(0): 'completed!!'
+[00016.886] 02954.03014> brcmfmac main (brcmf_fw_map_chip_to_name)(0): 'using brcmfmac/brcmfmac4356-sdio.bin for chip 0x004356(17238) rev 0x000002'
+[00016.886] 02954.03014> brcmfmac main (brcmf_fw_get_firmwares_pcie)(0): 'enter: dev=sdio'
+[00016.886] 02954.05850> brcmfmac 0x556a76e79000 (brcmf_sdio_clkctl)(0): 'in 1'
+[00016.886] 02954.05850> brcmfmac 0x556a76e79000 (brcmf_sdio_htclk)(0): 'Enter, on 1, pendok 1, sr 0, alp 0'
+[00016.887] 02954.05850> brcmfmac 0x556a76e79000 (brcmf_sdio_htclk)(0): 'CLKCTL: turned ON'
+[00016.887] 02954.05850> brcmfmac 0x556a76e79000 (brcmf_sdio_clkctl)(0): '0 -> 3'
+[00016.887] 02954.05850> brcmfmac 0x556a76e79000 (brcmf_sdio_watchdog_thread)(0): 'Watchdog sees intstatus 0x80020000'
+[00016.950] 02954.03014> brcmfmac main (request_firmware_nowait)(0): 'load_firmware of 'brcmfmac/brcmfmac4356-sdio.bin' -> ret 0, size 555412'
+[00016.951] 02954.03014> brcmfmac main (brcmf_fw_request_code_done)(0): 'enter: dev=sdio'
+[00016.953] 02954.03014> brcmfmac main (request_firmware_nowait)(0): 'load_firmware of 'brcmfmac/brcmfmac4356-sdio.txt' -> ret 0, size 2844'
+[00016.953] 02954.03014> brcmfmac main (brcmf_fw_request_nvram_done)(0): 'enter: dev=sdio'
+[00016.953] 02954.03014> brcmfmac main (brcmf_sdio_firmware_callback)(0): 'Enter: dev=sdio, err=0'
+[00016.953] 02954.03014> brcmfmac main (brcmf_sdio_firmware_callback)(0): 'sdiod 0x97da7f21e000, sdiodev 0x97da7f21e000'
+[00016.953] 02954.03014> brcmfmac main (brcmf_sdio_download_firmware)(0): 'firmware rstvec: b83ef180'
+[00016.953] 02954.03014> brcmfmac main (brcmf_sdio_download_code_file)(0): 'Enter, addr 0x180000'
+[00016.957] 02319.02556> Waiting for GPIO Test Input Interrupt
+[00016.983] 05897.05909> netstack: started
+[00016.984] 05897.05909> netstack: socket server started
+[00016.985] 05897.06139> netstack: starting http pprof server on 0.0.0.0:6060
+[00016.987] 05897.06200> netstack: watching for ethernet devices
+[00016.993] 05897.06200> netstack: NIC en2 added using ethernet device "/dev/class/ethernet/000"
+[00016.994] 05897.06200> netstack: NIC en2: link-local IPv6: fe80::9aaa:fcff:fe60:47d4
+[00017.036] 02954.03014> brcmfmac main (brcmf_sdio_verifymemory)(0): 'Compare RAM dl & ul at 0x00180000; size=555412'
+[00017.120] 02954.03014> brcmfmac main (brcmf_sdio_download_nvram)(0): 'Enter'
+[00017.120] 02954.03014> brcmfmac main (brcmf_sdio_verifymemory)(0): 'Compare RAM dl & ul at 0x0023f5ac; size=2644'
+[00017.121] 02954.03014> brcmfmac main (brcmf_sdio_download_firmware)(0): 'Firmware sent'
+[00017.121] 02954.03014> brcmfmac main (brcmf_chip_set_active)(0): 'Enter'
+[00017.121] 02954.03014> brcmfmac main (brcmf_chip_get_core)(0): 'Enter, coreid 2110'
+[00017.121] 02954.03014> brcmfmac main (brcmf_chip_get_core)(0): 'Found'
+[00017.121] 02954.03014> brcmfmac main (brcmf_chip_cr4_set_active)(0): 'Enter'
+[00017.121] 02954.03014> brcmfmac main (brcmf_chip_get_core)(0): 'Enter, coreid 2110'
+[00017.121] 02954.03014> brcmfmac main (brcmf_chip_get_core)(0): 'Found'
+[00017.121] 02954.03014> brcmfmac main (brcmf_chip_resetcore)(0): '->resetcore'
+[00017.121] 02954.03014> brcmfmac main (brcmf_chip_ai_resetcore)(0): 'Enter'
+[00017.121] 02954.03014> brcmfmac main (brcmf_chip_ai_coredisable)(0): 'Enter'
+[00017.121] 02954.03014> brcmfmac main (brcmf_chip_ai_coredisable)(0): 'Survived wait, spinresult 1 (should be 1)'
+[00017.121] 02954.03014> brcmfmac main (brcmf_chip_ai_resetcore)(0): 'Past disable'
+[00017.121] 02954.03014> brcmfmac main (brcmf_chip_resetcore)(0): '<-resetcore'
+[00017.121] 02954.03014> brcmfmac main (brcmf_chip_cr4_set_active)(0): 'Ex'
+[00017.121] 02954.03014> brcmfmac main (brcmf_sdio_download_firmware)(0): 'I guess I succeeded'
+[00017.121] 02954.03014> brcmfmac main (brcmf_sdio_htclk)(0): 'Enter, on 0, pendok 0, sr 0, alp 1'
+[00017.121] 02954.03014> brcmfmac main (brcmf_sdio_htclk)(0): 'CLKCTL: turned OFF'
+[00017.121] 02954.03014> brcmfmac main (brcmf_sdio_clkctl)(0): '3 -> 1'
+[00017.121] 02954.03014> brcmfmac main (brcmf_sdio_firmware_callback)(0): 'dpc state 0, times 0'
+[00017.321] 02954.03014> brcmfmac main (brcmf_sdio_clkctl)(0): 'in 1'
+[00017.321] 02954.03014> brcmfmac main (brcmf_sdio_clkctl)(0): 'in 2'
+[00017.321] 02954.03014> brcmfmac main (brcmf_sdio_sdclk)(0): 'Enter'
+[00017.321] 02954.03014> brcmfmac main (brcmf_sdio_htclk)(0): 'Enter, on 1, pendok 0, sr 0, alp 0'
+[00017.321] 02954.03014> brcmfmac main (brcmf_sdio_htclk)(0): 'CLKCTL: turned ON'
+[00017.321] 02954.03014> brcmfmac main (brcmf_sdio_clkctl)(0): '0 -> 3'
+[00017.330] 07350.07362> netcfg: started
+[00017.331] 02954.03014> brcmfmac main (brcmf_sdio_firmware_callback)(0): 'enable F2: err=0'
+[00017.331] 02954.03014> brcmfmac main (brcmf_chip_sr_capable)(0): 'Enter'
+[00017.332] 02954.03014> brcmfmac main (brcmf_sdio_firmware_callback)(0): 'About to sr_init() (after 100 msec pause)'
+[00017.350] 07445.07457> thermd: started
+[00017.373] 07541.07553> [INFO:main.cc(52)] no kernel crash log found
+[00017.380] 07610.07630> [INFO:main.cc(35)] Trace Manager starting with config: /pkg/data/tracing.config
+[00017.418] 07815.07827> wlanstack2 [I]: Starting
+[00017.420] 07815.07827> wlanstack2::telemetry [I]: Telemetry started
+[00017.432] 02954.03014> brcmfmac main (brcmf_sdio_sr_init)(0): 'Enter'
+[00017.432] 02954.03014> brcmfmac main (brcmf_sdio_sr_init)(0): 'SR enabled'
+[00017.522] 08118.08130> [INFO:cobalt_main.cc(80)] Cobalt client schedule params: schedule_interval=180 seconds, min_interval=10 seconds.
+[00017.531] 08254.08266> [INFO:main.cc(32)] cpuperf_provider: unsupported architecture
+[00017.532] 02954.03014> brcmfmac main (brcmf_sdio_firmware_callback)(0): 'Did sr_init() (100 msec ago)'
+[00017.532] 02954.03014> brcmfmac main (brcmf_sdio_readshared)(0): 'rambase 0x180000, ramsize 0xc0000, shaddr 0x23fffc'
+[00017.532] 02954.03014> brcmfmac main (brcmf_sdio_readshared)(0): 'Final shaddr is 0x23fffc'
+[00017.532] 02954.03014> brcmfmac main (brcmf_sdio_readshared)(0): 'sdpcm_shared address 0x001D9480'
+[00017.532] 02954.03014> brcmfmac main (brcmf_sdio_firmware_callback)(0): 'Readshared returned 0'
+[00017.532] 02954.03014> brcmfmac main (brcmf_sdio_firmware_callback)(0): 'console_addr 0x23debc'
+[00017.532] 02954.03014> brcmfmac main (brcmf_sdio_readconsole)(0): 'Got into readconsole'
+[00017.532] 02954.03014> brcmfmac main (brcmf_sdio_readconsole)(0): 'log struct read: addr 0x23dec4, rv 0'
+[00017.532] 02954.03014> brcmfmac main (brcmf_sdio_readconsole)(0): 'log_le.buf_size is 1024 0x400'
+[00017.532] 02954.03014> brcmfmac main (brcmf_sdio_readconsole)(0): 'brcmfmac: CONSOLE: hndarm_armr addr: 0x18002000, cr4_idx: 0'
+[00017.532] 02954.03014> brcmfmac main (brcmf_sdio_readconsole)(0): 'brcmfmac: CONSOLE: 000000.001 '
+[00017.532] 02954.03014> brcmfmac main (brcmf_sdio_readconsole)(0): 'brcmfmac: CONSOLE: RTE (USB-SDIO-PCIE-CDC) 7.35.184.r1 (TOB) (r559293) on BCM4356 r2 @ 37.4/240.8/240.8MHz'
+[00017.532] 02954.03014> brcmfmac main (brcmf_sdio_readconsole)(0): 'brcmfmac: CONSOLE: 000000.001 sdpcmdcdc0: Broadcom SDPCMD CDC driver'
+[00017.532] 02954.03014> brcmfmac main (brcmf_sdio_readconsole)(0): 'brcmfmac: CONSOLE: 000000.003 reclaim section 0: Returned 58500 bytes to the heap'
+[00017.532] 02954.03014> brcmfmac main (brcmf_sdio_readconsole)(0): 'brcmfmac: CONSOLE: 000000.052 wl0: wlc_ampdu_tx_set: AGG Mode = MAC+AQM txmaxpkts 1024'
+[00017.532] 02954.03014> brcmfmac main (brcmf_sdio_readconsole)(0): 'brcmfmac: CONSOLE: 000000.057 wl0: Broadcom BCM4356 802.11 Wireless Controller 7.35.184.r1 (TOB) (r559293)'
+[00017.532] 02954.03014> brcmfmac main (brcmf_sdio_readconsole)(0): 'brcmfmac: CONSOLE: 000000.057 TCAM: 256 used: 211 exceed:0'
+[00017.532] 02954.03014> brcmfmac main (brcmf_sdio_readconsole)(0): 'brcmfmac: CONSOLE: 000000.058 reclaim section 1: Returned 120976 bytes to the heap'
+[00017.532] 02954.03014> brcmfmac main (brcmf_sdio_readconsole)(0): 'brcmfmac: CONSOLE: '
+[00017.532] 02954.03014> brcmfmac main (brcmf_sdio_firmware_callback)(0): 'Should have seen readconsole output'
+[00017.532] 02954.03014> brcmfmac main (brcmf_sdiod_change_state)(0): '0 -> 1'
+[00017.532] 02954.03014> brcmfmac main (brcmf_bus_change_state)(0): '0 -> 1'
+[00017.532] 02954.03014> brcmfmac main (brcmf_sdiod_intr_register)(0): 'Enter, register OOB IRQ in 100 msec, 0x97da7f21e018 0x97da7f21e028'
+[00017.633] 02954.03014> brcmfmac: * * ERROR * * Called linux function enable_irq_wake
+[00017.633] 01858.01882> GPIO Interrupt index 2 allocated
+[00017.733] 02954.03014> brcmfmac main (brcmf_sdiod_intr_register)(0): 'Did get OOB IRQ 100 msec ago'
+[00017.733] 02954.03014> brcmfmac main (brcmf_sdio_firmware_callback)(0): 'Done, register OOB IRQ'
+[00017.733] 02954.03014> brcmfmac main (brcmf_sdio_firmware_callback)(0): ' * * Did interrupts and released host.'
+[00017.733] 02954.03014> brcmfmac main (brcmf_sdio_firmware_callback)(0): ' * * Really, BusStarted'
+[00017.733] 02954.03014> brcmfmac main (brcmf_sdio_firmware_callback)(0): ' * * Really, BusStarted'
+[00017.733] 02954.08545> brcmfmac intr (brcmf_sdio_oob_irqhandler)(0): 'OOB intr triggered'
+[00017.733] 02954.08545> brcmfmac intr (brcmf_sdio_intr_rstatus)(0): 'intstatus val 0xc0'
+[00017.733] 02954.08545> brcmfmac intr (brcmf_sdio_dpc)(1): 'Enter'
+[00017.733] 02954.08545> brcmfmac intr (brcmf_sdio_hostmail)(1): 'Enter'
+[00017.733] 02954.08545> brcmfmac intr (brcmf_sdiod_transferfff)(1): 'sdio  F1w4 d040 4000800000002 0x3005edde2f10'
+[00017.733] 02954.08545> brcmfmac intr (brcmf_sdio_hostmail)(1): 'Dongle ready, protocol version 4'
+[00017.733] 02954.08545> brcmfmac intr (brcmf_sdio_readshared)(1): 'rambase 0x180000, ramsize 0xc0000, shaddr 0x23fffc'
+[00017.733] 02954.08545> brcmfmac intr (brcmf_sdio_readshared)(1): 'Final shaddr is 0x23fffc'
+[00017.734] 02954.08545> brcmfmac intr (brcmf_sdio_readshared)(1): 'sdpcm_shared address 0x001D9480'
+[00017.734] 02954.08545> brcmfmac intr (brcmf_sdio_dpc)(1): 'rxskip 0, FRAME_IND 0x40'
+[00017.734] 02954.08545> brcmfmac intr (brcmf_sdio_readframes)(1): 'Enter'
+[00017.734] 02954.08545> brcmfmac intr (brcmf_sdiod_recv_pkt)(1): 'addr = 0x18000000, size = 64'
+[00017.734] 02954.08545> brcmfmac intr (brcmf_hexdump)(1): 'F2    0: 0c 00 f3 ff 00 01 00 0c 00 19 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 '
+[00017.735] 02954.08545> brcmfmac intr (brcmf_hexdump)(1): 'F2   1f: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 '
+[00017.736] 02954.08545> brcmfmac intr (brcmf_sdiod_recv_pkt)(1): 'err = 0'
+[00017.736] 02954.08545> brcmfmac intr (brcmf_hexdump)(1): 'brcmf_sdio_readframes    0: 0c 00 f3 ff 00 01 00 0c 00 19 00 00 '
+[00017.736] 02954.08545> brcmfmac intr (brcmf_sdiod_recv_pkt)(1): 'addr = 0x18000000, size = 0'
+[00017.736] 02954.08545> brcmfmac intr (brcmf_hexdump)(1): 'F2: Empty hexdump 0x97ed4de76040'
+[00017.736] 02954.08545> brcmfmac intr (brcmf_sdiod_recv_pkt)(1): 'err = 0'
+[00017.736] 02954.08545> brcmfmac intr (brcmf_sdio_readframes)(1): 'head_read 64'
+[00017.736] 02954.08545> brcmfmac intr (brcmf_sdio_readframes)(1): 'Got here 2'
+[00017.736] 02954.08545> brcmfmac intr (brcmf_sdio_readframes)(1): 'Got here 56'
+[00017.736] 02954.08545> brcmfmac intr (brcmf_hexdump)(1): 'brcmf_sdio_readframes    0: 0c 00 f3 ff 00 01 00 0c 00 19 00 00 '
+[00017.736] 02954.08545> brcmfmac intr (brcmf_sdiod_recv_pkt)(1): 'addr = 0x18000000, size = 64'
+[00017.736] 02954.08545> brcmfmac intr (brcmf_hexdump)(1): 'F2    0: 0c 00 f3 ff 01 01 00 0c 00 19 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 '
+[00017.737] 02954.08545> brcmfmac intr (brcmf_hexdump)(1): 'F2   1f: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 '
+[00017.738] 02954.08545> brcmfmac intr (brcmf_sdiod_recv_pkt)(1): 'err = 0'
+[00017.738] 02954.08545> brcmfmac intr (brcmf_hexdump)(1): 'brcmf_sdio_readframes    0: 0c 00 f3 ff 01 01 00 0c 00 19 00 00 '
+[00017.738] 02954.08545> brcmfmac intr (brcmf_sdiod_recv_pkt)(1): 'addr = 0x18000000, size = 0'
+[00017.738] 02954.08545> brcmfmac intr (brcmf_hexdump)(1): 'F2: Empty hexdump 0x97ed4de76040'
+[00017.738] 02954.08545> brcmfmac intr (brcmf_sdiod_recv_pkt)(1): 'err = 0'
+[00017.738] 02954.08545> brcmfmac intr (brcmf_sdio_readframes)(1): 'head_read 64'
+[00017.738] 02954.08545> brcmfmac intr (brcmf_sdio_readframes)(1): 'Got here 2'
+[00017.738] 02954.08545> brcmfmac intr (brcmf_sdio_readframes)(1): 'Got here 56'
+[00017.738] 02954.08545> brcmfmac intr (brcmf_hexdump)(1): 'brcmf_sdio_readframes    0: 0c 00 f3 ff 01 01 00 0c 00 19 00 00 '
+[00017.738] 02954.08545> brcmfmac intr (brcmf_sdiod_recv_pkt)(1): 'addr = 0x18000000, size = 64'
+[00017.738] 02954.08545> brcmfmac intr (brcmf_hexdump)(1): 'F2    0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 '
+[00017.739] 02954.08545> brcmfmac intr (brcmf_hexdump)(1): 'F2   1f: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 '
+[00017.740] 02954.08545> brcmfmac intr (brcmf_sdiod_recv_pkt)(1): 'err = 0'
+[00017.740] 02954.08545> brcmfmac intr (brcmf_hexdump)(1): 'brcmf_sdio_readframes    0: 00 00 00 00 00 00 00 00 00 00 00 00 '
+[00017.740] 02954.08545> brcmfmac intr (brcmf_sdio_readframes)(1): 'processed 2 frames'
+[00017.744] 02954.05138> brcmfmac wdog (brcmf_sdio_watchdog)(1): 'Enter'
+[00017.744] 02954.05850> brcmfmac bwdg (brcmf_sdio_bus_watchdog)(1): 'Enter'
+[00017.754] 02954.05138> brcmfmac wdog (brcmf_sdio_watchdog)(1): 'Enter'
+[00017.754] 02954.05850> brcmfmac bwdg (brcmf_sdio_bus_watchdog)(1): 'Enter'
+[00017.764] 02954.05138> brcmfmac wdog (brcmf_sdio_watchdog)(1): 'Enter'
+[00017.764] 02954.05850> brcmfmac bwdg (brcmf_sdio_bus_watchdog)(1): 'Enter'
+[00017.774] 02954.05138> brcmfmac wdog (brcmf_sdio_watchdog)(1): 'Enter'
+[00017.774] 02954.05850> brcmfmac bwdg (brcmf_sdio_bus_watchdog)(1): 'Enter'
+[00017.784] 02954.05138> brcmfmac wdog (brcmf_sdio_watchdog)(1): 'Enter'
+[00017.784] 02954.05850> brcmfmac bwdg (brcmf_sdio_bus_watchdog)(1): 'Enter'
+[00017.794] 02954.05138> brcmfmac wdog (brcmf_sdio_watchdog)(1): 'Enter'
+[00017.794] 02954.05850> brcmfmac bwdg (brcmf_sdio_bus_watchdog)(1): 'Enter'
+[00017.804] 02954.05138> brcmfmac wdog (brcmf_sdio_watchdog)(1): 'Enter'
+[00017.804] 02954.05850> brcmfmac bwdg (brcmf_sdio_bus_watchdog)(1): 'Enter'
+[00017.814] 02954.05138> brcmfmac wdog (brcmf_sdio_watchdog)(1): 'Enter'
+[00017.814] 02954.05850> brcmfmac bwdg (brcmf_sdio_bus_watchdog)(1): 'Enter'
+[00017.824] 02954.05138> brcmfmac wdog (brcmf_sdio_watchdog)(1): 'Enter'
+[00017.824] 02954.05850> brcmfmac bwdg (brcmf_sdio_bus_watchdog)(1): 'Enter'
+[00017.833] 02954.03014> brcmfmac main (brcmf_bus_started)(1): 'Enter'
+[00017.833] 02954.03014> brcmfmac main (brcmf_add_if)(1): 'Enter, bsscfgidx=0, ifidx=0'
+[00017.833] 02954.03014> brcmfmac main (brcmf_add_if)(1): 'allocate netdev interface'
+[00017.833] 02954.03014> brcmfmac main (brcmf_add_if)(1): ' ==== if:wlan (0x97da7f1f2438M) created ==='
+[00017.834] 02954.05138> brcmfmac wdog (brcmf_sdio_watchdog)(1): 'Enter'
+[00017.834] 02954.05850> brcmfmac bwdg (brcmf_sdio_bus_watchdog)(1): 'Enter'
+[00017.844] 02954.05138> brcmfmac wdog (brcmf_sdio_watchdog)(1): 'Enter'
+[00017.844] 02954.05850> brcmfmac bwdg (brcmf_sdio_bus_watchdog)(1): 'Enter'
+[00017.854] 02954.05138> brcmfmac wdog (brcmf_sdio_watchdog)(1): 'Enter'
+[00017.854] 02954.05850> brcmfmac bwdg (brcmf_sdio_bus_watchdog)(1): 'Enter'
+[00017.864] 02954.05138> brcmfmac wdog (brcmf_sdio_watchdog)(1): 'Enter'
+[00017.864] 02954.05850> brcmfmac bwdg (brcmf_sdio_bus_watchdog)(1): 'Enter'
+[00017.874] 02954.05138> brcmfmac wdog (brcmf_sdio_watchdog)(1): 'Enter'
+[00017.874] 02954.05850> brcmfmac bwdg (brcmf_sdio_bus_watchdog)(1): 'Enter'
+[00017.883] 02954.03014> brcmfmac main (brcmf_add_if)(1): 'Exit'
+[00017.883] 02954.03014> brcmfmac main (brcmf_bus_change_state)(1): '1 -> 1'
+[00017.883] 02954.03014> brcmfmac main (brcmf_proto_bcdc_query_dcmd)(1): 'Enter, cmd 262 len 20, ifidx 0'
+[00017.884] 02954.05138> brcmfmac wdog (brcmf_sdio_watchdog)(1): 'Enter'
+[00017.884] 02954.05850> brcmfmac bwdg (brcmf_sdio_bus_watchdog)(1): 'Enter'
+[00017.894] 02954.05138> brcmfmac wdog (brcmf_sdio_watchdog)(1): 'Enter'
+[00017.894] 02954.05850> brcmfmac bwdg (brcmf_sdio_bus_watchdog)(1): 'Enter'
+[00017.904] 02954.05138> brcmfmac wdog (brcmf_sdio_watchdog)(1): 'Enter'
+[00017.904] 02954.05850> brcmfmac bwdg (brcmf_sdio_bus_watchdog)(1): 'Enter'
+[00017.914] 02954.05138> brcmfmac wdog (brcmf_sdio_watchdog)(1): 'Enter'
+[00017.914] 02954.05850> brcmfmac bwdg (brcmf_sdio_bus_watchdog)(1): 'Enter'
+[00017.924] 02954.05138> brcmfmac wdog (brcmf_sdio_watchdog)(1): 'Enter'
+[00017.924] 02954.05850> brcmfmac bwdg (brcmf_sdio_bus_watchdog)(1): 'Enter'
+[00017.933] 02954.03014> brcmfmac main (brcmf_proto_bcdc_query_dcmd)(1): 'aaaEnter, cmd 262 len 20, ifidx 0'
+[00017.933] 02954.03014> brcmfmac main (brcmf_sdio_bus_txctl)(1): 'Enter'
+[00017.933] 02954.03014> brcmfmac main (brcmf_sdio_trigger_dpc)(1): 'About to call workqueue_schedule'
+[00017.933] 02954.05143> brcmfmac wrun (workqueue_runner)(1): 'Got work!'
+[00017.933] 02954.05143> brcmfmac work (brcmf_sdio_dpc)(2): 'Enter'
+[00017.933] 02954.05143> brcmfmac work (brcmf_sdio_dpc)(2): 'rxskip 0, FRAME_IND 0x0'
+[00017.933] 02954.05143> brcmfmac work (brcmf_sdio_tx_ctrlframe)(2): 'Enter'
+[00017.933] 02954.05143> brcmfmac work (brcmf_hexdump)(2): 'brcmf_sdio_tx_ctrlframe    0:'
+[00017.934] 02954.05143> brcmfmac work (brcmf_hexdump)(2): 'brcmf_sdio_tx_ctrlframe   1f:'
+[00017.934] 02954.05143> brcmfmac work (brcmf_hexdump)(2): 'brcmf_sdio_tx_ctrlframe    0:'
+[00017.935] 02954.05143> brcmfmac work (brcmf_hexdump)(2): 'F2    0: 30 00 cf ff ff 00 00 0c 00 00 00 00 06 01 00 00 14 00 00 00 00 00 01 00 00 00 00 00 63 75 72 5f '
+[00017.936] 02954.05143> brcmfmac work (brcmf_hexdump)(2): 'F2   1f: 65 74 68 65 72 61 64 64 72 00 00 00 00 00 00 00 '
+[00017.936] 02954.05143> brcmfmac work (brcmf_sdio_tx_ctrlframe)(2): 'Exit'
+[00017.936] 02954.05143> brcmfmac work (brcmf_sdio_dpc)(2): 'Wait event wakeup...'
+[00017.936] 02954.05143> brcmfmac work (brcmf_sdio_dpc)(2): 'Woke up'
+[00017.936] 02954.03014> brcmfmac main (brcmf_sdio_bus_txctl)(2): 'ctrl_frame complete, err=0'
+[00017.936] 02954.03014> brcmfmac main (brcmf_proto_bcdc_cmplt)(2): 'Enter'
+[00017.936] 02954.03014> brcmfmac main (brcmf_sdio_bus_rxctl)(2): 'Enter'
+[00017.943] 02954.05138> brcmfmac wdog (brcmf_sdio_watchdog)(2): 'Enter'
+[00017.943] 02954.05850> brcmfmac bwdg (brcmf_sdio_bus_watchdog)(2): 'Enter'
+[00019.243] 03541.04856> aml-dwmac: Link is now up
+[00019.243] 05897.07680> netstack: NIC en2: restarting
+[00020.350] 03053.03101> [aml_scpi_set_dvfs_idx 189]OPP index for cluster 0 to 6
+[00020.352] 03053.03101> [aml_scpi_set_dvfs_idx 189]OPP index for cluster 1 to 4
+[00020.353] 02797.02835> [aml_gpu_set_clk_freq_source 34]Setting clock source to 3: 6
+[00020.436] 02954.03014> brcmfmac main ERROR(brcmf_sdio_bus_rxctl): 'resumed on timeout'
+[00020.436] 02954.03014> brcmfmac main (brcmf_sdio_readshared)(2): 'rambase 0x180000, ramsize 0xc0000, shaddr 0x23fffc'
+[00020.436] 02954.03014> brcmfmac main (brcmf_sdio_readshared)(2): 'Final shaddr is 0x23fffc'
+[00020.436] 02954.03014> brcmfmac main (brcmf_sdio_readshared)(2): 'sdpcm_shared address 0x001D9480'
+[00020.436] 02954.03014> brcmfmac main (brcmf_sdio_checkdied)(2): 'firmware not built with -assert'
+[00020.436] 02954.03014> brcmfmac main (brcmf_fil_cmd_data)(2): 'Failed: (unknown) (-22)'
+[00020.436] 02954.03014> brcmfmac main ERROR(brcmf_c_preinit_dcmds): 'Retrieving cur_etheraddr failed, -22'
+[00020.436] 02954.03014> brcmfmac main ERROR(brcmf_bus_started): 'failed: -22'
+[00020.436] 02954.03014> brcmfmac main ERROR(brcmf_sdio_firmware_callback): 'dongle is not responding'
+[00020.436] 02954.03014> brcmfmac main (brcmf_sdio_firmware_callback)(2): 'failed: dev=sdio, err=-22'
+[00020.436] 02954.03014> brcmfmac main ERROR(brcmf_sdio_firmware_callback): '* * Used to call device_release_driver(&sdiodev->func2->dev);'
+[00020.436] 02954.03014> brcmfmac main ERROR(brcmf_sdio_firmware_callback): '* * Used to call device_release_driver(dev);'
+[00020.436] 02954.03014> brcmfmac main (brcmf_sdio_register)(2): 'F2 init completed...'
+[00020.436] 02954.03014> brcmfmac main (brcmfmac_module_init)(2): 'Successfully exiting driver init'
+[00020.436] 02954.03014> devhost: WARNING: driver '/system/driver/brcmfmac.so' did not add device in bind()
+[00022.001] 05897.06260> netstack: NIC en2: DHCP acquired IP 192.168.42.73 for 24h0m0s
+[00022.001] 05897.06260> netstack: NIC en2: Adding DNS servers: [8.8.8.8]
diff --git a/drivers/wlan/third_party/broadcom/brcmfmac/fuchsia.psr b/drivers/wlan/third_party/broadcom/brcmfmac/fuchsia.psr
new file mode 100644
index 0000000..15079d4
--- /dev/null
+++ b/drivers/wlan/third_party/broadcom/brcmfmac/fuchsia.psr
@@ -0,0 +1,283 @@
+[00017.734] 02954.08545> brcmfmac intr (pr)(1): 'sdio 54321 17.734 intr: F2r64f 8000 c000100fff3000c (0) 26'
+[00017.736] 02954.08545> brcmfmac intr (pr)(1): 'sdio 54321 17.736 intr: F2r0f 8000 0 (0) 26'
+[00017.736] 02954.08545> brcmfmac intr (pr)(1): 'sdio 54321 17.736 intr: F2r64f 8000 c000101fff3000c (0) 26'
+[00017.738] 02954.08545> brcmfmac intr (pr)(1): 'sdio 54321 17.738 intr: F2r0f 8000 0 (0) 26'
+[00017.738] 02954.08545> brcmfmac intr (pr)(1): 'sdio 54321 17.738 intr: F2r64f 8000 0 (0) 26'
+[00017.935] 02954.05143> brcmfmac work (pr)(2): 'sdio 54321 17.935 work: F2w48 8000 c0000ffffcf0030 (c100) 28'
+[00026.683] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 0 16.682 main: F1w1 1000a 0 (0) 0'
+[00026.693] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 1 16.682 main: F1w1 1000b 0 (0) 0'
+[00026.703] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 2 16.682 main: F1w1 1000c 18 (c18) 0'
+[00026.713] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 3 16.683 main: F1r4 8000 17224356 (c72f) 0'
+[00026.723] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 4 16.683 main: F1w1 1000e 28 (1428) 0'
+[00026.733] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 5 16.683 main: F1r1 1000e e8 (74e8) 0'
+[00026.743] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 6 16.683 main: F1w1 1000e 28 (1428) 0'
+[00026.753] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 7 16.683 main: F1r1 1000e e8 (74e8) 0'
+[00026.763] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 8 16.683 main: F1r1 1000e e8 (74e8) 0'
+[00026.773] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 9 16.683 main: F1w1 1000e 21 (10a1) 0'
+[00026.783] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 10 16.683 main: F1w1 1000f 0 (0) 0'
+[00026.793] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 11 16.683 main: F1r4 8000 17224356 (c72f) 0'
+[00026.803] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 12 16.683 main: F1r4 80fc 1810d000 (fd78) 0'
+[00026.813] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 13 16.683 main: F1w1 1000a 80 (4080) 0'
+[00026.823] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 14 16.683 main: F1w1 1000b 10 (810) 0'
+[00026.833] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 15 16.683 main: F1w1 1000c 18 (c18) 0'
+[00026.843] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 16 16.683 main: F1r4 d000 4bf80001 (8fb3) 0'
+[00026.853] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 17 16.683 main: F1r4 d004 2f084411 (3a7) 0'
+[00026.863] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 18 16.683 main: F1r4 d008 3 (5598) 0'
+[00026.873] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 19 16.683 main: F1r4 d00c 18000005 (f2b0) 0'
+[00026.883] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 20 16.683 main: F1r4 d010 1c000135 (af30) 0'
+[00026.893] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 21 16.683 main: F1r4 d014 1000000 (81) 0'
+[00026.903] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 22 16.683 main: F1r4 d018 181000c5 (8690) 0'
+[00026.913] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 23 16.683 main: F1r4 d01c 18107185 (8354) 0'
+[00026.923] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 24 16.683 main: F1r4 d020 4bf81201 (e3fb) 0'
+[00026.933] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 25 16.683 main: F1r4 d024 30004211 (9130) 0'
+[00026.943] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 26 16.683 main: F1r4 d028 103 (539c) 0'
+[00026.953] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 27 16.683 main: F1r4 d02c 18001005 (92f0) 0'
+[00026.963] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 28 16.683 main: F1r4 d030 181010c5 (e6d0) 0'
+[00026.973] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 29 16.683 main: F1r4 d034 4bf83e01 (b4b) 0'
+[00026.983] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 30 16.683 main: F1r4 d038 6084411 (170e) 0'
+[00026.993] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 31 16.683 main: F1r4 d03c 203 (5990) 0'
+[00027.003] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 32 16.683 main: F1r4 d040 18002005 (3230) 0'
+[00027.013] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 33 16.683 main: F1r4 d044 18006015 (7bb0) 0'
+[00027.023] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 34 16.683 main: F1r4 d048 135 (a12c) 0'
+[00027.033] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 35 16.683 main: F1r4 d04c a0000 (ab54) 0'
+[00027.043] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 36 16.683 main: F1r4 d050 180135 (3a1c) 0'
+[00027.053] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 37 16.683 main: F1r4 d054 80000 (8910) 0'
+[00027.063] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 38 16.683 main: F1r4 d058 200135 (856c) 0'
+[00027.073] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 39 16.683 main: F1r4 d05c 40000 (4488) 0'
+[00027.083] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 40 16.683 main: F1r4 d060 181020c5 (4610) 0'
+[00027.093] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 41 16.683 main: F1r4 d064 18108185 (a094) 0'
+[00027.103] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 42 16.683 main: F1r4 d068 4bf83c01 (743) 0'
+[00027.113] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 43 16.683 main: F1r4 d06c b084411 (1183) 0'
+[00027.123] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 44 16.683 main: F1r4 d070 303 (5f94) 0'
+[00027.133] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 45 16.683 main: F1r4 d074 18003005 (5270) 0'
+[00027.143] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 46 16.683 main: F1r4 d078 8000135 (a524) 0'
+[00027.153] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 47 16.683 main: F1r4 d07c 8000000 (408) 0'
+[00027.163] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 48 16.683 main: F1r4 d080 13d (c56c) 0'
+[00027.173] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 49 16.683 main: F1r4 d084 80000000 (4080) 0'
+[00027.183] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 50 16.683 main: F1r4 d088 8 (6440) 0'
+[00027.193] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 51 16.683 main: F1r4 d08c 80000000 (4080) 0'
+[00027.203] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 52 16.683 main: F1r4 d090 181030c5 (2650) 0'
+[00027.213] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 53 16.683 main: F1r4 d094 18109185 (c0d4) 0'
+[00027.223] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 54 16.683 main: F1r4 d098 4bf81a01 (d3db) 0'
+[00027.233] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 55 16.683 main: F1r4 d09c 16004211 (8216) 0'
+[00027.243] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 56 16.683 main: F1r4 d0a0 403 (4d88) 0'
+[00027.253] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 57 16.683 main: F1r4 d0a4 18004005 (73b0) 0'
+[00027.263] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 58 16.683 main: F1r4 d0a8 181040c5 (790) 0'
+[00027.273] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 59 16.683 main: F1r4 d0ac 4bf82901 (7917) 0'
+[00027.283] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 60 16.683 main: F1r4 d0b0 15004211 (8395) 0'
+[00027.293] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 61 16.683 main: F1r4 d0b4 503 (4b8c) 0'
+[00027.303] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 62 16.683 main: F1r4 d0b8 18005005 (13f0) 0'
+[00027.313] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 63 16.683 main: F1r4 d0bc 181050c5 (67d0) 0'
+[00027.323] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 64 16.683 main: F1r4 d0c0 4bf83d01 (147) 0'
+[00027.333] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 65 16.683 main: F1r4 d0c4 2004211 (8802) 0'
+[00027.344] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 66 16.684 main: F1r4 d0c8 903 (63bc) 0'
+[00027.354] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 67 16.684 main: F1r4 d0cc 18006005 (b330) 0'
+[00027.364] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 68 16.684 main: F1r4 d0d0 181060c5 (c710) 0'
+[00027.374] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 69 16.684 main: F1r4 d0d4 43b13501 (e5dd) 0'
+[00027.384] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 70 16.684 main: F1r4 d0d8 80201 (4990) 0'
+[00027.394] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 71 16.684 main: F1r4 d0dc 18000045 (d0b0) 0'
+[00027.404] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 72 16.684 main: F1r4 d0dc 18000045 (d0b0) 0'
+[00027.414] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 73 16.684 main: F1r4 d0e0 18001045 (b0f0) 0'
+[00027.424] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 74 16.684 main: F1r4 d0e4 18002045 (1030) 0'
+[00027.434] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 75 16.684 main: F1r4 d0e8 18003045 (7070) 0'
+[00027.444] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 76 16.684 main: F1r4 d0ec 18004045 (51b0) 0'
+[00027.454] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 77 16.684 main: F1r4 d0f0 18005045 (31f0) 0'
+[00027.464] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 78 16.684 main: F1r4 d0f4 18006045 (9130) 0'
+[00027.474] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 79 16.684 main: F1r4 d0f8 18007045 (f170) 0'
+[00027.484] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 80 16.684 main: F1r4 d0fc 18008055 (1a30) 0'
+[00027.494] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 81 16.684 main: F1r4 d100 1810a085 (6610) 0'
+[00027.504] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 82 16.684 main: F1r4 d104 43b24001 (e96f) 0'
+[00027.514] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 83 16.684 main: F1r4 d104 43b24001 (e96f) 0'
+[00027.524] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 84 16.684 main: F1r4 d108 80211 (8110) 0'
+[00027.534] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 85 16.684 main: F1r4 d10c 603 (4180) 0'
+[00027.544] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 86 16.684 main: F1r4 d110 19000075 (89b1) 0'
+[00027.554] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 87 16.684 main: F1r4 d114 1000000 (81) 0'
+[00027.564] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 88 16.684 main: F1r4 d118 1810b085 (650) 0'
+[00027.574] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 89 16.684 main: F1r4 d11c 43b36701 (2ad1) 0'
+[00027.584] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 90 16.684 main: F1r4 d11c 43b36701 (2ad1) 0'
+[00027.594] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 91 16.684 main: F1r4 d120 201 (c080) 0'
+[00027.604] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 92 16.684 main: F1r4 d124 1810c005 (6390) 0'
+[00027.614] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 93 16.684 main: F1r4 d128 43b36601 (2cd5) 0'
+[00027.624] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 94 16.684 main: F1r4 d12c 201 (c080) 0'
+[00027.634] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 95 16.684 main: F1r4 d130 1810d005 (3d0) 0'
+[00027.644] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 96 16.684 main: F1r4 d134 43b30101 (7f49) 0'
+[00027.654] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 97 16.684 main: F1r4 d138 201 (c080) 0'
+[00027.664] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 98 16.684 main: F1r4 d13c 18200035 (8f70) 0'
+[00027.674] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 99 16.684 main: F1r4 d140 100000 (1220) 0'
+[00027.684] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 100 16.684 main: F1r4 d144 43bfff01 (b529) 0'
+[00027.694] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 101 16.684 main: F1r4 d148 80201 (4990) 0'
+[00027.704] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 102 16.684 main: F1r4 d14c a0035 (c7c) 0'
+[00027.714] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 103 16.684 main: F1r4 d14c a0035 (c7c) 0'
+[00027.724] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 104 16.684 main: F1r4 d150 e0000 (efdc) 0'
+[00027.734] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 105 16.684 main: F1r4 d154 240035 (c7e0) 0'
+[00027.744] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 106 16.684 main: F1r4 d158 7dc0000 (5bf) 0'
+[00027.754] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 107 16.684 main: F1r4 d15c 10000035 (af38) 0'
+[00027.764] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 108 16.684 main: F1r4 d160 8000000 (408) 0'
+[00027.774] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 109 16.684 main: F1r4 d164 18008035 (a930) 0'
+[00027.784] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 110 16.684 main: F1r4 d168 f8000 (fcfe) 0'
+[00027.794] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 111 16.684 main: F1r4 d16c 1810e035 (fa90) 0'
+[00027.804] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 112 16.684 main: F1r4 d170 f2000 (3e7e) 0'
+[00027.814] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 113 16.684 main: F1r4 d174 18300035 (9d50) 0'
+[00027.824] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 114 16.684 main: F1r4 d178 d00000 (cba0) 0'
+[00027.834] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 115 16.684 main: F1r4 d17c 1a000035 (aa32) 0'
+[00027.844] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 116 16.684 main: F1r4 d180 2000000 (102) 0'
+[00027.854] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 117 16.684 main: F1r4 d184 1d000035 (a9b5) 0'
+[00027.864] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 118 16.684 main: F1r4 d188 e3000008 (1523) 0'
+[00027.874] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 119 16.684 main: F1r4 d18c 7fffffff (1365) 0'
+[00027.884] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 120 16.684 main: F1r4 d190 1810e085 (e710) 0'
+[00027.894] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 121 16.684 main: F1r4 d194 f (3f8) 0'
+[00027.904] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 122 16.684 main: F1r4 d194 f (3f8) 0'
+[00027.914] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 123 16.685 main: F1w1 1000a 0 (0) 0'
+[00027.924] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 124 16.685 main: F1w1 1000b 10 (810) 0'
+[00027.934] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 125 16.685 main: F1w1 1000c 18 (c18) 0'
+[00027.944] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 126 16.685 main: F1r4 a408 21 (5d88) 0'
+[00027.954] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 127 16.685 main: F1r4 a800 0 (0) 0'
+[00027.965] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 128 16.685 main: F1w4 a408 23 (c498) 0'
+[00027.975] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 129 16.685 main: F1r4 a408 23 (c498) 0'
+[00027.985] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 130 16.685 main: F1w4 a800 1 (cc88) 0'
+[00027.995] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 131 16.685 main: F1r4 a800 1 (cc88) 0'
+[00028.005] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 132 16.685 main: F1w4 a408 23 (c498) 0'
+[00028.015] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 133 16.685 main: F1r4 a408 23 (c498) 0'
+[00028.025] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 134 16.685 main: F1r4 a800 1 (cc88) 0'
+[00028.035] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 135 16.685 main: F1w4 a800 0 (0) 0'
+[00028.045] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 136 16.685 main: F1r4 a800 0 (0) 0'
+[00028.055] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 137 16.685 main: F1w4 a408 21 (5d88) 0'
+[00028.065] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 138 16.685 main: F1r4 a408 21 (5d88) 0'
+[00028.075] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 139 16.735 main: F1r4 9800 1 (cc88) 0'
+[00028.085] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 140 16.735 main: F1w4 9408 7 (67b8) 0'
+[00028.095] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 141 16.735 main: F1r4 9408 7 (67b8) 0'
+[00028.105] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 142 16.735 main: F1r4 9800 1 (cc88) 0'
+[00028.115] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 143 16.735 main: F1w4 9800 0 (0) 0'
+[00028.125] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 144 16.735 main: F1r4 9800 0 (0) 0'
+[00028.135] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 145 16.735 main: F1w4 9408 5 (fea8) 0'
+[00028.145] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 146 16.735 main: F1r4 9408 5 (fea8) 0'
+[00028.155] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 147 16.835 main: F1w1 1000a 0 (0) 0'
+[00028.165] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 148 16.835 main: F1w1 1000b 0 (0) 0'
+[00028.175] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 149 16.835 main: F1w1 1000c 18 (c18) 0'
+[00028.185] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 150 16.835 main: F1r4 a004 524 (bd34) 0'
+[00028.195] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 151 16.835 main: F1w4 a040 0 (0) 0'
+[00028.205] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 152 16.835 main: F1r4 a044 108c0f (3be8) 0'
+[00028.215] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 153 16.835 main: F1w4 a040 1 (cc88) 0'
+[00028.225] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 154 16.835 main: F1r4 a044 108c0f (3be8) 0'
+[00028.235] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 155 16.835 main: F1w4 a040 2 (9910) 0'
+[00028.245] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 156 16.835 main: F1r4 a044 108c0f (3be8) 0'
+[00028.255] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 157 16.835 main: F1w4 a040 3 (5598) 0'
+[00028.265] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 158 16.835 main: F1r4 a044 108c0f (3be8) 0'
+[00028.275] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 159 16.835 main: F1w4 a040 4 (3220) 0'
+[00028.285] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 160 16.835 main: F1r4 a044 108c0f (3be8) 0'
+[00028.295] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 161 16.835 main: F1w4 a040 5 (fea8) 0'
+[00028.305] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 162 16.835 main: F1r4 a044 108c0f (3be8) 0'
+[00028.315] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 163 16.886 main: F1r4 8004 58680009 (6140) 0'
+[00028.325] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 164 16.886 main: F1r4 80ac e (cf70) 0'
+[00028.335] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 165 16.886 main: F1r4 8604 420e5f18 (a122) 0'
+[00028.345] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 166 16.886 main: F1r1 1001f 3 (183) 0'
+[00028.355] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 167 16.886 main: F0r1 f1 1 (81) 0'
+[00028.365] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 168 16.886 main: F0w1 f1 3 (183) 0'
+[00028.375] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 169 16.886 main: F1r4 8600 1770180 (4b8b) 0'
+[00028.385] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 170 16.886 main: F1w4 8600 1774180 (ca8b) 0'
+[00028.395] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 171 16.886 main: F1w1 1000e 0 (0) 0'
+[00028.405] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 172 16.887 bwdg: F1w1 1000e 10 (810) 0'
+[00028.415] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 173 16.887 bwdg: F1r1 1000e d0 (68d0) 0'
+[00028.425] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 174 16.887 bwdg: F1r4 d020 80020000 (62c4) 0'
+[00028.435] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 175 16.953 main: F3w4 ffff 0 (0) 0'
+[00028.445] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 176 17.120 main: F4w4 ffff 0 (0) 0'
+[00028.455] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 177 17.121 main: F5w4 ffff 0 (0) 0'
+[00028.465] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 178 17.121 main: F1w1 1000a 0 (0) 0'
+[00028.475] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 179 17.121 main: F1w1 1000b 0 (0) 0'
+[00028.485] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 180 17.121 main: F1w1 1000c 18 (c18) 0'
+[00028.495] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 181 17.121 main: F1w4 d020 ffffffff (53e5) 0'
+[00028.505] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 182 17.121 main: F1w1 1000a 0 (0) 0'
+[00028.515] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 183 17.121 main: F1w1 1000b 0 (0) 0'
+[00028.525] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 184 17.121 main: F1w1 1000c 0 (0) 0'
+[00028.535] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 185 17.121 main: F1w4 8000 b83ef180 (e4c0) 0'
+[00028.545] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 186 17.121 main: F1w1 1000a 0 (0) 0'
+[00028.555] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 187 17.121 main: F1w1 1000b 10 (810) 0'
+[00028.565] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 188 17.121 main: F1w1 1000c 18 (c18) 0'
+[00028.575] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 189 17.121 main: F1r4 a800 0 (0) 0'
+[00028.585] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 190 17.121 main: F1w4 a408 23 (c498) 0'
+[00028.595] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 191 17.121 main: F1r4 a408 23 (c498) 0'
+[00028.605] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 192 17.121 main: F1w4 a800 1 (cc88) 0'
+[00028.615] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 193 17.121 main: F1r4 a800 1 (cc88) 0'
+[00028.625] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 194 17.121 main: F1w4 a408 3 (5598) 0'
+[00028.635] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 195 17.121 main: F1r4 a408 3 (5598) 0'
+[00028.645] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 196 17.121 main: F1r4 a800 1 (cc88) 0'
+[00028.656] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 197 17.121 main: F1w4 a800 0 (0) 0'
+[00028.666] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 198 17.121 main: F1r4 a800 0 (0) 0'
+[00028.676] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 199 17.121 main: F1w4 a408 1 (cc88) 0'
+[00028.686] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 200 17.121 main: F1r4 a408 1 (cc88) 0'
+[00028.696] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 201 17.121 main: F1w1 1000e 0 (0) 0'
+[00028.706] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 202 17.321 main: F1w1 1000e 10 (810) 0'
+[00028.716] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 203 17.321 main: F1r1 1000e d0 (68d0) 0'
+[00028.726] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 204 17.321 main: F1r1 1000e d0 (68d0) 0'
+[00028.736] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 205 17.321 main: F1w1 1000e d2 (69d2) 0'
+[00028.746] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 206 17.321 main: F1w1 1000a 0 (0) 0'
+[00028.756] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 207 17.321 main: F1w1 1000b 0 (0) 0'
+[00028.766] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 208 17.321 main: F1w1 1000c 18 (c18) 0'
+[00028.776] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 209 17.321 main: F1w4 d048 40000 (4488) 0'
+[00028.786] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 210 17.331 main: F1w4 d024 200000f0 (2fa0) 0'
+[00028.796] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 211 17.331 main: F1w1 10008 8 (408) 0'
+[00028.806] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 212 17.331 main: F1w4 8650 3 (5598) 0'
+[00028.816] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 213 17.332 main: F1r4 8654 f012c37 (c025) 0'
+[00028.826] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 214 17.432 main: F1r1 1001e 0 (0) 0'
+[00028.836] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 215 17.432 main: F1w1 1001e 2 (102) 0'
+[00028.846] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 216 17.432 main: F0w1 f0 6 (306) 0'
+[00028.856] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 217 17.432 main: F1w1 1000e 2 (102) 0'
+[00028.866] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 218 17.532 main: F1w1 1000a 80 (4080) 0'
+[00028.876] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 219 17.532 main: F1w1 1000b 23 (11a3) 0'
+[00028.886] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 220 17.532 main: F1w1 1000c 0 (0) 0'
+[00028.896] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 221 17.532 main: F1r4 fffc 1d9480 (f0ca) 0'
+[00028.906] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 222 17.532 main: F1w1 1000a 80 (4080) 0'
+[00028.916] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 223 17.532 main: F1w1 1000b 1d (e9d) 0'
+[00028.926] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 224 17.532 main: F1w1 1000c 0 (0) 0'
+[00028.936] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 225 17.532 main: F1r64 9480 1 (6240) 0'
+[00028.946] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 226 17.532 main: F1w1 1000a 80 (4080) 0'
+[00028.956] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 227 17.532 main: F1w1 1000b 23 (11a3) 0'
+[00028.966] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 228 17.532 main: F1w1 1000c 0 (0) 0'
+[00028.976] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 229 17.532 main: F1r24 dec4 4000023dab4 (1880) 0'
+[00028.986] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 230 17.532 main: F1r76 dab4 615f6d7261646e68 (96ce) 0'
+[00028.996] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 231 17.532 main: F1r256 db00 2e35332e37202943 (210) 0'
+[00029.006] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 232 17.532 main: F1r256 dc00 77203735302e3030 (0) 0'
+[00029.016] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 233 17.532 main: F1r256 dd00 0 (0) 0'
+[00029.026] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 234 17.532 main: F1r180 de00 0 (0) 0'
+[00029.036] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 235 17.532 main: F11w4 ffff 0 (0) 0'
+[00029.046] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 236 17.633 main: F15w4 ffff 0 (0) 0'
+[00029.056] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 237 17.633 main: F16w4 ffff 0 (0) 0'
+[00029.066] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 238 17.633 main: F17w4 ffff 0 (0) 0'
+[00029.076] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 239 17.633 main: F0r1 4 0 (0) 0'
+[00029.086] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 240 17.633 main: F18w4 ffff 0 (0) 0'
+[00029.096] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 241 17.633 main: F0w1 4 7 (387) 0'
+[00029.106] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 242 17.633 main: F0w1 f2 7 (387) 0'
+[00029.116] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 243 17.733 main: F12w4 ffff 0 (0) 0'
+[00029.126] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 244 17.733 main: F13w4 ffff 0 (0) 0'
+[00029.136] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 245 17.733 intr: F1w1 1000a 0 (0) 0'
+[00029.146] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 246 17.733 intr: F1w1 1000b 0 (0) 0'
+[00029.156] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 247 17.733 intr: F1w1 1000c 18 (c18) 0'
+[00029.166] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 248 17.733 intr: F1r4 d020 8000c0 (f700) 0'
+[00029.176] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 249 17.733 intr: F1w4 d020 c0 (6600) 0'
+[00029.186] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 250 17.733 intr: F1r4 d04c 40008 (20c8) 231'
+[00029.196] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 251 17.733 intr: F1w4 d040 2 (9910) 3516'
+[00029.206] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 252 17.734 intr: F1w1 1000a 80 (4080) 233'
+[00029.216] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 253 17.734 intr: F1w1 1000b 23 (11a3) 233'
+[00029.226] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 254 17.734 intr: F1w1 1000c 0 (0) 233'
+[00029.236] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 255 17.734 intr: F1r4 fffc 1d9480 (f0ca) 233'
+[00029.246] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 256 17.734 intr: F1w1 1000a 80 (4080) 233'
+[00029.256] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 257 17.734 intr: F1w1 1000b 1d (e9d) 233'
+[00029.266] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 258 17.734 intr: F1w1 1000c 0 (0) 233'
+[00029.276] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 259 17.734 intr: F1r64 9480 1 (6240) 233'
+[00029.286] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 260 17.734 intr: F1w1 1000a 0 (0) 26'
+[00029.296] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 261 17.734 intr: F1w1 1000b 0 (0) 26'
+[00029.306] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 262 17.734 intr: F1w1 1000c 18 (c18) 26'
+[00029.316] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 263 17.734 intr: F2r64f 8000 c000100fff3000c (0) 26'
+[00029.326] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 264 17.736 intr: F2r0f 8000 0 (0) 26'
+[00029.337] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 265 17.736 intr: F2r64f 8000 c000101fff3000c (0) 26'
+[00029.347] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 266 17.738 intr: F2r0f 8000 0 (0) 26'
+[00029.357] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 267 17.738 intr: F2r64f 8000 0 (0) 26'
+[00029.367] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 268 17.935 work: F2w48 8000 c0000ffffcf0030 (c100) 28'
+[00029.377] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 269 20.436 main: F1w1 1000a 80 (4080) 0'
+[00029.387] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 270 20.436 main: F1w1 1000b 23 (11a3) 0'
+[00029.397] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 271 20.436 main: F1w1 1000c 0 (0) 0'
+[00029.407] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 272 20.436 main: F1r4 fffc 1d9480 (f0ca) 0'
+[00029.417] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 273 20.436 main: F1w1 1000a 80 (4080) 0'
+[00029.427] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 274 20.436 main: F1w1 1000b 1d (e9d) 0'
+[00029.437] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 275 20.436 main: F1w1 1000c 0 (0) 0'
+[00029.447] 02954.05148> brcmfmac 0x24a67fa4b000 (pr)(2): 'sdio 276 20.436 main: F1r64 9480 1 (6240) 0'
diff --git a/drivers/wlan/third_party/broadcom/brcmfmac/fwil.c b/drivers/wlan/third_party/broadcom/brcmfmac/fwil.c
index 28356a8..a5fd0d05 100644
--- a/drivers/wlan/third_party/broadcom/brcmfmac/fwil.c
+++ b/drivers/wlan/third_party/broadcom/brcmfmac/fwil.c
@@ -155,7 +155,7 @@
     mtx_lock(&ifp->drvr->proto_block);
     err = brcmf_fil_cmd_data(ifp, cmd, data, len, false);
 
-    brcmf_dbg(FIL, "ifidx=%d, cmd=%d, len=%d\n", ifp->ifidx, cmd, len);
+   // brcmf_dbg(FIL, "ifidx=%d, cmd=%d, len=%d\n", ifp->ifidx, cmd, len);
     //brcmf_dbg_hex_dump(BRCMF_FIL_ON(), data, min_t(uint, len, MAX_HEX_DUMP_LEN), "data\n");
 
     mtx_unlock(&ifp->drvr->proto_block);
diff --git a/drivers/wlan/third_party/broadcom/brcmfmac/linux.print b/drivers/wlan/third_party/broadcom/brcmfmac/linux.print
new file mode 100644
index 0000000..4f68e94
--- /dev/null
+++ b/drivers/wlan/third_party/broadcom/brcmfmac/linux.print
@@ -0,0 +1,508 @@
+
+Ubuntu 16.04.5 LTS Khadas ttyAML0
+
+Khadas login: [   33.249643] brcmfmac: brcmf_driver_register:  15 seconds...
+khadas
+Password:
+Last login: Sun Sep  9 17:50:08 CST 2018 on ttyAML0
+
+Welcome to Fenix 0.3 Ubuntu 16.04.5 LTS Linux 4.17.3
+ _  ___               _            __     _____ __  __ ____
+| |/ / |__   __ _  __| | __ _ ___  \ \   / /_ _|  \/  |___ \
+| ' /| '_ \ / _` |/ _` |/ _` / __|  \ \ / / | || |\/| | __) |
+| . \| | | | (_| | (_| | (_| \__ \   \ V /  | || |  | |/ __/
+|_|\_\_| |_|\__,_|\__,_|\__,_|___/    \_/  |___|_|  |_|_____|
+
+
+ * Website:        https://www.khadas.com
+ * Documentation:  https://docs.khadas.com
+ * Forum:          https://forum.khadas.com
+
+khadas@Khadas:~$ sudo sysctl -w net.core.message_cost=0[   38.373738] brcmfmac: brcmf_driver_register:  10 seconds...
+
+[sudo] password for khadas:
+net.core.message_cost = 0
+khadas@Khadas:~$ [   43.490267] brcmfmac: brcmf_driver_register:  5 seconds...
+[   48.610311] brcmfmac: brcmf_driver_register: Here we go!
+[   48.611366] brcmfmac: brcmf_sdio_probe: cphoenix got here
+[   48.616193] brcmfmac: brcmf_sdio_probe_attach: cphoenix got here
+[   48.621433] brcmfmac: brcmf_sdio_probe_attach: * * * * About to run_sdio_test * * *
+[   48.629071] brcmfmac: brcmf_sdio_probe_attach: * * * * Did run_sdio_test * * *
+[   48.636612] brcmfmac: brcmf_sdio_probe_attach: F1 signature read @0x18000000=0x17224356
+[   48.644146] brcmfmac: brcmf_chip_attach: Enter cphoenix Wed
+[   48.649638] brcmfmac: brcmf_chip_attach: Enter cphoenix Wed2
+[   48.655241] brcmfmac: brcmf_chip_attach: Enter cphoenix Wed3
+[   48.660830] brcmfmac: brcmf_chip_attach: Enter cphoenix Wed4
+[   48.666437] brcmfmac: brcmf_chip_attach: Enter cphoenix Wed5
+[   48.672053] brcmfmac: brcmf_chip_attach: Enter cphoenix Wed6, ptr 00000000a98b9780
+[   48.679562] brcmfmac: brcmf_chip_attach: Enter cphoenix Wed7
+[   48.685162] brcmfmac: brcmf_chip_attach: Pre-prepare
+[   48.690070] brcmfmac: brcmf_sdio_buscoreprep: Enter
+[   48.695038] brcmfmac: brcmf_sdio_buscoreprep: Exit
+[   48.699646] brcmfmac: brcmf_chip_attach: Post-prepare, err 0
+[   48.707293] brcmfmac: brcmf_chip_attach: Post-recognition, err 0
+[   48.711231] brcmfmac: brcmf_chip_attach: Post-setup, err 0
+[   48.716636] brcmfmac: brcmf_chip_attach: Exit
+[   48.720973] brcmfmac: brcmf_sdio_probe_attach: SDIO core: id 2089, rev 21, base 0x18005000
+[   48.729169] brcmfmac: brcmf_sdio_kso_init: Enter
+[   48.733742] brcmfmac: brcmf_sdio_kso_init: Exit
+[   48.738199] brcmfmac: brcmf_sdio_drivestrengthinit: Enter
+[   48.743853] brcmfmac: brcmf_sdio_probe: About to prepare_fw_request
+[   48.749761] brcmfmac: brcmf_sdio_prepare_fw_request: Enter
+[   48.755191] brcmfmac: brcmf_fw_alloc_request: Enter
+[   48.760039] brcmfmac: brcmf_sdio_probe: Did prepare_fw_request
+[   48.797794] brcmfmac: brcmf_fw_request_nvram_done: fw->data found, size 2844, raw 0
+[   48.801491] brcmfmac: brcmf_sdio_firmware_callback: Enter: dev=mmc2:0001:1, err=0
+[   48.807280] brcmfmac: brcmf_sdio_firmware_callback: fw->nvram found, size 2644
+[   48.814462] brcmfmac: brcmf_sdio_firmware_callback: Into download_firmware
+[   48.821250] brcmfmac: brcmf_sdio_download_firmware: Got here
+[   48.826864] brcmfmac: brcmf_sdio_download_firmware: Got here
+[   48.832461] brcmfmac: brcmf_sdio_htclk: Enter, on 1, pendok 0, sr 0, alp 1
+[   48.839371] brcmfmac: brcmf_sdio_htclk: CLKCTL: turned ON
+[   48.844642] brcmfmac: brcmf_sdio_htclk: Exit
+[   48.848849] brcmfmac: brcmf_sdio_download_firmware: Got here
+[   48.854454] brcmfmac: brcmf_sdio_download_firmware: firmware rstvec: b83ef180
+[   48.886095] brcmfmac: brcmf_sdio_verifymemory: Compare RAM dl & ul at 0x00180000; size=555412
+[   48.928186] brcmfmac: brcmf_sdio_verifymemory: Compare RAM dl & ul at 0x0023f5ac; size=2644
+[   48.931141] brcmfmac: brcmf_sdio_buscore_activate: Enter, rstvec 0xb83ef180
+[   48.938059] brcmfmac: brcmf_sdio_buscore_activate: Exit
+[   48.943436] brcmfmac: brcmf_sdio_htclk: Enter, on 0, pendok 0, sr 0, alp 1
+[   48.949923] brcmfmac: brcmf_sdio_htclk: Exit
+[   48.954076] brcmfmac: brcmf_sdio_download_firmware: Doing release_host
+[   48.960505] brcmfmac: brcmf_sdio_firmware_callback: Back from download_firmware
+[   48.967744] brcmfmac: brcmf_sdio_htclk: Enter, on 1, pendok 0, sr 0, alp 0
+[   48.974609] brcmfmac: brcmf_sdio_htclk: CLKCTL: turned ON
+[   48.979911] brcmfmac: brcmf_sdio_htclk: Exit
+[   49.008291] brcmfmac: brcmf_bus_change_state: 0 -> 1
+[   49.008326] brcmfmac: brcmf_sdiod_intr_register: Enter
+[   49.014188] brcmfmac: brcmf_add_if: Enter, bsscfgidx=0, ifidx=0
+[   49.014930] brcmfmac: brcmf_sdio_intr_rstatus: core->base 0x18005000, SD_REG(int) 0x20
+[   49.018656] brcmfmac: brcmf_add_if:  ==== pid:98, if:wlan%d (00:00:00:00:00:00) created ===
+[   49.018663] brcmfmac: brcmf_bus_change_state: 0 -> 1
+[   49.018674] brcmfmac: brcmf_fil_iovar_data_set: ifidx=0, name=bus:txglomalign, len=4
+[   49.018681] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 263 len 20 ifidx 0
+[   49.018693] brcmfmac: brcmf_hexdump: set dcmd    0: 62 75 73 3a 74 78 67 6c 6f 6d 61 6c 69 67 6e 00 08 00 00 00
+[   49.064680] brcmfmac: brcmf_sdio_intr_rstatus: times 1, val 8000c0, intmask 200000f0
+[   49.072710] brcmfmac: brcmf_sdio_hostmail: Enter
+[   49.078300] brcmfmac: brcmf_sdio_intr_rstatus: core->base 0x18005000, SD_REG(int) 0x20
+[   49.084660] brcmfmac: brcmf_sdio_intr_rstatus: times 2, val 8000c0, intmask 200000f0
+[   49.092401] brcmfmac: brcmf_sdio_hostmail: Enter
+[   49.097440] brcmfmac: brcmf_fil_iovar_data_set: ifidx=0, name=bus:rxglom, len=4
+[   49.104175] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 263 len 15 ifidx 0
+[   49.111351] brcmfmac: brcmf_hexdump: set dcmd    0: 62 75 73 3a 72 78 67 6c 6f 6d 00 01 00 00 00
+[   49.130581] brcmfmac: brcmf_sdio_intr_rstatus: core->base 0x18005000, SD_REG(int) 0x20
+[   49.132929] brcmfmac: brcmf_sdio_intr_rstatus: times 3, val 800040, intmask 200000f0
+[   49.141764] brcmfmac: brcmf_c_preinit_dcmds: Enter
+[   49.150227] brcmfmac: brcmf_sdio_intr_rstatus: core->base 0x18005000, SD_REG(int) 0x20
+[   49.153157] brcmfmac: brcmf_sdio_intr_rstatus: times 4, val 800040, intmask 200000f0
+[   49.162207] brcmfmac: brcmf_sdio_intr_rstatus: core->base 0x18005000, SD_REG(int) 0x20
+[   49.168702] brcmfmac: brcmf_sdio_intr_rstatus: times 5, val 800040, intmask 200000f0
+[   49.178297] brcmfmac: brcmf_sdio_get_fwname: Enter
+[   49.181156] brcmfmac: brcmf_fw_alloc_request: Enter
+[   49.198312] brcmfmac: brcmf_sdio_intr_rstatus: core->base 0x18005000, SD_REG(int) 0x20
+[   49.200610] brcmfmac: brcmf_sdio_intr_rstatus: times 6, val 800040, intmask 200000f0
+[   49.214425] brcmfmac: brcmf_sdio_intr_rstatus: core->base 0x18005000, SD_REG(int) 0x20
+[   49.216688] brcmfmac: brcmf_sdio_intr_rstatus: times 7, val 800040, intmask 200000f0
+[   49.224597] brcmfmac: brcmf_fil_iovar_data_set: ifidx=0, name=mpc, len=4
+[   49.231059] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 263 len 8 ifidx 0
+[   49.238131] brcmfmac: brcmf_hexdump: set dcmd    0: 6d 70 63 00 01 00 00 00
+[   49.246288] brcmfmac: brcmf_sdio_intr_rstatus: core->base 0x18005000, SD_REG(int) 0x20
+[   49.253042] brcmfmac: brcmf_sdio_intr_rstatus: times 8, val 800040, intmask 200000f0
+[   49.261763] brcmfmac: brcmf_fil_iovar_data_set: ifidx=0, name=join_pref, len=8
+[   49.267920] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 263 len 18 ifidx 0
+[   49.275297] brcmfmac: brcmf_hexdump: set dcmd    0: 6a 6f 69 6e 5f 70 72 65 66 00 04 02 08 01 01 02 00 00
+[   49.286768] brcmfmac: brcmf_sdio_intr_rstatus: core->base 0x18005000, SD_REG(int) 0x20
+[   49.292512] brcmfmac: brcmf_sdio_intr_rstatus: times 9, val 800040, intmask 200000f0
+[   49.306483] brcmfmac: brcmf_fil_iovar_data_set: ifidx=0, name=event_msgs, len=18
+[   49.308259] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 263 len 29 ifidx 0
+[   49.315583] brcmfmac: brcmf_hexdump: set dcmd    0: 65 76 65 6e 74 5f 6d 73 67 73 00 00 00 00 00 00 00 40 00 00 04 00 00 00 00 00 80 00 00
+[   49.330776] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 185 len 4 ifidx 0
+[   49.334911] brcmfmac: brcmf_hexdump: set dcmd    0: 28 00 00 00
+[   49.351102] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 187 len 4 ifidx 0
+[   49.352633] brcmfmac: brcmf_hexdump: set dcmd    0: 28 00 00 00
+[   49.370802] brcmfmac: brcmf_fil_iovar_data_set: ifidx=0, name=txbf, len=4
+[   49.371962] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 263 len 9 ifidx 0
+[   49.379082] brcmfmac: brcmf_hexdump: set dcmd    0: 74 78 62 66 00 01 00 00 00
+[   49.399662] brcmfmac: brcmf_fil_iovar_data_set: ifidx=0, name=pfn_gscan_cfg, len=18
+[   49.401761] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 263 len 32 ifidx 0
+[   49.408957] brcmfmac: brcmf_hexdump: set dcmd    0: 70 66 6e 5f 67 73 63 61 6e 5f 63 66 67 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+[   50.524603] brcmfmac: brcmf_sdio_readframes: RXHEADER FAILED: -110
+[   50.525224] brcmfmac: brcmf_sdio_rxfail: abort command, terminate frame, send NAK
+[   50.533960] brcmfmac: brcmf_sdio_hostmail: Enter
+[   50.690881] brcmfmac: brcmf_fil_iovar_data_set: ifidx=0, name=bw_cap, len=8
+[   50.692240] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 263 len 15 ifidx 0
+[   50.699569] brcmfmac: brcmf_hexdump: set dcmd    0: 62 77 5f 63 61 70 00 02 00 00 00 03 00 00 00
+[   50.723730] brcmfmac: brcmf_fil_iovar_data_set: ifidx=0, name=obss_coex, len=4
+[   50.725395] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 263 len 14 ifidx 0
+[   50.732865] brcmfmac: brcmf_hexdump: set dcmd    0: 6f 62 73 73 5f 63 6f 65 78 00 ff ff ff ff
+[   50.747161] brcmfmac: brcmf_fil_iovar_data_set: ifidx=0, name=event_msgs, len=18
+[   50.748946] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 263 len 29 ifidx 0
+[   50.756237] brcmfmac: brcmf_hexdump: set dcmd    0: 65 76 65 6e 74 5f 6d 73 67 73 00 61 15 0b 00 02 42 c0 10 60 09 00 00 00 00 00 00 00 00
+[   50.783103] brcmfmac: brcmf_fil_iovar_data_set: ifidx=0, name=tdls_enable, len=4
+[   50.784933] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 263 len 16 ifidx 0
+[   50.792379] brcmfmac: brcmf_hexdump: set dcmd    0: 74 64 6c 73 5f 65 6e 61 62 6c 65 00 01 00 00 00
+[   50.803221] brcmfmac: brcmf_fil_iovar_data_set: ifidx=0, name=event_msgs, len=18
+[   50.808493] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 263 len 29 ifidx 0
+[   50.815628] brcmfmac: brcmf_hexdump: set dcmd    0: 65 76 65 6e 74 5f 6d 73 67 73 00 61 15 0b 00 02 42 c0 10 60 09 00 10 00 00 00 00 00 00
+[   50.848482] brcmfmac: brcmf_sdio_firmware_callback: aReading interrupt reg: 0x0
+[   50.851301] brcmfmac: brcmf_sdio_firmware_callback: bReading interrupt reg: 0x800040
+[   50.858983] brcmfmac: brcmf_sdio_firmware_callback: cReading interrupt reg: 0x0
+[   50.865554] brcmfmac: brcmf_sdio_firmware_callback: dReading interrupt reg: 0x0
+[   50.872971] brcmfmac: brcmf_sdio_firmware_callback: eReading interrupt reg: 0x0
+[   50.958577] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 2 len 4 ifidx 0
+[   50.959893] brcmfmac: brcmf_hexdump: set dcmd    0: 00 00 00 00
+[   51.007476] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 185 len 4 ifidx 0
+[   51.007996] brcmfmac: brcmf_add_if: Enter, bsscfgidx=0, ifidx=0
+[   51.009023] brcmfmac: brcmf_hexdump: set dcmd    0: 28 00 00 00
+[   51.042535] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 187 len 4 ifidx 0
+[   51.044062] brcmfmac: brcmf_hexdump: set dcmd    0: 28 00 00 00
+[   51.062938] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 258 len 4 ifidx 0
+[   51.064428] brcmfmac: brcmf_hexdump: set dcmd    0: 78 00 00 00
+[   51.082366] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 86 len 4 ifidx 0
+[   51.083761] brcmfmac: brcmf_hexdump: set dcmd    0: 02 00 00 00
+[   51.090398] brcmfmac: brcmf_fil_iovar_data_set: ifidx=0, name=bcn_timeout, len=4
+[   51.097075] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 263 len 16 ifidx 0
+[   51.109397] brcmfmac: brcmf_hexdump: set dcmd    0: 62 63 6e 5f 74 69 6d 65 6f 75 74 00 02 00 00 00
+[   51.130963] brcmfmac: brcmf_fil_iovar_data_set: ifidx=0, name=roam_off, len=4
+[   51.132462] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 263 len 13 ifidx 0
+[   51.139689] brcmfmac: brcmf_hexdump: set dcmd    0: 72 6f 61 6d 5f 6f 66 66 00 00 00 00 00
+[   51.150345] brcmfmac: brcmf_fil_cmd_data_set: ifidx=0, cmd=55, len=8
+[   51.160197] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 55 len 8 ifidx 0
+[   51.167191] brcmfmac: brcmf_hexdump: set dcmd    0: b5 ff ff ff 03 00 00 00
+[   51.186927] brcmfmac: brcmf_fil_cmd_data_set: ifidx=0, cmd=57, len=8
+[   51.187640] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 57 len 8 ifidx 0
+[   51.194676] brcmfmac: brcmf_hexdump: set dcmd    0: 14 00 00 00 03 00 00 00
+[   51.206944] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 20 len 4 ifidx 0
+[   51.214053] brcmfmac: brcmf_hexdump: set dcmd    0: 01 00 00 00
+[   51.226840] brcmfmac: brcmf_fil_iovar_data_set: ifidx=0, name=arp_ol, len=4
+[   51.232744] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 263 len 11 ifidx 0
+[   51.239910] brcmfmac: brcmf_hexdump: set dcmd    0: 61 72 70 5f 6f 6c 00 09 00 00 00
+[   51.262879] brcmfmac: brcmf_fil_iovar_data_set: ifidx=0, name=arpoe, len=4
+[   51.264110] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 263 len 10 ifidx 0
+[   51.271310] brcmfmac: brcmf_hexdump: set dcmd    0: 61 72 70 6f 65 00 01 00 00 00
+[   51.299122] brcmfmac: brcmf_fil_iovar_data_set: ifidx=0, name=ndoe, len=4
+[   51.300420] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 263 len 9 ifidx 0
+[   51.307741] brcmfmac: brcmf_hexdump: set dcmd    0: 6e 64 6f 65 00 01 00 00 00
+[   51.318342] brcmfmac: brcmf_fil_iovar_data_set: ifidx=0, name=mcast_list, len=4
+[   51.327942] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 263 len 15 ifidx 0
+[   51.327953] brcmfmac: brcmf_hexdump: set dcmd    0: 6d 63 61 73 74 5f 6c 69 73 74 00 00 00 00 00
+[   51.338498] brcmfmac: brcmf_fil_iovar_data_set: ifidx=0, name=allmulti, len=4
+[   51.338504] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 263 len 13 ifidx 0
+[   51.338512] brcmfmac: brcmf_hexdump: set dcmd    0: 61 6c 6c 6d 75 6c 74 69 00 00 00 00 00
+[   51.346845] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 10 len 4 ifidx 0
+[   51.372347] brcmfmac: brcmf_hexdump: set dcmd    0: 00 00 00 00
+[   51.402630] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 86 len 4 ifidx 0
+[   51.405547] brcmfmac: brcmf_hexdump: set dcmd    0: 02 00 00 00
+[   51.422908] brcmfmac: brcmf_fil_iovar_data_set: ifidx=0, name=arp_ol, len=4
+[   51.425291] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 263 len 11 ifidx 0
+[   51.432756] brcmfmac: brcmf_hexdump: set dcmd    0: 61 72 70 5f 6f 6c 00 09 00 00 00
+[   51.444354] brcmfmac: brcmf_fil_iovar_data_set: ifidx=0, name=arpoe, len=4
+[   51.453043] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 263 len 10 ifidx 0
+[   51.460106] brcmfmac: brcmf_hexdump: set dcmd    0: 61 72 70 6f 65 00 01 00 00 00
+[   51.478898] brcmfmac: brcmf_fil_iovar_data_set: ifidx=0, name=ndoe, len=4
+[   51.480271] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 263 len 9 ifidx 0
+[   51.487396] brcmfmac: brcmf_hexdump: set dcmd    0: 6e 64 6f 65 00 01 00 00 00
+[   51.506673] brcmfmac: brcmf_fil_iovar_data_set: ifidx=0, name=mcast_list, len=10
+[   51.508423] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 263 len 21 ifidx 0
+[   51.515665] brcmfmac: brcmf_hexdump: set dcmd    0: 6d 63 61 73 74 5f 6c 69 73 74 00 01 00 00 00 01 00 5e 00 00 01
+[   51.530654] brcmfmac: brcmf_fil_iovar_data_set: ifidx=0, name=allmulti, len=4
+[   51.539006] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 263 len 13 ifidx 0
+[   51.546131] brcmfmac: brcmf_hexdump: set dcmd    0: 61 6c 6c 6d 75 6c 74 69 00 00 00 00 00
+[   51.575221] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 10 len 4 ifidx 0
+[   51.576655] brcmfmac: brcmf_hexdump: set dcmd    0: 00 00 00 00
+[   51.586578] brcmfmac: brcmf_fil_iovar_data_set: ifidx=0, name=arp_ol, len=4
+[   51.595423] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 263 len 11 ifidx 0
+[   51.602549] brcmfmac: brcmf_hexdump: set dcmd    0: 61 72 70 5f 6f 6c 00 09 00 00 00
+[   51.614163] brcmfmac: brcmf_fil_iovar_data_set: ifidx=0, name=arpoe, len=4
+[   51.622977] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 263 len 10 ifidx 0
+[   51.630139] brcmfmac: brcmf_hexdump: set dcmd    0: 61 72 70 6f 65 00 01 00 00 00
+[   51.654469] brcmfmac: brcmf_fil_iovar_data_set: ifidx=0, name=ndoe, len=4
+[   51.655694] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 263 len 9 ifidx 0
+[   51.662776] brcmfmac: brcmf_hexdump: set dcmd    0: 6e 64 6f 65 00 01 00 00 00
+[   51.727293] brcmfmac: brcmf_fil_iovar_data_set: ifidx=0, name=pmkid_info, len=356
+[   51.733627] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 263 len 367 ifidx 0
+[   51.740811] brcmfmac: brcmf_hexdump: set dcmd    0: 70 6d 6b 69 64 5f 69 6e 66 6f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+[   51.754008] brcmfmac: brcmf_hexdump: set dcmd   20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+[   51.754024] brcmfmac: brcmf_hexdump: set dcmd   40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+[   51.754059] brcmfmac: brcmf_hexdump: set dcmd   60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+[   51.786241] brcmfmac: brcmf_hexdump: set dcmd   80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+[   51.786284] brcmfmac: brcmf_hexdump: set dcmd   a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+[   51.818252] brcmfmac: brcmf_hexdump: set dcmd   c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+[   51.850440] brcmfmac: brcmf_hexdump: set dcmd   e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+[   51.869333] brcmfmac: brcmf_hexdump: set dcmd  100: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+[   51.882506] brcmfmac: brcmf_hexdump: set dcmd  120: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+[   51.901644] brcmfmac: brcmf_hexdump: set dcmd  140: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+[   51.914848] brcmfmac: brcmf_hexdump: set dcmd  160: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+[   52.003940] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 3 len 4 ifidx 0
+[   52.005282] brcmfmac: brcmf_hexdump: set dcmd    0: 01 00 00 00
+[   52.030357] brcmfmac: brcmf_fil_iovar_data_set: ifidx=0, name=apsta, len=4
+[   52.031612] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 263 len 10 ifidx 0
+[   52.038821] brcmfmac: brcmf_hexdump: set dcmd    0: 61 70 73 74 61 00 01 00 00 00
+[   52.067050] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 2 len 4 ifidx 0
+[   52.068753] brcmfmac: brcmf_hexdump: set dcmd    0: 01 00 00 00
+[   52.122590] brcmfmac: brcmf_fil_iovar_data_set: ifidx=0, name=p2p_disc, len=4
+[   52.122894] brcmfmac: brcmf_add_if: Enter, bsscfgidx=0, ifidx=0
+[   52.129586] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 263 len 13 ifidx 0
+[   52.129677] brcmfmac: brcmf_hexdump: set dcmd    0: 70 32 70 5f 64 69 73 63 00 00 00 00 00
+[   52.154754] brcmfmac: brcmf_fil_iovar_data_set: ifidx=0, name=p2p_da_override, len=6
+[   52.164746] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 263 len 22 ifidx 0
+[   52.171579] brcmfmac: brcmf_hexdump: set dcmd    0: 70 32 70 5f 64 61 5f 6f 76 65 72 72 69 64 65 00 4e 62 64 f2 46 fc
+[   52.190014] brcmfmac: brcmf_fil_iovar_data_set: ifidx=0, name=p2p_disc, len=4
+[   52.195203] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 263 len 13 ifidx 0
+[   52.202398] brcmfmac: brcmf_hexdump: set dcmd    0: 70 32 70 5f 64 69 73 63 00 01 00 00 00
+[   52.226167] brcmfmac: brcmf_add_if: Enter, bsscfgidx=1, ifidx=0
+[   52.226448] brcmfmac: brcmf_add_if:  ==== pid:35, if:wl0 (4e:62:64:f2:46:fc) created ===
+[   52.273264] brcmfmac: brcmf_fil_iovar_data_set: ifidx=0, name=p2p_disc, len=4
+[   52.274813] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 263 len 13 ifidx 0
+[   52.281967] brcmfmac: brcmf_hexdump: set dcmd    0: 70 32 70 5f 64 69 73 63 00 01 00 00 00
+[   52.315213] brcmfmac: brcmf_fil_bsscfg_data_set: ifidx=0, bsscfgidx=1, name=p2p_state, len=6
+[   52.318176] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 263 len 27 ifidx 0
+[   52.325310] brcmfmac: brcmf_hexdump: set dcmd    0: 62 73 73 63 66 67 3a 70 32 70 5f 73 74 61 74 65 00 01 00 00 00 00 a0 00 00 00 00
+[   52.350058] brcmfmac: brcmf_fil_bsscfg_data_set: ifidx=0, bsscfgidx=1, name=wsec, len=4
+[   52.352416] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 263 len 20 ifidx 0
+[   52.359617] brcmfmac: brcmf_hexdump: set dcmd    0: 62 73 73 63 66 67 3a 77 73 65 63 00 01 00 00 00 04 00 00 00
+[   52.395946] brcmfmac: brcmf_fil_iovar_data_set: ifidx=0, name=escan, len=180
+[   52.400971] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 263 len 186 ifidx 0
+[   52.408265] brcmfmac: brcmf_hexdump: set dcmd    0: 65 73 63 61 6e 00 01 00 00 00 01 00 34 12 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+[   52.421338] brcmfmac: brcmf_hexdump: set dcmd   20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff ff ff ff ff 02 00 ff ff ff ff ff ff
+[   52.421364] brcmfmac: brcmf_hexdump: set dcmd   40: ff ff ff ff ff ff ff ff ff ff 24 00 01 00 01 10 02 10 03 10 04 10 05 10 06 10 07 10 08 10 09 10
+[   52.421443] brcmfmac: brcmf_hexdump: set dcmd   60: 0a 10 0b 10 24 d0 28 d0 2c d0 30 d0 34 d0 38 d0 3c d0 40 d0 64 d0 68 d0 6c d0 70 d0 74 d0 78 d0
+[   52.453618] brcmfmac: brcmf_hexdump: set dcmd   80: 7c d0 80 d0 84 d0 88 d0 8c d0 90 d0 95 d0 99 d0 9d d0 a1 d0 a5 d0 00 00 00 00 00 00 00 00 00 00
+[   52.453633] brcmfmac: brcmf_hexdump: set dcmd   a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+[   53.050833] brcmfmac: brcmf_sdiod_sglist_rw: CMD53 sg block read failed -84
+[   53.052185] brcmfmac: brcmf_sdio_rxglom: glom read of 1024 bytes failed: -5
+[   54.076479] brcmfmac: brcmf_sdio_isr: failed backplane access
+[   54.076775] brcmfmac: brcmf_sdio_rxfail: abort command, terminate frame
+[   54.083957] brcmfmac: brcmf_sdio_readframes: brcmf_sdio_readframes: glom superframe w/o descriptor!
+[   54.097611] brcmfmac: brcmf_sdio_rxfail: terminate frame
+[   55.257795] brcmfmac: brcmf_fil_iovar_data_set: ifidx=0, name=escan, len=180
+[   55.259204] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 263 len 186 ifidx 0
+[   55.266519] brcmfmac: brcmf_hexdump: set dcmd    0: 65 73 63 61 6e 00 01 00 00 00 01 00 34 12 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+[   55.285020] brcmfmac: brcmf_hexdump: set dcmd   20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff ff ff ff ff 02 00 ff ff ff ff ff ff
+[   55.298221] brcmfmac: brcmf_hexdump: set dcmd   40: ff ff ff ff ff ff ff ff ff ff 24 00 01 00 01 10 02 10 03 10 04 10 05 10 06 10 07 10 08 10 09 10
+[   55.318574] brcmfmac: brcmf_hexdump: set dcmd   60: 0a 10 0b 10 24 d0 28 d0 2c d0 30 d0 34 d0 38 d0 3c d0 40 d0 64 d0 68 d0 6c d0 70 d0 74 d0 78 d0
+[   55.331773] brcmfmac: brcmf_hexdump: set dcmd   80: 7c d0 80 d0 84 d0 88 d0 8c d0 90 d0 95 d0 99 d0 9d d0 a1 d0 a5 d0 00 00 00 00 00 00 00 00 00 00
+[   55.350649] brcmfmac: brcmf_hexdump: set dcmd   a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+[   55.627606] brcmfmac: brcmf_fil_iovar_data_set: ifidx=0, name=mcast_list, len=10
+[   55.632811] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 263 len 21 ifidx 0
+[   55.639999] brcmfmac: brcmf_hexdump: set dcmd    0: 6d 63 61 73 74 5f 6c 69 73 74 00 01 00 00 00 01 00 5e 00 00 01
+[   55.657784] brcmfmac: brcmf_fil_iovar_data_set: ifidx=0, name=allmulti, len=4
+[   55.664608] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 263 len 13 ifidx 0
+[   55.671791] brcmfmac: brcmf_hexdump: set dcmd    0: 61 6c 6c 6d 75 6c 74 69 00 00 00 00 00
+[   55.694066] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 10 len 4 ifidx 0
+[   55.695531] brcmfmac: brcmf_hexdump: set dcmd    0: 00 00 00 00
+[   55.713985] brcmfmac: brcmf_fil_iovar_data_set: ifidx=0, name=arp_ol, len=4
+[   55.715301] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 263 len 11 ifidx 0
+[   55.722510] brcmfmac: brcmf_hexdump: set dcmd    0: 61 72 70 5f 6f 6c 00 09 00 00 00
+[   55.734488] brcmfmac: brcmf_fil_iovar_data_set: ifidx=0, name=arpoe, len=4
+[   55.742398] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 263 len 10 ifidx 0
+[   55.749584] brcmfmac: brcmf_hexdump: set dcmd    0: 61 72 70 6f 65 00 01 00 00 00
+[   55.770188] brcmfmac: brcmf_fil_iovar_data_set: ifidx=0, name=ndoe, len=4
+[   55.771409] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 263 len 9 ifidx 0
+[   55.778718] brcmfmac: brcmf_hexdump: set dcmd    0: 6e 64 6f 65 00 01 00 00 00
+[   56.873440] brcmfmac: brcmf_sdio_readframes: RXHEADER FAILED: -110
+[   56.877391] brcmfmac: brcmf_sdio_rxfail: abort command, terminate frame, send NAK
+[   56.885342] brcmfmac: brcmf_sdio_hostmail: Enter
+[   57.913582] brcmfmac: brcmf_sdio_readframes: read 432 bytes from channel 1 failed: -110
+[   57.923217] brcmfmac: brcmf_sdio_rxfail: abort command, terminate frame, send NAK
+[   57.933914] brcmfmac: brcmf_sdio_hostmail: Enter
+[   57.943632] brcmfmac: brcmf_sdio_rxglom: descriptor len 4 bad: 0
+[   57.948340] brcmfmac: brcmf_sdio_readframes: brcmf_sdio_readframes: glom superframe w/o descriptor!
+[   57.957215] brcmfmac: brcmf_sdio_rxfail: terminate frame
+[   57.963157] brcmfmac: brcmf_sdio_rxglom: descriptor len 6 bad: 0
+[   57.975601] brcmfmac: brcmf_sdio_hdparse: HW header length too long
+[   57.981735] brcmfmac: brcmf_sdio_rxfail: terminate frame
+[   57.987440] brcmfmac: brcmf_sdio_rxglom: descriptor len 5 bad: 0
+[   57.992955] brcmfmac: brcmf_sdio_readframes: RXHEADER FAILED: -84
+[   57.998976] brcmfmac: brcmf_sdio_rxfail: abort command, terminate frame, send NAK
+[   58.014082] brcmfmac: brcmf_sdio_hostmail: Enter
+[   58.018190] brcmfmac: brcmf_sdio_hdparse: HW header length too long
+[   58.024381] brcmfmac: brcmf_sdio_rxfail: terminate frame
+[   58.030633] brcmfmac: brcmf_sdio_rxglom: descriptor len 6 bad: 0
+[   58.042763] brcmfmac: brcmf_sdio_readframes: RXHEADER FAILED: -84
+[   58.048800] brcmfmac: brcmf_sdio_rxfail: abort command, terminate frame, send NAK
+[   58.056717] brcmfmac: brcmf_sdio_hostmail: Enter
+[   58.068008] brcmfmac: brcmf_sdio_hdparse: HW header length too long
+[   58.074156] brcmfmac: brcmf_sdio_rxfail: terminate frame
+[   58.080188] brcmfmac: brcmf_sdio_rxglom: descriptor len 6 bad: 0
+[   58.085375] brcmfmac: brcmf_sdio_hdparse: HW header length too long
+[   58.098625] brcmfmac: brcmf_sdio_rxfail: terminate frame
+[   58.104596] brcmfmac: brcmf_sdio_hdparse: HW superframe header length error
+[   58.113454] brcmfmac: brcmf_sdio_rxfail: abort command, terminate frame
+[   58.124595] brcmfmac: brcmf_sdio_readframes: RXHEADER FAILED: -84
+[   58.130525] brcmfmac: brcmf_sdio_rxfail: abort command, terminate frame, send NAK
+[   58.138487] brcmfmac: brcmf_sdio_hostmail: Enter
+[   58.149957] brcmfmac: brcmf_sdio_readframes: brcmf_sdio_readframes: glom superframe w/o descriptor!
+[   58.158630] brcmfmac: brcmf_sdio_rxfail: terminate frame
+[   58.164488] brcmfmac: brcmf_sdio_rxglom: descriptor len 4 bad: 0
+[   58.169959] brcmfmac: brcmf_sdio_readframes: brcmf_sdio_readframes: glom superframe w/o descriptor!
+[   58.184511] brcmfmac: brcmf_sdio_rxfail: terminate frame
+[   58.189891] brcmfmac: brcmf_sdio_rxglom: descriptor len 3 bad: 0
+[   58.195927] brcmfmac: brcmf_sdio_readframes: brcmf_sdio_readframes: glom superframe w/o descriptor!
+[   58.204702] brcmfmac: brcmf_sdio_rxfail: terminate frame
+[   58.216196] brcmfmac: brcmf_sdio_rxglom: descriptor len 3 bad: 0
+[   58.221670] brcmfmac: brcmf_sdio_hdparse: HW superframe header length error
+[   58.228452] brcmfmac: brcmf_sdio_rxfail: abort command, terminate frame
+[   58.235089] brcmfmac: brcmf_sdio_readframes: RXHEADER FAILED: -84
+[   58.246334] brcmfmac: brcmf_sdio_rxfail: abort command, terminate frame, send NAK
+[   58.254424] brcmfmac: brcmf_sdio_hostmail: Enter
+[   58.258448] brcmfmac: brcmf_sdio_hdparse: HW header length too long
+[   58.264534] brcmfmac: brcmf_sdio_rxfail: terminate frame
+[   58.277139] brcmfmac: brcmf_sdio_hdparse: HW superframe header length error
+[   58.283879] brcmfmac: brcmf_sdio_rxfail: abort command, terminate frame
+[   58.290552] brcmfmac: brcmf_sdio_readframes: RXHEADER FAILED: -84
+[   58.303599] brcmfmac: brcmf_sdio_rxfail: abort command, terminate frame, send NAK
+[   58.311697] brcmfmac: brcmf_sdio_hostmail: Enter
+[   58.315799] brcmfmac: brcmf_sdio_readframes: brcmf_sdio_readframes: glom superframe w/o descriptor!
+[   58.324564] brcmfmac: brcmf_sdio_rxfail: terminate frame
+[   58.356050] brcmfmac: brcmf_cfg80211_connect: Enter
+[   58.356082] brcmfmac: brcmf_cfg80211_connect: ssid fx-netgear-2g
+[   58.361899] brcmfmac: brcmf_fil_iovar_data_set: ifidx=0, name=wpaie, len=0
+[   58.368688] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 263 len 6 ifidx 0
+[   58.375756] brcmfmac: brcmf_hexdump: set dcmd    0: 77 70 61 69 65 00
+[   58.393579] brcmfmac: brcmf_cfg80211_connect: Channel was 0
+[   58.394853] brcmfmac: brcmf_cfg80211_connect: ie (000000003feee4af), ie_len (6)
+[   58.402121] brcmfmac: brcmf_fil_bsscfg_data_set: ifidx=0, bsscfgidx=0, name=wpa_auth, len=4
+[   58.417551] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 263 len 13 ifidx 0
+[   58.424730] brcmfmac: brcmf_hexdump: set dcmd    0: 77 70 61 5f 61 75 74 68 00 00 00 00 00
+[   58.445589] brcmfmac: brcmf_fil_bsscfg_data_set: ifidx=0, bsscfgidx=0, name=auth, len=4
+[   58.448070] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 263 len 9 ifidx 0
+[   58.455173] brcmfmac: brcmf_hexdump: set dcmd    0: 61 75 74 68 00 00 00 00 00
+[   58.465582] brcmfmac: brcmf_fil_bsscfg_data_set: ifidx=0, bsscfgidx=0, name=wsec, len=4
+[   58.477549] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 263 len 9 ifidx 0
+[   58.484602] brcmfmac: brcmf_hexdump: set dcmd    0: 77 73 65 63 00 00 00 00 00
+[   58.501638] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 205 len 4 ifidx 0
+[   58.505881] brcmfmac: brcmf_hexdump: set dcmd    0: 00 00 00 00
+[   58.521674] brcmfmac: brcmf_fil_iovar_data_set: ifidx=0, name=join_pref, len=8
+[   58.526200] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 263 len 18 ifidx 0
+[   58.533350] brcmfmac: brcmf_hexdump: set dcmd    0: 6a 6f 69 6e 5f 70 72 65 66 00 04 02 08 01 01 02 00 00
+[   58.545615] brcmfmac: brcmf_fil_bsscfg_data_set: ifidx=0, bsscfgidx=0, name=join, len=68
+[   58.558093] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 263 len 73 ifidx 0
+[   58.565282] brcmfmac: brcmf_hexdump: set dcmd    0: 6a 6f 69 6e 00 0d 00 00 00 66 78 2d 6e 65 74 67 65 61 72 2d 32 67 00 00 00 00 00 00 00 00 00 00
+[   58.578447] brcmfmac: brcmf_hexdump: set dcmd   20: 00 00 00 00 00 00 00 00 00 ff 00 00 00 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
+[   58.598792] brcmfmac: brcmf_hexdump: set dcmd   40: ff ff ff 00 00 00 00 00 00
+[   61.438109] brcmfmac: brcmf_fil_cmd_data_set: ifidx=0, cmd=121, len=6
+[   61.438948] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 121 len 6 ifidx 0
+[   61.446273] brcmfmac: brcmf_hexdump: set dcmd    0: cc 40 d0 34 aa 78
+[   61.461181] brcmfmac: brcmf_fil_iovar_data_set: ifidx=0, name=mcast_list, len=16
+[   61.467051] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 263 len 27 ifidx 0
+[   61.474207] brcmfmac: brcmf_hexdump: set dcmd    0: 6d 63 61 73 74 5f 6c 69 73 74 00 02 00 00 00 01 00 5e 00 00 01 33 33 00 00 00 01
+[   61.502086] brcmfmac: brcmf_fil_iovar_data_set: ifidx=0, name=allmulti, len=4
+[   61.503585] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 263 len 13 ifidx 0
+[   61.510857] brcmfmac: brcmf_hexdump: set dcmd    0: 61 6c 6c 6d 75 6c 74 69 00 00 00 00 00
+[   61.542048] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 10 len 4 ifidx 0
+[   61.545864] brcmfmac: brcmf_hexdump: set dcmd    0: 00 00 00 00
+[   61.566093] brcmfmac: brcmf_fil_iovar_data_set: ifidx=0, name=nd_hostip_clear, len=0
+[   61.570517] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 263 len 16 ifidx 0
+[   61.577696] brcmfmac: brcmf_hexdump: set dcmd    0: 6e 64 5f 68 6f 73 74 69 70 5f 63 6c 65 61 72 00
+[   61.601993] brcmfmac: brcmf_fil_iovar_data_set: ifidx=0, name=arp_ol, len=4
+[   61.603317] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 263 len 11 ifidx 0
+[   61.610951] brcmfmac: brcmf_hexdump: set dcmd    0: 61 72 70 5f 6f 6c 00 09 00 00 00
+[   61.621978] brcmfmac: brcmf_fil_iovar_data_set: ifidx=0, name=arpoe, len=4
+[   61.632270] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 263 len 10 ifidx 0
+[   61.639399] brcmfmac: brcmf_hexdump: set dcmd    0: 61 72 70 6f 65 00 01 00 00 00
+[   61.661992] brcmfmac: brcmf_fil_iovar_data_set: ifidx=0, name=ndoe, len=4
+[   61.663147] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 263 len 9 ifidx 0
+[   61.670276] brcmfmac: brcmf_hexdump: set dcmd    0: 6e 64 6f 65 00 01 00 00 00
+[   61.681851] brcmfmac: brcmf_fil_iovar_data_set: ifidx=0, name=mcast_list, len=22
+[   61.691805] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 263 len 33 ifidx 0
+[   61.698893] brcmfmac: brcmf_hexdump: set dcmd    0: 6d 63 61 73 74 5f 6c 69 73 74 00 03 00 00 00 01 00 5e 00 00 01 33 33 00 00 00 01 33 33 ff be 03
+[   61.712113] brcmfmac: brcmf_hexdump: set dcmd   20: 45
+[   61.742775] brcmfmac: brcmf_fil_iovar_data_set: ifidx=0, name=allmulti, len=4
+[   61.744380] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 263 len 13 ifidx 0
+[   61.751904] brcmfmac: brcmf_hexdump: set dcmd    0: 61 6c 6c 6d 75 6c 74 69 00 00 00 00 00
+[   61.762511] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 10 len 4 ifidx 0
+[   61.772677] brcmfmac: brcmf_hexdump: set dcmd    0: 00 00 00 00
+[   61.782182] brcmfmac: brcmf_fil_iovar_data_set: ifidx=0, name=arp_ol, len=4
+[   61.785624] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 263 len 11 ifidx 0
+[   61.799866] brcmfmac: brcmf_hexdump: set dcmd    0: 61 72 70 5f 6f 6c 00 09 00 00 00
+[   61.822081] brcmfmac: brcmf_fil_iovar_data_set: ifidx=0, name=arpoe, len=4
+[   61.823347] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 263 len 10 ifidx 0
+[   61.830570] brcmfmac: brcmf_hexdump: set dcmd    0: 61 72 70 6f 65 00 01 00 00 00
+[   61.841891] brcmfmac: brcmf_fil_iovar_data_set: ifidx=0, name=ndoe, len=4
+[   61.851976] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 263 len 9 ifidx 0
+[   61.858982] brcmfmac: brcmf_hexdump: set dcmd    0: 6e 64 6f 65 00 01 00 00 00
+[   63.141305] brcmfmac: brcmf_fil_iovar_data_set: ifidx=0, name=mcast_list, len=28
+[   63.143091] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 263 len 39 ifidx 0
+[   63.150285] brcmfmac: brcmf_hexdump: set dcmd    0: 6d 63 61 73 74 5f 6c 69 73 74 00 04 00 00 00 01 00 5e 00 00 01 33 33 00 00 00 01 33 33 ff be 03
+[   63.168712] brcmfmac: brcmf_hexdump: set dcmd   20: 45 33 33 00 00 00 fb
+[   63.182138] brcmfmac: brcmf_fil_iovar_data_set: ifidx=0, name=allmulti, len=4
+[   63.187851] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 263 len 13 ifidx 0
+[   63.195019] brcmfmac: brcmf_hexdump: set dcmd    0: 61 6c 6c 6d 75 6c 74 69 00 00 00 00 00
+[   63.218752] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 10 len 4 ifidx 0
+[   63.220260] brcmfmac: brcmf_hexdump: set dcmd    0: 00 00 00 00
+[   63.237364] brcmfmac: brcmf_fil_iovar_data_set: ifidx=0, name=arp_ol, len=4
+[   63.238684] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 263 len 11 ifidx 0
+[   63.245958] brcmfmac: brcmf_hexdump: set dcmd    0: 61 72 70 5f 6f 6c 00 09 00 00 00
+[   63.257379] brcmfmac: brcmf_fil_iovar_data_set: ifidx=0, name=arpoe, len=4
+[   63.266563] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 263 len 10 ifidx 0
+[   63.273731] brcmfmac: brcmf_hexdump: set dcmd    0: 61 72 70 6f 65 00 01 00 00 00
+[   63.297453] brcmfmac: brcmf_sdio_intr_rstatus: core->base 0x18005000, SD_REG(int) 0x20
+[   63.299744] brcmfmac: brcmf_sdio_intr_rstatus: times 256, val c00040, intmask 200000f0
+[   63.308239] brcmfmac: brcmf_fil_iovar_data_set: ifidx=0, name=ndoe, len=4
+[   63.319687] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 263 len 9 ifidx 0
+[   63.326781] brcmfmac: brcmf_hexdump: set dcmd    0: 6e 64 6f 65 00 01 00 00 00
+[   63.445754] brcmfmac: brcmf_fil_iovar_data_set: ifidx=0, name=arp_hostip, len=4
+[   63.447425] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 263 len 15 ifidx 0
+[   63.454662] brcmfmac: brcmf_hexdump: set dcmd    0: 61 72 70 5f 68 6f 73 74 69 70 00 0a 00 00 0a
+[   63.472289] brcmfmac: brcmf_fil_iovar_data_set: ifidx=0, name=mcast_list, len=34
+[   63.476473] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 263 len 45 ifidx 0
+[   63.483610] brcmfmac: brcmf_hexdump: set dcmd    0: 6d 63 61 73 74 5f 6c 69 73 74 00 05 00 00 00 01 00 5e 00 00 01 33 33 00 00 00 01 33 33 ff be 03
+[   63.496721] brcmfmac: brcmf_hexdump: set dcmd   20: 45 33 33 00 00 00 fb 01 00 5e 00 00 fb
+[   63.530607] brcmfmac: brcmf_fil_iovar_data_set: ifidx=0, name=allmulti, len=4
+[   63.532192] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 263 len 13 ifidx 0
+[   63.539687] brcmfmac: brcmf_hexdump: set dcmd    0: 61 6c 6c 6d 75 6c 74 69 00 00 00 00 00
+[   63.561540] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 10 len 4 ifidx 0
+[   63.562973] brcmfmac: brcmf_hexdump: set dcmd    0: 00 00 00 00
+[   63.573390] brcmfmac: brcmf_fil_iovar_data_set: ifidx=0, name=arp_ol, len=4
+[   63.581359] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 263 len 11 ifidx 0
+[   63.588519] brcmfmac: brcmf_hexdump: set dcmd    0: 61 72 70 5f 6f 6c 00 09 00 00 00
+[   63.609614] brcmfmac: brcmf_fil_iovar_data_set: ifidx=0, name=arpoe, len=4
+[   63.610926] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 263 len 10 ifidx 0
+[   63.618353] brcmfmac: brcmf_hexdump: set dcmd    0: 61 72 70 6f 65 00 01 00 00 00
+[   63.637886] brcmfmac: brcmf_fil_iovar_data_set: ifidx=0, name=ndoe, len=4
+[   63.639046] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 263 len 9 ifidx 0
+[   63.646203] brcmfmac: brcmf_hexdump: set dcmd    0: 6e 64 6f 65 00 01 00 00 00
+[   79.018195] brcmfmac: brcmf_fil_iovar_data_set: ifidx=0, name=escan, len=180
+[   79.019639] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 263 len 186 ifidx 0
+[   79.027185] brcmfmac: brcmf_hexdump: set dcmd    0: 65 73 63 61 6e 00 01 00 00 00 01 00 34 12 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+[   79.040131] brcmfmac: brcmf_hexdump: set dcmd   20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff ff ff ff ff 02 00 ff ff ff ff ff ff
+[   79.053308] brcmfmac: brcmf_hexdump: set dcmd   40: ff ff ff ff ff ff ff ff ff ff 24 00 01 00 01 10 02 10 03 10 04 10 05 10 06 10 07 10 08 10 09 10
+[   79.066479] brcmfmac: brcmf_hexdump: set dcmd   60: 0a 10 0b 10 24 d0 28 d0 2c d0 30 d0 34 d0 38 d0 3c d0 40 d0 64 d0 68 d0 6c d0 70 d0 74 d0 78 d0
+[   79.079695] brcmfmac: brcmf_hexdump: set dcmd   80: 7c d0 80 d0 84 d0 88 d0 8c d0 90 d0 95 d0 99 d0 9d d0 a1 d0 a5 d0 00 00 00 00 00 00 00 00 00 00
+[   79.092885] brcmfmac: brcmf_hexdump: set dcmd   a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+[   79.841830] brcmfmac: brcmf_sdiod_sglist_rw: CMD53 sg block read failed -84
+[   79.843254] brcmfmac: brcmf_sdio_rxglom: glom read of 1024 bytes failed: -5
+[   79.850138] brcmfmac: brcmf_sdio_rxfail: abort command, terminate frame
+[   79.857221] brcmfmac: brcmf_sdio_hdparse: Wrong channel for subframe
+[   79.863040] brcmfmac: brcmf_sdio_rxfail: abort command, terminate frame
+[   82.857197] brcmfmac: brcmf_sdiod_sglist_rw: CMD53 sg block read failed -84
+[   82.858546] brcmfmac: brcmf_sdio_rxglom: glom read of 2560 bytes failed: -5
+[   83.887567] brcmfmac: brcmf_sdio_isr: failed backplane access
+[   83.887926] brcmfmac: brcmf_sdio_rxfail: abort command, terminate frame
+[   83.895294] brcmfmac: brcmf_sdio_hdparse: HW header length too long
+[   83.900570] brcmfmac: brcmf_sdio_rxfail: terminate frame
+[   83.906597] brcmfmac: brcmf_sdio_rxglom: descriptor len 4 bad: 0
+[   83.911971] brcmfmac: brcmf_sdio_readframes: brcmf_sdio_readframes: glom superframe w/o descriptor!
+[   83.920710] brcmfmac: brcmf_sdio_rxfail: terminate frame
+[  122.040684] brcmfmac: brcmf_fil_iovar_data_set: ifidx=0, name=escan, len=180
+[  122.042313] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 263 len 186 ifidx 0
+[  122.049429] brcmfmac: brcmf_hexdump: set dcmd    0: 65 73 63 61 6e 00 01 00 00 00 01 00 34 12 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+[  122.062573] brcmfmac: brcmf_hexdump: set dcmd   20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff ff ff ff ff 02 00 ff ff ff ff ff ff
+[  122.075767] brcmfmac: brcmf_hexdump: set dcmd   40: ff ff ff ff ff ff ff ff ff ff 24 00 01 00 01 10 02 10 03 10 04 10 05 10 06 10 07 10 08 10 09 10
+[  122.088997] brcmfmac: brcmf_hexdump: set dcmd   60: 0a 10 0b 10 24 d0 28 d0 2c d0 30 d0 34 d0 38 d0 3c d0 40 d0 64 d0 68 d0 6c d0 70 d0 74 d0 78 d0
+[  122.102178] brcmfmac: brcmf_hexdump: set dcmd   80: 7c d0 80 d0 84 d0 88 d0 8c d0 90 d0 95 d0 99 d0 9d d0 a1 d0 a5 d0 00 00 00 00 00 00 00 00 00 00
+[  122.115380] brcmfmac: brcmf_hexdump: set dcmd   a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+[  122.750537] brcmfmac: brcmf_sdio_readframes: RXHEADER FAILED: -84
+[  122.751085] brcmfmac: brcmf_sdio_rxfail: abort command, terminate frame, send NAK
+[  122.760338] brcmfmac: brcmf_sdio_hostmail: Enter
+[  185.019997] brcmfmac: brcmf_fil_iovar_data_set: ifidx=0, name=escan, len=180
+[  185.021421] brcmfmac: brcmf_proto_bcdc_set_dcmd: Enter, cmd 263 len 186 ifidx 0
+[  185.028944] brcmfmac: brcmf_hexdump: set dcmd    0: 65 73 63 61 6e 00 01 00 00 00 01 00 34 12 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+[  185.042012] brcmfmac: brcmf_hexdump: set dcmd   20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff ff ff ff ff 02 00 ff ff ff ff ff ff
+[  185.055080] brcmfmac: brcmf_hexdump: set dcmd   40: ff ff ff ff ff ff ff ff ff ff 24 00 01 00 01 10 02 10 03 10 04 10 05 10 06 10 07 10 08 10 09 10
+[  185.068280] brcmfmac: brcmf_hexdump: set dcmd   60: 0a 10 0b 10 24 d0 28 d0 2c d0 30 d0 34 d0 38 d0 3c d0 40 d0 64 d0 68 d0 6c d0 70 d0 74 d0 78 d0
+[  185.081514] brcmfmac: brcmf_hexdump: set dcmd   80: 7c d0 80 d0 84 d0 88 d0 8c d0 90 d0 95 d0 99 d0 9d d0 a1 d0 a5 d0 00 00 00 00 00 00 00 00 00 00
+[  185.094685] brcmfmac: brcmf_hexdump: set dcmd   a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+[  185.847073] brcmfmac: brcmf_sdio_intr_rstatus: core->base 0x18005000, SD_REG(int) 0x20
+[  185.849438] brcmfmac: brcmf_sdio_intr_rstatus: times 512, val c00040, intmask 200000f0
diff --git a/drivers/wlan/third_party/broadcom/brcmfmac/linux.psr b/drivers/wlan/third_party/broadcom/brcmfmac/linux.psr
new file mode 100644
index 0000000..ff61e73
--- /dev/null
+++ b/drivers/wlan/third_party/broadcom/brcmfmac/linux.psr
@@ -0,0 +1,630 @@
+[   50.879615] brcmfmac: psr: Dumping 1026 sdio records
+[   50.884546] brcmfmac: psr: sdio 0 53: F1w1 1000a 0 (0)
+[   50.906164] brcmfmac: psr: sdio 1 53: F1w1 1000b 0 (0)
+[   50.925980] brcmfmac: psr: sdio 2 53: F1w1 1000c 18 (c18)
+[   50.946535] brcmfmac: psr: sdio 3 53: F1r4 8000 17224356 (c72f)
+[   50.969990] brcmfmac: psr: sdio 4 53: F1w1 1000e 28 (1428)
+[   50.990036] brcmfmac: psr: sdio 5 53: F1r1 1000e e8 (74e8)
+[   51.010003] brcmfmac: psr: sdio 6 53: F1w1 1000e 28 (1428)
+[   51.029968] brcmfmac: psr: sdio 7 53: F1r1 1000e e8 (74e8)
+[   51.050000] brcmfmac: psr: sdio 8 53: F1r1 1000e e8 (74e8)
+[   51.069963] brcmfmac: psr: sdio 9 53: F1w1 1000e 21 (10a1)
+[   51.093971] brcmfmac: psr: sdio 10 53: F1w1 1000f 0 (0)
+[   51.121941] brcmfmac: psr: sdio 11 53: F1r4 8000 17224356 (c72f)
+[   51.141999] brcmfmac: psr: sdio 12 53: F1r4 80fc 1810d000 (fd78)
+[   51.169972] brcmfmac: psr: sdio 13 53: F1w1 1000a 80 (4080)
+[   51.197974] brcmfmac: psr: sdio 14 53: F1w1 1000b 10 (810)
+[   51.225951] brcmfmac: psr: sdio 15 53: F1w1 1000c 18 (c18)
+[   51.245945] brcmfmac: psr: sdio 16 53: F1r4 d000 4bf80001 (8fb3)
+[   51.269940] brcmfmac: psr: sdio 17 53: F1r4 d004 2f084411 (3a7)
+[   51.293924] brcmfmac: psr: sdio 18 53: F1r4 d008 3 (5598)
+[   51.313951] brcmfmac: psr: sdio 19 53: F1r4 d00c 18000005 (f2b0)
+[   51.337933] brcmfmac: psr: sdio 20 53: F1r4 d010 1c000135 (af30)
+[   51.365930] brcmfmac: psr: sdio 21 53: F1r4 d014 1000000 (81)
+[   51.398152] brcmfmac: psr: sdio 22 53: F1r4 d018 181000c5 (8690)
+[   51.417973] brcmfmac: psr: sdio 23 53: F1r4 d01c 18107185 (8354)
+[   51.442251] brcmfmac: psr: sdio 24 53: F1r4 d020 4bf81201 (e3fb)
+[   51.465922] brcmfmac: psr: sdio 25 53: F1r4 d024 30004211 (9130)
+[   51.489947] brcmfmac: psr: sdio 26 53: F1r4 d028 103 (539c)
+[   51.517984] brcmfmac: psr: sdio 27 53: F1r4 d02c 18001005 (92f0)
+[   51.549911] brcmfmac: psr: sdio 28 53: F1r4 d030 181010c5 (e6d0)
+[   51.577978] brcmfmac: psr: sdio 29 53: F1r4 d034 4bf83e01 (b4b)
+[   51.613901] brcmfmac: psr: sdio 30 53: F1r4 d038 6084411 (170e)
+[   51.633913] brcmfmac: psr: sdio 31 53: F1r4 d03c 203 (5990)
+[   51.661931] brcmfmac: psr: sdio 32 53: F1r4 d040 18002005 (3230)
+[   51.685899] brcmfmac: psr: sdio 33 53: F1r4 d044 18006015 (7bb0)
+[   51.705933] brcmfmac: psr: sdio 34 53: F1r4 d048 135 (a12c)
+[   51.725987] brcmfmac: psr: sdio 35 53: F1r4 d04c a0000 (ab54)
+[   51.746000] brcmfmac: psr: sdio 36 53: F1r4 d050 180135 (3a1c)
+[   51.778089] brcmfmac: psr: sdio 37 53: F1r4 d054 80000 (8910)
+[   51.817882] brcmfmac: psr: sdio 38 53: F1r4 d058 200135 (856c)
+[   51.849969] brcmfmac: psr: sdio 39 53: F1r4 d05c 40000 (4488)
+[   51.874107] brcmfmac: psr: sdio 40 53: F1r4 d060 181020c5 (4610)
+[   51.905885] brcmfmac: psr: sdio 41 53: F1r4 d064 18108185 (a094)
+[   51.937882] brcmfmac: psr: sdio 42 53: F1r4 d068 4bf83c01 (743)
+[   51.957982] brcmfmac: psr: sdio 43 53: F1r4 d06c b084411 (1183)
+[   51.977965] brcmfmac: psr: sdio 44 53: F1r4 d070 303 (5f94)
+[   51.997960] brcmfmac: psr: sdio 45 53: F1r4 d074 18003005 (5270)
+[   52.017879] brcmfmac: psr: sdio 46 53: F1r4 d078 8000135 (a524)
+[   52.038111] brcmfmac: psr: sdio 47 53: F1r4 d07c 8000000 (408)
+[   52.061870] brcmfmac: psr: sdio 48 53: F1r4 d080 13d (c56c)
+[   52.081949] brcmfmac: psr: sdio 49 53: F1r4 d084 80000000 (4080)
+[   52.102068] brcmfmac: psr: sdio 50 53: F1r4 d088 8 (6440)
+[   52.121969] brcmfmac: psr: sdio 51 53: F1r4 d08c 80000000 (4080)
+[   52.141949] brcmfmac: psr: sdio 52 53: F1r4 d090 181030c5 (2650)
+[   52.174064] brcmfmac: psr: sdio 53 53: F1r4 d094 18109185 (c0d4)
+[   52.205877] brcmfmac: psr: sdio 54 53: F1r4 d098 4bf81a01 (d3db)
+[   52.234825] brcmfmac: psr: sdio 55 53: F1r4 d09c 16004211 (8216)
+[   52.257914] brcmfmac: psr: sdio 56 53: F1r4 d0a0 403 (4d88)
+[   52.277867] brcmfmac: psr: sdio 57 53: F1r4 d0a4 18004005 (73b0)
+[   52.305865] brcmfmac: psr: sdio 58 53: F1r4 d0a8 181040c5 (790)
+[   52.325937] brcmfmac: psr: sdio 59 53: F1r4 d0ac 4bf82901 (7917)
+[   52.362085] brcmfmac: psr: sdio 60 53: F1r4 d0b0 15004211 (8395)
+[   52.393885] brcmfmac: psr: sdio 61 53: F1r4 d0b4 503 (4b8c)
+[   52.414097] brcmfmac: psr: sdio 62 53: F1r4 d0b8 18005005 (13f0)
+[   52.446085] brcmfmac: psr: sdio 63 53: F1r4 d0bc 181050c5 (67d0)
+[   52.513935] brcmfmac: psr: sdio 64 53: F1r4 d0c0 4bf83d01 (147)
+[   52.533925] brcmfmac: psr: sdio 65 53: F1r4 d0c4 2004211 (8802)
+[   52.553920] brcmfmac: psr: sdio 66 53: F1r4 d0c8 903 (63bc)
+[   52.573937] brcmfmac: psr: sdio 67 53: F1r4 d0cc 18006005 (b330)
+[   52.594099] brcmfmac: psr: sdio 68 53: F1r4 d0d0 181060c5 (c710)
+[   52.613930] brcmfmac: psr: sdio 69 53: F1r4 d0d4 43b13501 (e5dd)
+[   52.634106] brcmfmac: psr: sdio 70 53: F1r4 d0d8 80201 (4990)
+[   52.654051] brcmfmac: psr: sdio 71 53: F1r4 d0dc 18000045 (d0b0)
+[   52.673939] brcmfmac: psr: sdio 72 53: F1r4 d0dc 18000045 (d0b0)
+[   52.694090] brcmfmac: psr: sdio 73 53: F1r4 d0e0 18001045 (b0f0)
+[   52.713935] brcmfmac: psr: sdio 74 53: F1r4 d0e4 18002045 (1030)
+[   52.733938] brcmfmac: psr: sdio 75 53: F1r4 d0e8 18003045 (7070)
+[   52.754066] brcmfmac: psr: sdio 76 53: F1r4 d0ec 18004045 (51b0)
+[   52.773909] brcmfmac: psr: sdio 77 53: F1r4 d0f0 18005045 (31f0)
+[   52.793909] brcmfmac: psr: sdio 78 53: F1r4 d0f4 18006045 (9130)
+[   52.813958] brcmfmac: psr: sdio 79 53: F1r4 d0f8 18007045 (f170)
+[   52.834090] brcmfmac: psr: sdio 80 53: F1r4 d0fc 18008055 (1a30)
+[   52.854096] brcmfmac: psr: sdio 81 53: F1r4 d100 1810a085 (6610)
+[   52.873911] brcmfmac: psr: sdio 82 53: F1r4 d104 43b24001 (e96f)
+[   52.893892] brcmfmac: psr: sdio 83 53: F1r4 d104 43b24001 (e96f)
+[   52.913911] brcmfmac: psr: sdio 84 53: F1r4 d108 80211 (8110)
+[   52.933910] brcmfmac: psr: sdio 85 53: F1r4 d10c 603 (4180)
+[   52.954077] brcmfmac: psr: sdio 86 53: F1r4 d110 19000075 (89b1)
+[   52.973898] brcmfmac: psr: sdio 87 53: F1r4 d114 1000000 (81)
+[   52.994043] brcmfmac: psr: sdio 88 53: F1r4 d118 1810b085 (650)
+[   53.014056] brcmfmac: psr: sdio 89 53: F1r4 d11c 43b36701 (2ad1)
+[   53.033926] brcmfmac: psr: sdio 90 53: F1r4 d11c 43b36701 (2ad1)
+[   53.053833] brcmfmac: psr: sdio 91 53: F1r4 d120 201 (c080)
+[   53.081787] brcmfmac: psr: sdio 92 53: F1r4 d124 1810c005 (6390)
+[   53.102057] brcmfmac: psr: sdio 93 53: F1r4 d128 43b36601 (2cd5)
+[   53.121876] brcmfmac: psr: sdio 94 53: F1r4 d12c 201 (c080)
+[   53.142047] brcmfmac: psr: sdio 95 53: F1r4 d130 1810d005 (3d0)
+[   53.161871] brcmfmac: psr: sdio 96 53: F1r4 d134 43b30101 (7f49)
+[   53.181889] brcmfmac: psr: sdio 97 53: F1r4 d138 201 (c080)
+[   53.202035] brcmfmac: psr: sdio 98 53: F1r4 d13c 18200035 (8f70)
+[   53.222024] brcmfmac: psr: sdio 99 53: F1r4 d140 100000 (1220)
+[   53.242020] brcmfmac: psr: sdio 100 53: F1r4 d144 43bfff01 (b529)
+[   53.261876] brcmfmac: psr: sdio 101 53: F1r4 d148 80201 (4990)
+[   53.281880] brcmfmac: psr: sdio 102 53: F1r4 d14c a0035 (c7c)
+[   53.302029] brcmfmac: psr: sdio 103 53: F1r4 d14c a0035 (c7c)
+[   53.322020] brcmfmac: psr: sdio 104 53: F1r4 d150 e0000 (efdc)
+[   53.342008] brcmfmac: psr: sdio 105 53: F1r4 d154 240035 (c7e0)
+[   53.361866] brcmfmac: psr: sdio 106 53: F1r4 d158 7dc0000 (5bf)
+[   53.382032] brcmfmac: psr: sdio 107 53: F1r4 d15c 10000035 (af38)
+[   53.401861] brcmfmac: psr: sdio 108 53: F1r4 d160 8000000 (408)
+[   53.421992] brcmfmac: psr: sdio 109 53: F1r4 d164 18008035 (a930)
+[   53.442006] brcmfmac: psr: sdio 110 53: F1r4 d168 f8000 (fcfe)
+[   53.461848] brcmfmac: psr: sdio 111 53: F1r4 d16c 1810e035 (fa90)
+[   53.481849] brcmfmac: psr: sdio 112 53: F1r4 d170 f2000 (3e7e)
+[   53.501988] brcmfmac: psr: sdio 113 53: F1r4 d174 18300035 (9d50)
+[   53.521863] brcmfmac: psr: sdio 114 53: F1r4 d178 d00000 (cba0)
+[   53.542035] brcmfmac: psr: sdio 115 53: F1r4 d17c 1a000035 (aa32)
+[   53.561974] brcmfmac: psr: sdio 116 53: F1r4 d180 2000000 (102)
+[   53.581854] brcmfmac: psr: sdio 117 53: F1r4 d184 1d000035 (a9b5)
+[   53.602002] brcmfmac: psr: sdio 118 53: F1r4 d188 e3000008 (1523)
+[   53.621848] brcmfmac: psr: sdio 119 53: F1r4 d18c 7fffffff (1365)
+[   53.642000] brcmfmac: psr: sdio 120 53: F1r4 d190 1810e085 (e710)
+[   53.661987] brcmfmac: psr: sdio 121 53: F1r4 d194 f (3f8)
+[   53.681984] brcmfmac: psr: sdio 122 53: F1r4 d194 f (3f8)
+[   53.701985] brcmfmac: psr: sdio 123 53: F1w1 1000a 0 (0)
+[   53.721982] brcmfmac: psr: sdio 124 53: F1w1 1000b 10 (810)
+[   53.741972] brcmfmac: psr: sdio 125 53: F1w1 1000c 18 (c18)
+[   53.761816] brcmfmac: psr: sdio 126 53: F1r4 a408 21 (5d88)
+[   53.782003] brcmfmac: psr: sdio 127 53: F1r4 a800 0 (0)
+[   53.801959] brcmfmac: psr: sdio 128 53: F1w4 a408 23 (c498)
+[   53.821955] brcmfmac: psr: sdio 129 53: F1r4 a408 23 (c498)
+[   53.841970] brcmfmac: psr: sdio 130 53: F1w4 a800 1 (cc88)
+[   53.861941] brcmfmac: psr: sdio 131 53: F1r4 a800 1 (cc88)
+[   53.881966] brcmfmac: psr: sdio 132 53: F1w4 a408 23 (c498)
+[   53.901946] brcmfmac: psr: sdio 133 53: F1r4 a408 23 (c498)
+[   53.921959] brcmfmac: psr: sdio 134 53: F1r4 a800 1 (cc88)
+[   53.941969] brcmfmac: psr: sdio 135 53: F1w4 a800 0 (0)
+[   53.961939] brcmfmac: psr: sdio 136 53: F1r4 a800 0 (0)
+[   53.981958] brcmfmac: psr: sdio 137 53: F1w4 a408 21 (5d88)
+[   54.002015] brcmfmac: psr: sdio 138 53: F1r4 a408 21 (5d88)
+[   54.021840] brcmfmac: psr: sdio 139 53: F1r4 9800 1 (cc88)
+[   54.041998] brcmfmac: psr: sdio 140 53: F1w4 9408 7 (67b8)
+[   54.061988] brcmfmac: psr: sdio 141 53: F1r4 9408 7 (67b8)
+[   54.081779] brcmfmac: psr: sdio 142 53: F1r4 9800 1 (cc88)
+[   54.105793] brcmfmac: psr: sdio 143 53: F1w4 9800 0 (0)
+[   54.125832] brcmfmac: psr: sdio 144 53: F1r4 9800 0 (0)
+[   54.145968] brcmfmac: psr: sdio 145 53: F1w4 9408 5 (fea8)
+[   54.165960] brcmfmac: psr: sdio 146 53: F1r4 9408 5 (fea8)
+[   54.185806] brcmfmac: psr: sdio 147 53: F1w1 1000a 0 (0)
+[   54.205791] brcmfmac: psr: sdio 148 53: F1w1 1000b 0 (0)
+[   54.225731] brcmfmac: psr: sdio 149 53: F1w1 1000c 18 (c18)
+[   54.245977] brcmfmac: psr: sdio 150 53: F1r4 a004 524 (bd34)
+[   54.265796] brcmfmac: psr: sdio 151 53: F1w4 a040 0 (0)
+[   54.285808] brcmfmac: psr: sdio 152 53: F1r4 a044 108c0f (3be8)
+[   54.305970] brcmfmac: psr: sdio 153 53: F1w4 a040 1 (cc88)
+[   54.325804] brcmfmac: psr: sdio 154 53: F1r4 a044 108c0f (3be8)
+[   54.345969] brcmfmac: psr: sdio 155 53: F1w4 a040 2 (9910)
+[   54.365968] brcmfmac: psr: sdio 156 53: F1r4 a044 108c0f (3be8)
+[   54.385786] brcmfmac: psr: sdio 157 53: F1w4 a040 3 (5598)
+[   54.405957] brcmfmac: psr: sdio 158 53: F1r4 a044 108c0f (3be8)
+[   54.425791] brcmfmac: psr: sdio 159 53: F1w4 a040 4 (3220)
+[   54.445942] brcmfmac: psr: sdio 160 53: F1r4 a044 108c0f (3be8)
+[   54.465772] brcmfmac: psr: sdio 161 53: F1w4 a040 5 (fea8)
+[   54.485951] brcmfmac: psr: sdio 162 53: F1r4 a044 108c0f (3be8)
+[   54.505784] brcmfmac: psr: sdio 163 53: F1r4 8004 58680009 (6140)
+[   54.525798] brcmfmac: psr: sdio 164 53: F1r4 80ac e (cf70)
+[   54.545695] brcmfmac: psr: sdio 165 53: F1r4 8604 420e5f18 (a122)
+[   54.566025] brcmfmac: psr: sdio 166 53: F1r1 1001f 3 (183)
+[   54.585766] brcmfmac: psr: sdio 167 53: F0r1 f1 1 (81)
+[   54.605774] brcmfmac: psr: sdio 168 53: F0w1 f1 3 (183)
+[   54.625761] brcmfmac: psr: sdio 169 53: F1r4 8600 1770180 (4b8b)
+[   54.645775] brcmfmac: psr: sdio 170 53: F1w4 8600 1774180 (ca8b)
+[   54.665933] brcmfmac: psr: sdio 171 53: F1w1 1000e 0 (0)
+[   54.685939] brcmfmac: psr: sdio 172 152: F1w1 1000e 8 (408)
+[   54.705921] brcmfmac: psr: sdio 173 152: F1r1 1000e c8 (64c8)
+[   54.725782] brcmfmac: psr: sdio 174 152: F3w4 ffff 0 (0)
+[   63.009252] brcmfmac: psr: sdio 566 152: F4w4 ffff 0 (0)
+[   63.149597] brcmfmac: psr: sdio 573 152: F5w4 ffff 0 (0)
+[   63.173368] brcmfmac: psr: sdio 574 152: F1w1 1000a 0 (0)
+[   63.197146] brcmfmac: psr: sdio 575 152: F1w1 1000b 0 (0)
+[   63.225409] brcmfmac: psr: sdio 576 152: F1w1 1000c 18 (c18)
+[   63.249177] brcmfmac: psr: sdio 577 152: F1w4 d020 ffffffff (53e5)
+[   63.277151] brcmfmac: psr: sdio 578 152: F1w1 1000a 0 (0)
+[   63.305365] brcmfmac: psr: sdio 579 152: F1w1 1000b 0 (0)
+[   63.329214] brcmfmac: psr: sdio 580 152: F1w1 1000c 0 (0)
+[   63.357375] brcmfmac: psr: sdio 581 152: F11w4 8000 b83ef180 (e4c0)
+[   63.377205] brcmfmac: psr: sdio 582 152: F1w1 1000a 0 (0)
+[   63.397185] brcmfmac: psr: sdio 583 152: F1w1 1000b 10 (810)
+[   63.417176] brcmfmac: psr: sdio 584 152: F1w1 1000c 18 (c18)
+[   63.437421] brcmfmac: psr: sdio 585 152: F1r4 a800 0 (0)
+[   63.457173] brcmfmac: psr: sdio 586 152: F1w4 a408 23 (c498)
+[   63.485182] brcmfmac: psr: sdio 587 152: F1r4 a408 23 (c498)
+[   63.521377] brcmfmac: psr: sdio 588 152: F1w4 a800 1 (cc88)
+[   63.541237] brcmfmac: psr: sdio 589 152: F1r4 a800 1 (cc88)
+[   63.573150] brcmfmac: psr: sdio 590 152: F1w4 a408 3 (5598)
+[   63.593120] brcmfmac: psr: sdio 591 152: F1r4 a408 3 (5598)
+[   63.621193] brcmfmac: psr: sdio 592 152: F1r4 a800 1 (cc88)
+[   63.650634] brcmfmac: psr: sdio 593 152: F1w4 a800 0 (0)
+[   63.677268] brcmfmac: psr: sdio 594 152: F1r4 a800 0 (0)
+[   63.697158] brcmfmac: psr: sdio 595 152: F1w4 a408 1 (cc88)
+[   63.717169] brcmfmac: psr: sdio 596 152: F1r4 a408 1 (cc88)
+[   63.741168] brcmfmac: psr: sdio 597 152: F1w1 1000e 0 (0)
+[   63.761188] brcmfmac: psr: sdio 598 152: F1w1 1000e 10 (810)
+[   63.781203] brcmfmac: psr: sdio 599 152: F1r1 1000e d0 (68d0)
+[   63.801243] brcmfmac: psr: sdio 600 152: F1r1 1000e d0 (68d0)
+[   63.825323] brcmfmac: psr: sdio 601 152: F1w1 1000e d2 (69d2)
+[   63.845213] brcmfmac: psr: sdio 602 152: F1w1 1000a 0 (0)
+[   63.865145] brcmfmac: psr: sdio 603 152: F1w1 1000b 0 (0)
+[   63.885150] brcmfmac: psr: sdio 604 152: F1w1 1000c 18 (c18)
+[   63.905190] brcmfmac: psr: sdio 605 152: F1w4 d048 40000 (4488)
+[   63.925189] brcmfmac: psr: sdio 606 152: F1w4 d024 200000f0 (2fa0)
+[   63.945131] brcmfmac: psr: sdio 607 152: F1w1 10008 8 (408)
+[   63.965280] brcmfmac: psr: sdio 608 152: F1w4 8650 3 (5598)
+[   63.985213] brcmfmac: psr: sdio 609 152: F1r4 8654 f012c37 (c025)
+[   64.005127] brcmfmac: psr: sdio 610 152: F1r1 1001e 0 (0)
+[   64.025126] brcmfmac: psr: sdio 611 152: F1w1 1001e 2 (102)
+[   64.045163] brcmfmac: psr: sdio 612 152: F0w1 f0 6 (306)
+[   64.065185] brcmfmac: psr: sdio 613 152: F1w1 1000e 2 (102)
+[   64.085254] brcmfmac: psr: sdio 614 1896: F1r4 d020 8000c0 (f700)
+[   64.105153] brcmfmac: psr: sdio 615 1896: F1w4 d020 c0 (6600)
+[   64.125154] brcmfmac: psr: sdio 616 370: F1r4 d04c 40008 (20c8)
+[   64.149201] brcmfmac: psr: sdio 617 370: F1w4 d040 2 (9910)
+[   64.169109] brcmfmac: psr: sdio 618 370: F12r64f 8000 c000100fff3000c (0)
+[   64.189116] brcmfmac: psr: sdio 619 370: F12r0f 8000 0 (0)
+[   64.209219] brcmfmac: psr: sdio 620 370: F12r64f 8000 0 (0)
+[   64.229121] brcmfmac: psr: sdio 621 370: F12w48 8000 c0000ffffcf0030 (32c0)
+[   64.249154] brcmfmac: psr: sdio 622 1896: F1r4 d020 8000c0 (f700)
+[   64.269206] brcmfmac: psr: sdio 623 1896: F1w4 d020 c0 (6600)
+[   64.293128] brcmfmac: psr: sdio 624 370: F1r4 d04c 40002 (dd98)
+[   64.313120] brcmfmac: psr: sdio 625 370: F1w4 d040 2 (9910)
+[   64.333149] brcmfmac: psr: sdio 626 370: F12r64f 8000 c000001ffcf0030 (0)
+[   64.353123] brcmfmac: psr: sdio 627 370: F12r64f 8000 0 (0)
+[   64.373160] brcmfmac: psr: sdio 628 370: F12w48 8000 c000000ffd4002b (8940)
+[   64.393151] brcmfmac: psr: sdio 629 1896: F1r4 d020 800040 (b300)
+[   64.413143] brcmfmac: psr: sdio 630 1896: F1w4 d020 40 (2200)
+[   64.437118] brcmfmac: psr: sdio 631 370: F12r64f 8000 c000002ffd4002b (0)
+[   64.461288] brcmfmac: psr: sdio 632 370: F12r64f 8000 0 (0)
+[   64.481235] brcmfmac: psr: sdio 633 370: F12w56 8000 1000034ffc70038 (c100)
+[   64.501353] brcmfmac: psr: sdio 634 1896: F1r4 d020 800040 (b300)
+[   64.521193] brcmfmac: psr: sdio 635 1896: F1w4 d020 40 (2200)
+[   64.541208] brcmfmac: psr: sdio 636 370: F12r64f 8000 c000003ffcf0030 (0)
+[   64.561352] brcmfmac: psr: sdio 637 370: F12r64f 8000 0 (0)
+[   64.581179] brcmfmac: psr: sdio 638 370: F12w104 8000 1000064ff970068 (e841)
+[   64.601182] brcmfmac: psr: sdio 639 1896: F1r4 d020 800040 (b300)
+[   64.621169] brcmfmac: psr: sdio 640 1896: F1w4 d020 40 (2200)
+[   64.641178] brcmfmac: psr: sdio 641 370: F12r64f 8000 c000004ff9f0060 (8a81)
+[   64.661165] brcmfmac: psr: sdio 642 370: F12r32f 8000 0 (c5c2)
+[   64.681331] brcmfmac: psr: sdio 643 370: F12r64f 8000 0 (0)
+[   64.701173] brcmfmac: psr: sdio 644 370: F12w296 8000 1000124fed70128 (0)
+[   64.721330] brcmfmac: psr: sdio 645 1896: F1r4 d020 800040 (b300)
+[   64.741344] brcmfmac: psr: sdio 646 1896: F1w4 d020 40 (2200)
+[   64.761335] brcmfmac: psr: sdio 647 370: F12r64f 8000 c000005fedf0120 (b740)
+[   64.781158] brcmfmac: psr: sdio 648 370: F12r224f 8000 722e3438312e3533 (0)
+[   64.801310] brcmfmac: psr: sdio 649 370: F12r64f 8000 0 (0)
+[   64.821154] brcmfmac: psr: sdio 650 370: F12w304 8000 1000127fecf0130 (0)
+[   64.841188] brcmfmac: psr: sdio 651 1896: F1r4 d020 800040 (b300)
+[   64.861157] brcmfmac: psr: sdio 652 1896: F1w4 d020 40 (2200)
+[   64.881284] brcmfmac: psr: sdio 653 370: F12r64f 8000 c000006fedc0123 (7c3c)
+[   64.901135] brcmfmac: psr: sdio 654 370: F12r232f 8000 6d6c430a312e3132 (0)
+[   64.921142] brcmfmac: psr: sdio 655 370: F12r64f 8000 0 (0)
+[   64.941305] brcmfmac: psr: sdio 656 370: F12w48 8000 1000028ffcf0030 (d349)
+[   64.961275] brcmfmac: psr: sdio 657 1896: F1r4 d020 800040 (b300)
+[   64.981260] brcmfmac: psr: sdio 658 1896: F1w4 d020 40 (2200)
+[   65.001283] brcmfmac: psr: sdio 659 370: F12r64f 8000 c000007ffdb0024 (0)
+[   65.021131] brcmfmac: psr: sdio 660 370: F12r64f 8000 0 (0)
+[   65.041272] brcmfmac: psr: sdio 661 370: F12w56 8000 1000032ffc70038 (3332)
+[   65.061127] brcmfmac: psr: sdio 662 1896: F1r4 d020 800040 (b300)
+[   65.081294] brcmfmac: psr: sdio 663 1896: F1w4 d020 40 (2200)
+[   65.101284] brcmfmac: psr: sdio 664 370: F12r64f 8000 c000008ffd1002e (0)
+[   65.121267] brcmfmac: psr: sdio 665 370: F12r64f 8000 0 (0)
+[   65.141287] brcmfmac: psr: sdio 666 370: F12w72 8000 100003dffb70048 (1b3c)
+[   65.161132] brcmfmac: psr: sdio 667 1896: F1r4 d020 800040 (b300)
+[   65.186090] brcmfmac: psr: sdio 668 1896: F1w4 d020 40 (2200)
+[   65.205250] brcmfmac: psr: sdio 669 370: F12r64f 8000 c000009ffc60039 (0)
+[   65.225066] brcmfmac: psr: sdio 670 370: F12r64f 8000 0 (0)
+[   65.245286] brcmfmac: psr: sdio 671 370: F12w72 8000 100003dffb70048 (cebc)
+[   65.265132] brcmfmac: psr: sdio 672 1896: F1r4 d020 800040 (b300)
+[   65.285283] brcmfmac: psr: sdio 673 1896: F1w4 d020 40 (2200)
+[   65.305293] brcmfmac: psr: sdio 674 370: F12r64f 8000 c00000affc60039 (0)
+[   65.325127] brcmfmac: psr: sdio 675 370: F12r64f 8000 0 (0)
+[   65.345277] brcmfmac: psr: sdio 676 370: F12w40 8000 1000024ffd70028 (9340)
+[   65.365254] brcmfmac: psr: sdio 677 1896: F1r4 d020 800040 (b300)
+[   65.385242] brcmfmac: psr: sdio 678 1896: F1w4 d020 40 (2200)
+[   65.405278] brcmfmac: psr: sdio 679 370: F12r64f 8000 c00000bffdf0020 (0)
+[   65.425115] brcmfmac: psr: sdio 680 370: F12r64f 8000 0 (0)
+[   65.445053] brcmfmac: psr: sdio 681 370: F12w40 8000 1000024ffd70028 (7d40)
+[   65.465121] brcmfmac: psr: sdio 682 1896: F1r4 d020 800040 (b300)
+[   65.485290] brcmfmac: psr: sdio 683 1896: F1w4 d020 40 (2200)
+[   65.505122] brcmfmac: psr: sdio 684 370: F12r64f 8000 c00000cffdf0020 (0)
+[   65.525109] brcmfmac: psr: sdio 685 370: F12r64f 8000 0 (0)
+[   65.545148] brcmfmac: psr: sdio 686 370: F12w48 8000 1000029ffcf0030 (e98c)
+[   65.565280] brcmfmac: psr: sdio 687 1896: F1r4 d020 800040 (b300)
+[   65.585118] brcmfmac: psr: sdio 688 1896: F1w4 d020 40 (2200)
+[   65.605303] brcmfmac: psr: sdio 689 370: F12r64f 8000 c00000dffda0025 (0)
+[   65.625275] brcmfmac: psr: sdio 690 370: F12r64f 8000 0 (0)
+[   65.645132] brcmfmac: psr: sdio 691 370: F12w1024 8000 1000224fbff0400 (0)
+[   65.665125] brcmfmac: psr: sdio 692 1896: F1r4 d020 800040 (b300)
+[   65.685299] brcmfmac: psr: sdio 693 1896: F1w4 d020 40 (2200)
+[   65.705263] brcmfmac: psr: sdio 694 370: F12r64f 8000 c00000efddf0220 (f9bf)
+[   65.725111] brcmfmac: psr: sdio 695 370: F12r480f 8000 61626c6175642063 (168a)
+[   65.745112] brcmfmac: psr: sdio 696 370: F12r64f 8000 0 (0)
+[   65.765276] brcmfmac: psr: sdio 697 370: F12w72 8000 1000040ffb70048 (d04f)
+[   65.785251] brcmfmac: psr: sdio 698 1896: F1r4 d020 800040 (b300)
+[   65.805236] brcmfmac: psr: sdio 699 1896: F1w4 d020 40 (2200)
+[   65.825273] brcmfmac: psr: sdio 700 370: F12r64f 8000 c00000fffc3003c (0)
+[   65.845121] brcmfmac: psr: sdio 701 370: F12r64f 8000 0 (0)
+[   65.865252] brcmfmac: psr: sdio 702 370: F12w48 8000 1000028ffcf0030 (11dc)
+[   65.885102] brcmfmac: psr: sdio 703 1896: F1r4 d020 800040 (b300)
+[   65.905106] brcmfmac: psr: sdio 704 1896: F1w4 d020 40 (2200)
+[   65.925268] brcmfmac: psr: sdio 705 370: F12r64f 8000 c000010ffdb0024 (0)
+[   65.945120] brcmfmac: psr: sdio 706 370: F12r64f 8000 0 (0)
+[   65.965290] brcmfmac: psr: sdio 707 370: F12w56 8000 100002effc70038 (c800)
+[   65.985111] brcmfmac: psr: sdio 708 1896: F1r4 d020 800040 (b300)
+[   66.005242] brcmfmac: psr: sdio 709 1896: F1w4 d020 40 (2200)
+[   66.025239] brcmfmac: psr: sdio 710 370: F12r64f 8000 c000011ffd5002a (0)
+[   66.045090] brcmfmac: psr: sdio 711 370: F12r64f 8000 0 (0)
+[   66.065272] brcmfmac: psr: sdio 712 370: F12w56 8000 1000030ffc70038 (da00)
+[   66.085095] brcmfmac: psr: sdio 713 1896: F1r4 d020 800040 (b300)
+[   66.105231] brcmfmac: psr: sdio 714 1896: F1w4 d020 40 (2200)
+[   66.125224] brcmfmac: psr: sdio 715 370: F12r64f 8000 c000012ffd3002c (0)
+[   66.145107] brcmfmac: psr: sdio 716 370: F12r64f 8000 0 (0)
+[   66.165234] brcmfmac: psr: sdio 717 370: F12w48 8000 1000028ffcf0030 (eaca)
+[   66.185269] brcmfmac: psr: sdio 718 1896: F1r4 d020 800040 (b300)
+[   66.205114] brcmfmac: psr: sdio 719 1896: F1w4 d020 40 (2200)
+[   66.225261] brcmfmac: psr: sdio 720 370: F12r64f 8000 c000013ffdb0024 (0)
+[   66.245106] brcmfmac: psr: sdio 721 370: F12r64f 8000 0 (0)
+[   66.265107] brcmfmac: psr: sdio 722 370: F12w56 8000 1000034ffc70038 (6c80)
+[   66.285085] brcmfmac: psr: sdio 723 1896: F1r4 d020 800040 (b300)
+[   66.305088] brcmfmac: psr: sdio 724 1896: F1w4 d020 40 (2200)
+[   66.325229] brcmfmac: psr: sdio 725 370: F12r64f 8000 c000014ffcf0030 (0)
+[   66.345228] brcmfmac: psr: sdio 726 370: F12r64f 8000 0 (0)
+[   66.365073] brcmfmac: psr: sdio 727 370: F12w48 8000 100002cffcf0030 (9ec1)
+[   66.385092] brcmfmac: psr: sdio 728 1896: F1r4 d020 800040 (b300)
+[   66.405274] brcmfmac: psr: sdio 729 1896: F1w4 d020 40 (2200)
+[   66.425239] brcmfmac: psr: sdio 730 370: F12r64f 8000 c000015ffd70028 (0)
+[   66.445101] brcmfmac: psr: sdio 731 370: F12r64f 8000 0 (0)
+[   66.465088] brcmfmac: psr: sdio 732 370: F12w40 8000 1000024ffd70028 (5094)
+[   66.485079] brcmfmac: psr: sdio 733 1896: F1r4 d020 800040 (b300)
+[   66.505232] brcmfmac: psr: sdio 734 1896: F1w4 d020 40 (2200)
+[   66.525085] brcmfmac: psr: sdio 735 370: F12r64f 8000 c000016ffdf0020 (0)
+[   66.545095] brcmfmac: psr: sdio 736 370: F12r64f 8000 0 (0)
+[   66.565086] brcmfmac: psr: sdio 737 370: F12w48 8000 100002cffcf0030 (99c1)
+[   66.585225] brcmfmac: psr: sdio 738 1896: F1r4 d020 800040 (b300)
+[   66.605077] brcmfmac: psr: sdio 739 1896: F1w4 d020 40 (2200)
+[   66.625263] brcmfmac: psr: sdio 740 370: F12r64f 8000 c000017ffd70028 (0)
+[   66.645171] brcmfmac: psr: sdio 741 370: F12r64f 8000 0 (0)
+[   66.665081] brcmfmac: psr: sdio 742 370: F12w48 8000 100002cffcf0030 (9520)
+[   66.685073] brcmfmac: psr: sdio 743 1896: F1r4 d020 800040 (b300)
+[   66.705082] brcmfmac: psr: sdio 744 1896: F1w4 d020 40 (2200)
+[   66.725234] brcmfmac: psr: sdio 745 370: F12r64f 8000 c000018ffd70028 (0)
+[   66.745219] brcmfmac: psr: sdio 746 370: F12r64f 8000 0 (0)
+[   66.765071] brcmfmac: psr: sdio 747 370: F12w48 8000 100002affcf0030 (4480)
+[   66.785079] brcmfmac: psr: sdio 748 1896: F1r4 d020 800040 (b300)
+[   66.805211] brcmfmac: psr: sdio 749 1896: F1w4 d020 40 (2200)
+[   66.825219] brcmfmac: psr: sdio 750 370: F12r64f 8000 c000019ffd90026 (0)
+[   66.845062] brcmfmac: psr: sdio 751 370: F12r64f 8000 0 (0)
+[   66.865259] brcmfmac: psr: sdio 752 370: F12w48 8000 100002bffcf0030 (85a0)
+[   66.885065] brcmfmac: psr: sdio 753 1896: F1r4 d020 800040 (b300)
+[   66.905202] brcmfmac: psr: sdio 754 1896: F1w4 d020 40 (2200)
+[   66.925193] brcmfmac: psr: sdio 755 155: F12r64f 8000 c00001affd80027 (0)
+[   66.945213] brcmfmac: psr: sdio 756 155: F12r64f 8000 0 (0)
+[   66.965213] brcmfmac: psr: sdio 757 155: F12w48 8000 100002bffcf0030 (9d90)
+[   66.985198] brcmfmac: psr: sdio 758 1896: F1r4 d020 800040 (b300)
+[   67.005179] brcmfmac: psr: sdio 759 1896: F1w4 d020 40 (2200)
+[   67.025230] brcmfmac: psr: sdio 760 155: F12r64f 8000 c00001bffd80027 (0)
+[   67.045143] brcmfmac: psr: sdio 761 155: F12r64f 8000 0 (0)
+[   67.065068] brcmfmac: psr: sdio 762 155: F12w48 8000 100002cffcf0030 (9410)
+[   67.085052] brcmfmac: psr: sdio 763 1896: F1r4 d020 800040 (b300)
+[   67.105061] brcmfmac: psr: sdio 764 1896: F1w4 d020 40 (2200)
+[   67.125191] brcmfmac: psr: sdio 765 155: F12r64f 8000 c00001cffd70028 (0)
+[   67.145205] brcmfmac: psr: sdio 766 155: F12r64f 8000 0 (0)
+[   67.165049] brcmfmac: psr: sdio 767 155: F12w2048 8000 10005fef7ff0800 (0)
+[   67.185047] brcmfmac: psr: sdio 768 1896: F1r4 d020 800040 (b300)
+[   67.205045] brcmfmac: psr: sdio 769 1896: F1w4 d020 40 (2200)
+[   67.225178] brcmfmac: psr: sdio 770 155: F12r64f 8000 c00001df9d90626 (8b80)
+[   67.245195] brcmfmac: psr: sdio 771 155: F12r1536f 8000 100a00001009 (0)
+[   67.265064] brcmfmac: psr: sdio 772 155: F12r64f 8000 655c17b90000682b (e53b)
+[   67.285039] brcmfmac: psr: sdio 773 155: F0w1 6 2 (102)
+[   67.305203] brcmfmac: psr: sdio 774 155: F1w1 1000d 1 (81)
+[   67.325042] brcmfmac: psr: sdio 775 155: F1r1 1001c 0 (0)
+[   67.345039] brcmfmac: psr: sdio 776 155: F1r1 1001b 0 (0)
+[   67.365028] brcmfmac: psr: sdio 777 155: F1w4 d040 1 (cc88)
+[   67.385043] brcmfmac: psr: sdio 778 155: F12w56 8000 1000032ffc70038 (7aa0)
+[   67.405029] brcmfmac: psr: sdio 779 1896: F1r4 d020 80 (4400)
+[   67.425210] brcmfmac: psr: sdio 780 1896: F1w4 d020 80 (4400)
+[   67.445194] brcmfmac: psr: sdio 781 155: F1r4 d04c 1 (cc88)
+[   67.465030] brcmfmac: psr: sdio 782 155: F1w4 d040 2 (9910)
+[   67.485211] brcmfmac: psr: sdio 783 155: F12r64f 8000 c00001effd1002e (0)
+[   67.505050] brcmfmac: psr: sdio 784 155: F12r64f 8000 0 (0)
+[   67.525180] brcmfmac: psr: sdio 785 155: F12w56 8000 1000032ffc70038 (4cc0)
+[   67.544988] brcmfmac: psr: sdio 786 1896: F1r4 d020 40 (2200)
+[   67.565044] brcmfmac: psr: sdio 787 1896: F1w4 d020 40 (2200)
+[   67.585041] brcmfmac: psr: sdio 788 155: F12r64f 8000 c00001fffd1002e (0)
+[   67.605049] brcmfmac: psr: sdio 789 155: F12r64f 8000 0 (0)
+[   67.625192] brcmfmac: psr: sdio 790 155: F12w56 8000 1000032ffc70038 (5ee0)
+[   67.645190] brcmfmac: psr: sdio 791 1896: F1r4 d020 800040 (b300)
+[   67.665023] brcmfmac: psr: sdio 792 1896: F1w4 d020 40 (2200)
+[   67.685207] brcmfmac: psr: sdio 793 155: F12r64f 8000 c000020ffd1002e (0)
+[   67.705029] brcmfmac: psr: sdio 794 155: F12r64f 8000 0 (0)
+[   67.725174] brcmfmac: psr: sdio 795 155: F12w56 8000 1000032ffc70038 (2000)
+[   67.745022] brcmfmac: psr: sdio 796 1896: F1r4 d020 800040 (b300)
+[   67.765245] brcmfmac: psr: sdio 797 1896: F1w4 d020 40 (2200)
+[   67.785048] brcmfmac: psr: sdio 798 155: F12r64f 8000 c000021ffd1002e (0)
+[   67.805188] brcmfmac: psr: sdio 799 155: F12r64f 8000 0 (0)
+[   67.825189] brcmfmac: psr: sdio 800 155: F12w56 8000 1000032ffc70038 (3220)
+[   67.845050] brcmfmac: psr: sdio 801 1896: F1r4 d020 800040 (b300)
+[   67.865051] brcmfmac: psr: sdio 802 1896: F1w4 d020 40 (2200)
+[   67.885044] brcmfmac: psr: sdio 803 155: F12r64f 8000 c000022ffd1002e (0)
+[   67.905034] brcmfmac: psr: sdio 804 155: F12r64f 8000 0 (0)
+[   67.925210] brcmfmac: psr: sdio 805 155: F12w56 8000 1000032ffc70038 (440)
+[   67.945035] brcmfmac: psr: sdio 806 1896: F1r4 d020 800040 (b300)
+[   67.965205] brcmfmac: psr: sdio 807 1896: F1w4 d020 40 (2200)
+[   67.985029] brcmfmac: psr: sdio 808 155: F12r64f 8000 c000023ffd1002e (0)
+[   68.005023] brcmfmac: psr: sdio 809 155: F12r64f 8000 0 (0)
+[   68.024963] brcmfmac: psr: sdio 810 155: F12w56 8000 1000032ffc70038 (1660)
+[   68.045052] brcmfmac: psr: sdio 811 1896: F1r4 d020 800040 (b300)
+[   68.064984] brcmfmac: psr: sdio 812 1896: F1w4 d020 40 (2200)
+[   68.085235] brcmfmac: psr: sdio 813 155: F12r64f 8000 c000024ffd1002e (0)
+[   68.105035] brcmfmac: psr: sdio 814 155: F12r64f 8000 0 (0)
+[   68.125038] brcmfmac: psr: sdio 815 155: F12w56 8000 1000032ffc70038 (f980)
+[   68.145023] brcmfmac: psr: sdio 816 1896: F1r4 d020 800040 (b300)
+[   68.165059] brcmfmac: psr: sdio 817 1896: F1w4 d020 40 (2200)
+[   68.185043] brcmfmac: psr: sdio 818 155: F12r64f 8000 c000025ffd1002e (0)
+[   68.205034] brcmfmac: psr: sdio 819 155: F12r64f 8000 0 (0)
+[   68.225178] brcmfmac: psr: sdio 820 155: F12w56 8000 1000032ffc70038 (eba0)
+[   68.245029] brcmfmac: psr: sdio 821 1896: F1r4 d020 800040 (b300)
+[   68.265047] brcmfmac: psr: sdio 822 1896: F1w4 d020 40 (2200)
+[   68.285191] brcmfmac: psr: sdio 823 155: F12r64f 8000 c000026ffd1002e (0)
+[   68.305014] brcmfmac: psr: sdio 824 155: F12r64f 8000 0 (0)
+[   68.325200] brcmfmac: psr: sdio 825 155: F12w56 8000 1000032ffc70038 (ddc0)
+[   68.345026] brcmfmac: psr: sdio 826 1896: F1r4 d020 800040 (b300)
+[   68.365188] brcmfmac: psr: sdio 827 1896: F1w4 d020 40 (2200)
+[   68.385011] brcmfmac: psr: sdio 828 155: F12r64f 8000 c000027ffd1002e (0)
+[   68.405015] brcmfmac: psr: sdio 829 155: F12r64f 8000 0 (0)
+[   68.425172] brcmfmac: psr: sdio 830 155: F12w56 8000 1000032ffc70038 (cfe0)
+[   68.445181] brcmfmac: psr: sdio 831 1896: F1r4 d020 800040 (b300)
+[   68.465012] brcmfmac: psr: sdio 832 1896: F1w4 d020 40 (2200)
+[   68.485027] brcmfmac: psr: sdio 833 155: F12r64f 8000 c000028ffd1002e (0)
+[   68.505006] brcmfmac: psr: sdio 834 155: F12r64f 8000 0 (0)
+[   68.525160] brcmfmac: psr: sdio 835 155: F12w56 8000 1000032ffc70038 (6800)
+[   68.545045] brcmfmac: psr: sdio 836 1896: F1r4 d020 800040 (b300)
+[   68.565022] brcmfmac: psr: sdio 837 1896: F1w4 d020 40 (2200)
+[   68.585169] brcmfmac: psr: sdio 838 155: F12r64f 8000 c000029ffd1002e (0)
+[   68.605163] brcmfmac: psr: sdio 839 155: F12r64f 8000 0 (0)
+[   68.625166] brcmfmac: psr: sdio 840 155: F12w56 8000 1000032ffc70038 (b180)
+[   68.645008] brcmfmac: psr: sdio 841 1896: F1r4 d020 800040 (b300)
+[   68.664999] brcmfmac: psr: sdio 842 1896: F1w4 d020 40 (2200)
+[   68.685151] brcmfmac: psr: sdio 843 155: F12r64f 8000 c00002affd1002e (0)
+[   68.704991] brcmfmac: psr: sdio 844 155: F12r64f 8000 0 (0)
+[   68.725168] brcmfmac: psr: sdio 845 155: F12w56 8000 1000032ffc70038 (f900)
+[   68.745006] brcmfmac: psr: sdio 846 1896: F1r4 d020 800040 (b300)
+[   68.765158] brcmfmac: psr: sdio 847 1896: F1w4 d020 40 (2200)
+[   68.784991] brcmfmac: psr: sdio 848 155: F12r64f 8000 c00002bffd1002e (0)
+[   68.804993] brcmfmac: psr: sdio 849 155: F12r64f 8000 0 (0)
+[   68.825150] brcmfmac: psr: sdio 850 155: F12w56 8000 1000032ffc70038 (280)
+[   68.845143] brcmfmac: psr: sdio 851 1896: F1r4 d020 800040 (b300)
+[   68.864991] brcmfmac: psr: sdio 852 1896: F1w4 d020 40 (2200)
+[   68.884990] brcmfmac: psr: sdio 853 155: F12r64f 8000 c00002cffd1002e (0)
+[   68.904981] brcmfmac: psr: sdio 854 155: F12r64f 8000 0 (0)
+[   68.925148] brcmfmac: psr: sdio 855 155: F12w56 8000 1000032ffc70038 (4a00)
+[   68.944983] brcmfmac: psr: sdio 856 1896: F1r4 d020 800040 (b300)
+[   68.964997] brcmfmac: psr: sdio 857 1896: F1w4 d020 40 (2200)
+[   68.985168] brcmfmac: psr: sdio 858 155: F12r64f 8000 c00002dffd1002e (0)
+[   69.005143] brcmfmac: psr: sdio 859 155: F12r64f 8000 0 (0)
+[   69.025138] brcmfmac: psr: sdio 860 155: F12w56 8000 1000032ffc70038 (9380)
+[   69.044996] brcmfmac: psr: sdio 861 1896: F1r4 d020 800040 (b300)
+[   69.065112] brcmfmac: psr: sdio 862 1896: F1w4 d020 40 (2200)
+[   69.085138] brcmfmac: psr: sdio 863 155: F12r64f 8000 c00002effd1002e (0)
+[   69.104980] brcmfmac: psr: sdio 864 155: F12r64f 8000 0 (0)
+[   69.125146] brcmfmac: psr: sdio 865 155: F12w56 8000 1000032ffc70038 (db00)
+[   69.144982] brcmfmac: psr: sdio 866 1896: F1r4 d020 800040 (b300)
+[   69.164983] brcmfmac: psr: sdio 867 1896: F1w4 d020 40 (2200)
+[   69.184998] brcmfmac: psr: sdio 868 155: F12r64f 8000 c00002fffd1002e (0)
+[   69.205001] brcmfmac: psr: sdio 869 155: F12r64f 8000 0 (0)
+[   69.225137] brcmfmac: psr: sdio 870 155: F12w56 8000 1000032ffc70038 (ec80)
+[   69.245141] brcmfmac: psr: sdio 871 1896: F1r4 d020 800040 (b300)
+[   69.264980] brcmfmac: psr: sdio 872 1896: F1w4 d020 40 (2200)
+[   69.285140] brcmfmac: psr: sdio 873 155: F12r64f 8000 c000030ffd1002e (0)
+[   69.304990] brcmfmac: psr: sdio 874 155: F12r64f 8000 0 (0)
+[   69.325131] brcmfmac: psr: sdio 875 155: F12w56 8000 1000032ffc70038 (e000)
+[   69.344968] brcmfmac: psr: sdio 876 1896: F1r4 d020 800040 (b300)
+[   69.365125] brcmfmac: psr: sdio 877 1896: F1w4 d020 40 (2200)
+[   69.384974] brcmfmac: psr: sdio 878 155: F12r64f 8000 c000031ffd1002e (0)
+[   69.405132] brcmfmac: psr: sdio 879 155: F12r64f 8000 0 (0)
+[   69.424961] brcmfmac: psr: sdio 880 155: F12w56 8000 1000032ffc70038 (3980)
+[   69.444961] brcmfmac: psr: sdio 881 1896: F1r4 d020 800040 (b300)
+[   69.465109] brcmfmac: psr: sdio 882 1896: F1w4 d020 40 (2200)
+[   69.484961] brcmfmac: psr: sdio 883 155: F12r64f 8000 c000032ffd1002e (0)
+[   69.504954] brcmfmac: psr: sdio 884 155: F12r64f 8000 0 (0)
+[   69.525131] brcmfmac: psr: sdio 885 155: F12w56 8000 1000032ffc70038 (7100)
+[   69.545133] brcmfmac: psr: sdio 886 1896: F1r4 d020 800040 (b300)
+[   69.565137] brcmfmac: psr: sdio 887 1896: F1w4 d020 40 (2200)
+[   69.584976] brcmfmac: psr: sdio 888 155: F12r64f 8000 c000033ffd1002e (0)
+[   69.604963] brcmfmac: psr: sdio 889 155: F12r64f 8000 0 (0)
+[   69.625115] brcmfmac: psr: sdio 890 155: F12w56 8000 1000032ffc70038 (8a80)
+[   69.645116] brcmfmac: psr: sdio 891 1896: F1r4 d020 800040 (b300)
+[   69.664950] brcmfmac: psr: sdio 892 1896: F1w4 d020 40 (2200)
+[   69.685120] brcmfmac: psr: sdio 893 155: F12r64f 8000 c000034ffd1002e (0)
+[   69.704956] brcmfmac: psr: sdio 894 155: F12r64f 8000 0 (0)
+[   69.725103] brcmfmac: psr: sdio 895 155: F12w56 8000 1000032ffc70038 (c200)
+[   69.744954] brcmfmac: psr: sdio 896 1896: F1r4 d020 800040 (b300)
+[   69.765095] brcmfmac: psr: sdio 897 1896: F1w4 d020 40 (2200)
+[   69.785099] brcmfmac: psr: sdio 898 155: F12r64f 8000 c000035ffd1002e (0)
+[   69.805094] brcmfmac: psr: sdio 899 155: F12r64f 8000 0 (0)
+[   69.825093] brcmfmac: psr: sdio 900 155: F12w56 8000 1000032ffc70038 (1b80)
+[   69.845093] brcmfmac: psr: sdio 901 1896: F1r4 d020 800040 (b300)
+[   69.864931] brcmfmac: psr: sdio 902 1896: F1w4 d020 40 (2200)
+[   69.885097] brcmfmac: psr: sdio 903 155: F12r64f 8000 c000036ffd1002e (0)
+[   69.904946] brcmfmac: psr: sdio 904 155: F12r64f 8000 0 (0)
+[   69.925112] brcmfmac: psr: sdio 905 155: F12w56 8000 1000032ffc70038 (5300)
+[   69.944945] brcmfmac: psr: sdio 906 1896: F1r4 d020 800040 (b300)
+[   69.965106] brcmfmac: psr: sdio 907 1896: F1w4 d020 40 (2200)
+[   69.984942] brcmfmac: psr: sdio 908 155: F12r64f 8000 c000037ffd1002e (0)
+[   70.004950] brcmfmac: psr: sdio 909 155: F12r64f 8000 0 (0)
+[   70.025098] brcmfmac: psr: sdio 910 155: F12w56 8000 1000032ffc70038 (7480)
+[   70.045093] brcmfmac: psr: sdio 911 1896: F1r4 d020 800040 (b300)
+[   70.064933] brcmfmac: psr: sdio 912 1896: F1w4 d020 40 (2200)
+[   70.085110] brcmfmac: psr: sdio 913 155: F12r64f 8000 c000038ffd1002e (0)
+[   70.104948] brcmfmac: psr: sdio 914 155: F12r64f 8000 0 (0)
+[   70.125118] brcmfmac: psr: sdio 915 155: F12w56 8000 1000032ffc70038 (3c00)
+[   70.144948] brcmfmac: psr: sdio 916 1896: F1r4 d020 800040 (b300)
+[   70.164946] brcmfmac: psr: sdio 917 1896: F1w4 d020 40 (2200)
+[   70.184955] brcmfmac: psr: sdio 918 155: F12r64f 8000 c000039ffd1002e (0)
+[   70.204938] brcmfmac: psr: sdio 919 155: F12r64f 8000 0 (0)
+[   70.225082] brcmfmac: psr: sdio 920 155: F12w56 8000 1000032ffc70038 (e580)
+[   70.244939] brcmfmac: psr: sdio 921 1896: F1r4 d020 800040 (b300)
+[   70.264931] brcmfmac: psr: sdio 922 1896: F1w4 d020 40 (2200)
+[   70.284944] brcmfmac: psr: sdio 923 155: F12r64f 8000 c00003affd1002e (0)
+[   70.304929] brcmfmac: psr: sdio 924 155: F12r64f 8000 0 (0)
+[   70.325102] brcmfmac: psr: sdio 925 155: F12w56 8000 1000032ffc70038 (ad00)
+[   70.344931] brcmfmac: psr: sdio 926 1896: F1r4 d020 800040 (b300)
+[   70.365078] brcmfmac: psr: sdio 927 1896: F1w4 d020 40 (2200)
+[   70.384931] brcmfmac: psr: sdio 928 155: F12r64f 8000 c00003bffd1002e (0)
+[   70.404934] brcmfmac: psr: sdio 929 155: F12r64f 8000 0 (0)
+[   70.425082] brcmfmac: psr: sdio 930 155: F12w56 8000 1000032ffc70038 (5680)
+[   70.445082] brcmfmac: psr: sdio 931 1896: F1r4 d020 800040 (b300)
+[   70.464915] brcmfmac: psr: sdio 932 1896: F1w4 d020 40 (2200)
+[   70.485100] brcmfmac: psr: sdio 933 155: F12r64f 8000 c00003cffd1002e (0)
+[   70.504920] brcmfmac: psr: sdio 934 155: F12r64f 8000 0 (0)
+[   70.525078] brcmfmac: psr: sdio 935 155: F12w56 8000 1000032ffc70038 (c20)
+[   70.544949] brcmfmac: psr: sdio 936 1896: F1r4 d020 800040 (b300)
+[   70.565041] brcmfmac: psr: sdio 937 1896: F1w4 d020 40 (2200)
+[   70.585097] brcmfmac: psr: sdio 938 155: F12r64f 8000 c00003dffd1002e (0)
+[   70.604872] brcmfmac: psr: sdio 939 155: F12r64f 8000 0 (0)
+[   70.625116] brcmfmac: psr: sdio 940 155: F12w56 8000 1000032ffc70038 (d5a0)
+[   70.644935] brcmfmac: psr: sdio 941 1896: F1r4 d020 800040 (b300)
+[   70.665094] brcmfmac: psr: sdio 942 1896: F1w4 d020 40 (2200)
+[   70.685099] brcmfmac: psr: sdio 943 155: F12r64f 8000 c00003effd1002e (0)
+[   70.704917] brcmfmac: psr: sdio 944 155: F12r64f 8000 0 (0)
+[   70.725092] brcmfmac: psr: sdio 945 155: F12w56 8000 1000032ffc70038 (9d20)
+[   70.744921] brcmfmac: psr: sdio 946 1896: F1r4 d020 800040 (b300)
+[   70.765074] brcmfmac: psr: sdio 947 1896: F1w4 d020 40 (2200)
+[   70.784931] brcmfmac: psr: sdio 948 155: F12r64f 8000 c00003fffd1002e (0)
+[   70.804917] brcmfmac: psr: sdio 949 155: F12r64f 8000 0 (0)
+[   70.825076] brcmfmac: psr: sdio 950 155: F12w56 8000 1000032ffc70038 (22a0)
+[   70.845069] brcmfmac: psr: sdio 951 1896: F1r4 d020 800040 (b300)
+[   70.864908] brcmfmac: psr: sdio 952 1896: F1w4 d020 40 (2200)
+[   70.885106] brcmfmac: psr: sdio 953 155: F12r64f 8000 c000040ffd1002e (0)
+[   70.904913] brcmfmac: psr: sdio 954 155: F12r64f 8000 0 (0)
+[   70.925061] brcmfmac: psr: sdio 955 155: F12w56 8000 1000032ffc70038 (6a20)
+[   70.944901] brcmfmac: psr: sdio 956 1896: F1r4 d020 800040 (b300)
+[   70.964923] brcmfmac: psr: sdio 957 1896: F1w4 d020 40 (2200)
+[   70.985081] brcmfmac: psr: sdio 958 155: F12r64f 8000 c000041ffd1002e (0)
+[   71.005073] brcmfmac: psr: sdio 959 155: F12r64f 8000 0 (0)
+[   71.024901] brcmfmac: psr: sdio 960 155: F12w56 8000 100002effc70038 (2ba0)
+[   71.044902] brcmfmac: psr: sdio 961 1896: F1r4 d020 800040 (b300)
+[   71.065051] brcmfmac: psr: sdio 962 1896: F1w4 d020 40 (2200)
+[   71.085071] brcmfmac: psr: sdio 963 155: F12r64f 8000 c000042ffd5002a (0)
+[   71.104855] brcmfmac: psr: sdio 964 155: F12r64f 8000 0 (0)
+[   71.124919] brcmfmac: psr: sdio 965 155: F12w56 8000 1000031ffc70038 (f600)
+[   71.144902] brcmfmac: psr: sdio 966 1896: F1r4 d020 800040 (b300)
+[   71.165050] brcmfmac: psr: sdio 967 1896: F1w4 d020 40 (2200)
+[   71.184921] brcmfmac: psr: sdio 968 155: F12r64f 8000 c000043ffd2002d (0)
+[   71.204917] brcmfmac: psr: sdio 969 155: F12r64f 8000 0 (0)
+[   71.225039] brcmfmac: psr: sdio 970 155: F12w56 8000 1000031ffc70038 (8600)
+[   71.245055] brcmfmac: psr: sdio 971 1896: F1r4 d020 800040 (b300)
+[   71.264890] brcmfmac: psr: sdio 972 1896: F1w4 d020 40 (2200)
+[   71.285070] brcmfmac: psr: sdio 973 155: F12r64f 8000 c000044ffd2002d (0)
+[   71.304899] brcmfmac: psr: sdio 974 155: F12r64f 8000 0 (0)
+[   71.325054] brcmfmac: psr: sdio 975 155: F12w48 8000 100002bffcf0030 (a5e0)
+[   71.345056] brcmfmac: psr: sdio 976 1896: F1r4 d020 800040 (b300)
+[   71.365059] brcmfmac: psr: sdio 977 1896: F1w4 d020 40 (2200)
+[   71.384882] brcmfmac: psr: sdio 978 155: F12r64f 8000 c000045ffd80027 (0)
+[   71.405060] brcmfmac: psr: sdio 979 155: F12r64f 8000 0 (0)
+[   71.425028] brcmfmac: psr: sdio 980 155: F12w56 8000 100002fffc70038 (2300)
+[   71.444904] brcmfmac: psr: sdio 981 1896: F1r4 d020 800040 (b300)
+[   71.465047] brcmfmac: psr: sdio 982 1896: F1w4 d020 40 (2200)
+[   71.484876] brcmfmac: psr: sdio 983 155: F12r64f 8000 c000046ffd4002b (0)
+[   71.504898] brcmfmac: psr: sdio 984 155: F12r64f 8000 0 (0)
+[   71.525053] brcmfmac: psr: sdio 985 155: F12w2048 8000 10005fef7ff0800 (0)
+[   71.544875] brcmfmac: psr: sdio 986 1896: F1r4 d020 800040 (b300)
+[   71.564904] brcmfmac: psr: sdio 987 1896: F1w4 d020 40 (2200)
+[   71.585006] brcmfmac: psr: sdio 988 155: F12r64f 8000 c000047f9d90626 (b38)
+[   71.604886] brcmfmac: psr: sdio 989 155: F12r1536f 8000 180500001804 (0)
+[   71.624890] brcmfmac: psr: sdio 990 155: F12r64f 8000 0 (0)
+[   71.645020] brcmfmac: psr: sdio 991 155: F12w56 8000 100002effc70038 (7414)
+[   71.664867] brcmfmac: psr: sdio 992 1896: F1r4 d020 800040 (b300)
+[   71.684882] brcmfmac: psr: sdio 993 1896: F1w4 d020 40 (2200)
+[   71.705025] brcmfmac: psr: sdio 994 155: F12r64f 8000 c000048ffd5002a (0)
+[   71.725014] brcmfmac: psr: sdio 995 155: F12r64f 8000 0 (0)
+[   71.745013] brcmfmac: psr: sdio 996 155: F12w72 8000 100003dffb70048 (e3b8)
+[   71.764893] brcmfmac: psr: sdio 997 1896: F1r4 d020 800040 (b300)
+[   71.784865] brcmfmac: psr: sdio 998 1896: F1w4 d020 40 (2200)
+[   71.805019] brcmfmac: psr: sdio 999 155: F12r64f 8000 c000049ffc60039 (8000)
+[   71.824863] brcmfmac: psr: sdio 1000 155: F12r64f 8000 0 (0)
+[   71.845042] brcmfmac: psr: sdio 1001 155: F12w56 8000 1000030ffc70038 (8d0)
+[   71.864871] brcmfmac: psr: sdio 1002 1896: F1r4 d020 800040 (b300)
+[   71.884854] brcmfmac: psr: sdio 1003 1896: F1w4 d020 40 (2200)
+[   71.904788] brcmfmac: psr: sdio 1004 155: F12r64f 8000 c00004affd3002c (0)
+[   71.924798] brcmfmac: psr: sdio 1005 155: F12r64f 8000 0 (0)
+[   71.944872] brcmfmac: psr: sdio 1006 155: F12w72 8000 100003dffb70048 (e3b8)
+[   71.964861] brcmfmac: psr: sdio 1007 1896: F1r4 d020 800040 (b300)
+[   71.985013] brcmfmac: psr: sdio 1008 1896: F1w4 d020 40 (2200)
+[   72.005025] brcmfmac: psr: sdio 1009 155: F12r64f 8000 c00004bffc60039 (8000)
+[   72.024875] brcmfmac: psr: sdio 1010 155: F12r64f 8000 0 (0)
+[   72.045025] brcmfmac: psr: sdio 1011 155: F12w56 8000 100002dffc70038 (30)
+[   72.064854] brcmfmac: psr: sdio 1012 1896: F1r4 d020 800040 (b300)
+[   72.084834] brcmfmac: psr: sdio 1013 1896: F1w4 d020 40 (2200)
+[   72.104864] brcmfmac: psr: sdio 1014 155: F12r64f 8000 c00004cffd60029 (0)
+[   72.124867] brcmfmac: psr: sdio 1015 152: F1r4 d020 0 (0)
+[   72.145003] brcmfmac: psr: sdio 1016 155: F12r64f 8000 0 (0)
+[   72.164848] brcmfmac: psr: sdio 1017 155: F12w56 8000 100002dffc70038 (30)
+[   72.184864] brcmfmac: psr: sdio 1018 152: F1r4 d020 800040 (b300)
+[   72.204877] brcmfmac: psr: sdio 1019 1896: F1r4 d020 800040 (b300)
+[   72.225016] brcmfmac: psr: sdio 1020 1896: F1w4 d020 40 (2200)
+[   72.244975] brcmfmac: psr: sdio 1021 155: F12r64f 8000 c00004dffd60029 (0)
+[   72.264843] brcmfmac: psr: sdio 1022 155: F12r64f 8000 0 (0)
+[   72.284990] brcmfmac: psr: sdio 1023 152: F1r4 d020 0 (0)
+[   72.304972] brcmfmac: psr: sdio 1024 152: F1r4 d020 0 (0)
+[   72.324974] brcmfmac: psr: sdio 1025 152: F1r4 d020 0 (0)
diff --git a/drivers/wlan/third_party/broadcom/brcmfmac/linuxisms.c b/drivers/wlan/third_party/broadcom/brcmfmac/linuxisms.c
new file mode 100644
index 0000000..1aca4bb
--- /dev/null
+++ b/drivers/wlan/third_party/broadcom/brcmfmac/linuxisms.c
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2018 The Fuchsia Authors.
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include "linuxisms.h"
+
+#include <pthread.h>
+
+#include "debug.h"
+
+void sdio_claim_host(struct sdio_func* func) {
+    pthread_mutex_lock(&func->lock);
+}
+
+void sdio_release_host(struct sdio_func* func) {
+    pthread_mutex_unlock(&func->lock);
+}
diff --git a/drivers/wlan/third_party/broadcom/brcmfmac/linuxisms.h b/drivers/wlan/third_party/broadcom/brcmfmac/linuxisms.h
index 8855d40..5b3fe57 100644
--- a/drivers/wlan/third_party/broadcom/brcmfmac/linuxisms.h
+++ b/drivers/wlan/third_party/broadcom/brcmfmac/linuxisms.h
@@ -28,6 +28,7 @@
 #include <ddk/device.h>
 #include <ddk/protocol/usb.h> // Remove when the USB structs move out
 #include <netinet/if_ether.h>
+#include <pthread.h>
 #include <stdarg.h>
 #include <stdint.h>
 #include <stdio.h>
@@ -574,6 +575,15 @@
     struct brcmf_cfg80211_info* cfg80211_info;
 };
 
+// This stubs the use of struct sdio_func, which we only use for locking.
+
+struct sdio_func {
+    pthread_mutex_t lock;
+};
+
+void sdio_claim_host(struct sdio_func* func);
+void sdio_release_host(struct sdio_func* func);
+
 struct cfg80211_ssid {
     size_t ssid_len;
     char* ssid;
diff --git a/drivers/wlan/third_party/broadcom/brcmfmac/sdio.c b/drivers/wlan/third_party/broadcom/brcmfmac/sdio.c
index 35fe653..e7be1f6 100644
--- a/drivers/wlan/third_party/broadcom/brcmfmac/sdio.c
+++ b/drivers/wlan/third_party/broadcom/brcmfmac/sdio.c
@@ -504,7 +504,7 @@
     sync_completion_t watchdog_wait;
     atomic_bool watchdog_should_stop;
     pthread_t watchdog_tsk;
-    bool wd_active;
+    atomic_bool wd_active;
 
     struct workqueue_struct* brcmf_wq;
     struct work_struct datawork;
@@ -582,6 +582,7 @@
 
 atomic_int dw_state;
 atomic_int dw_count;
+struct brcmf_sdio* gl_sdio_bus;
 
 BRCMF_FW_NVRAM_DEF(43143, "brcmfmac43143-sdio.bin", "brcmfmac43143-sdio.txt");
 BRCMF_FW_NVRAM_DEF(43241B0, "brcmfmac43241b0-sdio.bin", "brcmfmac43241b0-sdio.txt");
@@ -948,6 +949,7 @@
     struct sdpcm_shared_le sh_le;
     uint32_t addr_le;
 
+    sdio_claim_host(bus->sdiodev->func1);
     brcmf_sdio_bus_sleep(bus, false, false);
 
     /*
@@ -956,13 +958,13 @@
      */
     shaddr = bus->ci->rambase + bus->ci->ramsize - 4;
 
-    brcmf_dbg(TEMP, "rambase 0x%x, ramsize 0x%x, shaddr 0x%x",
-         bus->ci->rambase, bus->ci->ramsize, shaddr);
+  //  brcmf_dbg(TEMP, "rambase 0x%x, ramsize 0x%x, shaddr 0x%x",
+     //    bus->ci->rambase, bus->ci->ramsize, shaddr);
     if (!bus->ci->rambase && brcmf_chip_sr_capable(bus->ci)) {
-        brcmf_dbg(TEMP, "Subtracting srsize: 0x%x", bus->ci->srsize);
+     //   brcmf_dbg(TEMP, "Subtracting srsize: 0x%x", bus->ci->srsize);
         shaddr -= bus->ci->srsize;
     }
-    brcmf_dbg(TEMP, "Final shaddr is 0x%x", shaddr);
+ //   brcmf_dbg(TEMP, "Final shaddr is 0x%x", shaddr);
     rv = brcmf_sdiod_ramrw(bus->sdiodev, false, shaddr, (uint8_t*)&addr_le, 4);
     if (rv != ZX_OK) {
         goto fail;
@@ -979,7 +981,7 @@
         goto fail;
     }
 
-    brcmf_dbg(INFO, "sdpcm_shared address 0x%08X\n", addr);
+ //   brcmf_dbg(INFO, "sdpcm_shared address 0x%08X\n", addr);
 
     /* Read hndrte_shared structure */
     rv = brcmf_sdiod_ramrw(bus->sdiodev, false, addr, (uint8_t*)&sh_le,
@@ -988,6 +990,8 @@
         goto fail;
     }
 
+    sdio_release_host(bus->sdiodev->func1);
+
     /* Endianness */
     sh->flags = sh_le.flags;
     sh->trap_addr = sh_le.trap_addr;
@@ -1006,6 +1010,7 @@
 
 fail:
     brcmf_err("unable to obtain sdpcm_shared info: rv=%d (addr=0x%x)\n", rv, addr);
+    sdio_release_host(bus->sdiodev->func1);
     return rv;
 }
 
@@ -1020,6 +1025,10 @@
 static void brcmf_sdio_get_console_addr(struct brcmf_sdio* bus) {}
 #endif /* DEBUG */
 
+
+void brcmf_sdiod_func1_wlfff(struct brcmf_sdio_dev* sdiodev, uint32_t addr, uint32_t data,
+                          zx_status_t* ret);
+
 static uint32_t brcmf_sdio_hostmail(struct brcmf_sdio* bus) {
     struct brcmf_sdio_dev* sdiod = bus->sdiodev;
     struct brcmf_core* core = bus->sdio_core;
@@ -1029,15 +1038,19 @@
     zx_status_t ret;
 
     brcmf_dbg(SDIO, "Enter\n");
+        atomic_store(&dw_state, 231);
 
     /* Read mailbox data and ack that we did so */
     hmb_data = brcmf_sdiod_func1_rl(sdiod, core->base + SD_REG(tohostmailboxdata), &ret);
+        atomic_store(&dw_state, 2311);
 
     if (ret == ZX_OK) {
-        brcmf_sdiod_func1_wl(sdiod, core->base + SD_REG(tosbmailbox), SMB_INT_ACK, &ret);
+        brcmf_sdiod_func1_wlfff(sdiod, core->base + SD_REG(tosbmailbox), SMB_INT_ACK, &ret);
     }
+        atomic_store(&dw_state, 2312);
 
     bus->sdcnt.f1regdata += 2;
+        atomic_store(&dw_state, 232);
 
     /* dongle indicates the firmware has halted/crashed */
     if (hmb_data & HMB_DATA_FWHALT) {
@@ -1054,6 +1067,7 @@
         bus->rxskip = false;
         intstatus |= I_HMB_FRAME_IND;
     }
+        atomic_store(&dw_state, 233);
 
     /*
      * DEVREADY does not occur with gSPI.
@@ -1075,6 +1089,7 @@
          */
         brcmf_sdio_get_console_addr(bus);
     }
+        atomic_store(&dw_state, 234);
 
     /*
      * Flow Control has been moved into the RX headers and this out of band
@@ -1095,12 +1110,14 @@
         bus->sdcnt.fc_rcvd++;
         bus->flowcontrol = fcbits;
     }
+        atomic_store(&dw_state, 235);
 
     /* Shouldn't be any others */
     if (hmb_data & ~(HMB_DATA_DEVREADY | HMB_DATA_NAKHANDLED | HMB_DATA_FC | HMB_DATA_FWREADY |
                      HMB_DATA_FWHALT | HMB_DATA_FCDATA_MASK | HMB_DATA_VERSION_MASK)) {
         brcmf_err("Unknown mailbox data content: 0x%02x\n", hmb_data);
     }
+        atomic_store(&dw_state, 236);
 
     return intstatus;
 }
@@ -1113,8 +1130,9 @@
     uint8_t hi, lo;
     zx_status_t err;
 
-    brcmf_err("%sterminate frame%s\n", abort ? "abort command, " : "", rtx ? ", send NAK" : "");
-
+    THROTTLE(20,
+        brcmf_err("%sterminate frame%s\n", abort ? "abort command, " : "", rtx ? ", send NAK" : "");
+    )
     if (abort) {
         brcmf_sdiod_abort(bus->sdiodev, SDIO_FN_2);
     }
@@ -1141,7 +1159,7 @@
     if (!retries) {
         brcmf_err("count never zeroed: last 0x%04x\n", lastrbc);
     } else {
-        brcmf_dbg(SDIO, "flush took %d iterations\n", 0xffff - retries);
+        THROTTLE(20, brcmf_dbg(SDIO, "flush took %d iterations\n", 0xffff - retries););
     }
 
     if (rtx) {
@@ -1150,6 +1168,7 @@
 
         bus->sdcnt.f1regdata++;
         if (err == ZX_OK) {
+            brcmf_dbg(TEMP, "* * * SETTING rxskip TO TRUE * * *");
             bus->rxskip = true;
         }
     }
@@ -1275,15 +1294,15 @@
     //trace_brcmf_sdpcm_hdr(SDPCM_RX, header);
 
     /* hw header */
-    len = *(uint16_t*)&header;
-    checksum = *(uint16_t*)&header + sizeof(uint16_t);
+    len = *(uint16_t*)header;
+    checksum = *(uint16_t*)(header + sizeof(uint16_t));
     /* All zero means no more to read */
     if (!(len | checksum)) {
         bus->rxpending = false;
         return ZX_ERR_BUFFER_TOO_SMALL;
     }
     if ((uint16_t)(~(len ^ checksum))) {
-        brcmf_err("HW header checksum error\n");
+        THROTTLE(20, brcmf_err("HW header checksum error\n"););
         bus->sdcnt.rx_badhdr++;
         brcmf_sdio_rxfail(bus, false, false);
         return ZX_ERR_IO;
@@ -1508,16 +1527,20 @@
          * read directly into the chained packet, or allocate a large
          * packet and and copy into the chain.
          */
+        sdio_claim_host(bus->sdiodev->func1);
         errcode = brcmf_sdiod_recv_chain(bus->sdiodev, &bus->glom, dlen);
+        sdio_release_host(bus->sdiodev->func1);
         bus->sdcnt.f2rxdata++;
 
         /* On failure, kill the superframe */
         if (errcode != ZX_OK) {
             brcmf_err("glom read of %d bytes failed: %d\n", dlen, errcode);
 
+            sdio_claim_host(bus->sdiodev->func1);
             brcmf_sdio_rxfail(bus, true, false);
             bus->sdcnt.rxglomfail++;
             brcmf_sdio_free_glom(bus);
+            sdio_release_host(bus->sdiodev->func1);
             return 0;
         }
 
@@ -1526,7 +1549,9 @@
 
         rd_new.seq_num = rxseq;
         rd_new.len = dlen;
+        sdio_claim_host(bus->sdiodev->func1);
         errcode = brcmf_sdio_hdparse(bus, pfirst->data, &rd_new, BRCMF_SDIO_FT_SUPER);
+        sdio_release_host(bus->sdiodev->func1);
         bus->cur_read.len = rd_new.len_nxtfrm << 4;
 
         /* Remove superframe header, remember offset */
@@ -1543,7 +1568,9 @@
 
             rd_new.len = pnext->len;
             rd_new.seq_num = rxseq++;
+            sdio_claim_host(bus->sdiodev->func1);
             errcode = brcmf_sdio_hdparse(bus, pnext->data, &rd_new, BRCMF_SDIO_FT_SUB);
+            sdio_release_host(bus->sdiodev->func1);
             brcmf_dbg_hex_dump(BRCMF_GLOM_ON(), pnext->data, 32, "subframe:\n");
 
             num++;
@@ -1551,9 +1578,11 @@
 
         if (errcode != ZX_OK) {
             /* Terminate frame on error */
+            sdio_claim_host(bus->sdiodev->func1);
             brcmf_sdio_rxfail(bus, true, false);
             bus->sdcnt.rxglomfail++;
             brcmf_sdio_free_glom(bus);
+            sdio_release_host(bus->sdiodev->func1);
             bus->cur_read.len = 0;
             return 0;
         }
@@ -1600,7 +1629,10 @@
 static int brcmf_sdio_dcmd_resp_wait(struct brcmf_sdio* bus, bool* pending) {
     /* Wait until control frame is available */
     *pending = false; // TODO(cphoenix): Does signal_pending() have meaning in Garnet?
-    return sync_completion_wait(&bus->dcmd_resp_wait, ZX_MSEC(DCMD_RESP_TIMEOUT_MSEC));
+    zx_status_t result;
+    result = sync_completion_wait(&bus->dcmd_resp_wait, ZX_MSEC(DCMD_RESP_TIMEOUT_MSEC));
+    sync_completion_reset(&bus->dcmd_resp_wait);
+    return result;
 }
 
 static zx_status_t brcmf_sdio_dcmd_resp_wake(struct brcmf_sdio* bus) {
@@ -1614,7 +1646,7 @@
     uint8_t* rbuf;
     zx_status_t sdret;
 
-    brcmf_dbg(TRACE, "Enter\n");
+    //brcmf_dbg(TRACE, "Enter\n");
 
     if (bus->rxblen) {
         buf = calloc(1, bus->rxblen);
@@ -1679,7 +1711,7 @@
 
 gotpkt:
 
-    brcmf_dbg_hex_dump(BRCMF_BYTES_ON() && BRCMF_CTL_ON(), buf, len, "RxCtrl:\n");
+   // brcmf_dbg_hex_dump(BRCMF_BYTES_ON() && BRCMF_CTL_ON(), buf, len, "RxCtrl:\n");
 
     /* Point to valid data and indicate its length */
     //spin_lock_bh(&bus->rxctl_lock);
@@ -1727,7 +1759,7 @@
     struct brcmf_sdio_hdrinfo rd_new;
     uint8_t head_read = 0;
 
-    brcmf_dbg(TRACE, "Enter\n");
+   // THROTTLE(20, brcmf_dbg(TRACE, "Enter\n"););
 
     /* Not finished unless we encounter no more frames indication */
     bus->rxpending = true;
@@ -1749,6 +1781,7 @@
 
         rd->len_left = rd->len;
         /* read header first for unknow frame length */
+        sdio_claim_host(bus->sdiodev->func1);
         if (!rd->len) {
             ret = brcmf_sdiod_recv_buf(bus->sdiodev, bus->rxhdr, BRCMF_FIRSTREAD);
             bus->sdcnt.f2rxhdrs++;
@@ -1756,13 +1789,16 @@
                 brcmf_err("RXHEADER FAILED: %d\n", ret);
                 bus->sdcnt.rx_hdrfail++;
                 brcmf_sdio_rxfail(bus, true, true);
+                sdio_release_host(bus->sdiodev->func1);
                 continue;
             }
 
-            brcmf_dbg_hex_dump(BRCMF_BYTES_ON() || BRCMF_HDRS_ON(), bus->rxhdr, SDPCM_HDRLEN,
-                               "RxHdr:\n");
+    //        THROTTLE(20,
+      //          brcmf_dbg_hex_dump(BRCMF_BYTES_ON() || BRCMF_HDRS_ON(), bus->rxhdr, SDPCM_HDRLEN,
+        //                       "RxHdr:\n"););
 
             if (brcmf_sdio_hdparse(bus, bus->rxhdr, rd, BRCMF_SDIO_FT_NORMAL) != ZX_OK) {
+                sdio_release_host(bus->sdiodev->func1);
                 if (!bus->rxpending) {
                     break;
                 } else {
@@ -1777,6 +1813,7 @@
                 rd->len_nxtfrm = 0;
                 /* treat all packet as event if we don't know */
                 rd->channel = SDPCM_EVENT_CHANNEL;
+                sdio_release_host(bus->sdiodev->func1);
                 continue;
             }
             rd->len_left = rd->len > BRCMF_FIRSTREAD ? rd->len - BRCMF_FIRSTREAD : 0;
@@ -1790,6 +1827,7 @@
             /* Give up on data, request rtx of events */
             brcmf_err("brcmu_pkt_buf_get_netbuf failed\n");
             brcmf_sdio_rxfail(bus, false, RETRYCHAN(rd->channel));
+            sdio_release_host(bus->sdiodev->func1);
             continue;
         }
         brcmf_netbuf_shrink_head(pkt, head_read);
@@ -1797,52 +1835,65 @@
 
         ret = brcmf_sdiod_recv_pkt(bus->sdiodev, pkt);
         bus->sdcnt.f2rxdata++;
+        sdio_release_host(bus->sdiodev->func1);
 
         if (ret != ZX_OK) {
             brcmf_err("read %d bytes from channel %d failed: %d\n", rd->len, rd->channel, ret);
             brcmu_pkt_buf_free_netbuf(pkt);
+            sdio_claim_host(bus->sdiodev->func1);
             brcmf_sdio_rxfail(bus, true, RETRYCHAN(rd->channel));
+            sdio_release_host(bus->sdiodev->func1);
             continue;
         }
-
+      //  brcmf_dbg(TEMP, "head_read %d", head_read);
         if (head_read) {
             brcmf_netbuf_grow_head(pkt, head_read);
             memcpy(pkt->data, bus->rxhdr, head_read);
             head_read = 0;
+            //brcmf_dbg(TEMP, "Got here 2");
         } else {
             memcpy(bus->rxhdr, pkt->data, SDPCM_HDRLEN);
             rd_new.seq_num = rd->seq_num;
+            sdio_claim_host(bus->sdiodev->func1);
             if (brcmf_sdio_hdparse(bus, bus->rxhdr, &rd_new, BRCMF_SDIO_FT_NORMAL) != ZX_OK) {
                 rd->len = 0;
                 brcmu_pkt_buf_free_netbuf(pkt);
             }
+          //  brcmf_dbg(TEMP, "Got here 25");
             bus->sdcnt.rx_readahead_cnt++;
             if (rd->len != roundup(rd_new.len, 16)) {
                 brcmf_err("frame length mismatch:read %d, should be %d\n", rd->len,
                           roundup(rd_new.len, 16) >> 4);
                 rd->len = 0;
                 brcmf_sdio_rxfail(bus, true, true);
+                sdio_release_host(bus->sdiodev->func1);
                 brcmu_pkt_buf_free_netbuf(pkt);
+          //  brcmf_dbg(TEMP, "Got here 3");
                 continue;
             }
+            sdio_release_host(bus->sdiodev->func1);
             rd->len_nxtfrm = rd_new.len_nxtfrm;
             rd->channel = rd_new.channel;
             rd->dat_offset = rd_new.dat_offset;
 
-            brcmf_dbg_hex_dump(!(BRCMF_BYTES_ON() && BRCMF_DATA_ON()) && BRCMF_HDRS_ON(),
-                               bus->rxhdr, SDPCM_HDRLEN, "RxHdr:\n");
+         //   brcmf_dbg_hex_dump(!(BRCMF_BYTES_ON() && BRCMF_DATA_ON()) && BRCMF_HDRS_ON(),
+          //                     bus->rxhdr, SDPCM_HDRLEN, "RxHdr:\n");
 
             if (rd_new.channel == SDPCM_CONTROL_CHANNEL) {
                 brcmf_err("readahead on control packet %d?\n", rd_new.seq_num);
                 /* Force retry w/normal header read */
                 rd->len = 0;
+                sdio_claim_host(bus->sdiodev->func1);
                 brcmf_sdio_rxfail(bus, false, true);
+                sdio_release_host(bus->sdiodev->func1);
                 brcmu_pkt_buf_free_netbuf(pkt);
+         //   brcmf_dbg(TEMP, "Got here 4");
                 continue;
             }
         }
+       // brcmf_dbg(TEMP, "Got here 56");
 
-        brcmf_dbg_hex_dump(BRCMF_BYTES_ON() && BRCMF_DATA_ON(), pkt->data, rd->len, "Rx Data:\n");
+  //      brcmf_dbg_hex_dump(BRCMF_BYTES_ON() && BRCMF_DATA_ON(), pkt->data, rd->len, "Rx Data:\n");
 
         /* Save superframe descriptor and allocate packet frame */
         if (rd->channel == SDPCM_GLOM_CHANNEL) {
@@ -1857,7 +1908,9 @@
                     "%s: glom superframe w/o "
                     "descriptor!\n",
                     __func__);
+                sdio_claim_host(bus->sdiodev->func1);
                 brcmf_sdio_rxfail(bus, false, false);
+                sdio_release_host(bus->sdiodev->func1);
             }
             /* prepare the descriptor for the next read */
             rd->len = rd->len_nxtfrm << 4;
@@ -1889,9 +1942,9 @@
     rxcount = maxframes - rxleft;
     /* Message if we hit the limit */
     if (!rxleft) {
-        brcmf_dbg(DATA, "hit rx limit of %d frames\n", maxframes);
+        THROTTLE(20, brcmf_dbg(DATA, "hit rx limit of %d frames\n", maxframes););
     } else {
-        brcmf_dbg(DATA, "processed %d frames\n", rxcount);
+       // brcmf_dbg(DATA, "processed %d frames\n", rxcount);
     }
     /* Back off rxseq if awaiting rtx, update rx_seq */
     if (bus->rxskip) {
@@ -2135,6 +2188,7 @@
         goto done;
     }
 
+    sdio_claim_host(bus->sdiodev->func1);
     ret = brcmf_sdiod_send_pkt(bus->sdiodev, pktq);
     bus->sdcnt.f2txdata++;
 
@@ -2142,6 +2196,7 @@
         brcmf_sdio_txfail(bus);
     }
 
+    sdio_release_host(bus->sdiodev->func1);
 
 done:
     brcmf_sdio_txpkt_postp(bus, pktq);
@@ -2199,7 +2254,9 @@
         /* In poll mode, need to check for other events */
         if (!bus->intr) {
             /* Check device status, signal pending interrupt */
+            sdio_claim_host(bus->sdiodev->func1);
             intstatus = brcmf_sdiod_func1_rl(bus->sdiodev, intstat_addr, &ret);
+            sdio_release_host(bus->sdiodev->func1);
 
             bus->sdcnt.f2txdata++;
             if (ret != ZX_OK) {
@@ -2228,8 +2285,7 @@
     // TODO(cphoenix): ret, err, rv, error, status - more consistency is better.
     zx_status_t ret;
 
-    brcmf_dbg(TRACE, "Enter\n"); PAUSE;
-    brcmf_dbg(TRACE, "Enterrr\n");
+    //brcmf_dbg(TRACE, "Enter\n");
 
     /* Back the pointer to make room for bus header */
     frame -= bus->tx_hdrlen;
@@ -2261,34 +2317,26 @@
     hd_info.seq_num = bus->tx_seq;
     hd_info.lastfrm = true;
     hd_info.tail_pad = pad;
-    brcmf_dbg(TRACE, "Ente2r\n");
     brcmf_sdio_hdpack(bus, frame, &hd_info);
 
-    brcmf_dbg(TRACE, "3Enter\n");
     if (bus->txglom) {
         brcmf_sdio_update_hwhdr(frame, len);
     }
-    brcmf_dbg(TRACE, "4Enter\n");
 
-    brcmf_dbg_hex_dump(BRCMF_BYTES_ON() && BRCMF_CTL_ON(), frame, len, "Tx Frame:\n");
-    brcmf_dbg_hex_dump(!(BRCMF_BYTES_ON() && BRCMF_CTL_ON()) && BRCMF_HDRS_ON(), frame,
-                       min_t(uint16_t, len, 16), "TxHdr:\n");
+//    brcmf_dbg_hex_dump(BRCMF_BYTES_ON() && BRCMF_CTL_ON(), frame, len, "Tx Frame:\n");
+  //  brcmf_dbg_hex_dump(!(BRCMF_BYTES_ON() && BRCMF_CTL_ON()) && BRCMF_HDRS_ON(), frame,
+    //                   min_t(uint16_t, len, 16), "TxHdr:\n");
 
     do {
-    brcmf_dbg(TRACE, "Ente5r\n");
-    //gl_compare_now = true;
         ret = brcmf_sdiod_send_buf(bus->sdiodev, frame, len);
-    brcmf_dbg(TRACE, "Ente6\n");
 
         if (ret != ZX_OK) {
-    brcmf_dbg(TRACE, "Ente7r\n");
             brcmf_sdio_txfail(bus);
-    brcmf_dbg(TRACE, "Ente8r\n");
         } else {
             bus->tx_seq = (bus->tx_seq + 1) % SDPCM_SEQ_WRAP;
         }
     } while (ret != ZX_OK && retries++ < TXRETRIES);
-    brcmf_dbg(TRACE, "Entexxxxr\n");
+    //brcmf_dbg(TRACE, "Exit\n");
 
     return ret;
 }
@@ -2315,6 +2363,7 @@
     }
 
     if (sdiodev->state != BRCMF_SDIOD_NOMEDIUM) {
+        sdio_claim_host(sdiodev->func1);
 
         /* Enable clock for device interrupts */
         brcmf_sdio_bus_sleep(bus, false, false);
@@ -2342,6 +2391,7 @@
         /* Clear any pending interrupts now that F2 is disabled */
         brcmf_sdiod_func1_wl(sdiodev, core->base + SD_REG(intstatus), local_hostintmask, NULL);
 
+        sdio_release_host(sdiodev->func1);
     }
     /* Clear the data packet queues */
     brcmu_pktq_flush(&bus->txq, true, NULL, NULL);
@@ -2373,7 +2423,6 @@
     uint32_t addr;
     unsigned long val;
     zx_status_t ret;
-    static int times = 0;
 
     brcmf_sdio_bus_sleep(bus, false, true);
 
@@ -2385,13 +2434,9 @@
         return ret;
     }
 
-    times++;
-    if (times < 10 || (times & 0x3ff) == 0) {
-        brcmf_err("core->base 0x%x, SD_REG(int) 0x%lx\n", core->base, SD_REG(intstatus));
-        brcmf_err("times %d, val %lx, intmask %x\n", times, val, bus->hostintmask);
-    }
+ //   THROTTLE(20, brcmf_dbg(TEMP, "val 0x%lx, hostmask 0x%x", val, bus->hostintmask););
     val &= bus->hostintmask;
-    atomic_store(&bus->fcstate, !!(val & I_HMB_FC_STATE));
+    atomic_store(&bus->fcstate, !!(val & I_HMB_FC_STATE)); // Flow Control, 0x10
 
     /* Clear interrupts */
     if (val) {
@@ -2413,11 +2458,12 @@
     uint framecnt;               /* Temporary counter of tx/rx frames */
     zx_status_t err = ZX_OK;
 
-    //brcmf_dbg(TRACE, "Enter\n");
+  //  THROTTLE(20, brcmf_dbg(TRACE, "Enter\n"););
         atomic_store(&dw_state, 11);
 
     bool save_print_sdio = print_sdio;
     print_sdio = false;
+    sdio_claim_host(bus->sdiodev->func1);
 
     /* If waiting for HTAVAIL, check status */
     if (!bus->sr_enabled && bus->clkstate == CLK_PENDING) {
@@ -2469,7 +2515,7 @@
      * crossed another change interrupt.  If change still set, assume
      * FC ON for safety, let next loop through do the debounce.
      */
-    if (intstatus & I_HMB_FC_CHANGE) {
+    if (intstatus & I_HMB_FC_CHANGE) { // 0x20
                 atomic_store(&dw_state, 21);
 
         intstatus &= ~I_HMB_FC_CHANGE;
@@ -2486,12 +2532,14 @@
         atomic_store(&dw_state, 23);
 
     /* Handle host mailbox indication */
-    if (intstatus & I_HMB_HOST_INT) {
+    if (intstatus & I_HMB_HOST_INT) { // 0x80
         intstatus &= ~I_HMB_HOST_INT;
         intstatus |= brcmf_sdio_hostmail(bus);
     }
         atomic_store(&dw_state, 24);
 
+    sdio_release_host(bus->sdiodev->func1);
+
     /* Generally don't ask for these, can get CRC errors... */
     if (intstatus & I_WR_OOSYNC) {
         brcmf_err("Dongle reports WR_OOSYNC\n");
@@ -2513,7 +2561,7 @@
         brcmf_dbg(INFO, "Dongle reports CHIPACTIVE\n");
         intstatus &= ~I_CHIPACTIVE;
     }
-
+    //THROTTLE(100, brcmf_dbg(TEMP, "rxskip %d, FRAME_IND 0x%lx", bus->rxskip, intstatus & I_HMB_FRAME_IND););
     /* Ignore frame indications if rxskip is set */
     if (bus->rxskip) {
         intstatus &= ~I_HMB_FRAME_IND;
@@ -2521,6 +2569,7 @@
         atomic_store(&dw_state, 25);
 
     /* On frame indication, read available frames */
+    // I_HMB_FRAME_IND = (1 << 6)
     if ((intstatus & I_HMB_FRAME_IND) && (bus->clkstate == CLK_AVAIL)) {
                 atomic_store(&dw_state, 26);
 
@@ -2539,15 +2588,20 @@
 
     if (atomic_load(&bus->ctrl_frame_stat) && (bus->clkstate == CLK_AVAIL) && data_ok(bus)) {
                 atomic_store(&dw_state, 28);
+        sdio_claim_host(bus->sdiodev->func1);
+        if (atomic_load(&bus->ctrl_frame_stat)) {
 
-        err = brcmf_sdio_tx_ctrlframe(bus, bus->ctrl_frame_buf, bus->ctrl_frame_len);
-        bus->ctrl_frame_err = err;
-        atomic_thread_fence(memory_order_seq_cst);
-        atomic_store(&bus->ctrl_frame_stat, false);
+            err = brcmf_sdio_tx_ctrlframe(bus, bus->ctrl_frame_buf, bus->ctrl_frame_len);
+            bus->ctrl_frame_err = err;
+            atomic_thread_fence(memory_order_seq_cst);
+            atomic_store(&bus->ctrl_frame_stat, false);
                 atomic_store(&dw_state, 29);
-        brcmf_dbg(TEMP, "Wait event wakeup...");
+        }
+        sdio_release_host(bus->sdiodev->func1);
+
+        //brcmf_dbg(TEMP, "Wait event wakeup...");
         brcmf_sdio_wait_event_wakeup(bus);
-        brcmf_dbg(TEMP, "Woke up");
+        //brcmf_dbg(TEMP, "Woke up");
                 atomic_store(&dw_state, 30);
 
     }
@@ -2570,12 +2624,14 @@
         atomic_store(&bus->intstatus, 0);
         atomic_store(&dw_state, 35);
         if (atomic_load(&bus->ctrl_frame_stat)) {
+            sdio_claim_host(bus->sdiodev->func1);
                 atomic_store(&dw_state, 36);
             bus->ctrl_frame_err = ZX_ERR_IO_REFUSED;
             atomic_thread_fence(memory_order_seq_cst);
             atomic_store(&bus->ctrl_frame_stat, false);
             brcmf_sdio_wait_event_wakeup(bus);
                     atomic_store(&dw_state, 37);
+            sdio_release_host(bus->sdiodev->func1);
 
         }
                 atomic_store(&dw_state, 38);
@@ -2709,7 +2765,7 @@
     uint32_t n, idx, addr;
     zx_status_t rv;
 
-    brcmf_dbg(TEMP, "Got into readconsole");
+    //brcmf_dbg(TEMP, "Got into readconsole");
     /* Don't do anything until FWREADY updates console address */
     if (bus->console_addr == 0) {
         brcmf_dbg(TEMP, "Console not ready yet: console_addr is 0");
@@ -2719,11 +2775,11 @@
     /* Read console log struct */
     addr = bus->console_addr + offsetof(struct rte_console, log_le);
     rv = brcmf_sdiod_ramrw(bus->sdiodev, false, addr, (uint8_t*)&c->log_le, sizeof(c->log_le));
-    brcmf_dbg(TEMP, "log struct read: addr 0x%x, rv %d", addr, rv);
+//    brcmf_dbg(TEMP, "log struct read: addr 0x%x, rv %d", addr, rv);
     if (rv != ZX_OK) {
         return rv;
     }
-    brcmf_dbg(TEMP, "log_le.buf_size is %d 0x%x", c->log_le.buf_size, c->log_le.buf_size);
+  //  brcmf_dbg(TEMP, "log_le.buf_size is %d 0x%x", c->log_le.buf_size, c->log_le.buf_size);
 
     /* Allocate console buffer (one time only) */
     if (c->buf == NULL) {
@@ -2798,12 +2854,13 @@
     struct brcmf_sdio* bus = sdiodev->bus;
     zx_status_t ret;
 
-    brcmf_dbg(TRACE, "Enter\n");
+   // brcmf_dbg(TRACE, "Enter\n");
     if (sdiodev->state != BRCMF_SDIOD_DATA) {
         return ZX_ERR_IO;
     }
 
     /* Send from dpc */
+    sync_completion_reset(&bus->ctrl_wait);
     bus->ctrl_frame_buf = msg;
     bus->ctrl_frame_len = msglen;
     atomic_thread_fence(memory_order_seq_cst);
@@ -2813,13 +2870,18 @@
     sync_completion_wait(&bus->ctrl_wait, ZX_MSEC(CTL_DONE_TIMEOUT_MSEC));
     ret = ZX_OK;
     if (atomic_load(&bus->ctrl_frame_stat)) {
-        brcmf_dbg(SDIO, "ctrl_frame timeout\n");
-        atomic_store(&bus->ctrl_frame_stat, false);
-        ret = ZX_ERR_SHOULD_WAIT;
+        sdio_claim_host(bus->sdiodev->func1);
+        if (atomic_load(&bus->ctrl_frame_stat)) {
+            brcmf_dbg(SDIO, "ctrl_frame timeout\n");
+            atomic_store(&bus->ctrl_frame_stat, false);
+            ret = ZX_ERR_SHOULD_WAIT;
+        }
+        sdio_release_host(bus->sdiodev->func1);
     }
     if (ret == ZX_OK) {
-        brcmf_dbg(SDIO, "ctrl_frame complete, err=%d\n", bus->ctrl_frame_err);
-        PAUSE; brcmf_dbg(SDIO, "aaactrl_frame complete, err=%d\n", bus->ctrl_frame_err);
+        if (bus->ctrl_frame_err != ZX_OK) {
+            brcmf_dbg(SDIO, "ctrl_frame complete, err=%d\n", bus->ctrl_frame_err);
+        }
         atomic_thread_fence(memory_order_seq_cst);
         ret = bus->ctrl_frame_err;
     }
@@ -2938,6 +3000,7 @@
         return ZX_OK;
     }
 
+    sdio_claim_host(bus->sdiodev->func1);
     if (sh->assert_file_addr != 0) {
         error = brcmf_sdiod_ramrw(bus->sdiodev, false, sh->assert_file_addr, (uint8_t*)file, 80);
         if (error != ZX_OK) {
@@ -2950,6 +3013,7 @@
             return error;
         }
     }
+    sdio_release_host(bus->sdiodev->func1);
 
     seq_printf(seq, "dongle assert: %s:%d: assert(%s)\n", file, sh->assert_line, expr);
     return ZX_OK;
@@ -3073,7 +3137,7 @@
     struct brcmf_sdio_dev* sdiodev = bus_if->bus_priv.sdio;
     struct brcmf_sdio* bus = sdiodev->bus;
 
-    brcmf_dbg(TRACE, "Enter\n");
+    //brcmf_dbg(TRACE, "Enter\n");
     if (sdiodev->state != BRCMF_SDIOD_DATA) {
         return ZX_ERR_IO;
     }
@@ -3094,7 +3158,9 @@
     free(buf);
 
     if (rxlen) {
-        brcmf_dbg(CTL, "resumed on rxctl frame, got %d expected %d\n", rxlen, msglen);
+        if (rxlen != msglen) {
+            brcmf_dbg(CTL, "resumed on rxctl frame, got %d expected %d\n", rxlen, msglen);
+        }
     } else if (timeout) {
         brcmf_err("resumed on timeout\n");
         brcmf_sdio_checkdied(bus);
@@ -3222,12 +3288,13 @@
     zx_status_t bcmerror = 0;
     uint32_t rstvec;
 
+    sdio_claim_host(bus->sdiodev->func1);
     brcmf_sdio_clkctl(bus, CLK_AVAIL, false);
 
     rstvec = *(uint32_t*)fw->data;
     brcmf_dbg(SDIO, "firmware rstvec: %x\n", rstvec);
     print_sdio = false;
-    //atomic_store(&gl_writing_firmware, true);
+    atomic_store(&gl_writing_firmware, true);
     remember_sdio(3, 0xffff, 1, &bcmerror, 4, 0);
 
     bcmerror = brcmf_sdio_download_code_file(bus, fw);
@@ -3263,6 +3330,7 @@
 
 err:
     brcmf_sdio_clkctl(bus, CLK_SDONLY, false);
+    sdio_release_host(bus->sdiodev->func1);
     return bcmerror;
 }
 
@@ -3348,7 +3416,7 @@
      * a device perspective, ie. bus:txglom affects the
      * bus transfers from device to host.
      */
-    if (core->rev < 12) {
+    if (1 || core->rev < 12) {
         /* for sdio core rev < 12, disable txgloming */
         value = 0;
         err = brcmf_iovar_data_set(dev, "bus:txglom", &value, sizeof(uint32_t));
@@ -3357,6 +3425,7 @@
         value = sdiodev->settings->bus.sdio.sd_sgentry_align;
         /* SDIO ADMA requires at least 32 bit alignment */
         value = max(value, ALIGNMENT);
+        value = 0; // TODO(cphoenix): Get glomming working
         err = brcmf_iovar_data_set(dev, "bus:txglomalign", &value, sizeof(uint32_t));
     }
 
@@ -3394,6 +3463,7 @@
     address = bus->ci->rambase;
     offset = 0;
     err = ZX_OK;
+    sdio_claim_host(sdiodev->func1);
     while (offset < mem_size) {
         len = ((offset + MEMBLOCK) < mem_size) ? MEMBLOCK : mem_size - offset;
         err = brcmf_sdiod_ramrw(sdiodev, false, address, data, len);
@@ -3407,13 +3477,14 @@
     }
 
 done:
+    sdio_release_host(sdiodev->func1);
     return err;
 }
 
 void brcmf_sdio_trigger_dpc(struct brcmf_sdio* bus) {
     if (!atomic_load(&bus->dpc_triggered)) {
         atomic_store(&bus->dpc_triggered, true);
-        brcmf_dbg(TEMP, "About to call workqueue_schedule");
+        //brcmf_dbg(TEMP, "About to call workqueue_schedule");
         workqueue_schedule(bus->brcmf_wq, &bus->datawork);
     } else {
         brcmf_dbg(TEMP, "trigger_dpc found it already triggered!");
@@ -3445,8 +3516,40 @@
 
 }
 
+void brcmf_debug_check_console() {
+    zx_status_t result;
+    sdio_claim_host(gl_sdio_bus->sdiodev->func1);
+    /* Make sure backplane clock is on */
+    brcmf_sdio_bus_sleep(gl_sdio_bus, false, false);
+    //brcmf_dbg(TEMP, "Trying readconsole");
+    result = brcmf_sdio_readconsole(gl_sdio_bus);
+    if (result != ZX_OK) { /* stop on error */
+        brcmf_dbg(TEMP, "Got error %d reading console", result);
+    }
+    sdio_release_host(gl_sdio_bus->sdiodev->func1);
+
+}
+
+void brcmf_sdio_event_handler(struct brcmf_sdio* bus);
+
 static void brcmf_sdio_bus_watchdog(struct brcmf_sdio* bus) {
-    //brcmf_dbg(TIMER, "Enter\n");
+    //THROTTLE(20, brcmf_dbg(TIMER, "Enter\n"););
+
+    uint32_t intstatus;
+    intstatus = atomic_load(&bus->intstatus);
+    if (intstatus == 0) {
+        sdio_claim_host(bus->sdiodev->func1);
+        if (brcmf_sdio_intr_rstatus(bus)) {
+            brcmf_err("failed backplane access\n");
+        }
+        sdio_release_host(bus->sdiodev->func1);
+    }
+    intstatus = atomic_load(&bus->intstatus);
+    if (intstatus != 0) {
+        atomic_store(&bus->dpc_triggered, true);
+      //  THROTTLE(20, brcmf_dbg(TEMP, "Calling event handler: intstatus is 0x%x", intstatus););
+        brcmf_sdio_event_handler(bus);
+    }
 
     /* Poll period: check device if appropriate. */
     if (!bus->sr_enabled && bus->poll && (++bus->polltick >= bus->pollrate)) {
@@ -3460,8 +3563,12 @@
             if (!atomic_load(&bus->dpc_triggered)) {
                 uint8_t devpend;
 
+                sdio_claim_host(bus->sdiodev->func1);
+
                 devpend = brcmf_sdiod_func0_rb(bus->sdiodev, SDIO_CCCR_INTx, NULL);
+                sdio_release_host(bus->sdiodev->func1);
                 intstatus = devpend & (INTR_STATUS_FUNC1 | INTR_STATUS_FUNC2);
+                THROTTLE(20, brcmf_dbg(TEMP, "intstatus 0x%x", intstatus););
             }
 
             /* If there is something, make like the ISR and
@@ -3484,15 +3591,19 @@
         bus->console.count += BRCMF_WD_POLL_MSEC;
         if (bus->console.count >= bus->console_interval) {
             bus->console.count -= bus->console_interval;
+            sdio_claim_host(bus->sdiodev->func1);
             /* Make sure backplane clock is on */
             brcmf_sdio_bus_sleep(bus, false, false);
             if (brcmf_sdio_readconsole(bus) != ZX_OK) { /* stop on error */
                 bus->console_interval = 0;
             }
+            sdio_release_host(bus->sdiodev->func1);
         }
     }
 #endif /* DEBUG */
 
+// TODO(cphoenix): Turn "idle" back on once things are working, and see if anything breaks.
+#ifdef DO_IDLE
     /* On idle timeout clear activity flag and/or turn off clock */
     if (!atomic_load(&bus->dpc_triggered)) {
         atomic_thread_fence(memory_order_seq_cst);
@@ -3500,9 +3611,11 @@
             bus->idlecount++;
             if (bus->idlecount > bus->idletime) {
                 brcmf_dbg(SDIO, "idle\n");
+                sdio_claim_host(bus->sdiodev->func1);
                 brcmf_sdio_wd_timer(bus, false);
                 bus->idlecount = 0;
                 brcmf_sdio_bus_sleep(bus, true, false);
+                sdio_release_host(bus->sdiodev->func1);
             }
         } else {
             bus->idlecount = 0;
@@ -3510,25 +3623,19 @@
     } else {
         bus->idlecount = 0;
     }
+#endif // DO_IDLE
 }
 
-extern thrd_t gl_worker_thread;
-static void brcmf_sdio_dataworker(struct work_struct* work) {
-    struct brcmf_sdio* bus = containerof(work, struct brcmf_sdio, datawork);
-    gl_worker_thread = thrd_current();
-    // We need this since dataworker can be called from both ISR and workqueue.
+void brcmf_sdio_event_handler(struct brcmf_sdio* bus) {
     atomic_store(&dw_state, 1);
     atomic_fetch_add(&dw_count, 1);
+    // We need this since dataworker can be called from both ISR and workqueue.
     static mtx_t lock = {}; //MTX_INIT;
-    atomic_store(&dw_state, 2);
 
-    if (atomic_load(&bus->doing_txctl)) {
-        brcmf_dbg(TEMP, "Got to dataworker while doing txctl");
-    }
+    atomic_store(&dw_state, 2);
     mtx_lock(&lock);
-    if (atomic_load(&bus->doing_txctl)) {
-        brcmf_dbg(TEMP, "past mutex while doing txctl");
-    }
+    atomic_store(&dw_state, 211);
+
     bus->dpc_running = true;
     atomic_thread_fence(memory_order_seq_cst);
     while (atomic_load(&bus->dpc_triggered)) {
@@ -3550,6 +3657,42 @@
     atomic_store(&dw_state, 0);
 }
 
+extern thrd_t gl_worker_thread;
+static void brcmf_sdio_dataworker(struct work_struct* work) {
+    struct brcmf_sdio* bus = containerof(work, struct brcmf_sdio, datawork);
+    gl_worker_thread = thrd_current();
+    brcmf_sdio_event_handler(bus);
+}
+
+extern thrd_t gl_interrupt_thread;
+int brcmf_sdio_oob_irqhandler(void* cookie) {
+    struct brcmf_sdio_dev* sdiodev = cookie;
+    zx_status_t status;
+    uint32_t intstatus;
+
+    gl_interrupt_thread = thrd_current();
+    while ((status = zx_interrupt_wait(sdiodev->irq_handle, NULL)) == ZX_OK) {
+        THROTTLE(20, brcmf_dbg(INTR, "OOB intr triggered"););
+        sdio_claim_host(sdiodev->func1);
+        if (brcmf_sdio_intr_rstatus(sdiodev->bus)) {
+            brcmf_err("failed backplane access\n");
+        }
+        intstatus = atomic_load(&sdiodev->bus->intstatus);
+        atomic_store(&sdiodev->bus->dpc_triggered, true);
+        brcmf_sdio_event_handler(sdiodev->bus);
+        sdio_release_host(sdiodev->func1);
+        if (intstatus == 0) {
+            THROTTLE(20, brcmf_dbg(TEMP, "Zero intstatus; pausing 5 msec"););
+            zx_nanosleep(zx_deadline_after(ZX_MSEC(5)));
+        }
+        THROTTLE(20, brcmf_dbg(INTR, "Done with OOB intr"););
+    }
+
+    brcmf_err("ISR exiting with status %s\n", zx_status_get_string(status));
+    return (int)status;
+}
+
+
 static void brcmf_sdio_drivestrengthinit(struct brcmf_sdio_dev* sdiodev, struct brcmf_chip* ci,
                                          uint32_t drivestrength) {
     const struct sdiod_drive_str* str_tab = NULL;
@@ -3713,6 +3856,8 @@
     .write32 = brcmf_sdio_buscore_write32,
 };
 
+//#define DEBUG_RUNNER
+#ifdef DEBUG_RUNNER
 pthread_t debug_thread;
 static void* debug_runner(void* foo) {
     brcmf_dbg(TEMP, "Debug runner started");
@@ -3722,17 +3867,20 @@
     }
     return NULL;
 }
+#endif // DEBUG_RUNNER
 
 extern void psr();
 
-/*
+#define PTHREAD_PRINTER
+#ifdef PTHREAD_PRINTER
 pthread_t sdio_thread;
 static void* sdio_printer(void* foo) {
     brcmf_dbg(TEMP, "SDIO printer started");
-    zx_nanosleep(zx_deadline_after(ZX_SEC(15)));
+    zx_nanosleep(zx_deadline_after(ZX_SEC(1000)));
     psr();
     return NULL;
-}*/
+}
+#endif // PTHREAD_PRINTER
 
 struct brcmf_sdio_dev* gl_sdiodev;
 void* gl_firmware;
@@ -3753,9 +3901,14 @@
     uint32_t drivestrength;
 
     sdiodev = bus->sdiodev;
+    sdio_claim_host(sdiodev->func1);
 
+#ifdef DEBUG_RUNNER
     pthread_create(&debug_thread, NULL, debug_runner, NULL);
-   // pthread_create(&sdio_thread, NULL, sdio_printer, NULL);
+#endif // DEBUG_RUNNER
+#ifdef PTHREAD_PRINTER
+    pthread_create(&sdio_thread, NULL, sdio_printer, NULL);
+#endif // PTHREAD_PRINTER
 
 /*    brcmf_dbg(TEMP, " * * * Running SDIO test * * * *");
     gl_sdiodev = sdiodev;
@@ -3880,6 +4033,8 @@
         goto fail;
     }
 
+    sdio_release_host(sdiodev->func1);
+
     brcmu_pktq_init(&bus->txq, (PRIOMASK + 1), TXQLEN);
 
     /* allocate header buffer */
@@ -3901,15 +4056,27 @@
     return true;
 
 fail:
+    sdio_release_host(sdiodev->func1);
     brcmf_dbg(TEMP, "* * FAIL");
     return false;
 }
 
-extern thrd_t gl_watchdog_thread;
+extern thrd_t gl_bus_watchdog_thread, gl_watchdog_thread;
 static void* brcmf_sdio_watchdog_thread(void* data) {
     struct brcmf_sdio* bus = (struct brcmf_sdio*)data;
+    struct brcmf_core* core = bus->sdio_core;
+    uint32_t addr;
+    uint32_t val;
+    zx_status_t ret;
 
-    gl_watchdog_thread = thrd_current();
+    THROTTLE(20,
+        brcmf_sdio_bus_sleep(bus, false, true);
+        addr = core->base + SD_REG(intstatus);
+        val = brcmf_sdiod_func1_rl(bus->sdiodev, addr, &ret);
+        brcmf_dbg(TEMP, "Watchdog sees intstatus 0x%x", val);
+    );
+
+    gl_bus_watchdog_thread = thrd_current();
     /* Run until signal received */
     brcmf_sdiod_freezer_count(bus->sdiodev);
     while (1) {
@@ -3917,10 +4084,17 @@
             break;
         }
         brcmf_sdiod_freezer_uncount(bus->sdiodev);
-        sync_completion_wait(&bus->watchdog_wait, ZX_TIME_INFINITE);
-        brcmf_sdiod_freezer_count(bus->sdiodev);
-        brcmf_sdiod_try_freeze(bus->sdiodev);
-        brcmf_sdio_bus_watchdog(bus);
+        // Currently we're depending on watchdog for all interrupt handling.
+        //sync_completion_wait(&bus->watchdog_wait, ZX_TIME_INFINITE);
+        zx_nanosleep(zx_deadline_after(ZX_MSEC(10)));
+        if (atomic_load(&bus->wd_active)) {
+   //         THROTTLE(150, brcmf_dbg(TEMP, "Watchdog active"););
+            brcmf_sdiod_freezer_count(bus->sdiodev);
+            brcmf_sdiod_try_freeze(bus->sdiodev);
+            brcmf_sdio_bus_watchdog(bus);
+        } else {
+     //       THROTTLE(150, brcmf_dbg(TEMP, "Watchdog inactive"););
+        }
         /* Count the tick for reference */
         bus->sdcnt.tickcnt++;
         sync_completion_reset(&bus->watchdog_wait);
@@ -3928,26 +4102,25 @@
     return NULL;
 }
 
-extern bool gl_intr_print;
 static void brcmf_sdio_watchdog(void* data) {
-    static int times = 3;
-    if (gl_intr_print) {
-        times = 3;
-        gl_intr_print = false;
-    }
-    if (times) brcmf_dbg(TEMP, "Enter");
+    gl_watchdog_thread = thrd_current();
+  //  THROTTLE(20, brcmf_dbg(TEMP, "Enter"););
     pthread_mutex_lock(&irq_callback_lock);
     struct brcmf_sdio* bus = data;
 
     if (bus->watchdog_tsk) {
+        // Currently signaling watchdog_wait does nothing; brcmf_sdio_watchdog_thread() will
+        // wake up every 10 msec regardless, and do its thing if bus->wd_active is true. This
+        // is because we're currently depending on watchdog for interrupt handling, and the
+        // watchdog was being activated too frequently - because, ironically, each time it
+        // was turned on, it reset the timer for 10 msec in the future. So, bypass all that logic.
         sync_completion_signal(&bus->watchdog_wait);
         /* Reschedule the watchdog */
-        if (bus->wd_active) {
+        if (atomic_load(&bus->wd_active)) {
             brcmf_timer_set(&bus->timer, ZX_MSEC(BRCMF_WD_POLL_MSEC));
         }
     }
     pthread_mutex_unlock(&irq_callback_lock);
-    if (times) times--;
 }
 
 static zx_status_t brcmf_sdio_get_fwname(struct brcmf_device* dev, uint32_t chip, uint32_t chiprev,
@@ -4014,6 +4187,7 @@
 
     // Magic 200 ms pause here, because 100ms worked in the hard-coded debug recipe.
     zx_nanosleep(zx_deadline_after(ZX_MSEC(200)));
+    sdio_claim_host(sdiodev->func1);
 
     /* Make sure backplane clock is on, needed to generate F2 interrupt */
     bus->clkstate = CLK_NONE; // TEMP FOR DEBUG
@@ -4074,32 +4248,39 @@
     brcmf_dbg(TEMP, "Readshared returned %d", err);
     bus->console_addr = sh.console_addr;
     brcmf_dbg(TEMP, "console_addr 0x%x", bus->console_addr);
+    gl_sdio_bus = bus;
     brcmf_sdio_readconsole(bus);
     brcmf_dbg(TEMP, "Should have seen readconsole output");
     //brcmf_dbg(TEMP, "About to pause 100 sec to avoid interrupts - wait for SDIO printout.");
   //zx_nanosleep(zx_deadline_after(ZX_SEC(100)));
     if (err == ZX_OK) {
         /* Allow full data communication using DPC from now on. */
-        brcmf_dbg(TEMP, "About to change_state() (after 100 msec pause)"); PAUSE; PAUSE;
+        //brcmf_dbg(TEMP, "About to change_state() (after 100 msec pause)"); PAUSE; PAUSE;
         brcmf_sdiod_change_state(bus->sdiodev, BRCMF_SDIOD_DATA);
-        PAUSE; PAUSE; brcmf_dbg(TEMP, "Did change_state() (100 msec ago)");
+        brcmf_sdio_wd_timer(bus, true); // Won't take effect until state is BRCMF_SDIOD_DATA
 
-        brcmf_dbg(TEMP, "About to intr_register() (after 100 msec pause)"); PAUSE; PAUSE;
+        //PAUSE; PAUSE; brcmf_dbg(TEMP, "Did change_state() (100 msec ago)");
+
+        //brcmf_dbg(TEMP, "About to intr_register() (after 100 msec pause)"); PAUSE; PAUSE;
         err = brcmf_sdiod_intr_register(sdiodev);
         if (err != ZX_OK) {
             brcmf_err("intr register failed:%d\n", err);
         }
     }
-        brcmf_dbg(SDIO, "Done, register OOB IRQ\n"); PAUSE; PAUSE;
+        brcmf_dbg(SDIO, "Done, register OOB IRQ\n");
 
     /* If we didn't come up, turn off backplane clock */
     if (err != ZX_OK) {
-        brcmf_dbg(SDIO, "Err, register OOB IRQ\n"); PAUSE; PAUSE;
+        brcmf_dbg(SDIO, "Err %d on register OOB IRQ\n", err);
         brcmf_sdio_clkctl(bus, CLK_NONE, false);
     }
-        brcmf_dbg(SDIO, "BusStarted\n"); PAUSE; PAUSE;
+    sdio_release_host(sdiodev->func1);
+     //PAUSE; PAUSE;
+        brcmf_dbg(SDIO, " * * Did interrupts and released host.\n");
 
-        brcmf_dbg(SDIO, " * * Really, BusStarted\n"); PAUSE; PAUSE;
+        //brcmf_dbg(SDIO, "BusStarted\n"); PAUSE; PAUSE;
+
+        brcmf_dbg(SDIO, " * * Really, BusStarted\n");// PAUSE; PAUSE;
     /*uint32_t addr = 0x18005020;
     brcmf_dbg(TEMP, "aReading interrupt reg: 0x%x\n", brcmf_sdiod_func1_rl(bus->sdiodev, addr, NULL));
     brcmf_err("bReading interrupt reg: 0x%x\n", brcmf_sdiod_func1_rl(bus->sdiodev, addr, NULL));
@@ -4110,6 +4291,8 @@
  //   psr();
   //  brcmf_dbg(TEMP, "last_here cpfwe cpfwe apfwce bpfwce");
   //  PAUSE; brcmf_dbg(TEMP, "aaaalast_here cpfwe cpfwe apfwce bpfwce");
+
+
     err = brcmf_bus_started(dev);
     if (err != ZX_OK) {
         brcmf_err("dongle is not responding\n");
@@ -4118,6 +4301,7 @@
     return;
 
 release:
+    sdio_release_host(sdiodev->func1);
 fail:
     brcmf_dbg(TRACE, "failed: dev=%s, err=%d\n", device_get_name(dev->zxdev), err);
     // TODO(cphoenix): Do the right calls here to release the driver
@@ -4221,6 +4405,8 @@
         }
     }
 
+    sdio_claim_host(bus->sdiodev->func1);
+
     /* Disable F2 to clear any intermediate frame state on the dongle */
     sdio_disable_fn(&bus->sdiodev->sdio_proto, SDIO_FN_2);
 
@@ -4229,6 +4415,8 @@
     /* Done with backplane-dependent accesses, can drop clock... */
     brcmf_sdiod_func1_wb(bus->sdiodev, SBSDIO_FUNC1_CHIPCLKCSR, 0, NULL);
 
+    sdio_release_host(bus->sdiodev->func1);
+
     /* ...and initialize clock/power states */
     bus->clkstate = CLK_SDONLY;
     bus->idletime = BRCMF_IDLE_INTERVAL;
@@ -4278,6 +4466,7 @@
 
         if (bus->ci) {
             if (bus->sdiodev->state != BRCMF_SDIOD_NOMEDIUM) {
+                sdio_claim_host(bus->sdiodev->func1);
                 brcmf_sdio_wd_timer(bus, false);
                 brcmf_sdio_clkctl(bus, CLK_AVAIL, false);
                 /* Leave the device in state where it is
@@ -4287,6 +4476,7 @@
                 msleep(20);
                 brcmf_chip_set_passive(bus->ci);
                 brcmf_sdio_clkctl(bus, CLK_NONE, false);
+                sdio_release_host(bus->sdiodev->func1);
             }
             brcmf_chip_detach(bus->ci);
         }
@@ -4304,27 +4494,30 @@
 
 void brcmf_sdio_wd_timer(struct brcmf_sdio* bus, bool active) {
     /* Totally stop the timer */
-    if (!active && bus->wd_active) {
+    if (!active && atomic_load(&bus->wd_active)) {
         brcmf_timer_stop(&bus->timer);
-        bus->wd_active = false;
+        atomic_store(&bus->wd_active, false);
         return;
     }
 
     /* don't start the wd until fw is loaded */
     if (bus->sdiodev->state != BRCMF_SDIOD_DATA) {
+        THROTTLE(20, brcmf_dbg(TEMP, "WD would be active, but state is %d", bus->sdiodev->state););
         return;
     }
 
     if (active) {
         brcmf_timer_set(&bus->timer, ZX_MSEC(BRCMF_WD_POLL_MSEC));
-        bus->wd_active = true;
+        atomic_store(&bus->wd_active, true);
     }
 }
 
 zx_status_t brcmf_sdio_sleep(struct brcmf_sdio* bus, bool sleep) {
     zx_status_t ret;
 
+    sdio_claim_host(bus->sdiodev->func1);
     ret = brcmf_sdio_bus_sleep(bus, sleep, false);
+    sdio_release_host(bus->sdiodev->func1);
 
     return ret;
 }
diff --git a/drivers/wlan/third_party/broadcom/brcmfmac/sdio.h b/drivers/wlan/third_party/broadcom/brcmfmac/sdio.h
index 47b850f..99a2bd4 100644
--- a/drivers/wlan/third_party/broadcom/brcmfmac/sdio.h
+++ b/drivers/wlan/third_party/broadcom/brcmfmac/sdio.h
@@ -188,6 +188,8 @@
 struct brcmf_sdiod_freezer;
 
 struct brcmf_sdio_dev {
+    struct sdio_func *func1;
+    struct sdio_func *func2;
     uint32_t manufacturer_id;
     uint32_t product_id;
     sdio_protocol_t sdio_proto;
@@ -401,5 +403,6 @@
 void brcmf_sdio_wowl_config(struct brcmf_device* dev, bool enabled);
 zx_status_t brcmf_sdio_sleep(struct brcmf_sdio* bus, bool sleep);
 void brcmf_sdio_trigger_dpc(struct brcmf_sdio* bus);
+int brcmf_sdio_oob_irqhandler(void* cookie);
 
 #endif /* BRCMFMAC_SDIO_H */
diff --git a/drivers/wlan/third_party/broadcom/brcmfmac/tracepoint.c b/drivers/wlan/third_party/broadcom/brcmfmac/tracepoint.c
index aadeb61..b223c6f 100644
--- a/drivers/wlan/third_party/broadcom/brcmfmac/tracepoint.c
+++ b/drivers/wlan/third_party/broadcom/brcmfmac/tracepoint.c
@@ -21,6 +21,10 @@
 #ifndef __CHECKER__
 #define CREATE_TRACE_POINTS
 #include "debug.h"
+#include <threads.h>
+
+extern thrd_t gl_interrupt_thread, gl_main_thread, gl_worker_thread, gl_watchdog_thread,
+       gl_bus_watchdog_thread, gl_workqueue_runner_thread;
 
 void __brcmf_err(const char* func, const char* fmt, ...) {
     char msg[512]; // Same value hard-coded throughout devhost.c
@@ -31,10 +35,30 @@
     va_end(args);
     if (n_printed < 0) {
         snprintf(msg, 512, "(Formatting error from string '%s')", fmt);
-        } else if (n_printed > 0 && msg[n_printed - 1] == '\n') {
-            msg[--n_printed] = 0;
-        }
-    zxlogf(INFO, "brcmfmac ERROR(%s): '%s'\n", func, msg);
+    } else if (n_printed > 0 && msg[n_printed - 1] == '\n') {
+        msg[--n_printed] = 0;
+    }
+    char namebuf[64];
+    char* name;
+    thrd_t thread = thrd_current();
+    if (thread == gl_interrupt_thread) {
+        name = "intr";
+    } else if (thread == gl_worker_thread) {
+        name = "work";
+    } else if (thread == gl_watchdog_thread) {
+        name = "wdog";
+    } else if (thread == gl_workqueue_runner_thread) {
+        name = "wrun";
+    } else if (thread == gl_bus_watchdog_thread) {
+        name = "bwdg";
+    } else if (thread == gl_main_thread) {
+        name = "main";
+    } else {
+        sprintf(namebuf, "%p", thread);
+        name = namebuf;
+    }
+
+    zxlogf(INFO, "brcmfmac %s ERROR(%s): '%s'\n", name, func, msg);
 }
 
 #endif
diff --git a/drivers/wlan/third_party/broadcom/brcmfmac/workqueue.c b/drivers/wlan/third_party/broadcom/brcmfmac/workqueue.c
index be97144..d927136 100644
--- a/drivers/wlan/third_party/broadcom/brcmfmac/workqueue.c
+++ b/drivers/wlan/third_party/broadcom/brcmfmac/workqueue.c
@@ -151,14 +151,15 @@
         brcmf_dbg(TEMP, "Work to be canceled not found");
     }
 }
-
+thrd_t gl_workqueue_runner_thread;
 static void* workqueue_runner(void* arg) {
     struct workqueue_struct* workqueue = (struct workqueue_struct*) arg;
+    gl_workqueue_runner_thread = thrd_current();
 
     while(1) {
         sync_completion_wait(&workqueue->work_ready, ZX_TIME_INFINITE);
         sync_completion_reset(&workqueue->work_ready);
-        brcmf_dbg(TEMP, "Got work!");
+        //brcmf_dbg(TEMP, "Got work!");
         struct work_struct* work;
         list_node_t* item;
         mtx_lock(&workqueue->lock);