~pmdj/ubuntu/trusty/qemu/2.9+applesmc+fadtv3

« back to all changes in this revision

Viewing changes to roms/skiboot/include/nx.h

  • Committer: Phil Dennis-Jordan
  • Date: 2017-07-21 08:03:43 UTC
  • mfrom: (1.1.1)
  • Revision ID: phil@philjordan.eu-20170721080343-2yr2vdj7713czahv
New upstream release 2.9.0.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* Copyright 2013-2014 IBM Corp.
 
2
 *
 
3
 * Licensed under the Apache License, Version 2.0 (the "License");
 
4
 * you may not use this file except in compliance with the License.
 
5
 * You may obtain a copy of the License at
 
6
 *
 
7
 *      http://www.apache.org/licenses/LICENSE-2.0
 
8
 *
 
9
 * Unless required by applicable law or agreed to in writing, software
 
10
 * distributed under the License is distributed on an "AS IS" BASIS,
 
11
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
 
12
 * implied.
 
13
 * See the License for the specific language governing permissions and
 
14
 * limitations under the License.
 
15
 */
 
16
 
 
17
#ifndef __NX_H
 
18
#define __NX_H
 
19
 
 
20
/*************************************/
 
21
/* Register addresses and bit fields */
 
22
/*************************************/
 
23
 
 
24
#define NX_P7_SAT(sat, offset)  XSCOM_SAT(0x1, sat, offset)
 
25
#define NX_P8_SAT(sat, offset)  XSCOM_SAT(0xc, sat, offset)
 
26
 
 
27
/* Random Number Generator */
 
28
#define NX_P7_RNG_BAR           NX_P7_SAT(0x2, 0x0c)
 
29
#define NX_P8_RNG_BAR           NX_P8_SAT(0x2, 0x0d)
 
30
#define   NX_P7_RNG_BAR_ADDR            PPC_BITMASK(18, 51)
 
31
#define   NX_P8_RNG_BAR_ADDR            PPC_BITMASK(14, 51)
 
32
#define   NX_RNG_BAR_SIZE               PPC_BITMASK(53, 55)
 
33
#define   NX_RNG_BAR_ENABLE             PPC_BIT(52)
 
34
 
 
35
#define NX_P7_RNG_CFG           NX_P7_SAT(0x2, 0x12)
 
36
#define NX_P8_RNG_CFG           NX_P8_SAT(0x2, 0x12)
 
37
#define   NX_RNG_CFG_ENABLE             PPC_BIT(63)
 
38
 
 
39
/* Symmetric Crypto */
 
40
#define NX_P7_SYM_CFG           NX_P7_SAT(0x2, 0x09)
 
41
#define NX_P8_SYM_CFG           NX_P8_SAT(0x2, 0x0a)
 
42
#define   NX_SYM_CFG_CI                 PPC_BITMASK(2, 14)
 
43
#define   NX_SYM_CFG_CT                 PPC_BITMASK(18, 23)
 
44
#define   NX_SYM_CFG_FC_ENABLE          PPC_BITMASK(32, 39)
 
45
#define   NX_SYM_CFG_ENABLE             PPC_BIT(63)
 
46
 
 
47
/* Asymmetric Crypto */
 
48
#define NX_P7_ASYM_CFG          NX_P7_SAT(0x2, 0x0a)
 
49
#define NX_P8_ASYM_CFG          NX_P8_SAT(0x2, 0x0b)
 
50
#define   NX_ASYM_CFG_CI                PPC_BITMASK(2, 14)
 
51
#define   NX_ASYM_CFG_CT                PPC_BITMASK(18, 23)
 
52
#define   NX_ASYM_CFG_FC_ENABLE         PPC_BITMASK(32, 52)
 
53
#define   NX_ASYM_CFG_ENABLE            PPC_BIT(63)
 
54
 
 
55
/* 842 Compression */
 
56
#define NX_P7_842_CFG           NX_P7_SAT(0x2, 0x0b)
 
57
#define NX_P8_842_CFG           NX_P8_SAT(0x2, 0x0c)
 
58
#define   NX_842_CFG_CI                 PPC_BITMASK(2, 14)
 
