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