88 * Copyright (C) 1999-2001 Hewlett-Packard Company
99 * Copyright (C) 1999-2001 Grant Grundler
1010 */
11+ #include <linux/align.h>
1112#include <linux/eisa.h>
1213#include <linux/init.h>
1314#include <linux/module.h>
@@ -196,9 +197,12 @@ void __ref pcibios_init_bridge(struct pci_dev *dev)
196197 * than res->start.
197198 */
198199resource_size_t pcibios_align_resource (void * data , const struct resource * res ,
199- resource_size_t size , resource_size_t alignment )
200+ const struct resource * empty_res ,
201+ resource_size_t size ,
202+ resource_size_t alignment )
200203{
201- resource_size_t mask , align , start = res -> start ;
204+ struct pci_dev * dev = data ;
205+ resource_size_t align , start = res -> start ;
202206
203207 DBG_RES ("pcibios_align_resource(%s, (%p) [%lx,%lx]/%x, 0x%lx, 0x%lx)\n" ,
204208 pci_name (((struct pci_dev * ) data )),
@@ -207,11 +211,10 @@ resource_size_t pcibios_align_resource(void *data, const struct resource *res,
207211
208212 /* If it's not IO, then it's gotta be MEM */
209213 align = (res -> flags & IORESOURCE_IO ) ? PCIBIOS_MIN_IO : PCIBIOS_MIN_MEM ;
210-
211- /* Align to largest of MIN or input size */
212- mask = max (alignment , align ) - 1 ;
213- start += mask ;
214- start &= ~mask ;
214+ if (align > alignment )
215+ start = ALIGN (start , align );
216+ else
217+ start = pci_align_resource (dev , res , empty_res , size , alignment );
215218
216219 return start ;
217220}
0 commit comments