59
#define   NX_842_CFG_CT                 PPC_BITMASK(18, 23)
 
60
#define   NX_842_CFG_FC_ENABLE          PPC_BITMASK(32, 36)
 
61
#define   NX_842_CFG_ENABLE             PPC_BIT(63)
 
62
 
 
63
/* DMA */
 
64
#define NX_P7_DMA_CFG           NX_P7_SAT(0x1, 0x02)
 
65
#define NX_P8_DMA_CFG           NX_P8_SAT(0x1, 0x02)
 
66
#define   NX_P8_DMA_CFG_842_COMPRESS_PREFETCH   PPC_BIT(23)
 
67
#define   NX_P8_DMA_CFG_842_DECOMPRESS_PREFETCH PPC_BIT(24)
 
68
#define   NX_DMA_CFG_AES_SHA_MAX_RR             PPC_BITMASK(25, 28)
 
69
#define   NX_DMA_CFG_AMF_MAX_RR                 PPC_BITMASK(29, 32)
 
70
#define   NX_DMA_CFG_842_COMPRESS_MAX_RR        PPC_BITMASK(33, 36)
 
71
#define   NX_DMA_CFG_842_DECOMPRESS_MAX_RR      PPC_BITMASK(37, 40)
 
72
#define   NX_DMA_CFG_AES_SHA_CSB_WR             PPC_BITMASK(41, 42)
 
73
#define   NX_DMA_CFG_AES_SHA_COMPLETION_MODE    PPC_BITMASK(43, 44)
 
74
#define   NX_DMA_CFG_AES_SHA_CPB_WR             PPC_BITMASK(45, 46)
 
75
#define   NX_DMA_CFG_AES_SHA_OUTPUT_DATA_WR     PPC_BIT(47)
 
76
#define   NX_DMA_CFG_AMF_CSB_WR                 PPC_BITMASK(49, 50)
 
77
#define   NX_DMA_CFG_AMF_COMPLETION_MODE        PPC_BITMASK(51, 52)
 
78
#define   NX_DMA_CFG_AMF_CPB_WR                 PPC_BITMASK(53, 54)
 
79
#define   NX_DMA_CFG_AMF_OUTPUT_DATA_WR         PPC_BIT(55)
 
80
#define   NX_DMA_CFG_842_SPBC                   PPC_BIT(56)
 
81
#define   NX_DMA_CFG_842_CSB_WR                 PPC_BITMASK(57, 58)
 
82
#define   NX_DMA_CFG_842_COMPLETION_MODE        PPC_BITMASK(59, 60)
 
83
#define   NX_DMA_CFG_842_CPB_WR                 PPC_BITMASK(61, 62)
 
84
#define   NX_DMA_CFG_842_OUTPUT_DATA_WR         PPC_BIT(63)
 
85
 
 
86
/* Engine Enable Register */
 
87
#define NX_P7_EE_CFG            NX_P7_SAT(0x1, 0x01)
 
88
#define NX_P8_EE_CFG            NX_P8_SAT(0x1, 0x01)
 
89
#define   NX_EE_CFG_EFUSE               PPC_BIT(0)
 
90
#define   NX_EE_CFG_CH7                 PPC_BIT(53) /* AMF */
 
91
#define   NX_EE_CFG_CH6                 PPC_BIT(54) /* AMF */
 
92
#define   NX_EE_CFG_CH5                 PPC_BIT(55) /* AMF */
 
93
#define   NX_EE_CFG_CH4                 PPC_BIT(56) /* P7: SYM, P8: AMF */
 
94
#define   NX_EE_CFG_CH3                 PPC_BIT(57) /* SYM */
 
95
#define   NX_EE_CFG_CH2                 PPC_BIT(58) /* SYM */
 
96
#define   NX_EE_CFG_CH1                 PPC_BIT(62) /* 842 */
 
97
#define   NX_EE_CFG_CH0                 PPC_BIT(63) /* 842 */
 
98
 
 
99
/* PowerBus Registers */
 
100
#define NX_P7_CRB_IQ            NX_P7_SAT(0x2, 0x0e)
 
101
#define NX_P8_CRB_IQ            NX_P8_SAT(0x2, 0x0f)
 
