2 * This file is subject to the terms and conditions of the GNU General Public
3 * License. See the file "COPYING" in the main directory of this archive
6 * Copyright (C) 2004 by Ralf Baechle (ralf@linux-mips.org)
8 #include <linux/init.h>
9 #include <linux/kernel.h>
10 #include <linux/types.h>
11 #include <linux/pci.h>
12 #include <asm/titan_dep.h>
14 extern struct pci_ops titan_pci_ops
;
16 static struct resource py_mem_resource
= {
17 .start
= 0xe0000000UL
,
19 .name
= "Titan PCI MEM",
20 .flags
= IORESOURCE_MEM
24 * PMON really reserves 16MB of I/O port space but that's stupid, nothing
25 * needs that much since allocations are limited to 256 bytes per device
26 * anyway. So we just claim 64kB here.
28 #define TITAN_IO_SIZE 0x0000ffffUL
29 #define TITAN_IO_BASE 0xe8000000UL
31 static struct resource py_io_resource
= {
32 .start
= 0x00001000UL
,
33 .end
= TITAN_IO_SIZE
- 1,
34 .name
= "Titan IO MEM",
35 .flags
= IORESOURCE_IO
,
38 static struct pci_controller py_controller
= {
39 .pci_ops
= &titan_pci_ops
,
40 .mem_resource
= &py_mem_resource
,
41 .mem_offset
= 0x00000000UL
,
42 .io_resource
= &py_io_resource
,
43 .io_offset
= 0x00000000UL
46 static char ioremap_failed
[] __initdata
= "Could not ioremap I/O port range";
48 static int __init
pmc_yosemite_setup(void)
50 unsigned long io_v_base
;
52 io_v_base
= (unsigned long) ioremap(TITAN_IO_BASE
, TITAN_IO_SIZE
);
54 panic(ioremap_failed
);
56 set_io_port_base(io_v_base
);
57 py_controller
.io_map_base
= io_v_base
;
58 TITAN_WRITE(RM9000x2_OCD_LKM7
, TITAN_READ(RM9000x2_OCD_LKM7
) | 1);
60 ioport_resource
.end
= TITAN_IO_SIZE
- 1;
62 register_pci_controller(&py_controller
);
67 arch_initcall(pmc_yosemite_setup
);