Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4516a618 authored by Atsushi Nemoto's avatar Atsushi Nemoto Committed by Greg Kroah-Hartman
Browse files

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: default avatarAtsushi 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: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 26ba05e4
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -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

+10 −0
Original line number Diff line number Diff line
@@ -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);
+10 −17
Original line number Diff line number Diff line
@@ -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;
	}
}
+3 −0
Original line number Diff line number Diff line
@@ -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 */