Subject: Re: [PATCH] ppc32: Add support for Pegasos machines

From: Olaf Hering <[email-masked]>
Date: Sat, 29 Jan 2005 16:53:44 +0100

On Wed, Jan 26, Linux Kernel Mailing List wrote:

> ChangeSet 1.2046, 2005/01/25 20:33:08-08:00, [email-masked]
> 
> 	[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 <[email-masked]>
> 	Signed-off-by: Andrew Morton <[email-masked]>
> 	Signed-off-by: Linus Torvalds <[email-masked]>
> 
> 
> 
>  arch/ppc/platforms/chrp_pci.c   |   38 +++++++++++++++++---

> 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 <[email-masked]>

--- ./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;
 }