BXE: last debugging attempts Keeping this around in case we need to come back.
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, ¶ms->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, ¶ms->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)