102
#define   NX_CRB_IQ_SYM                 PPC_BITMASK(0, 2)
 
103
#define   NX_CRB_IQ_ASYM                PPC_BITMASK(3, 5)
 
104
 
 
105
/* NX Status Register */
 
106
#define NX_P7_STATUS            NX_P7_SAT(0x1, 0x00)
 
107
#define NX_P8_STATUS            NX_P8_SAT(0x1, 0x00)
 
108
#define   NX_STATUS_HMI_ACTIVE          PPC_BIT(54)
 
109
#define   NX_STATUS_PBI_IDLE            PPC_BIT(55)
 
110
#define   NX_STATUS_DMA_CH0_IDLE        PPC_BIT(56)
 
111
#define   NX_STATUS_DMA_CH1_IDLE        PPC_BIT(57)
 
112
#define   NX_STATUS_DMA_CH2_IDLE        PPC_BIT(58)
 
113
#define   NX_STATUS_DMA_CH3_IDLE        PPC_BIT(59)
 
114
#define   NX_STATUS_DMA_CH4_IDLE        PPC_BIT(60)
 
115
#define   NX_STATUS_DMA_CH5_IDLE        PPC_BIT(61)
 
116
#define   NX_STATUS_DMA_CH6_IDLE        PPC_BIT(62)
 
117
#define   NX_STATUS_DMA_CH7_IDLE        PPC_BIT(63)
 
118
 
 
119
/* Channel Status Registers */
 
120
#define NX_P7_CH_CRB(ch)        NX_P7_SAT(0x1, 0x03 + ((ch) * 2))
 
121
#define NX_P8_CH_CRB(ch)        NX_P8_SAT(0x1, 0x03 + ((ch) * 2))
 
122
#define NX_P7_CH_STATUS(ch)     NX_P7_SAT(0x1, 0x04 + ((ch) * 2))
 
123
#define NX_P8_CH_STATUS(ch)     NX_P8_SAT(0x1, 0x04 + ((ch) * 2))
 
124
#define   NX_CH_STATUS_ABORT            PPC_BIT(0)
 
125
#define   NX_CH_STATUS_CCB_VALID        PPC_BIT(4)
 
126
#define   NX_CH_STATUS_CCB_CM           PPC_BITMASK(5, 7)
 
127
#define   NX_CH_STATUS_CCB_PRIO         PPC_BITMASK(8, 15)
 
128
#define   NX_CH_STATUS_CCB_SN           PPC_BITMASK(16, 31)
 
129
#define   NX_CH_STATUS_VALID            PPC_BIT(32)
 
130
#define   NX_CH_STATUS_LPID             PPC_BITMASK(38, 47)
 
131
#define   NX_CH_STATUS_CCB_ISN          PPC_BITMASK(50, 63)
 
132
#define   NX_CH_STATUS_CRB_SJT          PPC_BITMASK(50, 63)
 
133
 
 
134
/* Kill Register */
 
135
#define NX_P7_CRB_KILL          NX_P7_SAT(0x1, 0x13)
 
136
#define NX_P8_CRB_KILL          NX_P8_SAT(0x1, 0x13)
 
137
#define   NX_CRB_KILL_LPID_KILL         PPC_BIT(0)
 
138
#define   NX_CRB_KILL_LPID              PPC_BITMASK(6, 15)
 
139
#define   NX_CRB_KILL_ISN_KILL          PPC_BIT(16)
 
140
#define   NX_CRB_KILL_SJT_KILL          PPC_BIT(17)
 
141
#define   NX_CRB_KILL_ISN               PPC_BITMASK(18, 31)
 
142
#define   NX_CRB_KILL_SJT               PPC_BITMASK(18, 31)
 
143
#define   NX_CRB_KILL_DONE              PPC_BIT(32)
 
144
#define   NX_CRB_KILL_PBI_LOC           PPC_BITMASK(40, 47)
 
145
#define   NX_CRB_KILL_PREFETCH_CH       PPC_BITMASK(48, 55)
 
146
#define   NX_CRB_KILL_ALG_CH            PPC_BITMASK(56, 63)
 
