ops-se7780.c 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. /*
  2. * linux/arch/sh/drivers/pci/ops-se7780.c
  3. *
  4. * Copyright (C) 2006 Nobuhiro Iwamatsu
  5. *
  6. * PCI initialization for the Hitachi UL Solution Engine 7780SE03
  7. *
  8. * May be copied or modified under the terms of the GNU General Public
  9. * License. See linux/COPYING for more information.
  10. */
  11. #include <linux/kernel.h>
  12. #include <linux/types.h>
  13. #include <linux/init.h>
  14. #include <linux/delay.h>
  15. #include <linux/pci.h>
  16. #include <mach-se/mach/se7780.h>
  17. #include <asm/io.h>
  18. #include "pci-sh4.h"
  19. /*
  20. * IDSEL = AD16 PCI slot
  21. * IDSEL = AD17 PCI slot
  22. * IDSEL = AD18 Serial ATA Controller (Silicon Image SiL3512A)
  23. * IDSEL = AD19 USB Host Controller (NEC uPD7210100A)
  24. */
  25. /* IDSEL [16][17][18][19][20][21][22][23][24][25][26][27][28][29][30][31] */
  26. static char se7780_irq_tab[4][16] __initdata = {
  27. /* INTA */
  28. { 65, 68, 67, 68, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
  29. /* INTB */
  30. { 66, 65, -1, 65, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
  31. /* INTC */
  32. { 67, 66, -1, 66, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
  33. /* INTD */
  34. { 68, 67, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
  35. };
  36. int __init pcibios_map_platform_irq(struct pci_dev *pdev, u8 slot, u8 pin)
  37. {
  38. return se7780_irq_tab[pin-1][slot];
  39. }
  40. static struct sh4_pci_address_map se7780_pci_map = {
  41. .window0 = {
  42. .base = SH7780_CS2_BASE_ADDR,
  43. .size = 0x04000000,
  44. },
  45. };
  46. int __init pcibios_init_platform(void)
  47. {
  48. printk("SH7780 PCI: Finished initialization of the PCI controller\n");
  49. /*
  50. * FPGA PCISEL register initialize
  51. *
  52. * CPU || SLOT1 | SLOT2 | S-ATA | USB
  53. * -------------------------------------
  54. * INTA || INTA | INTD | -- | INTB
  55. * -------------------------------------
  56. * INTB || INTB | INTA | -- | INTC
  57. * -------------------------------------
  58. * INTC || INTC | INTB | INTA | --
  59. * -------------------------------------
  60. * INTD || INTD | INTC | -- | INTA
  61. * -------------------------------------
  62. */
  63. ctrl_outw(0x0013, FPGA_PCI_INTSEL1);
  64. ctrl_outw(0xE402, FPGA_PCI_INTSEL2);
  65. return sh7780_pcic_init(&se7780_pci_map);
  66. }