Login
[x]
Log in using an account from:
Fedora Account System
Red Hat Associate
Red Hat Customer
Or login using a Red Hat Bugzilla account
Forgot Password
Login:
Hide Forgot
Create an Account
Red Hat Bugzilla – Attachment 160529 Details for
Bug 250611
No Boot /Hang response for PCI-E errors on a QS21
[?]
New
Simple Search
Advanced Search
My Links
Browse
Requests
Reports
Current State
Search
Tabular reports
Graphical reports
Duplicates
Other Reports
User Changes
Plotly Reports
Bug Status
Bug Severity
Non-Defaults
|
Product Dashboard
Help
Page Help!
Bug Writing Guidelines
What's new
Browser Support Policy
5.0.4.rh83 Release notes
FAQ
Guides index
User guide
Web Services
Contact
Legal
This site requires JavaScript to be enabled to function correctly, please enable it.
[patch]
simple patch to panic when an error occurs on PCIe
cell-pcie-aer.diff (text/plain), 5.10 KB, created by
Robbie Williamson
on 2007-08-02 15:07:34 UTC
(
hide
)
Description:
simple patch to panic when an error occurs on PCIe
Filename:
MIME Type:
Creator:
Robbie Williamson
Created:
2007-08-02 15:07:34 UTC
Size:
5.10 KB
patch
obsolete
>Index: linux-2.6.22/arch/powerpc/platforms/cell/Kconfig >=================================================================== >--- linux-2.6.22.orig/arch/powerpc/platforms/cell/Kconfig >+++ linux-2.6.22/arch/powerpc/platforms/cell/Kconfig >@@ -83,4 +83,11 @@ config CBE_CPUFREQ_PMI > processor will not only be able to run at lower speed, > but also at lower core voltage. > >+config CBE_AXON_UTL >+ bool "CBE/Axon PCIe Upper Transaction layer error handling" >+ default n >+ help >+ The Axon chip delivers error conditions detected in the >+ PCIe root complex as interrupts. >+ > endmenu >Index: linux-2.6.22/arch/powerpc/platforms/cell/Makefile >=================================================================== >--- linux-2.6.22.orig/arch/powerpc/platforms/cell/Makefile >+++ linux-2.6.22/arch/powerpc/platforms/cell/Makefile >@@ -8,6 +8,8 @@ obj-$(CONFIG_CBE_CPUFREQ_PMI) += cbe_cp > obj-$(CONFIG_CBE_CPUFREQ) += cbe-cpufreq.o > cbe-cpufreq-y += cbe_cpufreq_pervasive.o cbe_cpufreq.o > >+obj-$(CONFIG_CBE_AXON_UTL) += axon_utl.o >+ > ifeq ($(CONFIG_SMP),y) > obj-$(CONFIG_PPC_CELL_NATIVE) += smp.o > endif >Index: linux-2.6.22/arch/powerpc/platforms/cell/axon_utl.c >=================================================================== >--- /dev/null >+++ linux-2.6.22/arch/powerpc/platforms/cell/axon_utl.c >@@ -0,0 +1,159 @@ >+/* >+ * PCIe error reporting handler for Axon >+ * >+ * (C) Copyright IBM Corp. 2007 >+ * >+ * Authors : Jens Osterkamp <Jens.Osterkamp@de.ibm.com> >+ * >+ * This program is free software; you can redistribute it and/or modify >+ * it under the terms of the GNU General Public License version 2 as >+ * published by the Free Software Foundation. >+ * >+ * This program is distributed in the hope that it will be useful, >+ * but WITHOUT ANY WARRANTY; without even the implied warranty of >+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the >+ * GNU General Public License for more details. >+ * >+ * You should have received a copy of the GNU General Public License >+ * along with this program; if not, write to the Free Software >+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. >+ */ >+ >+#include <linux/interrupt.h> >+#include <linux/irq.h> >+#include <linux/kernel.h> >+#include <linux/pci.h> >+#include <linux/msi.h> >+#include <linux/reboot.h> >+ >+#include <asm/machdep.h> >+#include <asm/prom.h> >+ >+ >+/* >+ * Axon UTL registers >+ */ >+#define AXON_UTL_STATUS 0x04 >+#define AXON_UTL_PCIE_PORT_STATUS 0xa4 >+#define AXON_UTL_PCIE_PORT_CMPLX_STATUS 0xb0 >+ >+struct axon_utl { >+ struct device_node *dn; >+ void __iomem *base; >+ int virq; >+}; >+ >+static u32 axon_utl_read(struct axon_utl *axon_utl, unsigned int reg) >+{ >+ return in_be32(axon_utl->base + reg); >+} >+ >+static void axon_utl_dump_registers(struct axon_utl *axon_utl) >+{ >+ printk("\naxon_utl: AXON_UTL_STATUS = 0x%08x\n", >+ axon_utl_read(axon_utl, AXON_UTL_STATUS)); >+ >+ printk("axon_utl: AXON_UTL_PCIE_PORT_STATUS = 0x%08x\n", >+ axon_utl_read(axon_utl, AXON_UTL_PCIE_PORT_STATUS)); >+ >+ printk("axon_utl: AXON_UTL_PCIE_ROOT_CMPLX_STATUS = 0x%08x\n", >+ axon_utl_read(axon_utl, AXON_UTL_PCIE_PORT_CMPLX_STATUS)); >+} >+ >+static irqreturn_t axon_utl_interrupt(int irq, void *ptr) >+{ >+ struct axon_utl *axon_utl = (struct axon_utl *) ptr; >+ >+ axon_utl_dump_registers(axon_utl); >+ >+ panic("\naxon_utl: an unrecoverable error on PCIe node %s occured !\n", >+ axon_utl->dn->full_name); >+ >+ /* should never happen */ >+ return IRQ_HANDLED; >+} >+ >+static int axon_utl_setup_one(struct device_node *dn) >+{ >+ int ret, virq; >+ unsigned int flags; >+ struct axon_utl *axon_utl; >+ const u32 *addr; >+ u64 ioaddr, size; >+ >+ pr_debug("axon_utl: setting up dn %s\n", dn->full_name); >+ >+ axon_utl = kzalloc(sizeof(struct axon_utl), GFP_KERNEL); >+ if (!axon_utl) { >+ printk(KERN_ERR "axon_utl: could not allocate axon_utl for %s\n", >+ dn->full_name); >+ goto out; >+ } >+ >+ axon_utl->dn = dn; >+ >+ addr = of_get_address(dn, 0, &size, &flags); >+ >+ if (addr == 0) { >+ printk(KERN_ERR "axon_utl: addr of resource is 0\n"); >+ goto out_free; >+ } >+ >+ if (size == 0) { >+ printk(KERN_ERR "axon_utl: length of resource is 0\n"); >+ goto out_free; >+ } >+ >+ ioaddr = of_translate_address(dn, addr); >+ >+ axon_utl->base = ioremap(ioaddr, size); >+ >+ if (axon_utl->base == NULL) { >+ printk(KERN_ERR "axon_utl: unable to ioremap io address\n"); >+ goto out_free; >+ } >+ >+ virq = irq_of_parse_and_map(dn, 0); >+ if (virq == NO_IRQ) { >+ printk(KERN_ERR "axon_utl: irq parse and map failed for %s\n", >+ dn->full_name); >+ goto out_free; >+ } >+ >+ ret = request_irq(virq, axon_utl_interrupt, >+ IRQF_DISABLED, "axon_utl", axon_utl); >+ if (ret) { >+ printk(KERN_ERR "axon_utl: request for irq %d on dn %s failed \n", >+ virq, dn->full_name); >+ goto out_free; >+ } >+ >+ pr_info("axon_utl: registered error handler on irq %d for %s\n", >+ virq, axon_utl->dn->full_name); >+ >+ return 0; >+ >+out_free: >+ kfree(axon_utl); >+out: >+ return -ENODEV; >+} >+ >+static int axon_utl_init(void) >+{ >+ struct device_node *dn; >+ int n=0; >+ >+ for_each_compatible_node(dn, NULL, "ibm,axon-pciex-utl") { >+ if (axon_utl_setup_one(dn) == 0) >+ n++; >+ } >+ >+ if (n == 0) { >+ pr_info("No pciex nodes found\n"); >+ } >+ >+ return 0; >+} >+ >+subsys_initcall(axon_utl_init);
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 250611
:
160528
| 160529