147
 
 
148
/* Fault Isolation Registers (FIR) */
 
149
#define NX_P7_DE_FIR_DATA       NX_P7_SAT(0x4, 0x00)
 
150
#define NX_P8_DE_FIR_DATA       NX_P8_SAT(0x4, 0x00)
 
151
#define NX_P7_DE_FIR_DATA_CLR   NX_P7_SAT(0x4, 0x01)
 
152
#define NX_P8_DE_FIR_DATA_CLR   NX_P8_SAT(0x4, 0x01)
 
153
#define NX_P7_DE_FIR_DATA_SET   NX_P7_SAT(0x4, 0x02)
 
154
#define NX_P8_DE_FIR_DATA_SET   NX_P8_SAT(0x4, 0x02)
 
155
#define NX_P7_DE_FIR_MASK       NX_P7_SAT(0x4, 0x06)
 
156
#define NX_P8_DE_FIR_MASK       NX_P8_SAT(0x4, 0x03)
 
157
#define NX_P7_DE_FIR_MASK_CLR   NX_P7_SAT(0x4, 0x07)
 
158
#define NX_P8_DE_FIR_MASK_CLR   NX_P8_SAT(0x4, 0x04)
 
159
#define NX_P7_DE_FIR_MASK_SET   NX_P7_SAT(0x4, 0x08)
 
160
#define NX_P8_DE_FIR_MASK_SET   NX_P8_SAT(0x4, 0x05)
 
161
#define NX_P7_DE_FIR_ACTION0    NX_P7_SAT(0x4, 0x03)
 
162
#define NX_P8_DE_FIR_ACTION0    NX_P8_SAT(0x4, 0x06)
 
163
#define NX_P7_DE_FIR_ACTION1    NX_P7_SAT(0x4, 0x04)
 
164
#define NX_P8_DE_FIR_ACTION1    NX_P8_SAT(0x4, 0x07)
 
165
#define NX_P7_DE_FIR_WOF        NX_P7_SAT(0x4, 0x05)
 
166
#define NX_P8_DE_FIR_WOF        NX_P8_SAT(0x4, 0x08)
 
167
#define NX_P7_PB_FIR_DATA       NX_P7_SAT(0x2, 0x00)
 
168
#define NX_P8_PB_FIR_DATA       NX_P8_SAT(0x2, 0x00)
 
169
#define NX_P7_PB_FIR_DATA_CLR   NX_P7_SAT(0x2, 0x01)
 
170
#define NX_P8_PB_FIR_DATA_CLR   NX_P8_SAT(0x2, 0x01)
 
171
#define NX_P7_PB_FIR_DATA_SET   NX_P7_SAT(0x2, 0x02)
 
172
#define NX_P8_PB_FIR_DATA_SET   NX_P8_SAT(0x2, 0x02)
 
173
#define NX_P7_PB_FIR_MASK       NX_P7_SAT(0x2, 0x06)
 
174
#define NX_P8_PB_FIR_MASK       NX_P8_SAT(0x2, 0x03)
 
175
#define NX_P7_PB_FIR_MASK_CLR   NX_P7_SAT(0x2, 0x07)
 
176
#define NX_P8_PB_FIR_MASK_CLR   NX_P8_SAT(0x2, 0x04)
 
177
#define NX_P7_PB_FIR_MASK_SET   NX_P7_SAT(0x2, 0x08)
 
178
#define NX_P8_PB_FIR_MASK_SET   NX_P8_SAT(0x2, 0x05)
 
179
#define NX_P7_PB_FIR_ACTION0    NX_P7_SAT(0x2, 0x03)
 
180
#define NX_P8_PB_FIR_ACTION0    NX_P8_SAT(0x2, 0x06)
 
181
#define NX_P7_PB_FIR_ACTION1    NX_P7_SAT(0x2, 0x04)
 
182
#define NX_P8_PB_FIR_ACTION1    NX_P8_SAT(0x2, 0x07)
 
183
#define NX_P7_PB_FIR_WOF        NX_P7_SAT(0x2, 0x05)
 
184
#define NX_P8_PB_FIR_WOF        NX_P8_SAT(0x2, 0x08)
 
