|
@@ -462,6 +462,7 @@ static void pcibios_init_hw(struct hw_pci *hw, struct list_head *head)
|
|
|
sys->busnr = busnr;
|
|
|
sys->swizzle = hw->swizzle;
|
|
|
sys->map_irq = hw->map_irq;
|
|
|
+ sys->align_resource = hw->align_resource;
|
|
|
INIT_LIST_HEAD(&sys->resources);
|
|
|
|
|
|
if (hw->private_data)
|
|
@@ -574,6 +575,8 @@ char * __init pcibios_setup(char *str)
|
|
|
resource_size_t pcibios_align_resource(void *data, const struct resource *res,
|
|
|
resource_size_t size, resource_size_t align)
|
|
|
{
|
|
|
+ struct pci_dev *dev = data;
|
|
|
+ struct pci_sys_data *sys = dev->sysdata;
|
|
|
resource_size_t start = res->start;
|
|
|
|
|
|
if (res->flags & IORESOURCE_IO && start & 0x300)
|
|
@@ -581,6 +584,9 @@ resource_size_t pcibios_align_resource(void *data, const struct resource *res,
|
|
|
|
|
|
start = (start + align - 1) & ~(align - 1);
|
|
|
|
|
|
+ if (sys->align_resource)
|
|
|
+ return sys->align_resource(dev, res, start, size, align);
|
|
|
+
|
|
|
return start;
|
|
|
}
|
|
|
|