fs: Avoid premature clearing of capabilities
[cascardo/linux.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(50);
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         clean_i2c_bus(ad->i2c_bus0);
208         ad->i2c_bus0 = NULL;
209         clean_i2c_bus(ad->i2c_bus1);
210         ad->i2c_bus1 = NULL;
211 }
212
213 static int i2c_bus_write(struct hfi1_devdata *dd, struct hfi1_i2c_bus *i2c,
214                          u8 slave_addr, int offset, int offset_size,
215                          u8 *data, u16 len)
216 {
217         int ret;
218         int num_msgs;
219         u8 offset_bytes[2];
220         struct i2c_msg msgs[2];
221
222         switch (offset_size) {
223         case 0:
224                 num_msgs = 1;
225                 msgs[0].addr = slave_addr;
226                 msgs[0].flags = 0;
227                 msgs[0].len = len;
228                 msgs[0].buf = data;
229                 break;
230         case 2:
231                 offset_bytes[1] = (offset >> 8) & 0xff;
232                 /* fall through */
233         case 1:
234                 num_msgs = 2;
235                 offset_bytes[0] = offset & 0xff;
236
237                 msgs[0].addr = slave_addr;
238                 msgs[0].flags = 0;
239                 msgs[0].len = offset_size;
240                 msgs[0].buf = offset_bytes;
241
242                 msgs[1].addr = slave_addr;
243                 msgs[1].flags = I2C_M_NOSTART,
244                 msgs[1].len = len;
245                 msgs[1].buf = data;
246                 break;
247         default:
248                 return -EINVAL;
249         }
250
251         i2c->controlling_dd = dd;
252         ret = i2c_transfer(&i2c->adapter, msgs, num_msgs);
253         if (ret != num_msgs) {
254                 dd_dev_err(dd, "%s: bus %d, i2c slave 0x%x, offset 0x%x, len 0x%x; write failed, ret %d\n",
255                            __func__, i2c->num, slave_addr, offset, len, ret);
256                 return ret < 0 ? ret : -EIO;
257         }
258         return 0;
259 }
260
261 static int i2c_bus_read(struct hfi1_devdata *dd, struct hfi1_i2c_bus *bus,
262                         u8 slave_addr, int offset, int offset_size,
263                         u8 *data, u16 len)
264 {
265         int ret;
266         int num_msgs;
267         u8 offset_bytes[2];
268         struct i2c_msg msgs[2];
269
270         switch (offset_size) {
271         case 0:
272                 num_msgs = 1;
273                 msgs[0].addr = slave_addr;
274                 msgs[0].flags = I2C_M_RD;
275                 msgs[0].len = len;
276                 msgs[0].buf = data;
277                 break;
278         case 2:
279                 offset_bytes[1] = (offset >> 8) & 0xff;
280                 /* fall through */
281         case 1:
282                 num_msgs = 2;
283                 offset_bytes[0] = offset & 0xff;
284
285                 msgs[0].addr = slave_addr;
286                 msgs[0].flags = 0;
287                 msgs[0].len = offset_size;
288                 msgs[0].buf = offset_bytes;
289
290                 msgs[1].addr = slave_addr;
291                 msgs[1].flags = I2C_M_RD,
292                 msgs[1].len = len;
293                 msgs[1].buf = data;
294                 break;
295         default:
296                 return -EINVAL;
297         }
298
299         bus->controlling_dd = dd;
300         ret = i2c_transfer(&bus->adapter, msgs, num_msgs);
301         if (ret != num_msgs) {
302                 dd_dev_err(dd, "%s: bus %d, i2c slave 0x%x, offset 0x%x, len 0x%x; read failed, ret %d\n",
303                            __func__, bus->num, slave_addr, offset, len, ret);
304                 return ret < 0 ? ret : -EIO;
305         }
306         return 0;
307 }
308
309 /*
310  * Raw i2c write.  No set-up or lock checking.
311  *
312  * Return 0 on success, -errno on error.
313  */
314 static int __i2c_write(struct hfi1_pportdata *ppd, u32 target, int i2c_addr,
315                        int offset, void *bp, int len)
316 {
317         struct hfi1_devdata *dd = ppd->dd;
318         struct hfi1_i2c_bus *bus;
319         u8 slave_addr;
320         int offset_size;
321
322         bus = target ? dd->asic_data->i2c_bus1 : dd->asic_data->i2c_bus0;
323         slave_addr = (i2c_addr & 0xff) >> 1; /* convert to 7-bit addr */
324         offset_size = (i2c_addr >> 8) & 0x3;
325         return i2c_bus_write(dd, bus, slave_addr, offset, offset_size, bp, len);
326 }
327
328 /*
329  * Caller must hold the i2c chain resource.
330  *
331  * Return number of bytes written, or -errno.
332  */
333 int i2c_write(struct hfi1_pportdata *ppd, u32 target, int i2c_addr, int offset,
334               void *bp, int len)
335 {
336         int ret;
337
338         if (!check_chip_resource(ppd->dd, i2c_target(target), __func__))
339                 return -EACCES;
340
341         ret = __i2c_write(ppd, target, i2c_addr, offset, bp, len);
342         if (ret)
343                 return ret;
344
345         return len;
346 }
347
348 /*
349  * Raw i2c read.  No set-up or lock checking.
350  *
351  * Return 0 on success, -errno on error.
352  */
353 static int __i2c_read(struct hfi1_pportdata *ppd, u32 target, int i2c_addr,
354                       int offset, void *bp, int len)
355 {
356         struct hfi1_devdata *dd = ppd->dd;
357         struct hfi1_i2c_bus *bus;
358         u8 slave_addr;
359         int offset_size;
360
361         bus = target ? dd->asic_data->i2c_bus1 : dd->asic_data->i2c_bus0;
362         slave_addr = (i2c_addr & 0xff) >> 1; /* convert to 7-bit addr */
363         offset_size = (i2c_addr >> 8) & 0x3;
364         return i2c_bus_read(dd, bus, slave_addr, offset, offset_size, bp, len);
365 }
366
367 /*
368  * Caller must hold the i2c chain resource.
369  *
370  * Return number of bytes read, or -errno.
371  */
372 int i2c_read(struct hfi1_pportdata *ppd, u32 target, int i2c_addr, int offset,
373              void *bp, int len)
374 {
375         int ret;
376
377         if (!check_chip_resource(ppd->dd, i2c_target(target), __func__))
378                 return -EACCES;
379
380         ret = __i2c_read(ppd, target, i2c_addr, offset, bp, len);
381         if (ret)
382                 return ret;
383
384         return len;
385 }
386
387 /*
388  * Write page n, offset m of QSFP memory as defined by SFF 8636
389  * by writing @addr = ((256 * n) + m)
390  *
391  * Caller must hold the i2c chain resource.
392  *
393  * Return number of bytes written or -errno.
394  */
395 int qsfp_write(struct hfi1_pportdata *ppd, u32 target, int addr, void *bp,
396                int len)
397 {
398         int count = 0;
399         int offset;
400         int nwrite;
401         int ret = 0;
402         u8 page;
403
404         if (!check_chip_resource(ppd->dd, i2c_target(target), __func__))
405                 return -EACCES;
406
407         while (count < len) {
408                 /*
409                  * Set the qsfp page based on a zero-based address
410                  * and a page size of QSFP_PAGESIZE bytes.
411                  */
412                 page = (u8)(addr / QSFP_PAGESIZE);
413
414                 ret = __i2c_write(ppd, target, QSFP_DEV | QSFP_OFFSET_SIZE,
415                                   QSFP_PAGE_SELECT_BYTE_OFFS, &page, 1);
416                 /* QSFPs require a 5-10msec delay after write operations */
417                 mdelay(5);
418                 if (ret) {
419                         hfi1_dev_porterr(ppd->dd, ppd->port,
420                                          "QSFP chain %d can't write QSFP_PAGE_SELECT_BYTE: %d\n",
421                                          target, ret);
422                         break;
423                 }
424
425                 offset = addr % QSFP_PAGESIZE;
426                 nwrite = len - count;
427                 /* truncate write to boundary if crossing boundary */
428                 if (((addr % QSFP_RW_BOUNDARY) + nwrite) > QSFP_RW_BOUNDARY)
429                         nwrite = QSFP_RW_BOUNDARY - (addr % QSFP_RW_BOUNDARY);
430
431                 ret = __i2c_write(ppd, target, QSFP_DEV | QSFP_OFFSET_SIZE,
432                                   offset, bp + count, nwrite);
433                 /* QSFPs require a 5-10msec delay after write operations */
434                 mdelay(5);
435                 if (ret)        /* stop on error */
436                         break;
437
438                 count += nwrite;
439                 addr += nwrite;
440         }
441
442         if (ret < 0)
443                 return ret;
444         return count;
445 }
446
447 /*
448  * Perform a stand-alone single QSFP write.  Acquire the resource, do the
449  * write, then release the resource.
450  */
451 int one_qsfp_write(struct hfi1_pportdata *ppd, u32 target, int addr, void *bp,
452                    int len)
453 {
454         struct hfi1_devdata *dd = ppd->dd;
455         u32 resource = qsfp_resource(dd);
456         int ret;
457
458         ret = acquire_chip_resource(dd, resource, QSFP_WAIT);
459         if (ret)
460                 return ret;
461         ret = qsfp_write(ppd, target, addr, bp, len);
462         release_chip_resource(dd, resource);
463
464         return ret;
465 }
466
467 /*
468  * Access page n, offset m of QSFP memory as defined by SFF 8636
469  * by reading @addr = ((256 * n) + m)
470  *
471  * Caller must hold the i2c chain resource.
472  *
473  * Return the number of bytes read or -errno.
474  */
475 int qsfp_read(struct hfi1_pportdata *ppd, u32 target, int addr, void *bp,
476               int len)
477 {
478         int count = 0;
479         int offset;
480         int nread;
481         int ret = 0;
482         u8 page;
483
484         if (!check_chip_resource(ppd->dd, i2c_target(target), __func__))
485                 return -EACCES;
486
487         while (count < len) {
488                 /*
489                  * Set the qsfp page based on a zero-based address
490                  * and a page size of QSFP_PAGESIZE bytes.
491                  */
492                 page = (u8)(addr / QSFP_PAGESIZE);
493                 ret = __i2c_write(ppd, target, QSFP_DEV | QSFP_OFFSET_SIZE,
494                                   QSFP_PAGE_SELECT_BYTE_OFFS, &page, 1);
495                 /* QSFPs require a 5-10msec delay after write operations */
496                 mdelay(5);
497                 if (ret) {
498                         hfi1_dev_porterr(ppd->dd, ppd->port,
499                                          "QSFP chain %d can't write QSFP_PAGE_SELECT_BYTE: %d\n",
500                                          target, ret);
501                         break;
502                 }
503
504                 offset = addr % QSFP_PAGESIZE;
505                 nread = len - count;
506                 /* truncate read to boundary if crossing boundary */
507                 if (((addr % QSFP_RW_BOUNDARY) + nread) > QSFP_RW_BOUNDARY)
508                         nread = QSFP_RW_BOUNDARY - (addr % QSFP_RW_BOUNDARY);
509
510                 ret = __i2c_read(ppd, target, QSFP_DEV | QSFP_OFFSET_SIZE,
511                                  offset, bp + count, nread);
512                 if (ret)        /* stop on error */
513                         break;
514
515                 count += nread;
516                 addr += nread;
517         }
518
519         if (ret < 0)
520                 return ret;
521         return count;
522 }
523
524 /*
525  * Perform a stand-alone single QSFP read.  Acquire the resource, do the
526  * read, then release the resource.
527  */
528 int one_qsfp_read(struct hfi1_pportdata *ppd, u32 target, int addr, void *bp,
529                   int len)
530 {
531         struct hfi1_devdata *dd = ppd->dd;
532         u32 resource = qsfp_resource(dd);
533         int ret;
534
535         ret = acquire_chip_resource(dd, resource, QSFP_WAIT);
536         if (ret)
537                 return ret;
538         ret = qsfp_read(ppd, target, addr, bp, len);
539         release_chip_resource(dd, resource);
540
541         return ret;
542 }
543
544 /*
545  * This function caches the QSFP memory range in 128 byte chunks.
546  * As an example, the next byte after address 255 is byte 128 from
547  * upper page 01H (if existing) rather than byte 0 from lower page 00H.
548  * Access page n, offset m of QSFP memory as defined by SFF 8636
549  * in the cache by reading byte ((128 * n) + m)
550  * The calls to qsfp_{read,write} in this function correctly handle the
551  * address map difference between this mapping and the mapping implemented
552  * by those functions
553  *
554  * The caller must be holding the QSFP i2c chain resource.
555  */
556 int refresh_qsfp_cache(struct hfi1_pportdata *ppd, struct qsfp_data *cp)
557 {
558         u32 target = ppd->dd->hfi1_id;
559         int ret;
560         unsigned long flags;
561         u8 *cache = &cp->cache[0];
562
563         /* ensure sane contents on invalid reads, for cable swaps */
564         memset(cache, 0, (QSFP_MAX_NUM_PAGES * 128));
565         spin_lock_irqsave(&ppd->qsfp_info.qsfp_lock, flags);
566         ppd->qsfp_info.cache_valid = 0;
567         spin_unlock_irqrestore(&ppd->qsfp_info.qsfp_lock, flags);
568
569         if (!qsfp_mod_present(ppd)) {
570                 ret = -ENODEV;
571                 goto bail;
572         }
573
574         ret = qsfp_read(ppd, target, 0, cache, QSFP_PAGESIZE);
575         if (ret != QSFP_PAGESIZE) {
576                 dd_dev_info(ppd->dd,
577                             "%s: Page 0 read failed, expected %d, got %d\n",
578                             __func__, QSFP_PAGESIZE, ret);
579                 goto bail;
580         }
581
582         /* Is paging enabled? */
583         if (!(cache[2] & 4)) {
584                 /* Paging enabled, page 03 required */
585                 if ((cache[195] & 0xC0) == 0xC0) {
586                         /* all */
587                         ret = qsfp_read(ppd, target, 384, cache + 256, 128);
588                         if (ret <= 0 || ret != 128) {
589                                 dd_dev_info(ppd->dd, "%s failed\n", __func__);
590                                 goto bail;
591                         }
592                         ret = qsfp_read(ppd, target, 640, cache + 384, 128);
593                         if (ret <= 0 || ret != 128) {
594                                 dd_dev_info(ppd->dd, "%s failed\n", __func__);
595                                 goto bail;
596                         }
597                         ret = qsfp_read(ppd, target, 896, cache + 512, 128);
598                         if (ret <= 0 || ret != 128) {
599                                 dd_dev_info(ppd->dd, "%s failed\n", __func__);
600                                 goto bail;
601                         }
602                 } else if ((cache[195] & 0x80) == 0x80) {
603                         /* only page 2 and 3 */
604                         ret = qsfp_read(ppd, target, 640, cache + 384, 128);
605                         if (ret <= 0 || ret != 128) {
606                                 dd_dev_info(ppd->dd, "%s failed\n", __func__);
607                                 goto bail;
608                         }
609                         ret = qsfp_read(ppd, target, 896, cache + 512, 128);
610                         if (ret <= 0 || ret != 128) {
611                                 dd_dev_info(ppd->dd, "%s failed\n", __func__);
612                                 goto bail;
613                         }
614                 } else if ((cache[195] & 0x40) == 0x40) {
615                         /* only page 1 and 3 */
616                         ret = qsfp_read(ppd, target, 384, cache + 256, 128);
617                         if (ret <= 0 || ret != 128) {
618                                 dd_dev_info(ppd->dd, "%s failed\n", __func__);
619                                 goto bail;
620                         }
621                         ret = qsfp_read(ppd, target, 896, cache + 512, 128);
622                         if (ret <= 0 || ret != 128) {
623                                 dd_dev_info(ppd->dd, "%s failed\n", __func__);
624                                 goto bail;
625                         }
626                 } else {
627                         /* only page 3 */
628                         ret = qsfp_read(ppd, target, 896, cache + 512, 128);
629                         if (ret <= 0 || ret != 128) {
630                                 dd_dev_info(ppd->dd, "%s failed\n", __func__);
631                                 goto bail;
632                         }
633                 }
634         }
635
636         spin_lock_irqsave(&ppd->qsfp_info.qsfp_lock, flags);
637         ppd->qsfp_info.cache_valid = 1;
638         ppd->qsfp_info.cache_refresh_required = 0;
639         spin_unlock_irqrestore(&ppd->qsfp_info.qsfp_lock, flags);
640
641         return 0;
642
643 bail:
644         memset(cache, 0, (QSFP_MAX_NUM_PAGES * 128));
645         return ret;
646 }
647
648 const char * const hfi1_qsfp_devtech[16] = {
649         "850nm VCSEL", "1310nm VCSEL", "1550nm VCSEL", "1310nm FP",
650         "1310nm DFB", "1550nm DFB", "1310nm EML", "1550nm EML",
651         "Cu Misc", "1490nm DFB", "Cu NoEq", "Cu Eq",
652         "Undef", "Cu Active BothEq", "Cu FarEq", "Cu NearEq"
653 };
654
655 #define QSFP_DUMP_CHUNK 16 /* Holds longest string */
656 #define QSFP_DEFAULT_HDR_CNT 224
657
658 #define QSFP_PWR(pbyte) (((pbyte) >> 6) & 3)
659 #define QSFP_HIGH_PWR(pbyte) ((pbyte) & 3)
660 /* For use with QSFP_HIGH_PWR macro */
661 #define QSFP_HIGH_PWR_UNUSED    0 /* Bits [1:0] = 00 implies low power module */
662
663 /*
664  * Takes power class byte [Page 00 Byte 129] in SFF 8636
665  * Returns power class as integer (1 through 7, per SFF 8636 rev 2.4)
666  */
667 int get_qsfp_power_class(u8 power_byte)
668 {
669         if (QSFP_HIGH_PWR(power_byte) == QSFP_HIGH_PWR_UNUSED)
670                 /* power classes count from 1, their bit encodings from 0 */
671                 return (QSFP_PWR(power_byte) + 1);
672         /*
673          * 00 in the high power classes stands for unused, bringing
674          * balance to the off-by-1 offset above, we add 4 here to
675          * account for the difference between the low and high power
676          * groups
677          */
678         return (QSFP_HIGH_PWR(power_byte) + 4);
679 }
680
681 int qsfp_mod_present(struct hfi1_pportdata *ppd)
682 {
683         struct hfi1_devdata *dd = ppd->dd;
684         u64 reg;
685
686         reg = read_csr(dd, dd->hfi1_id ? ASIC_QSFP2_IN : ASIC_QSFP1_IN);
687         return !(reg & QSFP_HFI0_MODPRST_N);
688 }
689
690 /*
691  * This function maps QSFP memory addresses in 128 byte chunks in the following
692  * fashion per the CableInfo SMA query definition in the IBA 1.3 spec/OPA Gen 1
693  * spec
694  * For addr 000-127, lower page 00h
695  * For addr 128-255, upper page 00h
696  * For addr 256-383, upper page 01h
697  * For addr 384-511, upper page 02h
698  * For addr 512-639, upper page 03h
699  *
700  * For addresses beyond this range, it returns the invalid range of data buffer
701  * set to 0.
702  * For upper pages that are optional, if they are not valid, returns the
703  * particular range of bytes in the data buffer set to 0.
704  */
705 int get_cable_info(struct hfi1_devdata *dd, u32 port_num, u32 addr, u32 len,
706                    u8 *data)
707 {
708         struct hfi1_pportdata *ppd;
709         u32 excess_len = 0;
710         int ret = 0;
711
712         if (port_num > dd->num_pports || port_num < 1) {
713                 dd_dev_info(dd, "%s: Invalid port number %d\n",
714                             __func__, port_num);
715                 ret = -EINVAL;
716                 goto set_zeroes;
717         }
718
719         ppd = dd->pport + (port_num - 1);
720         if (!qsfp_mod_present(ppd)) {
721                 ret = -ENODEV;
722                 goto set_zeroes;
723         }
724
725         if (!ppd->qsfp_info.cache_valid) {
726                 ret = -EINVAL;
727                 goto set_zeroes;
728         }
729
730         if (addr >= (QSFP_MAX_NUM_PAGES * 128)) {
731                 ret = -ERANGE;
732                 goto set_zeroes;
733         }
734
735         if ((addr + len) > (QSFP_MAX_NUM_PAGES * 128)) {
736                 excess_len = (addr + len) - (QSFP_MAX_NUM_PAGES * 128);
737                 memcpy(data, &ppd->qsfp_info.cache[addr], (len - excess_len));
738                 data += (len - excess_len);
739                 goto set_zeroes;
740         }
741
742         memcpy(data, &ppd->qsfp_info.cache[addr], len);
743         return 0;
744
745 set_zeroes:
746         memset(data, 0, excess_len);
747         return ret;
748 }
749
750 static const char *pwr_codes[8] = {"N/AW",
751                                   "1.5W",
752                                   "2.0W",
753                                   "2.5W",
754                                   "3.5W",
755                                   "4.0W",
756                                   "4.5W",
757                                   "5.0W"
758                                  };
759
760 int qsfp_dump(struct hfi1_pportdata *ppd, char *buf, int len)
761 {
762         u8 *cache = &ppd->qsfp_info.cache[0];
763         u8 bin_buff[QSFP_DUMP_CHUNK];
764         char lenstr[6];
765         int sofar;
766         int bidx = 0;
767         u8 *atten = &cache[QSFP_ATTEN_OFFS];
768         u8 *vendor_oui = &cache[QSFP_VOUI_OFFS];
769         u8 power_byte = 0;
770
771         sofar = 0;
772         lenstr[0] = ' ';
773         lenstr[1] = '\0';
774
775         if (ppd->qsfp_info.cache_valid) {
776                 if (QSFP_IS_CU(cache[QSFP_MOD_TECH_OFFS]))
777                         snprintf(lenstr, sizeof(lenstr), "%dM ",
778                                  cache[QSFP_MOD_LEN_OFFS]);
779
780                 power_byte = cache[QSFP_MOD_PWR_OFFS];
781                 sofar += scnprintf(buf + sofar, len - sofar, "PWR:%.3sW\n",
782                                 pwr_codes[get_qsfp_power_class(power_byte)]);
783
784                 sofar += scnprintf(buf + sofar, len - sofar, "TECH:%s%s\n",
785                                 lenstr,
786                         hfi1_qsfp_devtech[(cache[QSFP_MOD_TECH_OFFS]) >> 4]);
787
788                 sofar += scnprintf(buf + sofar, len - sofar, "Vendor:%.*s\n",
789                                    QSFP_VEND_LEN, &cache[QSFP_VEND_OFFS]);
790
791                 sofar += scnprintf(buf + sofar, len - sofar, "OUI:%06X\n",
792                                    QSFP_OUI(vendor_oui));
793
794                 sofar += scnprintf(buf + sofar, len - sofar, "Part#:%.*s\n",
795                                    QSFP_PN_LEN, &cache[QSFP_PN_OFFS]);
796
797                 sofar += scnprintf(buf + sofar, len - sofar, "Rev:%.*s\n",
798                                    QSFP_REV_LEN, &cache[QSFP_REV_OFFS]);
799
800                 if (QSFP_IS_CU(cache[QSFP_MOD_TECH_OFFS]))
801                         sofar += scnprintf(buf + sofar, len - sofar,
802                                 "Atten:%d, %d\n",
803                                 QSFP_ATTEN_SDR(atten),
804                                 QSFP_ATTEN_DDR(atten));
805
806                 sofar += scnprintf(buf + sofar, len - sofar, "Serial:%.*s\n",
807                                    QSFP_SN_LEN, &cache[QSFP_SN_OFFS]);
808
809                 sofar += scnprintf(buf + sofar, len - sofar, "Date:%.*s\n",
810                                    QSFP_DATE_LEN, &cache[QSFP_DATE_OFFS]);
811
812                 sofar += scnprintf(buf + sofar, len - sofar, "Lot:%.*s\n",
813                                    QSFP_LOT_LEN, &cache[QSFP_LOT_OFFS]);
814
815                 while (bidx < QSFP_DEFAULT_HDR_CNT) {
816                         int iidx;
817
818                         memcpy(bin_buff, &cache[bidx], QSFP_DUMP_CHUNK);
819                         for (iidx = 0; iidx < QSFP_DUMP_CHUNK; ++iidx) {
820                                 sofar += scnprintf(buf + sofar, len - sofar,
821                                         " %02X", bin_buff[iidx]);
822                         }
823                         sofar += scnprintf(buf + sofar, len - sofar, "\n");
824                         bidx += QSFP_DUMP_CHUNK;
825                 }
826         }
827         return sofar;
828 }