1 // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
2 /*
3  * Copyright(c) 2015, 2016 Intel Corporation.
4  */
5 
6 #include <linux/delay.h>
7 #include <linux/pci.h>
8 #include <linux/vmalloc.h>
9 
10 #include "hfi.h"
11 
12 /* for the given bus number, return the CSR for reading an i2c line */
i2c_in_csr(u32 bus_num)13 static inline u32 i2c_in_csr(u32 bus_num)
14 {
15 	return bus_num ? ASIC_QSFP2_IN : ASIC_QSFP1_IN;
16 }
17 
18 /* for the given bus number, return the CSR for writing an i2c line */
i2c_oe_csr(u32 bus_num)19 static inline u32 i2c_oe_csr(u32 bus_num)
20 {
21 	return bus_num ? ASIC_QSFP2_OE : ASIC_QSFP1_OE;
22 }
23 
hfi1_setsda(void * data,int state)24 static void hfi1_setsda(void *data, int state)
25 {
26 	struct hfi1_i2c_bus *bus = (struct hfi1_i2c_bus *)data;
27 	struct hfi1_devdata *dd = bus->controlling_dd;
28 	u64 reg;
29 	u32 target_oe;
30 
31 	target_oe = i2c_oe_csr(bus->num);
32 	reg = read_csr(dd, target_oe);
33 	/*
34 	 * The OE bit value is inverted and connected to the pin.  When
35 	 * OE is 0 the pin is left to be pulled up, when the OE is 1
36 	 * the pin is driven low.  This matches the "open drain" or "open
37 	 * collector" convention.
38 	 */
39 	if (state)
40 		reg &= ~QSFP_HFI0_I2CDAT;
41 	else
42 		reg |= QSFP_HFI0_I2CDAT;
43 	write_csr(dd, target_oe, reg);
44 	/* do a read to force the write into the chip */
45 	(void)read_csr(dd, target_oe);
46 }
47 
hfi1_setscl(void * data,int state)48 static void hfi1_setscl(void *data, int state)
49 {
50 	struct hfi1_i2c_bus *bus = (struct hfi1_i2c_bus *)data;
51 	struct hfi1_devdata *dd = bus->controlling_dd;
52 	u64 reg;
53 	u32 target_oe;
54 
55 	target_oe = i2c_oe_csr(bus->num);
56 	reg = read_csr(dd, target_oe);
57 	/*
58 	 * The OE bit value is inverted and connected to the pin.  When
59 	 * OE is 0 the pin is left to be pulled up, when the OE is 1
60 	 * the pin is driven low.  This matches the "open drain" or "open
61 	 * collector" convention.
62 	 */
63 	if (state)
64 		reg &= ~QSFP_HFI0_I2CCLK;
65 	else
66 		reg |= QSFP_HFI0_I2CCLK;
67 	write_csr(dd, target_oe, reg);
68 	/* do a read to force the write into the chip */
69 	(void)read_csr(dd, target_oe);
70 }
71 
hfi1_getsda(void * data)72 static int hfi1_getsda(void *data)
73 {
74 	struct hfi1_i2c_bus *bus = (struct hfi1_i2c_bus *)data;
75 	u64 reg;
76 	u32 target_in;
77 
78 	hfi1_setsda(data, 1);	/* clear OE so we do not pull line down */
79 	udelay(2);		/* 1us pull up + 250ns hold */
80 
81 	target_in = i2c_in_csr(bus->num);
82 	reg = read_csr(bus->controlling_dd, target_in);
83 	return !!(reg & QSFP_HFI0_I2CDAT);
84 }
85 
hfi1_getscl(void * data)86 static int hfi1_getscl(void *data)
87 {
88 	struct hfi1_i2c_bus *bus = (struct hfi1_i2c_bus *)data;
89 	u64 reg;
90 	u32 target_in;
91 
92 	hfi1_setscl(data, 1);	/* clear OE so we do not pull line down */
93 	udelay(2);		/* 1us pull up + 250ns hold */
94 
95 	target_in = i2c_in_csr(bus->num);
96 	reg = read_csr(bus->controlling_dd, target_in);
97 	return !!(reg & QSFP_HFI0_I2CCLK);
98 }
99 
100 /*
101  * Allocate and initialize the given i2c bus number.
102  * Returns NULL on failure.
103  */
init_i2c_bus(struct hfi1_devdata * dd,struct hfi1_asic_data * ad,int num)104 static struct hfi1_i2c_bus *init_i2c_bus(struct hfi1_devdata *dd,
105 					 struct hfi1_asic_data *ad, int num)
106 {
107 	struct hfi1_i2c_bus *bus;
108 	int ret;
109 
110 	bus = kzalloc(sizeof(*bus), GFP_KERNEL);
111 	if (!bus)
112 		return NULL;
113 
114 	bus->controlling_dd = dd;
115 	bus->num = num;	/* our bus number */
116 
117 	bus->algo.setsda = hfi1_setsda;
118 	bus->algo.setscl = hfi1_setscl;
119 	bus->algo.getsda = hfi1_getsda;
120 	bus->algo.getscl = hfi1_getscl;
121 	bus->algo.udelay = 5;
122 	bus->algo.timeout = usecs_to_jiffies(100000);
123 	bus->algo.data = bus;
124 
125 	bus->adapter.owner = THIS_MODULE;
126 	bus->adapter.algo_data = &bus->algo;
127 	bus->adapter.dev.parent = &dd->pcidev->dev;
128 	snprintf(bus->adapter.name, sizeof(bus->adapter.name),
129 		 "hfi1_i2c%d", num);
130 
131 	ret = i2c_bit_add_bus(&bus->adapter);
132 	if (ret) {
133 		dd_dev_info(dd, "%s: unable to add i2c bus %d, err %d\n",
134 			    __func__, num, ret);
135 		kfree(bus);
136 		return NULL;
137 	}
138 
139 	return bus;
140 }
141 
142 /*
143  * Initialize i2c buses.
144  * Return 0 on success, -errno on error.
145  */
set_up_i2c(struct hfi1_devdata * dd,struct hfi1_asic_data * ad)146 int set_up_i2c(struct hfi1_devdata *dd, struct hfi1_asic_data *ad)
147 {
148 	ad->i2c_bus0 = init_i2c_bus(dd, ad, 0);
149 	ad->i2c_bus1 = init_i2c_bus(dd, ad, 1);
150 	if (!ad->i2c_bus0 || !ad->i2c_bus1)
151 		return -ENOMEM;
152 	return 0;
153 };
154 
clean_i2c_bus(struct hfi1_i2c_bus * bus)155 static void clean_i2c_bus(struct hfi1_i2c_bus *bus)
156 {
157 	if (bus) {
158 		i2c_del_adapter(&bus->adapter);
159 		kfree(bus);
160 	}
161 }
162 
clean_up_i2c(struct hfi1_devdata * dd,struct hfi1_asic_data * ad)163 void clean_up_i2c(struct hfi1_devdata *dd, struct hfi1_asic_data *ad)
164 {
165 	if (!ad)
166 		return;
167 	clean_i2c_bus(ad->i2c_bus0);
168 	ad->i2c_bus0 = NULL;
169 	clean_i2c_bus(ad->i2c_bus1);
170 	ad->i2c_bus1 = NULL;
171 }
172 
i2c_bus_write(struct hfi1_devdata * dd,struct hfi1_i2c_bus * i2c,u8 slave_addr,int offset,int offset_size,u8 * data,u16 len)173 static int i2c_bus_write(struct hfi1_devdata *dd, struct hfi1_i2c_bus *i2c,
174 			 u8 slave_addr, int offset, int offset_size,
175 			 u8 *data, u16 len)
176 {
177 	int ret;
178 	int num_msgs;
179 	u8 offset_bytes[2];
180 	struct i2c_msg msgs[2];
181 
182 	switch (offset_size) {
183 	case 0:
184 		num_msgs = 1;
185 		msgs[0].addr = slave_addr;
186 		msgs[0].flags = 0;
187 		msgs[0].len = len;
188 		msgs[0].buf = data;
189 		break;
190 	case 2:
191 		offset_bytes[1] = (offset >> 8) & 0xff;
192 		fallthrough;
193 	case 1:
194 		num_msgs = 2;
195 		offset_bytes[0] = offset & 0xff;
196 
197 		msgs[0].addr = slave_addr;
198 		msgs[0].flags = 0;
199 		msgs[0].len = offset_size;
200 		msgs[0].buf = offset_bytes;
201 
202 		msgs[1].addr = slave_addr;
203 		msgs[1].flags = I2C_M_NOSTART;
204 		msgs[1].len = len;
205 		msgs[1].buf = data;
206 		break;
207 	default:
208 		return -EINVAL;
209 	}
210 
211 	i2c->controlling_dd = dd;
212 	ret = i2c_transfer(&i2c->adapter, msgs, num_msgs);
213 	if (ret != num_msgs) {
214 		dd_dev_err(dd, "%s: bus %d, i2c slave 0x%x, offset 0x%x, len 0x%x; write failed, ret %d\n",
215 			   __func__, i2c->num, slave_addr, offset, len, ret);
216 		return ret < 0 ? ret : -EIO;
217 	}
218 	return 0;
219 }
220 
i2c_bus_read(struct hfi1_devdata * dd,struct hfi1_i2c_bus * bus,u8 slave_addr,int offset,int offset_size,u8 * data,u16 len)221 static int i2c_bus_read(struct hfi1_devdata *dd, struct hfi1_i2c_bus *bus,
222 			u8 slave_addr, int offset, int offset_size,
223 			u8 *data, u16 len)
224 {
225 	int ret;
226 	int num_msgs;
227 	u8 offset_bytes[2];
228 	struct i2c_msg msgs[2];
229 
230 	switch (offset_size) {
231 	case 0:
232 		num_msgs = 1;
233 		msgs[0].addr = slave_addr;
234 		msgs[0].flags = I2C_M_RD;
235 		msgs[0].len = len;
236 		msgs[0].buf = data;
237 		break;
238 	case 2:
239 		offset_bytes[1] = (offset >> 8) & 0xff;
240 		fallthrough;
241 	case 1:
242 		num_msgs = 2;
243 		offset_bytes[0] = offset & 0xff;
244 
245 		msgs[0].addr = slave_addr;
246 		msgs[0].flags = 0;
247 		msgs[0].len = offset_size;
248 		msgs[0].buf = offset_bytes;
249 
250 		msgs[1].addr = slave_addr;
251 		msgs[1].flags = I2C_M_RD;
252 		msgs[1].len = len;
253 		msgs[1].buf = data;
254 		break;
255 	default:
256 		return -EINVAL;
257 	}
258 
259 	bus->controlling_dd = dd;
260 	ret = i2c_transfer(&bus->adapter, msgs, num_msgs);
261 	if (ret != num_msgs) {
262 		dd_dev_err(dd, "%s: bus %d, i2c slave 0x%x, offset 0x%x, len 0x%x; read failed, ret %d\n",
263 			   __func__, bus->num, slave_addr, offset, len, ret);
264 		return ret < 0 ? ret : -EIO;
265 	}
266 	return 0;
267 }
268 
269 /*
270  * Raw i2c write.  No set-up or lock checking.
271  *
272  * Return 0 on success, -errno on error.
273  */
__i2c_write(struct hfi1_pportdata * ppd,u32 target,int i2c_addr,int offset,void * bp,int len)274 static int __i2c_write(struct hfi1_pportdata *ppd, u32 target, int i2c_addr,
275 		       int offset, void *bp, int len)
276 {
277 	struct hfi1_devdata *dd = ppd->dd;
278 	struct hfi1_i2c_bus *bus;
279 	u8 slave_addr;
280 	int offset_size;
281 
282 	bus = target ? dd->asic_data->i2c_bus1 : dd->asic_data->i2c_bus0;
283 	slave_addr = (i2c_addr & 0xff) >> 1; /* convert to 7-bit addr */
284 	offset_size = (i2c_addr >> 8) & 0x3;
285 	return i2c_bus_write(dd, bus, slave_addr, offset, offset_size, bp, len);
286 }
287 
288 /*
289  * Caller must hold the i2c chain resource.
290  *
291  * Return number of bytes written, or -errno.
292  */
i2c_write(struct hfi1_pportdata * ppd,u32 target,int i2c_addr,int offset,void * bp,int len)293 int i2c_write(struct hfi1_pportdata *ppd, u32 target, int i2c_addr, int offset,
294 	      void *bp, int len)
295 {
296 	int ret;
297 
298 	if (!check_chip_resource(ppd->dd, i2c_target(target), __func__))
299 		return -EACCES;
300 
301 	ret = __i2c_write(ppd, target, i2c_addr, offset, bp, len);
302 	if (ret)
303 		return ret;
304 
305 	return len;
306 }
307 
308 /*
309  * Raw i2c read.  No set-up or lock checking.
310  *
311  * Return 0 on success, -errno on error.
312  */
__i2c_read(struct hfi1_pportdata * ppd,u32 target,int i2c_addr,int offset,void * bp,int len)313 static int __i2c_read(struct hfi1_pportdata *ppd, u32 target, int i2c_addr,
314 		      int offset, void *bp, int len)
315 {
316 	struct hfi1_devdata *dd = ppd->dd;
317 	struct hfi1_i2c_bus *bus;
318 	u8 slave_addr;
319 	int offset_size;
320 
321 	bus = target ? dd->asic_data->i2c_bus1 : dd->asic_data->i2c_bus0;
322 	slave_addr = (i2c_addr & 0xff) >> 1; /* convert to 7-bit addr */
323 	offset_size = (i2c_addr >> 8) & 0x3;
324 	return i2c_bus_read(dd, bus, slave_addr, offset, offset_size, bp, len);
325 }
326 
327 /*
328  * Caller must hold the i2c chain resource.
329  *
330  * Return number of bytes read, or -errno.
331  */
i2c_read(struct hfi1_pportdata * ppd,u32 target,int i2c_addr,int offset,void * bp,int len)332 int i2c_read(struct hfi1_pportdata *ppd, u32 target, int i2c_addr, int offset,
333 	     void *bp, int len)
334 {
335 	int ret;
336 
337 	if (!check_chip_resource(ppd->dd, i2c_target(target), __func__))
338 		return -EACCES;
339 
340 	ret = __i2c_read(ppd, target, i2c_addr, offset, bp, len);
341 	if (ret)
342 		return ret;
343 
344 	return len;
345 }
346 
347 /*
348  * Write page n, offset m of QSFP memory as defined by SFF 8636
349  * by writing @addr = ((256 * n) + m)
350  *
351  * Caller must hold the i2c chain resource.
352  *
353  * Return number of bytes written or -errno.
354  */
qsfp_write(struct hfi1_pportdata * ppd,u32 target,int addr,void * bp,int len)355 int qsfp_write(struct hfi1_pportdata *ppd, u32 target, int addr, void *bp,
356 	       int len)
357 {
358 	int count = 0;
359 	int offset;
360 	int nwrite;
361 	int ret = 0;
362 	u8 page;
363 
364 	if (!check_chip_resource(ppd->dd, i2c_target(target), __func__))
365 		return -EACCES;
366 
367 	while (count < len) {
368 		/*
369 		 * Set the qsfp page based on a zero-based address
370 		 * and a page size of QSFP_PAGESIZE bytes.
371 		 */
372 		page = (u8)(addr / QSFP_PAGESIZE);
373 
374 		ret = __i2c_write(ppd, target, QSFP_DEV | QSFP_OFFSET_SIZE,
375 				  QSFP_PAGE_SELECT_BYTE_OFFS, &page, 1);
376 		/* QSFPs require a 5-10msec delay after write operations */
377 		mdelay(5);
378 		if (ret) {
379 			hfi1_dev_porterr(ppd->dd, ppd->port,
380 					 "QSFP chain %d can't write QSFP_PAGE_SELECT_BYTE: %d\n",
381 					 target, ret);
382 			break;
383 		}
384 
385 		offset = addr % QSFP_PAGESIZE;
386 		nwrite = len - count;
387 		/* truncate write to boundary if crossing boundary */
388 		if (((addr % QSFP_RW_BOUNDARY) + nwrite) > QSFP_RW_BOUNDARY)
389 			nwrite = QSFP_RW_BOUNDARY - (addr % QSFP_RW_BOUNDARY);
390 
391 		ret = __i2c_write(ppd, target, QSFP_DEV | QSFP_OFFSET_SIZE,
392 				  offset, bp + count, nwrite);
393 		/* QSFPs require a 5-10msec delay after write operations */
394 		mdelay(5);
395 		if (ret)	/* stop on error */
396 			break;
397 
398 		count += nwrite;
399 		addr += nwrite;
400 	}
401 
402 	if (ret < 0)
403 		return ret;
404 	return count;
405 }
406 
407 /*
408  * Access page n, offset m of QSFP memory as defined by SFF 8636
409  * by reading @addr = ((256 * n) + m)
410  *
411  * Caller must hold the i2c chain resource.
412  *
413  * Return the number of bytes read or -errno.
414  */
qsfp_read(struct hfi1_pportdata * ppd,u32 target,int addr,void * bp,int len)415 int qsfp_read(struct hfi1_pportdata *ppd, u32 target, int addr, void *bp,
416 	      int len)
417 {
418 	int count = 0;
419 	int offset;
420 	int nread;
421 	int ret = 0;
422 	u8 page;
423 
424 	if (!check_chip_resource(ppd->dd, i2c_target(target), __func__))
425 		return -EACCES;
426 
427 	while (count < len) {
428 		/*
429 		 * Set the qsfp page based on a zero-based address
430 		 * and a page size of QSFP_PAGESIZE bytes.
431 		 */
432 		page = (u8)(addr / QSFP_PAGESIZE);
433 		ret = __i2c_write(ppd, target, QSFP_DEV | QSFP_OFFSET_SIZE,
434 				  QSFP_PAGE_SELECT_BYTE_OFFS, &page, 1);
435 		/* QSFPs require a 5-10msec delay after write operations */
436 		mdelay(5);
437 		if (ret) {
438 			hfi1_dev_porterr(ppd->dd, ppd->port,
439 					 "QSFP chain %d can't write QSFP_PAGE_SELECT_BYTE: %d\n",
440 					 target, ret);
441 			break;
442 		}
443 
444 		offset = addr % QSFP_PAGESIZE;
445 		nread = len - count;
446 		/* truncate read to boundary if crossing boundary */
447 		if (((addr % QSFP_RW_BOUNDARY) + nread) > QSFP_RW_BOUNDARY)
448 			nread = QSFP_RW_BOUNDARY - (addr % QSFP_RW_BOUNDARY);
449 
450 		ret = __i2c_read(ppd, target, QSFP_DEV | QSFP_OFFSET_SIZE,
451 				 offset, bp + count, nread);
452 		if (ret)	/* stop on error */
453 			break;
454 
455 		count += nread;
456 		addr += nread;
457 	}
458 
459 	if (ret < 0)
460 		return ret;
461 	return count;
462 }
463 
464 /*
465  * Perform a stand-alone single QSFP read.  Acquire the resource, do the
466  * read, then release the resource.
467  */
one_qsfp_read(struct hfi1_pportdata * ppd,u32 target,int addr,void * bp,int len)468 int one_qsfp_read(struct hfi1_pportdata *ppd, u32 target, int addr, void *bp,
469 		  int len)
470 {
471 	struct hfi1_devdata *dd = ppd->dd;
472 	u32 resource = qsfp_resource(dd);
473 	int ret;
474 
475 	ret = acquire_chip_resource(dd, resource, QSFP_WAIT);
476 	if (ret)
477 		return ret;
478 	ret = qsfp_read(ppd, target, addr, bp, len);
479 	release_chip_resource(dd, resource);
480 
481 	return ret;
482 }
483 
484 /*
485  * This function caches the QSFP memory range in 128 byte chunks.
486  * As an example, the next byte after address 255 is byte 128 from
487  * upper page 01H (if existing) rather than byte 0 from lower page 00H.
488  * Access page n, offset m of QSFP memory as defined by SFF 8636
489  * in the cache by reading byte ((128 * n) + m)
490  * The calls to qsfp_{read,write} in this function correctly handle the
491  * address map difference between this mapping and the mapping implemented
492  * by those functions
493  *
494  * The caller must be holding the QSFP i2c chain resource.
495  */
refresh_qsfp_cache(struct hfi1_pportdata * ppd,struct qsfp_data * cp)496 int refresh_qsfp_cache(struct hfi1_pportdata *ppd, struct qsfp_data *cp)
497 {
498 	u32 target = ppd->dd->hfi1_id;
499 	int ret;
500 	unsigned long flags;
501 	u8 *cache = &cp->cache[0];
502 
503 	/* ensure sane contents on invalid reads, for cable swaps */
504 	memset(cache, 0, (QSFP_MAX_NUM_PAGES * 128));
505 	spin_lock_irqsave(&ppd->qsfp_info.qsfp_lock, flags);
506 	ppd->qsfp_info.cache_valid = 0;
507 	spin_unlock_irqrestore(&ppd->qsfp_info.qsfp_lock, flags);
508 
509 	if (!qsfp_mod_present(ppd)) {
510 		ret = -ENODEV;
511 		goto bail;
512 	}
513 
514 	ret = qsfp_read(ppd, target, 0, cache, QSFP_PAGESIZE);
515 	if (ret != QSFP_PAGESIZE) {
516 		dd_dev_info(ppd->dd,
517 			    "%s: Page 0 read failed, expected %d, got %d\n",
518 			    __func__, QSFP_PAGESIZE, ret);
519 		goto bail;
520 	}
521 
522 	/* Is paging enabled? */
523 	if (!(cache[2] & 4)) {
524 		/* Paging enabled, page 03 required */
525 		if ((cache[195] & 0xC0) == 0xC0) {
526 			/* all */
527 			ret = qsfp_read(ppd, target, 384, cache + 256, 128);
528 			if (ret <= 0 || ret != 128) {
529 				dd_dev_info(ppd->dd, "%s failed\n", __func__);
530 				goto bail;
531 			}
532 			ret = qsfp_read(ppd, target, 640, cache + 384, 128);
533 			if (ret <= 0 || ret != 128) {
534 				dd_dev_info(ppd->dd, "%s failed\n", __func__);
535 				goto bail;
536 			}
537 			ret = qsfp_read(ppd, target, 896, cache + 512, 128);
538 			if (ret <= 0 || ret != 128) {
539 				dd_dev_info(ppd->dd, "%s failed\n", __func__);
540 				goto bail;
541 			}
542 		} else if ((cache[195] & 0x80) == 0x80) {
543 			/* only page 2 and 3 */
544 			ret = qsfp_read(ppd, target, 640, cache + 384, 128);
545 			if (ret <= 0 || ret != 128) {
546 				dd_dev_info(ppd->dd, "%s failed\n", __func__);
547 				goto bail;
548 			}
549 			ret = qsfp_read(ppd, target, 896, cache + 512, 128);
550 			if (ret <= 0 || ret != 128) {
551 				dd_dev_info(ppd->dd, "%s failed\n", __func__);
552 				goto bail;
553 			}
554 		} else if ((cache[195] & 0x40) == 0x40) {
555 			/* only page 1 and 3 */
556 			ret = qsfp_read(ppd, target, 384, cache + 256, 128);
557 			if (ret <= 0 || ret != 128) {
558 				dd_dev_info(ppd->dd, "%s failed\n", __func__);
559 				goto bail;
560 			}
561 			ret = qsfp_read(ppd, target, 896, cache + 512, 128);
562 			if (ret <= 0 || ret != 128) {
563 				dd_dev_info(ppd->dd, "%s failed\n", __func__);
564 				goto bail;
565 			}
566 		} else {
567 			/* only page 3 */
568 			ret = qsfp_read(ppd, target, 896, cache + 512, 128);
569 			if (ret <= 0 || ret != 128) {
570 				dd_dev_info(ppd->dd, "%s failed\n", __func__);
571 				goto bail;
572 			}
573 		}
574 	}
575 
576 	spin_lock_irqsave(&ppd->qsfp_info.qsfp_lock, flags);
577 	ppd->qsfp_info.cache_valid = 1;
578 	ppd->qsfp_info.cache_refresh_required = 0;
579 	spin_unlock_irqrestore(&ppd->qsfp_info.qsfp_lock, flags);
580 
581 	return 0;
582 
583 bail:
584 	memset(cache, 0, (QSFP_MAX_NUM_PAGES * 128));
585 	return ret;
586 }
587 
588 const char * const hfi1_qsfp_devtech[16] = {
589 	"850nm VCSEL", "1310nm VCSEL", "1550nm VCSEL", "1310nm FP",
590 	"1310nm DFB", "1550nm DFB", "1310nm EML", "1550nm EML",
591 	"Cu Misc", "1490nm DFB", "Cu NoEq", "Cu Eq",
592 	"Undef", "Cu Active BothEq", "Cu FarEq", "Cu NearEq"
593 };
594 
595 #define QSFP_DUMP_CHUNK 16 /* Holds longest string */
596 #define QSFP_DEFAULT_HDR_CNT 224
597 
598 #define QSFP_PWR(pbyte) (((pbyte) >> 6) & 3)
599 #define QSFP_HIGH_PWR(pbyte) ((pbyte) & 3)
600 /* For use with QSFP_HIGH_PWR macro */
601 #define QSFP_HIGH_PWR_UNUSED	0 /* Bits [1:0] = 00 implies low power module */
602 
603 /*
604  * Takes power class byte [Page 00 Byte 129] in SFF 8636
605  * Returns power class as integer (1 through 7, per SFF 8636 rev 2.4)
606  */
get_qsfp_power_class(u8 power_byte)607 int get_qsfp_power_class(u8 power_byte)
608 {
609 	if (QSFP_HIGH_PWR(power_byte) == QSFP_HIGH_PWR_UNUSED)
610 		/* power classes count from 1, their bit encodings from 0 */
611 		return (QSFP_PWR(power_byte) + 1);
612 	/*
613 	 * 00 in the high power classes stands for unused, bringing
614 	 * balance to the off-by-1 offset above, we add 4 here to
615 	 * account for the difference between the low and high power
616 	 * groups
617 	 */
618 	return (QSFP_HIGH_PWR(power_byte) + 4);
619 }
620 
qsfp_mod_present(struct hfi1_pportdata * ppd)621 int qsfp_mod_present(struct hfi1_pportdata *ppd)
622 {
623 	struct hfi1_devdata *dd = ppd->dd;
624 	u64 reg;
625 
626 	reg = read_csr(dd, dd->hfi1_id ? ASIC_QSFP2_IN : ASIC_QSFP1_IN);
627 	return !(reg & QSFP_HFI0_MODPRST_N);
628 }
629 
630 /*
631  * This function maps QSFP memory addresses in 128 byte chunks in the following
632  * fashion per the CableInfo SMA query definition in the IBA 1.3 spec/OPA Gen 1
633  * spec
634  * For addr 000-127, lower page 00h
635  * For addr 128-255, upper page 00h
636  * For addr 256-383, upper page 01h
637  * For addr 384-511, upper page 02h
638  * For addr 512-639, upper page 03h
639  *
640  * For addresses beyond this range, it returns the invalid range of data buffer
641  * set to 0.
642  * For upper pages that are optional, if they are not valid, returns the
643  * particular range of bytes in the data buffer set to 0.
644  */
get_cable_info(struct hfi1_devdata * dd,u32 port_num,u32 addr,u32 len,u8 * data)645 int get_cable_info(struct hfi1_devdata *dd, u32 port_num, u32 addr, u32 len,
646 		   u8 *data)
647 {
648 	struct hfi1_pportdata *ppd;
649 	u32 excess_len = len;
650 	int ret = 0, offset = 0;
651 
652 	if (port_num > dd->num_pports || port_num < 1) {
653 		dd_dev_info(dd, "%s: Invalid port number %d\n",
654 			    __func__, port_num);
655 		ret = -EINVAL;
656 		goto set_zeroes;
657 	}
658 
659 	ppd = dd->pport + (port_num - 1);
660 	if (!qsfp_mod_present(ppd)) {
661 		ret = -ENODEV;
662 		goto set_zeroes;
663 	}
664 
665 	if (!ppd->qsfp_info.cache_valid) {
666 		ret = -EINVAL;
667 		goto set_zeroes;
668 	}
669 
670 	if (addr >= (QSFP_MAX_NUM_PAGES * 128)) {
671 		ret = -ERANGE;
672 		goto set_zeroes;
673 	}
674 
675 	if ((addr + len) > (QSFP_MAX_NUM_PAGES * 128)) {
676 		excess_len = (addr + len) - (QSFP_MAX_NUM_PAGES * 128);
677 		memcpy(data, &ppd->qsfp_info.cache[addr], (len - excess_len));
678 		data += (len - excess_len);
679 		goto set_zeroes;
680 	}
681 
682 	memcpy(data, &ppd->qsfp_info.cache[addr], len);
683 
684 	if (addr <= QSFP_MONITOR_VAL_END &&
685 	    (addr + len) >= QSFP_MONITOR_VAL_START) {
686 		/* Overlap with the dynamic channel monitor range */
687 		if (addr < QSFP_MONITOR_VAL_START) {
688 			if (addr + len <= QSFP_MONITOR_VAL_END)
689 				len = addr + len - QSFP_MONITOR_VAL_START;
690 			else
691 				len = QSFP_MONITOR_RANGE;
692 			offset = QSFP_MONITOR_VAL_START - addr;
693 			addr = QSFP_MONITOR_VAL_START;
694 		} else if (addr == QSFP_MONITOR_VAL_START) {
695 			offset = 0;
696 			if (addr + len > QSFP_MONITOR_VAL_END)
697 				len = QSFP_MONITOR_RANGE;
698 		} else {
699 			offset = 0;
700 			if (addr + len > QSFP_MONITOR_VAL_END)
701 				len = QSFP_MONITOR_VAL_END - addr + 1;
702 		}
703 		/* Refresh the values of the dynamic monitors from the cable */
704 		ret = one_qsfp_read(ppd, dd->hfi1_id, addr, data + offset, len);
705 		if (ret != len) {
706 			ret = -EAGAIN;
707 			goto set_zeroes;
708 		}
709 	}
710 
711 	return 0;
712 
713 set_zeroes:
714 	memset(data, 0, excess_len);
715 	return ret;
716 }
717 
718 static const char *pwr_codes[8] = {"N/AW",
719 				  "1.5W",
720 				  "2.0W",
721 				  "2.5W",
722 				  "3.5W",
723 				  "4.0W",
724 				  "4.5W",
725 				  "5.0W"
726 				 };
727 
qsfp_dump(struct hfi1_pportdata * ppd,char * buf,int len)728 int qsfp_dump(struct hfi1_pportdata *ppd, char *buf, int len)
729 {
730 	u8 *cache = &ppd->qsfp_info.cache[0];
731 	u8 bin_buff[QSFP_DUMP_CHUNK];
732 	char lenstr[6];
733 	int sofar;
734 	int bidx = 0;
735 	u8 *atten = &cache[QSFP_ATTEN_OFFS];
736 	u8 *vendor_oui = &cache[QSFP_VOUI_OFFS];
737 	u8 power_byte = 0;
738 
739 	sofar = 0;
740 	lenstr[0] = ' ';
741 	lenstr[1] = '\0';
742 
743 	if (ppd->qsfp_info.cache_valid) {
744 		if (QSFP_IS_CU(cache[QSFP_MOD_TECH_OFFS]))
745 			snprintf(lenstr, sizeof(lenstr), "%dM ",
746 				 cache[QSFP_MOD_LEN_OFFS]);
747 
748 		power_byte = cache[QSFP_MOD_PWR_OFFS];
749 		sofar += scnprintf(buf + sofar, len - sofar, "PWR:%.3sW\n",
750 				pwr_codes[get_qsfp_power_class(power_byte)]);
751 
752 		sofar += scnprintf(buf + sofar, len - sofar, "TECH:%s%s\n",
753 				lenstr,
754 			hfi1_qsfp_devtech[(cache[QSFP_MOD_TECH_OFFS]) >> 4]);
755 
756 		sofar += scnprintf(buf + sofar, len - sofar, "Vendor:%.*s\n",
757 				   QSFP_VEND_LEN, &cache[QSFP_VEND_OFFS]);
758 
759 		sofar += scnprintf(buf + sofar, len - sofar, "OUI:%06X\n",
760 				   QSFP_OUI(vendor_oui));
761 
762 		sofar += scnprintf(buf + sofar, len - sofar, "Part#:%.*s\n",
763 				   QSFP_PN_LEN, &cache[QSFP_PN_OFFS]);
764 
765 		sofar += scnprintf(buf + sofar, len - sofar, "Rev:%.*s\n",
766 				   QSFP_REV_LEN, &cache[QSFP_REV_OFFS]);
767 
768 		if (QSFP_IS_CU(cache[QSFP_MOD_TECH_OFFS]))
769 			sofar += scnprintf(buf + sofar, len - sofar,
770 				"Atten:%d, %d\n",
771 				QSFP_ATTEN_SDR(atten),
772 				QSFP_ATTEN_DDR(atten));
773 
774 		sofar += scnprintf(buf + sofar, len - sofar, "Serial:%.*s\n",
775 				   QSFP_SN_LEN, &cache[QSFP_SN_OFFS]);
776 
777 		sofar += scnprintf(buf + sofar, len - sofar, "Date:%.*s\n",
778 				   QSFP_DATE_LEN, &cache[QSFP_DATE_OFFS]);
779 
780 		sofar += scnprintf(buf + sofar, len - sofar, "Lot:%.*s\n",
781 				   QSFP_LOT_LEN, &cache[QSFP_LOT_OFFS]);
782 
783 		while (bidx < QSFP_DEFAULT_HDR_CNT) {
784 			int iidx;
785 
786 			memcpy(bin_buff, &cache[bidx], QSFP_DUMP_CHUNK);
787 			for (iidx = 0; iidx < QSFP_DUMP_CHUNK; ++iidx) {
788 				sofar += scnprintf(buf + sofar, len - sofar,
789 					" %02X", bin_buff[iidx]);
790 			}
791 			sofar += scnprintf(buf + sofar, len - sofar, "\n");
792 			bidx += QSFP_DUMP_CHUNK;
793 		}
794 	}
795 	return sofar;
796 }
797