1*c42f10a2SRuslan Bukin /*- 2*c42f10a2SRuslan Bukin * Copyright (c) 2017-2018 Ruslan Bukin <br@bsdpad.com> 3*c42f10a2SRuslan Bukin * All rights reserved. 4*c42f10a2SRuslan Bukin * 5*c42f10a2SRuslan Bukin * This software was developed by SRI International and the University of 6*c42f10a2SRuslan Bukin * Cambridge Computer Laboratory under DARPA/AFRL contract FA8750-10-C-0237 7*c42f10a2SRuslan Bukin * ("CTSRD"), as part of the DARPA CRASH research programme. 8*c42f10a2SRuslan Bukin * 9*c42f10a2SRuslan Bukin * Redistribution and use in source and binary forms, with or without 10*c42f10a2SRuslan Bukin * modification, are permitted provided that the following conditions 11*c42f10a2SRuslan Bukin * are met: 12*c42f10a2SRuslan Bukin * 1. Redistributions of source code must retain the above copyright 13*c42f10a2SRuslan Bukin * notice, this list of conditions and the following disclaimer. 14*c42f10a2SRuslan Bukin * 2. Redistributions in binary form must reproduce the above copyright 15*c42f10a2SRuslan Bukin * notice, this list of conditions and the following disclaimer in the 16*c42f10a2SRuslan Bukin * documentation and/or other materials provided with the distribution. 17*c42f10a2SRuslan Bukin * 18*c42f10a2SRuslan Bukin * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 19*c42f10a2SRuslan Bukin * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20*c42f10a2SRuslan Bukin * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21*c42f10a2SRuslan Bukin * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 22*c42f10a2SRuslan Bukin * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 23*c42f10a2SRuslan Bukin * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 24*c42f10a2SRuslan Bukin * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 25*c42f10a2SRuslan Bukin * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 26*c42f10a2SRuslan Bukin * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 27*c42f10a2SRuslan Bukin * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 28*c42f10a2SRuslan Bukin * SUCH DAMAGE. 29*c42f10a2SRuslan Bukin */ 30*c42f10a2SRuslan Bukin 31*c42f10a2SRuslan Bukin #ifndef _DEV_XDMA_CONTROLLER_PL330_H_ 32*c42f10a2SRuslan Bukin #define _DEV_XDMA_CONTROLLER_PL330_H_ 33*c42f10a2SRuslan Bukin 34*c42f10a2SRuslan Bukin /* pl330 registers */ 35*c42f10a2SRuslan Bukin #define DSR 0x000 /* DMA Manager Status */ 36*c42f10a2SRuslan Bukin #define DPC 0x004 /* DMA Program Counter */ 37*c42f10a2SRuslan Bukin #define INTEN 0x020 /* Interrupt Enable */ 38*c42f10a2SRuslan Bukin #define INT_EVENT_RIS 0x024 /* Event-Interrupt Raw Status */ 39*c42f10a2SRuslan Bukin #define INTMIS 0x028 /* Interrupt Status */ 40*c42f10a2SRuslan Bukin #define INTCLR 0x02C /* Interrupt Clear */ 41*c42f10a2SRuslan Bukin #define FSRD 0x030 /* Fault Status DMA Manager */ 42*c42f10a2SRuslan Bukin #define FSRC 0x034 /* Fault Status DMA Channel */ 43*c42f10a2SRuslan Bukin #define FTRD 0x038 /* Fault Type DMA Manager */ 44*c42f10a2SRuslan Bukin #define FTR(n) (0x040 + 0x04 * (n)) /* Fault type for DMA channel n */ 45*c42f10a2SRuslan Bukin #define CSR(n) (0x100 + 0x08 * (n)) /* Channel status for DMA channel n */ 46*c42f10a2SRuslan Bukin #define CPC(n) (0x104 + 0x08 * (n)) /* Channel PC for DMA channel n */ 47*c42f10a2SRuslan Bukin #define SAR(n) (0x400 + 0x20 * (n)) /* Source address for DMA channel n */ 48*c42f10a2SRuslan Bukin #define DAR(n) (0x404 + 0x20 * (n)) /* Destination address for DMA channel n */ 49*c42f10a2SRuslan Bukin #define CCR(n) (0x408 + 0x20 * (n)) /* Channel control for DMA channel n */ 50*c42f10a2SRuslan Bukin #define CCR_DST_BURST_SIZE_S 15 51*c42f10a2SRuslan Bukin #define CCR_DST_BURST_SIZE_1 (0 << CCR_DST_BURST_SIZE_S) 52*c42f10a2SRuslan Bukin #define CCR_DST_BURST_SIZE_2 (1 << CCR_DST_BURST_SIZE_S) 53*c42f10a2SRuslan Bukin #define CCR_DST_BURST_SIZE_4 (2 << CCR_DST_BURST_SIZE_S) 54*c42f10a2SRuslan Bukin #define CCR_SRC_BURST_SIZE_S 1 55*c42f10a2SRuslan Bukin #define CCR_SRC_BURST_SIZE_1 (0 << CCR_SRC_BURST_SIZE_S) 56*c42f10a2SRuslan Bukin #define CCR_SRC_BURST_SIZE_2 (1 << CCR_SRC_BURST_SIZE_S) 57*c42f10a2SRuslan Bukin #define CCR_SRC_BURST_SIZE_4 (2 << CCR_SRC_BURST_SIZE_S) 58*c42f10a2SRuslan Bukin #define CCR_DST_INC (1 << 14) 59*c42f10a2SRuslan Bukin #define CCR_SRC_INC (1 << 0) 60*c42f10a2SRuslan Bukin #define CCR_DST_PROT_CTRL_S 22 61*c42f10a2SRuslan Bukin #define CCR_DST_PROT_PRIV (1 << CCR_DST_PROT_CTRL_S) 62*c42f10a2SRuslan Bukin #define LC0(n) (0x40C + 0x20 * (n)) /* Loop counter 0 for DMA channel n */ 63*c42f10a2SRuslan Bukin #define LC1(n) (0x410 + 0x20 * (n)) /* Loop counter 1 for DMA channel n */ 64*c42f10a2SRuslan Bukin 65*c42f10a2SRuslan Bukin #define DBGSTATUS 0xD00 /* Debug Status */ 66*c42f10a2SRuslan Bukin #define DBGCMD 0xD04 /* Debug Command */ 67*c42f10a2SRuslan Bukin #define DBGINST0 0xD08 /* Debug Instruction-0 */ 68*c42f10a2SRuslan Bukin #define DBGINST1 0xD0C /* Debug Instruction-1 */ 69*c42f10a2SRuslan Bukin #define CR0 0xE00 /* Configuration Register 0 */ 70*c42f10a2SRuslan Bukin #define CR1 0xE04 /* Configuration Register 1 */ 71*c42f10a2SRuslan Bukin #define CR2 0xE08 /* Configuration Register 2 */ 72*c42f10a2SRuslan Bukin #define CR3 0xE0C /* Configuration Register 3 */ 73*c42f10a2SRuslan Bukin #define CR4 0xE10 /* Configuration Register 4 */ 74*c42f10a2SRuslan Bukin #define CRD 0xE14 /* DMA Configuration */ 75*c42f10a2SRuslan Bukin #define WD 0xE80 /* Watchdog Register */ 76*c42f10a2SRuslan Bukin 77*c42f10a2SRuslan Bukin #define R_SAR 0 78*c42f10a2SRuslan Bukin #define R_CCR 1 79*c42f10a2SRuslan Bukin #define R_DAR 2 80*c42f10a2SRuslan Bukin 81*c42f10a2SRuslan Bukin /* 82*c42f10a2SRuslan Bukin * 0xFE0- 0xFEC periph_id_n RO Configuration-dependent Peripheral Identification Registers 83*c42f10a2SRuslan Bukin * 0xFF0- 0xFFC pcell_id_n RO Configuration-dependent Component Identification Registers 84*c42f10a2SRuslan Bukin */ 85*c42f10a2SRuslan Bukin 86*c42f10a2SRuslan Bukin /* pl330 ISA */ 87*c42f10a2SRuslan Bukin #define DMAADDH 0x54 88*c42f10a2SRuslan Bukin #define DMAADNH 0x5c 89*c42f10a2SRuslan Bukin #define DMAEND 0x00 90*c42f10a2SRuslan Bukin #define DMAFLUSHP 0x35 91*c42f10a2SRuslan Bukin #define DMAGO 0xa0 92*c42f10a2SRuslan Bukin #define DMAKILL 0x01 93*c42f10a2SRuslan Bukin #define DMALD 0x04 94*c42f10a2SRuslan Bukin #define DMALDP 0x25 95*c42f10a2SRuslan Bukin #define DMALP 0x20 96*c42f10a2SRuslan Bukin #define DMALPEND 0x28 97*c42f10a2SRuslan Bukin #define DMALPEND_NF (1 << 4) /* DMALP started the loop */ 98*c42f10a2SRuslan Bukin /* 99*c42f10a2SRuslan Bukin * TODO: documentation miss opcode for infinite loop 100*c42f10a2SRuslan Bukin * #define DMALPFE 0 101*c42f10a2SRuslan Bukin */ 102*c42f10a2SRuslan Bukin #define DMAMOV 0xbc 103*c42f10a2SRuslan Bukin #define DMANOP 0x18 104*c42f10a2SRuslan Bukin #define DMARMB 0x12 105*c42f10a2SRuslan Bukin #define DMASEV 0x34 106*c42f10a2SRuslan Bukin #define DMAST 0x08 107*c42f10a2SRuslan Bukin #define DMASTP 0x29 108*c42f10a2SRuslan Bukin #define DMASTZ 0x0c 109*c42f10a2SRuslan Bukin #define DMAWFE 0x36 110*c42f10a2SRuslan Bukin #define DMAWFP 0x30 111*c42f10a2SRuslan Bukin #define DMAWMB 0x13 112*c42f10a2SRuslan Bukin 113*c42f10a2SRuslan Bukin #endif /* !_DEV_XDMA_CONTROLLER_PL330_H_ */ 114