1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
|
/** @file
*
* Copyright (c) 2015, Hisilicon Limited. All rights reserved.
* Copyright (c) 2015, Linaro Limited. All rights reserved.
*
* This program and the accompanying materials
* are licensed and made available under the terms and conditions of the BSD License
* which accompanies this distribution. The full text of the license may be found at
* http://opensource.org/licenses/bsd-license.php
*
* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
*
**/
#ifndef _HW_MEM_INIT_LIB_H_
#define _HW_MEM_INIT_LIB_H_
#include <PlatformArch.h>
#define I2C_CHANNEL 2
#define MAX_I2C_DEV 6
#define SPD_MODULE_PART 18
#define SPD_MODULE_PART_DDR4 20
#define NVRAM_ADDR 0x00D00000
typedef enum {
DDR_FREQ_AUTO = 0,
DDR_FREQ_800,
DDR_FREQ_1000,
DDR_FREQ_1066,
DDR_FREQ_1200,
DDR_FREQ_1333,
DDR_FREQ_1400,
DDR_FREQ_1600,
DDR_FREQ_1800,
DDR_FREQ_1866,
DDR_FREQ_2000,
DDR_FREQ_2133,
DDR_FREQ_2200,
DDR_FREQ_2400,
DDR_FREQ_2600,
DDR_FREQ_2666,
DDR_FREQ_2800,
DDR_FREQ_2933,
DDR_FREQ_3000,
DDR_FREQ_3200,
DDR_FREQ_MAX
} DDR_FREQUENCY_INDEX;
typedef struct _DDR_FREQ_TCK
{
UINT32 ddrFreq;
UINT32 ddrCk;
}DDR_FREQ_TCK;
typedef struct _GBL_CFG{
}GBL_CFG;
typedef struct _GBL_VAR{
}GBL_VAR;
typedef struct _GBL_NVDATA{
}GBL_NVDATA;
typedef struct _GOBAL {
const GBL_CFG Config; // constant input data
GBL_VAR Variable; // variable, volatile data
GBL_NVDATA NvData; // variable, non-volatile data for S3, warm boot path
UINT32 PreBootFailed;
}GOBAL, *PGOBAL;
struct DDR_RANK {
BOOLEAN Status;
UINT16 RttNom;
UINT16 RttPark;
UINT16 RttWr;
UINT16 MR0;
UINT16 MR1;
UINT16 MR2;
UINT16 MR3;
UINT16 MR4;
UINT16 MR5;
UINT16 MR6[9];
};
struct baseMargin {
INT16 n;
INT16 p;
};
struct rankMargin {
struct baseMargin rank[MAX_CHANNEL][MAX_RANK_CH];
};
typedef struct _DDR_DIMM{
BOOLEAN Status;
UINT8 mapout;
UINT8 DramType; //Byte 2
UINT8 ModuleType; //Byte 3
UINT8 ExtendModuleType;
UINT8 SDRAMCapacity; //Byte 4
UINT8 BankNum;
UINT8 BGNum; //Byte 4 For DDR4
UINT8 RowBits; //Byte 5
UINT8 ColBits; //Byte 5
UINT8 SpdVdd; //Byte 6
UINT8 DramWidth; //Byte 7
UINT8 RankNum; //Byte 7
UINT8 PrimaryBusWidth; //Byte 8
UINT8 ExtensionBusWidth; //Byte 8
UINT32 Mtb;
UINT32 Ftb;
UINT32 minTck;
UINT8 MtbDividend;
UINT8 MtbDivsor;
UINT8 nCL;
UINT32 nRCD;
UINT32 nRP;
UINT8 SPDftb;
UINT8 SpdMinTCK;
UINT8 SpdMinTCKFtb;
UINT8 SpdMaxTCK;
UINT8 SpdMinTCL;
UINT8 SpdMinTCLFtb;
UINT8 SpdMinTWR;
UINT8 SpdMinTRCD;
UINT8 SpdMinTRCDFtb;
UINT8 SpdMinTRRD;
UINT8 SpdMinTRRDL;
UINT16 SpdMinTRAS;
UINT16 SpdMinTRC;
UINT16 SpdMinTRCFtb;
UINT16 SpdMinTRFC;
UINT8 SpdMinTWTR;
UINT8 SpdMinTRTP;
UINT8 SpdMinTAA;
UINT8 SpdMinTAAFtb;
UINT8 SpdMinTFAW;
UINT8 SpdMinTRP;
UINT8 SpdMinTRPFtb;
UINT8 SpdMinTCCDL;
UINT8 SpdMinTCCDLFtb;
UINT8 SpdAddrMap;
UINT8 SpdModuleAttr;
UINT8 SpdModPart[SPD_MODULE_PART]; // Module Part Number
UINT8 SpdModPartDDR4[SPD_MODULE_PART_DDR4]; // Module Part Number DDR4
UINT16 SpdMMfgId; // Module Mfg Id from SPD
UINT16 SpdRMId; // Register Manufacturer Id
UINT16 SpdMMDate; // Module Manufacturing Date
UINT32 SpdSerialNum;
UINT16 DimmSize;
UINT16 DimmSpeed;
UINT32 RankSize;
UINT8 SpdMirror; //Denote the dram address mapping is standard mode or mirrored mode
struct DDR_RANK Rank[MAX_RANK_DIMM];
}DDR_DIMM;
typedef struct {
UINT32 ddrcTiming0;
UINT32 ddrcTiming1;
UINT32 ddrcTiming2;
UINT32 ddrcTiming3;
UINT32 ddrcTiming4;
UINT32 ddrcTiming5;
UINT32 ddrcTiming6;
UINT32 ddrcTiming7;
UINT32 ddrcTiming8;
}DDRC_TIMING;
typedef struct _MARGIN_RESULT{
UINT32 OptimalDramVref[12];
UINT32 optimalPhyVref[18];
}MARGIN_RESULT;
typedef struct _DDR_Channel{
BOOLEAN Status;
UINT8 CurrentDimmNum;
UINT8 CurrentRankNum;
UINT16 RankPresent;
UINT8 DramType;
UINT8 DramWidth;
UINT8 ModuleType;
UINT32 MemSize;
UINT32 tck;
UINT32 ratio;
UINT32 CLSupport;
UINT32 minTck;
UINT32 taref;
UINT32 nAA;
UINT32 nAOND;
UINT32 nCKE;
UINT32 nCL;
UINT32 nCCDL;
UINT32 nCKSRX;
UINT32 nCKSRE;
UINT32 nCCDNSW;
UINT32 nCCDNSR;
UINT32 nFAW;
UINT32 nMRD;
UINT32 nMOD;
UINT32 nRCD;
UINT32 nRRD;
UINT32 nRRDL;
UINT32 nRAS;
UINT32 nRC;
UINT32 nRFC;
UINT32 nRFCAB;
UINT32 nRTP;
UINT32 nRTW;
UINT32 nRP;
UINT32 nSRE;
UINT32 nWL;
UINT32 nWR;
UINT32 nWTR;
UINT32 nWTRL;
UINT32 nXARD;
UINT32 nZQPRD;
UINT32 nZQINIT;
UINT32 nZQCS;
UINT8 cwl; //tWL?
UINT8 pl; //parity latency
UINT8 wr_pre_2t_en;
UINT8 rd_pre_2t_en;
UINT8 cmd_2t_en;
UINT8 parity_en;
UINT8 wr_dbi_en;
UINT8 wr_dm_en;
UINT8 ddr4_crc_en;
UINT16 emrs0;
UINT16 emrs1;
UINT16 emrs1Wr;
UINT16 emrs2;
UINT16 emrs3;
UINT16 emrs4;
UINT16 emrs5;
UINT16 emrs5Wr;
UINT16 emrs6;
UINT16 emrs7;
UINT8 phy_rddata_set;
UINT8 phyif_tim_rdcs;
UINT8 phyif_tim_rden;
UINT8 phyif_tim_wden;
UINT8 phyif_tim_wdda;
UINT8 phyif_tim_wdcs;
UINT8 per_cs_training_en;
UINT32 phyRdDataEnIeDly;
UINT32 phyPadCalConfig;
UINT32 phyDqsFallRiseDelay;
UINT32 ddrcCfgDfiLat0;
UINT32 ddrcCfgDfiLat1;
UINT32 parityLatency;
UINT32 dimm_parity_en;
DDRC_TIMING ddrcTiming;
DDR_DIMM Dimm[MAX_DIMM];
MARGIN_RESULT sMargin;
}DDR_CHANNEL;
typedef struct _NVRAM_RANK{
UINT16 MR0;
UINT16 MR1;
UINT16 MR2;
UINT16 MR3;
UINT16 MR4;
UINT16 MR5;
UINT16 MR6[9];
}NVRAM_RANK;
typedef struct _NVRAM_DIMM{
NVRAM_RANK Rank[MAX_RANK_DIMM];
}NVRAM_DIMM;
typedef struct _NVRAM_CHANNEL{
NVRAM_DIMM Dimm[MAX_DIMM];
UINT32 DDRC_CFG_ECC;
UINT32 DDRC_CFG_WORKMODE;
UINT32 DDRC_CFG_WORKMODE1;
UINT32 DDRC_CFG_WORKMODE2;
UINT32 DDRC_CFG_DDRMODE;
UINT32 DDRC_CFG_DIMM;
UINT32 DDRC_CFG_RNKVOL_0;
UINT32 DDRC_CFG_RNKVOL_1;
UINT32 DDRC_CFG_RNKVOL_2;
UINT32 DDRC_CFG_RNKVOL_3;
UINT32 DDRC_CFG_RNKVOL_4;
UINT32 DDRC_CFG_RNKVOL_5;
UINT32 DDRC_CFG_RNKVOL_6;
UINT32 DDRC_CFG_RNKVOL_7;
UINT32 DDRC_CFG_RNKVOL_8;
UINT32 DDRC_CFG_RNKVOL_9;
UINT32 DDRC_CFG_RNKVOL_10;
UINT32 DDRC_CFG_RNKVOL_11;
UINT32 DDRC_CFG_ODT_0;
UINT32 DDRC_CFG_ODT_1;
UINT32 DDRC_CFG_ODT_2;
UINT32 DDRC_CFG_ODT_3;
UINT32 DDRC_CFG_ODT_4;
UINT32 DDRC_CFG_ODT_5;
UINT32 DDRC_CFG_ODT_6;
UINT32 DDRC_CFG_ODT_7;
UINT32 DDRC_CFG_ODT_8;
UINT32 DDRC_CFG_ODT_9;
UINT32 DDRC_CFG_ODT_10;
UINT32 DDRC_CFG_ODT_11;
UINT32 DDRC_CFG_TIMING0;
UINT32 DDRC_CFG_TIMING1;
UINT32 DDRC_CFG_TIMING2;
UINT32 DDRC_CFG_TIMING3;
UINT32 DDRC_CFG_TIMING4;
UINT32 DDRC_CFG_TIMING5;
UINT32 DDRC_CFG_TIMING6;
UINT32 DDRC_CFG_TIMING7;
UINT32 DDRC_CFG_DFI_LAT0;
UINT32 DDRC_CFG_DFI_LAT1;
UINT32 DDRC_CFG_DDRPHY;
UINT32 Config[24];
BOOLEAN Status;
}NVRAM_CHANNEL;
typedef struct _NVRAM{
UINT32 NvramCrc;
NVRAM_CHANNEL Channel[MAX_SOCKET][MAX_CHANNEL];
UINT32 DdrFreqIdx;
}NVRAM;
typedef struct _MEMORY{
UINT8 Config0;
UINT8 marginTest;
UINT8 Config1[5];
UINT8 ErrorBypass; //register of spd mirror mode
UINT32 Config2;
}MEMORY;
typedef struct _NUMAINFO{
UINT8 NodeId;
UINT64 Base;
UINT64 Length;
UINT32 ScclInterleaveEn;
}NUMAINFO;
typedef struct _GBL_DATA
{
DDR_CHANNEL Channel[MAX_SOCKET][MAX_CHANNEL];
UINT8 DramType;
UINT8 CurrentDimmNum;
UINT8 CurrentRankNum;
UINT8 MaxSPCNum;
UINT32 Freq;
UINT32 SpdTckMtb;
UINT32 SpdTckFtb;
UINT32 SpdTck;
UINT32 Tck;
UINT32 DdrFreqIdx;
UINT32 DevParaFreqIdx; //Maximum frequency of DDR device
UINT32 MemSize;
UINT32 EccEn;
BOOLEAN SetupExist;
UINT8 warmReset;
UINT8 needColdReset;
UINT8 cl;
UINT8 cwl;
UINT8 pl;
UINT8 wr_pre_2t_en;
UINT8 rd_pre_2t_en;
UINT8 cmd_2t_en;
UINT8 ddr4_parity_en;
UINT8 wr_dbi_en;
UINT8 wr_dm_en;
UINT8 ddr4_crc_en;
UINT16 emrs0;
UINT16 emrs1;
UINT16 emrs2;
UINT16 emrs3;
UINT16 emrs4;
UINT16 emrs5;
UINT16 emrs6;
UINT16 emrs7;
UINT8 phy_rddata_set;
UINT8 phyif_tim_rdcs;
UINT8 phyif_tim_rden;
UINT8 phyif_tim_wden;
UINT8 phyif_tim_wdda;
UINT8 phyif_tim_wdcs;
UINT8 dimm_trtr;
UINT8 dimm_twtw;
UINT8 rnk_trtr;
UINT8 rnk_twtw;
UINT8 rnk_trtw;
UINT8 rnk_twtr;
UINT8 per_cs_training_en;
UINT8 scale;
UINT8 ddrFreq;
UINT8 debugNeed;
UINT8 ddr3OdtEnable;
double fprd;
BOOLEAN chipIsEc;
NVRAM nvram;
MEMORY mem;
NUMAINFO NumaInfo[MAX_SOCKET][MAX_NUM_PER_TYPE];
}GBL_DATA, *pGBL_DATA;
typedef union {
struct {
UINT16 freqIndex:4; //Frequency Index;
UINT16 slot0:4; //Channel slot0 for DIMM
UINT16 slot1:4; //Channel slot1 for DIMM
UINT16 slot2:4; //Channel slot2 for DIMM
}Bits;
UINT16 Data;
}ODT_VALUE_INDEX;
typedef union {
struct {
UINT8 RTTNom:3;
UINT8 reserved_3:1;
UINT8 RTTWr:2;
UINT8 reserved_6:2;
}Bits;
UINT8 Data;
}ODT_RTT_VALUE_DDR3;
typedef union {
struct {
UINT8 RTTNom:3;
UINT8 RTTPark:3;
UINT8 RTTWr:2;
}Bits;
UINT8 Data;
}ODT_RTT_VALUE_DDR4;
typedef union {
struct {
UINT16 tarDimm:2; // target DIMM
UINT16 tarRank:2; // target Rank
UINT16 slot0:4; // Channel slot0 for DIMM
UINT16 slot1:4; // Channel slot1 for DIMM
UINT16 slot2:4; // Channel slot2 for DIMM
}Bits;
UINT16 Data;
}ODT_ACTIVE_INDEX;
struct ODT_VALUE_STRUCT_DDR3 {
UINT16 config; // ODT_VALUE_INDEX
UINT8 dramOdt[MAX_DIMM][MAX_RANK_DIMM]; // ODT_VALUE_RTT_DDR3
};
struct ODT_VALUE_STRUCT_DDR4 {
UINT16 config;
UINT8 dramOdt[MAX_DIMM][MAX_RANK_DIMM];
};
struct ODT_ACTIVE_STRUCT {
UINT16 config; // ODT config index
UINT16 actBits[2]; // WR :Bits[3;0] = D0_R[3:0] Bits[7:4] = D1_R[3:0] Bits[11:8] = D2_R[3:0]
};
// JEDEC manufacturer IDs from JEP-106
#define MFGID_AENEON 0x5705
#define MFGID_QIMONDA 0x5105
#define MFGID_NEC 0x1000
#define MFGID_IDT 0xB300
#define MFGID_TI 0x9700
#define MFGID_HYNIX 0xAD00
#define MFGID_MICRON 0x2C00
#define MFGID_INFINEON 0xC100
#define MFGID_SAMSUNG 0xCE00
#define MFGID_TEK 0x3D00
#define MFGID_KINGSTON 0x9801
#define MFGID_ELPIDA 0xFE02
#define MFGID_SMART 0x9401
#define MFGID_AGILENT 0xC802
#define MFGID_NANYA 0x0B03
#define MFGID_INPHI 0xB304
#define MFGID_MONTAGE 0x3206
#define MFGID_RAMAXEL 0x4304
//
// DDR3 frequencies 800 - 2667
// DDR4 frequencies 1333 - 3200
//
#define DDR_800 0 // tCK(ns)=2.5
#define DDR_1000 1 // tCK(ns)=2.0
#define DDR_1066 2 // tCK(ns)=1.875
#define DDR_1200 3 // tCK(ns)=1.667
#define DDR_1333 4 // tCK(ns)=1.5
#define DDR_1400 5 // tCK(ns)=1.429
#define DDR_1600 6 // tCK(ns)=1.25
#define DDR_1800 7 // tCK(ns)=1.11
#define DDR_1866 8 // tCK(ns)=1.07
#define DDR_2000 9 // tCK(ns)=1.0
#define DDR_2133 10 // tCK(ns)=0.9375
#define DDR_2200 11 // tCK(ns)=0.909
#define DDR_2400 12 // tCK(ns)=0.833
#define DDR_2600 13 // tCK(ns)=0.769
#define DDR_2666 14 // tCK(ns)=0.750
#define DDR_2800 15 // tCK(ns)=0.714
#define DDR_2933 16 // tCK(ns)=0.682
#define DDR_3000 17 // tCK(ns)=0.667
#define DDR_3200 18 // tCK(ns)=0.625
#define DDR_MAX (DDR_3200)
#define FREQUENCY_MTB_OFFSET 1000000
#define FREQUENCY_FTB_OFFSET 1000
//
#define DDR_800_TCK_MIN 25000
#define DDR_1000_TCK_MIN 20000
#define DDR_1067_TCK_MIN 18750
#define DDR_1200_TCK_MIN 16670
#define DDR_1333_TCK_MIN 15000
#define DDR_1400_TCK_MIN 14290
#define DDR_1600_TCK_MIN 12500
#define DDR_1800_TCK_MIN 11100
#define DDR_1867_TCK_MIN 10710
#define DDR_2000_TCK_MIN 10000
#define DDR_2133_TCK_MIN 9380
#define DDR_2200_TCK_MIN 9090
#define DDR_2400_TCK_MIN 8330
#define DDR_2600_TCK_MIN 7690
#define DDR_2667_TCK_MIN 7500
#define DDR_2800_TCK_MIN 7140
#define DDR_2933_TCK_MIN 6820
#define DDR_3000_TCK_MIN 6670
#define DDR_3200_TCK_MIN 6250
//
// Serial Presence Detect bytes (JEDEC revision 1.0)
//
#define SPD_SIZE 0 // Bytes used, Device size, CRC coverage
#define SPD_REVISION 1 // SPD Encoding Revision
#define SPD_KEY_BYTE 2 // DRAM Device Type
#define SPD_TYPE_DDR3 0x0B // DDR3 SDRAM
#define SPD_TYPE_DDR4 0x0C // DDR4 SDRAM
#define SPD_KEY_BYTE2 3 // Module Type and Thickness (RDIMM or UDIMM)
#define SPD_RDIMM 1 // Module type is RDIMM
#define SPD_UDIMM 2 // Module type is UDIMM
#define SPD_SODIMM 3 // Module type is SODIMM
#define SPD_MICRO_DIMM 4 // Module type is Micro-DIMM
#define SPD_LRDIMM_DDR4 4 // Module type is LRDIMM (DDR4)
#define SPD_MINI_RDIMM 5 // Module type is Mini-RDIMM
#define SPD_MINI_UDIMM 6 // Module type is Mini-UDIMM
#define SPD_MINI_CDIMM 7 // Module type is Mini-CDIMM
#define SPD_ECC_SO_UDIMM 9 // Module type is 72b-SO-UDIMM
#define SPD_ECC_SO_RDIMM 8 // Module type is 72b-SO-RDIMM
#define SPD_ECC_SO_CDIMM 10 // Module type is 72b-SO-CDIMM
#define SPD_LRDIMM 11 // Module type is LRDIMM
#define SPD_UDIMM_ECC 18 // Module type is UDIMM-ECC
#define SPD_SDRAM_BANKS 4 // SDRAM Density and number of internal banks
#define SPD_1Gb 2 // Total SDRAM Capacity 1 Gigabits
#define SPD_2Gb 3 // Total SDRAM Capacity 2 Gigabits
#define SPD_4Gb 4 // Total SDRAM Capacity 4 Gigabits
#define SPD_8Gb 5 // Total SDRAM Capacity 8 Gigabits
#define SPD_16Gb 6 // Total SDRAM Capacity 16 Gigabits
#define SPD_32Gb 7 // Total SDRAM Capacity 32 Gigabits
#define SPD_SDRAM_ADDR 5 // Number of Row and Column address bits
#define SPD_ROW_12 0 // 12 row bits
#define SPD_ROW_13 1 // 13 row bits
#define SPD_ROW_14 2 // 14 row bits
#define SPD_ROW_15 3 // 15 row bits
#define SPD_ROW_16 4 // 16 row bits
#define SPD_ROW_17 5 // 17 row bits
#define SPD_ROW_18 6 // 18 row bits
#define SPD_COL_9 0 // 9 colum bits
#define SPD_COL_10 1 // 10 colum bits
#define SPD_COL_11 2 // 11 colum bits
#define SPD_COL_12 3 // 12 colum bits
#define SPD_VDD_SUPPORT 6 // Vdd DIMM supports
#define SPD_VDD_150 0 // Module Supports 1.50V
#define SPD_VDD_135 BIT1 // Module Supports 1.35V
#define SPD_VDD_125 BIT2 // Module Supports 1.25V
#define SPD_MODULE_ORG_DDR3 7 // Number of Ranks and SDRAM device width
#define SPD_MODULE_ORG_DDR4 12 // DDR4 Module Organization
#define DEVICE_WIDTH_X4 0 // SDRAM device width = 4 bits
#define DEVICE_WIDTH_X8 1 // SDRAM device width = 8 bits
#define DEVICE_WIDTH_X16 2 // SDRAM device width = 16 bits
#define SPD_NUM_RANKS_1 0
#define SPD_NUM_RANKS_2 1
#define SPD_NUM_RANKS_4 3
#define SPD_NUM_RANKS_8 4
#define SPD_MEM_BUS_WID 8 // Width of SDRAM memory bus
#define SPD_FTB 9 // Timebase for fine grain timing calculations
#define SPD_MTB_DIVEND 10 // Medium Time Base Dividend
#define SPD_MTB_DIVISOR 11 // Medium Time Base Divisor
#define SPD_MIN_TCK 12 // Minimum cycle time (at max CL)
#define SPD_TCKMIN_800 20 // tCK(MTB)=20, tCK(ns)=2.5
#define SPD_TCKMIN_1067 15 // tCK(MTB)=15, tCK(ns)=1.875
#define SPD_TCKMIN_1333 12 // tCK(MTB)=12, tCK(ns)=1.5
#define SPD_TCKMIN_1600 10 // tCK(MTB)=10, tCK(ns)=1.25
#define SPD_TCKMIN_1867 9 // tCK(MTB)=9, tCK(ns)=1.07
#define SPD_TCKMIN_2133 8 // tCK(MTB)=8, tCK(ns)=0.9375
#define SPD_TCKMIN_2400 7 // tCK(MTB)=7, tCK(ns)=.833
#define SPD_CAS_LT_SUP_LSB 14 // CAS Latencies Supported, Least Significant Byte
#define SPD_CAS_LT_SUP_MSB 15 // CAS Latencies Supported, Most Significant Byte
#define SPD_MIN_TAA 16 // Minimum CAS Latency Time (tAAmin)
#define SPD_MIN_TWR 17 // Minimum Write Recovery Time
#define SPD_MIN_TRCD 18 // Minimum RAS to CAS delay
#define SPD_MIN_TRRD 19 // Minimum Row active to row active delay
#define SPD_MIN_TRP 20 // Minimum Row Precharge time
#define SPD_EXT_TRC_TRAS 21 // Upper nibbles for min tRAS and tRC
#define SPD_MIN_TRAS 22 // Minimum Active to Precharge time
#define SPD_MIN_TRC 23 // Minimum Active to Active/Refresh time
#define SPD_MIN_TRFC_LSB 24 // Minimum Refresh Recovery time least-significant byte
#define SPD_MIN_TRFC_MSB 25 // Minimum Refresh Recovery time most-significant byte
#define SPD_MIN_TWTR 26 // Minimum Internal Write to Read command delay
#define SPD_MIN_TRTP 27 // Minimum Internal Read to Precharge command delay
#define SPD_UN_TFAW 28 // Upper Nibble for tFAW
#define SPD_MIN_TFAW 29 // Minimum Four Activate Window Delay Time (tFAWmin)
#define SPD_OD_SUP 30 // SDRAM Output Drivers Supported
#define SPD_RFSH_OPT 31 // SDRAM Refresh Options
#define ETR BIT0 // Bit location for Extended Temp Range
#define ETRR BIT1 // Bit location for Extended Temp Refresh Rate
#define ASR BIT2 // Bit location for Automatic Self Refresh
#define ODTS BIT3 // Bit location for On-die Thermal Sensor
#define SPD_DIMM_TS 32 // Module Temperature Sensor
#define SPD_SDRAM_TYPE 33 // SDRAM device type
#define SPD_FTB_TCK 34 // Fine Offset for SDRAM tCK
#define SPD_FTB_TAA 35 // Fine Offset for SDRAM tAA
#define SPD_FTB_TRCD 36 // Fine Offset for SDRAM tRCD
#define SPD_FTB_TRP 37 // Fine Offset for SDRAM tRP
#define SPD_FTB_TRC 38 // Fine Offset for SDRAM tRC
#define SPD_OPT_FEAT 41 // SDRAM Optional Features
#define SPD_PTRR BIT7 // Indicates if the DIMM is pTRR compliant
// UDIMM specific bytes
// Applicable when Module Type (key byte 3) = 2, 3, 4, 6, or 8
#define SPD_ADDR_MAP_FECTD 63 // Address Mapping from Edge Connector to DRAM
// RDIMM specific bytes
// Applicable when Module Type (key byte 3) = 1, 5, or 9
#define SPD_RDIMM_ATTR 63 // RDIMM module attributes
#define SPD_DIMM_HS 64 // Module Heat Spreader Solution
#define SPD_REG_VEN_LSB 65 // Register Vendor ID LSB
#define SPD_REG_VEN_MSB 66 // Register Vendor ID MSB
#define SPD_REG_REV 67 // Register Revision
#define SPD_CNTL_0 69 // Register Control Word 0 & 1
#define SPD_CNTL_1 70 // Register Control Word 2 & 3
#define SPD_CNTL_2 71 // Register Control Word 4 & 5
#define SPD_CNTL_3 72 // Register Control Word 6 & 7 (reserved)
#define SPD_CNTL_4 73 // Register Control Word 8 & 9 (reserved)
#define SPD_CNTL_5 74 // Register Control Word 10 & 11 (reserved)
#define SPD_CNTL_6 75 // Register Control Word 12 & 13 (reserved)
#define SPD_CNTL_7 76 // Register Control Word 14 & 15 (reserved)
// LRDIMM specific bytes
// Applicable when Module Type (key byte 3) = 0xB
// Based on DDR3 SPD 1.0 Document Release 2.1 draft, dated May 27, 2011
#define SPD_LRDIMM_ATTR 63 // LRDIMM module attributes
#define SPD_LRBUF_REV 64 // LR Buffer Revision
#define SPD_LRBUF_VEN_LSB 65 // LR Buffer Vendor ID LSB
#define SPD_LRBUF_VEN_MSB 66 // LR Buffer Vendor ID MSB
#define SPD_LR_F0_RC2_3 67 // LR Buffer Function 0, Control Word 2 & 3
#define SPD_LR_F0_RC4_5 68 // LR Buffer Function 0, Control Word 4 & 5
#define SPD_LR_F1_RC8_11 69 // LR Buffer Function 1, Control Word 8 & 11
#define SPD_LR_F1_RC12_13 70 // LR Buffer Function 1, Control Word 12 & 13
#define SPD_LR_F1_RC14_15 71 // LR Buffer Function 1, Control Word 14 & 15
// Speed bin 0 = 800 & 1066
#define SPD_LR_SB0_MDQ_DS_ODT 72 // LR Buffer Function 3, Control Word 8 & 9
#define SPD_LR_SB0_DR01_QODT_ACT 73 // LR Buffer Function 3 & 4, Control Word 10 & 11
#define SPD_LR_SB0_DR23_QODT_ACT 74 // LR Buffer Function 5 & 6, Control Word 10 & 11
#define SPD_LR_SB0_DR45_QODT_ACT 75 // LR Buffer Function 7 & 8, Control Word 10 & 11
#define SPD_LR_SB0_DR67_QODT_ACT 76 // LR Buffer Function 9 & 10, Control Word 10 & 11
#define SPD_LR_SB0_MR1_2_RTT 77 // LR Buffer SMBus offsets 0xC0 - 0xC7
// Speed bin 1 = 1333 & 1600
#define SPD_LR_SB1_MDQ_DS_ODT 78 // LR Buffer Function 3, Control Word 8 & 9
#define SPD_LR_SB1_DR01_QODT_ACT 79 // LR Buffer Function 3 & 4, Control Word 10 & 11
#define SPD_LR_SB1_DR23_QODT_ACT 80 // LR Buffer Function 5 & 6, Control Word 10 & 11
#define SPD_LR_SB1_DR45_QODT_ACT 81 // LR Buffer Function 7 & 8, Control Word 10 & 11
#define SPD_LR_SB1_DR67_QODT_ACT 82 // LR Buffer Function 9 & 10, Control Word 10 & 11
#define SPD_LR_SB1_MR1_2_RTT 83 // LR Buffer SMBus offsets 0xC0 - 0xC7
// Speed bin 2 = 1866 & 2133
#define SPD_LR_SB2_MDQ_DS_ODT 84 // LR Buffer Function 3, Control Word 8 & 9
#define SPD_LR_SB2_DR01_QODT_ACT 85 // LR Buffer Function 3 & 4, Control Word 10 & 11
#define SPD_LR_SB2_DR23_QODT_ACT 86 // LR Buffer Function 5 & 6, Control Word 10 & 11
#define SPD_LR_SB2_DR45_QODT_ACT 87 // LR Buffer Function 7 & 8, Control Word 10 & 11
#define SPD_LR_SB2_DR67_QODT_ACT 88 // LR Buffer Function 9 & 10, Control Word 10 & 11
#define SPD_LR_SB2_MR1_2_RTT 89 // LR Buffer SMBus offsets 0xC0 - 0xC7
#define SPD_LR_150_MIN_MOD_DELAY 90 // LR DIMM minimum DQ Read propagation delay at 1.5V
#define SPD_LR_150_MAX_MOD_DELAY 91 // LR DIMM maximum DQ Read propagation delay at 1.5V
#define SPD_LR_135_MIN_MOD_DELAY 92 // LR DIMM minimum DQ Read propagation delay at 1.35V
#define SPD_LR_135_MAX_MOD_DELAY 93 // LR DIMM maximum DQ Read propagation delay at 1.35V
#define SPD_LR_12x_MIN_MOD_DELAY 94 // LR DIMM minimum DQ Read propagation delay at 1.2xV
#define SPD_LR_12x_MAX_MOD_DELAY 95 // LR DIMM maximum DQ Read propagation delay at 1.2xV
#define SPD_LR_PERS_BYTE_0 102 // LR DIMM Personality Byte
#define SPD_LR_PERS_BYTE_1 103 // LR DIMM Personality Byte
#define SPD_LR_PERS_BYTE_2 104 // LR DIMM Personality Byte
#define SPD_LR_PERS_BYTE_3 105 // LR DIMM Personality Byte
#define SPD_LR_PERS_BYTE_4 106 // LR DIMM Personality Byte
#define SPD_LR_PERS_BYTE_5 107 // LR DIMM Personality Byte
#define SPD_LR_PERS_BYTE_6 108 // LR DIMM Personality Byte
#define SPD_LR_PERS_BYTE_7 109 // LR DIMM Personality Byte
#define SPD_LR_PERS_BYTE_8 110 // LR DIMM Personality Byte
#define SPD_LR_PERS_BYTE_9 111 // LR DIMM Personality Byte
#define SPD_LR_PERS_BYTE_10 112 // LR DIMM Personality Byte
#define SPD_LR_PERS_BYTE_11 113 // LR DIMM Personality Byte
#define SPD_LR_PERS_BYTE_12 114 // LR DIMM Personality Byte
#define SPD_LR_PERS_BYTE_13 115 // LR DIMM Personality Byte
#define SPD_LR_PERS_BYTE_14 116 // LR DIMM Personality Byte
#define SPD_LR_PERS_BYTES_TOTAL 15 // LR DIMM Total number of Personality Bytes
// End module specific section
#define SPD_MMID_LSB 117 // Module Manufacturer ID Code, Least Significant Byte
#define SPD_MMID_MSB 118 // Module Manufacturer ID Code, Mostst Significant Byte
#define SPD_MM_LOC 119 // Module Manufacturing Location
#define SPD_MM_DATE 120 // Module Manufacturing Date 120-121
#define SPD_MODULE_SN 122 // Module Serial Number 122-125
#define SPD_CRC_LSB 126 // LSB of 16-bit CRC
#define SPD_CRC_MSB 127 // MSB of 16-bit CRC
#define SPD_MODULE_PN 128 // Module Part Number 128-145
#define SPD_MODULE_RC 146 // Module Revision Code 146-147
#define SPD_DRAM_MIDC_LSB 148 // DRAM Manufacturer ID Code, Least Significant Byte
#define SPD_DRAM_MIDC_MSB 149 // DRAM Manufacturer ID Code, Most Significant Byte
#ifdef MEM_NVDIMM_EN
#define SPD_NVDIMM_ID_N 174 // If NVDIMM value will be 'N'
#define SPD_NVDIMM_ID_V 175 // If NVDIMM value will be 'V'
#endif //MEM_NVDIMM_EN
#define SPD_BYTE_200 200 // Fixed value 0xBE
//
// DDR4 Specific Bytes
//
#define SPD_SDRAM_TYPE_DDR4 6 // SDRAM Device Type (DDR4)
#define SPD_OPT_FEAT_DDR4 7 // SDRAM Optional Features (DDR4)
#define SPD_MAC_MASK BIT0 | BIT1 | BIT2 // Mask for Maximum Active Count field
#define SPD_TRR_IMMUNE BIT3 // Indicates this DIMM does not require DRAM Maintenance
#define SPD_RFSH_OPT_DDR4 8 // SDRAM Refresh Options (DDR4)
#define SPD_VDD_DDR4 11 // Vdd DIMM supports (DDR4)
#define SPD_VDD_120 3 // Module operable and endurant 1.20V
#define SPD_MODULE_ORG_DDR4 12 // Number of Ranks and SDRAM device width (DDR4)
#define SPD_MEM_BUS_WID_DDR4 13 // Width of SDRAM memory bus
#define SPD_DIMM_TS_DDR4 14 // Module Thermal Sensor
#define SPD_TB_DDR4 17 // Timebase [3:2] MTB, [1:0] FTB
#define SPD_MIN_TCK_DDR4 18 // Minimum cycle time
#define SPD_TCKMIN_DDR4_1600 10 // tCK(MTB)=10, tCK(ns)=1.25
#define SPD_TCKMIN_DDR4_1866 9 // tCK(MTB)=9, tCK(ns)=1.071
#define SPD_TCKMIN_DDR4_2133 8 // tCK(MTB)=8, tCK(ns)=.938
#define SPD_TCKMIN_DDR4_2400 7 // tCK(MTB)=7, tCK(ns)=.833
#define SPD_MAX_TCK_DDR4 19 // Maximum cycle time
#define SPD_CAS_LT_SUP_1_DDR4 20 // CAS Latencies Supported, first byte
#define SPD_CAS_LT_SUP_2_DDR4 21 // CAS Latencies Supported, second byte
#define SPD_CAS_LT_SUP_3_DDR4 22 // CAS Latencies Supported, third byte
#define SPD_CAS_LT_SUP_4_DDR4 23 // CAS Latencies Supported, fourth byte
#define SPD_MIN_TAA_DDR4 24 // Minimum CAS Latency Time (tAAmin)
#define SPD_MIN_TRCD_DDR4 25 // Minimum RAS to CAS delay
#define SPD_MIN_TRP_DDR4 26 // Minimum Row Precharge time
#define SPD_EXT_TRC_TRAS_DDR4 27 // Upper nibbles for min tRAS and tRC
#define SPD_MIN_TRAS_DDR4 28 // Minimum Active to Precharge time
#define SPD_MIN_TRC_DDR4 29 // Minimum Active to Active/Refresh time
#define SPD_MIN_TRFC1_LSB_DDR4 30 // Minimum Refresh Recovery time least-significant byte
#define SPD_MIN_TRFC1_MSB_DDR4 31 // Minimum Refresh Recovery time most-significant byte
#define SPD_MIN_TRFC2_LSB_DDR4 32 // Minimum Refresh Recovery time least-significant byte
#define SPD_MIN_TRFC2_MSB_DDR4 33 // Minimum Refresh Recovery time most-significant byte
#define SPD_MIN_TRFC3_LSB_DDR4 34 // Minimum Refresh Recovery time least-significant byte
#define SPD_MIN_TRFC3_MSB_DDR4 35 // Minimum Refresh Recovery time most-significant byte
#define SPD_TFAW_UPPER_DDR4 36 // Upper nibble for tFAW
#define SPD_MIN_TFAW_DDR4 37 // Minimum For Active Window Delay Time (tFAW)
#define SPD_MIN_TRRDS_DDR4 38 // Minimum Active to Active Delay Time tRRD_S Different Bank Group
#define SPD_MIN_TRRDL_DDR4 39 // Minimum Active to Active Delay Time tRRD_L Same Bank Group
#define SPD_MIN_TCCDL_DDR4 40 // Minimum CAS to CAS Delay Time (tCCD_Lmin), same bank group
#define SPD_FTB_TCCDL_DDR4 117 // Fine offset for tCCD_L
#define SPD_FTB_TRRDL_DDR4 118 // Fine offset for tRRD_L
#define SPD_FTB_TRRDS_DDR4 119 // Fine offset for tRRD_S
#define SPD_FTB_TRC_DDR4 120 // Fine offset for TRC
#define SPD_FTB_TRP_DDR4 121 // Fine offset for TRP
#define SPD_FTB_TRCD_DDR4 122 // Fine offset for TRCD
#define SPD_FTB_TAA_DDR4 123 // Fine offset for TAA
#define SPD_FTB_MAX_TCK_DDR4 124 // Fine offset for max TCK
#define SPD_FTB_MIN_TCK_DDR4 125 // Fine offset for min TCK
#define SPD_MIRROR_UNBUFFERED 131 // Unbuffered:Address Mapping from Edge Connector to DRAM
#define SPD_MIRROR_REGISTERED 136 // Registered:Address Address Mapping from Register to DRAM
#define SPD_MMID_LSB_DDR4 320 // Module Manufacturer ID Code, Least Significant Byte
#define SPD_MMID_MSB_DDR4 321 // Module Manufacturer ID Code, Most Significant Byte
#define SPD_MM_LOC_DDR4 322 // Module Manufacturing Location
#define SPD_MM_DATE_DDR4 323 // Module Manufacturing Date 323-324
#define SPD_MODULE_SN_DDR4 325 // Module Serial Number 325-328
#define SPD_MODULE_PN_DDR4 329 // Module Part Number 329-348
#define SPD_MODULE_RC_DDR4 349 // Module Revision Code
#define SPD_DRAM_MIDC_LSB_DDR4 350 // DRAM Manufacturer ID Code, Least Significant Byte
#define SPD_DRAM_MIDC_MSB_DDR4 351 // DRAM Manufacturer ID Code, Most Significant Byte
#define SPD_DRAM_REV_DDR4 352 // DRAM Revision ID
#define SPD_CRC_LSB_DDR4 382 // LSB of 16-bit CRC
#define SPD_CRC_MSB_DDR4 383 // MSB of 16-bit CRC
// Begin DDR4 module specific section
#define SPD_MODULE_NH_DDR4 128 // Module Nominal Height
#define SPD_MODULE_MT_DDR4 129 // Module Maximum Thickness
#define SPD_REF_RAW_CARD_DDR4 130 // Reference Raw Card Used
// UDIMM specific bytes
// Applicable when Module Type (key byte 3) = 2
#define SPD_ADDR_MAP_FECTD_DDR4 131 // Address Mapping from Edge Connector to DRAM
// RDIMM specific bytes
// Applicable when Module Type (key byte 3) = 1
#define SPD_RDIMM_ATTR_DDR4 131 // RDIMM module attributes
#define SPD_DIMM_HS_DDR4 132 // Module Heat Spreader Solution
#define SPD_REG_VEN_LSB_DDR4 133 // Register Vendor ID LSB
#define SPD_REG_VEN_MSB_DDR4 134 // Register Vendor ID MSB
#define SPD_REG_REV_DDR4 135 // Register Revision
#define SPD_ADD_MAPPING_DDR4 136 // Address mapping from Reg to DRAM
#define SPD_REG_OD_CTL_DDR4 137 // Register Output Drive Strength for Control
#define SPD_REG_OD_CK_DDR4 138 // Register Output Drive Strength for Clock
// LRDIMM specific bytes
// Applicable when Module Type (key byte 3) = 0x4
#define SPD_LRDIMM_ATTR_DDR4 131 // LRDIMM module attributes
#define SPD_LRBUF_HS_DDR4 132 // LR Buffer Heat Spreader Solution
#define SPD_LRBUF_VEN_LSB_DDR4 133 // LR Buffer Vendor ID LSB
#define SPD_LRBUF_VEN_MSB_DDR4 134 // LR Buffer Vendor ID MSB
#define SPD_LRBUF_REV_DDR4 135 // LR Buffer Register Revision
#define SPD_LRBUF_DB_REV_DDR4 139 // LR Buffer Data Buffer Revision
#define SPD_LRBUF_DRAM_VREFDQ_R0_DDR4 140 // LR Buffer DRAM VrefDQ for Package Rank 0
#define SPD_LRBUF_DRAM_VREFDQ_R1_DDR4 141 // LR Buffer DRAM VrefDQ for Package Rank 1
#define SPD_LRBUF_DRAM_VREFDQ_R2_DDR4 142 // LR Buffer DRAM VrefDQ for Package Rank 2
#define SPD_LRBUF_DRAM_VREFDQ_R3_DDR4 143 // LR Buffer DRAM VrefDQ for Package Rank 3
#define SPD_LRBUF_DB_VREFDQ_DDR4 144 // LR Data Buffer VrefDQ for DRAM Interface
#define SPD_LRBUF_DB_DS_RTT_LE1866_DDR4 145 // LR Data Buffer MDQ Drive Strength and RTT for data rate <= 1866
#define SPD_LRBUF_DB_DS_RTT_GT1866_LE2400_DDR4 146 // LR Data Buffer MDQ Drive Strength and RTT for data rate > 1866 and <= 2400
#define SPD_LRBUF_DB_DS_RTT_GT2400_LE3200_DDR4 147 // LR Data Buffer MDQ Drive Strength and RTT for data rate > 2400 and <= 3200
#define SPD_LRBUF_DRAM_DS_DDR4 148 // LR Buffer DRAM Drive Strength (for data rates <= 1866, 1866 < data rate <= 2400, and 2400 < data rate <= 3200)
#define SPD_LRBUF_DRAM_ODT_WR_NOM_LE1866_DDR4 149 // LR Buffer DRAM ODT (RTT_WR and RTT_NOM) for data rate <= 1866
#define SPD_LRBUF_DRAM_ODT_WR_NOM_GT1866_LE2400_DDR4 150 // LR Buffer DRAM ODT (RTT_WR and RTT_NOM) for data rate > 1866 and <= 2400
#define SPD_LRBUF_DRAM_ODT_WR_NOM_GT2400_LE3200_DDR4 151 // LR Buffer DRAM ODT (RTT_WR and RTT_NOM) for data rate > 2400 and <= 3200
#define SPD_LRBUF_DRAM_ODT_PARK_LE1866_DDR4 152 // LR Buffer DRAM ODT (RTT_PARK) for data rate <= 1866
#define SPD_LRBUF_DRAM_ODT_PARK_GT1866_LE2400_DDR4 153 // LR Buffer DRAM ODT (RTT_PARK) for data rate > 1866 and <= 2400
#define SPD_LRBUF_DRAM_ODT_PARK_GT2400_LE3200_DDR4 154 // LR Buffer DRAM ODT (RTT_PARK) for data rate > 2400 and <= 3200
//
// End DDR4 Specific Bytes
//
#define BANK0 0
#define BANK1 BIT0
#define BANK2 BIT1
#define BANK3 BIT0 + BIT1
#define BANK4 BIT2
#define BANK5 BIT2 + BIT0
#define BANK6 BIT2 + BIT1
#define BANK7 BIT2 + BIT1 + BIT0
#define RDIMM_RC00 0x00
#define RDIMM_RC01 0x01
#define RDIMM_RC02 0x02
#define RDIMM_RC03 0x03
#define RDIMM_RC04 0x04
#define RDIMM_RC05 0x05
#define RDIMM_RC08 0x08
#define RDIMM_RC09 0x09
#define RDIMM_RC0A 0x0A
#define RDIMM_RC0B 0x0B
#define RDIMM_RC0C 0x0C
#define RDIMM_RC0D 0x0D
#define RDIMM_RC0E 0x0E
#define RDIMM_RC0F 0x0F
#define RDIMM_RC1x 0x10
#define RDIMM_RC2x 0x20
#define RDIMM_RC3x 0x30
#define RDIMM_RC4x 0x40
#define RDIMM_RC5x 0x50
#define RDIMM_RC6x 0x60
#define RDIMM_RC7x 0x70
#define RDIMM_RC8x 0x80
#define RDIMM_RC9x 0x90
#define RDIMM_RCAx 0xA0
#define LRDIMM_BC00 0x00
#define LRDIMM_BC01 0x01
#define LRDIMM_BC02 0x02
#define LRDIMM_BC03 0x03
#define LRDIMM_BC04 0x04
#define LRDIMM_BC05 0x05
#define LRDIMM_BC06 0x06
#define LRDIMM_BC07 0x07
#define LRDIMM_BC08 0x08
#define LRDIMM_BC09 0x09
#define LRDIMM_BC0A 0x0A
#define LRDIMM_BC0B 0x0B
#define LRDIMM_BC0C 0x0C
#define LRDIMM_BC0E 0x0E
#define LRDIMM_BC0x 0x00
#define LRDIMM_BC1x 0x10
#define LRDIMM_BC2x 0x20
#define LRDIMM_BC3x 0x30
#define LRDIMM_BC4x 0x40
#define LRDIMM_BC5x 0x50
#define LRDIMM_BC6x 0x60
#define LRDIMM_BC7x 0x70
#define LRDIMM_BC8x 0x80
#define LRDIMM_BC9x 0x90
#define LRDIMM_BCAx 0xA0
#define LRDIMM_BCBx 0xB0
#define LRDIMM_BCCx 0xC0
#define LRDIMM_BCDx 0xD0
#define LRDIMM_BCEx 0xE0
#define LRDIMM_BCFx 0xF0
#define LRDIMM_F0 0x0
#define LRDIMM_F1 0x1
#define LRDIMM_F5 0x5
#define LRDIMM_F6 0x6
#define LRDIMM_F7 0x7
#define LRDIMM_F8 0x8
#define LRDIMM_F9 0x9
#endif /* _HW_MEM_INIT_LIB_H_ */
|