setup.c 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. /* $Id: setup.c,v 1.5 2003/08/04 01:51:58 lethal Exp $
  2. *
  3. * arch/sh/kernel/setup_cqreek.c
  4. *
  5. * Copyright (C) 2000 Niibe Yutaka
  6. *
  7. * CqREEK IDE/ISA Bridge Support.
  8. *
  9. */
  10. #include <linux/kernel.h>
  11. #include <linux/init.h>
  12. #include <linux/irq.h>
  13. #include <asm/mach/cqreek.h>
  14. #include <asm/machvec.h>
  15. #include <asm/io.h>
  16. #include <asm/io_generic.h>
  17. #include <asm/irq.h>
  18. #include <asm/rtc.h>
  19. #define IDE_OFFSET 0xA4000000UL
  20. #define ISA_OFFSET 0xA4A00000UL
  21. const char *get_system_type(void)
  22. {
  23. return "CqREEK";
  24. }
  25. static unsigned long cqreek_port2addr(unsigned long port)
  26. {
  27. if (0x0000<=port && port<=0x0040)
  28. return IDE_OFFSET + port;
  29. if ((0x01f0<=port && port<=0x01f7) || port == 0x03f6)
  30. return IDE_OFFSET + port;
  31. return ISA_OFFSET + port;
  32. }
  33. /*
  34. * The Machine Vector
  35. */
  36. struct sh_machine_vector mv_cqreek __initmv = {
  37. #if defined(CONFIG_CPU_SH4)
  38. .mv_nr_irqs = 48,
  39. #elif defined(CONFIG_CPU_SUBTYPE_SH7708)
  40. .mv_nr_irqs = 32,
  41. #elif defined(CONFIG_CPU_SUBTYPE_SH7709)
  42. .mv_nr_irqs = 61,
  43. #endif
  44. .mv_init_irq = init_cqreek_IRQ,
  45. .mv_isa_port2addr = cqreek_port2addr,
  46. };
  47. ALIAS_MV(cqreek)
  48. /*
  49. * Initialize the board
  50. */
  51. void __init platform_setup(void)
  52. {
  53. int i;
  54. /* udelay is not available at setup time yet... */
  55. #define DELAY() do {for (i=0; i<10000; i++) ctrl_inw(0xa0000000);} while(0)
  56. if ((inw (BRIDGE_FEATURE) & 1)) { /* We have IDE interface */
  57. outw_p(0, BRIDGE_IDE_INTR_LVL);
  58. outw_p(0, BRIDGE_IDE_INTR_MASK);
  59. outw_p(0, BRIDGE_IDE_CTRL);
  60. DELAY();
  61. outw_p(0x8000, BRIDGE_IDE_CTRL);
  62. DELAY();
  63. outw_p(0xffff, BRIDGE_IDE_INTR_STAT); /* Clear interrupt status */
  64. outw_p(0x0f-14, BRIDGE_IDE_INTR_LVL); /* Use 14 IPR */
  65. outw_p(1, BRIDGE_IDE_INTR_MASK); /* Enable interrupt */
  66. cqreek_has_ide=1;
  67. }
  68. if ((inw (BRIDGE_FEATURE) & 2)) { /* We have ISA interface */
  69. outw_p(0, BRIDGE_ISA_INTR_LVL);
  70. outw_p(0, BRIDGE_ISA_INTR_MASK);
  71. outw_p(0, BRIDGE_ISA_CTRL);
  72. DELAY();
  73. outw_p(0x8000, BRIDGE_ISA_CTRL);
  74. DELAY();
  75. outw_p(0xffff, BRIDGE_ISA_INTR_STAT); /* Clear interrupt status */
  76. outw_p(0x0f-10, BRIDGE_ISA_INTR_LVL); /* Use 10 IPR */
  77. outw_p(0xfff8, BRIDGE_ISA_INTR_MASK); /* Enable interrupt */
  78. cqreek_has_isa=1;
  79. }
  80. printk(KERN_INFO "CqREEK Setup (IDE=%d, ISA=%d)...done\n", cqreek_has_ide, cqreek_has_isa);
  81. }