[POWERPC] EEH: enable MMIO/DMA on frozen slot
authorLinas Vepstas <linas@austin.ibm.com>
Fri, 15 Sep 2006 23:57:42 +0000 (18:57 -0500)
committerPaul Mackerras <paulus@samba.org>
Thu, 21 Sep 2006 12:59:14 +0000 (22:59 +1000)
Add wrapper around the rtas call to enable MMIO or DMA on a frozen pci
slot.

Signed-off-by: Linas Vepstas <linas@austin.ibm.com>
Signed-off-by: Paul Mackerras <paulus@samba.org>
arch/powerpc/platforms/pseries/eeh.c
include/asm-powerpc/ppc-pci.h

index fb91842fc81945a1f7f04e5960ca9adbcf8f9e0d..4534886e3b4e5c3c4d86f6f9b122a113643ac2b3 100644 (file)
@@ -481,6 +481,35 @@ eeh_slot_availability(struct pci_dn *pdn)
        return -1;
 }
 
+/**
+ * rtas_pci_enable - enable MMIO or DMA transfers for this slot
+ * @pdn pci device node
+ */
+
+int
+rtas_pci_enable(struct pci_dn *pdn, int function)
+{
+       int config_addr;
+       int rc;
+
+       /* Use PE configuration address, if present */
+       config_addr = pdn->eeh_config_addr;
+       if (pdn->eeh_pe_config_addr)
+               config_addr = pdn->eeh_pe_config_addr;
+
+       rc = rtas_call(ibm_set_eeh_option, 4, 1, NULL,
+                      config_addr,
+                      BUID_HI(pdn->phb->buid),
+                      BUID_LO(pdn->phb->buid),
+                           function);
+
+       if (rc)
+               printk(KERN_WARNING "EEH: Cannot enable function %d, err=%d dn=%s\n",
+                       function, rc, pdn->node->full_name);
+
+       return rc;
+}
+
 /**
  * rtas_pci_slot_reset - raises/lowers the pci #RST line
  * @pdn pci device node
index cf79bc7ebb5551dec638c987f605eb77e052b58d..1115756c79f941a2ea2262030ab60f56a130b69f 100644 (file)
@@ -68,6 +68,17 @@ struct pci_dev *pci_get_device_by_addr(unsigned long addr);
  */
 void eeh_slot_error_detail (struct pci_dn *pdn, int severity);
 
+/**
+ * rtas_pci_enableo - enable IO transfers for this slot
+ * @pdn:       pci device node
+ * @function:  either EEH_THAW_MMIO or EEH_THAW_DMA 
+ *
+ * Enable I/O transfers to this slot 
+ */
+#define EEH_THAW_MMIO 2
+#define EEH_THAW_DMA  3
+int rtas_pci_enable(struct pci_dn *pdn, int function);
+
 /**
  * rtas_set_slot_reset -- unfreeze a frozen slot
  *