alder_lake_bios/Intel/AlderLake/AlderLakeOpenBoardPkg/TigerLakeSimics/Library/BoardInitLib/PeiSpdTable.h

179 lines
10 KiB
C

/** @file
GPIO definition table for Tigerlake Simics
Copyright (c) 2017 - 2018, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials are licensed and made available under
the terms and conditions of the BSD License that 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 _TIGERLAKE_SIMICS_SPD_TABLE_H_
#define _TIGERLAKE_SIMICS_SPD_TABLE_H_
//
// DQByteMap[0] - ClkDQByteMap:
// If clock is per rank, program to [0xFF, 0xFF]
// If clock is shared by 2 ranks, program to [0xFF, 0] or [0, 0xFF]
// If clock is shared by 2 ranks but does not go to all bytes,
// Entry[i] defines which DQ bytes Group i services
// DQByteMap[1] - CmdNDQByteMap: Entry[0] is CmdN/CAA and Entry[1] is CmdN/CAB
// DQByteMap[2] - CmdSDQByteMap: Entry[0] is CmdS/CAA and Entry[1] is CmdS/CAB
// DQByteMap[3] - CkeDQByteMap : Entry[0] is CKE /CAA and Entry[1] is CKE /CAB
// For DDR, DQByteMap[3:1] = [0xFF, 0]
// DQByteMap[4] - CtlDQByteMap : Always program to [0xFF, 0] since we have 1 CTL / rank
// Variable only exists to make the code easier to use
// DQByteMap[5] - CmdVDQByteMap: Always program to [0xFF, 0] since we have 1 CA Vref
// Variable only exists to make the code easier to use
//
//
// DQ byte mapping to CMD/CTL/CLK, from the CPU side - for SKL RVP3 and CNL MRC
//
GLOBAL_REMOVE_IF_UNREFERENCED const UINT8 mDqByteMapSklRvp3[2][6][2] = {
// Channel 0:
{
{ 0x0F, 0xF0 }, // CLK0 goes to package 0 - Bytes[3:0], CLK1 goes to package 1 - Bytes[7:4]
{ 0x0F, 0xF0 }, // Cmd CAA goes to Bytes[3:0], Cmd CAB goes to Byte[7:4]
{ 0xFF, 0x00 }, // CTL (CS) goes to all bytes
{ 0x00, 0x00 }, // Unused in CNL MRC
{ 0x00, 0x00 }, // Unused in CNL MRC
{ 0x00, 0x00 }, // Unused in CNL MRC
},
// Channel 1:
{
{ 0x33, 0xCC }, // CLK0 goes to package 0 - Bytes[0,1,4,5], CLK1 goes to package 1 - Bytes[2,3,6,7]
{ 0x33, 0xCC }, // Cmd CAA goes to Bytes[0,1,4,5], Cmd CAB goes to Bytes[2,3,6,7]
{ 0xFF, 0x00 }, // CTL (CS) goes to all bytes
{ 0x00, 0x00 }, // Unused in CNL MRC
{ 0x00, 0x00 }, // Unused in CNL MRC
{ 0x00, 0x00 }, // Unused in CNL MRC
}
};
//
// DQS byte swizzling between CPU and DRAM - for SKL RVP1, RVP3, RVP13
//
GLOBAL_REMOVE_IF_UNREFERENCED const UINT8 mDqsMapCpu2DramSklRvp3[2][8] = {
{ 0, 1, 3, 2, 4, 5, 6, 7 }, // Channel 0
{ 1, 0, 4, 5, 2, 3, 6, 7 } // Channel 1
};
// LPDDR4 200b 8Gb die, DDP
// Samsung K4F6E304Hx-MGCH
// Hynix H9HCNNNBUUxLHR-NLx
// Micron MT53B512M32D2NP-062
// 3200, 28-29-29-68
// 2 ranks per channel, 2 SDRAMs per rank, 4x8Gb = 4GB total per channel
GLOBAL_REMOVE_IF_UNREFERENCED const UINT8 mLpddr4Ddp8Gb200bSpd[] = {
0x23, ///< 0 384 SPD bytes used, 512 total
0x10, ///< 1 SPD Revision 1.0
0x10, ///< 2 DRAM Type: LPDDR4 SDRAM
0x0E, ///< 3 Module Type: Not Hybrid (DRAM only) / Non-DIMM Solution (on-board DRAM)
0x15, ///< 4 8 Banks, no bank groups, 8 Gb SDRAM density
0x19, ///< 5 15 Rows, 10 Columns
0x95, ///< 6 Non-Monolithic DRAM Device, 2 die, 2 Channels per package, Signal Loading Matrix 1
0x08, ///< 7 SDRAM Optional Features: tMAW = 8192 * tREFI, Unlimited MAC
0x00, ///< 8 SDRAM Thermal / Refresh options: Reserved
0x40, ///< 9 Other SDRAM Optional Features: Post package repair supported, one row per bank group, Soft PPR not supported
0x00, ///< 10 Reserved
0x00, ///< 11 Module Nominal Voltage: Reserved
0x0A, ///< 12 Module Organization: 2 Ranks, x16 Device Width per Channel
0x22, ///< 13 Module Memory Bus width: 2 Channels, 32 bits channel width, no ECC
0x00, ///< 14 Module Thermal Sensor: none
0x00, ///< 15 Extended Module Type: Reserved
0x48, ///< 16 Signal Loading: Data/Strobe/Mask: 2 loads, CAC: 2 loads, CS: 1 load
0x00, ///< 17 MTB = 0.125ns, FTB = 1 ps
0x05, ///< 18 tCKAVGmin = 0.625 ns (LPDDR4-3200)
0xFF, ///< 19 tCKAVGmax = 32.002 ns
0x92, ///< 20 CAS Latencies supported (First Byte) : 14, 10, 6
0x55, ///< 21 CAS Latencies supported (Second Byte): 28, 24, 20, 16
0x00, ///< 22 CAS Latencies supported (Third Byte) :
0x00, ///< 23 CAS Latencies supported (Fourth Byte):
0x8C, ///< 24 Minimum CAS Latency (tAAmin) = 17.5 ns
0x00, ///< 25 Read and Write Latency Set options: Write Latency Set A and DBI-Read Disabled
0x90, ///< 26 Minimum RAS-to-CAS delay (tRCDmin) = 18 ns
0xA8, ///< 27 Row precharge time for all banks (tRPab) = 21 ns
0x90, ///< 28 Minimum row precharge time (tRPmin) = 18 ns
0xA0, ///< 29 tRFCab = 180 ns (8 Gb)
0x05, ///< 30 tRFCab MSB
0xD0, ///< 31 tRFCpb = 90 ns (8 Gb)
0x02, ///< 32 tRFCpb MSB
0, 0, 0, 0, 0, 0, 0, ///< 33 - 39
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ///< 40 - 49
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ///< 50 - 59
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ///< 60 - 69
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ///< 70 - 79
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ///< 80 - 89
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ///< 90 - 99
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ///< 100 - 109
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ///< 110 - 119
0x00, ///< 120 FTB for Row precharge time per bank (tRPpb) = 18 ns
0x00, ///< 121 FTB for Row precharge time for all banks (tRPab) = 21 ns
0x00, ///< 122 FTB for Minimum RAS-to-CAS delay (tRCDmin) = 18 ns
0x00, ///< 123 FTB for tAAmin = 17.5 ns
0x7F, ///< 124 FTB for tCKAVGmax = 32.002 ns
0x00, ///< 125 FTB for tCKAVGmin = 0.625 ns (LPDDR4-3200)
0x00, ///< 126 CRC A
0x00, ///< 127 CRC B
0, 0, ///< 128 - 129
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ///< 130 - 139
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ///< 140 - 149
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ///< 150 - 159
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ///< 160 - 169
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ///< 170 - 179
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ///< 180 - 189
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ///< 190 - 199
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ///< 200 - 209
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ///< 210 - 219
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ///< 220 - 229
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ///< 230 - 239
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ///< 240 - 249
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ///< 250 - 259
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ///< 260 - 269
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ///< 270 - 279
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ///< 280 - 289
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ///< 290 - 299
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ///< 300 - 309
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ///< 310 - 319
0x00, ///< 320 Module Manufacturer ID Code, Least Significant Byte
0x00, ///< 321 Module Manufacturer ID Code, Most Significant Byte
0x00, ///< 322 Module Manufacturing Location
0x00, ///< 323 Module Manufacturing Date Year
0x00, ///< 324 Module Manufacturing Date Week
0x55, ///< 325 Module Serial Number A
0x00, ///< 326 Module Serial Number B
0x00, ///< 327 Module Serial Number C
0x00, ///< 328 Module Serial Number D
0x20, 0x20, 0x20, 0x20, 0x20, ///< 329 - 333 Module Part Number: Unused bytes coded as ASCII Blanks (0x20)
0x20, 0x20, 0x20, 0x20, 0x20, ///< 334 - 338 Module Part Number
0x20, 0x20, 0x20, 0x20, 0x20, ///< 339 - 343 Module Part Number
0x20, 0x20, 0x20, 0x20, 0x20, ///< 344 - 348 Module Part Number
0x00, ///< 349 Module Revision Code
0x00, ///< 350 DRAM Manufacturer ID Code, Least Significant Byte
0x00, ///< 351 DRAM Manufacturer ID Code, Most Significant Byte
0x00, ///< 352 DRAM Stepping
0, 0, 0, 0, 0, 0, 0, ///< 353 - 359
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ///< 360 - 369
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ///< 370 - 379
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ///< 380 - 389
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ///< 390 - 399
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ///< 400 - 409
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ///< 410 - 419
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ///< 420 - 429
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ///< 430 - 439
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ///< 440 - 449
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ///< 450 - 459
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ///< 460 - 469
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ///< 470 - 479
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ///< 480 - 489
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ///< 490 - 499
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ///< 500 - 509
0, 0 ///< 510 - 511
};
#endif // _TIGERLAKE_SIMICS_SPD_TABLE_H_