185
#define   NX_FIR_MCD_PB_CMD_HANG        PPC_BIT(0) /* P7 only */
 
186
#define   NX_FIR_SHM_INV                PPC_BIT(1)
 
187
#define   NX_FIR_MCD_ARRAY_ECC_CE       PPC_BIT(2) /* P7 only */
 
188
#define   NX_FIR_MCD_ARRAY_ECC_UE       PPC_BIT(3) /* P7 only */
 
189
#define   NX_FIR_CH0_ECC_CE             PPC_BIT(4)
 
190
#define   NX_FIR_CH0_ECC_UE             PPC_BIT(5)
 
191
#define   NX_FIR_CH1_ECC_CE             PPC_BIT(6)
 
192
#define   NX_FIR_CH1_ECC_UE             PPC_BIT(7)
 
193
#define   NX_FIR_DMA_NZ_CSB_CC          PPC_BIT(8) /* lab use only */
 
194
#define   NX_FIR_DMA_ARRAY_ECC_CE       PPC_BIT(9)
 
195
#define   NX_FIR_DMA_RW_ECC_CE          PPC_BIT(10)
 
196
#define   NX_FIR_CH5_ECC_CE             PPC_BIT(11)
 
197
#define   NX_FIR_CH6_ECC_CE             PPC_BIT(12)
 
198
#define   NX_FIR_CH7_ECC_CE             PPC_BIT(13)
 
199
#define   NX_FIR_OTHER_SCOM_ERR         PPC_BIT(14)
 
200
#define   NX_FIR_DMA_INV_STATE          PPC_BITMASK(15, 16)
 
201
#define   NX_FIR_DMA_ARRAY_ECC_UE       PPC_BIT(17)
 
202
#define   NX_FIR_DMA_RW_ECC_UE          PPC_BIT(18)
 
203
#define   NX_FIR_HYP                    PPC_BIT(19) /* for HYP to force HMI */
 
204
#define   NX_FIR_CH0_INV_STATE          PPC_BIT(20)
 
205
#define   NX_FIR_CH1_INV_STATE          PPC_BIT(21)
 
206
#define   NX_FIR_CH2_INV_STATE          PPC_BIT(22)
 
207
#define   NX_FIR_CH3_INV_STATE          PPC_BIT(23)
 
208
#define   NX_FIR_CH4_INV_STATE          PPC_BIT(24)
 
209
#define   NX_FIR_CH5_INV_STATE          PPC_BIT(25)
 
210
#define   NX_FIR_CH6_INV_STATE          PPC_BIT(26)
 
211
#define   NX_FIR_CH7_INV_STATE          PPC_BIT(27)
 
212
#define   NX_FIR_CH5_ECC_UE             PPC_BIT(28)
 
213
#define   NX_FIR_CH6_ECC_UE             PPC_BIT(29)
 
214
#define   NX_FIR_CH7_ECC_UE             PPC_BIT(30)
 
215
#define   NX_FIR_CRB_UE                 PPC_BIT(31)
 
216
#define   NX_FIR_CRB_SUE                PPC_BIT(32)
 
217
#define   NX_FIR_DMA_RW_ECC_SUE         PPC_BIT(33)
 
218
#define   NX_FIR_MCD_CFG_REG_PARITY     PPC_BIT(34) /* P7 only */
 
219
#define   NX_FIR_MCD_RECOVERY_INV_STATE PPC_BIT(35) /* P7 only */
 
220
#define   NX_FIR_P7_PARITY              PPC_BIT(36) /* P7 only */
 
221
#define   NX_FIR_CH4_ECC_CE             PPC_BIT(36) /* P8 only */
 
222
#define   NX_FIR_CH5_ECC_UE_2           PPC_BIT(37) /* P8 only */
 
223
#define   NX_FIR_P8_PARITY              PPC_BITMASK(48, 49)
 
224
 
 
225
 
 
226
/**************************************/
 
227
/* Register field values/restrictions */
 
228
/**************************************/
 
229
 
 
230
/* Arbitrary Coprocessor Type values */
 
231
#define NX_CT_SYM       (1)
 
232
#define NX_CT_ASYM      (2)
 
