diff --git a/kern/drivers/net/bxe/bxe.c b/kern/drivers/net/bxe/bxe.c
index 21eca85..a5b1468 100644
--- a/kern/drivers/net/bxe/bxe.c
+++ b/kern/drivers/net/bxe/bxe.c
@@ -2308,6 +2308,7 @@
 {
     struct eth_spe *next_spe = sc->spq_prod_bd;
 
+static int cnt = 0;
     if (sc->spq_prod_bd == sc->spq_last_bd) {
         /* wrap back to the first eth_spq */
         sc->spq_prod_bd = sc->spq;
@@ -2317,6 +2318,7 @@
         sc->spq_prod_idx++;
     }
 
+printk("SP_GET_NEXT, cnt %d, ret %p, spq %p\n", cnt++, next_spe, sc->spq);
     return (next_spe);
 }
 
@@ -2333,6 +2335,8 @@
      */
     mb();
 
+printk("ABOUT TO WRITE %p to reg %p\n", sc->spq_prod_idx,
+       (BAR_XSTRORM_INTMEM + XSTORM_SPQ_PROD_OFFSET(func)));
     REG_WR16(sc, (BAR_XSTRORM_INTMEM + XSTORM_SPQ_PROD_OFFSET(func)),
              sc->spq_prod_idx);
 
@@ -2389,6 +2393,7 @@
     uint16_t type;
     int common;
 
+printk("SP POST, cmd %d, cid %d hi %08x lo %08x\n", command, cid, data_hi, data_lo);
     common = bxe_is_contextless_ramrod(command, cmd_type);
 
     BXE_SP_LOCK(sc);
@@ -2435,8 +2440,8 @@
         atomic_add(&sc->cq_spq_left, -1);
     }
 
