blob: 4a0edc1e42e799f3baf746c4f16f065faf242895 [file] [log] [blame]
Thomas Gleixnerc942fdd2019-05-27 08:55:06 +02001// SPDX-License-Identifier: GPL-2.0-or-later
Hans Verkuil1c1e45d2008-04-28 20:24:33 -03002/*
3 * cx18 System Control Block initialization
4 *
5 * Copyright (C) 2007 Hans Verkuil <hverkuil@xs4all.nl>
Andy Walls6afdeaf2010-05-23 18:53:35 -03006 * Copyright (C) 2008 Andy Walls <awalls@md.metrocast.net>
Hans Verkuil1c1e45d2008-04-28 20:24:33 -03007 */
8
9#include "cx18-driver.h"
Andy Wallsb1526422008-08-30 16:03:44 -030010#include "cx18-io.h"
Hans Verkuil1c1e45d2008-04-28 20:24:33 -030011#include "cx18-scb.h"
12
13void cx18_init_scb(struct cx18 *cx)
14{
Andy Wallsb1526422008-08-30 16:03:44 -030015 cx18_setup_page(cx, SCB_OFFSET);
16 cx18_memset_io(cx, cx->scb, 0, 0x10000);
Hans Verkuil1c1e45d2008-04-28 20:24:33 -030017
Andy Wallsb1526422008-08-30 16:03:44 -030018 cx18_writel(cx, IRQ_APU_TO_CPU, &cx->scb->apu2cpu_irq);
19 cx18_writel(cx, IRQ_CPU_TO_APU_ACK, &cx->scb->cpu2apu_irq_ack);
20 cx18_writel(cx, IRQ_HPU_TO_CPU, &cx->scb->hpu2cpu_irq);
21 cx18_writel(cx, IRQ_CPU_TO_HPU_ACK, &cx->scb->cpu2hpu_irq_ack);
22 cx18_writel(cx, IRQ_PPU_TO_CPU, &cx->scb->ppu2cpu_irq);
23 cx18_writel(cx, IRQ_CPU_TO_PPU_ACK, &cx->scb->cpu2ppu_irq_ack);
24 cx18_writel(cx, IRQ_EPU_TO_CPU, &cx->scb->epu2cpu_irq);
25 cx18_writel(cx, IRQ_CPU_TO_EPU_ACK, &cx->scb->cpu2epu_irq_ack);
Hans Verkuil1c1e45d2008-04-28 20:24:33 -030026
Andy Wallsb1526422008-08-30 16:03:44 -030027 cx18_writel(cx, IRQ_CPU_TO_APU, &cx->scb->cpu2apu_irq);
28 cx18_writel(cx, IRQ_APU_TO_CPU_ACK, &cx->scb->apu2cpu_irq_ack);
29 cx18_writel(cx, IRQ_HPU_TO_APU, &cx->scb->hpu2apu_irq);
30 cx18_writel(cx, IRQ_APU_TO_HPU_ACK, &cx->scb->apu2hpu_irq_ack);
31 cx18_writel(cx, IRQ_PPU_TO_APU, &cx->scb->ppu2apu_irq);
32 cx18_writel(cx, IRQ_APU_TO_PPU_ACK, &cx->scb->apu2ppu_irq_ack);
33 cx18_writel(cx, IRQ_EPU_TO_APU, &cx->scb->epu2apu_irq);
34 cx18_writel(cx, IRQ_APU_TO_EPU_ACK, &cx->scb->apu2epu_irq_ack);
Hans Verkuil1c1e45d2008-04-28 20:24:33 -030035
Andy Wallsb1526422008-08-30 16:03:44 -030036 cx18_writel(cx, IRQ_CPU_TO_HPU, &cx->scb->cpu2hpu_irq);
37 cx18_writel(cx, IRQ_HPU_TO_CPU_ACK, &cx->scb->hpu2cpu_irq_ack);
38 cx18_writel(cx, IRQ_APU_TO_HPU, &cx->scb->apu2hpu_irq);
39 cx18_writel(cx, IRQ_HPU_TO_APU_ACK, &cx->scb->hpu2apu_irq_ack);
40 cx18_writel(cx, IRQ_PPU_TO_HPU, &cx->scb->ppu2hpu_irq);
41 cx18_writel(cx, IRQ_HPU_TO_PPU_ACK, &cx->scb->hpu2ppu_irq_ack);
42 cx18_writel(cx, IRQ_EPU_TO_HPU, &cx->scb->epu2hpu_irq);
43 cx18_writel(cx, IRQ_HPU_TO_EPU_ACK, &cx->scb->hpu2epu_irq_ack);
Hans Verkuil1c1e45d2008-04-28 20:24:33 -030044
Andy Wallsb1526422008-08-30 16:03:44 -030045 cx18_writel(cx, IRQ_CPU_TO_PPU, &cx->scb->cpu2ppu_irq);
46 cx18_writel(cx, IRQ_PPU_TO_CPU_ACK, &cx->scb->ppu2cpu_irq_ack);
47 cx18_writel(cx, IRQ_APU_TO_PPU, &cx->scb->apu2ppu_irq);
48 cx18_writel(cx, IRQ_PPU_TO_APU_ACK, &cx->scb->ppu2apu_irq_ack);
49 cx18_writel(cx, IRQ_HPU_TO_PPU, &cx->scb->hpu2ppu_irq);
50 cx18_writel(cx, IRQ_PPU_TO_HPU_ACK, &cx->scb->ppu2hpu_irq_ack);
51 cx18_writel(cx, IRQ_EPU_TO_PPU, &cx->scb->epu2ppu_irq);
52 cx18_writel(cx, IRQ_PPU_TO_EPU_ACK, &cx->scb->ppu2epu_irq_ack);
Hans Verkuil1c1e45d2008-04-28 20:24:33 -030053
Andy Wallsb1526422008-08-30 16:03:44 -030054 cx18_writel(cx, IRQ_CPU_TO_EPU, &cx->scb->cpu2epu_irq);
55 cx18_writel(cx, IRQ_EPU_TO_CPU_ACK, &cx->scb->epu2cpu_irq_ack);
56 cx18_writel(cx, IRQ_APU_TO_EPU, &cx->scb->apu2epu_irq);
57 cx18_writel(cx, IRQ_EPU_TO_APU_ACK, &cx->scb->epu2apu_irq_ack);
58 cx18_writel(cx, IRQ_HPU_TO_EPU, &cx->scb->hpu2epu_irq);
59 cx18_writel(cx, IRQ_EPU_TO_HPU_ACK, &cx->scb->epu2hpu_irq_ack);
60 cx18_writel(cx, IRQ_PPU_TO_EPU, &cx->scb->ppu2epu_irq);
61 cx18_writel(cx, IRQ_EPU_TO_PPU_ACK, &cx->scb->epu2ppu_irq_ack);
Hans Verkuil1c1e45d2008-04-28 20:24:33 -030062
Andy Wallsb1526422008-08-30 16:03:44 -030063 cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, apu2cpu_mb),
Hans Verkuil1c1e45d2008-04-28 20:24:33 -030064 &cx->scb->apu2cpu_mb_offset);
Andy Wallsb1526422008-08-30 16:03:44 -030065 cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, hpu2cpu_mb),
Hans Verkuil1c1e45d2008-04-28 20:24:33 -030066 &cx->scb->hpu2cpu_mb_offset);
Andy Wallsb1526422008-08-30 16:03:44 -030067 cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, ppu2cpu_mb),
Hans Verkuil1c1e45d2008-04-28 20:24:33 -030068 &cx->scb->ppu2cpu_mb_offset);
Andy Wallsb1526422008-08-30 16:03:44 -030069 cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, epu2cpu_mb),
Hans Verkuil1c1e45d2008-04-28 20:24:33 -030070 &cx->scb->epu2cpu_mb_offset);
Andy Wallsb1526422008-08-30 16:03:44 -030071 cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, cpu2apu_mb),
Hans Verkuil1c1e45d2008-04-28 20:24:33 -030072 &cx->scb->cpu2apu_mb_offset);
Andy Wallsb1526422008-08-30 16:03:44 -030073 cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, hpu2apu_mb),
Hans Verkuil1c1e45d2008-04-28 20:24:33 -030074 &cx->scb->hpu2apu_mb_offset);
Andy Wallsb1526422008-08-30 16:03:44 -030075 cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, ppu2apu_mb),
Hans Verkuil1c1e45d2008-04-28 20:24:33 -030076 &cx->scb->ppu2apu_mb_offset);
Andy Wallsb1526422008-08-30 16:03:44 -030077 cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, epu2apu_mb),
Hans Verkuil1c1e45d2008-04-28 20:24:33 -030078 &cx->scb->epu2apu_mb_offset);
Andy Wallsb1526422008-08-30 16:03:44 -030079 cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, cpu2hpu_mb),
Hans Verkuil1c1e45d2008-04-28 20:24:33 -030080 &cx->scb->cpu2hpu_mb_offset);
Andy Wallsb1526422008-08-30 16:03:44 -030081 cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, apu2hpu_mb),
Hans Verkuil1c1e45d2008-04-28 20:24:33 -030082 &cx->scb->apu2hpu_mb_offset);
Andy Wallsb1526422008-08-30 16:03:44 -030083 cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, ppu2hpu_mb),
Hans Verkuil1c1e45d2008-04-28 20:24:33 -030084 &cx->scb->ppu2hpu_mb_offset);
Andy Wallsb1526422008-08-30 16:03:44 -030085 cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, epu2hpu_mb),
Hans Verkuil1c1e45d2008-04-28 20:24:33 -030086 &cx->scb->epu2hpu_mb_offset);
Andy Wallsb1526422008-08-30 16:03:44 -030087 cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, cpu2ppu_mb),
Hans Verkuil1c1e45d2008-04-28 20:24:33 -030088 &cx->scb->cpu2ppu_mb_offset);
Andy Wallsb1526422008-08-30 16:03:44 -030089 cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, apu2ppu_mb),
Hans Verkuil1c1e45d2008-04-28 20:24:33 -030090 &cx->scb->apu2ppu_mb_offset);
Andy Wallsb1526422008-08-30 16:03:44 -030091 cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, hpu2ppu_mb),
Hans Verkuil1c1e45d2008-04-28 20:24:33 -030092 &cx->scb->hpu2ppu_mb_offset);
Andy Wallsb1526422008-08-30 16:03:44 -030093 cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, epu2ppu_mb),
Hans Verkuil1c1e45d2008-04-28 20:24:33 -030094 &cx->scb->epu2ppu_mb_offset);
Andy Wallsb1526422008-08-30 16:03:44 -030095 cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, cpu2epu_mb),
Hans Verkuil1c1e45d2008-04-28 20:24:33 -030096 &cx->scb->cpu2epu_mb_offset);
Andy Wallsb1526422008-08-30 16:03:44 -030097 cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, apu2epu_mb),
Hans Verkuil1c1e45d2008-04-28 20:24:33 -030098 &cx->scb->apu2epu_mb_offset);
Andy Wallsb1526422008-08-30 16:03:44 -030099 cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, hpu2epu_mb),
Hans Verkuil1c1e45d2008-04-28 20:24:33 -0300100 &cx->scb->hpu2epu_mb_offset);
Andy Wallsb1526422008-08-30 16:03:44 -0300101 cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, ppu2epu_mb),
Hans Verkuil1c1e45d2008-04-28 20:24:33 -0300102 &cx->scb->ppu2epu_mb_offset);
103
Andy Wallsb1526422008-08-30 16:03:44 -0300104 cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, cpu_state),
Hans Verkuil1c1e45d2008-04-28 20:24:33 -0300105 &cx->scb->ipc_offset);
106
Andy Wallsb1526422008-08-30 16:03:44 -0300107 cx18_writel(cx, 1, &cx->scb->epu_state);
Hans Verkuil1c1e45d2008-04-28 20:24:33 -0300108}