aboutsummaryrefslogtreecommitdiffstats
path: root/arch/mips/alchemy/common/pci.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/mips/alchemy/common/pci.c')
-rw-r--r--arch/mips/alchemy/common/pci.c104
1 files changed, 104 insertions, 0 deletions
diff --git a/arch/mips/alchemy/common/pci.c b/arch/mips/alchemy/common/pci.c
new file mode 100644
index 000000000000..7866cf50cf99
--- /dev/null
+++ b/arch/mips/alchemy/common/pci.c
@@ -0,0 +1,104 @@
+/*
+ * BRIEF MODULE DESCRIPTION
+ * Alchemy/AMD Au1x00 PCI support.
+ *
+ * Copyright 2001-2003, 2007-2008 MontaVista Software Inc.
+ * Author: MontaVista Software, Inc. <source@mvista.com>
+ *
+ * Copyright (C) 2004 by Ralf Baechle (ralf@linux-mips.org)
+ *
+ * Support for all devices (greater than 16) added by David Gathright.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
+ * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <linux/pci.h>
+#include <linux/kernel.h>
+#include <linux/init.h>
+
+#include <asm/mach-au1x00/au1000.h>
+
+/* TBD */
+static struct resource pci_io_resource = {
+ .start = PCI_IO_START,
+ .end = PCI_IO_END,
+ .name = "PCI IO space",
+ .flags = IORESOURCE_IO
+};
+
+static struct resource pci_mem_resource = {
+ .start = PCI_MEM_START,
+ .end = PCI_MEM_END,
+ .name = "PCI memory space",
+ .flags = IORESOURCE_MEM
+};
+
+extern struct pci_ops au1x_pci_ops;
+
+static struct pci_controller au1x_controller = {
+ .pci_ops = &au1x_pci_ops,
+ .io_resource = &pci_io_resource,
+ .mem_resource = &pci_mem_resource,
+};
+
+#if defined(CONFIG_SOC_AU1500) || defined(CONFIG_SOC_AU1550)
+static unsigned long virt_io_addr;
+#endif
+
+static int __init au1x_pci_setup(void)
+{
+ extern void au1x_pci_cfg_init(void);
+
+#if defined(CONFIG_SOC_AU1500) || defined(CONFIG_SOC_AU1550)
+ virt_io_addr = (unsigned long)ioremap(Au1500_PCI_IO_START,
+ Au1500_PCI_IO_END - Au1500_PCI_IO_START + 1);
+
+ if (!virt_io_addr) {
+ printk(KERN_ERR "Unable to ioremap pci space\n");
+ return 1;
+ }
+ au1x_controller.io_map_base = virt_io_addr;
+
+#ifdef CONFIG_DMA_NONCOHERENT
+ {
+ /*
+ * Set the NC bit in controller for Au1500 pre-AC silicon
+ */
+ u32 prid = read_c0_prid();
+
+ if ((prid & 0xFF000000) == 0x01000000 && prid < 0x01030202) {
+ au_writel((1 << 16) | au_readl(Au1500_PCI_CFG),
+ Au1500_PCI_CFG);
+ printk(KERN_INFO "Non-coherent PCI accesses enabled\n");
+ }
+ }
+#endif
+
+ set_io_port_base(virt_io_addr);
+#endif
+
+ au1x_pci_cfg_init();
+
+ register_pci_controller(&au1x_controller);
+ return 0;
+}
+
+arch_initcall(au1x_pci_setup);
rtions'>+4 2002-10-27[PATCH] update qlogicfas driverAlan Cox2-273/+388 2002-10-27[PATCH] correct notes on scsi generic releaseAlan Cox1-2/+2 2002-10-27[PATCH] SCSI configure helpAlan Cox1-8/+21 2002-10-27[PATCH] next NCR5380 updatesAlan Cox15-537/+507 Fix more locking, do a major rethink on the bh handling (now workqueue) 2002-10-27[PATCH] u14-34f update from maintainerAlan Cox2-18/+48 2002-10-27[PATCH] finish updating sym53c416Alan Cox2-25/+47 2002-10-27[PATCH] nsp_cs update from maintainerAlan Cox5-291/+722 2002-10-27[PATCH] fix scsi irq errors on seagateAlan Cox2-0/+9 2002-10-27[PATCH] nsp32 needs updating for scsi_hn_getAlan Cox1-5/+3 2002-10-27[PATCH] resurrect the NCR53c406aAlan Cox2-806/+777 2002-10-27[PATCH] ncr53c8xxx needs updating for scsi_hn_getAlan Cox1-9/+4 2002-10-27[PATCH] inia100 just has to lose a next: NULLAlan Cox1-2/+1 2002-10-27[PATCH] fix all the IRQ breakage on the in2000Alan Cox2-14/+13 2002-10-27[PATCH] initial eata driver updatesAlan Cox4-88/+216 2002-10-27[PATCH] fix aic7xxx on gcc 3.2 warning spewAlan Cox1-20/+20 2002-10-27[PATCH] move advansys from pcibios to pci_Alan Cox1-23/+11 2002-10-27[PATCH] ressurect the aha1740 driverAlan Cox1-12/+19 2002-10-27[PATCH] move 53c7,8xx to pci_ not pcibiosAlan Cox2-11/+7 2002-10-27[PATCH] small scsi compile fixesAlan Cox7-24/+15 This is stuff like next: pointers that are not present rather than anything bigger 2002-10-27[PATCH] MCA bus basic cleanupsAlan Cox8-1540/+1323 2002-10-18Linux v2.5.44v2.5.44Linus Torvalds1-1/+1 2002-10-18[PATCH] device removalPatrick Mochel2-3/+4 The problem was that when the refcount hit 0, it was unconditionally assuming that it had been added, which is wrong. The patch below corrects that, and fixes the Oops when loading the floppy driver.