-    BLOGD(sc, DBG_SP, "SPQE -> %#jx\n", (uintmax_t)sc->spq_dma.paddr);
-    BLOGD(sc, DBG_SP, "FUNC_RDATA -> %p / %#jx\n",
+    BLOGD(sc, DBG_SP, "SPE %p, SPQE -> %p\n", spe, (uintmax_t)sc->spq_dma.paddr);
+    BLOGD(sc, DBG_SP, "FUNC_RDATA -> %p / %p\n",
           BXE_SP(sc, func_rdata), (uintmax_t)BXE_SP_MAPPING(sc, func_rdata));
     BLOGD(sc, DBG_SP,
           "SPQE[%x] (%x:%x) (cmd, common?) (%d,%d) hw_cid %x data (%x:%x) type(0x%x) left (CQ, EQ) (%lx,%lx)\n",
@@ -11789,6 +11794,7 @@
 
     q_params.q_obj = &BXE_SP_OBJ(sc, fp).q_obj;
 
+I_AM_HERE;
     /* we want to wait for completion in this context */
     bxe_set_bit(RAMROD_COMP_WAIT, &q_params.ramrod_flags);
 
@@ -11798,8 +11804,10 @@
     /* Set the command */
     q_params.cmd = ECORE_Q_CMD_INIT;
 
+I_AM_HERE;
     /* Change the state to INIT */
     rc = ecore_queue_state_change(sc, &q_params);
+I_AM_HERE;  // made it here
     if (rc) {
         BLOGE(sc, "Queue(%d) INIT failed\n", fp->index);
         return (rc);
@@ -11813,23 +11821,28 @@
     /* set Queue flags */
     setup_params->flags = bxe_get_q_flags(sc, fp, leading);
 
+I_AM_HERE;
     /* set general SETUP parameters */
     bxe_pf_q_prep_general(sc, fp, &setup_params->gen_params,
                           FIRST_TX_COS_INDEX);
+I_AM_HERE;
 
     bxe_pf_rx_q_prep(sc, fp,
                      &setup_params->pause_params,
                      &setup_params->rxq_params);
 
+I_AM_HERE;
     bxe_pf_tx_q_prep(sc, fp,
                      &setup_params->txq_params,
                      FIRST_TX_COS_INDEX);
 
+I_AM_HERE;
     /* Set the command */
     q_params.cmd = ECORE_Q_CMD_SETUP;
 
-    /* change the state to SETUP */
+    /* change the state to SETUP */// XME GO IN HERE
     rc = ecore_queue_state_change(sc, &q_params);
+I_AM_HERE; // never get here
     if (rc) {
         BLOGE(sc, "Queue(%d) SETUP failed\n", fp->index);
         return (rc);
@@ -12335,8 +12348,10 @@
     uint16_t req_line_speed = sc->link_params.req_line_speed[cfg_idx];
     struct elink_params *lp = &sc->link_params;
 
+I_AM_HERE;
     bxe_set_requested_fc(sc);
 
+I_AM_HERE;
     if (CHIP_REV_IS_SLOW(sc)) {
         uint32_t bond = CHIP_BOND_ID(sc);
         uint32_t feat = 0;
@@ -12366,6 +12381,7 @@
     }
 
     BXE_PHY_LOCK(sc);
+I_AM_HERE;
 
     if (load_mode == LOAD_DIAG) {
         lp->loopback_mode = ELINK_LOOPBACK_XGXS;
@@ -12384,12 +12400,15 @@
         lp->loopback_mode = ELINK_LOOPBACK_EXT;
     }
 
+I_AM_HERE;
     rc = elink_phy_init(&sc->link_params, &sc->link_vars);
 
+I_AM_HERE;
     BXE_PHY_UNLOCK(sc);
 
     bxe_calc_fc_adv(sc);
 
+I_AM_HERE;
     if (sc->link_vars.link_up) {
         bxe_stats_handle(sc, STATS_EVENT_LINK_UP);
         bxe_link_report(sc);
@@ -12803,6 +12822,8 @@
         bxe_ilt_set_info(sc);
     }
 
+I_AM_HERE;
+
 //    sc->last_reported_link_state = LINK_STATE_UNKNOWN;
 
     bxe_set_fp_rx_buf_size(sc);
@@ -12815,21 +12836,25 @@
     }
 
 
+I_AM_HERE;
     if (bxe_alloc_mem(sc) != 0) {
         sc->state = BXE_STATE_CLOSED;
         rc = ENOMEM;
         goto bxe_nic_load_error0;
     }
 
+I_AM_HERE;
     if (bxe_alloc_fw_stats_mem(sc) != 0) {
         sc->state = BXE_STATE_CLOSED;
         rc = ENOMEM;
         goto bxe_nic_load_error0;
     }
 
+I_AM_HERE;
     if (IS_PF(sc)) {
         /* set pf load just before approaching the MCP */
         bxe_set_pf_load(sc);
+I_AM_HERE;
 
         /* if MCP exists send load request and analyze response */
         if (!BXE_NOMCP(sc)) {
@@ -12840,6 +12865,7 @@
                 goto bxe_nic_load_error1;
             }
 
+I_AM_HERE;
             /* what did the MCP say? */
             if (bxe_nic_load_analyze_req(sc, load_code) != 0) {
                 bxe_fw_command(sc, DRV_MSG_CODE_LOAD_DONE, 0);
@@ -12851,13 +12877,16 @@
             BLOGI(sc, "Device has no MCP!\n");
             load_code = bxe_nic_load_no_mcp(sc);
         }
+I_AM_HERE;
 
         /* mark PMF if applicable */
         bxe_nic_load_pmf(sc, load_code);
+I_AM_HERE;
 
         /* Init Function state controlling object */
         bxe_init_func_obj(sc);
 
+I_AM_HERE;
         /* Initialize HW */
         if (bxe_init_hw(sc, load_code) != 0) {
             BLOGE(sc, "HW init failed\n");
@@ -12866,6 +12895,7 @@
             rc = ENXIO;
             goto bxe_nic_load_error2;
         }
+I_AM_HERE;
     }
 
     /* attach interrupts */
@@ -12875,8 +12905,10 @@
         goto bxe_nic_load_error2;
     }
 
+I_AM_HERE;
     bxe_nic_init(sc, load_code);
 
+I_AM_HERE;
     /* Init per-function objects */
     if (IS_PF(sc)) {
         bxe_init_objs(sc);
@@ -12886,8 +12918,10 @@
         sc->devinfo.mf_info.afex_def_vlan_tag = -1;
         // XXX bxe_nic_load_afex_dcc(sc, load_code);
 
+I_AM_HERE;
         sc->state = BXE_STATE_OPENING_WAITING_PORT;
         rc = bxe_func_start(sc);
+I_AM_HERE;
         if (rc) {
             BLOGE(sc, "Function start failed!\n");
             bxe_fw_command(sc, DRV_MSG_CODE_LOAD_DONE, 0);
@@ -12895,8 +12929,9 @@
             goto bxe_nic_load_error3;
         }
 
+I_AM_HERE;
         /* send LOAD_DONE command to MCP */
-        if (!BXE_NOMCP(sc)) {
+        if (!BXE_NOMCP(sc)) {// lllllllllllllllll
             load_code = bxe_fw_command(sc, DRV_MSG_CODE_LOAD_DONE, 0);
             if (!load_code) {
                 BLOGE(sc, "MCP response failure, aborting\n");
@@ -12906,6 +12941,7 @@
             }
         }
 
+I_AM_HERE;
         rc = bxe_setup_leading(sc);
         if (rc) {
             BLOGE(sc, "Setup leading failed!\n");
@@ -12913,6 +12949,7 @@
             goto bxe_nic_load_error3;
         }
 
+I_AM_HERE;
         FOR_EACH_NONDEFAULT_ETH_QUEUE(sc, i) {
             rc = bxe_setup_queue(sc, &sc->fp[i], FALSE);
             if (rc) {
@@ -12922,6 +12959,7 @@
             }
         }
 
+I_AM_HERE;
         rc = bxe_init_rss_pf(sc);
         if (rc) {
             BLOGE(sc, "PF RSS init failed\n");
@@ -12945,6 +12983,7 @@
 
     /* now when Clients are configured we are ready to work */
     sc->state = BXE_STATE_OPEN;
+I_AM_HERE;
 
     /* Configure a ucast MAC */
     if (IS_PF(sc)) {
@@ -12968,6 +13007,7 @@
         sc->pending_max = 0;
     }
 #endif
+I_AM_HERE;
 
     if (sc->port.pmf) {
         rc = bxe_initial_phy_init(sc, /* XXX load_mode */LOAD_OPEN);
@@ -12979,6 +13019,7 @@
 
     sc->link_params.feature_config_flags &=
         ~ELINK_FEATURE_CONFIG_BOOT_FROM_SAN;
+I_AM_HERE;
 
     /* start fast path */
 
@@ -12999,6 +13040,7 @@
     default:
         break;
     }
+I_AM_HERE;
 
     if (sc->port.pmf) {
         bxe_update_drv_flags(sc, 1 << DRV_FLAGS_PORT_MASK, 0);
@@ -13008,6 +13050,7 @@
 
     /* start the periodic timer alarm */
     bxe_periodic_start(sc);
+I_AM_HERE;
 
     if (IS_PF(sc) && SHMEM2_HAS(sc, drv_capabilities_flag)) {
         /* mark driver is loaded in shmem2 */
@@ -16267,7 +16310,7 @@
 
     sc->state = BXE_STATE_CLOSED;
 
-	/* what is this? */
+	/* what is this? brho: seems like the device id number.  used in prints */
     //sc->unit = device_get_unit(dev);
 
     BLOGD(sc, DBG_LOAD, "softc = %p\n", sc);
diff --git a/kern/drivers/net/bxe/ecore_sp.c b/kern/drivers/net/bxe/ecore_sp.c
index 7a3c114..c59f706 100644
--- a/kern/drivers/net/bxe/ecore_sp.c
+++ b/kern/drivers/net/bxe/ecore_sp.c
@@ -4507,17 +4507,21 @@
 		return ECORE_INVAL;
 	}
 
+I_AM_HERE;
 	/* Set "pending" bit */
 	ECORE_MSG(sc, "pending bit was=%lx\n", o->pending);
 	pending_bit = o->set_pending(o, params);
 	ECORE_MSG(sc, "pending bit now=%lx\n", o->pending);
 
+I_AM_HERE;
 	/* Don't send a command if only driver cleanup was requested */
 	if (ECORE_TEST_BIT(RAMROD_DRV_CLR_ONLY, &params->ramrod_flags))
 		o->complete_cmd(sc, o, pending_bit);
 	else {
 		/* Send a ramrod */
+I_AM_HERE;
 		rc = o->send_cmd(sc, params);
+I_AM_HERE;
 		if (rc) {
 			o->next_state = ECORE_Q_STATE_MAX;
 			ECORE_CLEAR_BIT(pending_bit, pending);
@@ -4525,8 +4529,11 @@
 			return rc;
 		}
 
+I_AM_HERE;
 		if (ECORE_TEST_BIT(RAMROD_COMP_WAIT, &params->ramrod_flags)) {
+I_AM_HERE;
 			rc = o->wait_comp(sc, o, pending_bit);
+I_AM_HERE;
 			if (rc)
 				return rc;
 
@@ -4892,7 +4899,7 @@
 
 static inline int ecore_q_send_setup_e1x(struct bxe_adapter *sc,
 					struct ecore_queue_state_params *params)
-{
+{ // sending this fails XME
 	struct ecore_queue_sp_obj *o = params->q_obj;
 	struct client_init_ramrod_data *rdata =
 		(struct client_init_ramrod_data *)o->rdata;
@@ -5216,28 +5223,40 @@
 static inline int ecore_queue_send_cmd_cmn(struct bxe_adapter *sc,
 					struct ecore_queue_state_params *params)
 {
+I_AM_HERE;
 	switch (params->cmd) {
 	case ECORE_Q_CMD_INIT:
+I_AM_HERE;
 		return ecore_q_init(sc, params);
 	case ECORE_Q_CMD_SETUP_TX_ONLY:
+I_AM_HERE;
 		return ecore_q_send_setup_tx_only(sc, params);
 	case ECORE_Q_CMD_DEACTIVATE:
+I_AM_HERE;
 		return ecore_q_send_deactivate(sc, params);
 	case ECORE_Q_CMD_ACTIVATE:
+I_AM_HERE;
 		return ecore_q_send_activate(sc, params);
 	case ECORE_Q_CMD_UPDATE:
+I_AM_HERE;
 		return ecore_q_send_update(sc, params);
 	case ECORE_Q_CMD_UPDATE_TPA:
+I_AM_HERE;
 		return ecore_q_send_update_tpa(sc, params);
 	case ECORE_Q_CMD_HALT:
+I_AM_HERE;
 		return ecore_q_send_halt(sc, params);
 	case ECORE_Q_CMD_CFC_DEL:
+I_AM_HERE;
 		return ecore_q_send_cfc_del(sc, params);
 	case ECORE_Q_CMD_TERMINATE:
+I_AM_HERE;
 		return ecore_q_send_terminate(sc, params);
 	case ECORE_Q_CMD_EMPTY:
+I_AM_HERE;
 		return ecore_q_send_empty(sc, params);
 	default:
+I_AM_HERE;
 		ECORE_ERR("Unknown command: %d\n", params->cmd);
 		return ECORE_INVAL;
 	}
@@ -5246,8 +5265,10 @@
 static int ecore_queue_send_cmd_e1x(struct bxe_adapter *sc,
 				    struct ecore_queue_state_params *params)
 {
+I_AM_HERE;
 	switch (params->cmd) {
 	case ECORE_Q_CMD_SETUP:
+I_AM_HERE;
 		return ecore_q_send_setup_e1x(sc, params);
 	case ECORE_Q_CMD_INIT:
 	case ECORE_Q_CMD_SETUP_TX_ONLY:
@@ -5259,6 +5280,7 @@
 	case ECORE_Q_CMD_CFC_DEL:
 	case ECORE_Q_CMD_TERMINATE:
 	case ECORE_Q_CMD_EMPTY:
+I_AM_HERE;
 		return ecore_queue_send_cmd_cmn(sc, params);
 	default:
 		ECORE_ERR("Unknown command: %d\n", params->cmd);
@@ -5269,6 +5291,7 @@
 static int ecore_queue_send_cmd_e2(struct bxe_adapter *sc,
 				   struct ecore_queue_state_params *params)
 {
+I_AM_HERE;
 	switch (params->cmd) {
 	case ECORE_Q_CMD_SETUP:
 		return ecore_q_send_setup_e2(sc, params);
@@ -5539,6 +5562,7 @@
 {
 	ECORE_MEMSET(obj, 0, sizeof(*obj));
 
+I_AM_HERE;
 	/* We support only ECORE_MULTI_TX_COS Tx CoS at the moment */
 	ECORE_BUG_ON(ECORE_MULTI_TX_COS < cid_cnt);
 
@@ -5564,6 +5588,7 @@
 	obj->complete_cmd = ecore_queue_comp_cmd;
 	obj->wait_comp = ecore_queue_wait_comp;
 	obj->set_pending = ecore_queue_set_pending;
+printk("INIT QUEU OBJ, obj %p rdata %p mapping %p\n", obj, obj->rdata, obj->rdata_mapping);
 }
 
 /* return a queue object's logical state*/
@@ -6005,7 +6030,7 @@
 
 static inline int ecore_func_send_start(struct bxe_adapter *sc,
 					struct ecore_func_state_params *params)
-{
+{ // sending this works XME
 	struct ecore_func_sp_obj *o = params->f_obj;
 	struct function_start_data *rdata =
 		(struct function_start_data *)o->rdata;
@@ -6171,26 +6196,37 @@
 static int ecore_func_send_cmd(struct bxe_adapter *sc,
 			       struct ecore_func_state_params *params)
 {
+	I_AM_HERE;
 	switch (params->cmd) {
 	case ECORE_F_CMD_HW_INIT:
+	I_AM_HERE;
 		return ecore_func_hw_init(sc, params);
 	case ECORE_F_CMD_START:
+	I_AM_HERE; // w
 		return ecore_func_send_start(sc, params);
 	case ECORE_F_CMD_STOP:
+	I_AM_HERE;
 		return ecore_func_send_stop(sc, params);
 	case ECORE_F_CMD_HW_RESET:
+	I_AM_HERE;
 		return ecore_func_hw_reset(sc, params);
 	case ECORE_F_CMD_AFEX_UPDATE:
+	I_AM_HERE;
 		return ecore_func_send_afex_update(sc, params);
 	case ECORE_F_CMD_AFEX_VIFLISTS:
+	I_AM_HERE;
 		return ecore_func_send_afex_viflists(sc, params);
 	case ECORE_F_CMD_TX_STOP:
+	I_AM_HERE;
 		return ecore_func_send_tx_stop(sc, params);
 	case ECORE_F_CMD_TX_START:
+	I_AM_HERE;
 		return ecore_func_send_tx_start(sc, params);
 	case ECORE_F_CMD_SWITCH_UPDATE:
+	I_AM_HERE;
 		return ecore_func_send_switch_update(sc, params);
 	default:
+	I_AM_HERE;
 		ECORE_ERR("Unknown command: %d\n", params->cmd);
 		return ECORE_INVAL;
 	}
@@ -6206,6 +6242,7 @@
 
 	ECORE_MUTEX_INIT(&obj->one_pending_mutex);
 
+I_AM_HERE;
 	obj->rdata = rdata;
 	obj->rdata_mapping = rdata_mapping;
 	obj->afex_rdata = afex_rdata;
@@ -6215,6 +6252,7 @@
 	obj->complete_cmd = ecore_func_comp_cmd;
 	obj->wait_comp = ecore_func_wait_comp;
 	obj->drv = drv_iface;
+printk("INIT FUNC OBJ, obj %p rdata %p mapping %p\n", obj, obj->rdata, obj->rdata_mapping);
 }
 
 /**
diff --git a/kern/src/init.c b/kern/src/init.c
index 774181d..7980c8d 100644
--- a/kern/src/init.c
+++ b/kern/src/init.c
@@ -90,6 +90,8 @@
 	kb_buf_init(&cons_buf);
 	arch_init();
 	block_init();
+
+	printx_on = TRUE;
 	enable_irq();
 	run_linker_funcs();
 	/* reset/init devtab after linker funcs 3 and 4.  these run NIC and medium
diff --git a/kern/src/kdebug.c b/kern/src/kdebug.c
index 87f8132..ebe89ac 100644
--- a/kern/src/kdebug.c
+++ b/kern/src/kdebug.c
@@ -62,6 +62,16 @@
 	"limborexmit",
 	"rangecompare",
 	"walkadd",
+	"bxe_read_dmae",
+	"bxe_write_dmae",
+	"bxe_prep_dmae_with_comp",
+	"bxe_dmae_opcode",
+	"bxe_dmae_opcode_add_comp",
+	"bxe_issue_dmae_with_comp",
+	"bxe_post_dmae",
+	"ecore_write_dmae_phys_len",
+	"bxe_write_dmae_phys_len",
+	"bxe_dma_alloc",
 };
 
 static bool is_blacklisted(const char *s)
