linux/arch/arm/mach-cns3xxx
Krzysztof Hałasa 64cf9d07ef CNS3xxx: Fix PCIe early iotable_init().
This patch fixes the following BUG:

> kernel BUG at mm/vmalloc.c:1132!
> PC is at vm_area_add_early+0x20/0x84
> LR is at add_static_vm_early+0xc/0x60
>
> The problem is cns3xxx_pcie_init() (device_initcall) calls the "early"
> iotable_init().

Instead of merely calling the PCIe iotable_init() from
machine_desc->map_io(), this patch adds the required mappings to the
main CNS3xxx mapping table. This means we don't convert .pfn back to
virtual addresses in pcie.c. The size of the address space consumed for
PCIe control is reduced from 96 MiB (6 * 16 MiB) to about 32 MiB (this
doesn't include MMIO address space required by PCI devices):

- Size of the PCIe "host" mapping is reduced from 16 MiB to 4 KiB.
  It's a PCI configuration address space for the local (on-chip) PCIe
  bridge.

- Size of the "CFG0" mapping is reduced from 16 MiB to 64 KiB. It's for
  Type 0 Configuration accesses, i.e., accesses to the single device
  (with possible "functions") on the other end of the PCIe link.
  We really only need a 4 KiB page at 0x8000 (see the offset
  calculation in cns3xxx_pci_cfg_base()). There is still a potential
  problem with PCI bus numbers > 0xF, are they supported?

- The code in cns3xxx_pci_cfg_base() and cns3xxx_pcie_hw_init() should
  be clearer now.

- The maximum address space allocated for PCI MMIO is now correctly
  shown in /proc/iomem as 176 MiB (per each of the two PCI "domains"
  - previously only 16 MiB were reserved).

This patch has been tested on Gateworks Laguna board, masqueraded as
CNS3420VB.

Signed-off-by: Krzysztof Ha?asa <khalasa@piap.pl>
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
2014-03-17 15:35:21 +01:00
..
cns3xxx.h ARM: arm-soc multiplatform updates for 3.10 2013-05-02 09:38:16 -07:00
cns3420vb.c CNS3xxx: Fix a WARN() related to IRQ allocation. 2014-03-17 15:33:20 +01:00
core.c CNS3xxx: Fix PCIe early iotable_init(). 2014-03-17 15:35:21 +01:00
core.h reboot: arm: change reboot_mode to use enum reboot_mode 2013-07-09 10:33:29 -07:00
devices.c ARM: cns3xxx: make mach header files local 2013-03-14 17:34:55 +01:00
devices.h ARM: cns3xxx: Add support for AHCI controllers 2010-06-08 17:37:09 +04:00
Kconfig ARM: cns3xxx: initial DT support 2013-03-14 22:30:21 +01:00
Makefile ARM: cns3xxx: initial DT support 2013-03-14 22:30:21 +01:00
Makefile.boot ARM: 7022/1: allow to detect conflicting zreladdrs 2011-10-17 09:12:40 +01:00
pcie.c CNS3xxx: Fix PCIe early iotable_init(). 2014-03-17 15:35:21 +01:00
pm.c reboot: arm: change reboot_mode to use enum reboot_mode 2013-07-09 10:33:29 -07:00
pm.h ARM: cns3xxx: make mach header files local 2013-03-14 17:34:55 +01:00