1 /* 2 * This file is part of the Chelsio T4 Ethernet driver for Linux. 3 * 4 * Copyright (c) 2003-2014 Chelsio Communications, Inc. All rights reserved. 5 * 6 * This software is available to you under a choice of one of two 7 * licenses. You may choose to be licensed under the terms of the GNU 8 * General Public License (GPL) Version 2, available from the file 9 * COPYING in the main directory of this source tree, or the 10 * OpenIB.org BSD license below: 11 * 12 * Redistribution and use in source and binary forms, with or 13 * without modification, are permitted provided that the following 14 * conditions are met: 15 * 16 * - Redistributions of source code must retain the above 17 * copyright notice, this list of conditions and the following 18 * disclaimer. 19 * 20 * - Redistributions in binary form must reproduce the above 21 * copyright notice, this list of conditions and the following 22 * disclaimer in the documentation and/or other materials 23 * provided with the distribution. 24 * 25 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 26 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 27 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 28 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 29 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 30 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 31 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 32 * SOFTWARE. 33 */ 34 35 #include <linux/delay.h> 36 #include "cxgb4.h" 37 #include "t4_regs.h" 38 #include "t4fw_api.h" 39 40 /** 41 * t4_wait_op_done_val - wait until an operation is completed 42 * @adapter: the adapter performing the operation 43 * @reg: the register to check for completion 44 * @mask: a single-bit field within @reg that indicates completion 45 * @polarity: the value of the field when the operation is completed 46 * @attempts: number of check iterations 47 * @delay: delay in usecs between iterations 48 * @valp: where to store the value of the register at completion time 49 * 50 * Wait until an operation is completed by checking a bit in a register 51 * up to @attempts times. If @valp is not NULL the value of the register 52 * at the time it indicated completion is stored there. Returns 0 if the 53 * operation completes and -EAGAIN otherwise. 54 */ 55 static int t4_wait_op_done_val(struct adapter *adapter, int reg, u32 mask, 56 int polarity, int attempts, int delay, u32 *valp) 57 { 58 while (1) { 59 u32 val = t4_read_reg(adapter, reg); 60 61 if (!!(val & mask) == polarity) { 62 if (valp) 63 *valp = val; 64 return 0; 65 } 66 if (--attempts == 0) 67 return -EAGAIN; 68 if (delay) 69 udelay(delay); 70 } 71 } 72 73 static inline int t4_wait_op_done(struct adapter *adapter, int reg, u32 mask, 74 int polarity, int attempts, int delay) 75 { 76 return t4_wait_op_done_val(adapter, reg, mask, polarity, attempts, 77 delay, NULL); 78 } 79 80 /** 81 * t4_set_reg_field - set a register field to a value 82 * @adapter: the adapter to program 83 * @addr: the register address 84 * @mask: specifies the portion of the register to modify 85 * @val: the new value for the register field 86 * 87 * Sets a register field specified by the supplied mask to the 88 * given value. 89 */ 90 void t4_set_reg_field(struct adapter *adapter, unsigned int addr, u32 mask, 91 u32 val) 92 { 93 u32 v = t4_read_reg(adapter, addr) & ~mask; 94 95 t4_write_reg(adapter, addr, v | val); 96 (void) t4_read_reg(adapter, addr); /* flush */ 97 } 98 99 /** 100 * t4_read_indirect - read indirectly addressed registers 101 * @adap: the adapter 102 * @addr_reg: register holding the indirect address 103 * @data_reg: register holding the value of the indirect register 104 * @vals: where the read register values are stored 105 * @nregs: how many indirect registers to read 106 * @start_idx: index of first indirect register to read 107 * 108 * Reads registers that are accessed indirectly through an address/data 109 * register pair. 110 */ 111 void t4_read_indirect(struct adapter *adap, unsigned int addr_reg, 112 unsigned int data_reg, u32 *vals, 113 unsigned int nregs, unsigned int start_idx) 114 { 115 while (nregs--) { 116 t4_write_reg(adap, addr_reg, start_idx); 117 *vals++ = t4_read_reg(adap, data_reg); 118 start_idx++; 119 } 120 } 121 122 /** 123 * t4_write_indirect - write indirectly addressed registers 124 * @adap: the adapter 125 * @addr_reg: register holding the indirect addresses 126 * @data_reg: register holding the value for the indirect registers 127 * @vals: values to write 128 * @nregs: how many indirect registers to write 129 * @start_idx: address of first indirect register to write 130 * 131 * Writes a sequential block of registers that are accessed indirectly 132 * through an address/data register pair. 133 */ 134 void t4_write_indirect(struct adapter *adap, unsigned int addr_reg, 135 unsigned int data_reg, const u32 *vals, 136 unsigned int nregs, unsigned int start_idx) 137 { 138 while (nregs--) { 139 t4_write_reg(adap, addr_reg, start_idx++); 140 t4_write_reg(adap, data_reg, *vals++); 141 } 142 } 143 144 /* 145 * Read a 32-bit PCI Configuration Space register via the PCI-E backdoor 146 * mechanism. This guarantees that we get the real value even if we're 147 * operating within a Virtual Machine and the Hypervisor is trapping our 148 * Configuration Space accesses. 149 */ 150 void t4_hw_pci_read_cfg4(struct adapter *adap, int reg, u32 *val) 151 { 152 u32 req = ENABLE | FUNCTION(adap->fn) | reg; 153 154 if (is_t4(adap->params.chip)) 155 req |= F_LOCALCFG; 156 157 t4_write_reg(adap, PCIE_CFG_SPACE_REQ, req); 158 *val = t4_read_reg(adap, PCIE_CFG_SPACE_DATA); 159 160 /* Reset ENABLE to 0 so reads of PCIE_CFG_SPACE_DATA won't cause a 161 * Configuration Space read. (None of the other fields matter when 162 * ENABLE is 0 so a simple register write is easier than a 163 * read-modify-write via t4_set_reg_field().) 164 */ 165 t4_write_reg(adap, PCIE_CFG_SPACE_REQ, 0); 166 } 167 168 /* 169 * t4_report_fw_error - report firmware error 170 * @adap: the adapter 171 * 172 * The adapter firmware can indicate error conditions to the host. 173 * If the firmware has indicated an error, print out the reason for 174 * the firmware error. 175 */ 176 static void t4_report_fw_error(struct adapter *adap) 177 { 178 static const char *const reason[] = { 179 "Crash", /* PCIE_FW_EVAL_CRASH */ 180 "During Device Preparation", /* PCIE_FW_EVAL_PREP */ 181 "During Device Configuration", /* PCIE_FW_EVAL_CONF */ 182 "During Device Initialization", /* PCIE_FW_EVAL_INIT */ 183 "Unexpected Event", /* PCIE_FW_EVAL_UNEXPECTEDEVENT */ 184 "Insufficient Airflow", /* PCIE_FW_EVAL_OVERHEAT */ 185 "Device Shutdown", /* PCIE_FW_EVAL_DEVICESHUTDOWN */ 186 "Reserved", /* reserved */ 187 }; 188 u32 pcie_fw; 189 190 pcie_fw = t4_read_reg(adap, MA_PCIE_FW); 191 if (pcie_fw & PCIE_FW_ERR) 192 dev_err(adap->pdev_dev, "Firmware reports adapter error: %s\n", 193 reason[PCIE_FW_EVAL_G(pcie_fw)]); 194 } 195 196 /* 197 * Get the reply to a mailbox command and store it in @rpl in big-endian order. 198 */ 199 static void get_mbox_rpl(struct adapter *adap, __be64 *rpl, int nflit, 200 u32 mbox_addr) 201 { 202 for ( ; nflit; nflit--, mbox_addr += 8) 203 *rpl++ = cpu_to_be64(t4_read_reg64(adap, mbox_addr)); 204 } 205 206 /* 207 * Handle a FW assertion reported in a mailbox. 208 */ 209 static void fw_asrt(struct adapter *adap, u32 mbox_addr) 210 { 211 struct fw_debug_cmd asrt; 212 213 get_mbox_rpl(adap, (__be64 *)&asrt, sizeof(asrt) / 8, mbox_addr); 214 dev_alert(adap->pdev_dev, 215 "FW assertion at %.16s:%u, val0 %#x, val1 %#x\n", 216 asrt.u.assert.filename_0_7, ntohl(asrt.u.assert.line), 217 ntohl(asrt.u.assert.x), ntohl(asrt.u.assert.y)); 218 } 219 220 static void dump_mbox(struct adapter *adap, int mbox, u32 data_reg) 221 { 222 dev_err(adap->pdev_dev, 223 "mbox %d: %llx %llx %llx %llx %llx %llx %llx %llx\n", mbox, 224 (unsigned long long)t4_read_reg64(adap, data_reg), 225 (unsigned long long)t4_read_reg64(adap, data_reg + 8), 226 (unsigned long long)t4_read_reg64(adap, data_reg + 16), 227 (unsigned long long)t4_read_reg64(adap, data_reg + 24), 228 (unsigned long long)t4_read_reg64(adap, data_reg + 32), 229 (unsigned long long)t4_read_reg64(adap, data_reg + 40), 230 (unsigned long long)t4_read_reg64(adap, data_reg + 48), 231 (unsigned long long)t4_read_reg64(adap, data_reg + 56)); 232 } 233 234 /** 235 * t4_wr_mbox_meat - send a command to FW through the given mailbox 236 * @adap: the adapter 237 * @mbox: index of the mailbox to use 238 * @cmd: the command to write 239 * @size: command length in bytes 240 * @rpl: where to optionally store the reply 241 * @sleep_ok: if true we may sleep while awaiting command completion 242 * 243 * Sends the given command to FW through the selected mailbox and waits 244 * for the FW to execute the command. If @rpl is not %NULL it is used to 245 * store the FW's reply to the command. The command and its optional 246 * reply are of the same length. FW can take up to %FW_CMD_MAX_TIMEOUT ms 247 * to respond. @sleep_ok determines whether we may sleep while awaiting 248 * the response. If sleeping is allowed we use progressive backoff 249 * otherwise we spin. 250 * 251 * The return value is 0 on success or a negative errno on failure. A 252 * failure can happen either because we are not able to execute the 253 * command or FW executes it but signals an error. In the latter case 254 * the return value is the error code indicated by FW (negated). 255 */ 256 int t4_wr_mbox_meat(struct adapter *adap, int mbox, const void *cmd, int size, 257 void *rpl, bool sleep_ok) 258 { 259 static const int delay[] = { 260 1, 1, 3, 5, 10, 10, 20, 50, 100, 200 261 }; 262 263 u32 v; 264 u64 res; 265 int i, ms, delay_idx; 266 const __be64 *p = cmd; 267 u32 data_reg = PF_REG(mbox, CIM_PF_MAILBOX_DATA); 268 u32 ctl_reg = PF_REG(mbox, CIM_PF_MAILBOX_CTRL); 269 270 if ((size & 15) || size > MBOX_LEN) 271 return -EINVAL; 272 273 /* 274 * If the device is off-line, as in EEH, commands will time out. 275 * Fail them early so we don't waste time waiting. 276 */ 277 if (adap->pdev->error_state != pci_channel_io_normal) 278 return -EIO; 279 280 v = MBOWNER_GET(t4_read_reg(adap, ctl_reg)); 281 for (i = 0; v == MBOX_OWNER_NONE && i < 3; i++) 282 v = MBOWNER_GET(t4_read_reg(adap, ctl_reg)); 283 284 if (v != MBOX_OWNER_DRV) 285 return v ? -EBUSY : -ETIMEDOUT; 286 287 for (i = 0; i < size; i += 8) 288 t4_write_reg64(adap, data_reg + i, be64_to_cpu(*p++)); 289 290 t4_write_reg(adap, ctl_reg, MBMSGVALID | MBOWNER(MBOX_OWNER_FW)); 291 t4_read_reg(adap, ctl_reg); /* flush write */ 292 293 delay_idx = 0; 294 ms = delay[0]; 295 296 for (i = 0; i < FW_CMD_MAX_TIMEOUT; i += ms) { 297 if (sleep_ok) { 298 ms = delay[delay_idx]; /* last element may repeat */ 299 if (delay_idx < ARRAY_SIZE(delay) - 1) 300 delay_idx++; 301 msleep(ms); 302 } else 303 mdelay(ms); 304 305 v = t4_read_reg(adap, ctl_reg); 306 if (MBOWNER_GET(v) == MBOX_OWNER_DRV) { 307 if (!(v & MBMSGVALID)) { 308 t4_write_reg(adap, ctl_reg, 0); 309 continue; 310 } 311 312 res = t4_read_reg64(adap, data_reg); 313 if (FW_CMD_OP_G(res >> 32) == FW_DEBUG_CMD) { 314 fw_asrt(adap, data_reg); 315 res = FW_CMD_RETVAL_V(EIO); 316 } else if (rpl) { 317 get_mbox_rpl(adap, rpl, size / 8, data_reg); 318 } 319 320 if (FW_CMD_RETVAL_G((int)res)) 321 dump_mbox(adap, mbox, data_reg); 322 t4_write_reg(adap, ctl_reg, 0); 323 return -FW_CMD_RETVAL_G((int)res); 324 } 325 } 326 327 dump_mbox(adap, mbox, data_reg); 328 dev_err(adap->pdev_dev, "command %#x in mailbox %d timed out\n", 329 *(const u8 *)cmd, mbox); 330 t4_report_fw_error(adap); 331 return -ETIMEDOUT; 332 } 333 334 /** 335 * t4_mc_read - read from MC through backdoor accesses 336 * @adap: the adapter 337 * @addr: address of first byte requested 338 * @idx: which MC to access 339 * @data: 64 bytes of data containing the requested address 340 * @ecc: where to store the corresponding 64-bit ECC word 341 * 342 * Read 64 bytes of data from MC starting at a 64-byte-aligned address 343 * that covers the requested address @addr. If @parity is not %NULL it 344 * is assigned the 64-bit ECC word for the read data. 345 */ 346 int t4_mc_read(struct adapter *adap, int idx, u32 addr, __be32 *data, u64 *ecc) 347 { 348 int i; 349 u32 mc_bist_cmd, mc_bist_cmd_addr, mc_bist_cmd_len; 350 u32 mc_bist_status_rdata, mc_bist_data_pattern; 351 352 if (is_t4(adap->params.chip)) { 353 mc_bist_cmd = MC_BIST_CMD; 354 mc_bist_cmd_addr = MC_BIST_CMD_ADDR; 355 mc_bist_cmd_len = MC_BIST_CMD_LEN; 356 mc_bist_status_rdata = MC_BIST_STATUS_RDATA; 357 mc_bist_data_pattern = MC_BIST_DATA_PATTERN; 358 } else { 359 mc_bist_cmd = MC_REG(MC_P_BIST_CMD, idx); 360 mc_bist_cmd_addr = MC_REG(MC_P_BIST_CMD_ADDR, idx); 361 mc_bist_cmd_len = MC_REG(MC_P_BIST_CMD_LEN, idx); 362 mc_bist_status_rdata = MC_REG(MC_P_BIST_STATUS_RDATA, idx); 363 mc_bist_data_pattern = MC_REG(MC_P_BIST_DATA_PATTERN, idx); 364 } 365 366 if (t4_read_reg(adap, mc_bist_cmd) & START_BIST) 367 return -EBUSY; 368 t4_write_reg(adap, mc_bist_cmd_addr, addr & ~0x3fU); 369 t4_write_reg(adap, mc_bist_cmd_len, 64); 370 t4_write_reg(adap, mc_bist_data_pattern, 0xc); 371 t4_write_reg(adap, mc_bist_cmd, BIST_OPCODE(1) | START_BIST | 372 BIST_CMD_GAP(1)); 373 i = t4_wait_op_done(adap, mc_bist_cmd, START_BIST, 0, 10, 1); 374 if (i) 375 return i; 376 377 #define MC_DATA(i) MC_BIST_STATUS_REG(mc_bist_status_rdata, i) 378 379 for (i = 15; i >= 0; i--) 380 *data++ = htonl(t4_read_reg(adap, MC_DATA(i))); 381 if (ecc) 382 *ecc = t4_read_reg64(adap, MC_DATA(16)); 383 #undef MC_DATA 384 return 0; 385 } 386 387 /** 388 * t4_edc_read - read from EDC through backdoor accesses 389 * @adap: the adapter 390 * @idx: which EDC to access 391 * @addr: address of first byte requested 392 * @data: 64 bytes of data containing the requested address 393 * @ecc: where to store the corresponding 64-bit ECC word 394 * 395 * Read 64 bytes of data from EDC starting at a 64-byte-aligned address 396 * that covers the requested address @addr. If @parity is not %NULL it 397 * is assigned the 64-bit ECC word for the read data. 398 */ 399 int t4_edc_read(struct adapter *adap, int idx, u32 addr, __be32 *data, u64 *ecc) 400 { 401 int i; 402 u32 edc_bist_cmd, edc_bist_cmd_addr, edc_bist_cmd_len; 403 u32 edc_bist_cmd_data_pattern, edc_bist_status_rdata; 404 405 if (is_t4(adap->params.chip)) { 406 edc_bist_cmd = EDC_REG(EDC_BIST_CMD, idx); 407 edc_bist_cmd_addr = EDC_REG(EDC_BIST_CMD_ADDR, idx); 408 edc_bist_cmd_len = EDC_REG(EDC_BIST_CMD_LEN, idx); 409 edc_bist_cmd_data_pattern = EDC_REG(EDC_BIST_DATA_PATTERN, 410 idx); 411 edc_bist_status_rdata = EDC_REG(EDC_BIST_STATUS_RDATA, 412 idx); 413 } else { 414 edc_bist_cmd = EDC_REG_T5(EDC_H_BIST_CMD, idx); 415 edc_bist_cmd_addr = EDC_REG_T5(EDC_H_BIST_CMD_ADDR, idx); 416 edc_bist_cmd_len = EDC_REG_T5(EDC_H_BIST_CMD_LEN, idx); 417 edc_bist_cmd_data_pattern = 418 EDC_REG_T5(EDC_H_BIST_DATA_PATTERN, idx); 419 edc_bist_status_rdata = 420 EDC_REG_T5(EDC_H_BIST_STATUS_RDATA, idx); 421 } 422 423 if (t4_read_reg(adap, edc_bist_cmd) & START_BIST) 424 return -EBUSY; 425 t4_write_reg(adap, edc_bist_cmd_addr, addr & ~0x3fU); 426 t4_write_reg(adap, edc_bist_cmd_len, 64); 427 t4_write_reg(adap, edc_bist_cmd_data_pattern, 0xc); 428 t4_write_reg(adap, edc_bist_cmd, 429 BIST_OPCODE(1) | BIST_CMD_GAP(1) | START_BIST); 430 i = t4_wait_op_done(adap, edc_bist_cmd, START_BIST, 0, 10, 1); 431 if (i) 432 return i; 433 434 #define EDC_DATA(i) (EDC_BIST_STATUS_REG(edc_bist_status_rdata, i)) 435 436 for (i = 15; i >= 0; i--) 437 *data++ = htonl(t4_read_reg(adap, EDC_DATA(i))); 438 if (ecc) 439 *ecc = t4_read_reg64(adap, EDC_DATA(16)); 440 #undef EDC_DATA 441 return 0; 442 } 443 444 /** 445 * t4_memory_rw - read/write EDC 0, EDC 1 or MC via PCIE memory window 446 * @adap: the adapter 447 * @win: PCI-E Memory Window to use 448 * @mtype: memory type: MEM_EDC0, MEM_EDC1 or MEM_MC 449 * @addr: address within indicated memory type 450 * @len: amount of memory to transfer 451 * @buf: host memory buffer 452 * @dir: direction of transfer T4_MEMORY_READ (1) or T4_MEMORY_WRITE (0) 453 * 454 * Reads/writes an [almost] arbitrary memory region in the firmware: the 455 * firmware memory address and host buffer must be aligned on 32-bit 456 * boudaries; the length may be arbitrary. The memory is transferred as 457 * a raw byte sequence from/to the firmware's memory. If this memory 458 * contains data structures which contain multi-byte integers, it's the 459 * caller's responsibility to perform appropriate byte order conversions. 460 */ 461 int t4_memory_rw(struct adapter *adap, int win, int mtype, u32 addr, 462 u32 len, __be32 *buf, int dir) 463 { 464 u32 pos, offset, resid, memoffset; 465 u32 edc_size, mc_size, win_pf, mem_reg, mem_aperture, mem_base; 466 467 /* Argument sanity checks ... 468 */ 469 if (addr & 0x3) 470 return -EINVAL; 471 472 /* It's convenient to be able to handle lengths which aren't a 473 * multiple of 32-bits because we often end up transferring files to 474 * the firmware. So we'll handle that by normalizing the length here 475 * and then handling any residual transfer at the end. 476 */ 477 resid = len & 0x3; 478 len -= resid; 479 480 /* Offset into the region of memory which is being accessed 481 * MEM_EDC0 = 0 482 * MEM_EDC1 = 1 483 * MEM_MC = 2 -- T4 484 * MEM_MC0 = 2 -- For T5 485 * MEM_MC1 = 3 -- For T5 486 */ 487 edc_size = EDRAM0_SIZE_G(t4_read_reg(adap, MA_EDRAM0_BAR_A)); 488 if (mtype != MEM_MC1) 489 memoffset = (mtype * (edc_size * 1024 * 1024)); 490 else { 491 mc_size = EXT_MEM0_SIZE_G(t4_read_reg(adap, 492 MA_EXT_MEMORY1_BAR_A)); 493 memoffset = (MEM_MC0 * edc_size + mc_size) * 1024 * 1024; 494 } 495 496 /* Determine the PCIE_MEM_ACCESS_OFFSET */ 497 addr = addr + memoffset; 498 499 /* Each PCI-E Memory Window is programmed with a window size -- or 500 * "aperture" -- which controls the granularity of its mapping onto 501 * adapter memory. We need to grab that aperture in order to know 502 * how to use the specified window. The window is also programmed 503 * with the base address of the Memory Window in BAR0's address 504 * space. For T4 this is an absolute PCI-E Bus Address. For T5 505 * the address is relative to BAR0. 506 */ 507 mem_reg = t4_read_reg(adap, 508 PCIE_MEM_ACCESS_REG(PCIE_MEM_ACCESS_BASE_WIN, 509 win)); 510 mem_aperture = 1 << (GET_WINDOW(mem_reg) + 10); 511 mem_base = GET_PCIEOFST(mem_reg) << 10; 512 if (is_t4(adap->params.chip)) 513 mem_base -= adap->t4_bar0; 514 win_pf = is_t4(adap->params.chip) ? 0 : V_PFNUM(adap->fn); 515 516 /* Calculate our initial PCI-E Memory Window Position and Offset into 517 * that Window. 518 */ 519 pos = addr & ~(mem_aperture-1); 520 offset = addr - pos; 521 522 /* Set up initial PCI-E Memory Window to cover the start of our 523 * transfer. (Read it back to ensure that changes propagate before we 524 * attempt to use the new value.) 525 */ 526 t4_write_reg(adap, 527 PCIE_MEM_ACCESS_REG(PCIE_MEM_ACCESS_OFFSET, win), 528 pos | win_pf); 529 t4_read_reg(adap, 530 PCIE_MEM_ACCESS_REG(PCIE_MEM_ACCESS_OFFSET, win)); 531 532 /* Transfer data to/from the adapter as long as there's an integral 533 * number of 32-bit transfers to complete. 534 */ 535 while (len > 0) { 536 if (dir == T4_MEMORY_READ) 537 *buf++ = (__force __be32) t4_read_reg(adap, 538 mem_base + offset); 539 else 540 t4_write_reg(adap, mem_base + offset, 541 (__force u32) *buf++); 542 offset += sizeof(__be32); 543 len -= sizeof(__be32); 544 545 /* If we've reached the end of our current window aperture, 546 * move the PCI-E Memory Window on to the next. Note that 547 * doing this here after "len" may be 0 allows us to set up 548 * the PCI-E Memory Window for a possible final residual 549 * transfer below ... 550 */ 551 if (offset == mem_aperture) { 552 pos += mem_aperture; 553 offset = 0; 554 t4_write_reg(adap, 555 PCIE_MEM_ACCESS_REG(PCIE_MEM_ACCESS_OFFSET, 556 win), pos | win_pf); 557 t4_read_reg(adap, 558 PCIE_MEM_ACCESS_REG(PCIE_MEM_ACCESS_OFFSET, 559 win)); 560 } 561 } 562 563 /* If the original transfer had a length which wasn't a multiple of 564 * 32-bits, now's where we need to finish off the transfer of the 565 * residual amount. The PCI-E Memory Window has already been moved 566 * above (if necessary) to cover this final transfer. 567 */ 568 if (resid) { 569 union { 570 __be32 word; 571 char byte[4]; 572 } last; 573 unsigned char *bp; 574 int i; 575 576 if (dir == T4_MEMORY_READ) { 577 last.word = (__force __be32) t4_read_reg(adap, 578 mem_base + offset); 579 for (bp = (unsigned char *)buf, i = resid; i < 4; i++) 580 bp[i] = last.byte[i]; 581 } else { 582 last.word = *buf; 583 for (i = resid; i < 4; i++) 584 last.byte[i] = 0; 585 t4_write_reg(adap, mem_base + offset, 586 (__force u32) last.word); 587 } 588 } 589 590 return 0; 591 } 592 593 #define EEPROM_STAT_ADDR 0x7bfc 594 #define VPD_BASE 0x400 595 #define VPD_BASE_OLD 0 596 #define VPD_LEN 1024 597 #define CHELSIO_VPD_UNIQUE_ID 0x82 598 599 /** 600 * t4_seeprom_wp - enable/disable EEPROM write protection 601 * @adapter: the adapter 602 * @enable: whether to enable or disable write protection 603 * 604 * Enables or disables write protection on the serial EEPROM. 605 */ 606 int t4_seeprom_wp(struct adapter *adapter, bool enable) 607 { 608 unsigned int v = enable ? 0xc : 0; 609 int ret = pci_write_vpd(adapter->pdev, EEPROM_STAT_ADDR, 4, &v); 610 return ret < 0 ? ret : 0; 611 } 612 613 /** 614 * get_vpd_params - read VPD parameters from VPD EEPROM 615 * @adapter: adapter to read 616 * @p: where to store the parameters 617 * 618 * Reads card parameters stored in VPD EEPROM. 619 */ 620 int get_vpd_params(struct adapter *adapter, struct vpd_params *p) 621 { 622 u32 cclk_param, cclk_val; 623 int i, ret, addr; 624 int ec, sn, pn; 625 u8 *vpd, csum; 626 unsigned int vpdr_len, kw_offset, id_len; 627 628 vpd = vmalloc(VPD_LEN); 629 if (!vpd) 630 return -ENOMEM; 631 632 ret = pci_read_vpd(adapter->pdev, VPD_BASE, sizeof(u32), vpd); 633 if (ret < 0) 634 goto out; 635 636 /* The VPD shall have a unique identifier specified by the PCI SIG. 637 * For chelsio adapters, the identifier is 0x82. The first byte of a VPD 638 * shall be CHELSIO_VPD_UNIQUE_ID (0x82). The VPD programming software 639 * is expected to automatically put this entry at the 640 * beginning of the VPD. 641 */ 642 addr = *vpd == CHELSIO_VPD_UNIQUE_ID ? VPD_BASE : VPD_BASE_OLD; 643 644 ret = pci_read_vpd(adapter->pdev, addr, VPD_LEN, vpd); 645 if (ret < 0) 646 goto out; 647 648 if (vpd[0] != PCI_VPD_LRDT_ID_STRING) { 649 dev_err(adapter->pdev_dev, "missing VPD ID string\n"); 650 ret = -EINVAL; 651 goto out; 652 } 653 654 id_len = pci_vpd_lrdt_size(vpd); 655 if (id_len > ID_LEN) 656 id_len = ID_LEN; 657 658 i = pci_vpd_find_tag(vpd, 0, VPD_LEN, PCI_VPD_LRDT_RO_DATA); 659 if (i < 0) { 660 dev_err(adapter->pdev_dev, "missing VPD-R section\n"); 661 ret = -EINVAL; 662 goto out; 663 } 664 665 vpdr_len = pci_vpd_lrdt_size(&vpd[i]); 666 kw_offset = i + PCI_VPD_LRDT_TAG_SIZE; 667 if (vpdr_len + kw_offset > VPD_LEN) { 668 dev_err(adapter->pdev_dev, "bad VPD-R length %u\n", vpdr_len); 669 ret = -EINVAL; 670 goto out; 671 } 672 673 #define FIND_VPD_KW(var, name) do { \ 674 var = pci_vpd_find_info_keyword(vpd, kw_offset, vpdr_len, name); \ 675 if (var < 0) { \ 676 dev_err(adapter->pdev_dev, "missing VPD keyword " name "\n"); \ 677 ret = -EINVAL; \ 678 goto out; \ 679 } \ 680 var += PCI_VPD_INFO_FLD_HDR_SIZE; \ 681 } while (0) 682 683 FIND_VPD_KW(i, "RV"); 684 for (csum = 0; i >= 0; i--) 685 csum += vpd[i]; 686 687 if (csum) { 688 dev_err(adapter->pdev_dev, 689 "corrupted VPD EEPROM, actual csum %u\n", csum); 690 ret = -EINVAL; 691 goto out; 692 } 693 694 FIND_VPD_KW(ec, "EC"); 695 FIND_VPD_KW(sn, "SN"); 696 FIND_VPD_KW(pn, "PN"); 697 #undef FIND_VPD_KW 698 699 memcpy(p->id, vpd + PCI_VPD_LRDT_TAG_SIZE, id_len); 700 strim(p->id); 701 memcpy(p->ec, vpd + ec, EC_LEN); 702 strim(p->ec); 703 i = pci_vpd_info_field_size(vpd + sn - PCI_VPD_INFO_FLD_HDR_SIZE); 704 memcpy(p->sn, vpd + sn, min(i, SERNUM_LEN)); 705 strim(p->sn); 706 i = pci_vpd_info_field_size(vpd + pn - PCI_VPD_INFO_FLD_HDR_SIZE); 707 memcpy(p->pn, vpd + pn, min(i, PN_LEN)); 708 strim(p->pn); 709 710 /* 711 * Ask firmware for the Core Clock since it knows how to translate the 712 * Reference Clock ('V2') VPD field into a Core Clock value ... 713 */ 714 cclk_param = (FW_PARAMS_MNEM_V(FW_PARAMS_MNEM_DEV) | 715 FW_PARAMS_PARAM_X_V(FW_PARAMS_PARAM_DEV_CCLK)); 716 ret = t4_query_params(adapter, adapter->mbox, 0, 0, 717 1, &cclk_param, &cclk_val); 718 719 out: 720 vfree(vpd); 721 if (ret) 722 return ret; 723 p->cclk = cclk_val; 724 725 return 0; 726 } 727 728 /* serial flash and firmware constants */ 729 enum { 730 SF_ATTEMPTS = 10, /* max retries for SF operations */ 731 732 /* flash command opcodes */ 733 SF_PROG_PAGE = 2, /* program page */ 734 SF_WR_DISABLE = 4, /* disable writes */ 735 SF_RD_STATUS = 5, /* read status register */ 736 SF_WR_ENABLE = 6, /* enable writes */ 737 SF_RD_DATA_FAST = 0xb, /* read flash */ 738 SF_RD_ID = 0x9f, /* read ID */ 739 SF_ERASE_SECTOR = 0xd8, /* erase sector */ 740 741 FW_MAX_SIZE = 16 * SF_SEC_SIZE, 742 }; 743 744 /** 745 * sf1_read - read data from the serial flash 746 * @adapter: the adapter 747 * @byte_cnt: number of bytes to read 748 * @cont: whether another operation will be chained 749 * @lock: whether to lock SF for PL access only 750 * @valp: where to store the read data 751 * 752 * Reads up to 4 bytes of data from the serial flash. The location of 753 * the read needs to be specified prior to calling this by issuing the 754 * appropriate commands to the serial flash. 755 */ 756 static int sf1_read(struct adapter *adapter, unsigned int byte_cnt, int cont, 757 int lock, u32 *valp) 758 { 759 int ret; 760 761 if (!byte_cnt || byte_cnt > 4) 762 return -EINVAL; 763 if (t4_read_reg(adapter, SF_OP) & SF_BUSY) 764 return -EBUSY; 765 cont = cont ? SF_CONT : 0; 766 lock = lock ? SF_LOCK : 0; 767 t4_write_reg(adapter, SF_OP, lock | cont | BYTECNT(byte_cnt - 1)); 768 ret = t4_wait_op_done(adapter, SF_OP, SF_BUSY, 0, SF_ATTEMPTS, 5); 769 if (!ret) 770 *valp = t4_read_reg(adapter, SF_DATA); 771 return ret; 772 } 773 774 /** 775 * sf1_write - write data to the serial flash 776 * @adapter: the adapter 777 * @byte_cnt: number of bytes to write 778 * @cont: whether another operation will be chained 779 * @lock: whether to lock SF for PL access only 780 * @val: value to write 781 * 782 * Writes up to 4 bytes of data to the serial flash. The location of 783 * the write needs to be specified prior to calling this by issuing the 784 * appropriate commands to the serial flash. 785 */ 786 static int sf1_write(struct adapter *adapter, unsigned int byte_cnt, int cont, 787 int lock, u32 val) 788 { 789 if (!byte_cnt || byte_cnt > 4) 790 return -EINVAL; 791 if (t4_read_reg(adapter, SF_OP) & SF_BUSY) 792 return -EBUSY; 793 cont = cont ? SF_CONT : 0; 794 lock = lock ? SF_LOCK : 0; 795 t4_write_reg(adapter, SF_DATA, val); 796 t4_write_reg(adapter, SF_OP, lock | 797 cont | BYTECNT(byte_cnt - 1) | OP_WR); 798 return t4_wait_op_done(adapter, SF_OP, SF_BUSY, 0, SF_ATTEMPTS, 5); 799 } 800 801 /** 802 * flash_wait_op - wait for a flash operation to complete 803 * @adapter: the adapter 804 * @attempts: max number of polls of the status register 805 * @delay: delay between polls in ms 806 * 807 * Wait for a flash operation to complete by polling the status register. 808 */ 809 static int flash_wait_op(struct adapter *adapter, int attempts, int delay) 810 { 811 int ret; 812 u32 status; 813 814 while (1) { 815 if ((ret = sf1_write(adapter, 1, 1, 1, SF_RD_STATUS)) != 0 || 816 (ret = sf1_read(adapter, 1, 0, 1, &status)) != 0) 817 return ret; 818 if (!(status & 1)) 819 return 0; 820 if (--attempts == 0) 821 return -EAGAIN; 822 if (delay) 823 msleep(delay); 824 } 825 } 826 827 /** 828 * t4_read_flash - read words from serial flash 829 * @adapter: the adapter 830 * @addr: the start address for the read 831 * @nwords: how many 32-bit words to read 832 * @data: where to store the read data 833 * @byte_oriented: whether to store data as bytes or as words 834 * 835 * Read the specified number of 32-bit words from the serial flash. 836 * If @byte_oriented is set the read data is stored as a byte array 837 * (i.e., big-endian), otherwise as 32-bit words in the platform's 838 * natural endianess. 839 */ 840 static int t4_read_flash(struct adapter *adapter, unsigned int addr, 841 unsigned int nwords, u32 *data, int byte_oriented) 842 { 843 int ret; 844 845 if (addr + nwords * sizeof(u32) > adapter->params.sf_size || (addr & 3)) 846 return -EINVAL; 847 848 addr = swab32(addr) | SF_RD_DATA_FAST; 849 850 if ((ret = sf1_write(adapter, 4, 1, 0, addr)) != 0 || 851 (ret = sf1_read(adapter, 1, 1, 0, data)) != 0) 852 return ret; 853 854 for ( ; nwords; nwords--, data++) { 855 ret = sf1_read(adapter, 4, nwords > 1, nwords == 1, data); 856 if (nwords == 1) 857 t4_write_reg(adapter, SF_OP, 0); /* unlock SF */ 858 if (ret) 859 return ret; 860 if (byte_oriented) 861 *data = (__force __u32) (htonl(*data)); 862 } 863 return 0; 864 } 865 866 /** 867 * t4_write_flash - write up to a page of data to the serial flash 868 * @adapter: the adapter 869 * @addr: the start address to write 870 * @n: length of data to write in bytes 871 * @data: the data to write 872 * 873 * Writes up to a page of data (256 bytes) to the serial flash starting 874 * at the given address. All the data must be written to the same page. 875 */ 876 static int t4_write_flash(struct adapter *adapter, unsigned int addr, 877 unsigned int n, const u8 *data) 878 { 879 int ret; 880 u32 buf[64]; 881 unsigned int i, c, left, val, offset = addr & 0xff; 882 883 if (addr >= adapter->params.sf_size || offset + n > SF_PAGE_SIZE) 884 return -EINVAL; 885 886 val = swab32(addr) | SF_PROG_PAGE; 887 888 if ((ret = sf1_write(adapter, 1, 0, 1, SF_WR_ENABLE)) != 0 || 889 (ret = sf1_write(adapter, 4, 1, 1, val)) != 0) 890 goto unlock; 891 892 for (left = n; left; left -= c) { 893 c = min(left, 4U); 894 for (val = 0, i = 0; i < c; ++i) 895 val = (val << 8) + *data++; 896 897 ret = sf1_write(adapter, c, c != left, 1, val); 898 if (ret) 899 goto unlock; 900 } 901 ret = flash_wait_op(adapter, 8, 1); 902 if (ret) 903 goto unlock; 904 905 t4_write_reg(adapter, SF_OP, 0); /* unlock SF */ 906 907 /* Read the page to verify the write succeeded */ 908 ret = t4_read_flash(adapter, addr & ~0xff, ARRAY_SIZE(buf), buf, 1); 909 if (ret) 910 return ret; 911 912 if (memcmp(data - n, (u8 *)buf + offset, n)) { 913 dev_err(adapter->pdev_dev, 914 "failed to correctly write the flash page at %#x\n", 915 addr); 916 return -EIO; 917 } 918 return 0; 919 920 unlock: 921 t4_write_reg(adapter, SF_OP, 0); /* unlock SF */ 922 return ret; 923 } 924 925 /** 926 * t4_get_fw_version - read the firmware version 927 * @adapter: the adapter 928 * @vers: where to place the version 929 * 930 * Reads the FW version from flash. 931 */ 932 int t4_get_fw_version(struct adapter *adapter, u32 *vers) 933 { 934 return t4_read_flash(adapter, FLASH_FW_START + 935 offsetof(struct fw_hdr, fw_ver), 1, 936 vers, 0); 937 } 938 939 /** 940 * t4_get_tp_version - read the TP microcode version 941 * @adapter: the adapter 942 * @vers: where to place the version 943 * 944 * Reads the TP microcode version from flash. 945 */ 946 int t4_get_tp_version(struct adapter *adapter, u32 *vers) 947 { 948 return t4_read_flash(adapter, FLASH_FW_START + 949 offsetof(struct fw_hdr, tp_microcode_ver), 950 1, vers, 0); 951 } 952 953 /* Is the given firmware API compatible with the one the driver was compiled 954 * with? 955 */ 956 static int fw_compatible(const struct fw_hdr *hdr1, const struct fw_hdr *hdr2) 957 { 958 959 /* short circuit if it's the exact same firmware version */ 960 if (hdr1->chip == hdr2->chip && hdr1->fw_ver == hdr2->fw_ver) 961 return 1; 962 963 #define SAME_INTF(x) (hdr1->intfver_##x == hdr2->intfver_##x) 964 if (hdr1->chip == hdr2->chip && SAME_INTF(nic) && SAME_INTF(vnic) && 965 SAME_INTF(ri) && SAME_INTF(iscsi) && SAME_INTF(fcoe)) 966 return 1; 967 #undef SAME_INTF 968 969 return 0; 970 } 971 972 /* The firmware in the filesystem is usable, but should it be installed? 973 * This routine explains itself in detail if it indicates the filesystem 974 * firmware should be installed. 975 */ 976 static int should_install_fs_fw(struct adapter *adap, int card_fw_usable, 977 int k, int c) 978 { 979 const char *reason; 980 981 if (!card_fw_usable) { 982 reason = "incompatible or unusable"; 983 goto install; 984 } 985 986 if (k > c) { 987 reason = "older than the version supported with this driver"; 988 goto install; 989 } 990 991 return 0; 992 993 install: 994 dev_err(adap->pdev_dev, "firmware on card (%u.%u.%u.%u) is %s, " 995 "installing firmware %u.%u.%u.%u on card.\n", 996 FW_HDR_FW_VER_MAJOR_G(c), FW_HDR_FW_VER_MINOR_G(c), 997 FW_HDR_FW_VER_MICRO_G(c), FW_HDR_FW_VER_BUILD_G(c), reason, 998 FW_HDR_FW_VER_MAJOR_G(k), FW_HDR_FW_VER_MINOR_G(k), 999 FW_HDR_FW_VER_MICRO_G(k), FW_HDR_FW_VER_BUILD_G(k)); 1000 1001 return 1; 1002 } 1003 1004 int t4_prep_fw(struct adapter *adap, struct fw_info *fw_info, 1005 const u8 *fw_data, unsigned int fw_size, 1006 struct fw_hdr *card_fw, enum dev_state state, 1007 int *reset) 1008 { 1009 int ret, card_fw_usable, fs_fw_usable; 1010 const struct fw_hdr *fs_fw; 1011 const struct fw_hdr *drv_fw; 1012 1013 drv_fw = &fw_info->fw_hdr; 1014 1015 /* Read the header of the firmware on the card */ 1016 ret = -t4_read_flash(adap, FLASH_FW_START, 1017 sizeof(*card_fw) / sizeof(uint32_t), 1018 (uint32_t *)card_fw, 1); 1019 if (ret == 0) { 1020 card_fw_usable = fw_compatible(drv_fw, (const void *)card_fw); 1021 } else { 1022 dev_err(adap->pdev_dev, 1023 "Unable to read card's firmware header: %d\n", ret); 1024 card_fw_usable = 0; 1025 } 1026 1027 if (fw_data != NULL) { 1028 fs_fw = (const void *)fw_data; 1029 fs_fw_usable = fw_compatible(drv_fw, fs_fw); 1030 } else { 1031 fs_fw = NULL; 1032 fs_fw_usable = 0; 1033 } 1034 1035 if (card_fw_usable && card_fw->fw_ver == drv_fw->fw_ver && 1036 (!fs_fw_usable || fs_fw->fw_ver == drv_fw->fw_ver)) { 1037 /* Common case: the firmware on the card is an exact match and 1038 * the filesystem one is an exact match too, or the filesystem 1039 * one is absent/incompatible. 1040 */ 1041 } else if (fs_fw_usable && state == DEV_STATE_UNINIT && 1042 should_install_fs_fw(adap, card_fw_usable, 1043 be32_to_cpu(fs_fw->fw_ver), 1044 be32_to_cpu(card_fw->fw_ver))) { 1045 ret = -t4_fw_upgrade(adap, adap->mbox, fw_data, 1046 fw_size, 0); 1047 if (ret != 0) { 1048 dev_err(adap->pdev_dev, 1049 "failed to install firmware: %d\n", ret); 1050 goto bye; 1051 } 1052 1053 /* Installed successfully, update the cached header too. */ 1054 memcpy(card_fw, fs_fw, sizeof(*card_fw)); 1055 card_fw_usable = 1; 1056 *reset = 0; /* already reset as part of load_fw */ 1057 } 1058 1059 if (!card_fw_usable) { 1060 uint32_t d, c, k; 1061 1062 d = be32_to_cpu(drv_fw->fw_ver); 1063 c = be32_to_cpu(card_fw->fw_ver); 1064 k = fs_fw ? be32_to_cpu(fs_fw->fw_ver) : 0; 1065 1066 dev_err(adap->pdev_dev, "Cannot find a usable firmware: " 1067 "chip state %d, " 1068 "driver compiled with %d.%d.%d.%d, " 1069 "card has %d.%d.%d.%d, filesystem has %d.%d.%d.%d\n", 1070 state, 1071 FW_HDR_FW_VER_MAJOR_G(d), FW_HDR_FW_VER_MINOR_G(d), 1072 FW_HDR_FW_VER_MICRO_G(d), FW_HDR_FW_VER_BUILD_G(d), 1073 FW_HDR_FW_VER_MAJOR_G(c), FW_HDR_FW_VER_MINOR_G(c), 1074 FW_HDR_FW_VER_MICRO_G(c), FW_HDR_FW_VER_BUILD_G(c), 1075 FW_HDR_FW_VER_MAJOR_G(k), FW_HDR_FW_VER_MINOR_G(k), 1076 FW_HDR_FW_VER_MICRO_G(k), FW_HDR_FW_VER_BUILD_G(k)); 1077 ret = EINVAL; 1078 goto bye; 1079 } 1080 1081 /* We're using whatever's on the card and it's known to be good. */ 1082 adap->params.fw_vers = be32_to_cpu(card_fw->fw_ver); 1083 adap->params.tp_vers = be32_to_cpu(card_fw->tp_microcode_ver); 1084 1085 bye: 1086 return ret; 1087 } 1088 1089 /** 1090 * t4_flash_erase_sectors - erase a range of flash sectors 1091 * @adapter: the adapter 1092 * @start: the first sector to erase 1093 * @end: the last sector to erase 1094 * 1095 * Erases the sectors in the given inclusive range. 1096 */ 1097 static int t4_flash_erase_sectors(struct adapter *adapter, int start, int end) 1098 { 1099 int ret = 0; 1100 1101 if (end >= adapter->params.sf_nsec) 1102 return -EINVAL; 1103 1104 while (start <= end) { 1105 if ((ret = sf1_write(adapter, 1, 0, 1, SF_WR_ENABLE)) != 0 || 1106 (ret = sf1_write(adapter, 4, 0, 1, 1107 SF_ERASE_SECTOR | (start << 8))) != 0 || 1108 (ret = flash_wait_op(adapter, 14, 500)) != 0) { 1109 dev_err(adapter->pdev_dev, 1110 "erase of flash sector %d failed, error %d\n", 1111 start, ret); 1112 break; 1113 } 1114 start++; 1115 } 1116 t4_write_reg(adapter, SF_OP, 0); /* unlock SF */ 1117 return ret; 1118 } 1119 1120 /** 1121 * t4_flash_cfg_addr - return the address of the flash configuration file 1122 * @adapter: the adapter 1123 * 1124 * Return the address within the flash where the Firmware Configuration 1125 * File is stored. 1126 */ 1127 unsigned int t4_flash_cfg_addr(struct adapter *adapter) 1128 { 1129 if (adapter->params.sf_size == 0x100000) 1130 return FLASH_FPGA_CFG_START; 1131 else 1132 return FLASH_CFG_START; 1133 } 1134 1135 /* Return TRUE if the specified firmware matches the adapter. I.e. T4 1136 * firmware for T4 adapters, T5 firmware for T5 adapters, etc. We go ahead 1137 * and emit an error message for mismatched firmware to save our caller the 1138 * effort ... 1139 */ 1140 static bool t4_fw_matches_chip(const struct adapter *adap, 1141 const struct fw_hdr *hdr) 1142 { 1143 /* The expression below will return FALSE for any unsupported adapter 1144 * which will keep us "honest" in the future ... 1145 */ 1146 if ((is_t4(adap->params.chip) && hdr->chip == FW_HDR_CHIP_T4) || 1147 (is_t5(adap->params.chip) && hdr->chip == FW_HDR_CHIP_T5)) 1148 return true; 1149 1150 dev_err(adap->pdev_dev, 1151 "FW image (%d) is not suitable for this adapter (%d)\n", 1152 hdr->chip, CHELSIO_CHIP_VERSION(adap->params.chip)); 1153 return false; 1154 } 1155 1156 /** 1157 * t4_load_fw - download firmware 1158 * @adap: the adapter 1159 * @fw_data: the firmware image to write 1160 * @size: image size 1161 * 1162 * Write the supplied firmware image to the card's serial flash. 1163 */ 1164 int t4_load_fw(struct adapter *adap, const u8 *fw_data, unsigned int size) 1165 { 1166 u32 csum; 1167 int ret, addr; 1168 unsigned int i; 1169 u8 first_page[SF_PAGE_SIZE]; 1170 const __be32 *p = (const __be32 *)fw_data; 1171 const struct fw_hdr *hdr = (const struct fw_hdr *)fw_data; 1172 unsigned int sf_sec_size = adap->params.sf_size / adap->params.sf_nsec; 1173 unsigned int fw_img_start = adap->params.sf_fw_start; 1174 unsigned int fw_start_sec = fw_img_start / sf_sec_size; 1175 1176 if (!size) { 1177 dev_err(adap->pdev_dev, "FW image has no data\n"); 1178 return -EINVAL; 1179 } 1180 if (size & 511) { 1181 dev_err(adap->pdev_dev, 1182 "FW image size not multiple of 512 bytes\n"); 1183 return -EINVAL; 1184 } 1185 if (ntohs(hdr->len512) * 512 != size) { 1186 dev_err(adap->pdev_dev, 1187 "FW image size differs from size in FW header\n"); 1188 return -EINVAL; 1189 } 1190 if (size > FW_MAX_SIZE) { 1191 dev_err(adap->pdev_dev, "FW image too large, max is %u bytes\n", 1192 FW_MAX_SIZE); 1193 return -EFBIG; 1194 } 1195 if (!t4_fw_matches_chip(adap, hdr)) 1196 return -EINVAL; 1197 1198 for (csum = 0, i = 0; i < size / sizeof(csum); i++) 1199 csum += ntohl(p[i]); 1200 1201 if (csum != 0xffffffff) { 1202 dev_err(adap->pdev_dev, 1203 "corrupted firmware image, checksum %#x\n", csum); 1204 return -EINVAL; 1205 } 1206 1207 i = DIV_ROUND_UP(size, sf_sec_size); /* # of sectors spanned */ 1208 ret = t4_flash_erase_sectors(adap, fw_start_sec, fw_start_sec + i - 1); 1209 if (ret) 1210 goto out; 1211 1212 /* 1213 * We write the correct version at the end so the driver can see a bad 1214 * version if the FW write fails. Start by writing a copy of the 1215 * first page with a bad version. 1216 */ 1217 memcpy(first_page, fw_data, SF_PAGE_SIZE); 1218 ((struct fw_hdr *)first_page)->fw_ver = htonl(0xffffffff); 1219 ret = t4_write_flash(adap, fw_img_start, SF_PAGE_SIZE, first_page); 1220 if (ret) 1221 goto out; 1222 1223 addr = fw_img_start; 1224 for (size -= SF_PAGE_SIZE; size; size -= SF_PAGE_SIZE) { 1225 addr += SF_PAGE_SIZE; 1226 fw_data += SF_PAGE_SIZE; 1227 ret = t4_write_flash(adap, addr, SF_PAGE_SIZE, fw_data); 1228 if (ret) 1229 goto out; 1230 } 1231 1232 ret = t4_write_flash(adap, 1233 fw_img_start + offsetof(struct fw_hdr, fw_ver), 1234 sizeof(hdr->fw_ver), (const u8 *)&hdr->fw_ver); 1235 out: 1236 if (ret) 1237 dev_err(adap->pdev_dev, "firmware download failed, error %d\n", 1238 ret); 1239 else 1240 ret = t4_get_fw_version(adap, &adap->params.fw_vers); 1241 return ret; 1242 } 1243 1244 #define ADVERT_MASK (FW_PORT_CAP_SPEED_100M | FW_PORT_CAP_SPEED_1G |\ 1245 FW_PORT_CAP_SPEED_10G | FW_PORT_CAP_SPEED_40G | \ 1246 FW_PORT_CAP_ANEG) 1247 1248 /** 1249 * t4_link_start - apply link configuration to MAC/PHY 1250 * @phy: the PHY to setup 1251 * @mac: the MAC to setup 1252 * @lc: the requested link configuration 1253 * 1254 * Set up a port's MAC and PHY according to a desired link configuration. 1255 * - If the PHY can auto-negotiate first decide what to advertise, then 1256 * enable/disable auto-negotiation as desired, and reset. 1257 * - If the PHY does not auto-negotiate just reset it. 1258 * - If auto-negotiation is off set the MAC to the proper speed/duplex/FC, 1259 * otherwise do it later based on the outcome of auto-negotiation. 1260 */ 1261 int t4_link_start(struct adapter *adap, unsigned int mbox, unsigned int port, 1262 struct link_config *lc) 1263 { 1264 struct fw_port_cmd c; 1265 unsigned int fc = 0, mdi = FW_PORT_CAP_MDI_V(FW_PORT_CAP_MDI_AUTO); 1266 1267 lc->link_ok = 0; 1268 if (lc->requested_fc & PAUSE_RX) 1269 fc |= FW_PORT_CAP_FC_RX; 1270 if (lc->requested_fc & PAUSE_TX) 1271 fc |= FW_PORT_CAP_FC_TX; 1272 1273 memset(&c, 0, sizeof(c)); 1274 c.op_to_portid = htonl(FW_CMD_OP_V(FW_PORT_CMD) | FW_CMD_REQUEST_F | 1275 FW_CMD_EXEC_F | FW_PORT_CMD_PORTID_V(port)); 1276 c.action_to_len16 = htonl(FW_PORT_CMD_ACTION_V(FW_PORT_ACTION_L1_CFG) | 1277 FW_LEN16(c)); 1278 1279 if (!(lc->supported & FW_PORT_CAP_ANEG)) { 1280 c.u.l1cfg.rcap = htonl((lc->supported & ADVERT_MASK) | fc); 1281 lc->fc = lc->requested_fc & (PAUSE_RX | PAUSE_TX); 1282 } else if (lc->autoneg == AUTONEG_DISABLE) { 1283 c.u.l1cfg.rcap = htonl(lc->requested_speed | fc | mdi); 1284 lc->fc = lc->requested_fc & (PAUSE_RX | PAUSE_TX); 1285 } else 1286 c.u.l1cfg.rcap = htonl(lc->advertising | fc | mdi); 1287 1288 return t4_wr_mbox(adap, mbox, &c, sizeof(c), NULL); 1289 } 1290 1291 /** 1292 * t4_restart_aneg - restart autonegotiation 1293 * @adap: the adapter 1294 * @mbox: mbox to use for the FW command 1295 * @port: the port id 1296 * 1297 * Restarts autonegotiation for the selected port. 1298 */ 1299 int t4_restart_aneg(struct adapter *adap, unsigned int mbox, unsigned int port) 1300 { 1301 struct fw_port_cmd c; 1302 1303 memset(&c, 0, sizeof(c)); 1304 c.op_to_portid = htonl(FW_CMD_OP_V(FW_PORT_CMD) | FW_CMD_REQUEST_F | 1305 FW_CMD_EXEC_F | FW_PORT_CMD_PORTID_V(port)); 1306 c.action_to_len16 = htonl(FW_PORT_CMD_ACTION_V(FW_PORT_ACTION_L1_CFG) | 1307 FW_LEN16(c)); 1308 c.u.l1cfg.rcap = htonl(FW_PORT_CAP_ANEG); 1309 return t4_wr_mbox(adap, mbox, &c, sizeof(c), NULL); 1310 } 1311 1312 typedef void (*int_handler_t)(struct adapter *adap); 1313 1314 struct intr_info { 1315 unsigned int mask; /* bits to check in interrupt status */ 1316 const char *msg; /* message to print or NULL */ 1317 short stat_idx; /* stat counter to increment or -1 */ 1318 unsigned short fatal; /* whether the condition reported is fatal */ 1319 int_handler_t int_handler; /* platform-specific int handler */ 1320 }; 1321 1322 /** 1323 * t4_handle_intr_status - table driven interrupt handler 1324 * @adapter: the adapter that generated the interrupt 1325 * @reg: the interrupt status register to process 1326 * @acts: table of interrupt actions 1327 * 1328 * A table driven interrupt handler that applies a set of masks to an 1329 * interrupt status word and performs the corresponding actions if the 1330 * interrupts described by the mask have occurred. The actions include 1331 * optionally emitting a warning or alert message. The table is terminated 1332 * by an entry specifying mask 0. Returns the number of fatal interrupt 1333 * conditions. 1334 */ 1335 static int t4_handle_intr_status(struct adapter *adapter, unsigned int reg, 1336 const struct intr_info *acts) 1337 { 1338 int fatal = 0; 1339 unsigned int mask = 0; 1340 unsigned int status = t4_read_reg(adapter, reg); 1341 1342 for ( ; acts->mask; ++acts) { 1343 if (!(status & acts->mask)) 1344 continue; 1345 if (acts->fatal) { 1346 fatal++; 1347 dev_alert(adapter->pdev_dev, "%s (0x%x)\n", acts->msg, 1348 status & acts->mask); 1349 } else if (acts->msg && printk_ratelimit()) 1350 dev_warn(adapter->pdev_dev, "%s (0x%x)\n", acts->msg, 1351 status & acts->mask); 1352 if (acts->int_handler) 1353 acts->int_handler(adapter); 1354 mask |= acts->mask; 1355 } 1356 status &= mask; 1357 if (status) /* clear processed interrupts */ 1358 t4_write_reg(adapter, reg, status); 1359 return fatal; 1360 } 1361 1362 /* 1363 * Interrupt handler for the PCIE module. 1364 */ 1365 static void pcie_intr_handler(struct adapter *adapter) 1366 { 1367 static const struct intr_info sysbus_intr_info[] = { 1368 { RNPP, "RXNP array parity error", -1, 1 }, 1369 { RPCP, "RXPC array parity error", -1, 1 }, 1370 { RCIP, "RXCIF array parity error", -1, 1 }, 1371 { RCCP, "Rx completions control array parity error", -1, 1 }, 1372 { RFTP, "RXFT array parity error", -1, 1 }, 1373 { 0 } 1374 }; 1375 static const struct intr_info pcie_port_intr_info[] = { 1376 { TPCP, "TXPC array parity error", -1, 1 }, 1377 { TNPP, "TXNP array parity error", -1, 1 }, 1378 { TFTP, "TXFT array parity error", -1, 1 }, 1379 { TCAP, "TXCA array parity error", -1, 1 }, 1380 { TCIP, "TXCIF array parity error", -1, 1 }, 1381 { RCAP, "RXCA array parity error", -1, 1 }, 1382 { OTDD, "outbound request TLP discarded", -1, 1 }, 1383 { RDPE, "Rx data parity error", -1, 1 }, 1384 { TDUE, "Tx uncorrectable data error", -1, 1 }, 1385 { 0 } 1386 }; 1387 static const struct intr_info pcie_intr_info[] = { 1388 { MSIADDRLPERR, "MSI AddrL parity error", -1, 1 }, 1389 { MSIADDRHPERR, "MSI AddrH parity error", -1, 1 }, 1390 { MSIDATAPERR, "MSI data parity error", -1, 1 }, 1391 { MSIXADDRLPERR, "MSI-X AddrL parity error", -1, 1 }, 1392 { MSIXADDRHPERR, "MSI-X AddrH parity error", -1, 1 }, 1393 { MSIXDATAPERR, "MSI-X data parity error", -1, 1 }, 1394 { MSIXDIPERR, "MSI-X DI parity error", -1, 1 }, 1395 { PIOCPLPERR, "PCI PIO completion FIFO parity error", -1, 1 }, 1396 { PIOREQPERR, "PCI PIO request FIFO parity error", -1, 1 }, 1397 { TARTAGPERR, "PCI PCI target tag FIFO parity error", -1, 1 }, 1398 { CCNTPERR, "PCI CMD channel count parity error", -1, 1 }, 1399 { CREQPERR, "PCI CMD channel request parity error", -1, 1 }, 1400 { CRSPPERR, "PCI CMD channel response parity error", -1, 1 }, 1401 { DCNTPERR, "PCI DMA channel count parity error", -1, 1 }, 1402 { DREQPERR, "PCI DMA channel request parity error", -1, 1 }, 1403 { DRSPPERR, "PCI DMA channel response parity error", -1, 1 }, 1404 { HCNTPERR, "PCI HMA channel count parity error", -1, 1 }, 1405 { HREQPERR, "PCI HMA channel request parity error", -1, 1 }, 1406 { HRSPPERR, "PCI HMA channel response parity error", -1, 1 }, 1407 { CFGSNPPERR, "PCI config snoop FIFO parity error", -1, 1 }, 1408 { FIDPERR, "PCI FID parity error", -1, 1 }, 1409 { INTXCLRPERR, "PCI INTx clear parity error", -1, 1 }, 1410 { MATAGPERR, "PCI MA tag parity error", -1, 1 }, 1411 { PIOTAGPERR, "PCI PIO tag parity error", -1, 1 }, 1412 { RXCPLPERR, "PCI Rx completion parity error", -1, 1 }, 1413 { RXWRPERR, "PCI Rx write parity error", -1, 1 }, 1414 { RPLPERR, "PCI replay buffer parity error", -1, 1 }, 1415 { PCIESINT, "PCI core secondary fault", -1, 1 }, 1416 { PCIEPINT, "PCI core primary fault", -1, 1 }, 1417 { UNXSPLCPLERR, "PCI unexpected split completion error", -1, 0 }, 1418 { 0 } 1419 }; 1420 1421 static struct intr_info t5_pcie_intr_info[] = { 1422 { MSTGRPPERR, "Master Response Read Queue parity error", 1423 -1, 1 }, 1424 { MSTTIMEOUTPERR, "Master Timeout FIFO parity error", -1, 1 }, 1425 { MSIXSTIPERR, "MSI-X STI SRAM parity error", -1, 1 }, 1426 { MSIXADDRLPERR, "MSI-X AddrL parity error", -1, 1 }, 1427 { MSIXADDRHPERR, "MSI-X AddrH parity error", -1, 1 }, 1428 { MSIXDATAPERR, "MSI-X data parity error", -1, 1 }, 1429 { MSIXDIPERR, "MSI-X DI parity error", -1, 1 }, 1430 { PIOCPLGRPPERR, "PCI PIO completion Group FIFO parity error", 1431 -1, 1 }, 1432 { PIOREQGRPPERR, "PCI PIO request Group FIFO parity error", 1433 -1, 1 }, 1434 { TARTAGPERR, "PCI PCI target tag FIFO parity error", -1, 1 }, 1435 { MSTTAGQPERR, "PCI master tag queue parity error", -1, 1 }, 1436 { CREQPERR, "PCI CMD channel request parity error", -1, 1 }, 1437 { CRSPPERR, "PCI CMD channel response parity error", -1, 1 }, 1438 { DREQWRPERR, "PCI DMA channel write request parity error", 1439 -1, 1 }, 1440 { DREQPERR, "PCI DMA channel request parity error", -1, 1 }, 1441 { DRSPPERR, "PCI DMA channel response parity error", -1, 1 }, 1442 { HREQWRPERR, "PCI HMA channel count parity error", -1, 1 }, 1443 { HREQPERR, "PCI HMA channel request parity error", -1, 1 }, 1444 { HRSPPERR, "PCI HMA channel response parity error", -1, 1 }, 1445 { CFGSNPPERR, "PCI config snoop FIFO parity error", -1, 1 }, 1446 { FIDPERR, "PCI FID parity error", -1, 1 }, 1447 { VFIDPERR, "PCI INTx clear parity error", -1, 1 }, 1448 { MAGRPPERR, "PCI MA group FIFO parity error", -1, 1 }, 1449 { PIOTAGPERR, "PCI PIO tag parity error", -1, 1 }, 1450 { IPRXHDRGRPPERR, "PCI IP Rx header group parity error", 1451 -1, 1 }, 1452 { IPRXDATAGRPPERR, "PCI IP Rx data group parity error", -1, 1 }, 1453 { RPLPERR, "PCI IP replay buffer parity error", -1, 1 }, 1454 { IPSOTPERR, "PCI IP SOT buffer parity error", -1, 1 }, 1455 { TRGT1GRPPERR, "PCI TRGT1 group FIFOs parity error", -1, 1 }, 1456 { READRSPERR, "Outbound read error", -1, 0 }, 1457 { 0 } 1458 }; 1459 1460 int fat; 1461 1462 if (is_t4(adapter->params.chip)) 1463 fat = t4_handle_intr_status(adapter, 1464 PCIE_CORE_UTL_SYSTEM_BUS_AGENT_STATUS, 1465 sysbus_intr_info) + 1466 t4_handle_intr_status(adapter, 1467 PCIE_CORE_UTL_PCI_EXPRESS_PORT_STATUS, 1468 pcie_port_intr_info) + 1469 t4_handle_intr_status(adapter, PCIE_INT_CAUSE, 1470 pcie_intr_info); 1471 else 1472 fat = t4_handle_intr_status(adapter, PCIE_INT_CAUSE, 1473 t5_pcie_intr_info); 1474 1475 if (fat) 1476 t4_fatal_err(adapter); 1477 } 1478 1479 /* 1480 * TP interrupt handler. 1481 */ 1482 static void tp_intr_handler(struct adapter *adapter) 1483 { 1484 static const struct intr_info tp_intr_info[] = { 1485 { 0x3fffffff, "TP parity error", -1, 1 }, 1486 { FLMTXFLSTEMPTY, "TP out of Tx pages", -1, 1 }, 1487 { 0 } 1488 }; 1489 1490 if (t4_handle_intr_status(adapter, TP_INT_CAUSE, tp_intr_info)) 1491 t4_fatal_err(adapter); 1492 } 1493 1494 /* 1495 * SGE interrupt handler. 1496 */ 1497 static void sge_intr_handler(struct adapter *adapter) 1498 { 1499 u64 v; 1500 1501 static const struct intr_info sge_intr_info[] = { 1502 { ERR_CPL_EXCEED_IQE_SIZE, 1503 "SGE received CPL exceeding IQE size", -1, 1 }, 1504 { ERR_INVALID_CIDX_INC, 1505 "SGE GTS CIDX increment too large", -1, 0 }, 1506 { ERR_CPL_OPCODE_0, "SGE received 0-length CPL", -1, 0 }, 1507 { DBFIFO_LP_INT, NULL, -1, 0, t4_db_full }, 1508 { DBFIFO_HP_INT, NULL, -1, 0, t4_db_full }, 1509 { ERR_DROPPED_DB, NULL, -1, 0, t4_db_dropped }, 1510 { ERR_DATA_CPL_ON_HIGH_QID1 | ERR_DATA_CPL_ON_HIGH_QID0, 1511 "SGE IQID > 1023 received CPL for FL", -1, 0 }, 1512 { ERR_BAD_DB_PIDX3, "SGE DBP 3 pidx increment too large", -1, 1513 0 }, 1514 { ERR_BAD_DB_PIDX2, "SGE DBP 2 pidx increment too large", -1, 1515 0 }, 1516 { ERR_BAD_DB_PIDX1, "SGE DBP 1 pidx increment too large", -1, 1517 0 }, 1518 { ERR_BAD_DB_PIDX0, "SGE DBP 0 pidx increment too large", -1, 1519 0 }, 1520 { ERR_ING_CTXT_PRIO, 1521 "SGE too many priority ingress contexts", -1, 0 }, 1522 { ERR_EGR_CTXT_PRIO, 1523 "SGE too many priority egress contexts", -1, 0 }, 1524 { INGRESS_SIZE_ERR, "SGE illegal ingress QID", -1, 0 }, 1525 { EGRESS_SIZE_ERR, "SGE illegal egress QID", -1, 0 }, 1526 { 0 } 1527 }; 1528 1529 v = (u64)t4_read_reg(adapter, SGE_INT_CAUSE1) | 1530 ((u64)t4_read_reg(adapter, SGE_INT_CAUSE2) << 32); 1531 if (v) { 1532 dev_alert(adapter->pdev_dev, "SGE parity error (%#llx)\n", 1533 (unsigned long long)v); 1534 t4_write_reg(adapter, SGE_INT_CAUSE1, v); 1535 t4_write_reg(adapter, SGE_INT_CAUSE2, v >> 32); 1536 } 1537 1538 if (t4_handle_intr_status(adapter, SGE_INT_CAUSE3, sge_intr_info) || 1539 v != 0) 1540 t4_fatal_err(adapter); 1541 } 1542 1543 /* 1544 * CIM interrupt handler. 1545 */ 1546 static void cim_intr_handler(struct adapter *adapter) 1547 { 1548 static const struct intr_info cim_intr_info[] = { 1549 { PREFDROPINT, "CIM control register prefetch drop", -1, 1 }, 1550 { OBQPARERR, "CIM OBQ parity error", -1, 1 }, 1551 { IBQPARERR, "CIM IBQ parity error", -1, 1 }, 1552 { MBUPPARERR, "CIM mailbox uP parity error", -1, 1 }, 1553 { MBHOSTPARERR, "CIM mailbox host parity error", -1, 1 }, 1554 { TIEQINPARERRINT, "CIM TIEQ outgoing parity error", -1, 1 }, 1555 { TIEQOUTPARERRINT, "CIM TIEQ incoming parity error", -1, 1 }, 1556 { 0 } 1557 }; 1558 static const struct intr_info cim_upintr_info[] = { 1559 { RSVDSPACEINT, "CIM reserved space access", -1, 1 }, 1560 { ILLTRANSINT, "CIM illegal transaction", -1, 1 }, 1561 { ILLWRINT, "CIM illegal write", -1, 1 }, 1562 { ILLRDINT, "CIM illegal read", -1, 1 }, 1563 { ILLRDBEINT, "CIM illegal read BE", -1, 1 }, 1564 { ILLWRBEINT, "CIM illegal write BE", -1, 1 }, 1565 { SGLRDBOOTINT, "CIM single read from boot space", -1, 1 }, 1566 { SGLWRBOOTINT, "CIM single write to boot space", -1, 1 }, 1567 { BLKWRBOOTINT, "CIM block write to boot space", -1, 1 }, 1568 { SGLRDFLASHINT, "CIM single read from flash space", -1, 1 }, 1569 { SGLWRFLASHINT, "CIM single write to flash space", -1, 1 }, 1570 { BLKWRFLASHINT, "CIM block write to flash space", -1, 1 }, 1571 { SGLRDEEPROMINT, "CIM single EEPROM read", -1, 1 }, 1572 { SGLWREEPROMINT, "CIM single EEPROM write", -1, 1 }, 1573 { BLKRDEEPROMINT, "CIM block EEPROM read", -1, 1 }, 1574 { BLKWREEPROMINT, "CIM block EEPROM write", -1, 1 }, 1575 { SGLRDCTLINT , "CIM single read from CTL space", -1, 1 }, 1576 { SGLWRCTLINT , "CIM single write to CTL space", -1, 1 }, 1577 { BLKRDCTLINT , "CIM block read from CTL space", -1, 1 }, 1578 { BLKWRCTLINT , "CIM block write to CTL space", -1, 1 }, 1579 { SGLRDPLINT , "CIM single read from PL space", -1, 1 }, 1580 { SGLWRPLINT , "CIM single write to PL space", -1, 1 }, 1581 { BLKRDPLINT , "CIM block read from PL space", -1, 1 }, 1582 { BLKWRPLINT , "CIM block write to PL space", -1, 1 }, 1583 { REQOVRLOOKUPINT , "CIM request FIFO overwrite", -1, 1 }, 1584 { RSPOVRLOOKUPINT , "CIM response FIFO overwrite", -1, 1 }, 1585 { TIMEOUTINT , "CIM PIF timeout", -1, 1 }, 1586 { TIMEOUTMAINT , "CIM PIF MA timeout", -1, 1 }, 1587 { 0 } 1588 }; 1589 1590 int fat; 1591 1592 if (t4_read_reg(adapter, MA_PCIE_FW) & PCIE_FW_ERR) 1593 t4_report_fw_error(adapter); 1594 1595 fat = t4_handle_intr_status(adapter, CIM_HOST_INT_CAUSE, 1596 cim_intr_info) + 1597 t4_handle_intr_status(adapter, CIM_HOST_UPACC_INT_CAUSE, 1598 cim_upintr_info); 1599 if (fat) 1600 t4_fatal_err(adapter); 1601 } 1602 1603 /* 1604 * ULP RX interrupt handler. 1605 */ 1606 static void ulprx_intr_handler(struct adapter *adapter) 1607 { 1608 static const struct intr_info ulprx_intr_info[] = { 1609 { 0x1800000, "ULPRX context error", -1, 1 }, 1610 { 0x7fffff, "ULPRX parity error", -1, 1 }, 1611 { 0 } 1612 }; 1613 1614 if (t4_handle_intr_status(adapter, ULP_RX_INT_CAUSE, ulprx_intr_info)) 1615 t4_fatal_err(adapter); 1616 } 1617 1618 /* 1619 * ULP TX interrupt handler. 1620 */ 1621 static void ulptx_intr_handler(struct adapter *adapter) 1622 { 1623 static const struct intr_info ulptx_intr_info[] = { 1624 { PBL_BOUND_ERR_CH3, "ULPTX channel 3 PBL out of bounds", -1, 1625 0 }, 1626 { PBL_BOUND_ERR_CH2, "ULPTX channel 2 PBL out of bounds", -1, 1627 0 }, 1628 { PBL_BOUND_ERR_CH1, "ULPTX channel 1 PBL out of bounds", -1, 1629 0 }, 1630 { PBL_BOUND_ERR_CH0, "ULPTX channel 0 PBL out of bounds", -1, 1631 0 }, 1632 { 0xfffffff, "ULPTX parity error", -1, 1 }, 1633 { 0 } 1634 }; 1635 1636 if (t4_handle_intr_status(adapter, ULP_TX_INT_CAUSE, ulptx_intr_info)) 1637 t4_fatal_err(adapter); 1638 } 1639 1640 /* 1641 * PM TX interrupt handler. 1642 */ 1643 static void pmtx_intr_handler(struct adapter *adapter) 1644 { 1645 static const struct intr_info pmtx_intr_info[] = { 1646 { PCMD_LEN_OVFL0, "PMTX channel 0 pcmd too large", -1, 1 }, 1647 { PCMD_LEN_OVFL1, "PMTX channel 1 pcmd too large", -1, 1 }, 1648 { PCMD_LEN_OVFL2, "PMTX channel 2 pcmd too large", -1, 1 }, 1649 { ZERO_C_CMD_ERROR, "PMTX 0-length pcmd", -1, 1 }, 1650 { PMTX_FRAMING_ERROR, "PMTX framing error", -1, 1 }, 1651 { OESPI_PAR_ERROR, "PMTX oespi parity error", -1, 1 }, 1652 { DB_OPTIONS_PAR_ERROR, "PMTX db_options parity error", -1, 1 }, 1653 { ICSPI_PAR_ERROR, "PMTX icspi parity error", -1, 1 }, 1654 { C_PCMD_PAR_ERROR, "PMTX c_pcmd parity error", -1, 1}, 1655 { 0 } 1656 }; 1657 1658 if (t4_handle_intr_status(adapter, PM_TX_INT_CAUSE, pmtx_intr_info)) 1659 t4_fatal_err(adapter); 1660 } 1661 1662 /* 1663 * PM RX interrupt handler. 1664 */ 1665 static void pmrx_intr_handler(struct adapter *adapter) 1666 { 1667 static const struct intr_info pmrx_intr_info[] = { 1668 { ZERO_E_CMD_ERROR, "PMRX 0-length pcmd", -1, 1 }, 1669 { PMRX_FRAMING_ERROR, "PMRX framing error", -1, 1 }, 1670 { OCSPI_PAR_ERROR, "PMRX ocspi parity error", -1, 1 }, 1671 { DB_OPTIONS_PAR_ERROR, "PMRX db_options parity error", -1, 1 }, 1672 { IESPI_PAR_ERROR, "PMRX iespi parity error", -1, 1 }, 1673 { E_PCMD_PAR_ERROR, "PMRX e_pcmd parity error", -1, 1}, 1674 { 0 } 1675 }; 1676 1677 if (t4_handle_intr_status(adapter, PM_RX_INT_CAUSE, pmrx_intr_info)) 1678 t4_fatal_err(adapter); 1679 } 1680 1681 /* 1682 * CPL switch interrupt handler. 1683 */ 1684 static void cplsw_intr_handler(struct adapter *adapter) 1685 { 1686 static const struct intr_info cplsw_intr_info[] = { 1687 { CIM_OP_MAP_PERR, "CPLSW CIM op_map parity error", -1, 1 }, 1688 { CIM_OVFL_ERROR, "CPLSW CIM overflow", -1, 1 }, 1689 { TP_FRAMING_ERROR, "CPLSW TP framing error", -1, 1 }, 1690 { SGE_FRAMING_ERROR, "CPLSW SGE framing error", -1, 1 }, 1691 { CIM_FRAMING_ERROR, "CPLSW CIM framing error", -1, 1 }, 1692 { ZERO_SWITCH_ERROR, "CPLSW no-switch error", -1, 1 }, 1693 { 0 } 1694 }; 1695 1696 if (t4_handle_intr_status(adapter, CPL_INTR_CAUSE, cplsw_intr_info)) 1697 t4_fatal_err(adapter); 1698 } 1699 1700 /* 1701 * LE interrupt handler. 1702 */ 1703 static void le_intr_handler(struct adapter *adap) 1704 { 1705 static const struct intr_info le_intr_info[] = { 1706 { LIPMISS, "LE LIP miss", -1, 0 }, 1707 { LIP0, "LE 0 LIP error", -1, 0 }, 1708 { PARITYERR, "LE parity error", -1, 1 }, 1709 { UNKNOWNCMD, "LE unknown command", -1, 1 }, 1710 { REQQPARERR, "LE request queue parity error", -1, 1 }, 1711 { 0 } 1712 }; 1713 1714 if (t4_handle_intr_status(adap, LE_DB_INT_CAUSE, le_intr_info)) 1715 t4_fatal_err(adap); 1716 } 1717 1718 /* 1719 * MPS interrupt handler. 1720 */ 1721 static void mps_intr_handler(struct adapter *adapter) 1722 { 1723 static const struct intr_info mps_rx_intr_info[] = { 1724 { 0xffffff, "MPS Rx parity error", -1, 1 }, 1725 { 0 } 1726 }; 1727 static const struct intr_info mps_tx_intr_info[] = { 1728 { TPFIFO, "MPS Tx TP FIFO parity error", -1, 1 }, 1729 { NCSIFIFO, "MPS Tx NC-SI FIFO parity error", -1, 1 }, 1730 { TXDATAFIFO, "MPS Tx data FIFO parity error", -1, 1 }, 1731 { TXDESCFIFO, "MPS Tx desc FIFO parity error", -1, 1 }, 1732 { BUBBLE, "MPS Tx underflow", -1, 1 }, 1733 { SECNTERR, "MPS Tx SOP/EOP error", -1, 1 }, 1734 { FRMERR, "MPS Tx framing error", -1, 1 }, 1735 { 0 } 1736 }; 1737 static const struct intr_info mps_trc_intr_info[] = { 1738 { FILTMEM, "MPS TRC filter parity error", -1, 1 }, 1739 { PKTFIFO, "MPS TRC packet FIFO parity error", -1, 1 }, 1740 { MISCPERR, "MPS TRC misc parity error", -1, 1 }, 1741 { 0 } 1742 }; 1743 static const struct intr_info mps_stat_sram_intr_info[] = { 1744 { 0x1fffff, "MPS statistics SRAM parity error", -1, 1 }, 1745 { 0 } 1746 }; 1747 static const struct intr_info mps_stat_tx_intr_info[] = { 1748 { 0xfffff, "MPS statistics Tx FIFO parity error", -1, 1 }, 1749 { 0 } 1750 }; 1751 static const struct intr_info mps_stat_rx_intr_info[] = { 1752 { 0xffffff, "MPS statistics Rx FIFO parity error", -1, 1 }, 1753 { 0 } 1754 }; 1755 static const struct intr_info mps_cls_intr_info[] = { 1756 { MATCHSRAM, "MPS match SRAM parity error", -1, 1 }, 1757 { MATCHTCAM, "MPS match TCAM parity error", -1, 1 }, 1758 { HASHSRAM, "MPS hash SRAM parity error", -1, 1 }, 1759 { 0 } 1760 }; 1761 1762 int fat; 1763 1764 fat = t4_handle_intr_status(adapter, MPS_RX_PERR_INT_CAUSE, 1765 mps_rx_intr_info) + 1766 t4_handle_intr_status(adapter, MPS_TX_INT_CAUSE, 1767 mps_tx_intr_info) + 1768 t4_handle_intr_status(adapter, MPS_TRC_INT_CAUSE, 1769 mps_trc_intr_info) + 1770 t4_handle_intr_status(adapter, MPS_STAT_PERR_INT_CAUSE_SRAM, 1771 mps_stat_sram_intr_info) + 1772 t4_handle_intr_status(adapter, MPS_STAT_PERR_INT_CAUSE_TX_FIFO, 1773 mps_stat_tx_intr_info) + 1774 t4_handle_intr_status(adapter, MPS_STAT_PERR_INT_CAUSE_RX_FIFO, 1775 mps_stat_rx_intr_info) + 1776 t4_handle_intr_status(adapter, MPS_CLS_INT_CAUSE, 1777 mps_cls_intr_info); 1778 1779 t4_write_reg(adapter, MPS_INT_CAUSE, CLSINT | TRCINT | 1780 RXINT | TXINT | STATINT); 1781 t4_read_reg(adapter, MPS_INT_CAUSE); /* flush */ 1782 if (fat) 1783 t4_fatal_err(adapter); 1784 } 1785 1786 #define MEM_INT_MASK (PERR_INT_CAUSE | ECC_CE_INT_CAUSE | ECC_UE_INT_CAUSE) 1787 1788 /* 1789 * EDC/MC interrupt handler. 1790 */ 1791 static void mem_intr_handler(struct adapter *adapter, int idx) 1792 { 1793 static const char name[4][7] = { "EDC0", "EDC1", "MC/MC0", "MC1" }; 1794 1795 unsigned int addr, cnt_addr, v; 1796 1797 if (idx <= MEM_EDC1) { 1798 addr = EDC_REG(EDC_INT_CAUSE, idx); 1799 cnt_addr = EDC_REG(EDC_ECC_STATUS, idx); 1800 } else if (idx == MEM_MC) { 1801 if (is_t4(adapter->params.chip)) { 1802 addr = MC_INT_CAUSE; 1803 cnt_addr = MC_ECC_STATUS; 1804 } else { 1805 addr = MC_P_INT_CAUSE; 1806 cnt_addr = MC_P_ECC_STATUS; 1807 } 1808 } else { 1809 addr = MC_REG(MC_P_INT_CAUSE, 1); 1810 cnt_addr = MC_REG(MC_P_ECC_STATUS, 1); 1811 } 1812 1813 v = t4_read_reg(adapter, addr) & MEM_INT_MASK; 1814 if (v & PERR_INT_CAUSE) 1815 dev_alert(adapter->pdev_dev, "%s FIFO parity error\n", 1816 name[idx]); 1817 if (v & ECC_CE_INT_CAUSE) { 1818 u32 cnt = ECC_CECNT_GET(t4_read_reg(adapter, cnt_addr)); 1819 1820 t4_write_reg(adapter, cnt_addr, ECC_CECNT_MASK); 1821 if (printk_ratelimit()) 1822 dev_warn(adapter->pdev_dev, 1823 "%u %s correctable ECC data error%s\n", 1824 cnt, name[idx], cnt > 1 ? "s" : ""); 1825 } 1826 if (v & ECC_UE_INT_CAUSE) 1827 dev_alert(adapter->pdev_dev, 1828 "%s uncorrectable ECC data error\n", name[idx]); 1829 1830 t4_write_reg(adapter, addr, v); 1831 if (v & (PERR_INT_CAUSE | ECC_UE_INT_CAUSE)) 1832 t4_fatal_err(adapter); 1833 } 1834 1835 /* 1836 * MA interrupt handler. 1837 */ 1838 static void ma_intr_handler(struct adapter *adap) 1839 { 1840 u32 v, status = t4_read_reg(adap, MA_INT_CAUSE); 1841 1842 if (status & MEM_PERR_INT_CAUSE) { 1843 dev_alert(adap->pdev_dev, 1844 "MA parity error, parity status %#x\n", 1845 t4_read_reg(adap, MA_PARITY_ERROR_STATUS)); 1846 if (is_t5(adap->params.chip)) 1847 dev_alert(adap->pdev_dev, 1848 "MA parity error, parity status %#x\n", 1849 t4_read_reg(adap, 1850 MA_PARITY_ERROR_STATUS2)); 1851 } 1852 if (status & MEM_WRAP_INT_CAUSE) { 1853 v = t4_read_reg(adap, MA_INT_WRAP_STATUS); 1854 dev_alert(adap->pdev_dev, "MA address wrap-around error by " 1855 "client %u to address %#x\n", 1856 MEM_WRAP_CLIENT_NUM_GET(v), 1857 MEM_WRAP_ADDRESS_GET(v) << 4); 1858 } 1859 t4_write_reg(adap, MA_INT_CAUSE, status); 1860 t4_fatal_err(adap); 1861 } 1862 1863 /* 1864 * SMB interrupt handler. 1865 */ 1866 static void smb_intr_handler(struct adapter *adap) 1867 { 1868 static const struct intr_info smb_intr_info[] = { 1869 { MSTTXFIFOPARINT, "SMB master Tx FIFO parity error", -1, 1 }, 1870 { MSTRXFIFOPARINT, "SMB master Rx FIFO parity error", -1, 1 }, 1871 { SLVFIFOPARINT, "SMB slave FIFO parity error", -1, 1 }, 1872 { 0 } 1873 }; 1874 1875 if (t4_handle_intr_status(adap, SMB_INT_CAUSE, smb_intr_info)) 1876 t4_fatal_err(adap); 1877 } 1878 1879 /* 1880 * NC-SI interrupt handler. 1881 */ 1882 static void ncsi_intr_handler(struct adapter *adap) 1883 { 1884 static const struct intr_info ncsi_intr_info[] = { 1885 { CIM_DM_PRTY_ERR, "NC-SI CIM parity error", -1, 1 }, 1886 { MPS_DM_PRTY_ERR, "NC-SI MPS parity error", -1, 1 }, 1887 { TXFIFO_PRTY_ERR, "NC-SI Tx FIFO parity error", -1, 1 }, 1888 { RXFIFO_PRTY_ERR, "NC-SI Rx FIFO parity error", -1, 1 }, 1889 { 0 } 1890 }; 1891 1892 if (t4_handle_intr_status(adap, NCSI_INT_CAUSE, ncsi_intr_info)) 1893 t4_fatal_err(adap); 1894 } 1895 1896 /* 1897 * XGMAC interrupt handler. 1898 */ 1899 static void xgmac_intr_handler(struct adapter *adap, int port) 1900 { 1901 u32 v, int_cause_reg; 1902 1903 if (is_t4(adap->params.chip)) 1904 int_cause_reg = PORT_REG(port, XGMAC_PORT_INT_CAUSE); 1905 else 1906 int_cause_reg = T5_PORT_REG(port, MAC_PORT_INT_CAUSE); 1907 1908 v = t4_read_reg(adap, int_cause_reg); 1909 1910 v &= TXFIFO_PRTY_ERR | RXFIFO_PRTY_ERR; 1911 if (!v) 1912 return; 1913 1914 if (v & TXFIFO_PRTY_ERR) 1915 dev_alert(adap->pdev_dev, "XGMAC %d Tx FIFO parity error\n", 1916 port); 1917 if (v & RXFIFO_PRTY_ERR) 1918 dev_alert(adap->pdev_dev, "XGMAC %d Rx FIFO parity error\n", 1919 port); 1920 t4_write_reg(adap, PORT_REG(port, XGMAC_PORT_INT_CAUSE), v); 1921 t4_fatal_err(adap); 1922 } 1923 1924 /* 1925 * PL interrupt handler. 1926 */ 1927 static void pl_intr_handler(struct adapter *adap) 1928 { 1929 static const struct intr_info pl_intr_info[] = { 1930 { FATALPERR, "T4 fatal parity error", -1, 1 }, 1931 { PERRVFID, "PL VFID_MAP parity error", -1, 1 }, 1932 { 0 } 1933 }; 1934 1935 if (t4_handle_intr_status(adap, PL_PL_INT_CAUSE, pl_intr_info)) 1936 t4_fatal_err(adap); 1937 } 1938 1939 #define PF_INTR_MASK (PFSW) 1940 #define GLBL_INTR_MASK (CIM | MPS | PL | PCIE | MC | EDC0 | \ 1941 EDC1 | LE | TP | MA | PM_TX | PM_RX | ULP_RX | \ 1942 CPL_SWITCH | SGE | ULP_TX) 1943 1944 /** 1945 * t4_slow_intr_handler - control path interrupt handler 1946 * @adapter: the adapter 1947 * 1948 * T4 interrupt handler for non-data global interrupt events, e.g., errors. 1949 * The designation 'slow' is because it involves register reads, while 1950 * data interrupts typically don't involve any MMIOs. 1951 */ 1952 int t4_slow_intr_handler(struct adapter *adapter) 1953 { 1954 u32 cause = t4_read_reg(adapter, PL_INT_CAUSE); 1955 1956 if (!(cause & GLBL_INTR_MASK)) 1957 return 0; 1958 if (cause & CIM) 1959 cim_intr_handler(adapter); 1960 if (cause & MPS) 1961 mps_intr_handler(adapter); 1962 if (cause & NCSI) 1963 ncsi_intr_handler(adapter); 1964 if (cause & PL) 1965 pl_intr_handler(adapter); 1966 if (cause & SMB) 1967 smb_intr_handler(adapter); 1968 if (cause & XGMAC0) 1969 xgmac_intr_handler(adapter, 0); 1970 if (cause & XGMAC1) 1971 xgmac_intr_handler(adapter, 1); 1972 if (cause & XGMAC_KR0) 1973 xgmac_intr_handler(adapter, 2); 1974 if (cause & XGMAC_KR1) 1975 xgmac_intr_handler(adapter, 3); 1976 if (cause & PCIE) 1977 pcie_intr_handler(adapter); 1978 if (cause & MC) 1979 mem_intr_handler(adapter, MEM_MC); 1980 if (!is_t4(adapter->params.chip) && (cause & MC1)) 1981 mem_intr_handler(adapter, MEM_MC1); 1982 if (cause & EDC0) 1983 mem_intr_handler(adapter, MEM_EDC0); 1984 if (cause & EDC1) 1985 mem_intr_handler(adapter, MEM_EDC1); 1986 if (cause & LE) 1987 le_intr_handler(adapter); 1988 if (cause & TP) 1989 tp_intr_handler(adapter); 1990 if (cause & MA) 1991 ma_intr_handler(adapter); 1992 if (cause & PM_TX) 1993 pmtx_intr_handler(adapter); 1994 if (cause & PM_RX) 1995 pmrx_intr_handler(adapter); 1996 if (cause & ULP_RX) 1997 ulprx_intr_handler(adapter); 1998 if (cause & CPL_SWITCH) 1999 cplsw_intr_handler(adapter); 2000 if (cause & SGE) 2001 sge_intr_handler(adapter); 2002 if (cause & ULP_TX) 2003 ulptx_intr_handler(adapter); 2004 2005 /* Clear the interrupts just processed for which we are the master. */ 2006 t4_write_reg(adapter, PL_INT_CAUSE, cause & GLBL_INTR_MASK); 2007 (void) t4_read_reg(adapter, PL_INT_CAUSE); /* flush */ 2008 return 1; 2009 } 2010 2011 /** 2012 * t4_intr_enable - enable interrupts 2013 * @adapter: the adapter whose interrupts should be enabled 2014 * 2015 * Enable PF-specific interrupts for the calling function and the top-level 2016 * interrupt concentrator for global interrupts. Interrupts are already 2017 * enabled at each module, here we just enable the roots of the interrupt 2018 * hierarchies. 2019 * 2020 * Note: this function should be called only when the driver manages 2021 * non PF-specific interrupts from the various HW modules. Only one PCI 2022 * function at a time should be doing this. 2023 */ 2024 void t4_intr_enable(struct adapter *adapter) 2025 { 2026 u32 pf = SOURCEPF_GET(t4_read_reg(adapter, PL_WHOAMI)); 2027 2028 t4_write_reg(adapter, SGE_INT_ENABLE3, ERR_CPL_EXCEED_IQE_SIZE | 2029 ERR_INVALID_CIDX_INC | ERR_CPL_OPCODE_0 | 2030 ERR_DROPPED_DB | ERR_DATA_CPL_ON_HIGH_QID1 | 2031 ERR_DATA_CPL_ON_HIGH_QID0 | ERR_BAD_DB_PIDX3 | 2032 ERR_BAD_DB_PIDX2 | ERR_BAD_DB_PIDX1 | 2033 ERR_BAD_DB_PIDX0 | ERR_ING_CTXT_PRIO | 2034 ERR_EGR_CTXT_PRIO | INGRESS_SIZE_ERR | 2035 DBFIFO_HP_INT | DBFIFO_LP_INT | 2036 EGRESS_SIZE_ERR); 2037 t4_write_reg(adapter, MYPF_REG(PL_PF_INT_ENABLE), PF_INTR_MASK); 2038 t4_set_reg_field(adapter, PL_INT_MAP0, 0, 1 << pf); 2039 } 2040 2041 /** 2042 * t4_intr_disable - disable interrupts 2043 * @adapter: the adapter whose interrupts should be disabled 2044 * 2045 * Disable interrupts. We only disable the top-level interrupt 2046 * concentrators. The caller must be a PCI function managing global 2047 * interrupts. 2048 */ 2049 void t4_intr_disable(struct adapter *adapter) 2050 { 2051 u32 pf = SOURCEPF_GET(t4_read_reg(adapter, PL_WHOAMI)); 2052 2053 t4_write_reg(adapter, MYPF_REG(PL_PF_INT_ENABLE), 0); 2054 t4_set_reg_field(adapter, PL_INT_MAP0, 1 << pf, 0); 2055 } 2056 2057 /** 2058 * hash_mac_addr - return the hash value of a MAC address 2059 * @addr: the 48-bit Ethernet MAC address 2060 * 2061 * Hashes a MAC address according to the hash function used by HW inexact 2062 * (hash) address matching. 2063 */ 2064 static int hash_mac_addr(const u8 *addr) 2065 { 2066 u32 a = ((u32)addr[0] << 16) | ((u32)addr[1] << 8) | addr[2]; 2067 u32 b = ((u32)addr[3] << 16) | ((u32)addr[4] << 8) | addr[5]; 2068 a ^= b; 2069 a ^= (a >> 12); 2070 a ^= (a >> 6); 2071 return a & 0x3f; 2072 } 2073 2074 /** 2075 * t4_config_rss_range - configure a portion of the RSS mapping table 2076 * @adapter: the adapter 2077 * @mbox: mbox to use for the FW command 2078 * @viid: virtual interface whose RSS subtable is to be written 2079 * @start: start entry in the table to write 2080 * @n: how many table entries to write 2081 * @rspq: values for the response queue lookup table 2082 * @nrspq: number of values in @rspq 2083 * 2084 * Programs the selected part of the VI's RSS mapping table with the 2085 * provided values. If @nrspq < @n the supplied values are used repeatedly 2086 * until the full table range is populated. 2087 * 2088 * The caller must ensure the values in @rspq are in the range allowed for 2089 * @viid. 2090 */ 2091 int t4_config_rss_range(struct adapter *adapter, int mbox, unsigned int viid, 2092 int start, int n, const u16 *rspq, unsigned int nrspq) 2093 { 2094 int ret; 2095 const u16 *rsp = rspq; 2096 const u16 *rsp_end = rspq + nrspq; 2097 struct fw_rss_ind_tbl_cmd cmd; 2098 2099 memset(&cmd, 0, sizeof(cmd)); 2100 cmd.op_to_viid = htonl(FW_CMD_OP_V(FW_RSS_IND_TBL_CMD) | 2101 FW_CMD_REQUEST_F | FW_CMD_WRITE_F | 2102 FW_RSS_IND_TBL_CMD_VIID_V(viid)); 2103 cmd.retval_len16 = htonl(FW_LEN16(cmd)); 2104 2105 /* each fw_rss_ind_tbl_cmd takes up to 32 entries */ 2106 while (n > 0) { 2107 int nq = min(n, 32); 2108 __be32 *qp = &cmd.iq0_to_iq2; 2109 2110 cmd.niqid = htons(nq); 2111 cmd.startidx = htons(start); 2112 2113 start += nq; 2114 n -= nq; 2115 2116 while (nq > 0) { 2117 unsigned int v; 2118 2119 v = FW_RSS_IND_TBL_CMD_IQ0_V(*rsp); 2120 if (++rsp >= rsp_end) 2121 rsp = rspq; 2122 v |= FW_RSS_IND_TBL_CMD_IQ1_V(*rsp); 2123 if (++rsp >= rsp_end) 2124 rsp = rspq; 2125 v |= FW_RSS_IND_TBL_CMD_IQ2_V(*rsp); 2126 if (++rsp >= rsp_end) 2127 rsp = rspq; 2128 2129 *qp++ = htonl(v); 2130 nq -= 3; 2131 } 2132 2133 ret = t4_wr_mbox(adapter, mbox, &cmd, sizeof(cmd), NULL); 2134 if (ret) 2135 return ret; 2136 } 2137 return 0; 2138 } 2139 2140 /** 2141 * t4_config_glbl_rss - configure the global RSS mode 2142 * @adapter: the adapter 2143 * @mbox: mbox to use for the FW command 2144 * @mode: global RSS mode 2145 * @flags: mode-specific flags 2146 * 2147 * Sets the global RSS mode. 2148 */ 2149 int t4_config_glbl_rss(struct adapter *adapter, int mbox, unsigned int mode, 2150 unsigned int flags) 2151 { 2152 struct fw_rss_glb_config_cmd c; 2153 2154 memset(&c, 0, sizeof(c)); 2155 c.op_to_write = htonl(FW_CMD_OP_V(FW_RSS_GLB_CONFIG_CMD) | 2156 FW_CMD_REQUEST_F | FW_CMD_WRITE_F); 2157 c.retval_len16 = htonl(FW_LEN16(c)); 2158 if (mode == FW_RSS_GLB_CONFIG_CMD_MODE_MANUAL) { 2159 c.u.manual.mode_pkd = htonl(FW_RSS_GLB_CONFIG_CMD_MODE_V(mode)); 2160 } else if (mode == FW_RSS_GLB_CONFIG_CMD_MODE_BASICVIRTUAL) { 2161 c.u.basicvirtual.mode_pkd = 2162 htonl(FW_RSS_GLB_CONFIG_CMD_MODE_V(mode)); 2163 c.u.basicvirtual.synmapen_to_hashtoeplitz = htonl(flags); 2164 } else 2165 return -EINVAL; 2166 return t4_wr_mbox(adapter, mbox, &c, sizeof(c), NULL); 2167 } 2168 2169 /** 2170 * t4_tp_get_tcp_stats - read TP's TCP MIB counters 2171 * @adap: the adapter 2172 * @v4: holds the TCP/IP counter values 2173 * @v6: holds the TCP/IPv6 counter values 2174 * 2175 * Returns the values of TP's TCP/IP and TCP/IPv6 MIB counters. 2176 * Either @v4 or @v6 may be %NULL to skip the corresponding stats. 2177 */ 2178 void t4_tp_get_tcp_stats(struct adapter *adap, struct tp_tcp_stats *v4, 2179 struct tp_tcp_stats *v6) 2180 { 2181 u32 val[TP_MIB_TCP_RXT_SEG_LO - TP_MIB_TCP_OUT_RST + 1]; 2182 2183 #define STAT_IDX(x) ((TP_MIB_TCP_##x) - TP_MIB_TCP_OUT_RST) 2184 #define STAT(x) val[STAT_IDX(x)] 2185 #define STAT64(x) (((u64)STAT(x##_HI) << 32) | STAT(x##_LO)) 2186 2187 if (v4) { 2188 t4_read_indirect(adap, TP_MIB_INDEX, TP_MIB_DATA, val, 2189 ARRAY_SIZE(val), TP_MIB_TCP_OUT_RST); 2190 v4->tcpOutRsts = STAT(OUT_RST); 2191 v4->tcpInSegs = STAT64(IN_SEG); 2192 v4->tcpOutSegs = STAT64(OUT_SEG); 2193 v4->tcpRetransSegs = STAT64(RXT_SEG); 2194 } 2195 if (v6) { 2196 t4_read_indirect(adap, TP_MIB_INDEX, TP_MIB_DATA, val, 2197 ARRAY_SIZE(val), TP_MIB_TCP_V6OUT_RST); 2198 v6->tcpOutRsts = STAT(OUT_RST); 2199 v6->tcpInSegs = STAT64(IN_SEG); 2200 v6->tcpOutSegs = STAT64(OUT_SEG); 2201 v6->tcpRetransSegs = STAT64(RXT_SEG); 2202 } 2203 #undef STAT64 2204 #undef STAT 2205 #undef STAT_IDX 2206 } 2207 2208 /** 2209 * t4_read_mtu_tbl - returns the values in the HW path MTU table 2210 * @adap: the adapter 2211 * @mtus: where to store the MTU values 2212 * @mtu_log: where to store the MTU base-2 log (may be %NULL) 2213 * 2214 * Reads the HW path MTU table. 2215 */ 2216 void t4_read_mtu_tbl(struct adapter *adap, u16 *mtus, u8 *mtu_log) 2217 { 2218 u32 v; 2219 int i; 2220 2221 for (i = 0; i < NMTUS; ++i) { 2222 t4_write_reg(adap, TP_MTU_TABLE, 2223 MTUINDEX(0xff) | MTUVALUE(i)); 2224 v = t4_read_reg(adap, TP_MTU_TABLE); 2225 mtus[i] = MTUVALUE_GET(v); 2226 if (mtu_log) 2227 mtu_log[i] = MTUWIDTH_GET(v); 2228 } 2229 } 2230 2231 /** 2232 * t4_tp_wr_bits_indirect - set/clear bits in an indirect TP register 2233 * @adap: the adapter 2234 * @addr: the indirect TP register address 2235 * @mask: specifies the field within the register to modify 2236 * @val: new value for the field 2237 * 2238 * Sets a field of an indirect TP register to the given value. 2239 */ 2240 void t4_tp_wr_bits_indirect(struct adapter *adap, unsigned int addr, 2241 unsigned int mask, unsigned int val) 2242 { 2243 t4_write_reg(adap, TP_PIO_ADDR, addr); 2244 val |= t4_read_reg(adap, TP_PIO_DATA) & ~mask; 2245 t4_write_reg(adap, TP_PIO_DATA, val); 2246 } 2247 2248 /** 2249 * init_cong_ctrl - initialize congestion control parameters 2250 * @a: the alpha values for congestion control 2251 * @b: the beta values for congestion control 2252 * 2253 * Initialize the congestion control parameters. 2254 */ 2255 static void init_cong_ctrl(unsigned short *a, unsigned short *b) 2256 { 2257 a[0] = a[1] = a[2] = a[3] = a[4] = a[5] = a[6] = a[7] = a[8] = 1; 2258 a[9] = 2; 2259 a[10] = 3; 2260 a[11] = 4; 2261 a[12] = 5; 2262 a[13] = 6; 2263 a[14] = 7; 2264 a[15] = 8; 2265 a[16] = 9; 2266 a[17] = 10; 2267 a[18] = 14; 2268 a[19] = 17; 2269 a[20] = 21; 2270 a[21] = 25; 2271 a[22] = 30; 2272 a[23] = 35; 2273 a[24] = 45; 2274 a[25] = 60; 2275 a[26] = 80; 2276 a[27] = 100; 2277 a[28] = 200; 2278 a[29] = 300; 2279 a[30] = 400; 2280 a[31] = 500; 2281 2282 b[0] = b[1] = b[2] = b[3] = b[4] = b[5] = b[6] = b[7] = b[8] = 0; 2283 b[9] = b[10] = 1; 2284 b[11] = b[12] = 2; 2285 b[13] = b[14] = b[15] = b[16] = 3; 2286 b[17] = b[18] = b[19] = b[20] = b[21] = 4; 2287 b[22] = b[23] = b[24] = b[25] = b[26] = b[27] = 5; 2288 b[28] = b[29] = 6; 2289 b[30] = b[31] = 7; 2290 } 2291 2292 /* The minimum additive increment value for the congestion control table */ 2293 #define CC_MIN_INCR 2U 2294 2295 /** 2296 * t4_load_mtus - write the MTU and congestion control HW tables 2297 * @adap: the adapter 2298 * @mtus: the values for the MTU table 2299 * @alpha: the values for the congestion control alpha parameter 2300 * @beta: the values for the congestion control beta parameter 2301 * 2302 * Write the HW MTU table with the supplied MTUs and the high-speed 2303 * congestion control table with the supplied alpha, beta, and MTUs. 2304 * We write the two tables together because the additive increments 2305 * depend on the MTUs. 2306 */ 2307 void t4_load_mtus(struct adapter *adap, const unsigned short *mtus, 2308 const unsigned short *alpha, const unsigned short *beta) 2309 { 2310 static const unsigned int avg_pkts[NCCTRL_WIN] = { 2311 2, 6, 10, 14, 20, 28, 40, 56, 80, 112, 160, 224, 320, 448, 640, 2312 896, 1281, 1792, 2560, 3584, 5120, 7168, 10240, 14336, 20480, 2313 28672, 40960, 57344, 81920, 114688, 163840, 229376 2314 }; 2315 2316 unsigned int i, w; 2317 2318 for (i = 0; i < NMTUS; ++i) { 2319 unsigned int mtu = mtus[i]; 2320 unsigned int log2 = fls(mtu); 2321 2322 if (!(mtu & ((1 << log2) >> 2))) /* round */ 2323 log2--; 2324 t4_write_reg(adap, TP_MTU_TABLE, MTUINDEX(i) | 2325 MTUWIDTH(log2) | MTUVALUE(mtu)); 2326 2327 for (w = 0; w < NCCTRL_WIN; ++w) { 2328 unsigned int inc; 2329 2330 inc = max(((mtu - 40) * alpha[w]) / avg_pkts[w], 2331 CC_MIN_INCR); 2332 2333 t4_write_reg(adap, TP_CCTRL_TABLE, (i << 21) | 2334 (w << 16) | (beta[w] << 13) | inc); 2335 } 2336 } 2337 } 2338 2339 /** 2340 * get_mps_bg_map - return the buffer groups associated with a port 2341 * @adap: the adapter 2342 * @idx: the port index 2343 * 2344 * Returns a bitmap indicating which MPS buffer groups are associated 2345 * with the given port. Bit i is set if buffer group i is used by the 2346 * port. 2347 */ 2348 static unsigned int get_mps_bg_map(struct adapter *adap, int idx) 2349 { 2350 u32 n = NUMPORTS_GET(t4_read_reg(adap, MPS_CMN_CTL)); 2351 2352 if (n == 0) 2353 return idx == 0 ? 0xf : 0; 2354 if (n == 1) 2355 return idx < 2 ? (3 << (2 * idx)) : 0; 2356 return 1 << idx; 2357 } 2358 2359 /** 2360 * t4_get_port_type_description - return Port Type string description 2361 * @port_type: firmware Port Type enumeration 2362 */ 2363 const char *t4_get_port_type_description(enum fw_port_type port_type) 2364 { 2365 static const char *const port_type_description[] = { 2366 "R XFI", 2367 "R XAUI", 2368 "T SGMII", 2369 "T XFI", 2370 "T XAUI", 2371 "KX4", 2372 "CX4", 2373 "KX", 2374 "KR", 2375 "R SFP+", 2376 "KR/KX", 2377 "KR/KX/KX4", 2378 "R QSFP_10G", 2379 "R QSA", 2380 "R QSFP", 2381 "R BP40_BA", 2382 }; 2383 2384 if (port_type < ARRAY_SIZE(port_type_description)) 2385 return port_type_description[port_type]; 2386 return "UNKNOWN"; 2387 } 2388 2389 /** 2390 * t4_get_port_stats - collect port statistics 2391 * @adap: the adapter 2392 * @idx: the port index 2393 * @p: the stats structure to fill 2394 * 2395 * Collect statistics related to the given port from HW. 2396 */ 2397 void t4_get_port_stats(struct adapter *adap, int idx, struct port_stats *p) 2398 { 2399 u32 bgmap = get_mps_bg_map(adap, idx); 2400 2401 #define GET_STAT(name) \ 2402 t4_read_reg64(adap, \ 2403 (is_t4(adap->params.chip) ? PORT_REG(idx, MPS_PORT_STAT_##name##_L) : \ 2404 T5_PORT_REG(idx, MPS_PORT_STAT_##name##_L))) 2405 #define GET_STAT_COM(name) t4_read_reg64(adap, MPS_STAT_##name##_L) 2406 2407 p->tx_octets = GET_STAT(TX_PORT_BYTES); 2408 p->tx_frames = GET_STAT(TX_PORT_FRAMES); 2409 p->tx_bcast_frames = GET_STAT(TX_PORT_BCAST); 2410 p->tx_mcast_frames = GET_STAT(TX_PORT_MCAST); 2411 p->tx_ucast_frames = GET_STAT(TX_PORT_UCAST); 2412 p->tx_error_frames = GET_STAT(TX_PORT_ERROR); 2413 p->tx_frames_64 = GET_STAT(TX_PORT_64B); 2414 p->tx_frames_65_127 = GET_STAT(TX_PORT_65B_127B); 2415 p->tx_frames_128_255 = GET_STAT(TX_PORT_128B_255B); 2416 p->tx_frames_256_511 = GET_STAT(TX_PORT_256B_511B); 2417 p->tx_frames_512_1023 = GET_STAT(TX_PORT_512B_1023B); 2418 p->tx_frames_1024_1518 = GET_STAT(TX_PORT_1024B_1518B); 2419 p->tx_frames_1519_max = GET_STAT(TX_PORT_1519B_MAX); 2420 p->tx_drop = GET_STAT(TX_PORT_DROP); 2421 p->tx_pause = GET_STAT(TX_PORT_PAUSE); 2422 p->tx_ppp0 = GET_STAT(TX_PORT_PPP0); 2423 p->tx_ppp1 = GET_STAT(TX_PORT_PPP1); 2424 p->tx_ppp2 = GET_STAT(TX_PORT_PPP2); 2425 p->tx_ppp3 = GET_STAT(TX_PORT_PPP3); 2426 p->tx_ppp4 = GET_STAT(TX_PORT_PPP4); 2427 p->tx_ppp5 = GET_STAT(TX_PORT_PPP5); 2428 p->tx_ppp6 = GET_STAT(TX_PORT_PPP6); 2429 p->tx_ppp7 = GET_STAT(TX_PORT_PPP7); 2430 2431 p->rx_octets = GET_STAT(RX_PORT_BYTES); 2432 p->rx_frames = GET_STAT(RX_PORT_FRAMES); 2433 p->rx_bcast_frames = GET_STAT(RX_PORT_BCAST); 2434 p->rx_mcast_frames = GET_STAT(RX_PORT_MCAST); 2435 p->rx_ucast_frames = GET_STAT(RX_PORT_UCAST); 2436 p->rx_too_long = GET_STAT(RX_PORT_MTU_ERROR); 2437 p->rx_jabber = GET_STAT(RX_PORT_MTU_CRC_ERROR); 2438 p->rx_fcs_err = GET_STAT(RX_PORT_CRC_ERROR); 2439 p->rx_len_err = GET_STAT(RX_PORT_LEN_ERROR); 2440 p->rx_symbol_err = GET_STAT(RX_PORT_SYM_ERROR); 2441 p->rx_runt = GET_STAT(RX_PORT_LESS_64B); 2442 p->rx_frames_64 = GET_STAT(RX_PORT_64B); 2443 p->rx_frames_65_127 = GET_STAT(RX_PORT_65B_127B); 2444 p->rx_frames_128_255 = GET_STAT(RX_PORT_128B_255B); 2445 p->rx_frames_256_511 = GET_STAT(RX_PORT_256B_511B); 2446 p->rx_frames_512_1023 = GET_STAT(RX_PORT_512B_1023B); 2447 p->rx_frames_1024_1518 = GET_STAT(RX_PORT_1024B_1518B); 2448 p->rx_frames_1519_max = GET_STAT(RX_PORT_1519B_MAX); 2449 p->rx_pause = GET_STAT(RX_PORT_PAUSE); 2450 p->rx_ppp0 = GET_STAT(RX_PORT_PPP0); 2451 p->rx_ppp1 = GET_STAT(RX_PORT_PPP1); 2452 p->rx_ppp2 = GET_STAT(RX_PORT_PPP2); 2453 p->rx_ppp3 = GET_STAT(RX_PORT_PPP3); 2454 p->rx_ppp4 = GET_STAT(RX_PORT_PPP4); 2455 p->rx_ppp5 = GET_STAT(RX_PORT_PPP5); 2456 p->rx_ppp6 = GET_STAT(RX_PORT_PPP6); 2457 p->rx_ppp7 = GET_STAT(RX_PORT_PPP7); 2458 2459 p->rx_ovflow0 = (bgmap & 1) ? GET_STAT_COM(RX_BG_0_MAC_DROP_FRAME) : 0; 2460 p->rx_ovflow1 = (bgmap & 2) ? GET_STAT_COM(RX_BG_1_MAC_DROP_FRAME) : 0; 2461 p->rx_ovflow2 = (bgmap & 4) ? GET_STAT_COM(RX_BG_2_MAC_DROP_FRAME) : 0; 2462 p->rx_ovflow3 = (bgmap & 8) ? GET_STAT_COM(RX_BG_3_MAC_DROP_FRAME) : 0; 2463 p->rx_trunc0 = (bgmap & 1) ? GET_STAT_COM(RX_BG_0_MAC_TRUNC_FRAME) : 0; 2464 p->rx_trunc1 = (bgmap & 2) ? GET_STAT_COM(RX_BG_1_MAC_TRUNC_FRAME) : 0; 2465 p->rx_trunc2 = (bgmap & 4) ? GET_STAT_COM(RX_BG_2_MAC_TRUNC_FRAME) : 0; 2466 p->rx_trunc3 = (bgmap & 8) ? GET_STAT_COM(RX_BG_3_MAC_TRUNC_FRAME) : 0; 2467 2468 #undef GET_STAT 2469 #undef GET_STAT_COM 2470 } 2471 2472 /** 2473 * t4_wol_magic_enable - enable/disable magic packet WoL 2474 * @adap: the adapter 2475 * @port: the physical port index 2476 * @addr: MAC address expected in magic packets, %NULL to disable 2477 * 2478 * Enables/disables magic packet wake-on-LAN for the selected port. 2479 */ 2480 void t4_wol_magic_enable(struct adapter *adap, unsigned int port, 2481 const u8 *addr) 2482 { 2483 u32 mag_id_reg_l, mag_id_reg_h, port_cfg_reg; 2484 2485 if (is_t4(adap->params.chip)) { 2486 mag_id_reg_l = PORT_REG(port, XGMAC_PORT_MAGIC_MACID_LO); 2487 mag_id_reg_h = PORT_REG(port, XGMAC_PORT_MAGIC_MACID_HI); 2488 port_cfg_reg = PORT_REG(port, XGMAC_PORT_CFG2); 2489 } else { 2490 mag_id_reg_l = T5_PORT_REG(port, MAC_PORT_MAGIC_MACID_LO); 2491 mag_id_reg_h = T5_PORT_REG(port, MAC_PORT_MAGIC_MACID_HI); 2492 port_cfg_reg = T5_PORT_REG(port, MAC_PORT_CFG2); 2493 } 2494 2495 if (addr) { 2496 t4_write_reg(adap, mag_id_reg_l, 2497 (addr[2] << 24) | (addr[3] << 16) | 2498 (addr[4] << 8) | addr[5]); 2499 t4_write_reg(adap, mag_id_reg_h, 2500 (addr[0] << 8) | addr[1]); 2501 } 2502 t4_set_reg_field(adap, port_cfg_reg, MAGICEN, 2503 addr ? MAGICEN : 0); 2504 } 2505 2506 /** 2507 * t4_wol_pat_enable - enable/disable pattern-based WoL 2508 * @adap: the adapter 2509 * @port: the physical port index 2510 * @map: bitmap of which HW pattern filters to set 2511 * @mask0: byte mask for bytes 0-63 of a packet 2512 * @mask1: byte mask for bytes 64-127 of a packet 2513 * @crc: Ethernet CRC for selected bytes 2514 * @enable: enable/disable switch 2515 * 2516 * Sets the pattern filters indicated in @map to mask out the bytes 2517 * specified in @mask0/@mask1 in received packets and compare the CRC of 2518 * the resulting packet against @crc. If @enable is %true pattern-based 2519 * WoL is enabled, otherwise disabled. 2520 */ 2521 int t4_wol_pat_enable(struct adapter *adap, unsigned int port, unsigned int map, 2522 u64 mask0, u64 mask1, unsigned int crc, bool enable) 2523 { 2524 int i; 2525 u32 port_cfg_reg; 2526 2527 if (is_t4(adap->params.chip)) 2528 port_cfg_reg = PORT_REG(port, XGMAC_PORT_CFG2); 2529 else 2530 port_cfg_reg = T5_PORT_REG(port, MAC_PORT_CFG2); 2531 2532 if (!enable) { 2533 t4_set_reg_field(adap, port_cfg_reg, PATEN, 0); 2534 return 0; 2535 } 2536 if (map > 0xff) 2537 return -EINVAL; 2538 2539 #define EPIO_REG(name) \ 2540 (is_t4(adap->params.chip) ? PORT_REG(port, XGMAC_PORT_EPIO_##name) : \ 2541 T5_PORT_REG(port, MAC_PORT_EPIO_##name)) 2542 2543 t4_write_reg(adap, EPIO_REG(DATA1), mask0 >> 32); 2544 t4_write_reg(adap, EPIO_REG(DATA2), mask1); 2545 t4_write_reg(adap, EPIO_REG(DATA3), mask1 >> 32); 2546 2547 for (i = 0; i < NWOL_PAT; i++, map >>= 1) { 2548 if (!(map & 1)) 2549 continue; 2550 2551 /* write byte masks */ 2552 t4_write_reg(adap, EPIO_REG(DATA0), mask0); 2553 t4_write_reg(adap, EPIO_REG(OP), ADDRESS(i) | EPIOWR); 2554 t4_read_reg(adap, EPIO_REG(OP)); /* flush */ 2555 if (t4_read_reg(adap, EPIO_REG(OP)) & SF_BUSY) 2556 return -ETIMEDOUT; 2557 2558 /* write CRC */ 2559 t4_write_reg(adap, EPIO_REG(DATA0), crc); 2560 t4_write_reg(adap, EPIO_REG(OP), ADDRESS(i + 32) | EPIOWR); 2561 t4_read_reg(adap, EPIO_REG(OP)); /* flush */ 2562 if (t4_read_reg(adap, EPIO_REG(OP)) & SF_BUSY) 2563 return -ETIMEDOUT; 2564 } 2565 #undef EPIO_REG 2566 2567 t4_set_reg_field(adap, PORT_REG(port, XGMAC_PORT_CFG2), 0, PATEN); 2568 return 0; 2569 } 2570 2571 /* t4_mk_filtdelwr - create a delete filter WR 2572 * @ftid: the filter ID 2573 * @wr: the filter work request to populate 2574 * @qid: ingress queue to receive the delete notification 2575 * 2576 * Creates a filter work request to delete the supplied filter. If @qid is 2577 * negative the delete notification is suppressed. 2578 */ 2579 void t4_mk_filtdelwr(unsigned int ftid, struct fw_filter_wr *wr, int qid) 2580 { 2581 memset(wr, 0, sizeof(*wr)); 2582 wr->op_pkd = htonl(FW_WR_OP_V(FW_FILTER_WR)); 2583 wr->len16_pkd = htonl(FW_WR_LEN16_V(sizeof(*wr) / 16)); 2584 wr->tid_to_iq = htonl(FW_FILTER_WR_TID_V(ftid) | 2585 FW_FILTER_WR_NOREPLY_V(qid < 0)); 2586 wr->del_filter_to_l2tix = htonl(FW_FILTER_WR_DEL_FILTER_F); 2587 if (qid >= 0) 2588 wr->rx_chan_rx_rpl_iq = htons(FW_FILTER_WR_RX_RPL_IQ_V(qid)); 2589 } 2590 2591 #define INIT_CMD(var, cmd, rd_wr) do { \ 2592 (var).op_to_write = htonl(FW_CMD_OP_V(FW_##cmd##_CMD) | \ 2593 FW_CMD_REQUEST_F | FW_CMD_##rd_wr##_F); \ 2594 (var).retval_len16 = htonl(FW_LEN16(var)); \ 2595 } while (0) 2596 2597 int t4_fwaddrspace_write(struct adapter *adap, unsigned int mbox, 2598 u32 addr, u32 val) 2599 { 2600 struct fw_ldst_cmd c; 2601 2602 memset(&c, 0, sizeof(c)); 2603 c.op_to_addrspace = htonl(FW_CMD_OP_V(FW_LDST_CMD) | FW_CMD_REQUEST_F | 2604 FW_CMD_WRITE_F | 2605 FW_LDST_CMD_ADDRSPACE_V(FW_LDST_ADDRSPC_FIRMWARE)); 2606 c.cycles_to_len16 = htonl(FW_LEN16(c)); 2607 c.u.addrval.addr = htonl(addr); 2608 c.u.addrval.val = htonl(val); 2609 2610 return t4_wr_mbox(adap, mbox, &c, sizeof(c), NULL); 2611 } 2612 2613 /** 2614 * t4_mdio_rd - read a PHY register through MDIO 2615 * @adap: the adapter 2616 * @mbox: mailbox to use for the FW command 2617 * @phy_addr: the PHY address 2618 * @mmd: the PHY MMD to access (0 for clause 22 PHYs) 2619 * @reg: the register to read 2620 * @valp: where to store the value 2621 * 2622 * Issues a FW command through the given mailbox to read a PHY register. 2623 */ 2624 int t4_mdio_rd(struct adapter *adap, unsigned int mbox, unsigned int phy_addr, 2625 unsigned int mmd, unsigned int reg, u16 *valp) 2626 { 2627 int ret; 2628 struct fw_ldst_cmd c; 2629 2630 memset(&c, 0, sizeof(c)); 2631 c.op_to_addrspace = htonl(FW_CMD_OP_V(FW_LDST_CMD) | FW_CMD_REQUEST_F | 2632 FW_CMD_READ_F | FW_LDST_CMD_ADDRSPACE_V(FW_LDST_ADDRSPC_MDIO)); 2633 c.cycles_to_len16 = htonl(FW_LEN16(c)); 2634 c.u.mdio.paddr_mmd = htons(FW_LDST_CMD_PADDR_V(phy_addr) | 2635 FW_LDST_CMD_MMD_V(mmd)); 2636 c.u.mdio.raddr = htons(reg); 2637 2638 ret = t4_wr_mbox(adap, mbox, &c, sizeof(c), &c); 2639 if (ret == 0) 2640 *valp = ntohs(c.u.mdio.rval); 2641 return ret; 2642 } 2643 2644 /** 2645 * t4_mdio_wr - write a PHY register through MDIO 2646 * @adap: the adapter 2647 * @mbox: mailbox to use for the FW command 2648 * @phy_addr: the PHY address 2649 * @mmd: the PHY MMD to access (0 for clause 22 PHYs) 2650 * @reg: the register to write 2651 * @valp: value to write 2652 * 2653 * Issues a FW command through the given mailbox to write a PHY register. 2654 */ 2655 int t4_mdio_wr(struct adapter *adap, unsigned int mbox, unsigned int phy_addr, 2656 unsigned int mmd, unsigned int reg, u16 val) 2657 { 2658 struct fw_ldst_cmd c; 2659 2660 memset(&c, 0, sizeof(c)); 2661 c.op_to_addrspace = htonl(FW_CMD_OP_V(FW_LDST_CMD) | FW_CMD_REQUEST_F | 2662 FW_CMD_WRITE_F | FW_LDST_CMD_ADDRSPACE_V(FW_LDST_ADDRSPC_MDIO)); 2663 c.cycles_to_len16 = htonl(FW_LEN16(c)); 2664 c.u.mdio.paddr_mmd = htons(FW_LDST_CMD_PADDR_V(phy_addr) | 2665 FW_LDST_CMD_MMD_V(mmd)); 2666 c.u.mdio.raddr = htons(reg); 2667 c.u.mdio.rval = htons(val); 2668 2669 return t4_wr_mbox(adap, mbox, &c, sizeof(c), NULL); 2670 } 2671 2672 /** 2673 * t4_sge_decode_idma_state - decode the idma state 2674 * @adap: the adapter 2675 * @state: the state idma is stuck in 2676 */ 2677 void t4_sge_decode_idma_state(struct adapter *adapter, int state) 2678 { 2679 static const char * const t4_decode[] = { 2680 "IDMA_IDLE", 2681 "IDMA_PUSH_MORE_CPL_FIFO", 2682 "IDMA_PUSH_CPL_MSG_HEADER_TO_FIFO", 2683 "Not used", 2684 "IDMA_PHYSADDR_SEND_PCIEHDR", 2685 "IDMA_PHYSADDR_SEND_PAYLOAD_FIRST", 2686 "IDMA_PHYSADDR_SEND_PAYLOAD", 2687 "IDMA_SEND_FIFO_TO_IMSG", 2688 "IDMA_FL_REQ_DATA_FL_PREP", 2689 "IDMA_FL_REQ_DATA_FL", 2690 "IDMA_FL_DROP", 2691 "IDMA_FL_H_REQ_HEADER_FL", 2692 "IDMA_FL_H_SEND_PCIEHDR", 2693 "IDMA_FL_H_PUSH_CPL_FIFO", 2694 "IDMA_FL_H_SEND_CPL", 2695 "IDMA_FL_H_SEND_IP_HDR_FIRST", 2696 "IDMA_FL_H_SEND_IP_HDR", 2697 "IDMA_FL_H_REQ_NEXT_HEADER_FL", 2698 "IDMA_FL_H_SEND_NEXT_PCIEHDR", 2699 "IDMA_FL_H_SEND_IP_HDR_PADDING", 2700 "IDMA_FL_D_SEND_PCIEHDR", 2701 "IDMA_FL_D_SEND_CPL_AND_IP_HDR", 2702 "IDMA_FL_D_REQ_NEXT_DATA_FL", 2703 "IDMA_FL_SEND_PCIEHDR", 2704 "IDMA_FL_PUSH_CPL_FIFO", 2705 "IDMA_FL_SEND_CPL", 2706 "IDMA_FL_SEND_PAYLOAD_FIRST", 2707 "IDMA_FL_SEND_PAYLOAD", 2708 "IDMA_FL_REQ_NEXT_DATA_FL", 2709 "IDMA_FL_SEND_NEXT_PCIEHDR", 2710 "IDMA_FL_SEND_PADDING", 2711 "IDMA_FL_SEND_COMPLETION_TO_IMSG", 2712 "IDMA_FL_SEND_FIFO_TO_IMSG", 2713 "IDMA_FL_REQ_DATAFL_DONE", 2714 "IDMA_FL_REQ_HEADERFL_DONE", 2715 }; 2716 static const char * const t5_decode[] = { 2717 "IDMA_IDLE", 2718 "IDMA_ALMOST_IDLE", 2719 "IDMA_PUSH_MORE_CPL_FIFO", 2720 "IDMA_PUSH_CPL_MSG_HEADER_TO_FIFO", 2721 "IDMA_SGEFLRFLUSH_SEND_PCIEHDR", 2722 "IDMA_PHYSADDR_SEND_PCIEHDR", 2723 "IDMA_PHYSADDR_SEND_PAYLOAD_FIRST", 2724 "IDMA_PHYSADDR_SEND_PAYLOAD", 2725 "IDMA_SEND_FIFO_TO_IMSG", 2726 "IDMA_FL_REQ_DATA_FL", 2727 "IDMA_FL_DROP", 2728 "IDMA_FL_DROP_SEND_INC", 2729 "IDMA_FL_H_REQ_HEADER_FL", 2730 "IDMA_FL_H_SEND_PCIEHDR", 2731 "IDMA_FL_H_PUSH_CPL_FIFO", 2732 "IDMA_FL_H_SEND_CPL", 2733 "IDMA_FL_H_SEND_IP_HDR_FIRST", 2734 "IDMA_FL_H_SEND_IP_HDR", 2735 "IDMA_FL_H_REQ_NEXT_HEADER_FL", 2736 "IDMA_FL_H_SEND_NEXT_PCIEHDR", 2737 "IDMA_FL_H_SEND_IP_HDR_PADDING", 2738 "IDMA_FL_D_SEND_PCIEHDR", 2739 "IDMA_FL_D_SEND_CPL_AND_IP_HDR", 2740 "IDMA_FL_D_REQ_NEXT_DATA_FL", 2741 "IDMA_FL_SEND_PCIEHDR", 2742 "IDMA_FL_PUSH_CPL_FIFO", 2743 "IDMA_FL_SEND_CPL", 2744 "IDMA_FL_SEND_PAYLOAD_FIRST", 2745 "IDMA_FL_SEND_PAYLOAD", 2746 "IDMA_FL_REQ_NEXT_DATA_FL", 2747 "IDMA_FL_SEND_NEXT_PCIEHDR", 2748 "IDMA_FL_SEND_PADDING", 2749 "IDMA_FL_SEND_COMPLETION_TO_IMSG", 2750 }; 2751 static const u32 sge_regs[] = { 2752 SGE_DEBUG_DATA_LOW_INDEX_2, 2753 SGE_DEBUG_DATA_LOW_INDEX_3, 2754 SGE_DEBUG_DATA_HIGH_INDEX_10, 2755 }; 2756 const char **sge_idma_decode; 2757 int sge_idma_decode_nstates; 2758 int i; 2759 2760 if (is_t4(adapter->params.chip)) { 2761 sge_idma_decode = (const char **)t4_decode; 2762 sge_idma_decode_nstates = ARRAY_SIZE(t4_decode); 2763 } else { 2764 sge_idma_decode = (const char **)t5_decode; 2765 sge_idma_decode_nstates = ARRAY_SIZE(t5_decode); 2766 } 2767 2768 if (state < sge_idma_decode_nstates) 2769 CH_WARN(adapter, "idma state %s\n", sge_idma_decode[state]); 2770 else 2771 CH_WARN(adapter, "idma state %d unknown\n", state); 2772 2773 for (i = 0; i < ARRAY_SIZE(sge_regs); i++) 2774 CH_WARN(adapter, "SGE register %#x value %#x\n", 2775 sge_regs[i], t4_read_reg(adapter, sge_regs[i])); 2776 } 2777 2778 /** 2779 * t4_fw_hello - establish communication with FW 2780 * @adap: the adapter 2781 * @mbox: mailbox to use for the FW command 2782 * @evt_mbox: mailbox to receive async FW events 2783 * @master: specifies the caller's willingness to be the device master 2784 * @state: returns the current device state (if non-NULL) 2785 * 2786 * Issues a command to establish communication with FW. Returns either 2787 * an error (negative integer) or the mailbox of the Master PF. 2788 */ 2789 int t4_fw_hello(struct adapter *adap, unsigned int mbox, unsigned int evt_mbox, 2790 enum dev_master master, enum dev_state *state) 2791 { 2792 int ret; 2793 struct fw_hello_cmd c; 2794 u32 v; 2795 unsigned int master_mbox; 2796 int retries = FW_CMD_HELLO_RETRIES; 2797 2798 retry: 2799 memset(&c, 0, sizeof(c)); 2800 INIT_CMD(c, HELLO, WRITE); 2801 c.err_to_clearinit = htonl( 2802 FW_HELLO_CMD_MASTERDIS_V(master == MASTER_CANT) | 2803 FW_HELLO_CMD_MASTERFORCE_V(master == MASTER_MUST) | 2804 FW_HELLO_CMD_MBMASTER_V(master == MASTER_MUST ? mbox : 2805 FW_HELLO_CMD_MBMASTER_M) | 2806 FW_HELLO_CMD_MBASYNCNOT_V(evt_mbox) | 2807 FW_HELLO_CMD_STAGE_V(fw_hello_cmd_stage_os) | 2808 FW_HELLO_CMD_CLEARINIT_F); 2809 2810 /* 2811 * Issue the HELLO command to the firmware. If it's not successful 2812 * but indicates that we got a "busy" or "timeout" condition, retry 2813 * the HELLO until we exhaust our retry limit. If we do exceed our 2814 * retry limit, check to see if the firmware left us any error 2815 * information and report that if so. 2816 */ 2817 ret = t4_wr_mbox(adap, mbox, &c, sizeof(c), &c); 2818 if (ret < 0) { 2819 if ((ret == -EBUSY || ret == -ETIMEDOUT) && retries-- > 0) 2820 goto retry; 2821 if (t4_read_reg(adap, MA_PCIE_FW) & PCIE_FW_ERR) 2822 t4_report_fw_error(adap); 2823 return ret; 2824 } 2825 2826 v = ntohl(c.err_to_clearinit); 2827 master_mbox = FW_HELLO_CMD_MBMASTER_G(v); 2828 if (state) { 2829 if (v & FW_HELLO_CMD_ERR_F) 2830 *state = DEV_STATE_ERR; 2831 else if (v & FW_HELLO_CMD_INIT_F) 2832 *state = DEV_STATE_INIT; 2833 else 2834 *state = DEV_STATE_UNINIT; 2835 } 2836 2837 /* 2838 * If we're not the Master PF then we need to wait around for the 2839 * Master PF Driver to finish setting up the adapter. 2840 * 2841 * Note that we also do this wait if we're a non-Master-capable PF and 2842 * there is no current Master PF; a Master PF may show up momentarily 2843 * and we wouldn't want to fail pointlessly. (This can happen when an 2844 * OS loads lots of different drivers rapidly at the same time). In 2845 * this case, the Master PF returned by the firmware will be 2846 * PCIE_FW_MASTER_M so the test below will work ... 2847 */ 2848 if ((v & (FW_HELLO_CMD_ERR_F|FW_HELLO_CMD_INIT_F)) == 0 && 2849 master_mbox != mbox) { 2850 int waiting = FW_CMD_HELLO_TIMEOUT; 2851 2852 /* 2853 * Wait for the firmware to either indicate an error or 2854 * initialized state. If we see either of these we bail out 2855 * and report the issue to the caller. If we exhaust the 2856 * "hello timeout" and we haven't exhausted our retries, try 2857 * again. Otherwise bail with a timeout error. 2858 */ 2859 for (;;) { 2860 u32 pcie_fw; 2861 2862 msleep(50); 2863 waiting -= 50; 2864 2865 /* 2866 * If neither Error nor Initialialized are indicated 2867 * by the firmware keep waiting till we exaust our 2868 * timeout ... and then retry if we haven't exhausted 2869 * our retries ... 2870 */ 2871 pcie_fw = t4_read_reg(adap, MA_PCIE_FW); 2872 if (!(pcie_fw & (PCIE_FW_ERR|PCIE_FW_INIT))) { 2873 if (waiting <= 0) { 2874 if (retries-- > 0) 2875 goto retry; 2876 2877 return -ETIMEDOUT; 2878 } 2879 continue; 2880 } 2881 2882 /* 2883 * We either have an Error or Initialized condition 2884 * report errors preferentially. 2885 */ 2886 if (state) { 2887 if (pcie_fw & PCIE_FW_ERR) 2888 *state = DEV_STATE_ERR; 2889 else if (pcie_fw & PCIE_FW_INIT) 2890 *state = DEV_STATE_INIT; 2891 } 2892 2893 /* 2894 * If we arrived before a Master PF was selected and 2895 * there's not a valid Master PF, grab its identity 2896 * for our caller. 2897 */ 2898 if (master_mbox == PCIE_FW_MASTER_M && 2899 (pcie_fw & PCIE_FW_MASTER_VLD)) 2900 master_mbox = PCIE_FW_MASTER_G(pcie_fw); 2901 break; 2902 } 2903 } 2904 2905 return master_mbox; 2906 } 2907 2908 /** 2909 * t4_fw_bye - end communication with FW 2910 * @adap: the adapter 2911 * @mbox: mailbox to use for the FW command 2912 * 2913 * Issues a command to terminate communication with FW. 2914 */ 2915 int t4_fw_bye(struct adapter *adap, unsigned int mbox) 2916 { 2917 struct fw_bye_cmd c; 2918 2919 memset(&c, 0, sizeof(c)); 2920 INIT_CMD(c, BYE, WRITE); 2921 return t4_wr_mbox(adap, mbox, &c, sizeof(c), NULL); 2922 } 2923 2924 /** 2925 * t4_init_cmd - ask FW to initialize the device 2926 * @adap: the adapter 2927 * @mbox: mailbox to use for the FW command 2928 * 2929 * Issues a command to FW to partially initialize the device. This 2930 * performs initialization that generally doesn't depend on user input. 2931 */ 2932 int t4_early_init(struct adapter *adap, unsigned int mbox) 2933 { 2934 struct fw_initialize_cmd c; 2935 2936 memset(&c, 0, sizeof(c)); 2937 INIT_CMD(c, INITIALIZE, WRITE); 2938 return t4_wr_mbox(adap, mbox, &c, sizeof(c), NULL); 2939 } 2940 2941 /** 2942 * t4_fw_reset - issue a reset to FW 2943 * @adap: the adapter 2944 * @mbox: mailbox to use for the FW command 2945 * @reset: specifies the type of reset to perform 2946 * 2947 * Issues a reset command of the specified type to FW. 2948 */ 2949 int t4_fw_reset(struct adapter *adap, unsigned int mbox, int reset) 2950 { 2951 struct fw_reset_cmd c; 2952 2953 memset(&c, 0, sizeof(c)); 2954 INIT_CMD(c, RESET, WRITE); 2955 c.val = htonl(reset); 2956 return t4_wr_mbox(adap, mbox, &c, sizeof(c), NULL); 2957 } 2958 2959 /** 2960 * t4_fw_halt - issue a reset/halt to FW and put uP into RESET 2961 * @adap: the adapter 2962 * @mbox: mailbox to use for the FW RESET command (if desired) 2963 * @force: force uP into RESET even if FW RESET command fails 2964 * 2965 * Issues a RESET command to firmware (if desired) with a HALT indication 2966 * and then puts the microprocessor into RESET state. The RESET command 2967 * will only be issued if a legitimate mailbox is provided (mbox <= 2968 * PCIE_FW_MASTER_M). 2969 * 2970 * This is generally used in order for the host to safely manipulate the 2971 * adapter without fear of conflicting with whatever the firmware might 2972 * be doing. The only way out of this state is to RESTART the firmware 2973 * ... 2974 */ 2975 static int t4_fw_halt(struct adapter *adap, unsigned int mbox, int force) 2976 { 2977 int ret = 0; 2978 2979 /* 2980 * If a legitimate mailbox is provided, issue a RESET command 2981 * with a HALT indication. 2982 */ 2983 if (mbox <= PCIE_FW_MASTER_M) { 2984 struct fw_reset_cmd c; 2985 2986 memset(&c, 0, sizeof(c)); 2987 INIT_CMD(c, RESET, WRITE); 2988 c.val = htonl(PIORST | PIORSTMODE); 2989 c.halt_pkd = htonl(FW_RESET_CMD_HALT_F); 2990 ret = t4_wr_mbox(adap, mbox, &c, sizeof(c), NULL); 2991 } 2992 2993 /* 2994 * Normally we won't complete the operation if the firmware RESET 2995 * command fails but if our caller insists we'll go ahead and put the 2996 * uP into RESET. This can be useful if the firmware is hung or even 2997 * missing ... We'll have to take the risk of putting the uP into 2998 * RESET without the cooperation of firmware in that case. 2999 * 3000 * We also force the firmware's HALT flag to be on in case we bypassed 3001 * the firmware RESET command above or we're dealing with old firmware 3002 * which doesn't have the HALT capability. This will serve as a flag 3003 * for the incoming firmware to know that it's coming out of a HALT 3004 * rather than a RESET ... if it's new enough to understand that ... 3005 */ 3006 if (ret == 0 || force) { 3007 t4_set_reg_field(adap, CIM_BOOT_CFG, UPCRST, UPCRST); 3008 t4_set_reg_field(adap, PCIE_FW, PCIE_FW_HALT_F, 3009 PCIE_FW_HALT_F); 3010 } 3011 3012 /* 3013 * And we always return the result of the firmware RESET command 3014 * even when we force the uP into RESET ... 3015 */ 3016 return ret; 3017 } 3018 3019 /** 3020 * t4_fw_restart - restart the firmware by taking the uP out of RESET 3021 * @adap: the adapter 3022 * @reset: if we want to do a RESET to restart things 3023 * 3024 * Restart firmware previously halted by t4_fw_halt(). On successful 3025 * return the previous PF Master remains as the new PF Master and there 3026 * is no need to issue a new HELLO command, etc. 3027 * 3028 * We do this in two ways: 3029 * 3030 * 1. If we're dealing with newer firmware we'll simply want to take 3031 * the chip's microprocessor out of RESET. This will cause the 3032 * firmware to start up from its start vector. And then we'll loop 3033 * until the firmware indicates it's started again (PCIE_FW.HALT 3034 * reset to 0) or we timeout. 3035 * 3036 * 2. If we're dealing with older firmware then we'll need to RESET 3037 * the chip since older firmware won't recognize the PCIE_FW.HALT 3038 * flag and automatically RESET itself on startup. 3039 */ 3040 static int t4_fw_restart(struct adapter *adap, unsigned int mbox, int reset) 3041 { 3042 if (reset) { 3043 /* 3044 * Since we're directing the RESET instead of the firmware 3045 * doing it automatically, we need to clear the PCIE_FW.HALT 3046 * bit. 3047 */ 3048 t4_set_reg_field(adap, PCIE_FW, PCIE_FW_HALT_F, 0); 3049 3050 /* 3051 * If we've been given a valid mailbox, first try to get the 3052 * firmware to do the RESET. If that works, great and we can 3053 * return success. Otherwise, if we haven't been given a 3054 * valid mailbox or the RESET command failed, fall back to 3055 * hitting the chip with a hammer. 3056 */ 3057 if (mbox <= PCIE_FW_MASTER_M) { 3058 t4_set_reg_field(adap, CIM_BOOT_CFG, UPCRST, 0); 3059 msleep(100); 3060 if (t4_fw_reset(adap, mbox, 3061 PIORST | PIORSTMODE) == 0) 3062 return 0; 3063 } 3064 3065 t4_write_reg(adap, PL_RST, PIORST | PIORSTMODE); 3066 msleep(2000); 3067 } else { 3068 int ms; 3069 3070 t4_set_reg_field(adap, CIM_BOOT_CFG, UPCRST, 0); 3071 for (ms = 0; ms < FW_CMD_MAX_TIMEOUT; ) { 3072 if (!(t4_read_reg(adap, PCIE_FW) & PCIE_FW_HALT_F)) 3073 return 0; 3074 msleep(100); 3075 ms += 100; 3076 } 3077 return -ETIMEDOUT; 3078 } 3079 return 0; 3080 } 3081 3082 /** 3083 * t4_fw_upgrade - perform all of the steps necessary to upgrade FW 3084 * @adap: the adapter 3085 * @mbox: mailbox to use for the FW RESET command (if desired) 3086 * @fw_data: the firmware image to write 3087 * @size: image size 3088 * @force: force upgrade even if firmware doesn't cooperate 3089 * 3090 * Perform all of the steps necessary for upgrading an adapter's 3091 * firmware image. Normally this requires the cooperation of the 3092 * existing firmware in order to halt all existing activities 3093 * but if an invalid mailbox token is passed in we skip that step 3094 * (though we'll still put the adapter microprocessor into RESET in 3095 * that case). 3096 * 3097 * On successful return the new firmware will have been loaded and 3098 * the adapter will have been fully RESET losing all previous setup 3099 * state. On unsuccessful return the adapter may be completely hosed ... 3100 * positive errno indicates that the adapter is ~probably~ intact, a 3101 * negative errno indicates that things are looking bad ... 3102 */ 3103 int t4_fw_upgrade(struct adapter *adap, unsigned int mbox, 3104 const u8 *fw_data, unsigned int size, int force) 3105 { 3106 const struct fw_hdr *fw_hdr = (const struct fw_hdr *)fw_data; 3107 int reset, ret; 3108 3109 if (!t4_fw_matches_chip(adap, fw_hdr)) 3110 return -EINVAL; 3111 3112 ret = t4_fw_halt(adap, mbox, force); 3113 if (ret < 0 && !force) 3114 return ret; 3115 3116 ret = t4_load_fw(adap, fw_data, size); 3117 if (ret < 0) 3118 return ret; 3119 3120 /* 3121 * Older versions of the firmware don't understand the new 3122 * PCIE_FW.HALT flag and so won't know to perform a RESET when they 3123 * restart. So for newly loaded older firmware we'll have to do the 3124 * RESET for it so it starts up on a clean slate. We can tell if 3125 * the newly loaded firmware will handle this right by checking 3126 * its header flags to see if it advertises the capability. 3127 */ 3128 reset = ((ntohl(fw_hdr->flags) & FW_HDR_FLAGS_RESET_HALT) == 0); 3129 return t4_fw_restart(adap, mbox, reset); 3130 } 3131 3132 /** 3133 * t4_fixup_host_params - fix up host-dependent parameters 3134 * @adap: the adapter 3135 * @page_size: the host's Base Page Size 3136 * @cache_line_size: the host's Cache Line Size 3137 * 3138 * Various registers in T4 contain values which are dependent on the 3139 * host's Base Page and Cache Line Sizes. This function will fix all of 3140 * those registers with the appropriate values as passed in ... 3141 */ 3142 int t4_fixup_host_params(struct adapter *adap, unsigned int page_size, 3143 unsigned int cache_line_size) 3144 { 3145 unsigned int page_shift = fls(page_size) - 1; 3146 unsigned int sge_hps = page_shift - 10; 3147 unsigned int stat_len = cache_line_size > 64 ? 128 : 64; 3148 unsigned int fl_align = cache_line_size < 32 ? 32 : cache_line_size; 3149 unsigned int fl_align_log = fls(fl_align) - 1; 3150 3151 t4_write_reg(adap, SGE_HOST_PAGE_SIZE, 3152 HOSTPAGESIZEPF0(sge_hps) | 3153 HOSTPAGESIZEPF1(sge_hps) | 3154 HOSTPAGESIZEPF2(sge_hps) | 3155 HOSTPAGESIZEPF3(sge_hps) | 3156 HOSTPAGESIZEPF4(sge_hps) | 3157 HOSTPAGESIZEPF5(sge_hps) | 3158 HOSTPAGESIZEPF6(sge_hps) | 3159 HOSTPAGESIZEPF7(sge_hps)); 3160 3161 if (is_t4(adap->params.chip)) { 3162 t4_set_reg_field(adap, SGE_CONTROL, 3163 INGPADBOUNDARY_MASK | 3164 EGRSTATUSPAGESIZE_MASK, 3165 INGPADBOUNDARY(fl_align_log - 5) | 3166 EGRSTATUSPAGESIZE(stat_len != 64)); 3167 } else { 3168 /* T5 introduced the separation of the Free List Padding and 3169 * Packing Boundaries. Thus, we can select a smaller Padding 3170 * Boundary to avoid uselessly chewing up PCIe Link and Memory 3171 * Bandwidth, and use a Packing Boundary which is large enough 3172 * to avoid false sharing between CPUs, etc. 3173 * 3174 * For the PCI Link, the smaller the Padding Boundary the 3175 * better. For the Memory Controller, a smaller Padding 3176 * Boundary is better until we cross under the Memory Line 3177 * Size (the minimum unit of transfer to/from Memory). If we 3178 * have a Padding Boundary which is smaller than the Memory 3179 * Line Size, that'll involve a Read-Modify-Write cycle on the 3180 * Memory Controller which is never good. For T5 the smallest 3181 * Padding Boundary which we can select is 32 bytes which is 3182 * larger than any known Memory Controller Line Size so we'll 3183 * use that. 3184 * 3185 * T5 has a different interpretation of the "0" value for the 3186 * Packing Boundary. This corresponds to 16 bytes instead of 3187 * the expected 32 bytes. We never have a Packing Boundary 3188 * less than 32 bytes so we can't use that special value but 3189 * on the other hand, if we wanted 32 bytes, the best we can 3190 * really do is 64 bytes. 3191 */ 3192 if (fl_align <= 32) { 3193 fl_align = 64; 3194 fl_align_log = 6; 3195 } 3196 t4_set_reg_field(adap, SGE_CONTROL, 3197 INGPADBOUNDARY_MASK | 3198 EGRSTATUSPAGESIZE_MASK, 3199 INGPADBOUNDARY(INGPCIEBOUNDARY_32B_X) | 3200 EGRSTATUSPAGESIZE(stat_len != 64)); 3201 t4_set_reg_field(adap, SGE_CONTROL2_A, 3202 INGPACKBOUNDARY_V(INGPACKBOUNDARY_M), 3203 INGPACKBOUNDARY_V(fl_align_log - 3204 INGPACKBOUNDARY_SHIFT_X)); 3205 } 3206 /* 3207 * Adjust various SGE Free List Host Buffer Sizes. 3208 * 3209 * This is something of a crock since we're using fixed indices into 3210 * the array which are also known by the sge.c code and the T4 3211 * Firmware Configuration File. We need to come up with a much better 3212 * approach to managing this array. For now, the first four entries 3213 * are: 3214 * 3215 * 0: Host Page Size 3216 * 1: 64KB 3217 * 2: Buffer size corresponding to 1500 byte MTU (unpacked mode) 3218 * 3: Buffer size corresponding to 9000 byte MTU (unpacked mode) 3219 * 3220 * For the single-MTU buffers in unpacked mode we need to include 3221 * space for the SGE Control Packet Shift, 14 byte Ethernet header, 3222 * possible 4 byte VLAN tag, all rounded up to the next Ingress Packet 3223 * Padding boundry. All of these are accommodated in the Factory 3224 * Default Firmware Configuration File but we need to adjust it for 3225 * this host's cache line size. 3226 */ 3227 t4_write_reg(adap, SGE_FL_BUFFER_SIZE0, page_size); 3228 t4_write_reg(adap, SGE_FL_BUFFER_SIZE2, 3229 (t4_read_reg(adap, SGE_FL_BUFFER_SIZE2) + fl_align-1) 3230 & ~(fl_align-1)); 3231 t4_write_reg(adap, SGE_FL_BUFFER_SIZE3, 3232 (t4_read_reg(adap, SGE_FL_BUFFER_SIZE3) + fl_align-1) 3233 & ~(fl_align-1)); 3234 3235 t4_write_reg(adap, ULP_RX_TDDP_PSZ, HPZ0(page_shift - 12)); 3236 3237 return 0; 3238 } 3239 3240 /** 3241 * t4_fw_initialize - ask FW to initialize the device 3242 * @adap: the adapter 3243 * @mbox: mailbox to use for the FW command 3244 * 3245 * Issues a command to FW to partially initialize the device. This 3246 * performs initialization that generally doesn't depend on user input. 3247 */ 3248 int t4_fw_initialize(struct adapter *adap, unsigned int mbox) 3249 { 3250 struct fw_initialize_cmd c; 3251 3252 memset(&c, 0, sizeof(c)); 3253 INIT_CMD(c, INITIALIZE, WRITE); 3254 return t4_wr_mbox(adap, mbox, &c, sizeof(c), NULL); 3255 } 3256 3257 /** 3258 * t4_query_params - query FW or device parameters 3259 * @adap: the adapter 3260 * @mbox: mailbox to use for the FW command 3261 * @pf: the PF 3262 * @vf: the VF 3263 * @nparams: the number of parameters 3264 * @params: the parameter names 3265 * @val: the parameter values 3266 * 3267 * Reads the value of FW or device parameters. Up to 7 parameters can be 3268 * queried at once. 3269 */ 3270 int t4_query_params(struct adapter *adap, unsigned int mbox, unsigned int pf, 3271 unsigned int vf, unsigned int nparams, const u32 *params, 3272 u32 *val) 3273 { 3274 int i, ret; 3275 struct fw_params_cmd c; 3276 __be32 *p = &c.param[0].mnem; 3277 3278 if (nparams > 7) 3279 return -EINVAL; 3280 3281 memset(&c, 0, sizeof(c)); 3282 c.op_to_vfn = htonl(FW_CMD_OP_V(FW_PARAMS_CMD) | FW_CMD_REQUEST_F | 3283 FW_CMD_READ_F | FW_PARAMS_CMD_PFN_V(pf) | 3284 FW_PARAMS_CMD_VFN_V(vf)); 3285 c.retval_len16 = htonl(FW_LEN16(c)); 3286 for (i = 0; i < nparams; i++, p += 2) 3287 *p = htonl(*params++); 3288 3289 ret = t4_wr_mbox(adap, mbox, &c, sizeof(c), &c); 3290 if (ret == 0) 3291 for (i = 0, p = &c.param[0].val; i < nparams; i++, p += 2) 3292 *val++ = ntohl(*p); 3293 return ret; 3294 } 3295 3296 /** 3297 * t4_set_params_nosleep - sets FW or device parameters 3298 * @adap: the adapter 3299 * @mbox: mailbox to use for the FW command 3300 * @pf: the PF 3301 * @vf: the VF 3302 * @nparams: the number of parameters 3303 * @params: the parameter names 3304 * @val: the parameter values 3305 * 3306 * Does not ever sleep 3307 * Sets the value of FW or device parameters. Up to 7 parameters can be 3308 * specified at once. 3309 */ 3310 int t4_set_params_nosleep(struct adapter *adap, unsigned int mbox, 3311 unsigned int pf, unsigned int vf, 3312 unsigned int nparams, const u32 *params, 3313 const u32 *val) 3314 { 3315 struct fw_params_cmd c; 3316 __be32 *p = &c.param[0].mnem; 3317 3318 if (nparams > 7) 3319 return -EINVAL; 3320 3321 memset(&c, 0, sizeof(c)); 3322 c.op_to_vfn = cpu_to_be32(FW_CMD_OP_V(FW_PARAMS_CMD) | 3323 FW_CMD_REQUEST_F | FW_CMD_WRITE_F | 3324 FW_PARAMS_CMD_PFN_V(pf) | 3325 FW_PARAMS_CMD_VFN_V(vf)); 3326 c.retval_len16 = cpu_to_be32(FW_LEN16(c)); 3327 3328 while (nparams--) { 3329 *p++ = cpu_to_be32(*params++); 3330 *p++ = cpu_to_be32(*val++); 3331 } 3332 3333 return t4_wr_mbox_ns(adap, mbox, &c, sizeof(c), NULL); 3334 } 3335 3336 /** 3337 * t4_set_params - sets FW or device parameters 3338 * @adap: the adapter 3339 * @mbox: mailbox to use for the FW command 3340 * @pf: the PF 3341 * @vf: the VF 3342 * @nparams: the number of parameters 3343 * @params: the parameter names 3344 * @val: the parameter values 3345 * 3346 * Sets the value of FW or device parameters. Up to 7 parameters can be 3347 * specified at once. 3348 */ 3349 int t4_set_params(struct adapter *adap, unsigned int mbox, unsigned int pf, 3350 unsigned int vf, unsigned int nparams, const u32 *params, 3351 const u32 *val) 3352 { 3353 struct fw_params_cmd c; 3354 __be32 *p = &c.param[0].mnem; 3355 3356 if (nparams > 7) 3357 return -EINVAL; 3358 3359 memset(&c, 0, sizeof(c)); 3360 c.op_to_vfn = htonl(FW_CMD_OP_V(FW_PARAMS_CMD) | FW_CMD_REQUEST_F | 3361 FW_CMD_WRITE_F | FW_PARAMS_CMD_PFN_V(pf) | 3362 FW_PARAMS_CMD_VFN_V(vf)); 3363 c.retval_len16 = htonl(FW_LEN16(c)); 3364 while (nparams--) { 3365 *p++ = htonl(*params++); 3366 *p++ = htonl(*val++); 3367 } 3368 3369 return t4_wr_mbox(adap, mbox, &c, sizeof(c), NULL); 3370 } 3371 3372 /** 3373 * t4_cfg_pfvf - configure PF/VF resource limits 3374 * @adap: the adapter 3375 * @mbox: mailbox to use for the FW command 3376 * @pf: the PF being configured 3377 * @vf: the VF being configured 3378 * @txq: the max number of egress queues 3379 * @txq_eth_ctrl: the max number of egress Ethernet or control queues 3380 * @rxqi: the max number of interrupt-capable ingress queues 3381 * @rxq: the max number of interruptless ingress queues 3382 * @tc: the PCI traffic class 3383 * @vi: the max number of virtual interfaces 3384 * @cmask: the channel access rights mask for the PF/VF 3385 * @pmask: the port access rights mask for the PF/VF 3386 * @nexact: the maximum number of exact MPS filters 3387 * @rcaps: read capabilities 3388 * @wxcaps: write/execute capabilities 3389 * 3390 * Configures resource limits and capabilities for a physical or virtual 3391 * function. 3392 */ 3393 int t4_cfg_pfvf(struct adapter *adap, unsigned int mbox, unsigned int pf, 3394 unsigned int vf, unsigned int txq, unsigned int txq_eth_ctrl, 3395 unsigned int rxqi, unsigned int rxq, unsigned int tc, 3396 unsigned int vi, unsigned int cmask, unsigned int pmask, 3397 unsigned int nexact, unsigned int rcaps, unsigned int wxcaps) 3398 { 3399 struct fw_pfvf_cmd c; 3400 3401 memset(&c, 0, sizeof(c)); 3402 c.op_to_vfn = htonl(FW_CMD_OP_V(FW_PFVF_CMD) | FW_CMD_REQUEST_F | 3403 FW_CMD_WRITE_F | FW_PFVF_CMD_PFN_V(pf) | 3404 FW_PFVF_CMD_VFN_V(vf)); 3405 c.retval_len16 = htonl(FW_LEN16(c)); 3406 c.niqflint_niq = htonl(FW_PFVF_CMD_NIQFLINT_V(rxqi) | 3407 FW_PFVF_CMD_NIQ_V(rxq)); 3408 c.type_to_neq = htonl(FW_PFVF_CMD_CMASK_V(cmask) | 3409 FW_PFVF_CMD_PMASK_V(pmask) | 3410 FW_PFVF_CMD_NEQ_V(txq)); 3411 c.tc_to_nexactf = htonl(FW_PFVF_CMD_TC_V(tc) | FW_PFVF_CMD_NVI_V(vi) | 3412 FW_PFVF_CMD_NEXACTF_V(nexact)); 3413 c.r_caps_to_nethctrl = htonl(FW_PFVF_CMD_R_CAPS_V(rcaps) | 3414 FW_PFVF_CMD_WX_CAPS_V(wxcaps) | 3415 FW_PFVF_CMD_NETHCTRL_V(txq_eth_ctrl)); 3416 return t4_wr_mbox(adap, mbox, &c, sizeof(c), NULL); 3417 } 3418 3419 /** 3420 * t4_alloc_vi - allocate a virtual interface 3421 * @adap: the adapter 3422 * @mbox: mailbox to use for the FW command 3423 * @port: physical port associated with the VI 3424 * @pf: the PF owning the VI 3425 * @vf: the VF owning the VI 3426 * @nmac: number of MAC addresses needed (1 to 5) 3427 * @mac: the MAC addresses of the VI 3428 * @rss_size: size of RSS table slice associated with this VI 3429 * 3430 * Allocates a virtual interface for the given physical port. If @mac is 3431 * not %NULL it contains the MAC addresses of the VI as assigned by FW. 3432 * @mac should be large enough to hold @nmac Ethernet addresses, they are 3433 * stored consecutively so the space needed is @nmac * 6 bytes. 3434 * Returns a negative error number or the non-negative VI id. 3435 */ 3436 int t4_alloc_vi(struct adapter *adap, unsigned int mbox, unsigned int port, 3437 unsigned int pf, unsigned int vf, unsigned int nmac, u8 *mac, 3438 unsigned int *rss_size) 3439 { 3440 int ret; 3441 struct fw_vi_cmd c; 3442 3443 memset(&c, 0, sizeof(c)); 3444 c.op_to_vfn = htonl(FW_CMD_OP_V(FW_VI_CMD) | FW_CMD_REQUEST_F | 3445 FW_CMD_WRITE_F | FW_CMD_EXEC_F | 3446 FW_VI_CMD_PFN_V(pf) | FW_VI_CMD_VFN_V(vf)); 3447 c.alloc_to_len16 = htonl(FW_VI_CMD_ALLOC_F | FW_LEN16(c)); 3448 c.portid_pkd = FW_VI_CMD_PORTID_V(port); 3449 c.nmac = nmac - 1; 3450 3451 ret = t4_wr_mbox(adap, mbox, &c, sizeof(c), &c); 3452 if (ret) 3453 return ret; 3454 3455 if (mac) { 3456 memcpy(mac, c.mac, sizeof(c.mac)); 3457 switch (nmac) { 3458 case 5: 3459 memcpy(mac + 24, c.nmac3, sizeof(c.nmac3)); 3460 case 4: 3461 memcpy(mac + 18, c.nmac2, sizeof(c.nmac2)); 3462 case 3: 3463 memcpy(mac + 12, c.nmac1, sizeof(c.nmac1)); 3464 case 2: 3465 memcpy(mac + 6, c.nmac0, sizeof(c.nmac0)); 3466 } 3467 } 3468 if (rss_size) 3469 *rss_size = FW_VI_CMD_RSSSIZE_G(ntohs(c.rsssize_pkd)); 3470 return FW_VI_CMD_VIID_G(ntohs(c.type_viid)); 3471 } 3472 3473 /** 3474 * t4_set_rxmode - set Rx properties of a virtual interface 3475 * @adap: the adapter 3476 * @mbox: mailbox to use for the FW command 3477 * @viid: the VI id 3478 * @mtu: the new MTU or -1 3479 * @promisc: 1 to enable promiscuous mode, 0 to disable it, -1 no change 3480 * @all_multi: 1 to enable all-multi mode, 0 to disable it, -1 no change 3481 * @bcast: 1 to enable broadcast Rx, 0 to disable it, -1 no change 3482 * @vlanex: 1 to enable HW VLAN extraction, 0 to disable it, -1 no change 3483 * @sleep_ok: if true we may sleep while awaiting command completion 3484 * 3485 * Sets Rx properties of a virtual interface. 3486 */ 3487 int t4_set_rxmode(struct adapter *adap, unsigned int mbox, unsigned int viid, 3488 int mtu, int promisc, int all_multi, int bcast, int vlanex, 3489 bool sleep_ok) 3490 { 3491 struct fw_vi_rxmode_cmd c; 3492 3493 /* convert to FW values */ 3494 if (mtu < 0) 3495 mtu = FW_RXMODE_MTU_NO_CHG; 3496 if (promisc < 0) 3497 promisc = FW_VI_RXMODE_CMD_PROMISCEN_M; 3498 if (all_multi < 0) 3499 all_multi = FW_VI_RXMODE_CMD_ALLMULTIEN_M; 3500 if (bcast < 0) 3501 bcast = FW_VI_RXMODE_CMD_BROADCASTEN_M; 3502 if (vlanex < 0) 3503 vlanex = FW_VI_RXMODE_CMD_VLANEXEN_M; 3504 3505 memset(&c, 0, sizeof(c)); 3506 c.op_to_viid = htonl(FW_CMD_OP_V(FW_VI_RXMODE_CMD) | FW_CMD_REQUEST_F | 3507 FW_CMD_WRITE_F | FW_VI_RXMODE_CMD_VIID_V(viid)); 3508 c.retval_len16 = htonl(FW_LEN16(c)); 3509 c.mtu_to_vlanexen = htonl(FW_VI_RXMODE_CMD_MTU_V(mtu) | 3510 FW_VI_RXMODE_CMD_PROMISCEN_V(promisc) | 3511 FW_VI_RXMODE_CMD_ALLMULTIEN_V(all_multi) | 3512 FW_VI_RXMODE_CMD_BROADCASTEN_V(bcast) | 3513 FW_VI_RXMODE_CMD_VLANEXEN_V(vlanex)); 3514 return t4_wr_mbox_meat(adap, mbox, &c, sizeof(c), NULL, sleep_ok); 3515 } 3516 3517 /** 3518 * t4_alloc_mac_filt - allocates exact-match filters for MAC addresses 3519 * @adap: the adapter 3520 * @mbox: mailbox to use for the FW command 3521 * @viid: the VI id 3522 * @free: if true any existing filters for this VI id are first removed 3523 * @naddr: the number of MAC addresses to allocate filters for (up to 7) 3524 * @addr: the MAC address(es) 3525 * @idx: where to store the index of each allocated filter 3526 * @hash: pointer to hash address filter bitmap 3527 * @sleep_ok: call is allowed to sleep 3528 * 3529 * Allocates an exact-match filter for each of the supplied addresses and 3530 * sets it to the corresponding address. If @idx is not %NULL it should 3531 * have at least @naddr entries, each of which will be set to the index of 3532 * the filter allocated for the corresponding MAC address. If a filter 3533 * could not be allocated for an address its index is set to 0xffff. 3534 * If @hash is not %NULL addresses that fail to allocate an exact filter 3535 * are hashed and update the hash filter bitmap pointed at by @hash. 3536 * 3537 * Returns a negative error number or the number of filters allocated. 3538 */ 3539 int t4_alloc_mac_filt(struct adapter *adap, unsigned int mbox, 3540 unsigned int viid, bool free, unsigned int naddr, 3541 const u8 **addr, u16 *idx, u64 *hash, bool sleep_ok) 3542 { 3543 int i, ret; 3544 struct fw_vi_mac_cmd c; 3545 struct fw_vi_mac_exact *p; 3546 unsigned int max_naddr = is_t4(adap->params.chip) ? 3547 NUM_MPS_CLS_SRAM_L_INSTANCES : 3548 NUM_MPS_T5_CLS_SRAM_L_INSTANCES; 3549 3550 if (naddr > 7) 3551 return -EINVAL; 3552 3553 memset(&c, 0, sizeof(c)); 3554 c.op_to_viid = htonl(FW_CMD_OP_V(FW_VI_MAC_CMD) | FW_CMD_REQUEST_F | 3555 FW_CMD_WRITE_F | (free ? FW_CMD_EXEC_F : 0) | 3556 FW_VI_MAC_CMD_VIID_V(viid)); 3557 c.freemacs_to_len16 = htonl(FW_VI_MAC_CMD_FREEMACS_V(free) | 3558 FW_CMD_LEN16_V((naddr + 2) / 2)); 3559 3560 for (i = 0, p = c.u.exact; i < naddr; i++, p++) { 3561 p->valid_to_idx = htons(FW_VI_MAC_CMD_VALID_F | 3562 FW_VI_MAC_CMD_IDX_V(FW_VI_MAC_ADD_MAC)); 3563 memcpy(p->macaddr, addr[i], sizeof(p->macaddr)); 3564 } 3565 3566 ret = t4_wr_mbox_meat(adap, mbox, &c, sizeof(c), &c, sleep_ok); 3567 if (ret) 3568 return ret; 3569 3570 for (i = 0, p = c.u.exact; i < naddr; i++, p++) { 3571 u16 index = FW_VI_MAC_CMD_IDX_G(ntohs(p->valid_to_idx)); 3572 3573 if (idx) 3574 idx[i] = index >= max_naddr ? 0xffff : index; 3575 if (index < max_naddr) 3576 ret++; 3577 else if (hash) 3578 *hash |= (1ULL << hash_mac_addr(addr[i])); 3579 } 3580 return ret; 3581 } 3582 3583 /** 3584 * t4_change_mac - modifies the exact-match filter for a MAC address 3585 * @adap: the adapter 3586 * @mbox: mailbox to use for the FW command 3587 * @viid: the VI id 3588 * @idx: index of existing filter for old value of MAC address, or -1 3589 * @addr: the new MAC address value 3590 * @persist: whether a new MAC allocation should be persistent 3591 * @add_smt: if true also add the address to the HW SMT 3592 * 3593 * Modifies an exact-match filter and sets it to the new MAC address. 3594 * Note that in general it is not possible to modify the value of a given 3595 * filter so the generic way to modify an address filter is to free the one 3596 * being used by the old address value and allocate a new filter for the 3597 * new address value. @idx can be -1 if the address is a new addition. 3598 * 3599 * Returns a negative error number or the index of the filter with the new 3600 * MAC value. 3601 */ 3602 int t4_change_mac(struct adapter *adap, unsigned int mbox, unsigned int viid, 3603 int idx, const u8 *addr, bool persist, bool add_smt) 3604 { 3605 int ret, mode; 3606 struct fw_vi_mac_cmd c; 3607 struct fw_vi_mac_exact *p = c.u.exact; 3608 unsigned int max_mac_addr = is_t4(adap->params.chip) ? 3609 NUM_MPS_CLS_SRAM_L_INSTANCES : 3610 NUM_MPS_T5_CLS_SRAM_L_INSTANCES; 3611 3612 if (idx < 0) /* new allocation */ 3613 idx = persist ? FW_VI_MAC_ADD_PERSIST_MAC : FW_VI_MAC_ADD_MAC; 3614 mode = add_smt ? FW_VI_MAC_SMT_AND_MPSTCAM : FW_VI_MAC_MPS_TCAM_ENTRY; 3615 3616 memset(&c, 0, sizeof(c)); 3617 c.op_to_viid = htonl(FW_CMD_OP_V(FW_VI_MAC_CMD) | FW_CMD_REQUEST_F | 3618 FW_CMD_WRITE_F | FW_VI_MAC_CMD_VIID_V(viid)); 3619 c.freemacs_to_len16 = htonl(FW_CMD_LEN16_V(1)); 3620 p->valid_to_idx = htons(FW_VI_MAC_CMD_VALID_F | 3621 FW_VI_MAC_CMD_SMAC_RESULT_V(mode) | 3622 FW_VI_MAC_CMD_IDX_V(idx)); 3623 memcpy(p->macaddr, addr, sizeof(p->macaddr)); 3624 3625 ret = t4_wr_mbox(adap, mbox, &c, sizeof(c), &c); 3626 if (ret == 0) { 3627 ret = FW_VI_MAC_CMD_IDX_G(ntohs(p->valid_to_idx)); 3628 if (ret >= max_mac_addr) 3629 ret = -ENOMEM; 3630 } 3631 return ret; 3632 } 3633 3634 /** 3635 * t4_set_addr_hash - program the MAC inexact-match hash filter 3636 * @adap: the adapter 3637 * @mbox: mailbox to use for the FW command 3638 * @viid: the VI id 3639 * @ucast: whether the hash filter should also match unicast addresses 3640 * @vec: the value to be written to the hash filter 3641 * @sleep_ok: call is allowed to sleep 3642 * 3643 * Sets the 64-bit inexact-match hash filter for a virtual interface. 3644 */ 3645 int t4_set_addr_hash(struct adapter *adap, unsigned int mbox, unsigned int viid, 3646 bool ucast, u64 vec, bool sleep_ok) 3647 { 3648 struct fw_vi_mac_cmd c; 3649 3650 memset(&c, 0, sizeof(c)); 3651 c.op_to_viid = htonl(FW_CMD_OP_V(FW_VI_MAC_CMD) | FW_CMD_REQUEST_F | 3652 FW_CMD_WRITE_F | FW_VI_ENABLE_CMD_VIID_V(viid)); 3653 c.freemacs_to_len16 = htonl(FW_VI_MAC_CMD_HASHVECEN_F | 3654 FW_VI_MAC_CMD_HASHUNIEN_V(ucast) | 3655 FW_CMD_LEN16_V(1)); 3656 c.u.hash.hashvec = cpu_to_be64(vec); 3657 return t4_wr_mbox_meat(adap, mbox, &c, sizeof(c), NULL, sleep_ok); 3658 } 3659 3660 /** 3661 * t4_enable_vi_params - enable/disable a virtual interface 3662 * @adap: the adapter 3663 * @mbox: mailbox to use for the FW command 3664 * @viid: the VI id 3665 * @rx_en: 1=enable Rx, 0=disable Rx 3666 * @tx_en: 1=enable Tx, 0=disable Tx 3667 * @dcb_en: 1=enable delivery of Data Center Bridging messages. 3668 * 3669 * Enables/disables a virtual interface. Note that setting DCB Enable 3670 * only makes sense when enabling a Virtual Interface ... 3671 */ 3672 int t4_enable_vi_params(struct adapter *adap, unsigned int mbox, 3673 unsigned int viid, bool rx_en, bool tx_en, bool dcb_en) 3674 { 3675 struct fw_vi_enable_cmd c; 3676 3677 memset(&c, 0, sizeof(c)); 3678 c.op_to_viid = htonl(FW_CMD_OP_V(FW_VI_ENABLE_CMD) | FW_CMD_REQUEST_F | 3679 FW_CMD_EXEC_F | FW_VI_ENABLE_CMD_VIID_V(viid)); 3680 3681 c.ien_to_len16 = htonl(FW_VI_ENABLE_CMD_IEN_V(rx_en) | 3682 FW_VI_ENABLE_CMD_EEN_V(tx_en) | FW_LEN16(c) | 3683 FW_VI_ENABLE_CMD_DCB_INFO_V(dcb_en)); 3684 return t4_wr_mbox_ns(adap, mbox, &c, sizeof(c), NULL); 3685 } 3686 3687 /** 3688 * t4_enable_vi - enable/disable a virtual interface 3689 * @adap: the adapter 3690 * @mbox: mailbox to use for the FW command 3691 * @viid: the VI id 3692 * @rx_en: 1=enable Rx, 0=disable Rx 3693 * @tx_en: 1=enable Tx, 0=disable Tx 3694 * 3695 * Enables/disables a virtual interface. 3696 */ 3697 int t4_enable_vi(struct adapter *adap, unsigned int mbox, unsigned int viid, 3698 bool rx_en, bool tx_en) 3699 { 3700 return t4_enable_vi_params(adap, mbox, viid, rx_en, tx_en, 0); 3701 } 3702 3703 /** 3704 * t4_identify_port - identify a VI's port by blinking its LED 3705 * @adap: the adapter 3706 * @mbox: mailbox to use for the FW command 3707 * @viid: the VI id 3708 * @nblinks: how many times to blink LED at 2.5 Hz 3709 * 3710 * Identifies a VI's port by blinking its LED. 3711 */ 3712 int t4_identify_port(struct adapter *adap, unsigned int mbox, unsigned int viid, 3713 unsigned int nblinks) 3714 { 3715 struct fw_vi_enable_cmd c; 3716 3717 memset(&c, 0, sizeof(c)); 3718 c.op_to_viid = htonl(FW_CMD_OP_V(FW_VI_ENABLE_CMD) | FW_CMD_REQUEST_F | 3719 FW_CMD_EXEC_F | FW_VI_ENABLE_CMD_VIID_V(viid)); 3720 c.ien_to_len16 = htonl(FW_VI_ENABLE_CMD_LED_F | FW_LEN16(c)); 3721 c.blinkdur = htons(nblinks); 3722 return t4_wr_mbox(adap, mbox, &c, sizeof(c), NULL); 3723 } 3724 3725 /** 3726 * t4_iq_free - free an ingress queue and its FLs 3727 * @adap: the adapter 3728 * @mbox: mailbox to use for the FW command 3729 * @pf: the PF owning the queues 3730 * @vf: the VF owning the queues 3731 * @iqtype: the ingress queue type 3732 * @iqid: ingress queue id 3733 * @fl0id: FL0 queue id or 0xffff if no attached FL0 3734 * @fl1id: FL1 queue id or 0xffff if no attached FL1 3735 * 3736 * Frees an ingress queue and its associated FLs, if any. 3737 */ 3738 int t4_iq_free(struct adapter *adap, unsigned int mbox, unsigned int pf, 3739 unsigned int vf, unsigned int iqtype, unsigned int iqid, 3740 unsigned int fl0id, unsigned int fl1id) 3741 { 3742 struct fw_iq_cmd c; 3743 3744 memset(&c, 0, sizeof(c)); 3745 c.op_to_vfn = htonl(FW_CMD_OP_V(FW_IQ_CMD) | FW_CMD_REQUEST_F | 3746 FW_CMD_EXEC_F | FW_IQ_CMD_PFN_V(pf) | 3747 FW_IQ_CMD_VFN_V(vf)); 3748 c.alloc_to_len16 = htonl(FW_IQ_CMD_FREE_F | FW_LEN16(c)); 3749 c.type_to_iqandstindex = htonl(FW_IQ_CMD_TYPE_V(iqtype)); 3750 c.iqid = htons(iqid); 3751 c.fl0id = htons(fl0id); 3752 c.fl1id = htons(fl1id); 3753 return t4_wr_mbox(adap, mbox, &c, sizeof(c), NULL); 3754 } 3755 3756 /** 3757 * t4_eth_eq_free - free an Ethernet egress queue 3758 * @adap: the adapter 3759 * @mbox: mailbox to use for the FW command 3760 * @pf: the PF owning the queue 3761 * @vf: the VF owning the queue 3762 * @eqid: egress queue id 3763 * 3764 * Frees an Ethernet egress queue. 3765 */ 3766 int t4_eth_eq_free(struct adapter *adap, unsigned int mbox, unsigned int pf, 3767 unsigned int vf, unsigned int eqid) 3768 { 3769 struct fw_eq_eth_cmd c; 3770 3771 memset(&c, 0, sizeof(c)); 3772 c.op_to_vfn = htonl(FW_CMD_OP_V(FW_EQ_ETH_CMD) | FW_CMD_REQUEST_F | 3773 FW_CMD_EXEC_F | FW_EQ_ETH_CMD_PFN_V(pf) | 3774 FW_EQ_ETH_CMD_VFN_V(vf)); 3775 c.alloc_to_len16 = htonl(FW_EQ_ETH_CMD_FREE_F | FW_LEN16(c)); 3776 c.eqid_pkd = htonl(FW_EQ_ETH_CMD_EQID_V(eqid)); 3777 return t4_wr_mbox(adap, mbox, &c, sizeof(c), NULL); 3778 } 3779 3780 /** 3781 * t4_ctrl_eq_free - free a control egress queue 3782 * @adap: the adapter 3783 * @mbox: mailbox to use for the FW command 3784 * @pf: the PF owning the queue 3785 * @vf: the VF owning the queue 3786 * @eqid: egress queue id 3787 * 3788 * Frees a control egress queue. 3789 */ 3790 int t4_ctrl_eq_free(struct adapter *adap, unsigned int mbox, unsigned int pf, 3791 unsigned int vf, unsigned int eqid) 3792 { 3793 struct fw_eq_ctrl_cmd c; 3794 3795 memset(&c, 0, sizeof(c)); 3796 c.op_to_vfn = htonl(FW_CMD_OP_V(FW_EQ_CTRL_CMD) | FW_CMD_REQUEST_F | 3797 FW_CMD_EXEC_F | FW_EQ_CTRL_CMD_PFN_V(pf) | 3798 FW_EQ_CTRL_CMD_VFN_V(vf)); 3799 c.alloc_to_len16 = htonl(FW_EQ_CTRL_CMD_FREE_F | FW_LEN16(c)); 3800 c.cmpliqid_eqid = htonl(FW_EQ_CTRL_CMD_EQID_V(eqid)); 3801 return t4_wr_mbox(adap, mbox, &c, sizeof(c), NULL); 3802 } 3803 3804 /** 3805 * t4_ofld_eq_free - free an offload egress queue 3806 * @adap: the adapter 3807 * @mbox: mailbox to use for the FW command 3808 * @pf: the PF owning the queue 3809 * @vf: the VF owning the queue 3810 * @eqid: egress queue id 3811 * 3812 * Frees a control egress queue. 3813 */ 3814 int t4_ofld_eq_free(struct adapter *adap, unsigned int mbox, unsigned int pf, 3815 unsigned int vf, unsigned int eqid) 3816 { 3817 struct fw_eq_ofld_cmd c; 3818 3819 memset(&c, 0, sizeof(c)); 3820 c.op_to_vfn = htonl(FW_CMD_OP_V(FW_EQ_OFLD_CMD) | FW_CMD_REQUEST_F | 3821 FW_CMD_EXEC_F | FW_EQ_OFLD_CMD_PFN_V(pf) | 3822 FW_EQ_OFLD_CMD_VFN_V(vf)); 3823 c.alloc_to_len16 = htonl(FW_EQ_OFLD_CMD_FREE_F | FW_LEN16(c)); 3824 c.eqid_pkd = htonl(FW_EQ_OFLD_CMD_EQID_V(eqid)); 3825 return t4_wr_mbox(adap, mbox, &c, sizeof(c), NULL); 3826 } 3827 3828 /** 3829 * t4_handle_fw_rpl - process a FW reply message 3830 * @adap: the adapter 3831 * @rpl: start of the FW message 3832 * 3833 * Processes a FW message, such as link state change messages. 3834 */ 3835 int t4_handle_fw_rpl(struct adapter *adap, const __be64 *rpl) 3836 { 3837 u8 opcode = *(const u8 *)rpl; 3838 3839 if (opcode == FW_PORT_CMD) { /* link/module state change message */ 3840 int speed = 0, fc = 0; 3841 const struct fw_port_cmd *p = (void *)rpl; 3842 int chan = FW_PORT_CMD_PORTID_G(ntohl(p->op_to_portid)); 3843 int port = adap->chan_map[chan]; 3844 struct port_info *pi = adap2pinfo(adap, port); 3845 struct link_config *lc = &pi->link_cfg; 3846 u32 stat = ntohl(p->u.info.lstatus_to_modtype); 3847 int link_ok = (stat & FW_PORT_CMD_LSTATUS_F) != 0; 3848 u32 mod = FW_PORT_CMD_MODTYPE_G(stat); 3849 3850 if (stat & FW_PORT_CMD_RXPAUSE_F) 3851 fc |= PAUSE_RX; 3852 if (stat & FW_PORT_CMD_TXPAUSE_F) 3853 fc |= PAUSE_TX; 3854 if (stat & FW_PORT_CMD_LSPEED_V(FW_PORT_CAP_SPEED_100M)) 3855 speed = 100; 3856 else if (stat & FW_PORT_CMD_LSPEED_V(FW_PORT_CAP_SPEED_1G)) 3857 speed = 1000; 3858 else if (stat & FW_PORT_CMD_LSPEED_V(FW_PORT_CAP_SPEED_10G)) 3859 speed = 10000; 3860 else if (stat & FW_PORT_CMD_LSPEED_V(FW_PORT_CAP_SPEED_40G)) 3861 speed = 40000; 3862 3863 if (link_ok != lc->link_ok || speed != lc->speed || 3864 fc != lc->fc) { /* something changed */ 3865 lc->link_ok = link_ok; 3866 lc->speed = speed; 3867 lc->fc = fc; 3868 lc->supported = be16_to_cpu(p->u.info.pcap); 3869 t4_os_link_changed(adap, port, link_ok); 3870 } 3871 if (mod != pi->mod_type) { 3872 pi->mod_type = mod; 3873 t4_os_portmod_changed(adap, port); 3874 } 3875 } 3876 return 0; 3877 } 3878 3879 static void get_pci_mode(struct adapter *adapter, struct pci_params *p) 3880 { 3881 u16 val; 3882 3883 if (pci_is_pcie(adapter->pdev)) { 3884 pcie_capability_read_word(adapter->pdev, PCI_EXP_LNKSTA, &val); 3885 p->speed = val & PCI_EXP_LNKSTA_CLS; 3886 p->width = (val & PCI_EXP_LNKSTA_NLW) >> 4; 3887 } 3888 } 3889 3890 /** 3891 * init_link_config - initialize a link's SW state 3892 * @lc: structure holding the link state 3893 * @caps: link capabilities 3894 * 3895 * Initializes the SW state maintained for each link, including the link's 3896 * capabilities and default speed/flow-control/autonegotiation settings. 3897 */ 3898 static void init_link_config(struct link_config *lc, unsigned int caps) 3899 { 3900 lc->supported = caps; 3901 lc->requested_speed = 0; 3902 lc->speed = 0; 3903 lc->requested_fc = lc->fc = PAUSE_RX | PAUSE_TX; 3904 if (lc->supported & FW_PORT_CAP_ANEG) { 3905 lc->advertising = lc->supported & ADVERT_MASK; 3906 lc->autoneg = AUTONEG_ENABLE; 3907 lc->requested_fc |= PAUSE_AUTONEG; 3908 } else { 3909 lc->advertising = 0; 3910 lc->autoneg = AUTONEG_DISABLE; 3911 } 3912 } 3913 3914 #define CIM_PF_NOACCESS 0xeeeeeeee 3915 3916 int t4_wait_dev_ready(void __iomem *regs) 3917 { 3918 u32 whoami; 3919 3920 whoami = readl(regs + PL_WHOAMI); 3921 if (whoami != 0xffffffff && whoami != CIM_PF_NOACCESS) 3922 return 0; 3923 3924 msleep(500); 3925 whoami = readl(regs + PL_WHOAMI); 3926 return (whoami != 0xffffffff && whoami != CIM_PF_NOACCESS ? 0 : -EIO); 3927 } 3928 3929 struct flash_desc { 3930 u32 vendor_and_model_id; 3931 u32 size_mb; 3932 }; 3933 3934 static int get_flash_params(struct adapter *adap) 3935 { 3936 /* Table for non-Numonix supported flash parts. Numonix parts are left 3937 * to the preexisting code. All flash parts have 64KB sectors. 3938 */ 3939 static struct flash_desc supported_flash[] = { 3940 { 0x150201, 4 << 20 }, /* Spansion 4MB S25FL032P */ 3941 }; 3942 3943 int ret; 3944 u32 info; 3945 3946 ret = sf1_write(adap, 1, 1, 0, SF_RD_ID); 3947 if (!ret) 3948 ret = sf1_read(adap, 3, 0, 1, &info); 3949 t4_write_reg(adap, SF_OP, 0); /* unlock SF */ 3950 if (ret) 3951 return ret; 3952 3953 for (ret = 0; ret < ARRAY_SIZE(supported_flash); ++ret) 3954 if (supported_flash[ret].vendor_and_model_id == info) { 3955 adap->params.sf_size = supported_flash[ret].size_mb; 3956 adap->params.sf_nsec = 3957 adap->params.sf_size / SF_SEC_SIZE; 3958 return 0; 3959 } 3960 3961 if ((info & 0xff) != 0x20) /* not a Numonix flash */ 3962 return -EINVAL; 3963 info >>= 16; /* log2 of size */ 3964 if (info >= 0x14 && info < 0x18) 3965 adap->params.sf_nsec = 1 << (info - 16); 3966 else if (info == 0x18) 3967 adap->params.sf_nsec = 64; 3968 else 3969 return -EINVAL; 3970 adap->params.sf_size = 1 << info; 3971 adap->params.sf_fw_start = 3972 t4_read_reg(adap, CIM_BOOT_CFG) & BOOTADDR_MASK; 3973 3974 if (adap->params.sf_size < FLASH_MIN_SIZE) 3975 dev_warn(adap->pdev_dev, "WARNING!!! FLASH size %#x < %#x!!!\n", 3976 adap->params.sf_size, FLASH_MIN_SIZE); 3977 return 0; 3978 } 3979 3980 /** 3981 * t4_prep_adapter - prepare SW and HW for operation 3982 * @adapter: the adapter 3983 * @reset: if true perform a HW reset 3984 * 3985 * Initialize adapter SW state for the various HW modules, set initial 3986 * values for some adapter tunables, take PHYs out of reset, and 3987 * initialize the MDIO interface. 3988 */ 3989 int t4_prep_adapter(struct adapter *adapter) 3990 { 3991 int ret, ver; 3992 uint16_t device_id; 3993 u32 pl_rev; 3994 3995 get_pci_mode(adapter, &adapter->params.pci); 3996 pl_rev = G_REV(t4_read_reg(adapter, PL_REV)); 3997 3998 ret = get_flash_params(adapter); 3999 if (ret < 0) { 4000 dev_err(adapter->pdev_dev, "error %d identifying flash\n", ret); 4001 return ret; 4002 } 4003 4004 /* Retrieve adapter's device ID 4005 */ 4006 pci_read_config_word(adapter->pdev, PCI_DEVICE_ID, &device_id); 4007 ver = device_id >> 12; 4008 adapter->params.chip = 0; 4009 switch (ver) { 4010 case CHELSIO_T4: 4011 adapter->params.chip |= CHELSIO_CHIP_CODE(CHELSIO_T4, pl_rev); 4012 break; 4013 case CHELSIO_T5: 4014 adapter->params.chip |= CHELSIO_CHIP_CODE(CHELSIO_T5, pl_rev); 4015 break; 4016 default: 4017 dev_err(adapter->pdev_dev, "Device %d is not supported\n", 4018 device_id); 4019 return -EINVAL; 4020 } 4021 4022 init_cong_ctrl(adapter->params.a_wnd, adapter->params.b_wnd); 4023 4024 /* 4025 * Default port for debugging in case we can't reach FW. 4026 */ 4027 adapter->params.nports = 1; 4028 adapter->params.portvec = 1; 4029 adapter->params.vpd.cclk = 50000; 4030 return 0; 4031 } 4032 4033 /** 4034 * cxgb4_t4_bar2_sge_qregs - return BAR2 SGE Queue register information 4035 * @adapter: the adapter 4036 * @qid: the Queue ID 4037 * @qtype: the Ingress or Egress type for @qid 4038 * @pbar2_qoffset: BAR2 Queue Offset 4039 * @pbar2_qid: BAR2 Queue ID or 0 for Queue ID inferred SGE Queues 4040 * 4041 * Returns the BAR2 SGE Queue Registers information associated with the 4042 * indicated Absolute Queue ID. These are passed back in return value 4043 * pointers. @qtype should be T4_BAR2_QTYPE_EGRESS for Egress Queue 4044 * and T4_BAR2_QTYPE_INGRESS for Ingress Queues. 4045 * 4046 * This may return an error which indicates that BAR2 SGE Queue 4047 * registers aren't available. If an error is not returned, then the 4048 * following values are returned: 4049 * 4050 * *@pbar2_qoffset: the BAR2 Offset of the @qid Registers 4051 * *@pbar2_qid: the BAR2 SGE Queue ID or 0 of @qid 4052 * 4053 * If the returned BAR2 Queue ID is 0, then BAR2 SGE registers which 4054 * require the "Inferred Queue ID" ability may be used. E.g. the 4055 * Write Combining Doorbell Buffer. If the BAR2 Queue ID is not 0, 4056 * then these "Inferred Queue ID" register may not be used. 4057 */ 4058 int cxgb4_t4_bar2_sge_qregs(struct adapter *adapter, 4059 unsigned int qid, 4060 enum t4_bar2_qtype qtype, 4061 u64 *pbar2_qoffset, 4062 unsigned int *pbar2_qid) 4063 { 4064 unsigned int page_shift, page_size, qpp_shift, qpp_mask; 4065 u64 bar2_page_offset, bar2_qoffset; 4066 unsigned int bar2_qid, bar2_qid_offset, bar2_qinferred; 4067 4068 /* T4 doesn't support BAR2 SGE Queue registers. 4069 */ 4070 if (is_t4(adapter->params.chip)) 4071 return -EINVAL; 4072 4073 /* Get our SGE Page Size parameters. 4074 */ 4075 page_shift = adapter->params.sge.hps + 10; 4076 page_size = 1 << page_shift; 4077 4078 /* Get the right Queues per Page parameters for our Queue. 4079 */ 4080 qpp_shift = (qtype == T4_BAR2_QTYPE_EGRESS 4081 ? adapter->params.sge.eq_qpp 4082 : adapter->params.sge.iq_qpp); 4083 qpp_mask = (1 << qpp_shift) - 1; 4084 4085 /* Calculate the basics of the BAR2 SGE Queue register area: 4086 * o The BAR2 page the Queue registers will be in. 4087 * o The BAR2 Queue ID. 4088 * o The BAR2 Queue ID Offset into the BAR2 page. 4089 */ 4090 bar2_page_offset = ((qid >> qpp_shift) << page_shift); 4091 bar2_qid = qid & qpp_mask; 4092 bar2_qid_offset = bar2_qid * SGE_UDB_SIZE; 4093 4094 /* If the BAR2 Queue ID Offset is less than the Page Size, then the 4095 * hardware will infer the Absolute Queue ID simply from the writes to 4096 * the BAR2 Queue ID Offset within the BAR2 Page (and we need to use a 4097 * BAR2 Queue ID of 0 for those writes). Otherwise, we'll simply 4098 * write to the first BAR2 SGE Queue Area within the BAR2 Page with 4099 * the BAR2 Queue ID and the hardware will infer the Absolute Queue ID 4100 * from the BAR2 Page and BAR2 Queue ID. 4101 * 4102 * One important censequence of this is that some BAR2 SGE registers 4103 * have a "Queue ID" field and we can write the BAR2 SGE Queue ID 4104 * there. But other registers synthesize the SGE Queue ID purely 4105 * from the writes to the registers -- the Write Combined Doorbell 4106 * Buffer is a good example. These BAR2 SGE Registers are only 4107 * available for those BAR2 SGE Register areas where the SGE Absolute 4108 * Queue ID can be inferred from simple writes. 4109 */ 4110 bar2_qoffset = bar2_page_offset; 4111 bar2_qinferred = (bar2_qid_offset < page_size); 4112 if (bar2_qinferred) { 4113 bar2_qoffset += bar2_qid_offset; 4114 bar2_qid = 0; 4115 } 4116 4117 *pbar2_qoffset = bar2_qoffset; 4118 *pbar2_qid = bar2_qid; 4119 return 0; 4120 } 4121 4122 /** 4123 * t4_init_sge_params - initialize adap->params.sge 4124 * @adapter: the adapter 4125 * 4126 * Initialize various fields of the adapter's SGE Parameters structure. 4127 */ 4128 int t4_init_sge_params(struct adapter *adapter) 4129 { 4130 struct sge_params *sge_params = &adapter->params.sge; 4131 u32 hps, qpp; 4132 unsigned int s_hps, s_qpp; 4133 4134 /* Extract the SGE Page Size for our PF. 4135 */ 4136 hps = t4_read_reg(adapter, SGE_HOST_PAGE_SIZE); 4137 s_hps = (HOSTPAGESIZEPF0_S + 4138 (HOSTPAGESIZEPF1_S - HOSTPAGESIZEPF0_S) * adapter->fn); 4139 sge_params->hps = ((hps >> s_hps) & HOSTPAGESIZEPF0_M); 4140 4141 /* Extract the SGE Egress and Ingess Queues Per Page for our PF. 4142 */ 4143 s_qpp = (QUEUESPERPAGEPF0_S + 4144 (QUEUESPERPAGEPF1_S - QUEUESPERPAGEPF0_S) * adapter->fn); 4145 qpp = t4_read_reg(adapter, SGE_EGRESS_QUEUES_PER_PAGE_PF); 4146 sge_params->eq_qpp = ((qpp >> s_qpp) & QUEUESPERPAGEPF0_MASK); 4147 qpp = t4_read_reg(adapter, SGE_INGRESS_QUEUES_PER_PAGE_PF); 4148 sge_params->iq_qpp = ((qpp >> s_qpp) & QUEUESPERPAGEPF0_MASK); 4149 4150 return 0; 4151 } 4152 4153 /** 4154 * t4_init_tp_params - initialize adap->params.tp 4155 * @adap: the adapter 4156 * 4157 * Initialize various fields of the adapter's TP Parameters structure. 4158 */ 4159 int t4_init_tp_params(struct adapter *adap) 4160 { 4161 int chan; 4162 u32 v; 4163 4164 v = t4_read_reg(adap, TP_TIMER_RESOLUTION); 4165 adap->params.tp.tre = TIMERRESOLUTION_GET(v); 4166 adap->params.tp.dack_re = DELAYEDACKRESOLUTION_GET(v); 4167 4168 /* MODQ_REQ_MAP defaults to setting queues 0-3 to chan 0-3 */ 4169 for (chan = 0; chan < NCHAN; chan++) 4170 adap->params.tp.tx_modq[chan] = chan; 4171 4172 /* Cache the adapter's Compressed Filter Mode and global Incress 4173 * Configuration. 4174 */ 4175 t4_read_indirect(adap, TP_PIO_ADDR, TP_PIO_DATA, 4176 &adap->params.tp.vlan_pri_map, 1, 4177 TP_VLAN_PRI_MAP); 4178 t4_read_indirect(adap, TP_PIO_ADDR, TP_PIO_DATA, 4179 &adap->params.tp.ingress_config, 1, 4180 TP_INGRESS_CONFIG); 4181 4182 /* Now that we have TP_VLAN_PRI_MAP cached, we can calculate the field 4183 * shift positions of several elements of the Compressed Filter Tuple 4184 * for this adapter which we need frequently ... 4185 */ 4186 adap->params.tp.vlan_shift = t4_filter_field_shift(adap, F_VLAN); 4187 adap->params.tp.vnic_shift = t4_filter_field_shift(adap, F_VNIC_ID); 4188 adap->params.tp.port_shift = t4_filter_field_shift(adap, F_PORT); 4189 adap->params.tp.protocol_shift = t4_filter_field_shift(adap, 4190 F_PROTOCOL); 4191 4192 /* If TP_INGRESS_CONFIG.VNID == 0, then TP_VLAN_PRI_MAP.VNIC_ID 4193 * represents the presense of an Outer VLAN instead of a VNIC ID. 4194 */ 4195 if ((adap->params.tp.ingress_config & F_VNIC) == 0) 4196 adap->params.tp.vnic_shift = -1; 4197 4198 return 0; 4199 } 4200 4201 /** 4202 * t4_filter_field_shift - calculate filter field shift 4203 * @adap: the adapter 4204 * @filter_sel: the desired field (from TP_VLAN_PRI_MAP bits) 4205 * 4206 * Return the shift position of a filter field within the Compressed 4207 * Filter Tuple. The filter field is specified via its selection bit 4208 * within TP_VLAN_PRI_MAL (filter mode). E.g. F_VLAN. 4209 */ 4210 int t4_filter_field_shift(const struct adapter *adap, int filter_sel) 4211 { 4212 unsigned int filter_mode = adap->params.tp.vlan_pri_map; 4213 unsigned int sel; 4214 int field_shift; 4215 4216 if ((filter_mode & filter_sel) == 0) 4217 return -1; 4218 4219 for (sel = 1, field_shift = 0; sel < filter_sel; sel <<= 1) { 4220 switch (filter_mode & sel) { 4221 case F_FCOE: 4222 field_shift += W_FT_FCOE; 4223 break; 4224 case F_PORT: 4225 field_shift += W_FT_PORT; 4226 break; 4227 case F_VNIC_ID: 4228 field_shift += W_FT_VNIC_ID; 4229 break; 4230 case F_VLAN: 4231 field_shift += W_FT_VLAN; 4232 break; 4233 case F_TOS: 4234 field_shift += W_FT_TOS; 4235 break; 4236 case F_PROTOCOL: 4237 field_shift += W_FT_PROTOCOL; 4238 break; 4239 case F_ETHERTYPE: 4240 field_shift += W_FT_ETHERTYPE; 4241 break; 4242 case F_MACMATCH: 4243 field_shift += W_FT_MACMATCH; 4244 break; 4245 case F_MPSHITTYPE: 4246 field_shift += W_FT_MPSHITTYPE; 4247 break; 4248 case F_FRAGMENTATION: 4249 field_shift += W_FT_FRAGMENTATION; 4250 break; 4251 } 4252 } 4253 return field_shift; 4254 } 4255 4256 int t4_port_init(struct adapter *adap, int mbox, int pf, int vf) 4257 { 4258 u8 addr[6]; 4259 int ret, i, j = 0; 4260 struct fw_port_cmd c; 4261 struct fw_rss_vi_config_cmd rvc; 4262 4263 memset(&c, 0, sizeof(c)); 4264 memset(&rvc, 0, sizeof(rvc)); 4265 4266 for_each_port(adap, i) { 4267 unsigned int rss_size; 4268 struct port_info *p = adap2pinfo(adap, i); 4269 4270 while ((adap->params.portvec & (1 << j)) == 0) 4271 j++; 4272 4273 c.op_to_portid = htonl(FW_CMD_OP_V(FW_PORT_CMD) | 4274 FW_CMD_REQUEST_F | FW_CMD_READ_F | 4275 FW_PORT_CMD_PORTID_V(j)); 4276 c.action_to_len16 = htonl( 4277 FW_PORT_CMD_ACTION_V(FW_PORT_ACTION_GET_PORT_INFO) | 4278 FW_LEN16(c)); 4279 ret = t4_wr_mbox(adap, mbox, &c, sizeof(c), &c); 4280 if (ret) 4281 return ret; 4282 4283 ret = t4_alloc_vi(adap, mbox, j, pf, vf, 1, addr, &rss_size); 4284 if (ret < 0) 4285 return ret; 4286 4287 p->viid = ret; 4288 p->tx_chan = j; 4289 p->lport = j; 4290 p->rss_size = rss_size; 4291 memcpy(adap->port[i]->dev_addr, addr, ETH_ALEN); 4292 adap->port[i]->dev_port = j; 4293 4294 ret = ntohl(c.u.info.lstatus_to_modtype); 4295 p->mdio_addr = (ret & FW_PORT_CMD_MDIOCAP_F) ? 4296 FW_PORT_CMD_MDIOADDR_G(ret) : -1; 4297 p->port_type = FW_PORT_CMD_PTYPE_G(ret); 4298 p->mod_type = FW_PORT_MOD_TYPE_NA; 4299 4300 rvc.op_to_viid = htonl(FW_CMD_OP_V(FW_RSS_VI_CONFIG_CMD) | 4301 FW_CMD_REQUEST_F | FW_CMD_READ_F | 4302 FW_RSS_VI_CONFIG_CMD_VIID(p->viid)); 4303 rvc.retval_len16 = htonl(FW_LEN16(rvc)); 4304 ret = t4_wr_mbox(adap, mbox, &rvc, sizeof(rvc), &rvc); 4305 if (ret) 4306 return ret; 4307 p->rss_mode = ntohl(rvc.u.basicvirtual.defaultq_to_udpen); 4308 4309 init_link_config(&p->link_cfg, ntohs(c.u.info.pcap)); 4310 j++; 4311 } 4312 return 0; 4313 } 4314