1 /* $NetBSD: at91dbgureg.h,v 1.5 2012/11/12 18:00:36 skrll Exp $ */ 2 3 /* 4 * Copyright (c) 2007 Embedtronics Oy 5 * All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions 9 * are met: 10 * 1. Redistributions of source code must retain the above copyright 11 * notice, this list of conditions and the following disclaimer. 12 * 2. Redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions and the following disclaimer in the 14 * documentation and/or other materials provided with the distribution. 15 * 16 * THIS SOFTWARE IS PROVIDED BY ICHIRO FUKUHARA ``AS IS'' AND ANY EXPRESS OR 17 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 18 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 19 * IN NO EVENT SHALL ICHIRO FUKUHARA OR THE VOICES IN HIS HEAD BE LIABLE FOR 20 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 21 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 22 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 23 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 24 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 25 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26 * SUCH DAMAGE. 27 */ 28 29 #ifndef _AT91DBGUREG_H_ 30 #define _AT91DBGUREG_H_ 31 32 #define AT91DBGU_BASE 0xFFFFF200 /* DBGU unit base addresses (physical) */ 33 #define AT91DBGU_SIZE 0x200 /* DBGU peripheral address space size */ 34 35 #define DBGU_CR 0x00UL /* Control Register */ 36 #define DBGU_MR 0x04UL /* Mode Register */ 37 #define DBGU_IER 0x08UL /* Interrupt Enable Register */ 38 #define DBGU_IDR 0x0CUL /* Interrupt Disable Register */ 39 #define DBGU_IMR 0x10UL /* Interrupt Mask Register */ 40 #define DBGU_SR 0x14UL /* Status Register */ 41 #define DBGU_RHR 0x18UL /* Receive Holding Register */ 42 #define DBGU_THR 0x1CUL /* Transmit Holding Register */ 43 #define DBGU_BRGR 0x20UL /* Baud Rate Generator Register */ 44 #define DBGU_CIDR 0x40UL /* Chip ID Register */ 45 #define DBGU_EXID 0x44UL /* Chip ID Extension Register */ 46 #define DBGU_FNR 0x48UL /* Force NTRST Register */ 47 #define DBGU_PDC 0x100UL 48 49 /* Control Register bits: */ 50 #define DBGU_CR_RSTSTA 0x100 /* 1 = reset the status bits */ 51 #define DBGU_CR_TXDIS 0x080 /* 1 = disable transmitter */ 52 #define DBGU_CR_TXEN 0x040 /* 1 = enable transmitter */ 53 #define DBGU_CR_RXDIS 0x020 /* 1 = disable receiver */ 54 #define DBGU_CR_RXEN 0x010 /* 1 = enable receiver */ 55 #define DBGU_CR_RSTTX 0x008 /* 1 = reset transmitter */ 56 #define DBGU_CR_RSTRX 0x004 /* 1 = reset receiver */ 57 58 /* Mode Register bits: */ 59 #define DBGU_MR_CHMODE 0xC000 /* channel mode */ 60 #define DBGU_MR_CHMOD_NORMAL 0x0000 61 #define DBGU_MR_CHMOD_ECHO 0x4000 62 #define DBGU_MR_CHMOD_LOCAL_LOOP 0x8000 63 #define DBGU_MR_CHMOD_REMOTE_LOOP 0xC000 64 65 #define DBGU_MR_PAR 0x0E00 /* parity type */ 66 #define DBGU_MR_PAR_EVEN 0x0000 67 #define DBGU_MR_PAR_ODD 0x0200 68 #define DBGU_MR_PAR_SPACE 0x0400 69 #define DBGU_MR_PAR_MARK 0x0600 70 #define DBGU_MR_PAR_NONE 0x0800 71 72 /* Interrupt bits: */ 73 #define DBGU_INT_COMMRX 0x80000000 74 #define DBGU_INT_COMMTX 0x40000000 75 #define DBGU_INT_RXBUFF 0x00001000 76 #define DBGU_INT_TXBUFE 0x00000800 77 #define DBGU_INT_TXEMPTY 0x00000200 78 #define DBGU_INT_PARE 0x00000080 79 #define DBGU_INT_FRAME 0x00000040 80 #define DBGU_INT_OVRE 0x00000020 81 #define DBGU_INT_ENDTX 0x00000010 82 #define DBGU_INT_ENDRX 0x00000008 83 #define DBGU_INT_TXRDY 0x00000002 84 #define DBGU_INT_RXRDY 0x00000001 85 86 /* Status register bits: */ 87 #define DBGU_SR_COMMRX 0x80000000 88 #define DBGU_SR_COMMTX 0x40000000 89 #define DBGU_SR_RXBUFF 0x00001000 90 #define DBGU_SR_TXBUFE 0x00000800 91 #define DBGU_SR_TXEMPTY 0x00000200 92 #define DBGU_SR_PARE 0x00000080 93 #define DBGU_SR_FRAME 0x00000040 94 #define DBGU_SR_OVRE 0x00000020 95 #define DBGU_SR_ENDTX 0x00000010 96 #define DBGU_SR_ENDRX 0x00000008 97 #define DBGU_SR_TXRDY 0x00000002 98 #define DBGU_SR_RXRDY 0x00000001 99 100 101 /* Chip ID Register bits: */ 102 #define DBGU_CIDR_EXT 0x80000000 /* 1 = Extended Chip ID exists */ 103 104 #define DBGU_CIDR_NVPTYP 0x70000000 /* Nonvolatile Pgm Mem Type */ 105 #define DBGU_CIDR_NVPTYP_ROM 0x00000000 106 #define DBGU_CIDR_NVPTYP_ROMLESS 0x10000000 107 #define DBGU_CIDR_NVPTYP_SRAM 0x40000000 108 #define DBGU_CIDR_NVPTYP_FLASH 0x20000000 109 #define DBGU_CIDR_NVTYP_ROM_FLASH 0x30000000 /* NVPSIZ is ROM size, NVPSIZ2 is Flash Size */ 110 111 #define DBGU_CIDR_ARCH 0x0FF00000 /* Architecture identifier */ 112 #define DBGU_CIDR_ARCH_AT91SAM9XX 0x01900000 /* AT91SAM9xx Series */ 113 #define DBGU_CIDR_ARCH_AT91SAM9XEXX 0x02900000 /* AT91SAM9XExx Series */ 114 #define DBGU_CIDR_ARCH_AT91X34 0x03400000 /* AT91x34 Series */ 115 #define DBGU_CIDR_ARCH_CAP9 0x03900000 /* CAP9 Series */ 116 #define DBGU_CIDR_ARCH_AT91X40 0x04000000 /* AT91x40 Series */ 117 #define DBGU_CIDR_ARCH_AT91X42 0x04200000 /* AT91x42 Series */ 118 #define DBGU_CIDR_ARCH_AT91X55 0x05500000 /* AT91x55 Series */ 119 #define DBGU_CIDR_ARCH_AT91SAM7AXX 0x06000000 /* AT91SAM7Axx Series */ 120 #define DBGU_CIDR_ARCH_AT91X63 0x06300000 /* AT91x63 Series */ 121 #define DBGU_CIDR_ARCH_AT91SAM7SXX 0x07000000 /* AT91SAM7Sxx Series */ 122 #define DBGU_CIDR_ARCH_AT91SAM7XCXX 0x07100000 /* AT91SAM7XCxx Series */ 123 #define DBGU_CIDR_ARCH_AT91SAM7SEXX 0x07200000 /* AT91SAM7SExx Series */ 124 #define DBGU_CIDR_ARCH_AT91SAM7LXX 0x07300000 /* AT91SAM7LExx Series */ 125 #define DBGU_CIDR_ARCH_AT91SAM7XXX 0x07500000 /* AT91SAM7Xxx Series */ 126 #define DBGU_CIDR_ARCH_AT91X92 0x09200000 /* AT91x92 Series */ 127 #define DBGU_CIDR_ARCH_AT75CXX 0x0F000000 /* AT75Cxx Series */ 128 129 #define DBGU_CIDR_SRAMSIZ 0x000F0000 /* Internal SRAM Size */ 130 #define DBGU_CIDR_SRAMSIZ_1K 0x00010000 131 #define DBGU_CIDR_SRAMSIZ_2K 0x00020000 132 #define DBGU_CIDR_SRAMSIZ_4K 0x00050000 133 #define DBGU_CIDR_SRAMSIZ_8K 0x00080000 134 #define DBGU_CIDR_SRAMSIZ_16K 0x00090000 135 #define DBGU_CIDR_SRAMSIZ_32K 0x000A0000 136 #define DBGU_CIDR_SRAMSIZ_64K 0x000B0000 137 #define DBGU_CIDR_SRAMSIZ_128K 0x000C0000 138 #define DBGU_CIDR_SRAMSIZ_256K 0x000D0000 139 #define DBGU_CIDR_SRAMSIZ_96K 0x000E0000 140 #define DBGU_CIDR_SRAMSIZ_512K 0x000F0000 141 142 #define DBGU_CIDR_NVPSIZ 0x00000F00 /* Nonvolatile Pgm Mem Size */ 143 #define DBGU_CIDR_NVPSIZ_NONE 0x00000000 144 #define DBGU_CIDR_NVPSIZ_8K 0x00000100 145 #define DBGU_CIDR_NVPSIZ_16K 0x00000200 146 #define DBGU_CIDR_NVPSIZ_32K 0x00000300 147 #define DBGU_CIDR_NVPSIZ_64K 0x00000500 148 #define DBGU_CIDR_NVPSIZ_128K 0x00000700 149 #define DBGU_CIDR_NVPSIZ_256K 0x00000900 150 #define DBGU_CIDR_NVPSIZ_512K 0x00000A00 151 #define DBGU_CIDR_NVPSIZ_1024K 0x00000C00 152 #define DBGU_CIDR_NVPSIZ_2048K 0x00000E00 153 154 #define DBGU_CIDR_NPVSIZ2 0x0000F000 /* Nonvolatile Pgm 2 Mem Size */ 155 #define DBGU_CIDR_NVPSIZ2_NONE 0x00000000 156 #define DBGU_CIDR_NVPSIZ2_8K 0x00001000 157 #define DBGU_CIDR_NVPSIZ2_16K 0x00002000 158 #define DBGU_CIDR_NVPSIZ2_32K 0x00003000 159 #define DBGU_CIDR_NVPSIZ2_64K 0x00005000 160 #define DBGU_CIDR_NVPSIZ2_128K 0x00007000 161 #define DBGU_CIDR_NVPSIZ2_256K 0x00009000 162 #define DBGU_CIDR_NVPSIZ2_512K 0x0000A000 163 #define DBGU_CIDR_NVPSIZ2_1024K 0x0000C000 164 #define DBGU_CIDR_NVPSIZ2_2048K 0x0000E000 165 166 #define DBGU_CIDR_EPROC 0x000000E0 /* Embedded Processor ID */ 167 #define DBGU_CIDR_EPROC_946ES 0x00000020 168 #define DBGU_CIDR_EPROC_7TDMI 0x00000040 169 #define DBGU_CIDR_EPROC_920T 0x00000080 170 #define DBGU_CIDR_EPROC_926EJS 0x000000E0 171 172 #define DBGU_CIDR_VERSION 0x0000001F /* version of the device */ 173 174 #define DBGU_CIDR_AT91RM9200 0x09290781 175 #define DBGU_CIDR_AT91SAM9260 0x019803A2 176 #define DBGU_CIDR_AT91SAM9261 0x019703A0 177 #define DBGU_CIDR_AT91SAM9263 0x019607A0 178 179 #define AT91RM9200_CHIP_ID DBGU_CIDR_AT91RM9200 180 #define AT91SAM9260_CHIP_ID DBGU_CIDR_AT91SAM9260 181 #define AT91SAM9261_CHIP_ID DBGU_CIDR_AT91SAM9261 182 #define AT91SAM9263_CHIP_ID DBGU_CIDR_AT91SAM9263 183 184 #define DBGUREG(reg) *((volatile uint32_t*)(AT91DBGU_BASE + (reg))) 185 186 #define DBGU_INIT(mstclk, speed) do { \ 187 DBGUREG(DBGU_PDC + PDC_PTCR) = PDC_PTCR_TXTDIS | PDC_PTCR_RXTDIS; \ 188 DBGUREG(DBGU_BRGR) = ((mstclk) / 16 + (speed) / 2) / (speed); \ 189 DBGUREG(DBGU_MR) = DBGU_MR_PAR_NONE; \ 190 DBGUREG(DBGU_CR) = DBGU_CR_RSTSTA | DBGU_CR_RSTTX | DBGU_CR_RSTRX; \ 191 DBGUREG(DBGU_CR) = DBGU_CR_TXEN | DBGU_CR_RXEN; \ 192 (void)DBGUREG(DBGU_SR); \ 193 } while (/*CONSTCOND*/0) 194 195 #define DBGU_PUTC(ch) do { \ 196 int s = splserial(); \ 197 while ((DBGUREG(DBGU_SR) & DBGU_SR_TXRDY) == 0) { \ 198 splx(s); s = splserial(); \ 199 }; \ 200 DBGUREG(DBGU_THR) = ch; \ 201 splx(s); \ 202 } while (/*CONSTCOND*/0) 203 204 #define DBGU_PEEKC() ((DBGUREG(DBGU_SR) & DBGU_SR_RXRDY) ? DBGUREG(DBGU_RHR) : -1) 205 206 #define DBGU_PUTS(string) do { \ 207 const char *_ptr = (string); \ 208 while (*_ptr) { \ 209 DBGU_PUTC(*_ptr); \ 210 _ptr++; \ 211 } \ 212 } while (/*CONSTCOND*/0) 213 214 #endif // _AT91DBGUREG_H_ 215 216