2 * Copyright (C) 2001-2003 by NBMK Encryption Technologies.
5 * NBMK Encryption Technologies provides no support of any kind for
6 * this software. Questions or concerns about it may be addressed to
7 * the members of the relevant open-source community at
8 * <tech-crypto@netbsd.org>.
10 * Redistribution and use in source and binary forms, with or without
11 * modification, are permitted provided that the following conditions are
14 * 1. Redistributions of source code must retain the above copyright
15 * notice, this list of conditions and the following disclaimer.
17 * 2. Redistributions in binary form must reproduce the above
18 * copyright notice, this list of conditions and the following
19 * disclaimer in the documentation and/or other materials provided
20 * with the distribution.
22 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
25 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
26 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
27 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
28 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
29 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
30 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
31 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
32 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
35 /*****************************************************************************
36 * @(#) nsp2000_regs.h 1.9@(#)
37 *****************************************************************************/
39 /*****************************************************************************/
40 /** @file nsp2000_regs.h
41 * @brief NSP2000 Control Register Layout
43 * This header contains a structure that maps all NSP2000 control registers
44 * for the 4 major subcomponents - the AMBA controller, the PKE/PKH,
45 * the RNG/RNH, and the CCH/CC.
47 *****************************************************************************/
49 /*****************************************************************************
51 * 01/16/04 jpw Add N8_NO_64_BURST to prevent 64bit bursts to 32 bit regs
52 * during sequential slave io accesses. Certain chipsets
53 * need this for proper use with the PCI-X board.
54 * 03/01/02 brr Added register definition previously in n8_enqueue_common.h
55 * 01/15/02 dkm Added amba read pointer mirror register and fixed comment.
57 * 11/12/01 msz Made uint32_t's vuint32_t's (volatile). Fix for BUG 281.
58 * 09/07/01 mmd Further elimination of "simon" except for line 155, which
59 * is there until the rest of the SDK has been updated to use
60 * NSP2000REGS_t instead of SIMON.
61 * 08/16/01 mmd Elimination of "simon" and relocation to driver/common.
62 * 08/01/01 mmd Migration to new common driver framework.
63 * 07/25/01 mmd Now including stdint.h for Linux, to get uint32_t types.
64 * 07/19/01 mmd Cleaned up the #include's at top of file.
65 * 06/27/01 jke changed #ifdef protections on #include bsdi_types.h so file
66 * can be included in both BSDi kernel and user-apps
67 * 06/21/01 jke added #include ../bsdi_types.h to ensure compile-ability in
69 * 06/21/01 mmd Ensuring inttypes.h doesn't get included when building the
70 * Linux or BSDi drivers. One should, in either of these cases,
71 * define either the LINUXDRIVER or BSDIDRIVER symbol in the
73 * 06/06/01 mmd Added missing amba_pci_timer_value register, and all CCH
74 * registers. Also reformatted.
75 * 01/03/01 jw Original version.
76 ****************************************************************************/
77 /** @defgroup NSP2000Driver NSP2000 Control Register Layout.
81 #ifndef NSP2000_REGS_H
82 #define NSP2000_REGS_H
84 #include "n8_pub_types.h"
86 typedef volatile uint8_t vuint8_t
;
87 typedef volatile uint16_t vuint16_t
;
88 typedef volatile uint32_t vuint32_t
;
91 #define NSP_CORE_ENABLE 0x80000000
92 #define NSP_CORE_BUSY 0x40000000
94 /* This dummy write breaks up sequential register accesses */
95 /* Sequential accesses may fail on the PCI-X board on some */
96 /* chipsets if the system attempts to turn two 32 bit */
97 /* register accesses into a single 64 byte burst. */
98 #define N8_NO_64_BURST nsp->amba_pci_test=0xbadbeef;
100 /****************************************************
101 * 64K of total address space *
103 * In PCI BAR0 - Offset from hw pointer: *
104 * 0x0000 - 16K - AMBA-PCI Bridge *
105 * 0x4000 - 16K - Public Key Module *
106 * 0x8000 - 16K - Crypto Control Processor *
107 * 0xC000 - 16K - Random Number Generator *
108 ****************************************************/
109 #define PKE_REG_OFFSET 0x4000
110 #define EA_REG_OFFSET 0x8000
111 #define RNG_REG_OFFSET 0xC000
115 /* AMBA CONTROLLER REGISTERS */
116 vuint32_t amba_pci_endian_mode
; /* 0000 */
117 vuint32_t amba_pci_timer_preset
; /* 0004 */
118 vuint32_t amba_pci_status
; /* 0008 */
119 vuint32_t amba_pci_control
; /* 000C */
120 vuint32_t amba_pci_timer_value
; /* 0010 */
121 vuint32_t amba_pci_test
; /* 0014 */
122 vuint32_t amba_pci_read_ptr_mirror
; /* 0018 */
123 vuint32_t amba_pci_unused
[4089]; /* 001C */
126 /* PKH AND PKE REGISTERS */
127 vuint32_t pkh_test0
; /* 4000 */
128 vuint32_t pkh_test1
; /* 4004 */
129 vuint32_t pkh_q_length
; /* 4008 */
130 vuint32_t pkh_q_ptr
; /* 400C */
131 vuint32_t pkh_q_bar1
; /* 4010 */
132 vuint32_t pkh_q_bar0
; /* 4014 */
133 vuint32_t pkh_intr_enable
; /* 4018 */
134 vuint32_t pkh_control_status
; /* 401C */
135 vuint32_t pkh_secure_key_storage_data
; /* 4020 */
136 vuint32_t pkh_secure_key_storage_control
;/* 4024 */
137 vuint32_t pkh_reserved
[46]; /* 4028 */
139 vuint32_t pke_command_block
[8]; /* 40E0 */
140 vuint32_t pkh_reserved1
[960]; /* 4100 */
141 vuint32_t pke_BN_cache
[1024]; /* 5000 */ /* 256 "digits" */
143 vuint32_t pkh_reserved2
[2048]; /* 6000 */
147 vuint32_t cch_test0
; /* 8000 */
148 vuint32_t cch_test1
; /* 8004 */
149 vuint32_t cch_q_length
; /* 8008 */
150 vuint32_t cch_q_ptr
; /* 800C */
151 vuint32_t cch_q_bar1
; /* 8010 */
152 vuint32_t cch_q_bar0
; /* 8014 */
153 vuint32_t cch_intr_enable
; /* 8018 */
154 vuint32_t cch_control_status
; /* 801C */
155 vuint32_t cch_context_data1
; /* 8020 */
156 vuint32_t cch_context_data0
; /* 8024 */
157 vuint32_t cch_context_addr
; /* 8028 */
158 vuint32_t cch_reserved
[4085]; /* 802C */
161 /* RNG REGISTERS - RNG Buffer - RNH REGISTERS */
162 /* 64-bit regsisters in the RNG must be read/written using the Most */
163 /* Significant Word first, in order to access the full 64bit value. */
164 vuint32_t rng_reserved0
; /* C000 */
165 vuint32_t rng_tod_seconds
; /* C004 */
166 vuint32_t rng_reserved1
; /* C008 */
167 vuint32_t rng_tod_prescale
; /* C00C */
168 vuint32_t rng_tod_msw
; /* C010 */
169 vuint32_t rng_tod_lsw
; /* C014 */
170 vuint32_t rng_key1_msw
; /* C018 */
171 vuint32_t rng_key1_lsw
; /* C01C */
172 vuint32_t rng_key2_msw
; /* C020 */
173 vuint32_t rng_key2_lsw
; /* C024 */
174 vuint32_t rng_hostseed_msw
; /* C028 */
175 vuint32_t rng_hostseed_lsw
; /* C02C */
176 vuint32_t rng_reserved2
; /* C030 */
177 vuint32_t rng_sample_interval
; /* C034 */
178 vuint32_t rng_reserved3
; /* C038 */
179 vuint32_t rng_external_clock_scalar
; /* C03C */
180 vuint32_t rng_reserved4
; /* C040 */
181 vuint32_t rng_buffer_write_ptr
; /* C044 */
182 vuint32_t rng_sample_seed_msw
; /* C048 */
183 vuint32_t rng_sample_seed_lsw
; /* C04C */
184 vuint32_t rng_reserved5
; /* C050 */
185 vuint32_t rng_lsfr_diag
; /* C054 */
186 vuint32_t rng_lsfr1_history_msw
; /* C058 */
187 vuint32_t rng_lsfr1_history_lsw
; /* C05C */
188 vuint32_t rng_lsfr2_history_msw
; /* C060 */
189 vuint32_t rng_lsfr2_history_lsw
; /* C064 */
190 vuint32_t rng_lsfr3_history_msw
; /* C068 */
191 vuint32_t rng_lsfr3_history_lsw
; /* C06C */
192 vuint32_t rng_lsfr4_history_msw
; /* C070 */
193 vuint32_t rng_lsfr4_history_lsw
; /* C074 */
194 vuint32_t rng_reserved6
; /* C078 */
195 vuint32_t rng_control_status
; /* C07C */
196 vuint32_t rng_reserved7
[480]; /* C080 */
198 vuint32_t rng_buffer
[512]; /* This buffer is to be */
199 /* interpreted as 256 64-bit */
200 /* value. Software must */
201 /* access MSB first - 0 then */
204 vuint32_t rnh_test1
; /* D000 */
205 vuint32_t rnh_test0
; /* D004 */
206 vuint32_t rnh_q_length
; /* D008 */
207 vuint32_t rnh_q_ptr
; /* D00C */
208 vuint32_t rnh_q_bar1
; /* D010 */
209 vuint32_t rnh_q_bar0
; /* D014 */
210 vuint32_t rnh_control_status
; /* D018 */
211 vuint32_t rnh_reserved
; /* D01C */
212 vuint32_t rng_unused
[3064]; /* D020 */
216 typedef NSP2000REGS_t SIMON
;
220 /* Common Registers */
221 volatile uint32_t test0
; /* 0000 */
222 volatile uint32_t test1
; /* 0004 */
223 volatile uint32_t q_length
; /* 0008 */
224 volatile uint32_t q_ptr
; /* 000C */
225 volatile uint32_t q_bar1
; /* 0010 */
226 volatile uint32_t q_bar0
; /* 0014 */
227 volatile uint32_t intr_enable
; /* 0018 */
228 volatile uint32_t control_status
; /* 001C */
233 N8CommonRegs_t commonRegs
;
234 volatile uint32_t pkh_secure_key_storage_data
; /* 0020 */
235 volatile uint32_t pkh_secure_key_storage_control
;/* 0024 */
236 volatile uint32_t pkh_reserved
[46]; /* 0028 */
238 volatile uint32_t pke_command_block
[8]; /* 00E0 */
239 volatile uint32_t pkh_reserved1
[960]; /* 0100 */
240 volatile uint32_t pke_BN_cache
[1024]; /* 0000 */ /* 256 "digits" */
248 N8CommonRegs_t commonRegs
;
249 volatile uint32_t cch_context_data1
; /* 0020 */
250 volatile uint32_t cch_context_data0
; /* 0024 */
251 volatile uint32_t cch_context_addr
; /* 0028 */
255 #define N8_SetDebugRegister(x, y) {x->amba_pci_unused[58] = y;}
258 #endif /* NSP2000_REGS_H */