PCI: Make CARDBUS_MEM_SIZE and CARDBUS_IO_SIZE boot options
CARDBUS_MEM_SIZE was increased to 64MB on 2.6.20-rc2, but larger size might result in allocation failure for the reserving itself on some platforms (for example typical 32bit MIPS). Make it (and CARDBUS_IO_SIZE too) customizable by "pci=" option for such platforms. Signed-off-by: Atsushi Nemoto <anemo@mba.ocn.ne.jp> Cc: Daniel Ritz <daniel.ritz@gmx.ch> Cc: Ralf Baechle <ralf@linux-mips.org> Cc: Ivan Kokshaysky <ink@jurassic.park.msu.ru> Cc: Dominik Brodowski <linux@dominikbrodowski.net> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
26ba05e4c6
commit
4516a618a7
@ -1275,6 +1275,12 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||
This sorting is done to get a device
|
||||
order compatible with older (<= 2.4) kernels.
|
||||
nobfsort Don't sort PCI devices into breadth-first order.
|
||||
cbiosize=nn[KMG] The fixed amount of bus space which is
|
||||
reserved for the CardBus bridge's IO window.
|
||||
The default value is 256 bytes.
|
||||
cbmemsize=nn[KMG] The fixed amount of bus space which is
|
||||
reserved for the CardBus bridge's memory
|
||||
window. The default value is 64 megabytes.
|
||||
|
||||
pcmv= [HW,PCMCIA] BadgePAD 4
|
||||
|
||||
|
@ -21,6 +21,12 @@
|
||||
|
||||
unsigned int pci_pm_d3_delay = 10;
|
||||
|
||||
#define DEFAULT_CARDBUS_IO_SIZE (256)
|
||||
#define DEFAULT_CARDBUS_MEM_SIZE (64*1024*1024)
|
||||
/* pci=cbmemsize=nnM,cbiosize=nn can override this */
|
||||
unsigned long pci_cardbus_io_size = DEFAULT_CARDBUS_IO_SIZE;
|
||||
unsigned long pci_cardbus_mem_size = DEFAULT_CARDBUS_MEM_SIZE;
|
||||
|
||||
/**
|
||||
* pci_bus_max_busnr - returns maximum PCI bus number of given bus' children
|
||||
* @bus: pointer to PCI bus structure to search
|
||||
@ -1333,6 +1339,10 @@ static int __devinit pci_setup(char *str)
|
||||
if (*str && (str = pcibios_setup(str)) && *str) {
|
||||
if (!strcmp(str, "nomsi")) {
|
||||
pci_no_msi();
|
||||
} else if (!strncmp(str, "cbiosize=", 9)) {
|
||||
pci_cardbus_io_size = memparse(str + 9, &str);
|
||||
} else if (!strncmp(str, "cbmemsize=", 10)) {
|
||||
pci_cardbus_mem_size = memparse(str + 10, &str);
|
||||
} else {
|
||||
printk(KERN_ERR "PCI: Unknown option `%s'\n",
|
||||
str);
|
||||
|
@ -36,13 +36,6 @@
|
||||
|
||||
#define ROUND_UP(x, a) (((x) + (a) - 1) & ~((a) - 1))
|
||||
|
||||
/*
|
||||
* FIXME: IO should be max 256 bytes. However, since we may
|
||||
* have a P2P bridge below a cardbus bridge, we need 4K.
|
||||
*/
|
||||
#define CARDBUS_IO_SIZE (256)
|
||||
#define CARDBUS_MEM_SIZE (64*1024*1024)
|
||||
|
||||
static void __devinit
|
||||
pbus_assign_resources_sorted(struct pci_bus *bus)
|
||||
{
|
||||
@ -415,12 +408,12 @@ pci_bus_size_cardbus(struct pci_bus *bus)
|
||||
* Reserve some resources for CardBus. We reserve
|
||||
* a fixed amount of bus space for CardBus bridges.
|
||||
*/
|
||||
b_res[0].start = CARDBUS_IO_SIZE;
|
||||
b_res[0].end = b_res[0].start + CARDBUS_IO_SIZE - 1;
|
||||
b_res[0].start = pci_cardbus_io_size;
|
||||
b_res[0].end = b_res[0].start + pci_cardbus_io_size - 1;
|
||||
b_res[0].flags |= IORESOURCE_IO;
|
||||
|
||||
b_res[1].start = CARDBUS_IO_SIZE;
|
||||
b_res[1].end = b_res[1].start + CARDBUS_IO_SIZE - 1;
|
||||
b_res[1].start = pci_cardbus_io_size;
|
||||
b_res[1].end = b_res[1].start + pci_cardbus_io_size - 1;
|
||||
b_res[1].flags |= IORESOURCE_IO;
|
||||
|
||||
/*
|
||||
@ -440,16 +433,16 @@ pci_bus_size_cardbus(struct pci_bus *bus)
|
||||
* twice the size.
|
||||
*/
|
||||
if (ctrl & PCI_CB_BRIDGE_CTL_PREFETCH_MEM0) {
|
||||
b_res[2].start = CARDBUS_MEM_SIZE;
|
||||
b_res[2].end = b_res[2].start + CARDBUS_MEM_SIZE - 1;
|
||||
b_res[2].start = pci_cardbus_mem_size;
|
||||
b_res[2].end = b_res[2].start + pci_cardbus_mem_size - 1;
|
||||
b_res[2].flags |= IORESOURCE_MEM | IORESOURCE_PREFETCH;
|
||||
|
||||
b_res[3].start = CARDBUS_MEM_SIZE;
|
||||
b_res[3].end = b_res[3].start + CARDBUS_MEM_SIZE - 1;
|
||||
b_res[3].start = pci_cardbus_mem_size;
|
||||
b_res[3].end = b_res[3].start + pci_cardbus_mem_size - 1;
|
||||
b_res[3].flags |= IORESOURCE_MEM;
|
||||
} else {
|
||||
b_res[3].start = CARDBUS_MEM_SIZE * 2;
|
||||
b_res[3].end = b_res[3].start + CARDBUS_MEM_SIZE * 2 - 1;
|
||||
b_res[3].start = pci_cardbus_mem_size * 2;
|
||||
b_res[3].end = b_res[3].start + pci_cardbus_mem_size * 2 - 1;
|
||||
b_res[3].flags |= IORESOURCE_MEM;
|
||||
}
|
||||
}
|
||||
|
@ -854,5 +854,8 @@ extern int pci_pci_problems;
|
||||
#define PCIPCI_ALIMAGIK 32 /* Need low latency setting */
|
||||
#define PCIAGP_FAIL 64 /* No PCI to AGP DMA */
|
||||
|
||||
extern unsigned long pci_cardbus_io_size;
|
||||
extern unsigned long pci_cardbus_mem_size;
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
#endif /* LINUX_PCI_H */
|
||||
|
Loading…
Reference in New Issue
Block a user