From 8193b068d49478e036c0d2ed3e3f717d767eedde Mon Sep 17 00:00:00 2001 From: Nico Huber Date: Wed, 21 Oct 2015 15:43:41 +0200 Subject: allocator: Page align memory mapped PCI resources To help hypervisors to assign PCI devices individually to virtualization guests, page align dynamically allocated MMIO resources. Tested with kontron/ktqm77 which has dynamically configured onboard devices on the root bus and secondary buses. Booted Linux and checked the configuration with `lspci -v`. Got the configuration through Muen's tools which are very picky about overlapping and alignment. Booted a Muen based system that uses many onboard devices. GMA, xHCI and one NIC (on a secondary bus) were verified to function properly. Change-Id: I2b7115070e1ccad64565feff025289732c3b5e66 Signed-off-by: Nico Huber Reviewed-on: http://review.coreboot.org/12111 Tested-by: build bot (Jenkins) Reviewed-by: Aaron Durbin --- src/device/pci_device.c | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'src/device/pci_device.c') diff --git a/src/device/pci_device.c b/src/device/pci_device.c index f2e4d5d2c1..cf2f74f81a 100644 --- a/src/device/pci_device.c +++ b/src/device/pci_device.c @@ -211,6 +211,12 @@ struct resource *pci_get_resource(struct device *dev, unsigned long index) resource->gran += 1; } resource->limit = limit = moving | (resource->size - 1); + + if (pci_base_address_is_memory_space(attr)) { + /* Page-align to allow individual mapping of devices. */ + if (resource->align < 12) + resource->align = 12; + } } /* -- cgit v1.2.3