[ifxmips] Make it possible for boards to disable PCI REQ signals in the PCI controlle...
authorblogic <blogic@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Thu, 18 Mar 2010 10:56:00 +0000 (10:56 +0000)
committerblogic <blogic@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Thu, 18 Mar 2010 10:56:00 +0000 (10:56 +0000)
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@20264 3c298f89-4303-0410-b956-a3cf2f4a3e73

target/linux/ifxmips/files/arch/mips/ifxmips/board.c
target/linux/ifxmips/files/arch/mips/pci/pci-ifxmips.c

index 7d77e9ce6b7c8db8806fde59ac5d3876d6667c6b..6a17f60bd4b09e06672051ebda88391d1f0edfd6 100644 (file)
@@ -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);
 }
index 64f37d556415c2c9a35181103468cc7be31e994a..6ff765e85f4c36301e94f7c80231ada9ac113a0a 100644 (file)
@@ -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 */