aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMaciej W. Rozycki <macro@linux-mips.org>2006-10-02 07:55:09 -0400
committerRalf Baechle <ralf@linux-mips.org>2006-10-03 12:59:17 -0400
commit15a1c5140436c5be7673a4709c5d7e1f3cd7bdd9 (patch)
tree0ec2b255917f916c072af27eeeb2b76d9d361ff9
parent3a42aa934856bfe3f28946f66ea8a5f056445747 (diff)
[MIPS] BCM1250: TRDY timeout tweaks for Broadcom SiByte systems
It was obesrved that at least one older PCI card predating the requirement for the TRDY signal to respond within 16 clock ticks actually does not meet this rule nor even the power-on defaults of the PCI bridges found in development systems built around the Broadcom SiByte SOCs. Here is a patch that bumps up the timeout to the highest finite value supported by these chips, which is 255 clock ticks. The bridges affected are the SiByte SOC itself and the SP1011. This change does not effectively affect systems only having PCI option cards installed that meet the TRDY requirement of the current PCI spec. The rule was introduced with PCI 2.1, so any older card may make the system affected. If this is the case, performance of the system will suffer in return for the card working at all. If this is a concern, then the solution is not to use such cards. Signed-off-by: Maciej W. Rozycki <macro@linux-mips.org> Signed-off-by: Ralf Baechle <ralf@linux-mips.org> ---
-rw-r--r--arch/mips/pci/fixup-sb1250.c23
-rw-r--r--include/linux/pci_ids.h3
2 files changed, 25 insertions, 1 deletions
diff --git a/arch/mips/pci/fixup-sb1250.c b/arch/mips/pci/fixup-sb1250.c
index 13791b78e598..7a7444874e80 100644
--- a/arch/mips/pci/fixup-sb1250.c
+++ b/arch/mips/pci/fixup-sb1250.c
@@ -1,7 +1,7 @@
1/* 1/*
2 * arch/mips/pci/fixup-sb1250.c 2 * arch/mips/pci/fixup-sb1250.c
3 * 3 *
4 * Copyright (C) 2004 MIPS Technologies, Inc. All rights reserved. 4 * Copyright (C) 2004, 2006 MIPS Technologies, Inc. All rights reserved.
5 * Author: Maciej W. Rozycki <macro@mips.com> 5 * Author: Maciej W. Rozycki <macro@mips.com>
6 * 6 *
7 * This program is free software; you can redistribute it and/or 7 * This program is free software; you can redistribute it and/or
@@ -14,6 +14,17 @@
14#include <linux/pci.h> 14#include <linux/pci.h>
15 15
16/* 16/*
17 * Set the the BCM1250, etc. PCI host bridge's TRDY timeout
18 * to the finite max.
19 */
20static void __init quirk_sb1250_pci(struct pci_dev *dev)
21{
22 pci_write_config_byte(dev, 0x40, 0xff);
23}
24DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_SIBYTE, PCI_DEVICE_ID_BCM1250_PCI,
25 quirk_sb1250_pci);
26
27/*
17 * The BCM1250, etc. PCI/HT bridge reports as a host bridge. 28 * The BCM1250, etc. PCI/HT bridge reports as a host bridge.
18 */ 29 */
19static void __init quirk_sb1250_ht(struct pci_dev *dev) 30static void __init quirk_sb1250_ht(struct pci_dev *dev)
@@ -22,3 +33,13 @@ static void __init quirk_sb1250_ht(struct pci_dev *dev)
22} 33}
23DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_SIBYTE, PCI_DEVICE_ID_BCM1250_HT, 34DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_SIBYTE, PCI_DEVICE_ID_BCM1250_HT,
24 quirk_sb1250_ht); 35 quirk_sb1250_ht);
36
37/*
38 * Set the the SP1011 HT/PCI bridge's TRDY timeout to the finite max.
39 */
40static void __init quirk_sp1011(struct pci_dev *dev)
41{
42 pci_write_config_byte(dev, 0x64, 0xff);
43}
44DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_SIPACKETS, PCI_DEVICE_ID_SP1011,
45 quirk_sp1011);
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h
index c9ffbc3843d5..dc7f573d36e4 100644
--- a/include/linux/pci_ids.h
+++ b/include/linux/pci_ids.h
@@ -1883,6 +1883,8 @@
1883#define PCI_DEVICE_ID_PANACOM_QUADMODEM 0x0400 1883#define PCI_DEVICE_ID_PANACOM_QUADMODEM 0x0400
1884#define PCI_DEVICE_ID_PANACOM_DUALMODEM 0x0402 1884#define PCI_DEVICE_ID_PANACOM_DUALMODEM 0x0402
1885 1885
1886#define PCI_VENDOR_ID_SIPACKETS 0x14d9
1887#define PCI_DEVICE_ID_SP1011 0x0010
1886 1888
1887#define PCI_VENDOR_ID_AFAVLAB 0x14db 1889#define PCI_VENDOR_ID_AFAVLAB 0x14db
1888#define PCI_DEVICE_ID_AFAVLAB_P028 0x2180 1890#define PCI_DEVICE_ID_AFAVLAB_P028 0x2180
@@ -1997,6 +1999,7 @@
1997#define PCI_DEVICE_ID_FARSITE_TE1C 0x1612 1999#define PCI_DEVICE_ID_FARSITE_TE1C 0x1612
1998 2000
1999#define PCI_VENDOR_ID_SIBYTE 0x166d 2001#define PCI_VENDOR_ID_SIBYTE 0x166d
2002#define PCI_DEVICE_ID_BCM1250_PCI 0x0001
2000#define PCI_DEVICE_ID_BCM1250_HT 0x0002 2003#define PCI_DEVICE_ID_BCM1250_HT 0x0002
2001 2004
2002#define PCI_VENDOR_ID_NETCELL 0x169c 2005#define PCI_VENDOR_ID_NETCELL 0x169c