Skip to content

Commit 70ee366

Browse files
Hariprasad Shenaidavem330
authored andcommitted
cxgb4vf: added much cleaner implementation of is_t4()
Signed-off-by: Hariprasad Shenai <hariprasad@chelsio.com> Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent d14807d commit 70ee366

File tree

6 files changed

+39
-16
lines changed

6 files changed

+39
-16
lines changed

drivers/net/ethernet/chelsio/cxgb4/t4_regs.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1204,4 +1204,13 @@
12041204
#define EDC_STRIDE_T5 (EDC_T51_BASE_ADDR - EDC_T50_BASE_ADDR)
12051205
#define EDC_REG_T5(reg, idx) (reg + EDC_STRIDE_T5 * idx)
12061206

1207+
#define A_PL_VF_REV 0x4
1208+
#define A_PL_VF_WHOAMI 0x0
1209+
#define A_PL_VF_REVISION 0x8
1210+
1211+
#define S_CHIPID 4
1212+
#define M_CHIPID 0xfU
1213+
#define V_CHIPID(x) ((x) << S_CHIPID)
1214+
#define G_CHIPID(x) (((x) >> S_CHIPID) & M_CHIPID)
1215+
12071216
#endif /* __T4_REGS_H */

drivers/net/ethernet/chelsio/cxgb4vf/adapter.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -344,7 +344,6 @@ struct adapter {
344344
unsigned long registered_device_map;
345345
unsigned long open_device_map;
346346
unsigned long flags;
347-
enum chip_type chip;
348347
struct adapter_params params;
349348

350349
/* queue and interrupt resources */

drivers/net/ethernet/chelsio/cxgb4vf/cxgb4vf_main.c

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1064,7 +1064,7 @@ static inline unsigned int mk_adap_vers(const struct adapter *adapter)
10641064
/*
10651065
* Chip version 4, revision 0x3f (cxgb4vf).
10661066
*/
1067-
return CHELSIO_CHIP_VERSION(adapter->chip) | (0x3f << 10);
1067+
return CHELSIO_CHIP_VERSION(adapter->params.chip) | (0x3f << 10);
10681068
}
10691069

10701070
/*
@@ -1551,9 +1551,13 @@ static void cxgb4vf_get_regs(struct net_device *dev,
15511551
reg_block_dump(adapter, regbuf,
15521552
T4VF_MPS_BASE_ADDR + T4VF_MOD_MAP_MPS_FIRST,
15531553
T4VF_MPS_BASE_ADDR + T4VF_MOD_MAP_MPS_LAST);
1554+
1555+
/* T5 adds new registers in the PL Register map.
1556+
*/
15541557
reg_block_dump(adapter, regbuf,
15551558
T4VF_PL_BASE_ADDR + T4VF_MOD_MAP_PL_FIRST,
1556-
T4VF_PL_BASE_ADDR + T4VF_MOD_MAP_PL_LAST);
1559+
T4VF_PL_BASE_ADDR + (is_t4(adapter->params.chip)
1560+
? A_PL_VF_WHOAMI : A_PL_VF_REVISION));
15571561
reg_block_dump(adapter, regbuf,
15581562
T4VF_CIM_BASE_ADDR + T4VF_MOD_MAP_CIM_FIRST,
15591563
T4VF_CIM_BASE_ADDR + T4VF_MOD_MAP_CIM_LAST);
@@ -2087,6 +2091,7 @@ static int adap_init0(struct adapter *adapter)
20872091
unsigned int ethqsets;
20882092
int err;
20892093
u32 param, val = 0;
2094+
unsigned int chipid;
20902095

