1 /* 2 * Copyright (c) 2006, 2007, 2008, 2009 QLogic Corporation. All rights reserved. 3 * Copyright (c) 2003, 2004, 2005, 2006 PathScale, Inc. All rights reserved. 4 * 5 * This software is available to you under a choice of one of two 6 * licenses. You may choose to be licensed under the terms of the GNU 7 * General Public License (GPL) Version 2, available from the file 8 * COPYING in the main directory of this source tree, or the 9 * OpenIB.org BSD license below: 10 * 11 * Redistribution and use in source and binary forms, with or 12 * without modification, are permitted provided that the following 13 * conditions are met: 14 * 15 * - Redistributions of source code must retain the above 16 * copyright notice, this list of conditions and the following 17 * disclaimer. 18 * 19 * - Redistributions in binary form must reproduce the above 20 * copyright notice, this list of conditions and the following 21 * disclaimer in the documentation and/or other materials 22 * provided with the distribution. 23 * 24 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 25 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 26 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 27 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 28 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 29 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 30 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 31 * SOFTWARE. 32 */ 33 34 #include <linux/delay.h> 35 #include <linux/pci.h> 36 #include <linux/vmalloc.h> 37 38 #include "qib.h" 39 #include "qib_qsfp.h" 40 41 /* 42 * QSFP support for ib_qib driver, using "Two Wire Serial Interface" driver 43 * in qib_twsi.c 44 */ 45 #define QSFP_MAX_RETRY 4 46 47 static int qsfp_read(struct qib_pportdata *ppd, int addr, void *bp, int len) 48 { 49 struct qib_devdata *dd = ppd->dd; 50 u32 out, mask; 51 int ret, cnt, pass = 0; 52 int stuck = 0; 53 u8 *buff = bp; 54 55 ret = mutex_lock_interruptible(&dd->eep_lock); 56 if (ret) 57 goto no_unlock; 58 59 if (dd->twsi_eeprom_dev == QIB_TWSI_NO_DEV) { 60 ret = -ENXIO; 61 goto bail; 62 } 63 64 /* 65 * We presume, if we are called at all, that this board has 66 * QSFP. This is on the same i2c chain as the legacy parts, 67 * but only responds if the module is selected via GPIO pins. 68 * Further, there are very long setup and hold requirements 69 * on MODSEL. 70 */ 71 mask = QSFP_GPIO_MOD_SEL_N | QSFP_GPIO_MOD_RST_N | QSFP_GPIO_LP_MODE; 72 out = QSFP_GPIO_MOD_RST_N | QSFP_GPIO_LP_MODE; 73 if (ppd->hw_pidx) { 74 mask <<= QSFP_GPIO_PORT2_SHIFT; 75 out <<= QSFP_GPIO_PORT2_SHIFT; 76 } 77 78 dd->f_gpio_mod(dd, out, mask, mask); 79 80 /* 81 * Module could take up to 2 Msec to respond to MOD_SEL, and there 82 * is no way to tell if it is ready, so we must wait. 83 */ 84 msleep(2); 85 86 /* Make sure TWSI bus is in sane state. */ 87 ret = qib_twsi_reset(dd); 88 if (ret) { 89 qib_dev_porterr(dd, ppd->port, 90 "QSFP interface Reset for read failed\n"); 91 ret = -EIO; 92 stuck = 1; 93 goto deselect; 94 } 95 96 /* All QSFP modules are at A0 */ 97 98 cnt = 0; 99 while (cnt < len) { 100 unsigned in_page; 101 int wlen = len - cnt; 102 in_page = addr % QSFP_PAGESIZE; 103 if ((in_page + wlen) > QSFP_PAGESIZE) 104 wlen = QSFP_PAGESIZE - in_page; 105 ret = qib_twsi_blk_rd(dd, QSFP_DEV, addr, buff + cnt, wlen); 106 /* Some QSFP's fail first try. Retry as experiment */ 107 if (ret && cnt == 0 && ++pass < QSFP_MAX_RETRY) 108 continue; 109 if (ret) { 110 /* qib_twsi_blk_rd() 1 for error, else 0 */ 111 ret = -EIO; 112 goto deselect; 113 } 114 addr += wlen; 115 cnt += wlen; 116 } 117 ret = cnt; 118 119 deselect: 120 /* 121 * Module could take up to 10 uSec after transfer before 122 * ready to respond to MOD_SEL negation, and there is no way 123 * to tell if it is ready, so we must wait. 124 */ 125 udelay(10); 126 /* set QSFP MODSEL, RST. LP all high */ 127 dd->f_gpio_mod(dd, mask, mask, mask); 128 129 /* 130 * Module could take up to 2 Msec to respond to MOD_SEL 131 * going away, and there is no way to tell if it is ready. 132 * so we must wait. 133 */ 134 if (stuck) 135 qib_dev_err(dd, "QSFP interface bus stuck non-idle\n"); 136 137 if (pass >= QSFP_MAX_RETRY && ret) 138 qib_dev_porterr(dd, ppd->port, "QSFP failed even retrying\n"); 139 else if (pass) 140 qib_dev_porterr(dd, ppd->port, "QSFP retries: %d\n", pass); 141 142 msleep(2); 143 144 bail: 145 mutex_unlock(&dd->eep_lock); 146 147 no_unlock: 148 return ret; 149 } 150 151 /* 152 * qsfp_write 153 * We do not ordinarily write the QSFP, but this is needed to select 154 * the page on non-flat QSFPs, and possibly later unusual cases 155 */ 156 static int qib_qsfp_write(struct qib_pportdata *ppd, int addr, void *bp, 157 int len) 158 { 159 struct qib_devdata *dd = ppd->dd; 160 u32 out, mask; 161 int ret, cnt; 162 u8 *buff = bp; 163 164 ret = mutex_lock_interruptible(&dd->eep_lock); 165 if (ret) 166 goto no_unlock; 167 168 if (dd->twsi_eeprom_dev == QIB_TWSI_NO_DEV) { 169 ret = -ENXIO; 170 goto bail; 171 } 172 173 /* 174 * We presume, if we are called at all, that this board has 175 * QSFP. This is on the same i2c chain as the legacy parts, 176 * but only responds if the module is selected via GPIO pins. 177 * Further, there are very long setup and hold requirements 178 * on MODSEL. 179 */ 180 mask = QSFP_GPIO_MOD_SEL_N | QSFP_GPIO_MOD_RST_N | QSFP_GPIO_LP_MODE; 181 out = QSFP_GPIO_MOD_RST_N | QSFP_GPIO_LP_MODE; 182 if (ppd->hw_pidx) { 183 mask <<= QSFP_GPIO_PORT2_SHIFT; 184 out <<= QSFP_GPIO_PORT2_SHIFT; 185 } 186 dd->f_gpio_mod(dd, out, mask, mask); 187 188 /* 189 * Module could take up to 2 Msec to respond to MOD_SEL, 190 * and there is no way to tell if it is ready, so we must wait. 191 */ 192 msleep(2); 193 194 /* Make sure TWSI bus is in sane state. */ 195 ret = qib_twsi_reset(dd); 196 if (ret) { 197 qib_dev_porterr(dd, ppd->port, 198 "QSFP interface Reset for write failed\n"); 199 ret = -EIO; 200 goto deselect; 201 } 202 203 /* All QSFP modules are at A0 */ 204 205 cnt = 0; 206 while (cnt < len) { 207 unsigned in_page; 208 int wlen = len - cnt; 209 in_page = addr % QSFP_PAGESIZE; 210 if ((in_page + wlen) > QSFP_PAGESIZE) 211 wlen = QSFP_PAGESIZE - in_page; 212 ret = qib_twsi_blk_wr(dd, QSFP_DEV, addr, buff + cnt, wlen); 213 if (ret) { 214 /* qib_twsi_blk_wr() 1 for error, else 0 */ 215 ret = -EIO; 216 goto deselect; 217 } 218 addr += wlen; 219 cnt += wlen; 220 } 221 ret = cnt; 222 223 deselect: 224 /* 225 * Module could take up to 10 uSec after transfer before 226 * ready to respond to MOD_SEL negation, and there is no way 227 * to tell if it is ready, so we must wait. 228 */ 229 udelay(10); 230 /* set QSFP MODSEL, RST, LP high */ 231 dd->f_gpio_mod(dd, mask, mask, mask); 232 /* 233 * Module could take up to 2 Msec to respond to MOD_SEL 234 * going away, and there is no way to tell if it is ready. 235 * so we must wait. 236 */ 237 msleep(2); 238 239 bail: 240 mutex_unlock(&dd->eep_lock); 241 242 no_unlock: 243 return ret; 244 } 245 246 /* 247 * For validation, we want to check the checksums, even of the 248 * fields we do not otherwise use. This function reads the bytes from 249 * <first> to <next-1> and returns the 8lsbs of the sum, or <0 for errors 250 */ 251 static int qsfp_cks(struct qib_pportdata *ppd, int first, int next) 252 { 253 int ret; 254 u16 cks; 255 u8 bval; 256 257 cks = 0; 258 while (first < next) { 259 ret = qsfp_read(ppd, first, &bval, 1); 260 if (ret < 0) 261 goto bail; 262 cks += bval; 263 ++first; 264 } 265 ret = cks & 0xFF; 266 bail: 267 return ret; 268 269 } 270 271 int qib_refresh_qsfp_cache(struct qib_pportdata *ppd, struct qib_qsfp_cache *cp) 272 { 273 int ret; 274 int idx; 275 u16 cks; 276 u32 mask; 277 u8 peek[4]; 278 279 /* ensure sane contents on invalid reads, for cable swaps */ 280 memset(cp, 0, sizeof(*cp)); 281 282 mask = QSFP_GPIO_MOD_PRS_N; 283 if (ppd->hw_pidx) 284 mask <<= QSFP_GPIO_PORT2_SHIFT; 285 286 ret = ppd->dd->f_gpio_mod(ppd->dd, 0, 0, 0); 287 if (ret & mask) { 288 ret = -ENODEV; 289 goto bail; 290 } 291 292 ret = qsfp_read(ppd, 0, peek, 3); 293 if (ret < 0) 294 goto bail; 295 if ((peek[0] & 0xFE) != 0x0C) 296 qib_dev_porterr(ppd->dd, ppd->port, 297 "QSFP byte0 is 0x%02X, S/B 0x0C/D\n", peek[0]); 298 299 if ((peek[2] & 2) == 0) { 300 /* 301 * If cable is paged, rather than "flat memory", we need to 302 * set the page to zero, Even if it already appears to be zero. 303 */ 304 u8 poke = 0; 305 ret = qib_qsfp_write(ppd, 127, &poke, 1); 306 udelay(50); 307 if (ret != 1) { 308 qib_dev_porterr(ppd->dd, ppd->port, 309 "Failed QSFP Page set\n"); 310 goto bail; 311 } 312 } 313 314 ret = qsfp_read(ppd, QSFP_MOD_ID_OFFS, &cp->id, 1); 315 if (ret < 0) 316 goto bail; 317 if ((cp->id & 0xFE) != 0x0C) 318 qib_dev_porterr(ppd->dd, ppd->port, 319 "QSFP ID byte is 0x%02X, S/B 0x0C/D\n", cp->id); 320 cks = cp->id; 321 322 ret = qsfp_read(ppd, QSFP_MOD_PWR_OFFS, &cp->pwr, 1); 323 if (ret < 0) 324 goto bail; 325 cks += cp->pwr; 326 327 ret = qsfp_cks(ppd, QSFP_MOD_PWR_OFFS + 1, QSFP_MOD_LEN_OFFS); 328 if (ret < 0) 329 goto bail; 330 cks += ret; 331 332 ret = qsfp_read(ppd, QSFP_MOD_LEN_OFFS, &cp->len, 1); 333 if (ret < 0) 334 goto bail; 335 cks += cp->len; 336 337 ret = qsfp_read(ppd, QSFP_MOD_TECH_OFFS, &cp->tech, 1); 338 if (ret < 0) 339 goto bail; 340 cks += cp->tech; 341 342 ret = qsfp_read(ppd, QSFP_VEND_OFFS, &cp->vendor, QSFP_VEND_LEN); 343 if (ret < 0) 344 goto bail; 345 for (idx = 0; idx < QSFP_VEND_LEN; ++idx) 346 cks += cp->vendor[idx]; 347 348 ret = qsfp_read(ppd, QSFP_IBXCV_OFFS, &cp->xt_xcv, 1); 349 if (ret < 0) 350 goto bail; 351 cks += cp->xt_xcv; 352 353 ret = qsfp_read(ppd, QSFP_VOUI_OFFS, &cp->oui, QSFP_VOUI_LEN); 354 if (ret < 0) 355 goto bail; 356 for (idx = 0; idx < QSFP_VOUI_LEN; ++idx) 357 cks += cp->oui[idx]; 358 359 ret = qsfp_read(ppd, QSFP_PN_OFFS, &cp->partnum, QSFP_PN_LEN); 360 if (ret < 0) 361 goto bail; 362 for (idx = 0; idx < QSFP_PN_LEN; ++idx) 363 cks += cp->partnum[idx]; 364 365 ret = qsfp_read(ppd, QSFP_REV_OFFS, &cp->rev, QSFP_REV_LEN); 366 if (ret < 0) 367 goto bail; 368 for (idx = 0; idx < QSFP_REV_LEN; ++idx) 369 cks += cp->rev[idx]; 370 371 ret = qsfp_read(ppd, QSFP_ATTEN_OFFS, &cp->atten, QSFP_ATTEN_LEN); 372 if (ret < 0) 373 goto bail; 374 for (idx = 0; idx < QSFP_ATTEN_LEN; ++idx) 375 cks += cp->atten[idx]; 376 377 ret = qsfp_cks(ppd, QSFP_ATTEN_OFFS + QSFP_ATTEN_LEN, QSFP_CC_OFFS); 378 if (ret < 0) 379 goto bail; 380 cks += ret; 381 382 cks &= 0xFF; 383 ret = qsfp_read(ppd, QSFP_CC_OFFS, &cp->cks1, 1); 384 if (ret < 0) 385 goto bail; 386 if (cks != cp->cks1) 387 qib_dev_porterr(ppd->dd, ppd->port, 388 "QSFP cks1 is %02X, computed %02X\n", cp->cks1, 389 cks); 390 391 /* Second checksum covers 192 to (serial, date, lot) */ 392 ret = qsfp_cks(ppd, QSFP_CC_OFFS + 1, QSFP_SN_OFFS); 393 if (ret < 0) 394 goto bail; 395 cks = ret; 396 397 ret = qsfp_read(ppd, QSFP_SN_OFFS, &cp->serial, QSFP_SN_LEN); 398 if (ret < 0) 399 goto bail; 400 for (idx = 0; idx < QSFP_SN_LEN; ++idx) 401 cks += cp->serial[idx]; 402 403 ret = qsfp_read(ppd, QSFP_DATE_OFFS, &cp->date, QSFP_DATE_LEN); 404 if (ret < 0) 405 goto bail; 406 for (idx = 0; idx < QSFP_DATE_LEN; ++idx) 407 cks += cp->date[idx]; 408 409 ret = qsfp_read(ppd, QSFP_LOT_OFFS, &cp->lot, QSFP_LOT_LEN); 410 if (ret < 0) 411 goto bail; 412 for (idx = 0; idx < QSFP_LOT_LEN; ++idx) 413 cks += cp->lot[idx]; 414 415 ret = qsfp_cks(ppd, QSFP_LOT_OFFS + QSFP_LOT_LEN, QSFP_CC_EXT_OFFS); 416 if (ret < 0) 417 goto bail; 418 cks += ret; 419 420 ret = qsfp_read(ppd, QSFP_CC_EXT_OFFS, &cp->cks2, 1); 421 if (ret < 0) 422 goto bail; 423 cks &= 0xFF; 424 if (cks != cp->cks2) 425 qib_dev_porterr(ppd->dd, ppd->port, 426 "QSFP cks2 is %02X, computed %02X\n", cp->cks2, 427 cks); 428 return 0; 429 430 bail: 431 cp->id = 0; 432 return ret; 433 } 434 435 const char * const qib_qsfp_devtech[16] = { 436 "850nm VCSEL", "1310nm VCSEL", "1550nm VCSEL", "1310nm FP", 437 "1310nm DFB", "1550nm DFB", "1310nm EML", "1550nm EML", 438 "Cu Misc", "1490nm DFB", "Cu NoEq", "Cu Eq", 439 "Undef", "Cu Active BothEq", "Cu FarEq", "Cu NearEq" 440 }; 441 442 #define QSFP_DUMP_CHUNK 16 /* Holds longest string */ 443 #define QSFP_DEFAULT_HDR_CNT 224 444 445 static const char *pwr_codes = "1.5W2.0W2.5W3.5W"; 446 447 /* 448 * Initialize structures that control access to QSFP. Called once per port 449 * on cards that support QSFP. 450 */ 451 void qib_qsfp_init(struct qib_qsfp_data *qd, 452 void (*fevent)(struct work_struct *)) 453 { 454 u32 mask, highs; 455 int pins; 456 457 struct qib_devdata *dd = qd->ppd->dd; 458 459 /* Initialize work struct for later QSFP events */ 460 INIT_WORK(&qd->work, fevent); 461 462 /* 463 * Later, we may want more validation. For now, just set up pins and 464 * blip reset. If module is present, call qib_refresh_qsfp_cache(), 465 * to do further init. 466 */ 467 mask = QSFP_GPIO_MOD_SEL_N | QSFP_GPIO_MOD_RST_N | QSFP_GPIO_LP_MODE; 468 highs = mask - QSFP_GPIO_MOD_RST_N; 469 if (qd->ppd->hw_pidx) { 470 mask <<= QSFP_GPIO_PORT2_SHIFT; 471 highs <<= QSFP_GPIO_PORT2_SHIFT; 472 } 473 dd->f_gpio_mod(dd, highs, mask, mask); 474 udelay(20); /* Generous RST dwell */ 475 476 dd->f_gpio_mod(dd, mask, mask, mask); 477 /* Spec says module can take up to two seconds! */ 478 mask = QSFP_GPIO_MOD_PRS_N; 479 if (qd->ppd->hw_pidx) 480 mask <<= QSFP_GPIO_PORT2_SHIFT; 481 482 /* Do not try to wait here. Better to let event handle it */ 483 pins = dd->f_gpio_mod(dd, 0, 0, 0); 484 if (pins & mask) 485 goto bail; 486 /* We see a module, but it may be unwise to look yet. Just schedule */ 487 qd->t_insert = get_jiffies_64(); 488 queue_work(ib_wq, &qd->work); 489 bail: 490 return; 491 } 492 493 void qib_qsfp_deinit(struct qib_qsfp_data *qd) 494 { 495 /* 496 * There is nothing to do here for now. our work is scheduled 497 * with queue_work(), and flush_workqueue() from remove_one 498 * will block until all work setup with queue_work() 499 * completes. 500 */ 501 } 502 503 int qib_qsfp_dump(struct qib_pportdata *ppd, char *buf, int len) 504 { 505 struct qib_qsfp_cache cd; 506 u8 bin_buff[QSFP_DUMP_CHUNK]; 507 char lenstr[6]; 508 int sofar, ret; 509 int bidx = 0; 510 511 sofar = 0; 512 ret = qib_refresh_qsfp_cache(ppd, &cd); 513 if (ret < 0) 514 goto bail; 515 516 lenstr[0] = ' '; 517 lenstr[1] = '\0'; 518 if (QSFP_IS_CU(cd.tech)) 519 sprintf(lenstr, "%dM ", cd.len); 520 521 sofar += scnprintf(buf + sofar, len - sofar, "PWR:%.3sW\n", pwr_codes + 522 (QSFP_PWR(cd.pwr) * 4)); 523 524 sofar += scnprintf(buf + sofar, len - sofar, "TECH:%s%s\n", lenstr, 525 qib_qsfp_devtech[cd.tech >> 4]); 526 527 sofar += scnprintf(buf + sofar, len - sofar, "Vendor:%.*s\n", 528 QSFP_VEND_LEN, cd.vendor); 529 530 sofar += scnprintf(buf + sofar, len - sofar, "OUI:%06X\n", 531 QSFP_OUI(cd.oui)); 532 533 sofar += scnprintf(buf + sofar, len - sofar, "Part#:%.*s\n", 534 QSFP_PN_LEN, cd.partnum); 535 sofar += scnprintf(buf + sofar, len - sofar, "Rev:%.*s\n", 536 QSFP_REV_LEN, cd.rev); 537 if (QSFP_IS_CU(cd.tech)) 538 sofar += scnprintf(buf + sofar, len - sofar, "Atten:%d, %d\n", 539 QSFP_ATTEN_SDR(cd.atten), 540 QSFP_ATTEN_DDR(cd.atten)); 541 sofar += scnprintf(buf + sofar, len - sofar, "Serial:%.*s\n", 542 QSFP_SN_LEN, cd.serial); 543 sofar += scnprintf(buf + sofar, len - sofar, "Date:%.*s\n", 544 QSFP_DATE_LEN, cd.date); 545 sofar += scnprintf(buf + sofar, len - sofar, "Lot:%.*s\n", 546 QSFP_LOT_LEN, cd.date); 547 548 while (bidx < QSFP_DEFAULT_HDR_CNT) { 549 int iidx; 550 ret = qsfp_read(ppd, bidx, bin_buff, QSFP_DUMP_CHUNK); 551 if (ret < 0) 552 goto bail; 553 for (iidx = 0; iidx < ret; ++iidx) { 554 sofar += scnprintf(buf + sofar, len-sofar, " %02X", 555 bin_buff[iidx]); 556 } 557 sofar += scnprintf(buf + sofar, len - sofar, "\n"); 558 bidx += QSFP_DUMP_CHUNK; 559 } 560 ret = sofar; 561 bail: 562 return ret; 563 } 564