From 907087e56e1bb5f276e245e858e787447b44e96c Mon Sep 17 00:00:00 2001 From: blogic Date: Thu, 18 Mar 2010 09:20:43 +0000 Subject: [ifxmips] Calculate PCI BARMASK11 register value dynamicly, signed off by Ithamar R. Adema git-svn-id: svn://svn.openwrt.org/openwrt/trunk@20262 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- target/linux/ifxmips/files/arch/mips/pci/pci-ifxmips.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/target/linux/ifxmips/files/arch/mips/pci/pci-ifxmips.c b/target/linux/ifxmips/files/arch/mips/pci/pci-ifxmips.c index e50cb3bdc..64f37d556 100644 --- a/target/linux/ifxmips/files/arch/mips/pci/pci-ifxmips.c +++ b/target/linux/ifxmips/files/arch/mips/pci/pci-ifxmips.c @@ -89,6 +89,17 @@ pcibios_plat_dev_init(struct pci_dev *dev) return 0; } +static u32 calc_bar11mask(void) +{ + u32 mem, bar11mask; + + /* BAR11MASK value depends on available memory on system. */ + mem = num_physpages * PAGE_SIZE; + bar11mask = (0x0ffffff0 & ~((1 << (fls(mem) -1)) -1)) | 8; + + return bar11mask; +} + static void __init ifxmips_pci_startup(void) { @@ -138,7 +149,7 @@ ifxmips_pci_startup(void) ifxmips_w32(0x19800000, PCI_CR_FCI_ADDR_MAP6); ifxmips_w32(0x19c00000, PCI_CR_FCI_ADDR_MAP7); ifxmips_w32(0x1ae00000, PCI_CR_FCI_ADDR_MAP11hg); - ifxmips_w32(0x0e000008, PCI_CR_BAR11MASK); + ifxmips_w32(calc_bar11mask(), PCI_CR_BAR11MASK); ifxmips_w32(0, PCI_CR_PCI_ADDR_MAP11); ifxmips_w32(0, PCI_CS_BASE_ADDR1); #ifdef CONFIG_SWAP_IO_SPACE -- cgit v1.2.3