20912096
/*
20922097
* Wait for the device to become ready before proceeding ...
@@ -2114,12 +2119,14 @@ static int adap_init0(struct adapter *adapter)
21142119
return err;
21152120
}
21162121

2122+
adapter->params.chip = 0;
21172123
switch (adapter->pdev->device >> 12) {
21182124
case CHELSIO_T4:
2119-
adapter->chip = CHELSIO_CHIP_CODE(CHELSIO_T4, 0);
2125+
adapter->params.chip = CHELSIO_CHIP_CODE(CHELSIO_T4, 0);
21202126
break;
21212127
case CHELSIO_T5:
2122-
adapter->chip = CHELSIO_CHIP_CODE(CHELSIO_T5, 0);
2128+
chipid = G_REV(t4_read_reg(adapter, A_PL_VF_REV));
2129+
adapter->params.chip |= CHELSIO_CHIP_CODE(CHELSIO_T5, chipid);
21232130
break;
21242131
}
21252132

drivers/net/ethernet/chelsio/cxgb4vf/sge.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -537,7 +537,7 @@ static inline void ring_fl_db(struct adapter *adapter, struct sge_fl *fl)
537537
*/
538538
if (fl->pend_cred >= FL_PER_EQ_UNIT) {
539539
val = PIDX(fl->pend_cred / FL_PER_EQ_UNIT);
540-
if (!is_t4(adapter->chip))
540+
if (!is_t4(adapter->params.chip))
541541
val |= DBTYPE(1);
542542
wmb();
543543
t4_write_reg(adapter, T4VF_SGE_BASE_ADDR + SGE_VF_KDOORBELL,

drivers/net/ethernet/chelsio/cxgb4vf/t4vf_common.h

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -39,21 +39,28 @@
3939
#include "../cxgb4/t4fw_api.h"
4040

4141
#define CHELSIO_CHIP_CODE(version, revision) (((version) << 4) | (revision))
42-
#define CHELSIO_CHIP_VERSION(code) ((code) >> 4)
42+
#define CHELSIO_CHIP_VERSION(code) (((code) >> 4) & 0xf)
4343
#define CHELSIO_CHIP_RELEASE(code) ((code) & 0xf)
4444

45+
/* All T4 and later chips have their PCI-E Device IDs encoded as 0xVFPP where:
46+
*
47+
* V = "4" for T4; "5" for T5, etc. or
48+
* = "a" for T4 FPGA; "b" for T4 FPGA, etc.
49+
* F = "0" for PF 0..3; "4".."7" for PF4..7; and "8" for VFs
50+
* PP = adapter product designation
51+
*/
4552
#define CHELSIO_T4 0x4
4653
#define CHELSIO_T5 0x5
4754

4855
enum chip_type {
49-
T4_A1 = CHELSIO_CHIP_CODE(CHELSIO_T4, 0),
50-
T4_A2 = CHELSIO_CHIP_CODE(CHELSIO_T4, 1),
51-
T4_A3 = CHELSIO_CHIP_CODE(CHELSIO_T4, 2),
56+
T4_A1 = CHELSIO_CHIP_CODE(CHELSIO_T4, 1),
57+
T4_A2 = CHELSIO_CHIP_CODE(CHELSIO_T4, 2),
5258
T4_FIRST_REV = T4_A1,
53-
T4_LAST_REV = T4_A3,
59+
T4_LAST_REV = T4_A2,
5460

55-
T5_A1 = CHELSIO_CHIP_CODE(CHELSIO_T5, 0),
56-
T5_FIRST_REV = T5_A1,
61+
T5_A0 = CHELSIO_CHIP_CODE(CHELSIO_T5, 0),
62+
T5_A1 = CHELSIO_CHIP_CODE(CHELSIO_T5, 1),
63+
T5_FIRST_REV = T5_A0,
5764
T5_LAST_REV = T5_A1,
5865
};
5966

@@ -203,6 +210,7 @@ struct adapter_params {
203210
struct vpd_params vpd; /* Vital Product Data */
204211
struct rss_params rss; /* Receive Side Scaling */
205212
struct vf_resources vfres; /* Virtual Function Resource limits */
213+
enum chip_type chip; /* chip code */
206214
u8 nports; /* # of Ethernet "ports" */
207215
};
208216

@@ -253,7 +261,7 @@ static inline int t4vf_wr_mbox_ns(struct adapter *adapter, const void *cmd,
253261

254262
static inline int is_t4(enum chip_type chip)
255263
{
256-
return (chip >= T4_FIRST_REV && chip <= T4_LAST_REV);
264+
return CHELSIO_CHIP_VERSION(chip) == CHELSIO_T4;
257265
}
258266

259267
int t4vf_wait_dev_ready(struct adapter *);

drivers/net/ethernet/chelsio/cxgb4vf/t4vf_hw.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1027,7 +1027,7 @@ int t4vf_alloc_mac_filt(struct adapter *adapter, unsigned int viid, bool free,
10271027
unsigned nfilters = 0;
10281028
unsigned int rem = naddr;
10291029
struct fw_vi_mac_cmd cmd, rpl;
1030-
unsigned int max_naddr = is_t4(adapter->chip) ?
1030+
unsigned int max_naddr = is_t4(adapter->params.chip) ?
10311031
NUM_MPS_CLS_SRAM_L_INSTANCES :
10321032
NUM_MPS_T5_CLS_SRAM_L_INSTANCES;
10331033

@@ -1121,7 +1121,7 @@ int t4vf_change_mac(struct adapter *adapter, unsigned int viid,
11211121
struct fw_vi_mac_exact *p = &cmd.u.exact[0];
11221122
size_t len16 = DIV_ROUND_UP(offsetof(struct fw_vi_mac_cmd,
11231123
u.exact[1]), 16);
1124-
unsigned int max_naddr = is_t4(adapter->chip) ?
1124+
unsigned int max_naddr = is_t4(adapter->params.chip) ?
11251125
NUM_MPS_CLS_SRAM_L_INSTANCES :
11261126
NUM_MPS_T5_CLS_SRAM_L_INSTANCES;
11271127

0 commit comments

Comments
 (0)