11c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil/*
21c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil *  cx18 System Control Block initialization
31c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil *
41c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil *  Copyright (C) 2007  Hans Verkuil <hverkuil@xs4all.nl>
56afdeaf865b729287e02aafc61d8d013b89996efAndy Walls *  Copyright (C) 2008  Andy Walls <awalls@md.metrocast.net>
61c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil *
71c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil *  This program is free software; you can redistribute it and/or modify
81c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil *  it under the terms of the GNU General Public License as published by
91c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil *  the Free Software Foundation; either version 2 of the License, or
101c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil *  (at your option) any later version.
111c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil *
121c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil *  This program is distributed in the hope that it will be useful,
131c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil *  but WITHOUT ANY WARRANTY; without even the implied warranty of
141c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
151c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil *  GNU General Public License for more details.
161c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil *
171c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil *  You should have received a copy of the GNU General Public License
181c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil *  along with this program; if not, write to the Free Software
191c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
201c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil *  02111-1307  USA
211c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil */
221c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil
231c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil#include "cx18-driver.h"
24b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls#include "cx18-io.h"
251c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil#include "cx18-scb.h"
261c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil
271c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuilvoid cx18_init_scb(struct cx18 *cx)
281c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil{
29b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls	cx18_setup_page(cx, SCB_OFFSET);
30b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls	cx18_memset_io(cx, cx->scb, 0, 0x10000);
311c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil
32b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls	cx18_writel(cx, IRQ_APU_TO_CPU,     &cx->scb->apu2cpu_irq);
33b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls	cx18_writel(cx, IRQ_CPU_TO_APU_ACK, &cx->scb->cpu2apu_irq_ack);
34b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls	cx18_writel(cx, IRQ_HPU_TO_CPU,     &cx->scb->hpu2cpu_irq);
35b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls	cx18_writel(cx, IRQ_CPU_TO_HPU_ACK, &cx->scb->cpu2hpu_irq_ack);
36b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls	cx18_writel(cx, IRQ_PPU_TO_CPU,     &cx->scb->ppu2cpu_irq);
37b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls	cx18_writel(cx, IRQ_CPU_TO_PPU_ACK, &cx->scb->cpu2ppu_irq_ack);
38b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls	cx18_writel(cx, IRQ_EPU_TO_CPU,     &cx->scb->epu2cpu_irq);
39b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls	cx18_writel(cx, IRQ_CPU_TO_EPU_ACK, &cx->scb->cpu2epu_irq_ack);
401c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil
41b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls	cx18_writel(cx, IRQ_CPU_TO_APU,     &cx->scb->cpu2apu_irq);
42b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls	cx18_writel(cx, IRQ_APU_TO_CPU_ACK, &cx->scb->apu2cpu_irq_ack);
43b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls	cx18_writel(cx, IRQ_HPU_TO_APU,     &cx->scb->hpu2apu_irq);
44b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls	cx18_writel(cx, IRQ_APU_TO_HPU_ACK, &cx->scb->apu2hpu_irq_ack);
45b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls	cx18_writel(cx, IRQ_PPU_TO_APU,     &cx->scb->ppu2apu_irq);
46b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls	cx18_writel(cx, IRQ_APU_TO_PPU_ACK, &cx->scb->apu2ppu_irq_ack);
47b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls	cx18_writel(cx, IRQ_EPU_TO_APU,     &cx->scb->epu2apu_irq);
48b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls	cx18_writel(cx, IRQ_APU_TO_EPU_ACK, &cx->scb->apu2epu_irq_ack);
491c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil
50b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls	cx18_writel(cx, IRQ_CPU_TO_HPU,     &cx->scb->cpu2hpu_irq);
51b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls	cx18_writel(cx, IRQ_HPU_TO_CPU_ACK, &cx->scb->hpu2cpu_irq_ack);
52b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls	cx18_writel(cx, IRQ_APU_TO_HPU,     &cx->scb->apu2hpu_irq);
53b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls	cx18_writel(cx, IRQ_HPU_TO_APU_ACK, &cx->scb->hpu2apu_irq_ack);
54b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls	cx18_writel(cx, IRQ_PPU_TO_HPU,     &cx->scb->ppu2hpu_irq);
55b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls	cx18_writel(cx, IRQ_HPU_TO_PPU_ACK, &cx->scb->hpu2ppu_irq_ack);
56b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls	cx18_writel(cx, IRQ_EPU_TO_HPU,     &cx->scb->epu2hpu_irq);
57b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls	cx18_writel(cx, IRQ_HPU_TO_EPU_ACK, &cx->scb->hpu2epu_irq_ack);
581c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil
59b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls	cx18_writel(cx, IRQ_CPU_TO_PPU,     &cx->scb->cpu2ppu_irq);
60b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls	cx18_writel(cx, IRQ_PPU_TO_CPU_ACK, &cx->scb->ppu2cpu_irq_ack);
61b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls	cx18_writel(cx, IRQ_APU_TO_PPU,     &cx->scb->apu2ppu_irq);
62b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls	cx18_writel(cx, IRQ_PPU_TO_APU_ACK, &cx->scb->ppu2apu_irq_ack);
63b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls	cx18_writel(cx, IRQ_HPU_TO_PPU,     &cx->scb->hpu2ppu_irq);
64b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls	cx18_writel(cx, IRQ_PPU_TO_HPU_ACK, &cx->scb->ppu2hpu_irq_ack);
65b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls	cx18_writel(cx, IRQ_EPU_TO_PPU,     &cx->scb->epu2ppu_irq);
66b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls	cx18_writel(cx, IRQ_PPU_TO_EPU_ACK, &cx->scb->ppu2epu_irq_ack);
671c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil
68b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls	cx18_writel(cx, IRQ_CPU_TO_EPU,     &cx->scb->cpu2epu_irq);
69b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls	cx18_writel(cx, IRQ_EPU_TO_CPU_ACK, &cx->scb->epu2cpu_irq_ack);
70b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls	cx18_writel(cx, IRQ_APU_TO_EPU,     &cx->scb->apu2epu_irq);
71b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls	cx18_writel(cx, IRQ_EPU_TO_APU_ACK, &cx->scb->epu2apu_irq_ack);
72b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls	cx18_writel(cx, IRQ_HPU_TO_EPU,     &cx->scb->hpu2epu_irq);
73b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls	cx18_writel(cx, IRQ_EPU_TO_HPU_ACK, &cx->scb->epu2hpu_irq_ack);
74b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls	cx18_writel(cx, IRQ_PPU_TO_EPU,     &cx->scb->ppu2epu_irq);
75b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls	cx18_writel(cx, IRQ_EPU_TO_PPU_ACK, &cx->scb->epu2ppu_irq_ack);
761c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil
77b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls	cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, apu2cpu_mb),
781c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil			&cx->scb->apu2cpu_mb_offset);
79b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls	cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, hpu2cpu_mb),
801c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil			&cx->scb->hpu2cpu_mb_offset);
81b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls	cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, ppu2cpu_mb),
821c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil			&cx->scb->ppu2cpu_mb_offset);
83b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls	cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, epu2cpu_mb),
841c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil			&cx->scb->epu2cpu_mb_offset);
85b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls	cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, cpu2apu_mb),
861c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil			&cx->scb->cpu2apu_mb_offset);
87b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls	cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, hpu2apu_mb),
881c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil			&cx->scb->hpu2apu_mb_offset);
89b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls	cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, ppu2apu_mb),
901c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil			&cx->scb->ppu2apu_mb_offset);
91b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls	cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, epu2apu_mb),
921c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil			&cx->scb->epu2apu_mb_offset);
93b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls	cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, cpu2hpu_mb),
941c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil			&cx->scb->cpu2hpu_mb_offset);
95b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls	cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, apu2hpu_mb),
961c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil			&cx->scb->apu2hpu_mb_offset);
97b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls	cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, ppu2hpu_mb),
981c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil			&cx->scb->ppu2hpu_mb_offset);
99b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls	cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, epu2hpu_mb),
1001c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil			&cx->scb->epu2hpu_mb_offset);
101b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls	cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, cpu2ppu_mb),
1021c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil			&cx->scb->cpu2ppu_mb_offset);
103b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls	cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, apu2ppu_mb),
1041c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil			&cx->scb->apu2ppu_mb_offset);
105b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls	cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, hpu2ppu_mb),
1061c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil			&cx->scb->hpu2ppu_mb_offset);
107b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls	cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, epu2ppu_mb),
1081c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil			&cx->scb->epu2ppu_mb_offset);
109b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls	cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, cpu2epu_mb),
1101c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil			&cx->scb->cpu2epu_mb_offset);
111b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls	cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, apu2epu_mb),
1121c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil			&cx->scb->apu2epu_mb_offset);
113b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls	cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, hpu2epu_mb),
1141c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil			&cx->scb->hpu2epu_mb_offset);
115b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls	cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, ppu2epu_mb),
1161c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil			&cx->scb->ppu2epu_mb_offset);
1171c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil
118b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls	cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, cpu_state),
1191c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil			&cx->scb->ipc_offset);
1201c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil
121b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls	cx18_writel(cx, 1, &cx->scb->epu_state);
1221c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil}
123