233
#define NX_CT_842       (3)
 
234
 
 
235
/* Coprocessor Instance counter
 
236
 * NX workbook, section 5.5.1
 
237
 * "Assigning <CT,CI> Values"
 
238
 */
 
239
#define NX_SYM_CFG_CI_MAX       (511)
 
240
#define NX_SYM_CFG_CI_LSHIFT    (2)
 
241
#define NX_ASYM_CFG_CI_MAX      (127)
 
242
#define NX_ASYM_CFG_CI_LSHIFT   (4)
 
243
#define NX_842_CFG_CI_MAX       (511)
 
244
#define NX_842_CFG_CI_LSHIFT    (2)
 
245
 
 
246
/* DMA configuration values
 
247
 * NX workbook, section 5.2.3, table 5-4
 
248
 * "DMA Configuration Register Bits"
 
249
 *
 
250
 * These values can be used for the AES/SHA, AMF, and 842 DMA
 
251
 * configuration fields in the DMA configuration register.
 
252
 *
 
253
 * Abbreviations used below:
 
254
 *   pDMA - "partial DMA write"
 
255
 *   fDMA - "full DMA write"
 
256
 *   CI - Cache Inject
 
257
 */
 
258
/* NX_DMA_CSB_WR values:
 
259
 * 0 = Always perform 8 or 16 byte pDMA
 
260
 * 1 = Do 128 byte CI if CSB at end of cache line, else pDMA
 
261
 * 2 = Do 128 byte fDMA if CSB at end of cache line, else pDMA
 
262
 */
 
263
#define NX_DMA_CSB_WR_PDMA              (0)
 
264
#define NX_DMA_CSB_WR_CI                (1)
 
265
#define NX_DMA_CSB_WR_FDMA              (2)
 
266
/* NX_DMA_COMPLETION_MODE values:
 
267
 * 0 = Always perform 8 byte pDMA
 
268
 * 1 = Do 128 byte CI, replicating 8 bytes across entire 128 byte cache line
 
269
 * 2 = Do 128 byte fDMA, replicating 8 bytes across entire 128 byte cache line
 
270
 */
 
271
#define NX_DMA_COMPLETION_MODE_PDMA     (0)
 
272
#define NX_DMA_COMPLETION_MODE_CI       (1)
 
273
#define NX_DMA_COMPLETION_MODE_FDMA     (2)
 
274
/* NX_DMA_CPB_WR values:
 
275
 * 0 = Always do pDMA or fDMA, based on number of bytes and alignment
 
276
 * 1 = Always do pDMA on non-aligned cache lines, fDMA on aligned cache lines
 
277
 *      (may store dummy data at the end of the aligned data)
 
278
 * 2 = Do 128 byte CI when writing 128 aligned bytes, else pDMA
 
279
 * 3 = Do 128 byte CI when writing aligned cache lines, else pDMA
 
280
 *      (may store dummy data at the end of the aligned data)
 
281
 */
 
282
#define NX_DMA_CPB_WR_DMA_NOPAD         (0)
 
283
#define NX_DMA_CPB_WR_DMA_PAD           (1)
 
284
#define NX_DMA_CPB_WR_CI_NOPAD          (2)
 
285
#define NX_DMA_CPB_WR_CI_PAD            (3)
 
286
/* NX_DMA_OUTPUT_DATA_WR values:
 
287
 * 0 = Always do pDMA or fDMA, based on number of bytes and alignment
 
288
 * 1 = Do 128 byte CI when writing 128 aligned bytes, else pDMA
 
289
 */
 
290
#define NX_DMA_OUTPUT_DATA_WR_DMA       (0)
 
291
#define NX_DMA_OUTPUT_DATA_WR_CI        (1)
 
292
 
 
293
 
 
294
/******************************/
 
295
/* NX node creation functions */
 
296
/******************************/
 
297
 
 
298
extern void nx_create_rng_node(struct dt_node *);
 
299
extern void nx_create_crypto_node(struct dt_node *);
 
300
extern void nx_create_842_node(struct dt_node *);
 
301
 
 
302
extern void nx_init(void);
 
303
 
 
304
#endif /* __NX_H */