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 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