Hi, On Sat, Sep 24, 2005 at 11:57:10PM +0200, Peter 'p2' De Schrijver wrote: > Hi, > > I'm seeing some strange bus errors when trying to get the Fore > ForeRunner PCA-200EPC card to work on the sibyte swarm. The driver polls > a register on this card for status information. This triggers a bus > error once in a while. This happens regardless if the card is attached > to the PCI bus of the sb1250 or to the PCI bus behind the Alliance HT - > PCI bridge. > Thanks to Maciej, I found the problem. The device apparently does not always react in time for the sb1250 PCI host. Changing TrdyTimeout to 0xff fixes the problem for the 32bit PCI slots. I need to find the equivalent register on the SP1011 bridge to fix the problem for the 64bit PCI slots. Patch attached. Cheers, Peter (p2). -- goa is a state of mind
--- linux/include/linux/pci_ids.h 2005-09-15 10:56:21.000000000 +0200 +++ linux-my/include/linux/pci_ids.h 2005-09-25 15:10:53.000000000 +0200 @@ -2192,6 +2192,7 @@ #define PCI_DEVICE_ID_FARSITE_TE1C 0x1612 #define PCI_VENDOR_ID_SIBYTE 0x166d +#define PCI_DEVICE_ID_BCM1250_PCI 0x0001 #define PCI_DEVICE_ID_BCM1250_HT 0x0002 #define PCI_VENDOR_ID_NETCELL 0x169c --- linux/arch/mips/pci/fixup-sb1250.c 2004-12-18 23:28:20.000000000 +0100 +++ linux-my/arch/mips/pci/fixup-sb1250.c 2005-09-25 15:25:02.000000000 +0200 @@ -20,5 +20,22 @@ { dev->class = PCI_CLASS_BRIDGE_PCI << 8; } + +/* + * Set PCI Trdy timeout to 0xff clock cycles + */ +static void __init quirk_sb1250_pci(struct pci_dev *dev) +{ + u32 pci_timeout; + + pci_read_config_dword(dev, 0x40, &pci_timeout); + pci_timeout|=0xff; + pci_write_config_dword(dev,0x40,pci_timeout); +} + DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_SIBYTE, PCI_DEVICE_ID_BCM1250_HT, quirk_sb1250_ht); + +DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_SIBYTE, PCI_DEVICE_ID_BCM1250_PCI, + quirk_sb1250_pci); +
Attachment:
signature.asc
Description: Digital signature