Commit f988008a authored by Ganesh Goudar's avatar Ganesh Goudar Committed by David S. Miller

cxgb4: RSS table is 4k for T6

RSS table is 4k for T6 and later cards, add check for the
same.
Signed-off-by: default avatarGanesh Goudar <ganeshgr@chelsio.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 1df94c3c
...@@ -1004,9 +1004,10 @@ int cudbg_collect_rss(struct cudbg_init *pdbg_init, ...@@ -1004,9 +1004,10 @@ int cudbg_collect_rss(struct cudbg_init *pdbg_init,
{ {
struct adapter *padap = pdbg_init->adap; struct adapter *padap = pdbg_init->adap;
struct cudbg_buffer temp_buff = { 0 }; struct cudbg_buffer temp_buff = { 0 };
int rc; int rc, nentries;
rc = cudbg_get_buff(dbg_buff, RSS_NENTRIES * sizeof(u16), &temp_buff); nentries = t4_chip_rss_size(padap);
rc = cudbg_get_buff(dbg_buff, nentries * sizeof(u16), &temp_buff);
if (rc) if (rc)
return rc; return rc;
......
...@@ -1528,6 +1528,7 @@ int t4_init_portinfo(struct port_info *pi, int mbox, ...@@ -1528,6 +1528,7 @@ int t4_init_portinfo(struct port_info *pi, int mbox,
int port, int pf, int vf, u8 mac[]); int port, int pf, int vf, u8 mac[]);
int t4_port_init(struct adapter *adap, int mbox, int pf, int vf); int t4_port_init(struct adapter *adap, int mbox, int pf, int vf);
void t4_fatal_err(struct adapter *adapter); void t4_fatal_err(struct adapter *adapter);
unsigned int t4_chip_rss_size(struct adapter *adapter);
int t4_config_rss_range(struct adapter *adapter, int mbox, unsigned int viid, int t4_config_rss_range(struct adapter *adapter, int mbox, unsigned int viid,
int start, int n, const u16 *rspq, unsigned int nrspq); int start, int n, const u16 *rspq, unsigned int nrspq);
int t4_config_glbl_rss(struct adapter *adapter, int mbox, unsigned int mode, int t4_config_glbl_rss(struct adapter *adapter, int mbox, unsigned int mode,
......
...@@ -179,7 +179,7 @@ static u32 cxgb4_get_entity_length(struct adapter *adap, u32 entity) ...@@ -179,7 +179,7 @@ static u32 cxgb4_get_entity_length(struct adapter *adap, u32 entity)
len = cudbg_mbytes_to_bytes(len); len = cudbg_mbytes_to_bytes(len);
break; break;
case CUDBG_RSS: case CUDBG_RSS:
len = RSS_NENTRIES * sizeof(u16); len = t4_chip_rss_size(adap) * sizeof(u16);
break; break;
case CUDBG_RSS_VF_CONF: case CUDBG_RSS_VF_CONF:
len = adap->params.arch.vfcount * len = adap->params.arch.vfcount *
......
...@@ -2021,11 +2021,12 @@ static int rss_show(struct seq_file *seq, void *v, int idx) ...@@ -2021,11 +2021,12 @@ static int rss_show(struct seq_file *seq, void *v, int idx)
static int rss_open(struct inode *inode, struct file *file) static int rss_open(struct inode *inode, struct file *file)
{ {
int ret;
struct seq_tab *p;
struct adapter *adap = inode->i_private; struct adapter *adap = inode->i_private;
int ret, nentries;
struct seq_tab *p;
p = seq_open_tab(file, RSS_NENTRIES / 8, 8 * sizeof(u16), 0, rss_show); nentries = t4_chip_rss_size(adap);
p = seq_open_tab(file, nentries / 8, 8 * sizeof(u16), 0, rss_show);
if (!p) if (!p)
return -ENOMEM; return -ENOMEM;
......
...@@ -4927,6 +4927,14 @@ void t4_intr_disable(struct adapter *adapter) ...@@ -4927,6 +4927,14 @@ void t4_intr_disable(struct adapter *adapter)
t4_set_reg_field(adapter, PL_INT_MAP0_A, 1 << pf, 0); t4_set_reg_field(adapter, PL_INT_MAP0_A, 1 << pf, 0);
} }
unsigned int t4_chip_rss_size(struct adapter *adap)
{
if (CHELSIO_CHIP_VERSION(adap->params.chip) <= CHELSIO_T5)
return RSS_NENTRIES;
else
return T6_RSS_NENTRIES;
}
/** /**
* t4_config_rss_range - configure a portion of the RSS mapping table * t4_config_rss_range - configure a portion of the RSS mapping table
* @adapter: the adapter * @adapter: the adapter
...@@ -5065,10 +5073,11 @@ static int rd_rss_row(struct adapter *adap, int row, u32 *val) ...@@ -5065,10 +5073,11 @@ static int rd_rss_row(struct adapter *adap, int row, u32 *val)
*/ */
int t4_read_rss(struct adapter *adapter, u16 *map) int t4_read_rss(struct adapter *adapter, u16 *map)
{ {
int i, ret, nentries;
u32 val; u32 val;
int i, ret;
for (i = 0; i < RSS_NENTRIES / 2; ++i) { nentries = t4_chip_rss_size(adapter);
for (i = 0; i < nentries / 2; ++i) {
ret = rd_rss_row(adapter, i, &val); ret = rd_rss_row(adapter, i, &val);
if (ret) if (ret)
return ret; return ret;
......
...@@ -38,21 +38,22 @@ ...@@ -38,21 +38,22 @@
#include <linux/types.h> #include <linux/types.h>
enum { enum {
NCHAN = 4, /* # of HW channels */ NCHAN = 4, /* # of HW channels */
MAX_MTU = 9600, /* max MAC MTU, excluding header + FCS */ MAX_MTU = 9600, /* max MAC MTU, excluding header + FCS */
EEPROMSIZE = 17408, /* Serial EEPROM physical size */ EEPROMSIZE = 17408,/* Serial EEPROM physical size */
EEPROMVSIZE = 32768, /* Serial EEPROM virtual address space size */ EEPROMVSIZE = 32768,/* Serial EEPROM virtual address space size */
EEPROMPFSIZE = 1024, /* EEPROM writable area size for PFn, n>0 */ EEPROMPFSIZE = 1024, /* EEPROM writable area size for PFn, n>0 */
RSS_NENTRIES = 2048, /* # of entries in RSS mapping table */ RSS_NENTRIES = 2048, /* # of entries in RSS mapping table */
TCB_SIZE = 128, /* TCB size */ T6_RSS_NENTRIES = 4096, /* # of entries in RSS mapping table */
NMTUS = 16, /* size of MTU table */ TCB_SIZE = 128, /* TCB size */
NCCTRL_WIN = 32, /* # of congestion control windows */ NMTUS = 16, /* size of MTU table */
NTX_SCHED = 8, /* # of HW Tx scheduling queues */ NCCTRL_WIN = 32, /* # of congestion control windows */
PM_NSTATS = 5, /* # of PM stats */ NTX_SCHED = 8, /* # of HW Tx scheduling queues */
T6_PM_NSTATS = 7, /* # of PM stats in T6 */ PM_NSTATS = 5, /* # of PM stats */
MBOX_LEN = 64, /* mailbox size in bytes */ T6_PM_NSTATS = 7, /* # of PM stats in T6 */
TRACE_LEN = 112, /* length of trace data and mask */ MBOX_LEN = 64, /* mailbox size in bytes */
FILTER_OPT_LEN = 36, /* filter tuple width for optional components */ TRACE_LEN = 112, /* length of trace data and mask */
FILTER_OPT_LEN = 36, /* filter tuple width for optional components */
}; };
enum { enum {
......
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