From 3dead2d4a1305d1eb587a5a82f40675aed74ef0e Mon Sep 17 00:00:00 2001 From: John Crispin Date: Thu, 18 Mar 2010 10:56:00 +0000 Subject: [PATCH] [ifxmips] Make it possible for boards to disable PCI REQ signals in the PCI controller, signed off by Ithamar R. Adema git-svn-id: svn://svn.openwrt.org/openwrt/trunk@20264 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- target/linux/ifxmips/files/arch/mips/ifxmips/board.c | 4 ++++ target/linux/ifxmips/files/arch/mips/pci/pci-ifxmips.c | 6 +++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/target/linux/ifxmips/files/arch/mips/ifxmips/board.c b/target/linux/ifxmips/files/arch/mips/ifxmips/board.c index 7d77e9ce6b..6a17f60bd4 100644 --- a/target/linux/ifxmips/files/arch/mips/ifxmips/board.c +++ b/target/linux/ifxmips/files/arch/mips/ifxmips/board.c @@ -55,6 +55,7 @@ enum { }; extern int ifxmips_pci_external_clock; +extern int ifxmips_pci_req_mask; static unsigned int chiprev; static int cmdline_mac; @@ -70,6 +71,7 @@ struct ifxmips_board { struct gpio_led *ifxmips_leds; struct gpio_led *gpio_leds; int pci_external_clock; + int pci_req_mask; int num_devs; }; @@ -392,6 +394,8 @@ int __init ifxmips_init_devices(void) ifxmips_gpio_dev.resource = &board->gpiodev_resource; if (board->pci_external_clock) ifxmips_pci_external_clock = 1; + if (board->pci_req_mask) + ifxmips_pci_req_mask = board->pci_req_mask; printk(KERN_INFO "using board definition %s\n", board->name); return platform_add_devices(board->devs, board->num_devs); } 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 64f37d5564..6ff765e85f 100644 --- a/target/linux/ifxmips/files/arch/mips/pci/pci-ifxmips.c +++ b/target/linux/ifxmips/files/arch/mips/pci/pci-ifxmips.c @@ -54,6 +54,10 @@ static struct pci_controller ifxmips_pci_controller = u32 ifxmips_pci_mapped_cfg; int ifxmips_pci_external_clock = 0; +/* Since the PCI REQ pins can be reused for other functionality, make it possible + to exclude those from interpretation by the PCI controller */ +int ifxmips_pci_req_mask = 0xf; + static int __init ifxmips_pci_set_external_clk(char *str) { @@ -126,7 +130,7 @@ ifxmips_pci_startup(void) /* enable external 2 PCI masters */ temp_buffer = ifxmips_r32(PCI_CR_PC_ARB); - temp_buffer &= (~(0xf << 16)); + temp_buffer &= (~(ifxmips_pci_req_mask << 16)); /* enable internal arbiter */ temp_buffer |= (1 << INTERNAL_ARB_ENABLE_BIT); /* enable internal PCI master reqest */