xref: /linux/drivers/infiniband/hw/qib/qib_qsfp.c (revision 0337966d121ebebf73a1c346123e8112796e684e)
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 
qsfp_read(struct qib_pportdata * ppd,int addr,void * bp,int len)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(20);
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 
103 		in_page = addr % QSFP_PAGESIZE;
104 		if ((in_page + wlen) > QSFP_PAGESIZE)
105 			wlen = QSFP_PAGESIZE - in_page;
106 		ret = qib_twsi_blk_rd(dd, QSFP_DEV, addr, buff + cnt, wlen);
107 		/* Some QSFP's fail first try. Retry as experiment */
108 		if (ret && cnt == 0 && ++pass < QSFP_MAX_RETRY)
109 			continue;
110 		if (ret) {
111 			/* qib_twsi_blk_rd() 1 for error, else 0 */
112 			ret = -EIO;
113 			goto deselect;
114 		}
115 		addr += wlen;
116 		cnt += wlen;
117 	}
118 	ret = cnt;
119 
120 deselect:
121 	/*
122 	 * Module could take up to 10 uSec after transfer before
123 	 * ready to respond to MOD_SEL negation, and there is no way
124 	 * to tell if it is ready, so we must wait.
125 	 */
126 	udelay(10);
127 	/* set QSFP MODSEL, RST. LP all high */
128 	dd->f_gpio_mod(dd, mask, mask, mask);
129 
130 	/*
131 	 * Module could take up to 2 Msec to respond to MOD_SEL
132 	 * going away, and there is no way to tell if it is ready.
133 	 * so we must wait.
134 	 */
135 	if (stuck)
136 		qib_dev_err(dd, "QSFP interface bus stuck non-idle\n");
137 
138 	if (pass >= QSFP_MAX_RETRY && ret)
139 		qib_dev_porterr(dd, ppd->port, "QSFP failed even retrying\n");
140 	else if (pass)
141 		qib_dev_porterr(dd, ppd->port, "QSFP retries: %d\n", pass);
142 
143 	msleep(20);
144 
145 bail:
146 	mutex_unlock(&dd->eep_lock);
147 
148 no_unlock:
149 	return ret;
150 }
151 
152 /*
153  * qsfp_write
154  * We do not ordinarily write the QSFP, but this is needed to select
155  * the page on non-flat QSFPs, and possibly later unusual cases
156  */
qib_qsfp_write(struct qib_pportdata * ppd,int addr,void * bp,int len)157 static int qib_qsfp_write(struct qib_pportdata *ppd, int addr, void *bp,
158 			  int len)
159 {
160 	struct qib_devdata *dd = ppd->dd;
161 	u32 out, mask;
162 	int ret, cnt;
163 	u8 *buff = bp;
164 
165 	ret = mutex_lock_interruptible(&dd->eep_lock);
166 	if (ret)
167 		goto no_unlock;
168 
169 	if (dd->twsi_eeprom_dev == QIB_TWSI_NO_DEV) {
170 		ret = -ENXIO;
171 		goto bail;
172 	}
173 
174 	/*
175 	 * We presume, if we are called at all, that this board has
176 	 * QSFP. This is on the same i2c chain as the legacy parts,
177 	 * but only responds if the module is selected via GPIO pins.
178 	 * Further, there are very long setup and hold requirements
179 	 * on MODSEL.
180 	 */
181 	mask = QSFP_GPIO_MOD_SEL_N | QSFP_GPIO_MOD_RST_N | QSFP_GPIO_LP_MODE;
182 	out = QSFP_GPIO_MOD_RST_N | QSFP_GPIO_LP_MODE;
183 	if (ppd->hw_pidx) {
184 		mask <<= QSFP_GPIO_PORT2_SHIFT;
185 		out <<= QSFP_GPIO_PORT2_SHIFT;
186 	}
187 	dd->f_gpio_mod(dd, out, mask, mask);
188 
189 	/*
190 	 * Module could take up to 2 Msec to respond to MOD_SEL,
191 	 * and there is no way to tell if it is ready, so we must wait.
192 	 */
193 	msleep(20);
194 
195 	/* Make sure TWSI bus is in sane state. */
196 	ret = qib_twsi_reset(dd);
197 	if (ret) {
198 		qib_dev_porterr(dd, ppd->port,
199 				"QSFP interface Reset for write failed\n");
200 		ret = -EIO;
201 		goto deselect;
202 	}
203 
204 	/* All QSFP modules are at A0 */
205 
206 	cnt = 0;
207 	while (cnt < len) {
208 		unsigned in_page;
209 		int wlen = len - cnt;
210 
211 		in_page = addr % QSFP_PAGESIZE;
212 		if ((in_page + wlen) > QSFP_PAGESIZE)
213 			wlen = QSFP_PAGESIZE - in_page;
214 		ret = qib_twsi_blk_wr(dd, QSFP_DEV, addr, buff + cnt, wlen);
215 		if (ret) {
216 			/* qib_twsi_blk_wr() 1 for error, else 0 */
217 			ret = -EIO;
218 			goto deselect;
219 		}
220 		addr += wlen;
221 		cnt += wlen;
222 	}
223 	ret = cnt;
224 
225 deselect:
226 	/*
227 	 * Module could take up to 10 uSec after transfer before
228 	 * ready to respond to MOD_SEL negation, and there is no way
229 	 * to tell if it is ready, so we must wait.
230 	 */
231 	udelay(10);
232 	/* set QSFP MODSEL, RST, LP high */
233 	dd->f_gpio_mod(dd, mask, mask, mask);
234 	/*
235 	 * Module could take up to 2 Msec to respond to MOD_SEL
236 	 * going away, and there is no way to tell if it is ready.
237 	 * so we must wait.
238 	 */
239 	msleep(20);
240 
241 bail:
242 	mutex_unlock(&dd->eep_lock);
243 
244 no_unlock:
245 	return ret;
246 }
247 
248 /*
249  * For validation, we want to check the checksums, even of the
250  * fields we do not otherwise use. This function reads the bytes from
251  * <first> to <next-1> and returns the 8lsbs of the sum, or <0 for errors
252  */
qsfp_cks(struct qib_pportdata * ppd,int first,int next)253 static int qsfp_cks(struct qib_pportdata *ppd, int first, int next)
254 {
255 	int ret;
256 	u16 cks;
257 	u8 bval;
258 
259 	cks = 0;
260 	while (first < next) {
261 		ret = qsfp_read(ppd, first, &bval, 1);
262 		if (ret < 0)
263 			goto bail;
264 		cks += bval;
265 		++first;
266 	}
267 	ret = cks & 0xFF;
268 bail:
269 	return ret;
270 
271 }
272 
qib_refresh_qsfp_cache(struct qib_pportdata * ppd,struct qib_qsfp_cache * cp)273 int qib_refresh_qsfp_cache(struct qib_pportdata *ppd, struct qib_qsfp_cache *cp)
274 {
275 	int ret;
276 	int idx;
277 	u16 cks;
278 	u8 peek[4];
279 
280 	/* ensure sane contents on invalid reads, for cable swaps */
281 	memset(cp, 0, sizeof(*cp));
282 
283 	if (!qib_qsfp_mod_present(ppd)) {
284 		ret = -ENODEV;
285 		goto bail;
286 	}
287 
288 	ret = qsfp_read(ppd, 0, peek, 3);
289 	if (ret < 0)
290 		goto bail;
291 	if ((peek[0] & 0xFE) != 0x0C)
292 		qib_dev_porterr(ppd->dd, ppd->port,
293 				"QSFP byte0 is 0x%02X, S/B 0x0C/D\n", peek[0]);
294 
295 	if ((peek[2] & 4) == 0) {
296 		/*
297 		 * If cable is paged, rather than "flat memory", we need to
298 		 * set the page to zero, Even if it already appears to be zero.
299 		 */
300 		u8 poke = 0;
301 
302 		ret = qib_qsfp_write(ppd, 127, &poke, 1);
303 		udelay(50);
304 		if (ret != 1) {
305 			qib_dev_porterr(ppd->dd, ppd->port,
306 					"Failed QSFP Page set\n");
307 			goto bail;
308 		}
309 	}
310 
311 	ret = qsfp_read(ppd, QSFP_MOD_ID_OFFS, &cp->id, 1);
312 	if (ret < 0)
313 		goto bail;
314 	if ((cp->id & 0xFE) != 0x0C)
315 		qib_dev_porterr(ppd->dd, ppd->port,
316 				"QSFP ID byte is 0x%02X, S/B 0x0C/D\n", cp->id);
317 	cks = cp->id;
318 
319 	ret = qsfp_read(ppd, QSFP_MOD_PWR_OFFS, &cp->pwr, 1);
320 	if (ret < 0)
321 		goto bail;
322 	cks += cp->pwr;
323 
324 	ret = qsfp_cks(ppd, QSFP_MOD_PWR_OFFS + 1, QSFP_MOD_LEN_OFFS);
325 	if (ret < 0)
326 		goto bail;
327 	cks += ret;
328 
329 	ret = qsfp_read(ppd, QSFP_MOD_LEN_OFFS, &cp->len, 1);
330 	if (ret < 0)
331 		goto bail;
332 	cks += cp->len;
333 
334 	ret = qsfp_read(ppd, QSFP_MOD_TECH_OFFS, &cp->tech, 1);
335 	if (ret < 0)
336 		goto bail;
337 	cks += cp->tech;
338 
339 	ret = qsfp_read(ppd, QSFP_VEND_OFFS, &cp->vendor, QSFP_VEND_LEN);
340 	if (ret < 0)
341 		goto bail;
342 	for (idx = 0; idx < QSFP_VEND_LEN; ++idx)
343 		cks += cp->vendor[idx];
344 
345 	ret = qsfp_read(ppd, QSFP_IBXCV_OFFS, &cp->xt_xcv, 1);
346 	if (ret < 0)
347 		goto bail;
348 	cks += cp->xt_xcv;
349 
350 	ret = qsfp_read(ppd, QSFP_VOUI_OFFS, &cp->oui, QSFP_VOUI_LEN);
351 	if (ret < 0)
352 		goto bail;
353 	for (idx = 0; idx < QSFP_VOUI_LEN; ++idx)
354 		cks += cp->oui[idx];
355 
356 	ret = qsfp_read(ppd, QSFP_PN_OFFS, &cp->partnum, QSFP_PN_LEN);
357 	if (ret < 0)
358 		goto bail;
359 	for (idx = 0; idx < QSFP_PN_LEN; ++idx)
360 		cks += cp->partnum[idx];
361 
362 	ret = qsfp_read(ppd, QSFP_REV_OFFS, &cp->rev, QSFP_REV_LEN);
363 	if (ret < 0)
364 		goto bail;
365 	for (idx = 0; idx < QSFP_REV_LEN; ++idx)
366 		cks += cp->rev[idx];
367 
368 	ret = qsfp_read(ppd, QSFP_ATTEN_OFFS, &cp->atten, QSFP_ATTEN_LEN);
369 	if (ret < 0)
370 		goto bail;
371 	for (idx = 0; idx < QSFP_ATTEN_LEN; ++idx)
372 		cks += cp->atten[idx];
373 
374 	ret = qsfp_cks(ppd, QSFP_ATTEN_OFFS + QSFP_ATTEN_LEN, QSFP_CC_OFFS);
375 	if (ret < 0)
376 		goto bail;
377 	cks += ret;
378 
379 	cks &= 0xFF;
380 	ret = qsfp_read(ppd, QSFP_CC_OFFS, &cp->cks1, 1);
381 	if (ret < 0)
382 		goto bail;
383 	if (cks != cp->cks1)
384 		qib_dev_porterr(ppd->dd, ppd->port,
385 				"QSFP cks1 is %02X, computed %02X\n", cp->cks1,
386 				cks);
387 
388 	/* Second checksum covers 192 to (serial, date, lot) */
389 	ret = qsfp_cks(ppd, QSFP_CC_OFFS + 1, QSFP_SN_OFFS);
390 	if (ret < 0)
391 		goto bail;
392 	cks = ret;
393 
394 	ret = qsfp_read(ppd, QSFP_SN_OFFS, &cp->serial, QSFP_SN_LEN);
395 	if (ret < 0)
396 		goto bail;
397 	for (idx = 0; idx < QSFP_SN_LEN; ++idx)
398 		cks += cp->serial[idx];
399 
400 	ret = qsfp_read(ppd, QSFP_DATE_OFFS, &cp->date, QSFP_DATE_LEN);
401 	if (ret < 0)
402 		goto bail;
403 	for (idx = 0; idx < QSFP_DATE_LEN; ++idx)
404 		cks += cp->date[idx];
405 
406 	ret = qsfp_read(ppd, QSFP_LOT_OFFS, &cp->lot, QSFP_LOT_LEN);
407 	if (ret < 0)
408 		goto bail;
409 	for (idx = 0; idx < QSFP_LOT_LEN; ++idx)
410 		cks += cp->lot[idx];
411 
412 	ret = qsfp_cks(ppd, QSFP_LOT_OFFS + QSFP_LOT_LEN, QSFP_CC_EXT_OFFS);
413 	if (ret < 0)
414 		goto bail;
415 	cks += ret;
416 
417 	ret = qsfp_read(ppd, QSFP_CC_EXT_OFFS, &cp->cks2, 1);
418 	if (ret < 0)
419 		goto bail;
420 	cks &= 0xFF;
421 	if (cks != cp->cks2)
422 		qib_dev_porterr(ppd->dd, ppd->port,
423 				"QSFP cks2 is %02X, computed %02X\n", cp->cks2,
424 				cks);
425 	return 0;
426 
427 bail:
428 	cp->id = 0;
429 	return ret;
430 }
431 
432 const char * const qib_qsfp_devtech[16] = {
433 	"850nm VCSEL", "1310nm VCSEL", "1550nm VCSEL", "1310nm FP",
434 	"1310nm DFB", "1550nm DFB", "1310nm EML", "1550nm EML",
435 	"Cu Misc", "1490nm DFB", "Cu NoEq", "Cu Eq",
436 	"Undef", "Cu Active BothEq", "Cu FarEq", "Cu NearEq"
437 };
438 
439 #define QSFP_DUMP_CHUNK 16 /* Holds longest string */
440 #define QSFP_DEFAULT_HDR_CNT 224
441 
442 static const char *pwr_codes = "1.5W2.0W2.5W3.5W";
443 
qib_qsfp_mod_present(struct qib_pportdata * ppd)444 int qib_qsfp_mod_present(struct qib_pportdata *ppd)
445 {
446 	u32 mask;
447 	int ret;
448 
449 	mask = QSFP_GPIO_MOD_PRS_N <<
450 		(ppd->hw_pidx * QSFP_GPIO_PORT2_SHIFT);
451 	ret = ppd->dd->f_gpio_mod(ppd->dd, 0, 0, 0);
452 
453 	return !((ret & mask) >>
454 		 ((ppd->hw_pidx * QSFP_GPIO_PORT2_SHIFT) + 3));
455 }
456 
457 /*
458  * Initialize structures that control access to QSFP. Called once per port
459  * on cards that support QSFP.
460  */
qib_qsfp_init(struct qib_qsfp_data * qd,void (* fevent)(struct work_struct *))461 void qib_qsfp_init(struct qib_qsfp_data *qd,
462 		   void (*fevent)(struct work_struct *))
463 {
464 	u32 mask, highs;
465 
466 	struct qib_devdata *dd = qd->ppd->dd;
467 
468 	/* Initialize work struct for later QSFP events */
469 	INIT_WORK(&qd->work, fevent);
470 
471 	/*
472 	 * Later, we may want more validation. For now, just set up pins and
473 	 * blip reset. If module is present, call qib_refresh_qsfp_cache(),
474 	 * to do further init.
475 	 */
476 	mask = QSFP_GPIO_MOD_SEL_N | QSFP_GPIO_MOD_RST_N | QSFP_GPIO_LP_MODE;
477 	highs = mask - QSFP_GPIO_MOD_RST_N;
478 	if (qd->ppd->hw_pidx) {
479 		mask <<= QSFP_GPIO_PORT2_SHIFT;
480 		highs <<= QSFP_GPIO_PORT2_SHIFT;
481 	}
482 	dd->f_gpio_mod(dd, highs, mask, mask);
483 	udelay(20); /* Generous RST dwell */
484 
485 	dd->f_gpio_mod(dd, mask, mask, mask);
486 }
487 
qib_qsfp_dump(struct qib_pportdata * ppd,char * buf,int len)488 int qib_qsfp_dump(struct qib_pportdata *ppd, char *buf, int len)
489 {
490 	struct qib_qsfp_cache cd;
491 	u8 bin_buff[QSFP_DUMP_CHUNK];
492 	char lenstr[6];
493 	int sofar, ret;
494 	int bidx = 0;
495 
496 	sofar = 0;
497 	ret = qib_refresh_qsfp_cache(ppd, &cd);
498 	if (ret < 0)
499 		goto bail;
500 
501 	lenstr[0] = ' ';
502 	lenstr[1] = '\0';
503 	if (QSFP_IS_CU(cd.tech))
504 		sprintf(lenstr, "%dM ", cd.len);
505 
506 	sofar += scnprintf(buf + sofar, len - sofar, "PWR:%.3sW\n", pwr_codes +
507 			   (QSFP_PWR(cd.pwr) * 4));
508 
509 	sofar += scnprintf(buf + sofar, len - sofar, "TECH:%s%s\n", lenstr,
510 			   qib_qsfp_devtech[cd.tech >> 4]);
511 
512 	sofar += scnprintf(buf + sofar, len - sofar, "Vendor:%.*s\n",
513 			   QSFP_VEND_LEN, cd.vendor);
514 
515 	sofar += scnprintf(buf + sofar, len - sofar, "OUI:%06X\n",
516 			   QSFP_OUI(cd.oui));
517 
518 	sofar += scnprintf(buf + sofar, len - sofar, "Part#:%.*s\n",
519 			   QSFP_PN_LEN, cd.partnum);
520 	sofar += scnprintf(buf + sofar, len - sofar, "Rev:%.*s\n",
521 			   QSFP_REV_LEN, cd.rev);
522 	if (QSFP_IS_CU(cd.tech))
523 		sofar += scnprintf(buf + sofar, len - sofar, "Atten:%d, %d\n",
524 				   QSFP_ATTEN_SDR(cd.atten),
525 				   QSFP_ATTEN_DDR(cd.atten));
526 	sofar += scnprintf(buf + sofar, len - sofar, "Serial:%.*s\n",
527 			   QSFP_SN_LEN, cd.serial);
528 	sofar += scnprintf(buf + sofar, len - sofar, "Date:%.*s\n",
529 			   QSFP_DATE_LEN, cd.date);
530 	sofar += scnprintf(buf + sofar, len - sofar, "Lot:%.*s\n",
531 			   QSFP_LOT_LEN, cd.lot);
532 
533 	while (bidx < QSFP_DEFAULT_HDR_CNT) {
534 		int iidx;
535 
536 		ret = qsfp_read(ppd, bidx, bin_buff, QSFP_DUMP_CHUNK);
537 		if (ret < 0)
538 			goto bail;
539 		for (iidx = 0; iidx < ret; ++iidx) {
540 			sofar += scnprintf(buf + sofar, len-sofar, " %02X",
541 				bin_buff[iidx]);
542 		}
543 		sofar += scnprintf(buf + sofar, len - sofar, "\n");
544 		bidx += QSFP_DUMP_CHUNK;
545 	}
546 	ret = sofar;
547 bail:
548 	return ret;
549 }
550