blob: c06736765dacda8fcf8e0b6aec35c914d0aa37ee [file] [log] [blame]
Googlerfc3e29a2022-11-22 14:17:45 +08001/* SPDX-License-Identifier: (GPL-2.0+ OR MIT) */
2/*
3 * Copyright (c) 2019 Amlogic, Inc. All rights reserved.
4 */
5
6/** \brief DDR3U_1D training firmware message block structure
7 *
8 * Please refer to the Training Firmware App Note for futher information about
9 * the usage for Message Block.
10 */
11typedef struct _PMU_SMB_DDR3U_1D_t {
12 uint8_t Reserved00; // Byte offset 0x00, CSR Addr 0x54000, Direction=In
13 // Reserved00[0:4] RFU, must be zero
14 //
15 // Reserved00[5] = Train vrefDAC0 During Read Deskew
16 // 0x1 = Read Deskew will begin by enabling and roughly training the phy’s per-lane reference voltages. Training the vrefDACs CSRs will increase the maximum 1D training time by around half a millisecond, but will improve 1D training accuracy on systems with significant voltage-offsets between lane read eyes.
17 // 0X0 = Read Deskew will assume the messageblock’s phyVref setting will work for all lanes.
18 //
19 // Reserved00[6] = Enable High Effort WrDQ1D
20 // 0x1 = WrDQ1D will conditionally retry training at several extra RxClkDly Timings. This will increase the maximum 1D training time by up to 4 extra iterations of WrDQ1D. This is only required in systems that suffer from very large, asymmetric eye-collapse when receiving PRBS patterns.
21 // 0x0 = WrDQ1D assume rxClkDly values found by SI Friendly RdDqs1D will work for receiving PRBS patterns
22 //
23 // Reserved00[7] = Optimize for the special hard macros in TSMC28.
24 // 0x1 = set if the phy being trained was manufactured in any TSMC28 process node.
25 // 0x0 = otherwise, when not training a TSMC28 phy, leave this field as 0.
26 uint8_t MsgMisc; // Byte offset 0x01, CSR Addr 0x54000, Direction=In
27 // Contains various global options for training.
28 //
29 // Bit fields:
30 //
31 // MsgMisc[0] = MTESTEnable
32 // 0x1 = Pulse primary digital test output bump at the end of each major training stage. This enables observation of training stage completion by observing the digital test output.
33 // 0x0 = Do not pulse primary digital test output bump
34 //
35 // MsgMisc[1] = SimulationOnlyReset
36 // 0x1 = Verilog only simulation option to shorten duration of DRAM reset pulse length to 1ns.
37 // Must never be set to 1 in silicon.
38 // 0x0 = Use reset pulse length specifed by JEDEC standard
39 //
40 // MsgMisc[2] = SimulationOnlyTraining
41 // 0x1 = Verilog only simulation option to shorten the duration of the training steps by performing fewer iterations.
42 // Must never be set to 1 in silicon.
43 // 0x0 = Use standard training duration.
44 //
45 // MsgMisc[3] = RFU, must be zero (DDR4 UDIMM and RDIMM only, otherwise RFU, must be zero)
46 //
47 //
48 //
49 // MsgMisc[4] = Suppress streaming messages, including assertions, regardless of HdtCtrl setting.
50 // Stage Completion messages, as well as training completion and error messages are
51 // Still sent depending on HdtCtrl setting.
52 //
53 // MsgMisc[5] = PerByteMaxRdLat
54 // 0x1 = Each DBYTE will return dfi_rddata_valid at the lowest possible latency. This may result in unaligned data between bytes to be returned to the DFI.
55 // 0x0 = Every DBYTE will return dfi_rddata_valid simultaneously. This will ensure that data bytes will return aligned accesses to the DFI.
56 //
57 // MsgMisc[6] = PartialRank (DDR3 UDIMM and DDR4 UDIMM only, otherwise RFU, must be zero)
58 // 0x1 = Support rank populated with a subset of byte, but where even-odd pair of rank support all the byte
59 // 0x0 = All rank populated with all the byte (tyical configuration)
60 //
61 // MsgMisc[7] RFU, must be zero
62 //
63 // Notes:
64 //
65 // - SimulationOnlyReset and SimulationOnlyTraining can be used to speed up simulation run times, and must never be used in real silicon. Some VIPs may have checks on DRAM reset parameters that may need to be disabled when using SimulationOnlyReset.
66 uint16_t PmuRevision; // Byte offset 0x02, CSR Addr 0x54001, Direction=Out
67 // PMU firmware revision ID
68 // After training is run, this address will contain the revision ID of the firmware.
69 // Please reference this revision ID when filing support cases with Synopsys.
70 uint8_t Pstate; // Byte offset 0x04, CSR Addr 0x54002, Direction=In
71 // Must be set to the target Pstate to be trained
72 // 0x0 = Pstate 0
73 // 0x1 = Pstate 1
74 // 0x2 = Pstate 2
75 // 0x3 = Pstate 3
76 // All other encodings are reserved
77 uint8_t PllBypassEn; // Byte offset 0x05, CSR Addr 0x54002, Direction=In
78 // Set according to whether target Pstate uses PHY PLL bypass
79 // 0x0 = PHY PLL is enabled for target Pstate
80 // 0x1 = PHY PLL is bypassed for target Pstate
81 uint16_t DRAMFreq; // Byte offset 0x06, CSR Addr 0x54003, Direction=In
82 // DDR data rate for the target Pstate in units of MT/s.
83 // For example enter 0x0640 for DDR1600.
84 uint8_t DfiFreqRatio; // Byte offset 0x08, CSR Addr 0x54004, Direction=In
85 // Frequency ratio betwen DfiCtlClk and SDRAM memclk.
86 // 0x1 = 1:1
87 // 0x2 = 1:2
88 // 0x4 = 1:4
89 uint8_t BPZNResVal ; // Byte offset 0x09, CSR Addr 0x54004, Direction=In
90 // Must be programmed to match the precision resistor connected to Phy BP_ZN
91 // 0x00 = Do not program. Use current CSR value.
92 // 0xf0 = 240 Ohm (recommended value)
93 // 0x78 = 120 Ohm
94 // 0x28 = 40 Ohm
95 // All other values are reserved.
96 //
97 uint8_t PhyOdtImpedance; // Byte offset 0x0a, CSR Addr 0x54005, Direction=In
98 // Must be programmed to the termination impedance in ohms used by PHY during reads.
99 //
100 // 0x0 = Firmware skips programming (must be manually programmed by user prior to training start)
101 //
102 // See PHY databook for legal termination impedance values.
103 //
104 // For digital simulation, any legal value can be used. For silicon, the users must determine the correct value through SI simulation or other methods.
105 uint8_t PhyDrvImpedance; // Byte offset 0x0b, CSR Addr 0x54005, Direction=In
106 // Must be programmed to the driver impedance in ohms used by PHY during writes for all DBYTE drivers (DQ/DM/DBI/DQS).
107 //
108 // 0x0 = Firmware skips programming (must be manually programmed by user prior to training start)
109 //
110 // See PHY databook for legal R_on driver impedance values.
111 //
112 // For digital simulation, any value can be used that is not Hi-Z. For silicon, the users must determine the correct value through SI simulation or other methods.
113 uint8_t PhyVref; // Byte offset 0x0c, CSR Addr 0x54006, Direction=In
114 // Must be programmed with the Vref level to be used by the PHY during reads
115 //
116 // The units of this field are a percentage of VDDQ according to the following equation:
117 //
118 // Receiver Vref = VDDQ*PhyVref[6:0]/128
119 //
120 // For example to set Vref at 0.75*VDDQ, set this field to 0x60.
121 //
122 // For digital simulation, any legal value can be used. For silicon, the users must calculate the analytical Vref by using the impedances, terminations, and series resistance present in the system.
123 uint8_t DramType; // Byte offset 0x0d, CSR Addr 0x54006, Direction=In
124 // Module Type:
125 // 0x01 = DDR3 unbuffered
126 // 0x02 = Reserved
127 // 0x03 = Reserved
128 // 0x04 = Reserved
129 // 0x05 = Reserved
130 //
131 uint8_t DisabledDbyte; // Byte offset 0x0e, CSR Addr 0x54007, Direction=In
132 // Bitmap to indicate which Dbyte are not connected (for DByte 0 to 7):
133 // Set DisabledDbyte[i] to 1 only to specify that DByte i not need to be trained (DByte 8 can be disabled via EnabledDQs setting)
134 uint8_t EnabledDQs; // Byte offset 0x0f, CSR Addr 0x54007, Direction=In
135 // Total number of DQ bits enabled in PHY
136 uint8_t CsPresent; // Byte offset 0x10, CSR Addr 0x54008, Direction=In
137 // Indicates presence of DRAM at each chip select for PHY. Each bit corresponds to a logical CS.
138 //
139 // If the bit is set to 1, the CS is connected to DRAM.
140 // If the bit is set to 0, the CS is not connected to DRAM.
141 //
142 // CsPresent[0] = CS0 is populated with DRAM
143 // CsPresent[1] = CS1 is populated with DRAM
144 // CsPresent[2] = CS2 is populated with DRAM
145 // CsPresent[3] = CS3 is populated with DRAM
146 // CsPresent[7:4] = Reserved (must be programmed to 0)
147 //
148 //
149 uint8_t CsPresentD0; // Byte offset 0x11, CSR Addr 0x54008, Direction=In
150 // The CS signals from field CsPresent that are routed to DIMM connector 0
151 uint8_t CsPresentD1; // Byte offset 0x12, CSR Addr 0x54009, Direction=In
152 // The CS signals from field CsPresent that are routed to DIMM connector 1
153 uint8_t AddrMirror; // Byte offset 0x13, CSR Addr 0x54009, Direction=In
154 // Corresponds to CS[3:0]
155 // 1 = Address Mirror.
156 // 0 = No Address Mirror.
157 uint8_t CsTestFail; // Byte offset 0x14, CSR Addr 0x5400a, Direction=Out
158 // This field will be set if training fails on any rank.
159 // 0x0 = No failures
160 // non-zero = one or more ranks failed training
161 uint8_t PhyCfg; // Byte offset 0x15, CSR Addr 0x5400a, Direction=In
162 // Additional mode bits.
163 //
164 // Bit fields:
165 // [0] SlowAccessMode :
166 // 1 = 2T Address Timing.
167 // 0 = 1T Address Timing.
168 // [7-1] RFU, must be zero
169 uint16_t SequenceCtrl; // Byte offset 0x16, CSR Addr 0x5400b, Direction=In
170 // Controls the training steps to be run. Each bit corresponds to a training step.
171 //
172 // If the bit is set to 1, the training step will run.
173 // If the bit is set to 0, the training step will be skipped.
174 //
175 // Training step to bit mapping:
176 // SequenceCtrl[0] = Run DevInit - Device/phy initialization. Should always be set.
177 // SequenceCtrl[1] = Run WrLvl - Write leveling
178 // SequenceCtrl[2] = Run RxEn - Read gate training
179 // SequenceCtrl[3] = Run RdDQS1D - 1d read dqs training
180 // SequenceCtrl[4] = Run WrDQ1D - 1d write dq training
181 // SequenceCtrl[5] = RFU, must be zero
182 // SequenceCtrl[6] = RFU, must be zero
183 // SequenceCtrl[7] = RFU, must be zero
184 // SequenceCtrl[8] = Run RdDeskew - Per lane read dq deskew training
185 // SequenceCtrl[9] = Run MxRdLat - Max read latency training
186 // SequenceCtrl[10] = RFU, must be zero
187 // SequenceCtrl[11] = RFU, must be zero
188 // SequenceCtrl[12] = RFU, must be zero
189 // SequenceCtrl[13] = RFU, must be zero
190 // SequenceCtrl[15-14] = RFU, must be zero
191 uint8_t HdtCtrl; // Byte offset 0x18, CSR Addr 0x5400c, Direction=In
192 // To control the total number of debug messages, a verbosity subfield (HdtCtrl, Hardware Debug Trace Control) exists in the message block. Every message has a verbosity level associated with it, and as the HdtCtrl value is increased, less important s messages stop being sent through the mailboxes. The meanings of several major HdtCtrl thresholds are explained below:
193 //
194 // 0x05 = Detailed debug messages (e.g. Eye delays)
195 // 0x0A = Coarse debug messages (e.g. rank information)
196 // 0xC8 = Stage completion
197 // 0xC9 = Assertion messages
198 // 0xFF = Firmware completion messages only
199 //
200 // See Training App Note for more detailed information on what messages are included for each threshold.
201 //
202 uint8_t Reserved19; // Byte offset 0x19, CSR Addr 0x5400c, Direction=N/A
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219 uint8_t Reserved1A; // Byte offset 0x1a, CSR Addr 0x5400d, Direction=N/A
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239 uint8_t Reserved1B; // Byte offset 0x1b, CSR Addr 0x5400d, Direction=N/A
240
241
242
243 uint8_t Reserved1C; // Byte offset 0x1c, CSR Addr 0x5400e, Direction=N/A
244
245 uint8_t Reserved1D; // Byte offset 0x1d, CSR Addr 0x5400e, Direction=N/A
246
247 uint8_t Reserved1E; // Byte offset 0x1e, CSR Addr 0x5400f, Direction=In
248 // Input for constraining the range of vref(DQ) values training will collect data for, usually reducing training time. However, too large of a voltage range may cause longer 2D training times while too small of a voltage range may truncate passing regions. When in doubt, leave this field set to 0.
249 // Used by 2D training in: Rd2D, Wr2D
250 //
251 // Reserved1E[0-3]: Rd2D Voltage Range
252 // 0 = Training will search all phy vref(DQ) settings
253 // 1 = limit to +/-2 %VDDQ from phyVref
254 // 2 = limit to +/-4 %VDDQ from phyVref
255 // …
256 // 15 = limit to +/-30% VDDQ from phyVref
257 //
258 // Reserved1E[4-7]: Wr2D Voltage Range
259 // 0 = Training will search all dram vref(DQ) settings
260 // 1 = limit to +/-2 %VDDQ from MR6
261 // 2 = limit to +/-4 %VDDQ from MR6
262 // …
263 // 15 = limit to +/-30% VDDQ from MR6
264 uint8_t Reserved1F; // Byte offset 0x1f, CSR Addr 0x5400f, Direction=N/A
265 // This field is reserved and must be programmed to 0x00.
266 uint8_t Reserved20; // Byte offset 0x20, CSR Addr 0x54010, Direction=N/A
267 // This field is reserved and must be programmed to 0x00.
268 uint8_t Reserved21; // Byte offset 0x21, CSR Addr 0x54010, Direction=N/A
269 // This field is reserved and must be programmed to 0x00.
270 uint16_t PhyConfigOverride; // Byte offset 0x22, CSR Addr 0x54011, Direction=In
271 // Override PhyConfig csr.
272 // 0x0: Use hardware csr value for PhyConfing (recommended)
273 // Other values: Use value for PhyConfig instead of Hardware value.
274 //
275 uint8_t DFIMRLMargin; // Byte offset 0x24, CSR Addr 0x54012, Direction=In
276 // Margin added to smallest passing trained DFI Max Read Latency value, in units of DFI clocks. Recommended to be >= 1. See the Training App Note for more details on the training process and the use of this value.
277 int8_t CDD_RR_3_2; // Byte offset 0x25, CSR Addr 0x54012, Direction=Out
278 // This is a signed integer value.
279 // Read to read critical delay difference from cs 3 to cs 2
280 // See PUB Databook section 8.2 for details on use of CDD values.
281 int8_t CDD_RR_3_1; // Byte offset 0x26, CSR Addr 0x54013, Direction=Out
282 // This is a signed integer value.
283 // Read to read critical delay difference from cs 3 to cs 1
284 // See PUB Databook section 8.2 for details on use of CDD values.
285 int8_t CDD_RR_3_0; // Byte offset 0x27, CSR Addr 0x54013, Direction=Out
286 // This is a signed integer value.
287 // Read to read critical delay difference from cs 3 to cs 0
288 // See PUB Databook section 8.2 for details on use of CDD values.
289 int8_t CDD_RR_2_3; // Byte offset 0x28, CSR Addr 0x54014, Direction=Out
290 // This is a signed integer value.
291 // Read to read critical delay difference from cs 2 to cs 3
292 // See PUB Databook section 8.2 for details on use of CDD values.
293 int8_t CDD_RR_2_1; // Byte offset 0x29, CSR Addr 0x54014, Direction=Out
294 // This is a signed integer value.
295 // Read to read critical delay difference from cs 2 to cs 1
296 // See PUB Databook section 8.2 for details on use of CDD values.
297 int8_t CDD_RR_2_0; // Byte offset 0x2a, CSR Addr 0x54015, Direction=Out
298 // This is a signed integer value.
299 // Read to read critical delay difference from cs 2 to cs 0
300 // See PUB Databook section 8.2 for details on use of CDD values.
301 int8_t CDD_RR_1_3; // Byte offset 0x2b, CSR Addr 0x54015, Direction=Out
302 // This is a signed integer value.
303 // Read to read critical delay difference from cs 1 to cs 3
304 // See PUB Databook section 8.2 for details on use of CDD values.
305 int8_t CDD_RR_1_2; // Byte offset 0x2c, CSR Addr 0x54016, Direction=Out
306 // This is a signed integer value.
307 // Read to read critical delay difference from cs 1 to cs 2
308 // See PUB Databook section 8.2 for details on use of CDD values.
309 int8_t CDD_RR_1_0; // Byte offset 0x2d, CSR Addr 0x54016, Direction=Out
310 // This is a signed integer value.
311 // Read to read critical delay difference from cs 1 to cs 0
312 // See PUB Databook section 8.2 for details on use of CDD values.
313 int8_t CDD_RR_0_3; // Byte offset 0x2e, CSR Addr 0x54017, Direction=Out
314 // This is a signed integer value.
315 // Read to read critical delay difference from cs 0 to cs 3
316 // See PUB Databook section 8.2 for details on use of CDD values.
317 int8_t CDD_RR_0_2; // Byte offset 0x2f, CSR Addr 0x54017, Direction=Out
318 // This is a signed integer value.
319 // Read to read critical delay difference from cs 0 to cs 2
320 // See PUB Databook section 8.2 for details on use of CDD values.
321 int8_t CDD_RR_0_1; // Byte offset 0x30, CSR Addr 0x54018, Direction=Out
322 // This is a signed integer value.
323 // Read to read critical delay difference from cs 0 to cs 1
324 // See PUB Databook section 8.2 for details on use of CDD values.
325 int8_t CDD_WW_3_2; // Byte offset 0x31, CSR Addr 0x54018, Direction=Out
326 // This is a signed integer value.
327 // Write to write critical delay difference from cs 3 to cs 2
328 // See PUB Databook section 8.2 for details on use of CDD values.
329 int8_t CDD_WW_3_1; // Byte offset 0x32, CSR Addr 0x54019, Direction=Out
330 // This is a signed integer value.
331 // Write to write critical delay difference from cs 3 to cs 1
332 // See PUB Databook section 8.2 for details on use of CDD values.
333 int8_t CDD_WW_3_0; // Byte offset 0x33, CSR Addr 0x54019, Direction=Out
334 // This is a signed integer value.
335 // Write to write critical delay difference from cs 3 to cs 0
336 // See PUB Databook section 8.2 for details on use of CDD values.
337 int8_t CDD_WW_2_3; // Byte offset 0x34, CSR Addr 0x5401a, Direction=Out
338 // This is a signed integer value.
339 // Write to write critical delay difference from cs 2 to cs 3
340 // See PUB Databook section 8.2 for details on use of CDD values.
341 int8_t CDD_WW_2_1; // Byte offset 0x35, CSR Addr 0x5401a, Direction=Out
342 // This is a signed integer value.
343 // Write to write critical delay difference from cs 2 to cs 1
344 // See PUB Databook section 8.2 for details on use of CDD values.
345 int8_t CDD_WW_2_0; // Byte offset 0x36, CSR Addr 0x5401b, Direction=Out
346 // This is a signed integer value.
347 // Write to write critical delay difference from cs 2 to cs 0
348 // See PUB Databook section 8.2 for details on use of CDD values.
349 int8_t CDD_WW_1_3; // Byte offset 0x37, CSR Addr 0x5401b, Direction=Out
350 // This is a signed integer value.
351 // Write to write critical delay difference from cs 1 to cs 3
352 // See PUB Databook section 8.2 for details on use of CDD values.
353 int8_t CDD_WW_1_2; // Byte offset 0x38, CSR Addr 0x5401c, Direction=Out
354 // This is a signed integer value.
355 // Write to write critical delay difference from cs 1 to cs 2
356 // See PUB Databook section 8.2 for details on use of CDD values.
357 int8_t CDD_WW_1_0; // Byte offset 0x39, CSR Addr 0x5401c, Direction=Out
358 // This is a signed integer value.
359 // Write to write critical delay difference from cs 1 to cs 0
360 // See PUB Databook section 8.2 for details on use of CDD values.
361 int8_t CDD_WW_0_3; // Byte offset 0x3a, CSR Addr 0x5401d, Direction=Out
362 // This is a signed integer value.
363 // Write to write critical delay difference from cs 0 to cs 3
364 // See PUB Databook section 8.2 for details on use of CDD values.
365 int8_t CDD_WW_0_2; // Byte offset 0x3b, CSR Addr 0x5401d, Direction=Out
366 // This is a signed integer value.
367 // Write to write critical delay difference from cs 0 to cs 2
368 // See PUB Databook section 8.2 for details on use of CDD values.
369 int8_t CDD_WW_0_1; // Byte offset 0x3c, CSR Addr 0x5401e, Direction=Out
370 // This is a signed integer value.
371 // Write to write critical delay difference from cs 0 to cs 1
372 // See PUB Databook section 8.2 for details on use of CDD values.
373 int8_t CDD_RW_3_3; // Byte offset 0x3d, CSR Addr 0x5401e, Direction=Out
374 // This is a signed integer value.
375 // Read to write critical delay difference from cs 3 to cs 3
376 // See PUB Databook section 8.2 for details on use of CDD values.
377 int8_t CDD_RW_3_2; // Byte offset 0x3e, CSR Addr 0x5401f, Direction=Out
378 // This is a signed integer value.
379 // Read to write critical delay difference from cs 3 to cs 2
380 // See PUB Databook section 8.2 for details on use of CDD values.
381 int8_t CDD_RW_3_1; // Byte offset 0x3f, CSR Addr 0x5401f, Direction=Out
382 // This is a signed integer value.
383 // Read to write critical delay difference from cs 3 to cs 1
384 // See PUB Databook section 8.2 for details on use of CDD values.
385 int8_t CDD_RW_3_0; // Byte offset 0x40, CSR Addr 0x54020, Direction=Out
386 // This is a signed integer value.
387 // Read to write critical delay difference from cs 3 to cs 0
388 // See PUB Databook section 8.2 for details on use of CDD values.
389 int8_t CDD_RW_2_3; // Byte offset 0x41, CSR Addr 0x54020, Direction=Out
390 // This is a signed integer value.
391 // Read to write critical delay difference from cs 2 to cs 3
392 // See PUB Databook section 8.2 for details on use of CDD values.
393 int8_t CDD_RW_2_2; // Byte offset 0x42, CSR Addr 0x54021, Direction=Out
394 // This is a signed integer value.
395 // Read to write critical delay difference from cs 2 to cs 2
396 // See PUB Databook section 8.2 for details on use of CDD values.
397 int8_t CDD_RW_2_1; // Byte offset 0x43, CSR Addr 0x54021, Direction=Out
398 // This is a signed integer value.
399 // Read to write critical delay difference from cs 2 to cs 1
400 // See PUB Databook section 8.2 for details on use of CDD values.
401 int8_t CDD_RW_2_0; // Byte offset 0x44, CSR Addr 0x54022, Direction=Out
402 // This is a signed integer value.
403 // Read to write critical delay difference from cs 2 to cs 0
404 // See PUB Databook section 8.2 for details on use of CDD values.
405 int8_t CDD_RW_1_3; // Byte offset 0x45, CSR Addr 0x54022, Direction=Out
406 // This is a signed integer value.
407 // Read to write critical delay difference from cs 1 to cs 3
408 // See PUB Databook section 8.2 for details on use of CDD values.
409 int8_t CDD_RW_1_2; // Byte offset 0x46, CSR Addr 0x54023, Direction=Out
410 // This is a signed integer value.
411 // Read to write critical delay difference from cs 1 to cs 2
412 // See PUB Databook section 8.2 for details on use of CDD values.
413 int8_t CDD_RW_1_1; // Byte offset 0x47, CSR Addr 0x54023, Direction=Out
414 // This is a signed integer value.
415 // Read to write critical delay difference from cs 1 to cs 1
416 // See PUB Databook section 8.2 for details on use of CDD values.
417 int8_t CDD_RW_1_0; // Byte offset 0x48, CSR Addr 0x54024, Direction=Out
418 // This is a signed integer value.
419 // Read to write critical delay difference from cs 1 to cs 0
420 // See PUB Databook section 8.2 for details on use of CDD values.
421 int8_t CDD_RW_0_3; // Byte offset 0x49, CSR Addr 0x54024, Direction=Out
422 // This is a signed integer value.
423 // Read to write critical delay difference from cs 0 to cs 3
424 // See PUB Databook section 8.2 for details on use of CDD values.
425 int8_t CDD_RW_0_2; // Byte offset 0x4a, CSR Addr 0x54025, Direction=Out
426 // This is a signed integer value.
427 // Read to write critical delay difference from cs 0 to cs 2
428 // See PUB Databook section 8.2 for details on use of CDD values.
429 int8_t CDD_RW_0_1; // Byte offset 0x4b, CSR Addr 0x54025, Direction=Out
430 // This is a signed integer value.
431 // Read to write critical delay difference from cs 0 to cs 1
432 // See PUB Databook section 8.2 for details on use of CDD values.
433 int8_t CDD_RW_0_0; // Byte offset 0x4c, CSR Addr 0x54026, Direction=Out
434 // This is a signed integer value.
435 // Read to write critical delay difference from cs 0 to cs 0
436 // See PUB Databook section 8.2 for details on use of CDD values.
437 int8_t CDD_WR_3_3; // Byte offset 0x4d, CSR Addr 0x54026, Direction=Out
438 // This is a signed integer value.
439 // Write to read critical delay difference from cs 3 to cs 3
440 // See PUB Databook section 8.2 for details on use of CDD values.
441 int8_t CDD_WR_3_2; // Byte offset 0x4e, CSR Addr 0x54027, Direction=Out
442 // This is a signed integer value.
443 // Write to read critical delay difference from cs 3 to cs 2
444 // See PUB Databook section 8.2 for details on use of CDD values.
445 int8_t CDD_WR_3_1; // Byte offset 0x4f, CSR Addr 0x54027, Direction=Out
446 // This is a signed integer value.
447 // Write to read critical delay difference from cs 3 to cs 1
448 // See PUB Databook section 8.2 for details on use of CDD values.
449 int8_t CDD_WR_3_0; // Byte offset 0x50, CSR Addr 0x54028, Direction=Out
450 // This is a signed integer value.
451 // Write to read critical delay difference from cs 3 to cs 0
452 // See PUB Databook section 8.2 for details on use of CDD values.
453 int8_t CDD_WR_2_3; // Byte offset 0x51, CSR Addr 0x54028, Direction=Out
454 // This is a signed integer value.
455 // Write to read critical delay difference from cs 2 to cs 3
456 // See PUB Databook section 8.2 for details on use of CDD values.
457 int8_t CDD_WR_2_2; // Byte offset 0x52, CSR Addr 0x54029, Direction=Out
458 // This is a signed integer value.
459 // Write to read critical delay difference from cs 2 to cs 2
460 // See PUB Databook section 8.2 for details on use of CDD values.
461 int8_t CDD_WR_2_1; // Byte offset 0x53, CSR Addr 0x54029, Direction=Out
462 // This is a signed integer value.
463 // Write to read critical delay difference from cs 2 to cs 1
464 // See PUB Databook section 8.2 for details on use of CDD values.
465 int8_t CDD_WR_2_0; // Byte offset 0x54, CSR Addr 0x5402a, Direction=Out
466 // This is a signed integer value.
467 // Write to read critical delay difference from cs 2 to cs 0
468 // See PUB Databook section 8.2 for details on use of CDD values.
469 int8_t CDD_WR_1_3; // Byte offset 0x55, CSR Addr 0x5402a, Direction=Out
470 // This is a signed integer value.
471 // Write to read critical delay difference from cs 1 to cs 3
472 // See PUB Databook section 8.2 for details on use of CDD values.
473 int8_t CDD_WR_1_2; // Byte offset 0x56, CSR Addr 0x5402b, Direction=Out
474 // This is a signed integer value.
475 // Write to read critical delay difference from cs 1 to cs 2
476 // See PUB Databook section 8.2 for details on use of CDD values.
477 int8_t CDD_WR_1_1; // Byte offset 0x57, CSR Addr 0x5402b, Direction=Out
478 // This is a signed integer value.
479 // Write to read critical delay difference from cs 1 to cs 1
480 // See PUB Databook section 8.2 for details on use of CDD values.
481 int8_t CDD_WR_1_0; // Byte offset 0x58, CSR Addr 0x5402c, Direction=Out
482 // This is a signed integer value.
483 // Write to read critical delay difference from cs 1 to cs 0
484 // See PUB Databook section 8.2 for details on use of CDD values.
485 int8_t CDD_WR_0_3; // Byte offset 0x59, CSR Addr 0x5402c, Direction=Out
486 // This is a signed integer value.
487 // Write to read critical delay difference from cs 0 to cs 3
488 // See PUB Databook section 8.2 for details on use of CDD values.
489 int8_t CDD_WR_0_2; // Byte offset 0x5a, CSR Addr 0x5402d, Direction=Out
490 // This is a signed integer value.
491 // Write to read critical delay difference from cs 0 to cs 2
492 // See PUB Databook section 8.2 for details on use of CDD values.
493 int8_t CDD_WR_0_1; // Byte offset 0x5b, CSR Addr 0x5402d, Direction=Out
494 // This is a signed integer value.
495 // Write to read critical delay difference from cs 0 to cs 1
496 // See PUB Databook section 8.2 for details on use of CDD values.
497 int8_t CDD_WR_0_0; // Byte offset 0x5c, CSR Addr 0x5402e, Direction=Out
498 // This is a signed integer value.
499 // Write to read critical delay difference from cs 0 to cs 0
500 // See PUB Databook section 8.2 for details on use of CDD values.
501 uint8_t Reserved5D; // Byte offset 0x5d, CSR Addr 0x5402e, Direction=N/A
502 // This field is ignored if 0. If larger than 0, this value is used as is as the offset in fine-step applied at the end of DDR4 RxEnable training, instead of the default offset.
503 uint16_t MR0; // Byte offset 0x5e, CSR Addr 0x5402f, Direction=In
504 // Value of DDR mode register MR0 for all ranks for current pstate
505 uint16_t MR1; // Byte offset 0x60, CSR Addr 0x54030, Direction=In
506 // Value of DDR mode register MR1 for all ranks for current pstate
507 uint16_t MR2; // Byte offset 0x62, CSR Addr 0x54031, Direction=In
508 // Value of DDR mode register MR2 for all ranks for current pstate
509 uint8_t Reserved64; // Byte offset 0x64, CSR Addr 0x54032, Direction=N/A
510 // This field is reserved and must be programmed to 0x00.
511 uint8_t Reserved65; // Byte offset 0x65, CSR Addr 0x54032, Direction=N/A
512 // This field is reserved and must be programmed to 0x00.
513 uint8_t Reserved66; // Byte offset 0x66, CSR Addr 0x54033, Direction=N/A
514 // This field is reserved and must be programmed to 0x00.
515 uint8_t Reserved67; // Byte offset 0x67, CSR Addr 0x54033, Direction=N/A
516 // This field is reserved and must be programmed to 0x00.
517 uint8_t Reserved68; // Byte offset 0x68, CSR Addr 0x54034, Direction=N/A
518 // This field is reserved and must be programmed to 0x00.
519 uint8_t Reserved69; // Byte offset 0x69, CSR Addr 0x54034, Direction=N/A
520 // This field is reserved and must be programmed to 0x00.
521 uint8_t Reserved6A; // Byte offset 0x6a, CSR Addr 0x54035, Direction=N/A
522 // This field is reserved and must be programmed to 0x00.
523 uint8_t Reserved6B; // Byte offset 0x6b, CSR Addr 0x54035, Direction=N/A
524 // This field is reserved and must be programmed to 0x00.
525 uint8_t Reserved6C; // Byte offset 0x6c, CSR Addr 0x54036, Direction=N/A
526 // This field is reserved and must be programmed to 0x00.
527 uint8_t Reserved6D; // Byte offset 0x6d, CSR Addr 0x54036, Direction=N/A
528 // This field is reserved and must be programmed to 0x00.
529 uint8_t Reserved6E; // Byte offset 0x6e, CSR Addr 0x54037, Direction=N/A
530 // This field is reserved and must be programmed to 0x00.
531 uint8_t Reserved6F; // Byte offset 0x6f, CSR Addr 0x54037, Direction=N/A
532 // This field is reserved and must be programmed to 0x00.
533 uint8_t Reserved70; // Byte offset 0x70, CSR Addr 0x54038, Direction=N/A
534 // This field is reserved and must be programmed to 0x00.
535 uint8_t Reserved71; // Byte offset 0x71, CSR Addr 0x54038, Direction=N/A
536 // This field is reserved and must be programmed to 0x00.
537 uint8_t Reserved72; // Byte offset 0x72, CSR Addr 0x54039, Direction=N/A
538 // This field is reserved and must be programmed to 0x00.
539 uint8_t Reserved73; // Byte offset 0x73, CSR Addr 0x54039, Direction=N/A
540 // This field is reserved and must be programmed to 0x00.
541 uint8_t AcsmOdtCtrl0; // Byte offset 0x74, CSR Addr 0x5403a, Direction=In
542 // Odt pattern for accesses targeting rank 0. [3:0] is used for write ODT [7:4] is used for read ODT
543 uint8_t AcsmOdtCtrl1; // Byte offset 0x75, CSR Addr 0x5403a, Direction=In
544 // Odt pattern for accesses targeting rank 1. [3:0] is used for write ODT [7:4] is used for read ODT
545 uint8_t AcsmOdtCtrl2; // Byte offset 0x76, CSR Addr 0x5403b, Direction=In
546 // Odt pattern for accesses targeting rank 2. [3:0] is used for write ODT [7:4] is used for read ODT
547 uint8_t AcsmOdtCtrl3; // Byte offset 0x77, CSR Addr 0x5403b, Direction=In
548 // Odt pattern for accesses targeting rank 3. [3:0] is used for write ODT [7:4] is used for read ODT
549 uint8_t AcsmOdtCtrl4; // Byte offset 0x78, CSR Addr 0x5403c, Direction=In
550 // This field is reserved and must be programmed to 0x00.
551 uint8_t AcsmOdtCtrl5; // Byte offset 0x79, CSR Addr 0x5403c, Direction=In
552 // This field is reserved and must be programmed to 0x00.
553 uint8_t AcsmOdtCtrl6; // Byte offset 0x7a, CSR Addr 0x5403d, Direction=In
554 // This field is reserved and must be programmed to 0x00.
555 uint8_t AcsmOdtCtrl7; // Byte offset 0x7b, CSR Addr 0x5403d, Direction=In
556 // This field is reserved and must be programmed to 0x00.
557 uint8_t Reserved7C; // Byte offset 0x7c, CSR Addr 0x5403e, Direction=N/A
558 // This field is reserved and must be programmed to 0x00.
559 uint8_t Reserved7D; // Byte offset 0x7d, CSR Addr 0x5403e, Direction=N/A
560 // This field is reserved and must be programmed to 0x00.
561 uint8_t Reserved7E; // Byte offset 0x7e, CSR Addr 0x5403f, Direction=N/A
562 // This field is reserved and must be programmed to 0x00.
563 uint8_t Reserved7F; // Byte offset 0x7f, CSR Addr 0x5403f, Direction=N/A
564 // This field is reserved and must be programmed to 0x00.
565 uint8_t Reserved80; // Byte offset 0x80, CSR Addr 0x54040, Direction=N/A
566 // This field is reserved and must be programmed to 0x00.
567 uint8_t Reserved81; // Byte offset 0x81, CSR Addr 0x54040, Direction=N/A
568 // This field is reserved and must be programmed to 0x00.
569 uint8_t Reserved82; // Byte offset 0x82, CSR Addr 0x54041, Direction=N/A
570 // This field is reserved and must be programmed to 0x00.
571 uint8_t Reserved83; // Byte offset 0x83, CSR Addr 0x54041, Direction=N/A
572 // This field is reserved and must be programmed to 0x00.
573 uint8_t Reserved84; // Byte offset 0x84, CSR Addr 0x54042, Direction=N/A
574
575 uint8_t Reserved85; // Byte offset 0x85, CSR Addr 0x54042, Direction=N/A
576
577 uint8_t Reserved86; // Byte offset 0x86, CSR Addr 0x54043, Direction=N/A
578
579 uint8_t Reserved87; // Byte offset 0x87, CSR Addr 0x54043, Direction=N/A
580
581 uint8_t Reserved88; // Byte offset 0x88, CSR Addr 0x54044, Direction=N/A
582
583 uint8_t Reserved89; // Byte offset 0x89, CSR Addr 0x54044, Direction=N/A
584
585 uint8_t Reserved8A; // Byte offset 0x8a, CSR Addr 0x54045, Direction=N/A
586
587 uint8_t Reserved8B; // Byte offset 0x8b, CSR Addr 0x54045, Direction=N/A
588
589 uint8_t Reserved8C; // Byte offset 0x8c, CSR Addr 0x54046, Direction=N/A
590
591 uint8_t Reserved8D; // Byte offset 0x8d, CSR Addr 0x54046, Direction=N/A
592
593 uint8_t Reserved8E; // Byte offset 0x8e, CSR Addr 0x54047, Direction=N/A
594
595 uint8_t Reserved8F; // Byte offset 0x8f, CSR Addr 0x54047, Direction=N/A
596
597 uint8_t Reserved90; // Byte offset 0x90, CSR Addr 0x54048, Direction=N/A
598
599 uint8_t Reserved91; // Byte offset 0x91, CSR Addr 0x54048, Direction=N/A
600
601 uint8_t Reserved92; // Byte offset 0x92, CSR Addr 0x54049, Direction=N/A
602
603 uint8_t Reserved93; // Byte offset 0x93, CSR Addr 0x54049, Direction=N/A
604
605 uint8_t Reserved94; // Byte offset 0x94, CSR Addr 0x5404a, Direction=N/A
606
607 uint8_t Reserved95; // Byte offset 0x95, CSR Addr 0x5404a, Direction=N/A
608
609 uint8_t Reserved96; // Byte offset 0x96, CSR Addr 0x5404b, Direction=N/A
610
611 uint8_t Reserved97; // Byte offset 0x97, CSR Addr 0x5404b, Direction=N/A
612
613 uint8_t Reserved98; // Byte offset 0x98, CSR Addr 0x5404c, Direction=N/A
614
615 uint8_t Reserved99; // Byte offset 0x99, CSR Addr 0x5404c, Direction=N/A
616
617 uint8_t Reserved9A; // Byte offset 0x9a, CSR Addr 0x5404d, Direction=N/A
618
619 uint8_t Reserved9B; // Byte offset 0x9b, CSR Addr 0x5404d, Direction=N/A
620
621 uint8_t Reserved9C; // Byte offset 0x9c, CSR Addr 0x5404e, Direction=N/A
622
623 uint8_t Reserved9D; // Byte offset 0x9d, CSR Addr 0x5404e, Direction=N/A
624
625 uint8_t Reserved9E; // Byte offset 0x9e, CSR Addr 0x5404f, Direction=N/A
626
627 uint8_t Reserved9F; // Byte offset 0x9f, CSR Addr 0x5404f, Direction=N/A
628
629 uint8_t ReservedA0; // Byte offset 0xa0, CSR Addr 0x54050, Direction=N/A
630
631 uint8_t ReservedA1; // Byte offset 0xa1, CSR Addr 0x54050, Direction=N/A
632
633 uint8_t ReservedA2; // Byte offset 0xa2, CSR Addr 0x54051, Direction=N/A
634
635 uint8_t ReservedA3; // Byte offset 0xa3, CSR Addr 0x54051, Direction=N/A
636
637} __attribute__ ((packed)) PMU_SMB_DDR3U_1D_t;