OSDN Git Service

cxgb4: RSS table is 4k for T6
authorGanesh Goudar <ganeshgr@chelsio.com>
Tue, 19 Dec 2017 01:52:28 +0000 (07:22 +0530)
committerDavid S. Miller <davem@davemloft.net>
Tue, 19 Dec 2017 19:14:19 +0000 (14:14 -0500)
RSS table is 4k for T6 and later cards, add check for the
same.

Signed-off-by: Ganesh Goudar <ganeshgr@chelsio.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/chelsio/cxgb4/cudbg_lib.c
drivers/net/ethernet/chelsio/cxgb4/cxgb4.h
drivers/net/ethernet/chelsio/cxgb4/cxgb4_cudbg.c
drivers/net/ethernet/chelsio/cxgb4/cxgb4_debugfs.c
drivers/net/ethernet/chelsio/cxgb4/t4_hw.c
drivers/net/ethernet/chelsio/cxgb4/t4_hw.h

index d73fb6a..336670d 100644 (file)
@@ -1004,9 +1004,10 @@ int cudbg_collect_rss(struct cudbg_init *pdbg_init,
 {
        struct adapter *padap = pdbg_init->adap;
        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)
                return rc;
 
index b1df2aa..69d0b64 100644 (file)
@@ -1528,6 +1528,7 @@ int t4_init_portinfo(struct port_info *pi, int mbox,
                     int port, int pf, int vf, u8 mac[]);
 int t4_port_init(struct adapter *adap, int mbox, int pf, int vf);
 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 start, int n, const u16 *rspq, unsigned int nrspq);
 int t4_config_glbl_rss(struct adapter *adapter, int mbox, unsigned int mode,
index 41c8736..581d628 100644 (file)
@@ -179,7 +179,7 @@ static u32 cxgb4_get_entity_length(struct adapter *adap, u32 entity)
                len = cudbg_mbytes_to_bytes(len);
                break;
        case CUDBG_RSS:
-               len = RSS_NENTRIES * sizeof(u16);
+               len = t4_chip_rss_size(adap) * sizeof(u16);
                break;
        case CUDBG_RSS_VF_CONF:
                len = adap->params.arch.vfcount *
index d8efcd9..d3ced04 100644 (file)
@@ -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)
 {
-       int ret;
-       struct seq_tab *p;
        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)
                return -ENOMEM;
 
index d18e708..44930ca 100644 (file)
@@ -4927,6 +4927,14 @@ void t4_intr_disable(struct adapter *adapter)
        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
  *     @adapter: the adapter
@@ -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 i, ret, nentries;
        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);
                if (ret)
                        return ret;
index 872a91b..361d503 100644 (file)
 #include <linux/types.h>
 
 enum {
-       NCHAN          = 4,     /* # of HW channels */
-       MAX_MTU        = 9600,  /* max MAC MTU, excluding header + FCS */
-       EEPROMSIZE     = 17408, /* Serial EEPROM physical size */
-       EEPROMVSIZE    = 32768, /* Serial EEPROM virtual address space size */
-       EEPROMPFSIZE   = 1024,  /* EEPROM writable area size for PFn, n>0 */
-       RSS_NENTRIES   = 2048,  /* # of entries in RSS mapping table */
-       TCB_SIZE       = 128,   /* TCB size */
-       NMTUS          = 16,    /* size of MTU table */
-       NCCTRL_WIN     = 32,    /* # of congestion control windows */
-       NTX_SCHED      = 8,     /* # of HW Tx scheduling queues */
-       PM_NSTATS      = 5,     /* # of PM stats */
-       T6_PM_NSTATS   = 7,     /* # of PM stats in T6 */
-       MBOX_LEN       = 64,    /* mailbox size in bytes */
-       TRACE_LEN      = 112,   /* length of trace data and mask */
-       FILTER_OPT_LEN = 36,    /* filter tuple width for optional components */
+       NCHAN           = 4,    /* # of HW channels */
+       MAX_MTU         = 9600, /* max MAC MTU, excluding header + FCS */
+       EEPROMSIZE      = 17408,/* Serial EEPROM physical size */
+       EEPROMVSIZE     = 32768,/* Serial EEPROM virtual address space size */
+       EEPROMPFSIZE    = 1024, /* EEPROM writable area size for PFn, n>0 */
+       RSS_NENTRIES    = 2048, /* # of entries in RSS mapping table */
+       T6_RSS_NENTRIES = 4096, /* # of entries in RSS mapping table */
+       TCB_SIZE        = 128,  /* TCB size */
+       NMTUS           = 16,   /* size of MTU table */
+       NCCTRL_WIN      = 32,   /* # of congestion control windows */
+       NTX_SCHED       = 8,    /* # of HW Tx scheduling queues */
+       PM_NSTATS       = 5,    /* # of PM stats */
+       T6_PM_NSTATS    = 7,    /* # of PM stats in T6 */
+       MBOX_LEN        = 64,   /* mailbox size in bytes */
+       TRACE_LEN       = 112,  /* length of trace data and mask */
+       FILTER_OPT_LEN  = 36,   /* filter tuple width for optional components */
 };
 
 enum {