• Ralf Baechle's avatar
    [PATCH] PCI: Avoid leaving MASTER_ABORT disabled permanently when returning from pci_scan_bridge. · bbe8f9a3
    Ralf Baechle authored
    > On Mon, Feb 13, 2006 at 05:13:21PM -0800, David S. Miller wrote:
    > >
    > > In drivers/pci/probe.c:pci_scan_bridge(), if this is not the first
    > > pass (pass != 0) we don't restore the PCI_BRIDGE_CONTROL_REGISTER and
    > > thus leave PCI_BRIDGE_CTL_MASTER_ABORT off:
    > >
    > > int __devinit pci_scan_bridge(struct pci_bus *bus, struct pci_dev * dev, int max, int pass)
    > > {
    > >  ...
    > > 	/* Disable MasterAbortMode during probing to avoid reporting
    > > 	   of bus errors (in some architectures) */
    > > 	pci_read_config_word(dev, PCI_BRIDGE_CONTROL, &bctl);
    > > 	pci_write_config_word(dev, PCI_BRIDGE_CONTROL,
    > > 			      bctl & ~PCI_BRIDGE_CTL_MASTER_ABORT);
    > >  ...
    > > 	if ((buses & 0xffff00) && !pcibios_assign_all_busses() && !is_cardbus) {
    > > 		unsigned int cmax, busnr;
    > > 		/*
    > > 		 * Bus already configured by firmware, process it in the first
    > > 		 * pass and just note the configuration.
    > > 		 */
    > > 		if (pass)
    > > 			return max;
    > >  ...
    > > 	}
    > >
    > > 	pci_write_config_word(dev, PCI_BRIDGE_CONTROL, bctl);
    > >  ...
    > >
    > > This doesn't seem intentional.
    
    Agreed, looks like an accident.  The patch [1] originally came from Kip
    Walker (Broadcom back then) between 2.6.0-test3 and 2.6.0-test4.  As I
    recall it was supposed to fix an issue with with PCI aborts being
    signalled by the PCI bridge of the Broadcom BCM1250 family of SOCs when
    probing behind pci_scan_bridge.  It is undeseriable to disable
    PCI_BRIDGE_CTL_MASTER_ABORT in pci_{read,write)_config_* and the
    behaviour wasn't considered a bug in need of a workaround, so this was
    put in probe.c.
    
    I don't have an affected system at hand, so can't really test but I
    propose something like the below patch.
    
    [1] http://www.linux-mips.org/git?p=linux.git;a=commit;h=599457e0cb702a31a3247ea6a5d9c6c99c4cf195
    
    [PCI] Avoid leaving MASTER_ABORT disabled permanently when returning from pci_scan_bridge.
    Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
    bbe8f9a3
probe.c 28.2 KB