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