linux/arch/mips/pci
Bjorn Helgaas 237865f195 PCI: Revert "PCI: Call pci_read_bridge_bases() from core instead of arch code"
Revert dff22d2054 ("PCI: Call pci_read_bridge_bases() from core instead
of arch code").

Reading PCI bridge windows is not arch-specific in itself, but there is PCI
core code that doesn't work correctly if we read them too early.  For
example, Hannes found this case on an ARM Freescale i.mx6 board:

  pci_bus 0000:00: root bus resource [mem 0x01000000-0x01efffff]
  pci 0000:00:00.0: PCI bridge to [bus 01-ff]
  pci 0000:00:00.0: BAR 8: no space for [mem size 0x01000000] (mem window)
  pci 0000:01:00.0: BAR 2: failed to assign [mem size 0x00200000]
  pci 0000:01:00.0: BAR 1: failed to assign [mem size 0x00004000]
  pci 0000:01:00.0: BAR 0: failed to assign [mem size 0x00000100]

The 00:00.0 mem window needs to be at least 3MB: the 01:00.0 device needs
0x204100 of space, and mem windows are megabyte-aligned.

Bus sizing can increase a bridge window size, but never *decrease* it (see
d65245c329 ("PCI: don't shrink bridge resources")).  Prior to
dff22d2054, ARM didn't read bridge windows at all, so the "original size"
was zero, and we assigned a 3MB window.

After dff22d2054, we read the bridge windows before sizing the bus.  The
firmware programmed a 16MB window (size 0x01000000) in 00:00.0, and since
we never decrease the size, we kept 16MB even though we only needed 3MB.
But 16MB doesn't fit in the host bridge aperture, so we failed to assign
space for the window and the downstream devices.

I think this is a defect in the PCI core: we shouldn't rely on the firmware
to assign sensible windows.

Ray reported a similar problem, also on ARM, with Broadcom iProc.

Issues like this are too hard to fix right now, so revert dff22d2054.

Reported-by: Hannes <oe5hpm@gmail.com>
Reported-by: Ray Jui <rjui@broadcom.com>
Link: http://lkml.kernel.org/r/CAAa04yFQEUJm7Jj1qMT57-LG7ZGtnhNDBe=PpSRa70Mj+XhW-A@mail.gmail.com
Link: http://lkml.kernel.org/r/55F75BB8.4070405@broadcom.com
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Acked-by: Yinghai Lu <yinghai@kernel.org>
Acked-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
2015-09-15 13:18:04 -05:00
..
fixup-bcm63xx.c MIPS: BCM63xx: Add support for the Broadcom BCM63xx family of SOCs. 2009-09-17 20:07:52 +02:00
fixup-capcella.c Update Yoichi Yuasa's e-mail address 2009-07-03 15:45:29 +01:00
fixup-cobalt.c PCI: Remove unnecessary #includes of <asm/pci.h> 2015-06-08 07:56:09 -05:00
fixup-emma2rh.c MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
fixup-fuloong2e.c MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
fixup-ip32.c MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
fixup-jmr3927.c [MIPS] TXx9: Make single kernel can support multiple boards 2008-07-15 18:44:35 +01:00
fixup-lantiq.c of/irq: Create of_irq_parse_and_map_pci() to consolidate arch code. 2013-10-24 11:50:36 +01:00
fixup-lemote2f.c MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
fixup-loongson3.c MIPS: Loongson 3: Add HT-linked PCI support 2014-03-31 18:17:12 +02:00
fixup-malta.c MIPS: Malta: Let PIIX4 respond to PCI special cycles 2014-05-30 21:01:09 +02:00
fixup-mpc30x.c mips: mark const init data with __initconst instead of __initdata 2012-07-19 11:23:43 +02:00
fixup-pmcmsp.c MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
fixup-rbtx4927.c [MIPS] TXx9: Make single kernel can support multiple boards 2008-07-15 18:44:35 +01:00
fixup-rbtx4938.c [MIPS] TXx9: Make single kernel can support multiple boards 2008-07-15 18:44:35 +01:00
fixup-rc32434.c mips: delete non-required instances of include <linux/init.h> 2014-01-24 22:39:56 +01:00
fixup-sb1250.c mips: delete non-required instances of include <linux/init.h> 2014-01-24 22:39:56 +01:00
fixup-sni.c MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
fixup-tb0219.c MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
fixup-tb0226.c Update Yoichi Yuasa's e-mail address 2009-07-03 15:45:29 +01:00
fixup-tb0287.c MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
Makefile MIPS: ralink: Fix bad config symbol in PCI makefile. 2015-04-10 15:41:50 +02:00
msi-octeon.c MIPS/PCI: Use for_pci_msi_entry() to access MSI device list 2015-07-22 18:37:42 +02:00
msi-xlp.c MIPS: Netlogic: Use chip_data for irq_chip methods 2015-09-03 12:08:03 +02:00
ops-bcm63xx.c MIPS: Remove useless parentheses 2014-11-24 07:44:49 +01:00
ops-bonito64.c mips: delete non-required instances of include <linux/init.h> 2014-01-24 22:39:56 +01:00
ops-bridge.c MIPS: IP27: Correct fucked grammar in ops-bridge.c 2012-12-13 18:15:28 +01:00
ops-emma2rh.c MIPS: ops-emma2rh: Drop nonsensical db_assert 2015-08-26 15:23:35 +02:00
ops-gt64xxx_pci0.c MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
ops-lantiq.c mips: delete non-required instances of include <linux/init.h> 2014-01-24 22:39:56 +01:00
ops-loongson2.c mips: delete non-required instances of include <linux/init.h> 2014-01-24 22:39:56 +01:00
ops-loongson3.c MIPS: Loongson 3: Add HT-linked PCI support 2014-03-31 18:17:12 +02:00
ops-mace.c PCI: Remove unnecessary #includes of <asm/pci.h> 2015-06-08 07:56:09 -05:00
ops-msc.c mips: delete non-required instances of include <linux/init.h> 2014-01-24 22:39:56 +01:00
ops-nile4.c MIPS: NILE4: Remove odd locking in PCI config space access code 2014-11-24 07:44:49 +01:00
ops-pmcmsp.c MIPS: MSP71xx: remove odd locking in PCI config space access code 2014-11-24 07:44:50 +01:00
ops-rc32434.c mips: delete non-required instances of include <linux/init.h> 2014-01-24 22:39:56 +01:00
ops-sni.c MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
ops-tx3927.c mips: Update the email address of Geert Uytterhoeven 2014-06-02 16:34:41 +02:00
ops-tx4927.c MIPS: TXx9: Delete an unused variable in tx4927_pcibios_setup 2014-07-30 15:58:39 +02:00
ops-vr41xx.c MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
pci-alchemy.c mips: pci: drop owner assignment from platform_drivers 2014-10-20 16:20:08 +02:00
pci-ar71xx.c MIPS: pci-ar71xx: Consolidate chained IRQ handler install/remove 2015-08-26 15:23:24 +02:00
pci-ar724x.c MIPS: pci-ar724x: Consolidate chained IRQ handler install/remove 2015-08-26 15:23:24 +02:00
pci-ar2315.c Merge branch 'irq-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2015-07-01 15:19:35 -07:00
pci-bcm47xx.c MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
pci-bcm63xx.c MIPS: BCM63XX: add support for BCM3368 Cable Modem 2013-07-01 15:10:53 +02:00
pci-bcm63xx.h MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
pci-bcm1480.c MIPS: Add struct pci_ops member names to initialization 2015-01-16 15:04:38 +01:00
pci-bcm1480ht.c MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
pci-emma2rh.c MIPS: Eleminate filenames from comments 2009-08-03 17:52:40 +01:00
pci-ip27.c mips: delete non-required instances of include <linux/init.h> 2014-01-24 22:39:56 +01:00
pci-ip32.c MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
pci-lantiq.c MIPS: Remove all the uses of custom gpio.h 2015-09-03 12:08:02 +02:00
pci-lantiq.h MIPS: Lantiq: Add PCI controller support. 2011-05-19 09:55:42 +01:00
pci-lasat.c MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
pci-malta.c MIPS: Malta: Make use of generic CM support 2014-03-26 23:09:06 +01:00
pci-octeon.c MIPS: OCTEON: fix PCI interrupt mapping for D-Link DSR-1000N 2015-04-10 15:41:42 +02:00
pci-rc32434.c MIPS: RC32434: fix broken PCI resource initialization 2014-05-26 09:02:06 +02:00
pci-rt2880.c MIPS: pci: Drop owner assignment from platform_drivers 2015-04-01 17:21:55 +02:00
pci-rt3883.c MIPS: rt3883: Prepare rt3883_pci_irq_handler for irq argument removal 2015-08-26 15:23:34 +02:00
pci-sb1250.c TTY:vt: convert remain take_over_console's users to do_take_over_console 2013-05-20 22:29:27 -07:00
pci-tx4927.c MIPS: irq: Remove IRQF_DISABLED 2011-12-07 22:03:45 +00:00
pci-tx4938.c MIPS: irq: Remove IRQF_DISABLED 2011-12-07 22:03:45 +00:00
pci-tx4939.c mips: Convert pr_warning to pr_warn 2014-11-24 07:44:51 +01:00
pci-virtio-guest.c MIPS: paravirt: Add pci controller for virtio 2014-06-02 12:34:20 +02:00
pci-vr41xx.c MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
pci-vr41xx.h MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
pci-xlp.c MIPS: PCI: Netlogic XLP9XX support 2014-01-24 22:39:49 +01:00
pci-xlr.c PCI/MSI: Rename write_msi_msg() to pci_write_msi_msg() 2014-11-23 13:01:45 +01:00
pci.c PCI: Revert "PCI: Call pci_read_bridge_bases() from core instead of arch code" 2015-09-15 13:18:04 -05:00
pcie-octeon.c MIPS: Octeon: Remove udelay() causing huge IRQ latency 2015-04-10 15:41:42 +02:00