FW reconfiguration timeouts are a common indicator of FW trouble.
To make debugging easier print requested update and control word
when reconfiguration fails.

Signed-off-by: Jakub Kicinski <[email protected]>
Reviewed-by: Dirk van der Merwe <[email protected]>
---
 drivers/net/ethernet/netronome/nfp/nfp_net.h        | 2 ++
 drivers/net/ethernet/netronome/nfp/nfp_net_common.c | 9 +++++++--
 2 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/netronome/nfp/nfp_net.h 
b/drivers/net/ethernet/netronome/nfp/nfp_net.h
index 5a9a6178cf26..be37c2d6151c 100644
--- a/drivers/net/ethernet/netronome/nfp/nfp_net.h
+++ b/drivers/net/ethernet/netronome/nfp/nfp_net.h
@@ -544,6 +544,7 @@ struct nfp_net_dp {
  * @reconfig_timer_active:  Timer for reading reconfiguration results is 
pending
  * @reconfig_sync_present:  Some thread is performing synchronous reconfig
  * @reconfig_timer:    Timer for async reading of reconfig results
+ * @reconfig_in_progress_update:       Update FW is processing now (debug only)
  * @link_up:            Is the link up?
  * @link_status_lock:  Protects @link_* and ensures atomicity with BAR reading
  * @rx_coalesce_usecs:      RX interrupt moderation usecs delay parameter
@@ -612,6 +613,7 @@ struct nfp_net {
        bool reconfig_timer_active;
        bool reconfig_sync_present;
        struct timer_list reconfig_timer;
+       u32 reconfig_in_progress_update;
 
        u32 rx_coalesce_usecs;
        u32 rx_coalesce_max_frames;
diff --git a/drivers/net/ethernet/netronome/nfp/nfp_net_common.c 
b/drivers/net/ethernet/netronome/nfp/nfp_net_common.c
index 3cb7dceca2d9..e97636d2e6ee 100644
--- a/drivers/net/ethernet/netronome/nfp/nfp_net_common.c
+++ b/drivers/net/ethernet/netronome/nfp/nfp_net_common.c
@@ -101,6 +101,7 @@ static void nfp_net_reconfig_start(struct nfp_net *nn, u32 
update)
        /* ensure update is written before pinging HW */
        nn_pci_flush(nn);
        nfp_qcp_wr_ptr_add(nn->qcp_cfg, 1);
+       nn->reconfig_in_progress_update = update;
 }
 
 /* Pass 0 as update to run posted reconfigs. */
@@ -123,10 +124,14 @@ static bool nfp_net_reconfig_check_done(struct nfp_net 
*nn, bool last_check)
        if (reg == 0)
                return true;
        if (reg & NFP_NET_CFG_UPDATE_ERR) {
-               nn_err(nn, "Reconfig error: 0x%08x\n", reg);
+               nn_err(nn, "Reconfig error (status: 0x%08x update: 0x%08x ctrl: 
0x%08x)\n",
+                      reg, nn->reconfig_in_progress_update,
+                      nn_readl(nn, NFP_NET_CFG_CTRL));
                return true;
        } else if (last_check) {
-               nn_err(nn, "Reconfig timeout: 0x%08x\n", reg);
+               nn_err(nn, "Reconfig timeout (status: 0x%08x update: 0x%08x 
ctrl: 0x%08x)\n",
+                      reg, nn->reconfig_in_progress_update,
+                      nn_readl(nn, NFP_NET_CFG_CTRL));
                return true;
        }
 
-- 
2.17.1

Reply via email to