@@ -1084,72 +1084,159 @@ static inline void tcamxy2valmask(u64 x, u64 y, u8 *addr, u64 *mask)
1084
1084
1085
1085
static int mps_tcam_show (struct seq_file * seq , void * v )
1086
1086
{
1087
- if (v == SEQ_START_TOKEN )
1088
- seq_puts (seq , "Idx Ethernet address Mask Vld Ports PF"
1089
- " VF Replication "
1090
- "P0 P1 P2 P3 ML\n" );
1091
- else {
1087
+ struct adapter * adap = seq -> private ;
1088
+ unsigned int chip_ver = CHELSIO_CHIP_VERSION (adap -> params .chip );
1089
+
1090
+ if (v == SEQ_START_TOKEN ) {
1091
+ if (adap -> params .arch .mps_rplc_size > 128 )
1092
+ seq_puts (seq , "Idx Ethernet address Mask "
1093
+ "Vld Ports PF VF "
1094
+ "Replication "
1095
+ " P0 P1 P2 P3 ML\n" );
1096
+ else
1097
+ seq_puts (seq , "Idx Ethernet address Mask "
1098
+ "Vld Ports PF VF Replication"
1099
+ " P0 P1 P2 P3 ML\n" );
1100
+ } else {
1092
1101
u64 mask ;
1093
1102
u8 addr [ETH_ALEN ];
1094
- struct adapter * adap = seq -> private ;
1103
+ bool replicate ;
1095
1104
unsigned int idx = (uintptr_t )v - 2 ;
1096
- u64 tcamy = t4_read_reg64 (adap , MPS_CLS_TCAM_Y_L (idx ));
1097
- u64 tcamx = t4_read_reg64 (adap , MPS_CLS_TCAM_X_L (idx ));
1098
- u32 cls_lo = t4_read_reg (adap , MPS_CLS_SRAM_L (idx ));
1099
- u32 cls_hi = t4_read_reg (adap , MPS_CLS_SRAM_H (idx ));
1100
- u32 rplc [4 ] = {0 , 0 , 0 , 0 };
1105
+ u64 tcamy , tcamx , val ;
1106
+ u32 cls_lo , cls_hi , ctl ;
1107
+ u32 rplc [8 ] = {0 };
1108
+
1109
+ if (chip_ver > CHELSIO_T5 ) {
1110
+ /* CtlCmdType - 0: Read, 1: Write
1111
+ * CtlTcamSel - 0: TCAM0, 1: TCAM1
1112
+ * CtlXYBitSel- 0: Y bit, 1: X bit
1113
+ */
1114
+
1115
+ /* Read tcamy */
1116
+ ctl = CTLCMDTYPE_V (0 ) | CTLXYBITSEL_V (0 );
1117
+ if (idx < 256 )
1118
+ ctl |= CTLTCAMINDEX_V (idx ) | CTLTCAMSEL_V (0 );
1119
+ else
1120
+ ctl |= CTLTCAMINDEX_V (idx - 256 ) |
1121
+ CTLTCAMSEL_V (1 );
1122
+ t4_write_reg (adap , MPS_CLS_TCAM_DATA2_CTL_A , ctl );
1123
+ val = t4_read_reg (adap , MPS_CLS_TCAM_DATA1_A );
1124
+ tcamy = DMACH_G (val ) << 32 ;
1125
+ tcamy |= t4_read_reg (adap , MPS_CLS_TCAM_DATA0_A );
1126
+
1127
+ /* Read tcamx. Change the control param */
1128
+ ctl |= CTLXYBITSEL_V (1 );
1129
+ t4_write_reg (adap , MPS_CLS_TCAM_DATA2_CTL_A , ctl );
1130
+ val = t4_read_reg (adap , MPS_CLS_TCAM_DATA1_A );
1131
+ tcamx = DMACH_G (val ) << 32 ;
1132
+ tcamx |= t4_read_reg (adap , MPS_CLS_TCAM_DATA0_A );
1133
+ } else {
1134
+ tcamy = t4_read_reg64 (adap , MPS_CLS_TCAM_Y_L (idx ));
1135
+ tcamx = t4_read_reg64 (adap , MPS_CLS_TCAM_X_L (idx ));
1136
+ }
1137
+
1138
+ cls_lo = t4_read_reg (adap , MPS_CLS_SRAM_L (idx ));
1139
+ cls_hi = t4_read_reg (adap , MPS_CLS_SRAM_H (idx ));
1101
1140
1102
1141
if (tcamx & tcamy ) {
1103
1142
seq_printf (seq , "%3u -\n" , idx );
1104
1143
goto out ;
1105
1144
}
1106
1145
1107
- if (cls_lo & REPLICATE_F ) {
1146
+ rplc [0 ] = rplc [1 ] = rplc [2 ] = rplc [3 ] = 0 ;
1147
+ if (chip_ver > CHELSIO_T5 )
1148
+ replicate = (cls_lo & T6_REPLICATE_F );
1149
+ else
1150
+ replicate = (cls_lo & REPLICATE_F );
1151
+
1152
+ if (replicate ) {
1108
1153
struct fw_ldst_cmd ldst_cmd ;
1109
1154
int ret ;
1155
+ struct fw_ldst_mps_rplc mps_rplc ;
1156
+ u32 ldst_addrspc ;
1110
1157
1111
1158
memset (& ldst_cmd , 0 , sizeof (ldst_cmd ));
1159
+ ldst_addrspc =
1160
+ FW_LDST_CMD_ADDRSPACE_V (FW_LDST_ADDRSPC_MPS );
1112
1161
ldst_cmd .op_to_addrspace =
1113
1162
htonl (FW_CMD_OP_V (FW_LDST_CMD ) |
1114
1163
FW_CMD_REQUEST_F |
1115
1164
FW_CMD_READ_F |
1116
- FW_LDST_CMD_ADDRSPACE_V (
1117
- FW_LDST_ADDRSPC_MPS ));
1165
+ ldst_addrspc );
1118
1166
ldst_cmd .cycles_to_len16 = htonl (FW_LEN16 (ldst_cmd ));
1119
- ldst_cmd .u .mps .fid_ctl =
1167
+ ldst_cmd .u .mps .rplc . fid_idx =
1120
1168
htons (FW_LDST_CMD_FID_V (FW_LDST_MPS_RPLC ) |
1121
- FW_LDST_CMD_CTL_V (idx ));
1169
+ FW_LDST_CMD_IDX_V (idx ));
1122
1170
ret = t4_wr_mbox (adap , adap -> mbox , & ldst_cmd ,
1123
1171
sizeof (ldst_cmd ), & ldst_cmd );
1124
1172
if (ret )
1125
1173
dev_warn (adap -> pdev_dev , "Can't read MPS "
1126
1174
"replication map for idx %d: %d\n" ,
1127
1175
idx , - ret );
1128
1176
else {
1129
- rplc [0 ] = ntohl (ldst_cmd .u .mps .rplc31_0 );
1130
- rplc [1 ] = ntohl (ldst_cmd .u .mps .rplc63_32 );
1131
- rplc [2 ] = ntohl (ldst_cmd .u .mps .rplc95_64 );
1132
- rplc [3 ] = ntohl (ldst_cmd .u .mps .rplc127_96 );
1177
+ mps_rplc = ldst_cmd .u .mps .rplc ;
1178
+ rplc [0 ] = ntohl (mps_rplc .rplc31_0 );
1179
+ rplc [1 ] = ntohl (mps_rplc .rplc63_32 );
1180
+ rplc [2 ] = ntohl (mps_rplc .rplc95_64 );
1181
+ rplc [3 ] = ntohl (mps_rplc .rplc127_96 );
1182
+ if (adap -> params .arch .mps_rplc_size > 128 ) {
1183
+ rplc [4 ] = ntohl (mps_rplc .rplc159_128 );
1184
+ rplc [5 ] = ntohl (mps_rplc .rplc191_160 );
1185
+ rplc [6 ] = ntohl (mps_rplc .rplc223_192 );
1186
+ rplc [7 ] = ntohl (mps_rplc .rplc255_224 );
1187
+ }
1133
1188
}
1134
1189
}
1135
1190
1136
1191
tcamxy2valmask (tcamx , tcamy , addr , & mask );
1137
- seq_printf ( seq , "%3u %02x:%02x:%02x:%02x:%02x:%02x %012llx"
1138
- "%3c %#x%4u%4d" ,
1139
- idx , addr [ 0 ], addr [ 1 ], addr [ 2 ], addr [ 3 ], addr [ 4 ] ,
1140
- addr [5 ], ( unsigned long long ) mask ,
1141
- ( cls_lo & SRAM_VLD_F ) ? 'Y' : 'N' , PORTMAP_G ( cls_hi ) ,
1142
- PF_G (cls_lo ) ,
1143
- ( cls_lo & VF_VALID_F ) ? VF_G ( cls_lo ) : -1 );
1144
- if ( cls_lo & REPLICATE_F )
1145
- seq_printf ( seq , " %08x %08x %08x %08x" ,
1146
- rplc [ 3 ], rplc [ 2 ], rplc [ 1 ], rplc [ 0 ] );
1192
+ if ( chip_ver > CHELSIO_T5 )
1193
+ seq_printf ( seq , "%3u %02x:%02x:%02x:%02x:%02x:%02x "
1194
+ "%012llx%3c %#x%4u%4d" ,
1195
+ idx , addr [0 ], addr [ 1 ], addr [ 2 ], addr [ 3 ] ,
1196
+ addr [ 4 ], addr [ 5 ], ( unsigned long long ) mask ,
1197
+ (cls_lo & T6_SRAM_VLD_F ) ? 'Y' : 'N' ,
1198
+ PORTMAP_G ( cls_hi ),
1199
+ T6_PF_G ( cls_lo ),
1200
+ ( cls_lo & T6_VF_VALID_F ) ?
1201
+ T6_VF_G ( cls_lo ) : -1 );
1147
1202
else
1148
- seq_printf (seq , "%36c" , ' ' );
1149
- seq_printf (seq , "%4u%3u%3u%3u %#x\n" ,
1150
- SRAM_PRIO0_G (cls_lo ), SRAM_PRIO1_G (cls_lo ),
1151
- SRAM_PRIO2_G (cls_lo ), SRAM_PRIO3_G (cls_lo ),
1152
- (cls_lo >> MULTILISTEN0_S ) & 0xf );
1203
+ seq_printf (seq , "%3u %02x:%02x:%02x:%02x:%02x:%02x "
1204
+ "%012llx%3c %#x%4u%4d" ,
1205
+ idx , addr [0 ], addr [1 ], addr [2 ], addr [3 ],
1206
+ addr [4 ], addr [5 ], (unsigned long long )mask ,
1207
+ (cls_lo & SRAM_VLD_F ) ? 'Y' : 'N' ,
1208
+ PORTMAP_G (cls_hi ),
1209
+ PF_G (cls_lo ),
1210
+ (cls_lo & VF_VALID_F ) ? VF_G (cls_lo ) : -1 );
1211
+
1212
+ if (replicate ) {
1213
+ if (adap -> params .arch .mps_rplc_size > 128 )
1214
+ seq_printf (seq , " %08x %08x %08x %08x "
1215
+ "%08x %08x %08x %08x" ,
1216
+ rplc [7 ], rplc [6 ], rplc [5 ], rplc [4 ],
1217
+ rplc [3 ], rplc [2 ], rplc [1 ], rplc [0 ]);
1218
+ else
1219
+ seq_printf (seq , " %08x %08x %08x %08x" ,
1220
+ rplc [3 ], rplc [2 ], rplc [1 ], rplc [0 ]);
1221
+ } else {
1222
+ if (adap -> params .arch .mps_rplc_size > 128 )
1223
+ seq_printf (seq , "%72c" , ' ' );
1224
+ else
1225
+ seq_printf (seq , "%36c" , ' ' );
1226
+ }
1227
+
1228
+ if (chip_ver > CHELSIO_T5 )
1229
+ seq_printf (seq , "%4u%3u%3u%3u %#x\n" ,
1230
+ T6_SRAM_PRIO0_G (cls_lo ),
1231
+ T6_SRAM_PRIO1_G (cls_lo ),
1232
+ T6_SRAM_PRIO2_G (cls_lo ),
1233
+ T6_SRAM_PRIO3_G (cls_lo ),
1234
+ (cls_lo >> T6_MULTILISTEN0_S ) & 0xf );
1235
+ else
1236
+ seq_printf (seq , "%4u%3u%3u%3u %#x\n" ,
1237
+ SRAM_PRIO0_G (cls_lo ), SRAM_PRIO1_G (cls_lo ),
1238
+ SRAM_PRIO2_G (cls_lo ), SRAM_PRIO3_G (cls_lo ),
1239
+ (cls_lo >> MULTILISTEN0_S ) & 0xf );
1153
1240
}
1154
1241
out : return 0 ;
1155
1242
}
@@ -1416,6 +1503,9 @@ static int rss_config_show(struct seq_file *seq, void *v)
1416
1503
seq_printf (seq , " HashDelay: %3d\n" , HASHDELAY_G (rssconf ));
1417
1504
if (CHELSIO_CHIP_VERSION (adapter -> params .chip ) <= CHELSIO_T5 )
1418
1505
seq_printf (seq , " VfWrAddr: %3d\n" , VFWRADDR_G (rssconf ));
1506
+ else
1507
+ seq_printf (seq , " VfWrAddr: %3d\n" ,
1508
+ T6_VFWRADDR_G (rssconf ));
1419
1509
seq_printf (seq , " KeyMode: %s\n" , keymode [KEYMODE_G (rssconf )]);
1420
1510
seq_printf (seq , " VfWrEn: %3s\n" , yesno (rssconf & VFWREN_F ));
1421
1511
seq_printf (seq , " KeyWrEn: %3s\n" , yesno (rssconf & KEYWREN_F ));
@@ -1634,14 +1724,14 @@ static int rss_vf_config_open(struct inode *inode, struct file *file)
1634
1724
struct adapter * adapter = inode -> i_private ;
1635
1725
struct seq_tab * p ;
1636
1726
struct rss_vf_conf * vfconf ;
1637
- int vf ;
1727
+ int vf , vfcount = adapter -> params . arch . vfcount ;
1638
1728
1639
- p = seq_open_tab (file , 128 , sizeof (* vfconf ), 1 , rss_vf_config_show );
1729
+ p = seq_open_tab (file , vfcount , sizeof (* vfconf ), 1 , rss_vf_config_show );
1640
1730
if (!p )
1641
1731
return - ENOMEM ;
1642
1732
1643
1733
vfconf = (struct rss_vf_conf * )p -> data ;
1644
- for (vf = 0 ; vf < 128 ; vf ++ ) {
1734
+ for (vf = 0 ; vf < vfcount ; vf ++ ) {
1645
1735
t4_read_rss_vf_config (adapter , vf , & vfconf [vf ].rss_vf_vfl ,
1646
1736
& vfconf [vf ].rss_vf_vfh );
1647
1737
}
@@ -2033,7 +2123,7 @@ void add_debugfs_files(struct adapter *adap,
2033
2123
int t4_setup_debugfs (struct adapter * adap )
2034
2124
{
2035
2125
int i ;
2036
- u32 size ;
2126
+ u32 size = 0 ;
2037
2127
struct dentry * de ;
2038
2128
2039
2129
static struct t4_debugfs_entry t4_debugfs_files [] = {
@@ -2104,12 +2194,7 @@ int t4_setup_debugfs(struct adapter *adap)
2104
2194
size = t4_read_reg (adap , MA_EDRAM1_BAR_A );
2105
2195
add_debugfs_mem (adap , "edc1" , MEM_EDC1 , EDRAM1_SIZE_G (size ));
2106
2196
}
2107
- if (is_t4 (adap -> params .chip )) {
2108
- size = t4_read_reg (adap , MA_EXT_MEMORY_BAR_A );
2109
- if (i & EXT_MEM_ENABLE_F )
2110
- add_debugfs_mem (adap , "mc" , MEM_MC ,
2111
- EXT_MEM_SIZE_G (size ));
2112
- } else {
2197
+ if (is_t5 (adap -> params .chip )) {
2113
2198
if (i & EXT_MEM0_ENABLE_F ) {
2114
2199
size = t4_read_reg (adap , MA_EXT_MEMORY0_BAR_A );
2115
2200
add_debugfs_mem (adap , "mc0" , MEM_MC0 ,
@@ -2120,6 +2205,11 @@ int t4_setup_debugfs(struct adapter *adap)
2120
2205
add_debugfs_mem (adap , "mc1" , MEM_MC1 ,
2121
2206
EXT_MEM1_SIZE_G (size ));
2122
2207
}
2208
+ } else {
2209
+ if (i & EXT_MEM_ENABLE_F )
2210
+ size = t4_read_reg (adap , MA_EXT_MEMORY_BAR_A );
2211
+ add_debugfs_mem (adap , "mc" , MEM_MC ,
2212
+ EXT_MEM_SIZE_G (size ));
2123
2213
}
2124
2214
2125
2215
de = debugfs_create_file_size ("flash" , S_IRUSR , adap -> debugfs_root , adap ,
0 commit comments