mirror of
https://github.com/adulau/aha.git
synced 2024-12-28 11:46:19 +00:00
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
4 changed files with 29 additions and 17 deletions
|
@ -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
|
This sorting is done to get a device
|
||||||
order compatible with older (<= 2.4) kernels.
|
order compatible with older (<= 2.4) kernels.
|
||||||
nobfsort Don't sort PCI devices into breadth-first order.
|
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
|
pcmv= [HW,PCMCIA] BadgePAD 4
|
||||||
|
|
||||||
|
|
|
@ -21,6 +21,12 @@
|
||||||
|
|
||||||
unsigned int pci_pm_d3_delay = 10;
|
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
|
* pci_bus_max_busnr - returns maximum PCI bus number of given bus' children
|
||||||
* @bus: pointer to PCI bus structure to search
|
* @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 (*str && (str = pcibios_setup(str)) && *str) {
|
||||||
if (!strcmp(str, "nomsi")) {
|
if (!strcmp(str, "nomsi")) {
|
||||||
pci_no_msi();
|
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 {
|
} else {
|
||||||
printk(KERN_ERR "PCI: Unknown option `%s'\n",
|
printk(KERN_ERR "PCI: Unknown option `%s'\n",
|
||||||
str);
|
str);
|
||||||
|
|
|
@ -36,13 +36,6 @@
|
||||||
|
|
||||||
#define ROUND_UP(x, a) (((x) + (a) - 1) & ~((a) - 1))
|
#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
|
static void __devinit
|
||||||
pbus_assign_resources_sorted(struct pci_bus *bus)
|
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
|
* Reserve some resources for CardBus. We reserve
|
||||||
* a fixed amount of bus space for CardBus bridges.
|
* a fixed amount of bus space for CardBus bridges.
|
||||||
*/
|
*/
|
||||||
b_res[0].start = CARDBUS_IO_SIZE;
|
b_res[0].start = pci_cardbus_io_size;
|
||||||
b_res[0].end = b_res[0].start + CARDBUS_IO_SIZE - 1;
|
b_res[0].end = b_res[0].start + pci_cardbus_io_size - 1;
|
||||||
b_res[0].flags |= IORESOURCE_IO;
|
b_res[0].flags |= IORESOURCE_IO;
|
||||||
|
|
||||||
b_res[1].start = CARDBUS_IO_SIZE;
|
b_res[1].start = pci_cardbus_io_size;
|
||||||
b_res[1].end = b_res[1].start + CARDBUS_IO_SIZE - 1;
|
b_res[1].end = b_res[1].start + pci_cardbus_io_size - 1;
|
||||||
b_res[1].flags |= IORESOURCE_IO;
|
b_res[1].flags |= IORESOURCE_IO;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -440,16 +433,16 @@ pci_bus_size_cardbus(struct pci_bus *bus)
|
||||||
* twice the size.
|
* twice the size.
|
||||||
*/
|
*/
|
||||||
if (ctrl & PCI_CB_BRIDGE_CTL_PREFETCH_MEM0) {
|
if (ctrl & PCI_CB_BRIDGE_CTL_PREFETCH_MEM0) {
|
||||||
b_res[2].start = CARDBUS_MEM_SIZE;
|
b_res[2].start = pci_cardbus_mem_size;
|
||||||
b_res[2].end = b_res[2].start + CARDBUS_MEM_SIZE - 1;
|
b_res[2].end = b_res[2].start + pci_cardbus_mem_size - 1;
|
||||||
b_res[2].flags |= IORESOURCE_MEM | IORESOURCE_PREFETCH;
|
b_res[2].flags |= IORESOURCE_MEM | IORESOURCE_PREFETCH;
|
||||||
|
|
||||||
b_res[3].start = CARDBUS_MEM_SIZE;
|
b_res[3].start = pci_cardbus_mem_size;
|
||||||
b_res[3].end = b_res[3].start + CARDBUS_MEM_SIZE - 1;
|
b_res[3].end = b_res[3].start + pci_cardbus_mem_size - 1;
|
||||||
b_res[3].flags |= IORESOURCE_MEM;
|
b_res[3].flags |= IORESOURCE_MEM;
|
||||||
} else {
|
} else {
|
||||||
b_res[3].start = CARDBUS_MEM_SIZE * 2;
|
b_res[3].start = pci_cardbus_mem_size * 2;
|
||||||
b_res[3].end = b_res[3].start + CARDBUS_MEM_SIZE * 2 - 1;
|
b_res[3].end = b_res[3].start + pci_cardbus_mem_size * 2 - 1;
|
||||||
b_res[3].flags |= IORESOURCE_MEM;
|
b_res[3].flags |= IORESOURCE_MEM;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -854,5 +854,8 @@ extern int pci_pci_problems;
|
||||||
#define PCIPCI_ALIMAGIK 32 /* Need low latency setting */
|
#define PCIPCI_ALIMAGIK 32 /* Need low latency setting */
|
||||||
#define PCIAGP_FAIL 64 /* No PCI to AGP DMA */
|
#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 /* __KERNEL__ */
|
||||||
#endif /* LINUX_PCI_H */
|
#endif /* LINUX_PCI_H */
|
||||||
|
|
Loading…
Reference in a new issue