pci-yosemite.c 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. /*
  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
  4. * for more details.
  5. *
  6. * Copyright (C) 2004 by Ralf Baechle (ralf@linux-mips.org)
  7. */
  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>
  13. extern struct pci_ops titan_pci_ops;
  14. static struct resource py_mem_resource = {
  15. "Titan PCI MEM", 0xe0000000UL, 0xe3ffffffUL, IORESOURCE_MEM
  16. };
  17. /*
  18. * PMON really reserves 16MB of I/O port space but that's stupid, nothing
  19. * needs that much since allocations are limited to 256 bytes per device
  20. * anyway. So we just claim 64kB here.
  21. */
  22. #define TITAN_IO_SIZE 0x0000ffffUL
  23. #define TITAN_IO_BASE 0xe8000000UL
  24. static struct resource py_io_resource = {
  25. "Titan IO MEM", 0x00001000UL, TITAN_IO_SIZE - 1, IORESOURCE_IO,
  26. };
  27. static struct pci_controller py_controller = {
  28. .pci_ops = &titan_pci_ops,
  29. .mem_resource = &py_mem_resource,
  30. .mem_offset = 0x00000000UL,
  31. .io_resource = &py_io_resource,
  32. .io_offset = 0x00000000UL
  33. };
  34. static char ioremap_failed[] __initdata = "Could not ioremap I/O port range";
  35. static int __init pmc_yosemite_setup(void)
  36. {
  37. unsigned long io_v_base;
  38. io_v_base = (unsigned long) ioremap(TITAN_IO_BASE, TITAN_IO_SIZE);
  39. if (!io_v_base)
  40. panic(ioremap_failed);
  41. set_io_port_base(io_v_base);
  42. TITAN_WRITE(RM9000x2_OCD_LKM7, TITAN_READ(RM9000x2_OCD_LKM7) | 1);
  43. ioport_resource.end = TITAN_IO_SIZE - 1;
  44. register_pci_controller(&py_controller);
  45. return 0;
  46. }
  47. arch_initcall(pmc_yosemite_setup);