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