PCI / PCIe Device Memory - Rationale for Choosing MMIO Over PMIO (and Visa-Versa)

Greg KH greg at kroah.com
Thu Nov 5 09:47:11 EST 2020

On Thu, Nov 05, 2020 at 02:27:58PM +0000, Jack Winch wrote:
> Hi all,
> Over the last couple of months, I've been reading the hardware
> documentation and Linux device driver source code for a range of
> different PCI and PCIe devices.  Those examined range from
> multi-function data acquisition cards through to avionics bus
> interface devices.  In doing so, I have referenced numerous resources
> (including the Third Edition of LDD - what a great book - and the
> documentation available for the Linux PCI Bus Subsystem on
> kernel.org).
> One thing I'm still a little unclear on is why vendors might opt to
> map PCI / PCIe device memory into the system memory map as either
> Memory-Mapped I/O (MMIO) or Port-Mapped I/O (PMIO).  That is, for what
> reasons would a device manufacturer choose to make use of one address
> space over the other for regions of a PCI / PCIe device's memory?
> Some of the general reasons are alluded to by the aforementioned
> resources (e.g., more instruction cycles are required to access data
> via PMIO, MMIO can be marked as prefetchable and handled as such,
> etc).

I think you should be talking to hardware people about this, as this is
almost always due to hardware limitations/issues/design decisions.  The
PCI-SIG should have a bunch of resources about this, have you looked
into that?

good luck!

greg k-h

More information about the Kernelnewbies mailing list