On Fri, Feb 01, 2013 at 10:57:20AM -0700, Stephen Warren wrote: > > We have 20 windows on Armada XP if I remember correctly, and they are > > not only used for PCIe, but also to map the BootROM (needed to boot > > secondary CPUs), to map SPI flashes or NOR flashes, for example. So > > they are really shared between many uses. In terms of PCIe, there are > > only two types of windows: I/O and Memory, there is no notion of > > Prefetchable Memory window as far as I could see. > > In Tegra, we end up having separate MMIO vs. Prefetchable MMIO > chunks of our overall PCIe aperture. However, the HW setup appears > the same for both of those. I'm not sure if it's a bug in the > driver, or if it's just to separate the two address spaces so that > the page tables can be configured for those two regions with large > rather than small granularity. I need to go investigate that. The only purpose of prefetchable space is for legacy PCI. When a P2P bridge targets legacy PCI it has different behavior for its prefetchable memory window compared to the non-prefetchable memory window. IIRC (though it has been a long time since I looked really close at this) PCI-X and PCI-E did away with this special bridge behaviour but kept the prefetchable memory space for compatibility. These days it is typically used to mark cachable memory on an end device. >From a SOC perspective, there is no need to treat MMIO and prefetch areas any differently. ARM's per-page cachability flags can be used to deal with the differing caching requirements. However, the bus tree downstream of each root port will require the prefetch window to be contiguous. On Marvell, today, this means you need to burn two mbus windows to get this. If the Linux pci core could allocate the prefetch space for each root port bridge contiguously with the mmio space for the same root port then this could be reduced to one window covering both spaces for the port. > So there are 10 PCIe interfaces (root ports). That's on the SoC itself > right. Are all 10 (or a large number of them) actually used at once on > any given board design? I suppose this must be the case, or Marvell > wouldn't have wasted the silicon space on 10 root ports... Still, that's > a rather large number of ports! Agreed.. I have no idea what the target is for this.. > I think the only difference on the Marvell HW is: > > * The overall total size of the physical address space is dynamic rather > than fixed, because it's programmed through windows rather than > hard-coded into HW. Is it hard coded on tegra? I thought there was a register set that was used to set the overall PCI-E MMIO window location and size. I know even on x86 the PCI window is set via register, though that typically isn't disclosed except to bios writers.. Jason -- To unsubscribe from this list: send the line "unsubscribe linux-pci" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html