Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
eeh.c
Go to the documentation of this file.
1 /*
2  * Copyright IBM Corporation 2001, 2005, 2006
3  * Copyright Dave Engebretsen & Todd Inglett 2001
4  * Copyright Linas Vepstas 2005, 2006
5  * Copyright 2001-2012 IBM Corporation.
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 2 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20  *
21  * Please address comments and feedback to Linas Vepstas <[email protected]>
22  */
23 
24 #include <linux/delay.h>
25 #include <linux/sched.h>
26 #include <linux/init.h>
27 #include <linux/list.h>
28 #include <linux/pci.h>
29 #include <linux/proc_fs.h>
30 #include <linux/rbtree.h>
31 #include <linux/seq_file.h>
32 #include <linux/spinlock.h>
33 #include <linux/export.h>
34 #include <linux/of.h>
35 
36 #include <linux/atomic.h>
37 #include <asm/eeh.h>
38 #include <asm/eeh_event.h>
39 #include <asm/io.h>
40 #include <asm/machdep.h>
41 #include <asm/ppc-pci.h>
42 #include <asm/rtas.h>
43 
44 
79 /* If a device driver keeps reading an MMIO register in an interrupt
80  * handler after a slot isolation event, it might be broken.
81  * This sets the threshold for how many read attempts we allow
82  * before printing an error message.
83  */
84 #define EEH_MAX_FAILS 2100000
85 
86 /* Time to wait for a PCI slot to report status, in milliseconds */
87 #define PCI_BUS_RESET_WAIT_MSEC (60*1000)
88 
89 /* Platform dependent EEH operations */
90 struct eeh_ops *eeh_ops = NULL;
91 
94 
95 /*
96  * EEH probe mode support. The intention is to support multiple
97  * platforms for EEH. Some platforms like pSeries do PCI emunation
98  * based on device tree. However, other platforms like powernv probe
99  * PCI devices from hardware. The flag is used to distinguish that.
100  * In addition, struct eeh_ops::probe would be invoked for particular
101  * OF node or PCI device so that the corresponding PE would be created
102  * there.
103  */
105 
106 /* Global EEH mutex */
107 DEFINE_MUTEX(eeh_mutex);
108 
109 /* Lock to avoid races due to multiple reports of an error */
110 static DEFINE_RAW_SPINLOCK(confirm_error_lock);
111 
112 /* Buffer for reporting pci register dumps. Its here in BSS, and
113  * not dynamically alloced, so that it ends up in RMO where RTAS
114  * can access it.
115  */
116 #define EEH_PCI_REGS_LOG_LEN 4096
117 static unsigned char pci_regs_buf[EEH_PCI_REGS_LOG_LEN];
118 
119 /*
120  * The struct is used to maintain the EEH global statistic
121  * information. Besides, the EEH global statistics will be
122  * exported to user space through procfs
123  */
124 struct eeh_stats {
125  u64 no_device; /* PCI device not found */
126  u64 no_dn; /* OF node not found */
127  u64 no_cfg_addr; /* Config address not found */
128  u64 ignored_check; /* EEH check skipped */
129  u64 total_mmio_ffs; /* Total EEH checks */
130  u64 false_positives; /* Unnecessary EEH checks */
131  u64 slot_resets; /* PE reset */
132 };
133 
134 static struct eeh_stats eeh_stats;
135 
136 #define IS_BRIDGE(class_code) (((class_code)<<16) == PCI_BASE_CLASS_BRIDGE)
137 
147 static size_t eeh_gather_pci_data(struct eeh_dev *edev, char * buf, size_t len)
148 {
149  struct device_node *dn = eeh_dev_to_of_node(edev);
150  struct pci_dev *dev = eeh_dev_to_pci_dev(edev);
151  u32 cfg;
152  int cap, i;
153  int n = 0;
154 
155  n += scnprintf(buf+n, len-n, "%s\n", dn->full_name);
156  printk(KERN_WARNING "EEH: of node=%s\n", dn->full_name);
157 
158  eeh_ops->read_config(dn, PCI_VENDOR_ID, 4, &cfg);
159  n += scnprintf(buf+n, len-n, "dev/vend:%08x\n", cfg);
160  printk(KERN_WARNING "EEH: PCI device/vendor: %08x\n", cfg);
161 
162  eeh_ops->read_config(dn, PCI_COMMAND, 4, &cfg);
163  n += scnprintf(buf+n, len-n, "cmd/stat:%x\n", cfg);
164  printk(KERN_WARNING "EEH: PCI cmd/status register: %08x\n", cfg);
165 
166  if (!dev) {
167  printk(KERN_WARNING "EEH: no PCI device for this of node\n");
168  return n;
169  }
170 
171  /* Gather bridge-specific registers */
172  if (dev->class >> 16 == PCI_BASE_CLASS_BRIDGE) {
173  eeh_ops->read_config(dn, PCI_SEC_STATUS, 2, &cfg);
174  n += scnprintf(buf+n, len-n, "sec stat:%x\n", cfg);
175  printk(KERN_WARNING "EEH: Bridge secondary status: %04x\n", cfg);
176 
177  eeh_ops->read_config(dn, PCI_BRIDGE_CONTROL, 2, &cfg);
178  n += scnprintf(buf+n, len-n, "brdg ctl:%x\n", cfg);
179  printk(KERN_WARNING "EEH: Bridge control: %04x\n", cfg);
180  }
181 
182  /* Dump out the PCI-X command and status regs */
184  if (cap) {
185  eeh_ops->read_config(dn, cap, 4, &cfg);
186  n += scnprintf(buf+n, len-n, "pcix-cmd:%x\n", cfg);
187  printk(KERN_WARNING "EEH: PCI-X cmd: %08x\n", cfg);
188 
189  eeh_ops->read_config(dn, cap+4, 4, &cfg);
190  n += scnprintf(buf+n, len-n, "pcix-stat:%x\n", cfg);
191  printk(KERN_WARNING "EEH: PCI-X status: %08x\n", cfg);
192  }
193 
194  /* If PCI-E capable, dump PCI-E cap 10, and the AER */
196  if (cap) {
197  n += scnprintf(buf+n, len-n, "pci-e cap10:\n");
199  "EEH: PCI-E capabilities and status follow:\n");
200 
201  for (i=0; i<=8; i++) {
202  eeh_ops->read_config(dn, cap+4*i, 4, &cfg);
203  n += scnprintf(buf+n, len-n, "%02x:%x\n", 4*i, cfg);
204  printk(KERN_WARNING "EEH: PCI-E %02x: %08x\n", i, cfg);
205  }
206 
208  if (cap) {
209  n += scnprintf(buf+n, len-n, "pci-e AER:\n");
211  "EEH: PCI-E AER capability register set follows:\n");
212 
213  for (i=0; i<14; i++) {
214  eeh_ops->read_config(dn, cap+4*i, 4, &cfg);
215  n += scnprintf(buf+n, len-n, "%02x:%x\n", 4*i, cfg);
216  printk(KERN_WARNING "EEH: PCI-E AER %02x: %08x\n", i, cfg);
217  }
218  }
219  }
220 
221  return n;
222 }
223 
234 void eeh_slot_error_detail(struct eeh_pe *pe, int severity)
235 {
236  size_t loglen = 0;
237  struct eeh_dev *edev;
238 
239  eeh_pci_enable(pe, EEH_OPT_THAW_MMIO);
240  eeh_ops->configure_bridge(pe);
242 
243  pci_regs_buf[0] = 0;
244  eeh_pe_for_each_dev(pe, edev) {
245  loglen += eeh_gather_pci_data(edev, pci_regs_buf,
247  }
248 
249  eeh_ops->get_log(pe, severity, pci_regs_buf, loglen);
250 }
251 
259 static inline unsigned long eeh_token_to_phys(unsigned long token)
260 {
261  pte_t *ptep;
262  unsigned long pa;
263 
264  ptep = find_linux_pte(init_mm.pgd, token);
265  if (!ptep)
266  return token;
267  pa = pte_pfn(*ptep) << PAGE_SHIFT;
268 
269  return pa | (token & (PAGE_SIZE-1));
270 }
271 
286 int eeh_dev_check_failure(struct eeh_dev *edev)
287 {
288  int ret;
289  unsigned long flags;
290  struct device_node *dn;
291  struct pci_dev *dev;
292  struct eeh_pe *pe;
293  int rc = 0;
294  const char *location;
295 
297 
299  return 0;
300 
301  if (!edev) {
302  eeh_stats.no_dn++;
303  return 0;
304  }
305  dn = eeh_dev_to_of_node(edev);
306  dev = eeh_dev_to_pci_dev(edev);
307  pe = edev->pe;
308 
309  /* Access to IO BARs might get this far and still not want checking. */
310  if (!pe) {
312  pr_debug("EEH: Ignored check for %s %s\n",
313  eeh_pci_name(dev), dn->full_name);
314  return 0;
315  }
316 
317  if (!pe->addr && !pe->config_addr) {
319  return 0;
320  }
321 
322  /* If we already have a pending isolation event for this
323  * slot, we know it's bad already, we don't need to check.
324  * Do this checking under a lock; as multiple PCI devices
325  * in one slot might report errors simultaneously, and we
326  * only want one error recovery routine running.
327  */
328  raw_spin_lock_irqsave(&confirm_error_lock, flags);
329  rc = 1;
330  if (pe->state & EEH_PE_ISOLATED) {
331  pe->check_count++;
332  if (pe->check_count % EEH_MAX_FAILS == 0) {
333  location = of_get_property(dn, "ibm,loc-code", NULL);
334  printk(KERN_ERR "EEH: %d reads ignored for recovering device at "
335  "location=%s driver=%s pci addr=%s\n",
336  pe->check_count, location,
337  eeh_driver_name(dev), eeh_pci_name(dev));
338  printk(KERN_ERR "EEH: Might be infinite loop in %s driver\n",
339  eeh_driver_name(dev));
340  dump_stack();
341  }
342  goto dn_unlock;
343  }
344 
345  /*
346  * Now test for an EEH failure. This is VERY expensive.
347  * Note that the eeh_config_addr may be a parent device
348  * in the case of a device behind a bridge, or it may be
349  * function zero of a multi-function device.
350  * In any case they must share a common PHB.
351  */
352  ret = eeh_ops->get_state(pe, NULL);
353 
354  /* Note that config-io to empty slots may fail;
355  * they are empty when they don't have children.
356  * We will punt with the following conditions: Failure to get
357  * PE's state, EEH not support and Permanently unavailable
358  * state, PE is in good state.
359  */
360  if ((ret < 0) ||
361  (ret == EEH_STATE_NOT_SUPPORT) ||
362  (ret & (EEH_STATE_MMIO_ACTIVE | EEH_STATE_DMA_ACTIVE)) ==
363  (EEH_STATE_MMIO_ACTIVE | EEH_STATE_DMA_ACTIVE)) {
365  pe->false_positives++;
366  rc = 0;
367  goto dn_unlock;
368  }
369 
371 
372  /* Avoid repeated reports of this failure, including problems
373  * with other functions on this device, and functions under
374  * bridges.
375  */
376  eeh_pe_state_mark(pe, EEH_PE_ISOLATED);
377  raw_spin_unlock_irqrestore(&confirm_error_lock, flags);
378 
380 
381  /* Most EEH events are due to device driver bugs. Having
382  * a stack trace will help the device-driver authors figure
383  * out what happened. So print that out.
384  */
385  WARN(1, "EEH: failure detected\n");
386  return 1;
387 
388 dn_unlock:
389  raw_spin_unlock_irqrestore(&confirm_error_lock, flags);
390  return rc;
391 }
392 
394 
407 unsigned long eeh_check_failure(const volatile void __iomem *token, unsigned long val)
408 {
409  unsigned long addr;
410  struct eeh_dev *edev;
411 
412  /* Finding the phys addr + pci device; this is pretty quick. */
413  addr = eeh_token_to_phys((unsigned long __force) token);
414  edev = eeh_addr_cache_get_dev(addr);
415  if (!edev) {
417  return val;
418  }
419 
420  eeh_dev_check_failure(edev);
421 
422  pci_dev_put(eeh_dev_to_pci_dev(edev));
423  return val;
424 }
425 
427 
428 
437 int eeh_pci_enable(struct eeh_pe *pe, int function)
438 {
439  int rc;
440 
441  rc = eeh_ops->set_option(pe, function);
442  if (rc)
443  pr_warning("%s: Unexpected state change %d on PHB#%d-PE#%x, err=%d\n",
444  __func__, function, pe->phb->global_number, pe->addr, rc);
445 
446  rc = eeh_ops->wait_state(pe, PCI_BUS_RESET_WAIT_MSEC);
447  if (rc > 0 && (rc & EEH_STATE_MMIO_ENABLED) &&
448  (function == EEH_OPT_THAW_MMIO))
449  return 0;
450 
451  return rc;
452 }
453 
463 {
464  struct eeh_dev *edev = pci_dev_to_eeh_dev(dev);
465  struct eeh_pe *pe = edev->pe;
466 
467  if (!pe) {
468  pr_err("%s: No PE found on PCI device %s\n",
469  __func__, pci_name(dev));
470  return -EINVAL;
471  }
472 
473  switch (state) {
474  case pcie_deassert_reset:
475  eeh_ops->reset(pe, EEH_RESET_DEACTIVATE);
476  break;
477  case pcie_hot_reset:
478  eeh_ops->reset(pe, EEH_RESET_HOT);
479  break;
480  case pcie_warm_reset:
481  eeh_ops->reset(pe, EEH_RESET_FUNDAMENTAL);
482  break;
483  default:
484  return -EINVAL;
485  };
486 
487  return 0;
488 }
489 
500 static void *eeh_set_dev_freset(void *data, void *flag)
501 {
502  struct pci_dev *dev;
503  unsigned int *freset = (unsigned int *)flag;
504  struct eeh_dev *edev = (struct eeh_dev *)data;
505 
506  dev = eeh_dev_to_pci_dev(edev);
507  if (dev)
508  *freset |= dev->needs_freset;
509 
510  return NULL;
511 }
512 
519 static void eeh_reset_pe_once(struct eeh_pe *pe)
520 {
521  unsigned int freset = 0;
522 
523  /* Determine type of EEH reset required for
524  * Partitionable Endpoint, a hot-reset (1)
525  * or a fundamental reset (3).
526  * A fundamental reset required by any device under
527  * Partitionable Endpoint trumps hot-reset.
528  */
529  eeh_pe_dev_traverse(pe, eeh_set_dev_freset, &freset);
530 
531  if (freset)
532  eeh_ops->reset(pe, EEH_RESET_FUNDAMENTAL);
533  else
534  eeh_ops->reset(pe, EEH_RESET_HOT);
535 
536  /* The PCI bus requires that the reset be held high for at least
537  * a 100 milliseconds. We wait a bit longer 'just in case'.
538  */
539 #define PCI_BUS_RST_HOLD_TIME_MSEC 250
540  msleep(PCI_BUS_RST_HOLD_TIME_MSEC);
541 
542  /* We might get hit with another EEH freeze as soon as the
543  * pci slot reset line is dropped. Make sure we don't miss
544  * these, and clear the flag now.
545  */
546  eeh_pe_state_clear(pe, EEH_PE_ISOLATED);
547 
548  eeh_ops->reset(pe, EEH_RESET_DEACTIVATE);
549 
550  /* After a PCI slot has been reset, the PCI Express spec requires
551  * a 1.5 second idle time for the bus to stabilize, before starting
552  * up traffic.
553  */
554 #define PCI_BUS_SETTLE_TIME_MSEC 1800
555  msleep(PCI_BUS_SETTLE_TIME_MSEC);
556 }
557 
566 int eeh_reset_pe(struct eeh_pe *pe)
567 {
568  int i, rc;
569 
570  /* Take three shots at resetting the bus */
571  for (i=0; i<3; i++) {
572  eeh_reset_pe_once(pe);
573 
574  rc = eeh_ops->wait_state(pe, PCI_BUS_RESET_WAIT_MSEC);
575  if (rc == (EEH_STATE_MMIO_ACTIVE | EEH_STATE_DMA_ACTIVE))
576  return 0;
577 
578  if (rc < 0) {
579  pr_err("%s: Unrecoverable slot failure on PHB#%d-PE#%x",
580  __func__, pe->phb->global_number, pe->addr);
581  return -1;
582  }
583  pr_err("EEH: bus reset %d failed on PHB#%d-PE#%x, rc=%d\n",
584  i+1, pe->phb->global_number, pe->addr, rc);
585  }
586 
587  return -1;
588 }
589 
599 void eeh_save_bars(struct eeh_dev *edev)
600 {
601  int i;
602  struct device_node *dn;
603 
604  if (!edev)
605  return;
606  dn = eeh_dev_to_of_node(edev);
607 
608  for (i = 0; i < 16; i++)
609  eeh_ops->read_config(dn, i * 4, 4, &edev->config_space[i]);
610 }
611 
621 {
622  if (!ops->name) {
623  pr_warning("%s: Invalid EEH ops name for %p\n",
624  __func__, ops);
625  return -EINVAL;
626  }
627 
628  if (eeh_ops && eeh_ops != ops) {
629  pr_warning("%s: EEH ops of platform %s already existing (%s)\n",
630  __func__, eeh_ops->name, ops->name);
631  return -EEXIST;
632  }
633 
634  eeh_ops = ops;
635 
636  return 0;
637 }
638 
647 {
648  if (!name || !strlen(name)) {
649  pr_warning("%s: Invalid EEH ops name\n",
650  __func__);
651  return -EINVAL;
652  }
653 
654  if (eeh_ops && !strcmp(eeh_ops->name, name)) {
655  eeh_ops = NULL;
656  return 0;
657  }
658 
659  return -EEXIST;
660 }
661 
677 static int __init eeh_init(void)
678 {
679  struct pci_controller *hose, *tmp;
680  struct device_node *phb;
681  int ret;
682 
683  /* call platform initialization function */
684  if (!eeh_ops) {
685  pr_warning("%s: Platform EEH operation not found\n",
686  __func__);
687  return -EEXIST;
688  } else if ((ret = eeh_ops->init())) {
689  pr_warning("%s: Failed to call platform init function (%d)\n",
690  __func__, ret);
691  return ret;
692  }
693 
694  raw_spin_lock_init(&confirm_error_lock);
695 
696  /* Enable EEH for all adapters */
697  if (eeh_probe_mode_devtree()) {
698  list_for_each_entry_safe(hose, tmp,
699  &hose_list, list_node) {
700  phb = hose->dn;
701  traverse_pci_devices(phb, eeh_ops->of_probe, NULL);
702  }
703  }
704 
706  pr_info("EEH: PCI Enhanced I/O Error Handling Enabled\n");
707  else
708  pr_warning("EEH: No capable adapters found\n");
709 
710  return ret;
711 }
712 
713 core_initcall_sync(eeh_init);
714 
727 static void eeh_add_device_early(struct device_node *dn)
728 {
729  struct pci_controller *phb;
730 
731  if (!of_node_to_eeh_dev(dn))
732  return;
733  phb = of_node_to_eeh_dev(dn)->phb;
734 
735  /* USB Bus children of PCI devices will not have BUID's */
736  if (NULL == phb || 0 == phb->buid)
737  return;
738 
739  /* FIXME: hotplug support on POWERNV */
740  eeh_ops->of_probe(dn, NULL);
741 }
742 
752 {
753  struct device_node *sib;
754 
755  for_each_child_of_node(dn, sib)
757  eeh_add_device_early(dn);
758 }
760 
768 static void eeh_add_device_late(struct pci_dev *dev)
769 {
770  struct device_node *dn;
771  struct eeh_dev *edev;
772 
773  if (!dev || !eeh_subsystem_enabled)
774  return;
775 
776  pr_debug("EEH: Adding device %s\n", pci_name(dev));
777 
778  dn = pci_device_to_OF_node(dev);
779  edev = of_node_to_eeh_dev(dn);
780  if (edev->pdev == dev) {
781  pr_debug("EEH: Already referenced !\n");
782  return;
783  }
784  WARN_ON(edev->pdev);
785 
786  pci_dev_get(dev);
787  edev->pdev = dev;
788  dev->dev.archdata.edev = edev;
789 
792 }
793 
803 {
804  struct pci_dev *dev;
805 
806  list_for_each_entry(dev, &bus->devices, bus_list) {
807  eeh_add_device_late(dev);
808  if (dev->hdr_type == PCI_HEADER_TYPE_BRIDGE) {
809  struct pci_bus *subbus = dev->subordinate;
810  if (subbus)
811  eeh_add_device_tree_late(subbus);
812  }
813  }
814 }
816 
828 static void eeh_remove_device(struct pci_dev *dev, int purge_pe)
829 {
830  struct eeh_dev *edev;
831 
832  if (!dev || !eeh_subsystem_enabled)
833  return;
834  edev = pci_dev_to_eeh_dev(dev);
835 
836  /* Unregister the device with the EEH/PCI address search system */
837  pr_debug("EEH: Removing device %s\n", pci_name(dev));
838 
839  if (!edev || !edev->pdev) {
840  pr_debug("EEH: Not referenced !\n");
841  return;
842  }
843  edev->pdev = NULL;
844  dev->dev.archdata.edev = NULL;
845  pci_dev_put(dev);
846 
847  eeh_rmv_from_parent_pe(edev, purge_pe);
850 }
851 
861 void eeh_remove_bus_device(struct pci_dev *dev, int purge_pe)
862 {
863  struct pci_bus *bus = dev->subordinate;
864  struct pci_dev *child, *tmp;
865 
866  eeh_remove_device(dev, purge_pe);
867 
868  if (bus && dev->hdr_type == PCI_HEADER_TYPE_BRIDGE) {
869  list_for_each_entry_safe(child, tmp, &bus->devices, bus_list)
870  eeh_remove_bus_device(child, purge_pe);
871  }
872 }
874 
875 static int proc_eeh_show(struct seq_file *m, void *v)
876 {
877  if (0 == eeh_subsystem_enabled) {
878  seq_printf(m, "EEH Subsystem is globally disabled\n");
879  seq_printf(m, "eeh_total_mmio_ffs=%llu\n", eeh_stats.total_mmio_ffs);
880  } else {
881  seq_printf(m, "EEH Subsystem is enabled\n");
882  seq_printf(m,
883  "no device=%llu\n"
884  "no device node=%llu\n"
885  "no config address=%llu\n"
886  "check not wanted=%llu\n"
887  "eeh_total_mmio_ffs=%llu\n"
888  "eeh_false_positives=%llu\n"
889  "eeh_slot_resets=%llu\n",
897  }
898 
899  return 0;
900 }
901 
902 static int proc_eeh_open(struct inode *inode, struct file *file)
903 {
904  return single_open(file, proc_eeh_show, NULL);
905 }
906 
907 static const struct file_operations proc_eeh_operations = {
908  .open = proc_eeh_open,
909  .read = seq_read,
910  .llseek = seq_lseek,
911  .release = single_release,
912 };
913 
914 static int __init eeh_init_proc(void)
915 {
916  if (machine_is(pseries))
917  proc_create("powerpc/eeh", 0, NULL, &proc_eeh_operations);
918  return 0;
919 }
920 __initcall(eeh_init_proc);