Commit 0b2c2a93 authored by Hariprasad Shenai's avatar Hariprasad Shenai Committed by David S. Miller

cxgb4: Add debugfs entry to enable backdoor access

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: default avatarHariprasad Shenai <hariprasad@chelsio.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 01faef2c
...@@ -767,6 +767,7 @@ struct adapter { ...@@ -767,6 +767,7 @@ struct adapter {
bool tid_release_task_busy; bool tid_release_task_busy;
struct dentry *debugfs_root; struct dentry *debugfs_root;
u32 use_bd; /* Use SGE Back Door intfc for reading SGE Contexts */
spinlock_t stats_lock; spinlock_t stats_lock;
spinlock_t win0_lock ____cacheline_aligned_in_smp; spinlock_t win0_lock ____cacheline_aligned_in_smp;
......
...@@ -2388,6 +2388,8 @@ int t4_setup_debugfs(struct adapter *adap) ...@@ -2388,6 +2388,8 @@ int t4_setup_debugfs(struct adapter *adap)
de = debugfs_create_file_size("flash", S_IRUSR, adap->debugfs_root, adap, de = debugfs_create_file_size("flash", S_IRUSR, adap->debugfs_root, adap,
&flash_debugfs_fops, adap->params.sf_size); &flash_debugfs_fops, adap->params.sf_size);
debugfs_create_bool("use_backdoor", S_IWUSR | S_IRUSR,
adap->debugfs_root, &adap->use_bd);
return 0; return 0;
} }
...@@ -3689,6 +3689,11 @@ int t4_read_rss(struct adapter *adapter, u16 *map) ...@@ -3689,6 +3689,11 @@ int t4_read_rss(struct adapter *adapter, u16 *map)
return 0; 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 * t4_fw_tp_pio_rw - Access TP PIO through LDST
* @adap: the adapter * @adap: the adapter
...@@ -3732,7 +3737,7 @@ static void t4_fw_tp_pio_rw(struct adapter *adap, u32 *vals, unsigned int nregs, ...@@ -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) 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); t4_fw_tp_pio_rw(adap, key, 10, TP_RSS_SECRET_KEY0_A, 1);
else else
t4_read_indirect(adap, TP_PIO_ADDR_A, TP_PIO_DATA_A, key, 10, 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) ...@@ -3762,7 +3767,7 @@ void t4_write_rss_key(struct adapter *adap, const u32 *key, int idx)
(vrt & KEYEXTEND_F) && (KEYMODE_G(vrt) == 3)) (vrt & KEYEXTEND_F) && (KEYMODE_G(vrt) == 3))
rss_key_addr_cnt = 32; 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); t4_fw_tp_pio_rw(adap, (void *)key, 10, TP_RSS_SECRET_KEY0_A, 0);
else else
t4_write_indirect(adap, TP_PIO_ADDR_A, TP_PIO_DATA_A, key, 10, 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) ...@@ -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, void t4_read_rss_pf_config(struct adapter *adapter, unsigned int index,
u32 *valp) u32 *valp)
{ {
if (adapter->flags & FW_OK) if (t4_use_ldst(adapter))
t4_fw_tp_pio_rw(adapter, valp, 1, t4_fw_tp_pio_rw(adapter, valp, 1,
TP_RSS_PF0_CONFIG_A + index, 1); TP_RSS_PF0_CONFIG_A + index, 1);
else else
...@@ -3831,7 +3836,7 @@ void t4_read_rss_vf_config(struct adapter *adapter, unsigned int index, ...@@ -3831,7 +3836,7 @@ void t4_read_rss_vf_config(struct adapter *adapter, unsigned int index,
/* Grab the VFL/VFH values ... /* 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, vfl, 1, TP_RSS_VFL_CONFIG_A, 1);
t4_fw_tp_pio_rw(adapter, vfh, 1, TP_RSS_VFH_CONFIG_A, 1); t4_fw_tp_pio_rw(adapter, vfh, 1, TP_RSS_VFH_CONFIG_A, 1);
} else { } else {
...@@ -3852,7 +3857,7 @@ u32 t4_read_rss_pf_map(struct adapter *adapter) ...@@ -3852,7 +3857,7 @@ u32 t4_read_rss_pf_map(struct adapter *adapter)
{ {
u32 pfmap; 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); t4_fw_tp_pio_rw(adapter, &pfmap, 1, TP_RSS_PF_MAP_A, 1);
else else
t4_read_indirect(adapter, TP_PIO_ADDR_A, TP_PIO_DATA_A, 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) ...@@ -3870,7 +3875,7 @@ u32 t4_read_rss_pf_mask(struct adapter *adapter)
{ {
u32 pfmask; 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); t4_fw_tp_pio_rw(adapter, &pfmask, 1, TP_RSS_PF_MSK_A, 1);
else else
t4_read_indirect(adapter, TP_PIO_ADDR_A, TP_PIO_DATA_A, t4_read_indirect(adapter, TP_PIO_ADDR_A, TP_PIO_DATA_A,
...@@ -6275,7 +6280,7 @@ int t4_init_tp_params(struct adapter *adap) ...@@ -6275,7 +6280,7 @@ int t4_init_tp_params(struct adapter *adap)
/* Cache the adapter's Compressed Filter Mode and global Incress /* Cache the adapter's Compressed Filter Mode and global Incress
* Configuration. * Configuration.
*/ */
if (adap->flags & FW_OK) { if (t4_use_ldst(adap)) {
t4_fw_tp_pio_rw(adap, &adap->params.tp.vlan_pri_map, 1, t4_fw_tp_pio_rw(adap, &adap->params.tp.vlan_pri_map, 1,
TP_VLAN_PRI_MAP_A, 1); TP_VLAN_PRI_MAP_A, 1);
t4_fw_tp_pio_rw(adap, &adap->params.tp.ingress_config, 1, t4_fw_tp_pio_rw(adap, &adap->params.tp.ingress_config, 1,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment