cxgb4: Add debugfs entry to enable backdoor access
authorHariprasad Shenai <hariprasad@chelsio.com>
Tue, 21 Jul 2015 17:09:40 +0000 (22:39 +0530)
committerDavid S. Miller <davem@davemloft.net>
Wed, 22 Jul 2015 05:33:06 +0000 (22:33 -0700)
Add debugfs entry 'use_backdoor' to enable backdoor access to read sge
context. By default, we read sge context's via firmware. In case of FW
issues, one can enable backdoor access via debugfs to dump sge context
for debugging purpose.

Signed-off-by: Hariprasad Shenai <hariprasad@chelsio.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/chelsio/cxgb4/cxgb4.h
drivers/net/ethernet/chelsio/cxgb4/cxgb4_debugfs.c
drivers/net/ethernet/chelsio/cxgb4/t4_hw.c

index 629f75d703535d3ef5d8319a9ed2f3ec90a51ba9..58de4443eac0318234fd6b6ef46384243f14d7da 100644 (file)
@@ -767,6 +767,7 @@ struct adapter {
        bool tid_release_task_busy;
 
        struct dentry *debugfs_root;
+       u32 use_bd;     /* Use SGE Back Door intfc for reading SGE Contexts */
 
        spinlock_t stats_lock;
        spinlock_t win0_lock ____cacheline_aligned_in_smp;
index b135d05c9984c9427cde89076820e8d79206955a..f701a6f20c6af6f67a8ab40d81d63b5fb0c921a4 100644 (file)
@@ -2388,6 +2388,8 @@ int t4_setup_debugfs(struct adapter *adap)
 
        de = debugfs_create_file_size("flash", S_IRUSR, adap->debugfs_root, adap,
                                      &flash_debugfs_fops, adap->params.sf_size);
+       debugfs_create_bool("use_backdoor", S_IWUSR | S_IRUSR,
+                           adap->debugfs_root, &adap->use_bd);
 
        return 0;
 }
index 1e6597dc873652ea01c375f696fb02cc33bf6db0..800bd489dd751d14909a7054a7883ae73ebeed1c 100644 (file)
@@ -3689,6 +3689,11 @@ int t4_read_rss(struct adapter *adapter, u16 *map)
        return 0;
 }
 
+static unsigned int t4_use_ldst(struct adapter *adap)
+{
+       return (adap->flags & FW_OK) || !adap->use_bd;
+}
+
 /**
  *     t4_fw_tp_pio_rw - Access TP PIO through LDST
  *     @adap: the adapter
@@ -3732,7 +3737,7 @@ static void t4_fw_tp_pio_rw(struct adapter *adap, u32 *vals, unsigned int nregs,
  */
 void t4_read_rss_key(struct adapter *adap, u32 *key)
 {
-       if (adap->flags & FW_OK)
+       if (t4_use_ldst(adap))
                t4_fw_tp_pio_rw(adap, key, 10, TP_RSS_SECRET_KEY0_A, 1);
        else
                t4_read_indirect(adap, TP_PIO_ADDR_A, TP_PIO_DATA_A, key, 10,
@@ -3762,7 +3767,7 @@ void t4_write_rss_key(struct adapter *adap, const u32 *key, int idx)
            (vrt & KEYEXTEND_F) && (KEYMODE_G(vrt) == 3))
                rss_key_addr_cnt = 32;
 
-       if (adap->flags & FW_OK)
+       if (t4_use_ldst(adap))
                t4_fw_tp_pio_rw(adap, (void *)key, 10, TP_RSS_SECRET_KEY0_A, 0);
        else
                t4_write_indirect(adap, TP_PIO_ADDR_A, TP_PIO_DATA_A, key, 10,
@@ -3791,7 +3796,7 @@ void t4_write_rss_key(struct adapter *adap, const u32 *key, int idx)
 void t4_read_rss_pf_config(struct adapter *adapter, unsigned int index,
                           u32 *valp)
 {
-       if (adapter->flags & FW_OK)
+       if (t4_use_ldst(adapter))
                t4_fw_tp_pio_rw(adapter, valp, 1,
                                TP_RSS_PF0_CONFIG_A + index, 1);
        else
@@ -3831,7 +3836,7 @@ void t4_read_rss_vf_config(struct adapter *adapter, unsigned int index,
 
        /* Grab the VFL/VFH values ...
         */
-       if (adapter->flags & FW_OK) {
+       if (t4_use_ldst(adapter)) {
                t4_fw_tp_pio_rw(adapter, vfl, 1, TP_RSS_VFL_CONFIG_A, 1);
                t4_fw_tp_pio_rw(adapter, vfh, 1, TP_RSS_VFH_CONFIG_A, 1);
        } else {
@@ -3852,7 +3857,7 @@ u32 t4_read_rss_pf_map(struct adapter *adapter)
 {
        u32 pfmap;
 
-       if (adapter->flags & FW_OK)
+       if (t4_use_ldst(adapter))
                t4_fw_tp_pio_rw(adapter, &pfmap, 1, TP_RSS_PF_MAP_A, 1);
        else
                t4_read_indirect(adapter, TP_PIO_ADDR_A, TP_PIO_DATA_A,
@@ -3870,7 +3875,7 @@ u32 t4_read_rss_pf_mask(struct adapter *adapter)
 {
        u32 pfmask;
 
-       if (adapter->flags & FW_OK)
+       if (t4_use_ldst(adapter))
                t4_fw_tp_pio_rw(adapter, &pfmask, 1, TP_RSS_PF_MSK_A, 1);
        else
                t4_read_indirect(adapter, TP_PIO_ADDR_A, TP_PIO_DATA_A,
@@ -6275,7 +6280,7 @@ int t4_init_tp_params(struct adapter *adap)
        /* Cache the adapter's Compressed Filter Mode and global Incress
         * Configuration.
         */
-       if (adap->flags & FW_OK) {
+       if (t4_use_ldst(adap)) {
                t4_fw_tp_pio_rw(adap, &adap->params.tp.vlan_pri_map, 1,
                                TP_VLAN_PRI_MAP_A, 1);
                t4_fw_tp_pio_rw(adap, &adap->params.tp.ingress_config, 1,