Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=fcf9892b553ba638e6c8f9b6a140c99927c69693
Commit:     fcf9892b553ba638e6c8f9b6a140c99927c69693
Parent:     d99bb1db798f49eacb27e087da7e62433361174d
Author:     Linas Vepstas <[EMAIL PROTECTED]>
AuthorDate: Wed May 9 09:36:21 2007 +1000
Committer:  Paul Mackerras <[EMAIL PROTECTED]>
CommitDate: Wed May 9 16:35:01 2007 +1000

    [POWERPC] EEH: log all PCI-X and PCI-E AER registers
    
    When an EEH event is detected, and after the device driver
    has been notified, but before the device is reset, enable
    MMIO to the adapter, and grab the contents of the PCI status
    and command registers, the PCI-X status and command, and the
    PCI-E capability 10 and AER registers. Pass these up to the
    RTAS error log, and also printk them.
    
    Signed-off-by: Linas Vepstas <[EMAIL PROTECTED]>
    Signed-off-by: Paul Mackerras <[EMAIL PROTECTED]>
---
 arch/powerpc/platforms/pseries/eeh.c |   48 ++++++++++++++++++++++++++++++++-
 1 files changed, 46 insertions(+), 2 deletions(-)

diff --git a/arch/powerpc/platforms/pseries/eeh.c 
b/arch/powerpc/platforms/pseries/eeh.c
index b58ed05..093438b 100644
--- a/arch/powerpc/platforms/pseries/eeh.c
+++ b/arch/powerpc/platforms/pseries/eeh.c
@@ -160,14 +160,58 @@ static void rtas_slot_error_detail(struct pci_dn *pdn, 
int severity,
 static size_t gather_pci_data(struct pci_dn *pdn, char * buf, size_t len)
 {
        u32 cfg;
+       int cap, i;
        int n = 0;
 
-       n += scnprintf(buf+n, len-n, "%s\n", pdn->node->name);
+       n += scnprintf(buf+n, len-n, "%s\n", pdn->node->full_name);
+       printk(KERN_WARNING "EEH: of node=%s\n", pdn->node->full_name);
+
        rtas_read_config(pdn, PCI_VENDOR_ID, 4, &cfg);
-       n += scnprintf(buf+n, len-n, "dev/vend:%x\n", cfg);
+       n += scnprintf(buf+n, len-n, "dev/vend:%08x\n", cfg);
+       printk(KERN_WARNING "EEH: PCI device/vendor: %08x\n", cfg);
+
        rtas_read_config(pdn, PCI_COMMAND, 4, &cfg);
        n += scnprintf(buf+n, len-n, "cmd/stat:%x\n", cfg);
+       printk(KERN_WARNING "EEH: PCI cmd/status register: %08x\n", cfg);
+
+       /* Dump out the PCI-X command and status regs */
+       cap = pci_find_capability(pdn->pcidev, PCI_CAP_ID_PCIX);
+       if (cap) {
+               rtas_read_config(pdn, cap, 4, &cfg);
+               n += scnprintf(buf+n, len-n, "pcix-cmd:%x\n", cfg);
+               printk(KERN_WARNING "EEH: PCI-X cmd: %08x\n", cfg);
+
+               rtas_read_config(pdn, cap+4, 4, &cfg);
+               n += scnprintf(buf+n, len-n, "pcix-stat:%x\n", cfg);
+               printk(KERN_WARNING "EEH: PCI-X status: %08x\n", cfg);
+       }
+
+       /* If PCI-E capable, dump PCI-E cap 10, and the AER */
+       cap = pci_find_capability(pdn->pcidev, PCI_CAP_ID_EXP);
+       if (cap) {
+               n += scnprintf(buf+n, len-n, "pci-e cap10:\n");
+               printk(KERN_WARNING
+                      "EEH: PCI-E capabilities and status follow:\n");
+
+               for (i=0; i<=8; i++) {
+                       rtas_read_config(pdn, cap+4*i, 4, &cfg);
+                       n += scnprintf(buf+n, len-n, "%02x:%x\n", 4*i, cfg);
+                       printk(KERN_WARNING "EEH: PCI-E %02x: %08x\n", i, cfg);
+               }
 
+               cap = pci_find_ext_capability(pdn->pcidev,PCI_EXT_CAP_ID_ERR);
+               if (cap) {
+                       n += scnprintf(buf+n, len-n, "pci-e AER:\n");
+                       printk(KERN_WARNING
+                              "EEH: PCI-E AER capability register set 
follows:\n");
+
+                       for (i=0; i<14; i++) {
+                               rtas_read_config(pdn, cap+4*i, 4, &cfg);
+                               n += scnprintf(buf+n, len-n, "%02x:%x\n", 4*i, 
cfg);
+                               printk(KERN_WARNING "EEH: PCI-E AER %02x: 
%08x\n", i, cfg);
+                       }
+               }
+       }
        return n;
 }
 
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to