Merge branch 'for-3.15' of git://linux-nfs.org/~bfields/linux
[cascardo/linux.git] / drivers / misc / genwqe / card_base.c
1 /**
2  * IBM Accelerator Family 'GenWQE'
3  *
4  * (C) Copyright IBM Corp. 2013
5  *
6  * Author: Frank Haverkamp <haver@linux.vnet.ibm.com>
7  * Author: Joerg-Stephan Vogt <jsvogt@de.ibm.com>
8  * Author: Michael Jung <mijung@de.ibm.com>
9  * Author: Michael Ruettger <michael@ibmra.de>
10  *
11  * This program is free software; you can redistribute it and/or modify
12  * it under the terms of the GNU General Public License (version 2 only)
13  * as published by the Free Software Foundation.
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18  * GNU General Public License for more details.
19  */
20
21 /*
22  * Module initialization and PCIe setup. Card health monitoring and
23  * recovery functionality. Character device creation and deletion are
24  * controlled from here.
25  */
26
27 #include <linux/module.h>
28 #include <linux/types.h>
29 #include <linux/pci.h>
30 #include <linux/err.h>
31 #include <linux/aer.h>
32 #include <linux/string.h>
33 #include <linux/sched.h>
34 #include <linux/wait.h>
35 #include <linux/delay.h>
36 #include <linux/dma-mapping.h>
37 #include <linux/module.h>
38 #include <linux/notifier.h>
39 #include <linux/device.h>
40 #include <linux/log2.h>
41 #include <linux/genwqe/genwqe_card.h>
42
43 #include "card_base.h"
44 #include "card_ddcb.h"
45
46 MODULE_AUTHOR("Frank Haverkamp <haver@linux.vnet.ibm.com>");
47 MODULE_AUTHOR("Michael Ruettger <michael@ibmra.de>");
48 MODULE_AUTHOR("Joerg-Stephan Vogt <jsvogt@de.ibm.com>");
49 MODULE_AUTHOR("Michal Jung <mijung@de.ibm.com>");
50
51 MODULE_DESCRIPTION("GenWQE Card");
52 MODULE_VERSION(DRV_VERS_STRING);
53 MODULE_LICENSE("GPL");
54
55 static char genwqe_driver_name[] = GENWQE_DEVNAME;
56 static struct class *class_genwqe;
57 static struct dentry *debugfs_genwqe;
58 static struct genwqe_dev *genwqe_devices[GENWQE_CARD_NO_MAX];
59
60 /* PCI structure for identifying device by PCI vendor and device ID */
61 static DEFINE_PCI_DEVICE_TABLE(genwqe_device_table) = {
62         { .vendor      = PCI_VENDOR_ID_IBM,
63           .device      = PCI_DEVICE_GENWQE,
64           .subvendor   = PCI_SUBVENDOR_ID_IBM,
65           .subdevice   = PCI_SUBSYSTEM_ID_GENWQE5,
66           .class       = (PCI_CLASSCODE_GENWQE5 << 8),
67           .class_mask  = ~0,
68           .driver_data = 0 },
69
70         /* Initial SR-IOV bring-up image */
71         { .vendor      = PCI_VENDOR_ID_IBM,
72           .device      = PCI_DEVICE_GENWQE,
73           .subvendor   = PCI_SUBVENDOR_ID_IBM_SRIOV,
74           .subdevice   = PCI_SUBSYSTEM_ID_GENWQE5_SRIOV,
75           .class       = (PCI_CLASSCODE_GENWQE5_SRIOV << 8),
76           .class_mask  = ~0,
77           .driver_data = 0 },
78
79         { .vendor      = PCI_VENDOR_ID_IBM,  /* VF Vendor ID */
80           .device      = 0x0000,  /* VF Device ID */
81           .subvendor   = PCI_SUBVENDOR_ID_IBM_SRIOV,
82           .subdevice   = PCI_SUBSYSTEM_ID_GENWQE5_SRIOV,
83           .class       = (PCI_CLASSCODE_GENWQE5_SRIOV << 8),
84           .class_mask  = ~0,
85           .driver_data = 0 },
86
87         /* Fixed up image */
88         { .vendor      = PCI_VENDOR_ID_IBM,
89           .device      = PCI_DEVICE_GENWQE,
90           .subvendor   = PCI_SUBVENDOR_ID_IBM_SRIOV,
91           .subdevice   = PCI_SUBSYSTEM_ID_GENWQE5,
92           .class       = (PCI_CLASSCODE_GENWQE5_SRIOV << 8),
93           .class_mask  = ~0,
94           .driver_data = 0 },
95
96         { .vendor      = PCI_VENDOR_ID_IBM,  /* VF Vendor ID */
97           .device      = 0x0000,  /* VF Device ID */
98           .subvendor   = PCI_SUBVENDOR_ID_IBM_SRIOV,
99           .subdevice   = PCI_SUBSYSTEM_ID_GENWQE5,
100           .class       = (PCI_CLASSCODE_GENWQE5_SRIOV << 8),
101           .class_mask  = ~0,
102           .driver_data = 0 },
103
104         /* Even one more ... */
105         { .vendor      = PCI_VENDOR_ID_IBM,
106           .device      = PCI_DEVICE_GENWQE,
107           .subvendor   = PCI_SUBVENDOR_ID_IBM,
108           .subdevice   = PCI_SUBSYSTEM_ID_GENWQE5_NEW,
109           .class       = (PCI_CLASSCODE_GENWQE5 << 8),
110           .class_mask  = ~0,
111           .driver_data = 0 },
112
113         { 0, }                  /* 0 terminated list. */
114 };
115
116 MODULE_DEVICE_TABLE(pci, genwqe_device_table);
117
118 /**
119  * genwqe_dev_alloc() - Create and prepare a new card descriptor
120  *
121  * Return: Pointer to card descriptor, or ERR_PTR(err) on error
122  */
123 static struct genwqe_dev *genwqe_dev_alloc(void)
124 {
125         unsigned int i = 0, j;
126         struct genwqe_dev *cd;
127
128         for (i = 0; i < GENWQE_CARD_NO_MAX; i++) {
129                 if (genwqe_devices[i] == NULL)
130                         break;
131         }
132         if (i >= GENWQE_CARD_NO_MAX)
133                 return ERR_PTR(-ENODEV);
134
135         cd = kzalloc(sizeof(struct genwqe_dev), GFP_KERNEL);
136         if (!cd)
137                 return ERR_PTR(-ENOMEM);
138
139         cd->card_idx = i;
140         cd->class_genwqe = class_genwqe;
141         cd->debugfs_genwqe = debugfs_genwqe;
142
143         init_waitqueue_head(&cd->queue_waitq);
144
145         spin_lock_init(&cd->file_lock);
146         INIT_LIST_HEAD(&cd->file_list);
147
148         cd->card_state = GENWQE_CARD_UNUSED;
149         spin_lock_init(&cd->print_lock);
150
151         cd->ddcb_software_timeout = genwqe_ddcb_software_timeout;
152         cd->kill_timeout = genwqe_kill_timeout;
153
154         for (j = 0; j < GENWQE_MAX_VFS; j++)
155                 cd->vf_jobtimeout_msec[j] = genwqe_vf_jobtimeout_msec;
156
157         genwqe_devices[i] = cd;
158         return cd;
159 }
160
161 static void genwqe_dev_free(struct genwqe_dev *cd)
162 {
163         if (!cd)
164                 return;
165
166         genwqe_devices[cd->card_idx] = NULL;
167         kfree(cd);
168 }
169
170 /**
171  * genwqe_bus_reset() - Card recovery
172  *
173  * pci_reset_function() will recover the device and ensure that the
174  * registers are accessible again when it completes with success. If
175  * not, the card will stay dead and registers will be unaccessible
176  * still.
177  */
178 static int genwqe_bus_reset(struct genwqe_dev *cd)
179 {
180         int bars, rc = 0;
181         struct pci_dev *pci_dev = cd->pci_dev;
182         void __iomem *mmio;
183
184         if (cd->err_inject & GENWQE_INJECT_BUS_RESET_FAILURE)
185                 return -EIO;
186
187         mmio = cd->mmio;
188         cd->mmio = NULL;
189         pci_iounmap(pci_dev, mmio);
190
191         bars = pci_select_bars(pci_dev, IORESOURCE_MEM);
192         pci_release_selected_regions(pci_dev, bars);
193
194         /*
195          * Firmware/BIOS might change memory mapping during bus reset.
196          * Settings like enable bus-mastering, ... are backuped and
197          * restored by the pci_reset_function().
198          */
199         dev_dbg(&pci_dev->dev, "[%s] pci_reset function ...\n", __func__);
200         rc = pci_reset_function(pci_dev);
201         if (rc) {
202                 dev_err(&pci_dev->dev,
203                         "[%s] err: failed reset func (rc %d)\n", __func__, rc);
204                 return rc;
205         }
206         dev_dbg(&pci_dev->dev, "[%s] done with rc=%d\n", __func__, rc);
207
208         /*
209          * Here is the right spot to clear the register read
210          * failure. pci_bus_reset() does this job in real systems.
211          */
212         cd->err_inject &= ~(GENWQE_INJECT_HARDWARE_FAILURE |
213                             GENWQE_INJECT_GFIR_FATAL |
214                             GENWQE_INJECT_GFIR_INFO);
215
216         rc = pci_request_selected_regions(pci_dev, bars, genwqe_driver_name);
217         if (rc) {
218                 dev_err(&pci_dev->dev,
219                         "[%s] err: request bars failed (%d)\n", __func__, rc);
220                 return -EIO;
221         }
222
223         cd->mmio = pci_iomap(pci_dev, 0, 0);
224         if (cd->mmio == NULL) {
225                 dev_err(&pci_dev->dev,
226                         "[%s] err: mapping BAR0 failed\n", __func__);
227                 return -ENOMEM;
228         }
229         return 0;
230 }
231
232 /*
233  * Hardware circumvention section. Certain bitstreams in our test-lab
234  * had different kinds of problems. Here is where we adjust those
235  * bitstreams to function will with this version of our device driver.
236  *
237  * Thise circumventions are applied to the physical function only.
238  * The magical numbers below are identifying development/manufacturing
239  * versions of the bitstream used on the card.
240  *
241  * Turn off error reporting for old/manufacturing images.
242  */
243
244 bool genwqe_need_err_masking(struct genwqe_dev *cd)
245 {
246         return (cd->slu_unitcfg & 0xFFFF0ull) < 0x32170ull;
247 }
248
249 static void genwqe_tweak_hardware(struct genwqe_dev *cd)
250 {
251         struct pci_dev *pci_dev = cd->pci_dev;
252
253         /* Mask FIRs for development images */
254         if (((cd->slu_unitcfg & 0xFFFF0ull) >= 0x32000ull) &&
255             ((cd->slu_unitcfg & 0xFFFF0ull) <= 0x33250ull)) {
256                 dev_warn(&pci_dev->dev,
257                          "FIRs masked due to bitstream %016llx.%016llx\n",
258                          cd->slu_unitcfg, cd->app_unitcfg);
259
260                 __genwqe_writeq(cd, IO_APP_SEC_LEM_DEBUG_OVR,
261                                 0xFFFFFFFFFFFFFFFFull);
262
263                 __genwqe_writeq(cd, IO_APP_ERR_ACT_MASK,
264                                 0x0000000000000000ull);
265         }
266 }
267
268 /**
269  * genwqe_recovery_on_fatal_gfir_required() - Version depended actions
270  *
271  * Bitstreams older than 2013-02-17 have a bug where fatal GFIRs must
272  * be ignored. This is e.g. true for the bitstream we gave to the card
273  * manufacturer, but also for some old bitstreams we released to our
274  * test-lab.
275  */
276 int genwqe_recovery_on_fatal_gfir_required(struct genwqe_dev *cd)
277 {
278         return (cd->slu_unitcfg & 0xFFFF0ull) >= 0x32170ull;
279 }
280
281 int genwqe_flash_readback_fails(struct genwqe_dev *cd)
282 {
283         return (cd->slu_unitcfg & 0xFFFF0ull) < 0x32170ull;
284 }
285
286 /**
287  * genwqe_T_psec() - Calculate PF/VF timeout register content
288  *
289  * Note: From a design perspective it turned out to be a bad idea to
290  * use codes here to specifiy the frequency/speed values. An old
291  * driver cannot understand new codes and is therefore always a
292  * problem. Better is to measure out the value or put the
293  * speed/frequency directly into a register which is always a valid
294  * value for old as well as for new software.
295  */
296 /* T = 1/f */
297 static int genwqe_T_psec(struct genwqe_dev *cd)
298 {
299         u16 speed;      /* 1/f -> 250,  200,  166,  175 */
300         static const int T[] = { 4000, 5000, 6000, 5714 };
301
302         speed = (u16)((cd->slu_unitcfg >> 28) & 0x0full);
303         if (speed >= ARRAY_SIZE(T))
304                 return -1;      /* illegal value */
305
306         return T[speed];
307 }
308
309 /**
310  * genwqe_setup_pf_jtimer() - Setup PF hardware timeouts for DDCB execution
311  *
312  * Do this _after_ card_reset() is called. Otherwise the values will
313  * vanish. The settings need to be done when the queues are inactive.
314  *
315  * The max. timeout value is 2^(10+x) * T (6ns for 166MHz) * 15/16.
316  * The min. timeout value is 2^(10+x) * T (6ns for 166MHz) * 14/16.
317  */
318 static bool genwqe_setup_pf_jtimer(struct genwqe_dev *cd)
319 {
320         u32 T = genwqe_T_psec(cd);
321         u64 x;
322
323         if (genwqe_pf_jobtimeout_msec == 0)
324                 return false;
325
326         /* PF: large value needed, flash update 2sec per block */
327         x = ilog2(genwqe_pf_jobtimeout_msec *
328                   16000000000uL/(T * 15)) - 10;
329
330         genwqe_write_vreg(cd, IO_SLC_VF_APPJOB_TIMEOUT,
331                           0xff00 | (x & 0xff), 0);
332         return true;
333 }
334
335 /**
336  * genwqe_setup_vf_jtimer() - Setup VF hardware timeouts for DDCB execution
337  */
338 static bool genwqe_setup_vf_jtimer(struct genwqe_dev *cd)
339 {
340         struct pci_dev *pci_dev = cd->pci_dev;
341         unsigned int vf;
342         u32 T = genwqe_T_psec(cd);
343         u64 x;
344
345         for (vf = 0; vf < pci_sriov_get_totalvfs(pci_dev); vf++) {
346
347                 if (cd->vf_jobtimeout_msec[vf] == 0)
348                         continue;
349
350                 x = ilog2(cd->vf_jobtimeout_msec[vf] *
351                           16000000000uL/(T * 15)) - 10;
352
353                 genwqe_write_vreg(cd, IO_SLC_VF_APPJOB_TIMEOUT,
354                                   0xff00 | (x & 0xff), vf + 1);
355         }
356         return true;
357 }
358
359 static int genwqe_ffdc_buffs_alloc(struct genwqe_dev *cd)
360 {
361         unsigned int type, e = 0;
362
363         for (type = 0; type < GENWQE_DBG_UNITS; type++) {
364                 switch (type) {
365                 case GENWQE_DBG_UNIT0:
366                         e = genwqe_ffdc_buff_size(cd, 0);
367                         break;
368                 case GENWQE_DBG_UNIT1:
369                         e = genwqe_ffdc_buff_size(cd, 1);
370                         break;
371                 case GENWQE_DBG_UNIT2:
372                         e = genwqe_ffdc_buff_size(cd, 2);
373                         break;
374                 case GENWQE_DBG_REGS:
375                         e = GENWQE_FFDC_REGS;
376                         break;
377                 }
378
379                 /* currently support only the debug units mentioned here */
380                 cd->ffdc[type].entries = e;
381                 cd->ffdc[type].regs = kmalloc(e * sizeof(struct genwqe_reg),
382                                               GFP_KERNEL);
383                 /*
384                  * regs == NULL is ok, the using code treats this as no regs,
385                  * Printing warning is ok in this case.
386                  */
387         }
388         return 0;
389 }
390
391 static void genwqe_ffdc_buffs_free(struct genwqe_dev *cd)
392 {
393         unsigned int type;
394
395         for (type = 0; type < GENWQE_DBG_UNITS; type++) {
396                 kfree(cd->ffdc[type].regs);
397                 cd->ffdc[type].regs = NULL;
398         }
399 }
400
401 static int genwqe_read_ids(struct genwqe_dev *cd)
402 {
403         int err = 0;
404         int slu_id;
405         struct pci_dev *pci_dev = cd->pci_dev;
406
407         cd->slu_unitcfg = __genwqe_readq(cd, IO_SLU_UNITCFG);
408         if (cd->slu_unitcfg == IO_ILLEGAL_VALUE) {
409                 dev_err(&pci_dev->dev,
410                         "err: SLUID=%016llx\n", cd->slu_unitcfg);
411                 err = -EIO;
412                 goto out_err;
413         }
414
415         slu_id = genwqe_get_slu_id(cd);
416         if (slu_id < GENWQE_SLU_ARCH_REQ || slu_id == 0xff) {
417                 dev_err(&pci_dev->dev,
418                         "err: incompatible SLU Architecture %u\n", slu_id);
419                 err = -ENOENT;
420                 goto out_err;
421         }
422
423         cd->app_unitcfg = __genwqe_readq(cd, IO_APP_UNITCFG);
424         if (cd->app_unitcfg == IO_ILLEGAL_VALUE) {
425                 dev_err(&pci_dev->dev,
426                         "err: APPID=%016llx\n", cd->app_unitcfg);
427                 err = -EIO;
428                 goto out_err;
429         }
430         genwqe_read_app_id(cd, cd->app_name, sizeof(cd->app_name));
431
432         /*
433          * Is access to all registers possible? If we are a VF the
434          * answer is obvious. If we run fully virtualized, we need to
435          * check if we can access all registers. If we do not have
436          * full access we will cause an UR and some informational FIRs
437          * in the PF, but that should not harm.
438          */
439         if (pci_dev->is_virtfn)
440                 cd->is_privileged = 0;
441         else
442                 cd->is_privileged = (__genwqe_readq(cd, IO_SLU_BITSTREAM)
443                                      != IO_ILLEGAL_VALUE);
444
445  out_err:
446         return err;
447 }
448
449 static int genwqe_start(struct genwqe_dev *cd)
450 {
451         int err;
452         struct pci_dev *pci_dev = cd->pci_dev;
453
454         err = genwqe_read_ids(cd);
455         if (err)
456                 return err;
457
458         if (genwqe_is_privileged(cd)) {
459                 /* do this after the tweaks. alloc fail is acceptable */
460                 genwqe_ffdc_buffs_alloc(cd);
461                 genwqe_stop_traps(cd);
462
463                 /* Collect registers e.g. FIRs, UNITIDs, traces ... */
464                 genwqe_read_ffdc_regs(cd, cd->ffdc[GENWQE_DBG_REGS].regs,
465                                       cd->ffdc[GENWQE_DBG_REGS].entries, 0);
466
467                 genwqe_ffdc_buff_read(cd, GENWQE_DBG_UNIT0,
468                                       cd->ffdc[GENWQE_DBG_UNIT0].regs,
469                                       cd->ffdc[GENWQE_DBG_UNIT0].entries);
470
471                 genwqe_ffdc_buff_read(cd, GENWQE_DBG_UNIT1,
472                                       cd->ffdc[GENWQE_DBG_UNIT1].regs,
473                                       cd->ffdc[GENWQE_DBG_UNIT1].entries);
474
475                 genwqe_ffdc_buff_read(cd, GENWQE_DBG_UNIT2,
476                                       cd->ffdc[GENWQE_DBG_UNIT2].regs,
477                                       cd->ffdc[GENWQE_DBG_UNIT2].entries);
478
479                 genwqe_start_traps(cd);
480
481                 if (cd->card_state == GENWQE_CARD_FATAL_ERROR) {
482                         dev_warn(&pci_dev->dev,
483                                  "[%s] chip reload/recovery!\n", __func__);
484
485                         /*
486                          * Stealth Mode: Reload chip on either hot
487                          * reset or PERST.
488                          */
489                         cd->softreset = 0x7Cull;
490                         __genwqe_writeq(cd, IO_SLC_CFGREG_SOFTRESET,
491                                        cd->softreset);
492
493                         err = genwqe_bus_reset(cd);
494                         if (err != 0) {
495                                 dev_err(&pci_dev->dev,
496                                         "[%s] err: bus reset failed!\n",
497                                         __func__);
498                                 goto out;
499                         }
500
501                         /*
502                          * Re-read the IDs because
503                          * it could happen that the bitstream load
504                          * failed!
505                          */
506                         err = genwqe_read_ids(cd);
507                         if (err)
508                                 goto out;
509                 }
510         }
511
512         err = genwqe_setup_service_layer(cd);  /* does a reset to the card */
513         if (err != 0) {
514                 dev_err(&pci_dev->dev,
515                         "[%s] err: could not setup servicelayer!\n", __func__);
516                 err = -ENODEV;
517                 goto out;
518         }
519
520         if (genwqe_is_privileged(cd)) {  /* code is running _after_ reset */
521                 genwqe_tweak_hardware(cd);
522
523                 genwqe_setup_pf_jtimer(cd);
524                 genwqe_setup_vf_jtimer(cd);
525         }
526
527         err = genwqe_device_create(cd);
528         if (err < 0) {
529                 dev_err(&pci_dev->dev,
530                         "err: chdev init failed! (err=%d)\n", err);
531                 goto out_release_service_layer;
532         }
533         return 0;
534
535  out_release_service_layer:
536         genwqe_release_service_layer(cd);
537  out:
538         if (genwqe_is_privileged(cd))
539                 genwqe_ffdc_buffs_free(cd);
540         return -EIO;
541 }
542
543 /**
544  * genwqe_stop() - Stop card operation
545  *
546  * Recovery notes:
547  *   As long as genwqe_thread runs we might access registers during
548  *   error data capture. Same is with the genwqe_health_thread.
549  *   When genwqe_bus_reset() fails this function might called two times:
550  *   first by the genwqe_health_thread() and later by genwqe_remove() to
551  *   unbind the device. We must be able to survive that.
552  *
553  * This function must be robust enough to be called twice.
554  */
555 static int genwqe_stop(struct genwqe_dev *cd)
556 {
557         genwqe_finish_queue(cd);            /* no register access */
558         genwqe_device_remove(cd);           /* device removed, procs killed */
559         genwqe_release_service_layer(cd);   /* here genwqe_thread is stopped */
560
561         if (genwqe_is_privileged(cd)) {
562                 pci_disable_sriov(cd->pci_dev); /* access pci config space */
563                 genwqe_ffdc_buffs_free(cd);
564         }
565
566         return 0;
567 }
568
569 /**
570  * genwqe_recover_card() - Try to recover the card if it is possible
571  *
572  * If fatal_err is set no register access is possible anymore. It is
573  * likely that genwqe_start fails in that situation. Proper error
574  * handling is required in this case.
575  *
576  * genwqe_bus_reset() will cause the pci code to call genwqe_remove()
577  * and later genwqe_probe() for all virtual functions.
578  */
579 static int genwqe_recover_card(struct genwqe_dev *cd, int fatal_err)
580 {
581         int rc;
582         struct pci_dev *pci_dev = cd->pci_dev;
583
584         genwqe_stop(cd);
585
586         /*
587          * Make sure chip is not reloaded to maintain FFDC. Write SLU
588          * Reset Register, CPLDReset field to 0.
589          */
590         if (!fatal_err) {
591                 cd->softreset = 0x70ull;
592                 __genwqe_writeq(cd, IO_SLC_CFGREG_SOFTRESET, cd->softreset);
593         }
594
595         rc = genwqe_bus_reset(cd);
596         if (rc != 0) {
597                 dev_err(&pci_dev->dev,
598                         "[%s] err: card recovery impossible!\n", __func__);
599                 return rc;
600         }
601
602         rc = genwqe_start(cd);
603         if (rc < 0) {
604                 dev_err(&pci_dev->dev,
605                         "[%s] err: failed to launch device!\n", __func__);
606                 return rc;
607         }
608         return 0;
609 }
610
611 static int genwqe_health_check_cond(struct genwqe_dev *cd, u64 *gfir)
612 {
613         *gfir = __genwqe_readq(cd, IO_SLC_CFGREG_GFIR);
614         return (*gfir & GFIR_ERR_TRIGGER) &&
615                 genwqe_recovery_on_fatal_gfir_required(cd);
616 }
617
618 /**
619  * genwqe_fir_checking() - Check the fault isolation registers of the card
620  *
621  * If this code works ok, can be tried out with help of the genwqe_poke tool:
622  *   sudo ./tools/genwqe_poke 0x8 0xfefefefefef
623  *
624  * Now the relevant FIRs/sFIRs should be printed out and the driver should
625  * invoke recovery (devices are removed and readded).
626  */
627 static u64 genwqe_fir_checking(struct genwqe_dev *cd)
628 {
629         int j, iterations = 0;
630         u64 mask, fir, fec, uid, gfir, gfir_masked, sfir, sfec;
631         u32 fir_addr, fir_clr_addr, fec_addr, sfir_addr, sfec_addr;
632         struct pci_dev *pci_dev = cd->pci_dev;
633
634  healthMonitor:
635         iterations++;
636         if (iterations > 16) {
637                 dev_err(&pci_dev->dev, "* exit looping after %d times\n",
638                         iterations);
639                 goto fatal_error;
640         }
641
642         gfir = __genwqe_readq(cd, IO_SLC_CFGREG_GFIR);
643         if (gfir != 0x0)
644                 dev_err(&pci_dev->dev, "* 0x%08x 0x%016llx\n",
645                                     IO_SLC_CFGREG_GFIR, gfir);
646         if (gfir == IO_ILLEGAL_VALUE)
647                 goto fatal_error;
648
649         /*
650          * Avoid printing when to GFIR bit is on prevents contignous
651          * printout e.g. for the following bug:
652          *   FIR set without a 2ndary FIR/FIR cannot be cleared
653          * Comment out the following if to get the prints:
654          */
655         if (gfir == 0)
656                 return 0;
657
658         gfir_masked = gfir & GFIR_ERR_TRIGGER;  /* fatal errors */
659
660         for (uid = 0; uid < GENWQE_MAX_UNITS; uid++) { /* 0..2 in zEDC */
661
662                 /* read the primary FIR (pfir) */
663                 fir_addr = (uid << 24) + 0x08;
664                 fir = __genwqe_readq(cd, fir_addr);
665                 if (fir == 0x0)
666                         continue;  /* no error in this unit */
667
668                 dev_err(&pci_dev->dev, "* 0x%08x 0x%016llx\n", fir_addr, fir);
669                 if (fir == IO_ILLEGAL_VALUE)
670                         goto fatal_error;
671
672                 /* read primary FEC */
673                 fec_addr = (uid << 24) + 0x18;
674                 fec = __genwqe_readq(cd, fec_addr);
675
676                 dev_err(&pci_dev->dev, "* 0x%08x 0x%016llx\n", fec_addr, fec);
677                 if (fec == IO_ILLEGAL_VALUE)
678                         goto fatal_error;
679
680                 for (j = 0, mask = 1ULL; j < 64; j++, mask <<= 1) {
681
682                         /* secondary fir empty, skip it */
683                         if ((fir & mask) == 0x0)
684                                 continue;
685
686                         sfir_addr = (uid << 24) + 0x100 + 0x08 * j;
687                         sfir = __genwqe_readq(cd, sfir_addr);
688
689                         if (sfir == IO_ILLEGAL_VALUE)
690                                 goto fatal_error;
691                         dev_err(&pci_dev->dev,
692                                 "* 0x%08x 0x%016llx\n", sfir_addr, sfir);
693
694                         sfec_addr = (uid << 24) + 0x300 + 0x08 * j;
695                         sfec = __genwqe_readq(cd, sfec_addr);
696
697                         if (sfec == IO_ILLEGAL_VALUE)
698                                 goto fatal_error;
699                         dev_err(&pci_dev->dev,
700                                 "* 0x%08x 0x%016llx\n", sfec_addr, sfec);
701
702                         gfir = __genwqe_readq(cd, IO_SLC_CFGREG_GFIR);
703                         if (gfir == IO_ILLEGAL_VALUE)
704                                 goto fatal_error;
705
706                         /* gfir turned on during routine! get out and
707                            start over. */
708                         if ((gfir_masked == 0x0) &&
709                             (gfir & GFIR_ERR_TRIGGER)) {
710                                 goto healthMonitor;
711                         }
712
713                         /* do not clear if we entered with a fatal gfir */
714                         if (gfir_masked == 0x0) {
715
716                                 /* NEW clear by mask the logged bits */
717                                 sfir_addr = (uid << 24) + 0x100 + 0x08 * j;
718                                 __genwqe_writeq(cd, sfir_addr, sfir);
719
720                                 dev_dbg(&pci_dev->dev,
721                                         "[HM] Clearing  2ndary FIR 0x%08x "
722                                         "with 0x%016llx\n", sfir_addr, sfir);
723
724                                 /*
725                                  * note, these cannot be error-Firs
726                                  * since gfir_masked is 0 after sfir
727                                  * was read. Also, it is safe to do
728                                  * this write if sfir=0. Still need to
729                                  * clear the primary. This just means
730                                  * there is no secondary FIR.
731                                  */
732
733                                 /* clear by mask the logged bit. */
734                                 fir_clr_addr = (uid << 24) + 0x10;
735                                 __genwqe_writeq(cd, fir_clr_addr, mask);
736
737                                 dev_dbg(&pci_dev->dev,
738                                         "[HM] Clearing primary FIR 0x%08x "
739                                         "with 0x%016llx\n", fir_clr_addr,
740                                         mask);
741                         }
742                 }
743         }
744         gfir = __genwqe_readq(cd, IO_SLC_CFGREG_GFIR);
745         if (gfir == IO_ILLEGAL_VALUE)
746                 goto fatal_error;
747
748         if ((gfir_masked == 0x0) && (gfir & GFIR_ERR_TRIGGER)) {
749                 /*
750                  * Check once more that it didn't go on after all the
751                  * FIRS were cleared.
752                  */
753                 dev_dbg(&pci_dev->dev, "ACK! Another FIR! Recursing %d!\n",
754                         iterations);
755                 goto healthMonitor;
756         }
757         return gfir_masked;
758
759  fatal_error:
760         return IO_ILLEGAL_VALUE;
761 }
762
763 /**
764  * genwqe_health_thread() - Health checking thread
765  *
766  * This thread is only started for the PF of the card.
767  *
768  * This thread monitors the health of the card. A critical situation
769  * is when we read registers which contain -1 (IO_ILLEGAL_VALUE). In
770  * this case we need to be recovered from outside. Writing to
771  * registers will very likely not work either.
772  *
773  * This thread must only exit if kthread_should_stop() becomes true.
774  *
775  * Condition for the health-thread to trigger:
776  *   a) when a kthread_stop() request comes in or
777  *   b) a critical GFIR occured
778  *
779  * Informational GFIRs are checked and potentially printed in
780  * health_check_interval seconds.
781  */
782 static int genwqe_health_thread(void *data)
783 {
784         int rc, should_stop = 0;
785         struct genwqe_dev *cd = data;
786         struct pci_dev *pci_dev = cd->pci_dev;
787         u64 gfir, gfir_masked, slu_unitcfg, app_unitcfg;
788
789         while (!kthread_should_stop()) {
790                 rc = wait_event_interruptible_timeout(cd->health_waitq,
791                          (genwqe_health_check_cond(cd, &gfir) ||
792                           (should_stop = kthread_should_stop())),
793                                 genwqe_health_check_interval * HZ);
794
795                 if (should_stop)
796                         break;
797
798                 if (gfir == IO_ILLEGAL_VALUE) {
799                         dev_err(&pci_dev->dev,
800                                 "[%s] GFIR=%016llx\n", __func__, gfir);
801                         goto fatal_error;
802                 }
803
804                 slu_unitcfg = __genwqe_readq(cd, IO_SLU_UNITCFG);
805                 if (slu_unitcfg == IO_ILLEGAL_VALUE) {
806                         dev_err(&pci_dev->dev,
807                                 "[%s] SLU_UNITCFG=%016llx\n",
808                                 __func__, slu_unitcfg);
809                         goto fatal_error;
810                 }
811
812                 app_unitcfg = __genwqe_readq(cd, IO_APP_UNITCFG);
813                 if (app_unitcfg == IO_ILLEGAL_VALUE) {
814                         dev_err(&pci_dev->dev,
815                                 "[%s] APP_UNITCFG=%016llx\n",
816                                 __func__, app_unitcfg);
817                         goto fatal_error;
818                 }
819
820                 gfir = __genwqe_readq(cd, IO_SLC_CFGREG_GFIR);
821                 if (gfir == IO_ILLEGAL_VALUE) {
822                         dev_err(&pci_dev->dev,
823                                 "[%s] %s: GFIR=%016llx\n", __func__,
824                                 (gfir & GFIR_ERR_TRIGGER) ? "err" : "info",
825                                 gfir);
826                         goto fatal_error;
827                 }
828
829                 gfir_masked = genwqe_fir_checking(cd);
830                 if (gfir_masked == IO_ILLEGAL_VALUE)
831                         goto fatal_error;
832
833                 /*
834                  * GFIR ErrorTrigger bits set => reset the card!
835                  * Never do this for old/manufacturing images!
836                  */
837                 if ((gfir_masked) && !cd->skip_recovery &&
838                     genwqe_recovery_on_fatal_gfir_required(cd)) {
839
840                         cd->card_state = GENWQE_CARD_FATAL_ERROR;
841
842                         rc = genwqe_recover_card(cd, 0);
843                         if (rc < 0) {
844                                 /* FIXME Card is unusable and needs unbind! */
845                                 goto fatal_error;
846                         }
847                 }
848
849                 cd->last_gfir = gfir;
850                 cond_resched();
851         }
852
853         return 0;
854
855  fatal_error:
856         dev_err(&pci_dev->dev,
857                 "[%s] card unusable. Please trigger unbind!\n", __func__);
858
859         /* Bring down logical devices to inform user space via udev remove. */
860         cd->card_state = GENWQE_CARD_FATAL_ERROR;
861         genwqe_stop(cd);
862
863         /* genwqe_bus_reset failed(). Now wait for genwqe_remove(). */
864         while (!kthread_should_stop())
865                 cond_resched();
866
867         return -EIO;
868 }
869
870 static int genwqe_health_check_start(struct genwqe_dev *cd)
871 {
872         int rc;
873
874         if (genwqe_health_check_interval <= 0)
875                 return 0;       /* valid for disabling the service */
876
877         /* moved before request_irq() */
878         /* init_waitqueue_head(&cd->health_waitq); */
879
880         cd->health_thread = kthread_run(genwqe_health_thread, cd,
881                                         GENWQE_DEVNAME "%d_health",
882                                         cd->card_idx);
883         if (IS_ERR(cd->health_thread)) {
884                 rc = PTR_ERR(cd->health_thread);
885                 cd->health_thread = NULL;
886                 return rc;
887         }
888         return 0;
889 }
890
891 static int genwqe_health_thread_running(struct genwqe_dev *cd)
892 {
893         return cd->health_thread != NULL;
894 }
895
896 static int genwqe_health_check_stop(struct genwqe_dev *cd)
897 {
898         int rc;
899
900         if (!genwqe_health_thread_running(cd))
901                 return -EIO;
902
903         rc = kthread_stop(cd->health_thread);
904         cd->health_thread = NULL;
905         return 0;
906 }
907
908 /**
909  * genwqe_pci_setup() - Allocate PCIe related resources for our card
910  */
911 static int genwqe_pci_setup(struct genwqe_dev *cd)
912 {
913         int err, bars;
914         struct pci_dev *pci_dev = cd->pci_dev;
915
916         bars = pci_select_bars(pci_dev, IORESOURCE_MEM);
917         err = pci_enable_device_mem(pci_dev);
918         if (err) {
919                 dev_err(&pci_dev->dev,
920                         "err: failed to enable pci memory (err=%d)\n", err);
921                 goto err_out;
922         }
923
924         /* Reserve PCI I/O and memory resources */
925         err = pci_request_selected_regions(pci_dev, bars, genwqe_driver_name);
926         if (err) {
927                 dev_err(&pci_dev->dev,
928                         "[%s] err: request bars failed (%d)\n", __func__, err);
929                 err = -EIO;
930                 goto err_disable_device;
931         }
932
933         /* check for 64-bit DMA address supported (DAC) */
934         if (!pci_set_dma_mask(pci_dev, DMA_BIT_MASK(64))) {
935                 err = pci_set_consistent_dma_mask(pci_dev, DMA_BIT_MASK(64));
936                 if (err) {
937                         dev_err(&pci_dev->dev,
938                                 "err: DMA64 consistent mask error\n");
939                         err = -EIO;
940                         goto out_release_resources;
941                 }
942         /* check for 32-bit DMA address supported (SAC) */
943         } else if (!pci_set_dma_mask(pci_dev, DMA_BIT_MASK(32))) {
944                 err = pci_set_consistent_dma_mask(pci_dev, DMA_BIT_MASK(32));
945                 if (err) {
946                         dev_err(&pci_dev->dev,
947                                 "err: DMA32 consistent mask error\n");
948                         err = -EIO;
949                         goto out_release_resources;
950                 }
951         } else {
952                 dev_err(&pci_dev->dev,
953                         "err: neither DMA32 nor DMA64 supported\n");
954                 err = -EIO;
955                 goto out_release_resources;
956         }
957
958         pci_set_master(pci_dev);
959         pci_enable_pcie_error_reporting(pci_dev);
960
961         /* request complete BAR-0 space (length = 0) */
962         cd->mmio_len = pci_resource_len(pci_dev, 0);
963         cd->mmio = pci_iomap(pci_dev, 0, 0);
964         if (cd->mmio == NULL) {
965                 dev_err(&pci_dev->dev,
966                         "[%s] err: mapping BAR0 failed\n", __func__);
967                 err = -ENOMEM;
968                 goto out_release_resources;
969         }
970
971         cd->num_vfs = pci_sriov_get_totalvfs(pci_dev);
972
973         err = genwqe_read_ids(cd);
974         if (err)
975                 goto out_iounmap;
976
977         return 0;
978
979  out_iounmap:
980         pci_iounmap(pci_dev, cd->mmio);
981  out_release_resources:
982         pci_release_selected_regions(pci_dev, bars);
983  err_disable_device:
984         pci_disable_device(pci_dev);
985  err_out:
986         return err;
987 }
988
989 /**
990  * genwqe_pci_remove() - Free PCIe related resources for our card
991  */
992 static void genwqe_pci_remove(struct genwqe_dev *cd)
993 {
994         int bars;
995         struct pci_dev *pci_dev = cd->pci_dev;
996
997         if (cd->mmio)
998                 pci_iounmap(pci_dev, cd->mmio);
999
1000         bars = pci_select_bars(pci_dev, IORESOURCE_MEM);
1001         pci_release_selected_regions(pci_dev, bars);
1002         pci_disable_device(pci_dev);
1003 }
1004
1005 /**
1006  * genwqe_probe() - Device initialization
1007  * @pdev:       PCI device information struct
1008  *
1009  * Callable for multiple cards. This function is called on bind.
1010  *
1011  * Return: 0 if succeeded, < 0 when failed
1012  */
1013 static int genwqe_probe(struct pci_dev *pci_dev,
1014                         const struct pci_device_id *id)
1015 {
1016         int err;
1017         struct genwqe_dev *cd;
1018
1019         genwqe_init_crc32();
1020
1021         cd = genwqe_dev_alloc();
1022         if (IS_ERR(cd)) {
1023                 dev_err(&pci_dev->dev, "err: could not alloc mem (err=%d)!\n",
1024                         (int)PTR_ERR(cd));
1025                 return PTR_ERR(cd);
1026         }
1027
1028         dev_set_drvdata(&pci_dev->dev, cd);
1029         cd->pci_dev = pci_dev;
1030
1031         err = genwqe_pci_setup(cd);
1032         if (err < 0) {
1033                 dev_err(&pci_dev->dev,
1034                         "err: problems with PCI setup (err=%d)\n", err);
1035                 goto out_free_dev;
1036         }
1037
1038         err = genwqe_start(cd);
1039         if (err < 0) {
1040                 dev_err(&pci_dev->dev,
1041                         "err: cannot start card services! (err=%d)\n", err);
1042                 goto out_pci_remove;
1043         }
1044
1045         if (genwqe_is_privileged(cd)) {
1046                 err = genwqe_health_check_start(cd);
1047                 if (err < 0) {
1048                         dev_err(&pci_dev->dev,
1049                                 "err: cannot start health checking! "
1050                                 "(err=%d)\n", err);
1051                         goto out_stop_services;
1052                 }
1053         }
1054         return 0;
1055
1056  out_stop_services:
1057         genwqe_stop(cd);
1058  out_pci_remove:
1059         genwqe_pci_remove(cd);
1060  out_free_dev:
1061         genwqe_dev_free(cd);
1062         return err;
1063 }
1064
1065 /**
1066  * genwqe_remove() - Called when device is removed (hot-plugable)
1067  *
1068  * Or when driver is unloaded respecitively when unbind is done.
1069  */
1070 static void genwqe_remove(struct pci_dev *pci_dev)
1071 {
1072         struct genwqe_dev *cd = dev_get_drvdata(&pci_dev->dev);
1073
1074         genwqe_health_check_stop(cd);
1075
1076         /*
1077          * genwqe_stop() must survive if it is called twice
1078          * sequentially. This happens when the health thread calls it
1079          * and fails on genwqe_bus_reset().
1080          */
1081         genwqe_stop(cd);
1082         genwqe_pci_remove(cd);
1083         genwqe_dev_free(cd);
1084 }
1085
1086 /*
1087  * genwqe_err_error_detected() - Error detection callback
1088  *
1089  * This callback is called by the PCI subsystem whenever a PCI bus
1090  * error is detected.
1091  */
1092 static pci_ers_result_t genwqe_err_error_detected(struct pci_dev *pci_dev,
1093                                                  enum pci_channel_state state)
1094 {
1095         struct genwqe_dev *cd;
1096
1097         dev_err(&pci_dev->dev, "[%s] state=%d\n", __func__, state);
1098
1099         if (pci_dev == NULL)
1100                 return PCI_ERS_RESULT_NEED_RESET;
1101
1102         cd = dev_get_drvdata(&pci_dev->dev);
1103         if (cd == NULL)
1104                 return PCI_ERS_RESULT_NEED_RESET;
1105
1106         switch (state) {
1107         case pci_channel_io_normal:
1108                 return PCI_ERS_RESULT_CAN_RECOVER;
1109         case pci_channel_io_frozen:
1110                 return PCI_ERS_RESULT_NEED_RESET;
1111         case pci_channel_io_perm_failure:
1112                 return PCI_ERS_RESULT_DISCONNECT;
1113         }
1114
1115         return PCI_ERS_RESULT_NEED_RESET;
1116 }
1117
1118 static pci_ers_result_t genwqe_err_result_none(struct pci_dev *dev)
1119 {
1120         return PCI_ERS_RESULT_NONE;
1121 }
1122
1123 static void genwqe_err_resume(struct pci_dev *dev)
1124 {
1125 }
1126
1127 static int genwqe_sriov_configure(struct pci_dev *dev, int numvfs)
1128 {
1129         struct genwqe_dev *cd = dev_get_drvdata(&dev->dev);
1130
1131         if (numvfs > 0) {
1132                 genwqe_setup_vf_jtimer(cd);
1133                 pci_enable_sriov(dev, numvfs);
1134                 return numvfs;
1135         }
1136         if (numvfs == 0) {
1137                 pci_disable_sriov(dev);
1138                 return 0;
1139         }
1140         return 0;
1141 }
1142
1143 static struct pci_error_handlers genwqe_err_handler = {
1144         .error_detected = genwqe_err_error_detected,
1145         .mmio_enabled   = genwqe_err_result_none,
1146         .link_reset     = genwqe_err_result_none,
1147         .slot_reset     = genwqe_err_result_none,
1148         .resume         = genwqe_err_resume,
1149 };
1150
1151 static struct pci_driver genwqe_driver = {
1152         .name     = genwqe_driver_name,
1153         .id_table = genwqe_device_table,
1154         .probe    = genwqe_probe,
1155         .remove   = genwqe_remove,
1156         .sriov_configure = genwqe_sriov_configure,
1157         .err_handler = &genwqe_err_handler,
1158 };
1159
1160 /**
1161  * genwqe_init_module() - Driver registration and initialization
1162  */
1163 static int __init genwqe_init_module(void)
1164 {
1165         int rc;
1166
1167         class_genwqe = class_create(THIS_MODULE, GENWQE_DEVNAME);
1168         if (IS_ERR(class_genwqe)) {
1169                 pr_err("[%s] create class failed\n", __func__);
1170                 return -ENOMEM;
1171         }
1172
1173         debugfs_genwqe = debugfs_create_dir(GENWQE_DEVNAME, NULL);
1174         if (!debugfs_genwqe) {
1175                 rc = -ENOMEM;
1176                 goto err_out;
1177         }
1178
1179         rc = pci_register_driver(&genwqe_driver);
1180         if (rc != 0) {
1181                 pr_err("[%s] pci_reg_driver (rc=%d)\n", __func__, rc);
1182                 goto err_out0;
1183         }
1184
1185         return rc;
1186
1187  err_out0:
1188         debugfs_remove(debugfs_genwqe);
1189  err_out:
1190         class_destroy(class_genwqe);
1191         return rc;
1192 }
1193
1194 /**
1195  * genwqe_exit_module() - Driver exit
1196  */
1197 static void __exit genwqe_exit_module(void)
1198 {
1199         pci_unregister_driver(&genwqe_driver);
1200         debugfs_remove(debugfs_genwqe);
1201         class_destroy(class_genwqe);
1202 }
1203
1204 module_init(genwqe_init_module);
1205 module_exit(genwqe_exit_module);