From 4216cdc0e3d90810e107473d875cba01f413b59f Mon Sep 17 00:00:00 2001 From: Chandu Babu N Date: Tue, 11 Feb 2020 13:49:39 +0530 Subject: [PATCH] net/axgbe: add debug logs Add debug logs in various modules in axgbe Signed-off-by: Chandu Babu N Acked-by: Ravi Kumar --- drivers/net/axgbe/axgbe_dev.c | 17 ++++++++-- drivers/net/axgbe/axgbe_ethdev.c | 2 ++ drivers/net/axgbe/axgbe_i2c.c | 10 ++++++ drivers/net/axgbe/axgbe_mdio.c | 51 +++++++++++++++++++++++++++++- drivers/net/axgbe/axgbe_phy_impl.c | 43 ++++++++++++++++++++++++- 5 files changed, 119 insertions(+), 4 deletions(-) diff --git a/drivers/net/axgbe/axgbe_dev.c b/drivers/net/axgbe/axgbe_dev.c index 83089f20da..2e796c0b35 100644 --- a/drivers/net/axgbe/axgbe_dev.c +++ b/drivers/net/axgbe/axgbe_dev.c @@ -260,6 +260,9 @@ static int axgbe_enable_tx_flow_control(struct axgbe_port *pdata) ehfc = 1; AXGMAC_MTL_IOWRITE_BITS(pdata, i, MTL_Q_RQOMR, EHFC, ehfc); + + PMD_DRV_LOG(DEBUG, "flow control %s for RXq%u\n", + ehfc ? "enabled" : "disabled", i); } /* Set MAC flow control */ @@ -915,6 +918,9 @@ static void axgbe_config_rx_fifo_size(struct axgbe_port *pdata) /*Calculate and config Flow control threshold*/ axgbe_calculate_flow_control_threshold(pdata); axgbe_config_flow_control_threshold(pdata); + + PMD_DRV_LOG(DEBUG, "%d Rx hardware queues, %d byte fifo per queue\n", + pdata->rx_q_count, q_fifo_size); } static void axgbe_config_tx_fifo_size(struct axgbe_port *pdata) @@ -938,6 +944,9 @@ static void axgbe_config_tx_fifo_size(struct axgbe_port *pdata) for (i = 0; i < pdata->tx_q_count; i++) AXGMAC_MTL_IOWRITE_BITS(pdata, i, MTL_Q_TQOMR, TQS, p_fifo); + + PMD_DRV_LOG(DEBUG, "%d Tx hardware queues, %d byte fifo per queue\n", + pdata->tx_q_count, q_fifo_size); } static void axgbe_config_queue_mapping(struct axgbe_port *pdata) @@ -952,12 +961,16 @@ static void axgbe_config_queue_mapping(struct axgbe_port *pdata) qptc_extra = pdata->tx_q_count % pdata->hw_feat.tc_cnt; for (i = 0, queue = 0; i < pdata->hw_feat.tc_cnt; i++) { - for (j = 0; j < qptc; j++) + for (j = 0; j < qptc; j++) { + PMD_DRV_LOG(DEBUG, "TXq%u mapped to TC%u\n", queue, i); AXGMAC_MTL_IOWRITE_BITS(pdata, queue, MTL_Q_TQOMR, Q2TCMAP, i); - if (i < qptc_extra) + } + if (i < qptc_extra) { + PMD_DRV_LOG(DEBUG, "TXq%u mapped to TC%u\n", queue, i); AXGMAC_MTL_IOWRITE_BITS(pdata, queue, MTL_Q_TQOMR, Q2TCMAP, i); + } } if (pdata->rss_enable) { diff --git a/drivers/net/axgbe/axgbe_ethdev.c b/drivers/net/axgbe/axgbe_ethdev.c index d0b6f091f0..7445c544d4 100644 --- a/drivers/net/axgbe/axgbe_ethdev.c +++ b/drivers/net/axgbe/axgbe_ethdev.c @@ -201,12 +201,14 @@ axgbe_dev_interrupt_handler(void *param) pdata->phy_if.an_isr(pdata); /*DMA related interrupts*/ dma_isr = AXGMAC_IOREAD(pdata, DMA_ISR); + PMD_DRV_LOG(DEBUG, "DMA_ISR=%#010x\n", dma_isr); if (dma_isr) { if (dma_isr & 1) { dma_ch_isr = AXGMAC_DMA_IOREAD((struct axgbe_rx_queue *) pdata->rx_queues[0], DMA_CH_SR); + PMD_DRV_LOG(DEBUG, "DMA_CH0_ISR=%#010x\n", dma_ch_isr); AXGMAC_DMA_IOWRITE((struct axgbe_rx_queue *) pdata->rx_queues[0], DMA_CH_SR, dma_ch_isr); diff --git a/drivers/net/axgbe/axgbe_i2c.c b/drivers/net/axgbe/axgbe_i2c.c index 204ec36798..ab3738a12e 100644 --- a/drivers/net/axgbe/axgbe_i2c.c +++ b/drivers/net/axgbe/axgbe_i2c.c @@ -162,9 +162,15 @@ static int axgbe_i2c_isr(struct axgbe_port *pdata) isr = XI2C_IOREAD(pdata, IC_RAW_INTR_STAT); + PMD_DRV_LOG(DEBUG, "I2C interrupt received: status=%#010x\n", isr); + axgbe_i2c_clear_isr_interrupts(pdata, isr); if (isr & AXGBE_INTR_TX_ABRT) { + PMD_DRV_LOG(DEBUG, + "I2C TX_ABRT received (%#010x) for target %#04x\n", + state->tx_abort_source, state->op->target); + axgbe_i2c_disable_interrupts(pdata); state->ret = -EIO; @@ -285,6 +291,8 @@ static void axgbe_i2c_stop(struct axgbe_port *pdata) if (!pdata->i2c.started) return; + PMD_DRV_LOG(DEBUG, "stopping I2C\n"); + pdata->i2c.started = 0; axgbe_i2c_disable_interrupts(pdata); axgbe_i2c_disable(pdata); @@ -296,6 +304,8 @@ static int axgbe_i2c_start(struct axgbe_port *pdata) if (pdata->i2c.started) return 0; + PMD_DRV_LOG(DEBUG, "starting I2C\n"); + pdata->i2c.started = 1; return 0; diff --git a/drivers/net/axgbe/axgbe_mdio.c b/drivers/net/axgbe/axgbe_mdio.c index 4b280b72d9..0f226c3f2b 100644 --- a/drivers/net/axgbe/axgbe_mdio.c +++ b/drivers/net/axgbe/axgbe_mdio.c @@ -300,6 +300,8 @@ static void axgbe_an73_restart(struct axgbe_port *pdata) { axgbe_an73_enable_interrupts(pdata); axgbe_an73_set(pdata, true, true); + + PMD_DRV_LOG(DEBUG, "CL73 AN enabled/restarted\n"); } static void axgbe_an73_disable(struct axgbe_port *pdata) @@ -307,6 +309,8 @@ static void axgbe_an73_disable(struct axgbe_port *pdata) axgbe_an73_set(pdata, false, false); axgbe_an73_disable_interrupts(pdata); pdata->an_start = 0; + + PMD_DRV_LOG(DEBUG, "CL73 AN disabled\n"); } static void axgbe_an_restart(struct axgbe_port *pdata) @@ -384,6 +388,8 @@ static enum axgbe_an axgbe_an73_tx_training(struct axgbe_port *pdata, XMDIO_WRITE(pdata, MDIO_MMD_PMAPMD, MDIO_PMA_10GBR_PMD_CTRL, reg); + PMD_DRV_LOG(DEBUG, "KR training initiated\n"); + if (pdata->phy_if.phy_impl.kr_training_post) pdata->phy_if.phy_impl.kr_training_post(pdata); } @@ -466,6 +472,9 @@ static enum axgbe_an axgbe_an73_page_received(struct axgbe_port *pdata) pdata->kx_state = AXGBE_RX_BPA; pdata->an_start = rte_get_timer_cycles(); + + PMD_DRV_LOG(NOTICE, + "CL73 AN timed out, resetting state\n"); } } @@ -515,6 +524,26 @@ static enum axgbe_an axgbe_an73_incompat_link(struct axgbe_port *pdata) return AXGBE_AN_INCOMPAT_LINK; } +static const char *axgbe_state_as_string(enum axgbe_an state) +{ + switch (state) { + case AXGBE_AN_READY: + return "Ready"; + case AXGBE_AN_PAGE_RECEIVED: + return "Page-Received"; + case AXGBE_AN_INCOMPAT_LINK: + return "Incompatible-Link"; + case AXGBE_AN_COMPLETE: + return "Complete"; + case AXGBE_AN_NO_LINK: + return "No-Link"; + case AXGBE_AN_ERROR: + return "Error"; + default: + return "Undefined"; + } +} + static void axgbe_an73_state_machine(struct axgbe_port *pdata) { enum axgbe_an cur_state = pdata->an_state; @@ -536,6 +565,9 @@ next_int: pdata->an_state = AXGBE_AN_ERROR; } + PMD_DRV_LOG(DEBUG, "CL73 AN : %s\n", + axgbe_state_as_string(pdata->an_state)); + again: cur_state = pdata->an_state; @@ -581,6 +613,9 @@ again: pdata->an_start = 0; if (pdata->phy_if.phy_impl.an_post) pdata->phy_if.phy_impl.an_post(pdata); + + PMD_DRV_LOG(DEBUG, "CL73 AN result: %s\n", + axgbe_state_as_string(pdata->an_result)); } if (cur_state != pdata->an_state) @@ -685,6 +720,8 @@ static void axgbe_an37_isr(struct axgbe_port *pdata) static void axgbe_an_isr(struct axgbe_port *pdata) { + PMD_DRV_LOG(DEBUG, "AN interrupt received\n"); + switch (pdata->an_mode) { case AXGBE_AN_MODE_CL73: case AXGBE_AN_MODE_CL73_REDRV: @@ -792,6 +829,8 @@ static void axgbe_an73_init(struct axgbe_port *pdata) reg &= ~AXGBE_XNP_NP_EXCHANGE; XMDIO_WRITE(pdata, MDIO_MMD_AN, MDIO_AN_ADVERTISE, reg); + + PMD_DRV_LOG(DEBUG, "CL73 AN initialized\n"); } static void axgbe_an_init(struct axgbe_port *pdata) @@ -843,6 +882,8 @@ static int axgbe_phy_config_fixed(struct axgbe_port *pdata) { enum axgbe_mode mode; + PMD_DRV_LOG(DEBUG, "fixed PHY configuration\n"); + /* Disable auto-negotiation */ axgbe_an_disable(pdata); @@ -886,6 +927,9 @@ static int __axgbe_phy_config_aneg(struct axgbe_port *pdata) ret = axgbe_phy_config_fixed(pdata); if (ret || !pdata->kr_redrv) return ret; + PMD_DRV_LOG(DEBUG, "AN redriver support\n"); + } else { + PMD_DRV_LOG(DEBUG, "AN PHY configuration\n"); } /* Disable auto-negotiation interrupt */ @@ -959,8 +1003,10 @@ static void axgbe_check_link_timeout(struct axgbe_port *pdata) link_timeout = pdata->link_check + (AXGBE_LINK_TIMEOUT * 2 * rte_get_timer_hz()); ticks = rte_get_timer_cycles(); - if (time_after(ticks, link_timeout)) + if (time_after(ticks, link_timeout)) { + PMD_DRV_LOG(NOTICE, "AN link timeout\n"); axgbe_phy_config_aneg(pdata); + } } static enum axgbe_mode axgbe_phy_status_aneg(struct axgbe_port *pdata) @@ -1088,6 +1134,7 @@ adjust_link: static void axgbe_phy_stop(struct axgbe_port *pdata) { + PMD_DRV_LOG(DEBUG, "stopping PHY\n"); if (!pdata->phy_started) return; /* Indicate the PHY is down */ @@ -1103,6 +1150,8 @@ static int axgbe_phy_start(struct axgbe_port *pdata) { int ret; + PMD_DRV_LOG(DEBUG, "starting PHY\n"); + ret = pdata->phy_if.phy_impl.start(pdata); if (ret) return ret; diff --git a/drivers/net/axgbe/axgbe_phy_impl.c b/drivers/net/axgbe/axgbe_phy_impl.c index a324a2bc90..02236ec192 100644 --- a/drivers/net/axgbe/axgbe_phy_impl.c +++ b/drivers/net/axgbe/axgbe_phy_impl.c @@ -790,6 +790,32 @@ static void axgbe_phy_sfp_reset(struct axgbe_phy_data *phy_data) phy_data->sfp_speed = AXGBE_SFP_SPEED_UNKNOWN; } +static const char *axgbe_base_as_string(enum axgbe_sfp_base sfp_base) +{ + switch (sfp_base) { + case AXGBE_SFP_BASE_1000_T: + return "1G_T"; + case AXGBE_SFP_BASE_1000_SX: + return "1G_SX"; + case AXGBE_SFP_BASE_1000_LX: + return "1G_LX"; + case AXGBE_SFP_BASE_1000_CX: + return "1G_CX"; + case AXGBE_SFP_BASE_10000_SR: + return "10G_SR"; + case AXGBE_SFP_BASE_10000_LR: + return "10G_LR"; + case AXGBE_SFP_BASE_10000_LRM: + return "10G_LRM"; + case AXGBE_SFP_BASE_10000_ER: + return "10G_ER"; + case AXGBE_SFP_BASE_10000_CR: + return "10G_CR"; + default: + return "Unknown"; + } +} + static void axgbe_phy_sfp_detect(struct axgbe_port *pdata) { struct axgbe_phy_data *phy_data = pdata->phy_data; @@ -820,6 +846,9 @@ static void axgbe_phy_sfp_detect(struct axgbe_port *pdata) axgbe_phy_sfp_parse_eeprom(pdata); axgbe_phy_sfp_external_phy(pdata); + PMD_DRV_LOG(DEBUG, "SFP Base: %s\n", + axgbe_base_as_string(phy_data->sfp_base)); + put: axgbe_phy_sfp_phy_settings(pdata); axgbe_phy_put_comm_ownership(pdata); @@ -1169,7 +1198,10 @@ static void axgbe_phy_set_redrv_mode(struct axgbe_port *pdata) static void axgbe_phy_start_ratechange(struct axgbe_port *pdata) { - if (!XP_IOREAD_BITS(pdata, XP_DRIVER_INT_RO, STATUS)) + /* Log if a previous command did not complete */ + if (XP_IOREAD_BITS(pdata, XP_DRIVER_INT_RO, STATUS)) + PMD_DRV_LOG(NOTICE, "firmware mailbox not ready for command\n"); + else return; } @@ -1185,6 +1217,7 @@ static void axgbe_phy_complete_ratechange(struct axgbe_port *pdata) rte_delay_us(1500); } + PMD_DRV_LOG(NOTICE, "firmware mailbox command did not complete\n"); } static void axgbe_phy_rrc(struct axgbe_port *pdata) @@ -1204,6 +1237,8 @@ static void axgbe_phy_rrc(struct axgbe_port *pdata) XP_IOWRITE_BITS(pdata, XP_DRIVER_INT_REQ, REQUEST, 1); axgbe_phy_complete_ratechange(pdata); + + PMD_DRV_LOG(DEBUG, "receiver reset complete\n"); } static void axgbe_phy_power_off(struct axgbe_port *pdata) @@ -1218,6 +1253,8 @@ static void axgbe_phy_power_off(struct axgbe_port *pdata) XP_IOWRITE_BITS(pdata, XP_DRIVER_INT_REQ, REQUEST, 1); axgbe_phy_complete_ratechange(pdata); phy_data->cur_mode = AXGBE_MODE_UNKNOWN; + + PMD_DRV_LOG(DEBUG, "phy powered off\n"); } static void axgbe_phy_sfi_mode(struct axgbe_port *pdata) @@ -1249,6 +1286,8 @@ static void axgbe_phy_sfi_mode(struct axgbe_port *pdata) XP_IOWRITE_BITS(pdata, XP_DRIVER_INT_REQ, REQUEST, 1); axgbe_phy_complete_ratechange(pdata); phy_data->cur_mode = AXGBE_MODE_SFI; + + PMD_DRV_LOG(DEBUG, "10GbE SFI mode set\n"); } static void axgbe_phy_kr_mode(struct axgbe_port *pdata) @@ -1271,6 +1310,8 @@ static void axgbe_phy_kr_mode(struct axgbe_port *pdata) XP_IOWRITE_BITS(pdata, XP_DRIVER_INT_REQ, REQUEST, 1); axgbe_phy_complete_ratechange(pdata); phy_data->cur_mode = AXGBE_MODE_KR; + + PMD_DRV_LOG(DEBUG, "10GbE KR mode set\n"); } static void axgbe_phy_kx_2500_mode(struct axgbe_port *pdata) -- 2.20.1