Re: [PATCH] ppc32: Add support for Pegasos machines
From: Olaf Hering <hidden>
Date: 2005-01-29 15:54:33
Also in:
lkml
On Wed, Jan 26, Linux Kernel Mailing List wrote:
ChangeSet 1.2046, 2005/01/25 20:33:08-08:00, benh@kernel.crashing.org [PATCH] ppc32: Add support for Pegasos machines This patch, mostly from Sven Luther and reworked by me, adds support for Pegasos machines to the ppc32 arch. The patch contains all of the arch code. I'll send separately a few driver changes as well. Signed-off-by: Benjamin Herrenschmidt [off-list ref] Signed-off-by: Andrew Morton [off-list ref] Signed-off-by: Linus Torvalds [off-list ref] arch/ppc/platforms/chrp_pci.c | 38 +++++++++++++++++---
quoted hunk
diff -Nru a/arch/ppc/platforms/chrp_pci.c b/arch/ppc/platforms/chrp_pci.c--- a/arch/ppc/platforms/chrp_pci.c 2005-01-25 21:14:21 -08:00 +++ b/arch/ppc/platforms/chrp_pci.c 2005-01-25 21:14:21 -08:00@@ -195,7 +215,7 @@ struct pci_controller *hose; unsigned int *dma; char *model, *machine; - int is_longtrail = 0, is_mot = 0; + int is_longtrail = 0, is_mot = 0, is_pegasos = 0; struct device_node *root = find_path_device("/"); /*@@ -207,6 +227,10 @@ if (machine != NULL) { is_longtrail = strncmp(machine, "IBM,LongTrail", 13) == 0; is_mot = strncmp(machine, "MOT", 3) == 0; + if (strncmp(machine, "Pegasos2", 8) == 0) + is_pegasos = 2; + else if (strncmp(machine, "Pegasos", 7) == 0) + is_pegasos = 1; } for (dev = root->child; dev != NULL; dev = dev->sibling) { if (dev->type == NULL || strcmp(dev->type, "pci") != 0)@@ -275,5 +303,7 @@ } } - ppc_md.pcibios_fixup = chrp_pcibios_fixup; + /* Do not fixup interrupts from OF tree on pegasos */ + if (is_pegasos != 0) + ppc_md.pcibios_fixup = chrp_pcibios_fixup; }
This breaks other chrp boards, like a B50. PCI: Enabling device 0000:00:10.0 (0140 -> 0143) sym0: <875> rev 0x4 at pci 0000:00:10.0 irq 7 sym0: No NVRAM, ID 7, Fast-20, SE, parity checking sym0: SCSI BUS has been reset. scsi0 : sym-2.1.18n sym0:0:0: ABORT operation started. sym0:0:0: ABORT operation timed-out. sym0:0:0: DEVICE RESET operation started. sym0:0:0: DEVICE RESET operation timed-out. sym0:0:0: BUS RESET operation started. sym0:0:0: BUS RESET operation timed-out. sym0:0:0: HOST RESET operation started. Uninitialised timer! This is just a warning. Your computer is OK function=0xc02a0000, data=0x28000028 Call trace: [c0028028] check_timer_failed+0x7c/0x9c [c0028074] del_timer+0x2c/0xb0 [c0111c68] __sym_eh_done+0x8c/0x98 [c0110654] sym_xpt_done+0x2c/0x40 [c0117930] sym_flush_comp_queue+0x160/0x190 [c0117fd0] sym_start_up+0x194/0x7d8 [c0111994] sym_eh_handler+0x1bc/0x2d0 [c0107644] scsi_try_host_reset+0x8c/0x104 [c0108ac0] scsi_error_handler+0x8c0/0xe68 [c0006e14] kernel_thread+0x44/0x60 sym0: SCSI BUS has been reset. sym0:0:0: HOST RESET operation timed-out. scsi: Device offlined - not ready after error recovery: host 0 channel 0 id 0 lun 0 Signed-off-by: Olaf Hering <redacted>
--- ./arch/ppc/platforms/chrp_pci.c~ 2005-01-29 16:22:09.288047704 +0100
+++ ./arch/ppc/platforms/chrp_pci.c 2005-01-29 16:44:03.905193820 +0100@@ -304,6 +304,6 @@ } /* Do not fixup interrupts from OF tree on pegasos */ - if (is_pegasos != 0) + if (!is_pegasos) ppc_md.pcibios_fixup = chrp_pcibios_fixup; }