xref: /linux/drivers/media/pci/cx18/cx18-scb.c (revision 75bf465f0bc33e9b776a46d6a1b9b990f5fb7c37)
1*c942fddfSThomas Gleixner // SPDX-License-Identifier: GPL-2.0-or-later
2b285192aSMauro Carvalho Chehab /*
3b285192aSMauro Carvalho Chehab  *  cx18 System Control Block initialization
4b285192aSMauro Carvalho Chehab  *
5b285192aSMauro Carvalho Chehab  *  Copyright (C) 2007  Hans Verkuil <hverkuil@xs4all.nl>
6b285192aSMauro Carvalho Chehab  *  Copyright (C) 2008  Andy Walls <awalls@md.metrocast.net>
7b285192aSMauro Carvalho Chehab  */
8b285192aSMauro Carvalho Chehab 
9b285192aSMauro Carvalho Chehab #include "cx18-driver.h"
10b285192aSMauro Carvalho Chehab #include "cx18-io.h"
11b285192aSMauro Carvalho Chehab #include "cx18-scb.h"
12b285192aSMauro Carvalho Chehab 
cx18_init_scb(struct cx18 * cx)13b285192aSMauro Carvalho Chehab void cx18_init_scb(struct cx18 *cx)
14b285192aSMauro Carvalho Chehab {
15b285192aSMauro Carvalho Chehab 	cx18_setup_page(cx, SCB_OFFSET);
16b285192aSMauro Carvalho Chehab 	cx18_memset_io(cx, cx->scb, 0, 0x10000);
17b285192aSMauro Carvalho Chehab 
18b285192aSMauro Carvalho Chehab 	cx18_writel(cx, IRQ_APU_TO_CPU,     &cx->scb->apu2cpu_irq);
19b285192aSMauro Carvalho Chehab 	cx18_writel(cx, IRQ_CPU_TO_APU_ACK, &cx->scb->cpu2apu_irq_ack);
20b285192aSMauro Carvalho Chehab 	cx18_writel(cx, IRQ_HPU_TO_CPU,     &cx->scb->hpu2cpu_irq);
21b285192aSMauro Carvalho Chehab 	cx18_writel(cx, IRQ_CPU_TO_HPU_ACK, &cx->scb->cpu2hpu_irq_ack);
22b285192aSMauro Carvalho Chehab 	cx18_writel(cx, IRQ_PPU_TO_CPU,     &cx->scb->ppu2cpu_irq);
23b285192aSMauro Carvalho Chehab 	cx18_writel(cx, IRQ_CPU_TO_PPU_ACK, &cx->scb->cpu2ppu_irq_ack);
24b285192aSMauro Carvalho Chehab 	cx18_writel(cx, IRQ_EPU_TO_CPU,     &cx->scb->epu2cpu_irq);
25b285192aSMauro Carvalho Chehab 	cx18_writel(cx, IRQ_CPU_TO_EPU_ACK, &cx->scb->cpu2epu_irq_ack);
26b285192aSMauro Carvalho Chehab 
27b285192aSMauro Carvalho Chehab 	cx18_writel(cx, IRQ_CPU_TO_APU,     &cx->scb->cpu2apu_irq);
28b285192aSMauro Carvalho Chehab 	cx18_writel(cx, IRQ_APU_TO_CPU_ACK, &cx->scb->apu2cpu_irq_ack);
29b285192aSMauro Carvalho Chehab 	cx18_writel(cx, IRQ_HPU_TO_APU,     &cx->scb->hpu2apu_irq);
30b285192aSMauro Carvalho Chehab 	cx18_writel(cx, IRQ_APU_TO_HPU_ACK, &cx->scb->apu2hpu_irq_ack);
31b285192aSMauro Carvalho Chehab 	cx18_writel(cx, IRQ_PPU_TO_APU,     &cx->scb->ppu2apu_irq);
32b285192aSMauro Carvalho Chehab 	cx18_writel(cx, IRQ_APU_TO_PPU_ACK, &cx->scb->apu2ppu_irq_ack);
33b285192aSMauro Carvalho Chehab 	cx18_writel(cx, IRQ_EPU_TO_APU,     &cx->scb->epu2apu_irq);
34b285192aSMauro Carvalho Chehab 	cx18_writel(cx, IRQ_APU_TO_EPU_ACK, &cx->scb->apu2epu_irq_ack);
35b285192aSMauro Carvalho Chehab 
36b285192aSMauro Carvalho Chehab 	cx18_writel(cx, IRQ_CPU_TO_HPU,     &cx->scb->cpu2hpu_irq);
37b285192aSMauro Carvalho Chehab 	cx18_writel(cx, IRQ_HPU_TO_CPU_ACK, &cx->scb->hpu2cpu_irq_ack);
38b285192aSMauro Carvalho Chehab 	cx18_writel(cx, IRQ_APU_TO_HPU,     &cx->scb->apu2hpu_irq);
39b285192aSMauro Carvalho Chehab 	cx18_writel(cx, IRQ_HPU_TO_APU_ACK, &cx->scb->hpu2apu_irq_ack);
40b285192aSMauro Carvalho Chehab 	cx18_writel(cx, IRQ_PPU_TO_HPU,     &cx->scb->ppu2hpu_irq);
41b285192aSMauro Carvalho Chehab 	cx18_writel(cx, IRQ_HPU_TO_PPU_ACK, &cx->scb->hpu2ppu_irq_ack);
42b285192aSMauro Carvalho Chehab 	cx18_writel(cx, IRQ_EPU_TO_HPU,     &cx->scb->epu2hpu_irq);
43b285192aSMauro Carvalho Chehab 	cx18_writel(cx, IRQ_HPU_TO_EPU_ACK, &cx->scb->hpu2epu_irq_ack);
44b285192aSMauro Carvalho Chehab 
45b285192aSMauro Carvalho Chehab 	cx18_writel(cx, IRQ_CPU_TO_PPU,     &cx->scb->cpu2ppu_irq);
46b285192aSMauro Carvalho Chehab 	cx18_writel(cx, IRQ_PPU_TO_CPU_ACK, &cx->scb->ppu2cpu_irq_ack);
47b285192aSMauro Carvalho Chehab 	cx18_writel(cx, IRQ_APU_TO_PPU,     &cx->scb->apu2ppu_irq);
48b285192aSMauro Carvalho Chehab 	cx18_writel(cx, IRQ_PPU_TO_APU_ACK, &cx->scb->ppu2apu_irq_ack);
49b285192aSMauro Carvalho Chehab 	cx18_writel(cx, IRQ_HPU_TO_PPU,     &cx->scb->hpu2ppu_irq);
50b285192aSMauro Carvalho Chehab 	cx18_writel(cx, IRQ_PPU_TO_HPU_ACK, &cx->scb->ppu2hpu_irq_ack);
51b285192aSMauro Carvalho Chehab 	cx18_writel(cx, IRQ_EPU_TO_PPU,     &cx->scb->epu2ppu_irq);
52b285192aSMauro Carvalho Chehab 	cx18_writel(cx, IRQ_PPU_TO_EPU_ACK, &cx->scb->ppu2epu_irq_ack);
53b285192aSMauro Carvalho Chehab 
54b285192aSMauro Carvalho Chehab 	cx18_writel(cx, IRQ_CPU_TO_EPU,     &cx->scb->cpu2epu_irq);
55b285192aSMauro Carvalho Chehab 	cx18_writel(cx, IRQ_EPU_TO_CPU_ACK, &cx->scb->epu2cpu_irq_ack);
56b285192aSMauro Carvalho Chehab 	cx18_writel(cx, IRQ_APU_TO_EPU,     &cx->scb->apu2epu_irq);
57b285192aSMauro Carvalho Chehab 	cx18_writel(cx, IRQ_EPU_TO_APU_ACK, &cx->scb->epu2apu_irq_ack);
58b285192aSMauro Carvalho Chehab 	cx18_writel(cx, IRQ_HPU_TO_EPU,     &cx->scb->hpu2epu_irq);
59b285192aSMauro Carvalho Chehab 	cx18_writel(cx, IRQ_EPU_TO_HPU_ACK, &cx->scb->epu2hpu_irq_ack);
60b285192aSMauro Carvalho Chehab 	cx18_writel(cx, IRQ_PPU_TO_EPU,     &cx->scb->ppu2epu_irq);
61b285192aSMauro Carvalho Chehab 	cx18_writel(cx, IRQ_EPU_TO_PPU_ACK, &cx->scb->epu2ppu_irq_ack);
62b285192aSMauro Carvalho Chehab 
63b285192aSMauro Carvalho Chehab 	cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, apu2cpu_mb),
64b285192aSMauro Carvalho Chehab 			&cx->scb->apu2cpu_mb_offset);
65b285192aSMauro Carvalho Chehab 	cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, hpu2cpu_mb),
66b285192aSMauro Carvalho Chehab 			&cx->scb->hpu2cpu_mb_offset);
67b285192aSMauro Carvalho Chehab 	cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, ppu2cpu_mb),
68b285192aSMauro Carvalho Chehab 			&cx->scb->ppu2cpu_mb_offset);
69b285192aSMauro Carvalho Chehab 	cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, epu2cpu_mb),
70b285192aSMauro Carvalho Chehab 			&cx->scb->epu2cpu_mb_offset);
71b285192aSMauro Carvalho Chehab 	cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, cpu2apu_mb),
72b285192aSMauro Carvalho Chehab 			&cx->scb->cpu2apu_mb_offset);
73b285192aSMauro Carvalho Chehab 	cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, hpu2apu_mb),
74b285192aSMauro Carvalho Chehab 			&cx->scb->hpu2apu_mb_offset);
75b285192aSMauro Carvalho Chehab 	cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, ppu2apu_mb),
76b285192aSMauro Carvalho Chehab 			&cx->scb->ppu2apu_mb_offset);
77b285192aSMauro Carvalho Chehab 	cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, epu2apu_mb),
78b285192aSMauro Carvalho Chehab 			&cx->scb->epu2apu_mb_offset);
79b285192aSMauro Carvalho Chehab 	cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, cpu2hpu_mb),
80b285192aSMauro Carvalho Chehab 			&cx->scb->cpu2hpu_mb_offset);
81b285192aSMauro Carvalho Chehab 	cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, apu2hpu_mb),
82b285192aSMauro Carvalho Chehab 			&cx->scb->apu2hpu_mb_offset);
83b285192aSMauro Carvalho Chehab 	cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, ppu2hpu_mb),
84b285192aSMauro Carvalho Chehab 			&cx->scb->ppu2hpu_mb_offset);
85b285192aSMauro Carvalho Chehab 	cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, epu2hpu_mb),
86b285192aSMauro Carvalho Chehab 			&cx->scb->epu2hpu_mb_offset);
87b285192aSMauro Carvalho Chehab 	cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, cpu2ppu_mb),
88b285192aSMauro Carvalho Chehab 			&cx->scb->cpu2ppu_mb_offset);
89b285192aSMauro Carvalho Chehab 	cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, apu2ppu_mb),
90b285192aSMauro Carvalho Chehab 			&cx->scb->apu2ppu_mb_offset);
91b285192aSMauro Carvalho Chehab 	cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, hpu2ppu_mb),
92b285192aSMauro Carvalho Chehab 			&cx->scb->hpu2ppu_mb_offset);
93b285192aSMauro Carvalho Chehab 	cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, epu2ppu_mb),
94b285192aSMauro Carvalho Chehab 			&cx->scb->epu2ppu_mb_offset);
95b285192aSMauro Carvalho Chehab 	cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, cpu2epu_mb),
96b285192aSMauro Carvalho Chehab 			&cx->scb->cpu2epu_mb_offset);
97b285192aSMauro Carvalho Chehab 	cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, apu2epu_mb),
98b285192aSMauro Carvalho Chehab 			&cx->scb->apu2epu_mb_offset);
99b285192aSMauro Carvalho Chehab 	cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, hpu2epu_mb),
100b285192aSMauro Carvalho Chehab 			&cx->scb->hpu2epu_mb_offset);
101b285192aSMauro Carvalho Chehab 	cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, ppu2epu_mb),
102b285192aSMauro Carvalho Chehab 			&cx->scb->ppu2epu_mb_offset);
103b285192aSMauro Carvalho Chehab 
104b285192aSMauro Carvalho Chehab 	cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, cpu_state),
105b285192aSMauro Carvalho Chehab 			&cx->scb->ipc_offset);
106b285192aSMauro Carvalho Chehab 
107b285192aSMauro Carvalho Chehab 	cx18_writel(cx, 1, &cx->scb->epu_state);
108b285192aSMauro Carvalho Chehab }
109