cx18-scb.c 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. /*
  2. * cx18 System Control Block initialization
  3. *
  4. * Copyright (C) 2007 Hans Verkuil <hverkuil@xs4all.nl>
  5. *
  6. * This program is free software; you can redistribute it and/or modify
  7. * it under the terms of the GNU General Public License as published by
  8. * the Free Software Foundation; either version 2 of the License, or
  9. * (at your option) any later version.
  10. *
  11. * This program is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14. * GNU General Public License for more details.
  15. *
  16. * You should have received a copy of the GNU General Public License
  17. * along with this program; if not, write to the Free Software
  18. * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
  19. * 02111-1307 USA
  20. */
  21. #include "cx18-driver.h"
  22. #include "cx18-scb.h"
  23. void cx18_init_scb(struct cx18 *cx)
  24. {
  25. setup_page(SCB_OFFSET);
  26. memset_io(cx->scb, 0, 0x10000);
  27. writel(IRQ_APU_TO_CPU, &cx->scb->apu2cpu_irq);
  28. writel(IRQ_CPU_TO_APU_ACK, &cx->scb->cpu2apu_irq_ack);
  29. writel(IRQ_HPU_TO_CPU, &cx->scb->hpu2cpu_irq);
  30. writel(IRQ_CPU_TO_HPU_ACK, &cx->scb->cpu2hpu_irq_ack);
  31. writel(IRQ_PPU_TO_CPU, &cx->scb->ppu2cpu_irq);
  32. writel(IRQ_CPU_TO_PPU_ACK, &cx->scb->cpu2ppu_irq_ack);
  33. writel(IRQ_EPU_TO_CPU, &cx->scb->epu2cpu_irq);
  34. writel(IRQ_CPU_TO_EPU_ACK, &cx->scb->cpu2epu_irq_ack);
  35. writel(IRQ_CPU_TO_APU, &cx->scb->cpu2apu_irq);
  36. writel(IRQ_APU_TO_CPU_ACK, &cx->scb->apu2cpu_irq_ack);
  37. writel(IRQ_HPU_TO_APU, &cx->scb->hpu2apu_irq);
  38. writel(IRQ_APU_TO_HPU_ACK, &cx->scb->apu2hpu_irq_ack);
  39. writel(IRQ_PPU_TO_APU, &cx->scb->ppu2apu_irq);
  40. writel(IRQ_APU_TO_PPU_ACK, &cx->scb->apu2ppu_irq_ack);
  41. writel(IRQ_EPU_TO_APU, &cx->scb->epu2apu_irq);
  42. writel(IRQ_APU_TO_EPU_ACK, &cx->scb->apu2epu_irq_ack);
  43. writel(IRQ_CPU_TO_HPU, &cx->scb->cpu2hpu_irq);
  44. writel(IRQ_HPU_TO_CPU_ACK, &cx->scb->hpu2cpu_irq_ack);
  45. writel(IRQ_APU_TO_HPU, &cx->scb->apu2hpu_irq);
  46. writel(IRQ_HPU_TO_APU_ACK, &cx->scb->hpu2apu_irq_ack);
  47. writel(IRQ_PPU_TO_HPU, &cx->scb->ppu2hpu_irq);
  48. writel(IRQ_HPU_TO_PPU_ACK, &cx->scb->hpu2ppu_irq_ack);
  49. writel(IRQ_EPU_TO_HPU, &cx->scb->epu2hpu_irq);
  50. writel(IRQ_HPU_TO_EPU_ACK, &cx->scb->hpu2epu_irq_ack);
  51. writel(IRQ_CPU_TO_PPU, &cx->scb->cpu2ppu_irq);
  52. writel(IRQ_PPU_TO_CPU_ACK, &cx->scb->ppu2cpu_irq_ack);
  53. writel(IRQ_APU_TO_PPU, &cx->scb->apu2ppu_irq);
  54. writel(IRQ_PPU_TO_APU_ACK, &cx->scb->ppu2apu_irq_ack);
  55. writel(IRQ_HPU_TO_PPU, &cx->scb->hpu2ppu_irq);
  56. writel(IRQ_PPU_TO_HPU_ACK, &cx->scb->ppu2hpu_irq_ack);
  57. writel(IRQ_EPU_TO_PPU, &cx->scb->epu2ppu_irq);
  58. writel(IRQ_PPU_TO_EPU_ACK, &cx->scb->ppu2epu_irq_ack);
  59. writel(IRQ_CPU_TO_EPU, &cx->scb->cpu2epu_irq);
  60. writel(IRQ_EPU_TO_CPU_ACK, &cx->scb->epu2cpu_irq_ack);
  61. writel(IRQ_APU_TO_EPU, &cx->scb->apu2epu_irq);
  62. writel(IRQ_EPU_TO_APU_ACK, &cx->scb->epu2apu_irq_ack);
  63. writel(IRQ_HPU_TO_EPU, &cx->scb->hpu2epu_irq);
  64. writel(IRQ_EPU_TO_HPU_ACK, &cx->scb->epu2hpu_irq_ack);
  65. writel(IRQ_PPU_TO_EPU, &cx->scb->ppu2epu_irq);
  66. writel(IRQ_EPU_TO_PPU_ACK, &cx->scb->epu2ppu_irq_ack);
  67. writel(SCB_OFFSET + offsetof(struct cx18_scb, apu2cpu_mb),
  68. &cx->scb->apu2cpu_mb_offset);
  69. writel(SCB_OFFSET + offsetof(struct cx18_scb, hpu2cpu_mb),
  70. &cx->scb->hpu2cpu_mb_offset);
  71. writel(SCB_OFFSET + offsetof(struct cx18_scb, ppu2cpu_mb),
  72. &cx->scb->ppu2cpu_mb_offset);
  73. writel(SCB_OFFSET + offsetof(struct cx18_scb, epu2cpu_mb),
  74. &cx->scb->epu2cpu_mb_offset);
  75. writel(SCB_OFFSET + offsetof(struct cx18_scb, cpu2apu_mb),
  76. &cx->scb->cpu2apu_mb_offset);
  77. writel(SCB_OFFSET + offsetof(struct cx18_scb, hpu2apu_mb),
  78. &cx->scb->hpu2apu_mb_offset);
  79. writel(SCB_OFFSET + offsetof(struct cx18_scb, ppu2apu_mb),
  80. &cx->scb->ppu2apu_mb_offset);
  81. writel(SCB_OFFSET + offsetof(struct cx18_scb, epu2apu_mb),
  82. &cx->scb->epu2apu_mb_offset);
  83. writel(SCB_OFFSET + offsetof(struct cx18_scb, cpu2hpu_mb),
  84. &cx->scb->cpu2hpu_mb_offset);
  85. writel(SCB_OFFSET + offsetof(struct cx18_scb, apu2hpu_mb),
  86. &cx->scb->apu2hpu_mb_offset);
  87. writel(SCB_OFFSET + offsetof(struct cx18_scb, ppu2hpu_mb),
  88. &cx->scb->ppu2hpu_mb_offset);
  89. writel(SCB_OFFSET + offsetof(struct cx18_scb, epu2hpu_mb),
  90. &cx->scb->epu2hpu_mb_offset);
  91. writel(SCB_OFFSET + offsetof(struct cx18_scb, cpu2ppu_mb),
  92. &cx->scb->cpu2ppu_mb_offset);
  93. writel(SCB_OFFSET + offsetof(struct cx18_scb, apu2ppu_mb),
  94. &cx->scb->apu2ppu_mb_offset);
  95. writel(SCB_OFFSET + offsetof(struct cx18_scb, hpu2ppu_mb),
  96. &cx->scb->hpu2ppu_mb_offset);
  97. writel(SCB_OFFSET + offsetof(struct cx18_scb, epu2ppu_mb),
  98. &cx->scb->epu2ppu_mb_offset);
  99. writel(SCB_OFFSET + offsetof(struct cx18_scb, cpu2epu_mb),
  100. &cx->scb->cpu2epu_mb_offset);
  101. writel(SCB_OFFSET + offsetof(struct cx18_scb, apu2epu_mb),
  102. &cx->scb->apu2epu_mb_offset);
  103. writel(SCB_OFFSET + offsetof(struct cx18_scb, hpu2epu_mb),
  104. &cx->scb->hpu2epu_mb_offset);
  105. writel(SCB_OFFSET + offsetof(struct cx18_scb, ppu2epu_mb),
  106. &cx->scb->ppu2epu_mb_offset);
  107. writel(SCB_OFFSET + offsetof(struct cx18_scb, cpu_state),
  108. &cx->scb->ipc_offset);
  109. writel(1, &cx->scb->hpu_state);
  110. writel(1, &cx->scb->epu_state);
  111. }