15a1c51404
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> ---
45 lines
1.3 KiB
C
45 lines
1.3 KiB
C
/*
|
|
* arch/mips/pci/fixup-sb1250.c
|
|
*
|
|
* Copyright (C) 2004, 2006 MIPS Technologies, Inc. All rights reserved.
|
|
* Author: Maciej W. Rozycki <macro@mips.com>
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation; either version
|
|
* 2 of the License, or (at your option) any later version.
|
|
*/
|
|
|
|
#include <linux/init.h>
|
|
#include <linux/pci.h>
|
|
|
|
/*
|
|
* Set the the BCM1250, etc. PCI host bridge's TRDY timeout
|
|
* to the finite max.
|
|
*/
|
|
static void __init quirk_sb1250_pci(struct pci_dev *dev)
|
|
{
|
|
pci_write_config_byte(dev, 0x40, 0xff);
|
|
}
|
|
DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_SIBYTE, PCI_DEVICE_ID_BCM1250_PCI,
|
|
quirk_sb1250_pci);
|
|
|
|
/*
|
|
* The BCM1250, etc. PCI/HT bridge reports as a host bridge.
|
|
*/
|
|
static void __init quirk_sb1250_ht(struct pci_dev *dev)
|
|
{
|
|
dev->class = PCI_CLASS_BRIDGE_PCI << 8;
|
|
}
|
|
DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_SIBYTE, PCI_DEVICE_ID_BCM1250_HT,
|
|
quirk_sb1250_ht);
|
|
|
|
/*
|
|
* Set the the SP1011 HT/PCI bridge's TRDY timeout to the finite max.
|
|
*/
|
|
static void __init quirk_sp1011(struct pci_dev *dev)
|
|
{
|
|
pci_write_config_byte(dev, 0x64, 0xff);
|
|
}
|
|
DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_SIPACKETS, PCI_DEVICE_ID_SP1011,
|
|
quirk_sp1011);
|