Hi Matt, Jay,

On 04.11.2017 03:25, Matt DeVillier wrote:
Hi Jay,

the SKL/KBL FSP blob published on Github is compatible with the headers
currently in coreboot, with the exception of the MEMORY_INFO_DATA_HOB - as
is, coreboot will not be able to parse the HOB and populate the SMBIOS
tables (minor adjustment needed, see: https://pastebin.com/Um9m7X43), but
otherwise it should boot and run without issue (at least it does on the
handful of SKL devices I've used it with, using both DDR3 and DDR4).  The
FSP signatures absolutely should match, so I'm not sure why you're seeing
otherwise

I'm not sure what versions you are comparing, I see many more diffe-
rences between Kabylake FSP from github (54b6a31) and upstream sky-
kabylake in coreboot (b2b2015, see attachment). Also in UPD values
(SpiFlashCfgLockDown and ThreeStrikeCounterDisable were added to FSPS
UPD, the former is used in coreboot).

Do I miss something? Is there another more recent published binary?

Nico


-Matt

On Fri, Nov 3, 2017 at 7:26 PM, Jay Talbott <[email protected]
wrote:

I’m trying to get coreboot up and running on an Intel RVP15 CRB, which is
the same as the RVP7 except that the RVP15 has DDR4 memory instead of DDR3.



There is a mainboard solution for the RVP7 in coreboot. However, the
current KabyLake FSP published on GitHub doesn’t seem like it’s the right
FSP for the SkyLake-U/KabyLake-U. If nothing else, there’s a problem with
that FSP such that the signature in the FSP-M UPD header does not match the
signature in the corresponding header files, so when the FSP 2.0 driver in
coreboot goes to check that they are a match, execution dies right there.



      if (upd->FspUpdHeader.Signature != FSPM_UPD_SIGNATURE)

            die("Invalid FSPM signature!\n");



(coreboot/src/drivers/intel/fsp2_0/memory_init.c, in function
do_fsp_memory_init)



I don’t want to bypass that check in the code in case the FSP posted to
GitHub isn’t the right FSP for this particular SoC…



Obviously, somebody at Intel has the right FSP that works for these boards
in order to validate that the coreboot implementation worked prior to
upstreaming it to the repo. I’m just not sure how to get the right one so
that I can get this booting.



Furthermore, I have yet to get the serial console working on the DB-9
serial port. I have the jumpers on the board configured to connect it to
UART #2, and configured in coreboot accordingly, but I get nothing for
console output.



Any help would be most appreciated!



Thanks,



- Jay

diff --git a/KabylakeFspBinPkg/Include/ConfigBlock/CpuConfigFspData.h 
b/KabylakeFspBinPkg/Include/ConfigBlock/CpuConfigFspData.h
index 94ca784..c8cdc5f 100644
--- a/KabylakeFspBinPkg/Include/ConfigBlock/CpuConfigFspData.h
+++ b/KabylakeFspBinPkg/Include/ConfigBlock/CpuConfigFspData.h
@@ -1,15 +1,22 @@
 /** @file
   FSP CPU Data Config Block.
 
-Copyright (c) 2017, 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.
+@copyright
+  Copyright (c) 2016 Intel Corporation. All rights reserved
+  This software and associated documentation (if any) is furnished
+  under a license and may only be used or copied in accordance
+  with the terms of the license. Except as permitted by the
+  license, no part of this software or documentation may be
+  reproduced, stored in a retrieval system, or transmitted in any
+  form or by any means without the express written consent of
+  Intel Corporation.
+  This file contains an 'Intel Peripheral Driver' and is uniquely
+  identified as "Intel Reference Module" and is licensed for Intel
+  CPUs and chipsets under the terms of your license agreement with
+  Intel or your vendor. This file may be modified by the user, subject
+  to additional terms of the license agreement.
 
+@par Specification Reference:
 **/
 #ifndef _CPU_CONFIG_FSP_DATA_H_
 #define _CPU_CONFIG_FSP_DATA_H_
@@ -56,10 +63,9 @@ typedef union {
     UINT32 SkipMpInit          : 1;                 ///< For Fsp only, Silicon 
Initialization will skip MP Initialization (including BSP) if enabled. For 
non-FSP, this should always be 0.
     UINT32 RsvdBits            : 15;                ///< Reserved for future 
use
     UINT32 Reserved;
-    } Bits;
-    UINT32 Uint32[2];
-  } CPU_CONFIG_FSP_DATA;
-
+  } Bits;
+  UINT32 Uint32[2];
+} CPU_CONFIG_FSP_DATA;
 #pragma pack (pop)
 
 #endif // _CPU_CONFIG_FSP_DATA_H_
diff --git a/KabylakeFspBinPkg/Include/FspmUpd.h 
b/KabylakeFspBinPkg/Include/FspmUpd.h
index 4bbc1aa..f3aa4c8 100644
--- a/KabylakeFspBinPkg/Include/FspmUpd.h
+++ b/KabylakeFspBinPkg/Include/FspmUpd.h
@@ -844,7 +844,7 @@ typedef struct {
 
 /** Offset 0x02E3 - Ring Downbin
   Ring Downbin enable/disable. When enabled, CPU will ensure the ring ratio is 
always
-  lower than the core ratio.<b>0: Disable</b>; 1: Enable.
+  lower than the core ratio. 0: Disable; <b>1: Enable.</b>
   $EN_DIS
 **/
   UINT8                       RingDownBin;
diff --git a/KabylakeFspBinPkg/Include/FspsUpd.h 
b/KabylakeFspBinPkg/Include/FspsUpd.h
index e91bc79..f4f4bad 100644
--- a/KabylakeFspBinPkg/Include/FspsUpd.h
+++ b/KabylakeFspBinPkg/Include/FspsUpd.h
@@ -165,9 +165,16 @@ typedef struct {
 **/
   UINT8                       ShowSpiController;
 
-/** Offset 0x0036
+/** Offset 0x0036 - Flash Configuration Lock Down
+  Enable/disable flash lock down. If platform decides to skip this 
programming, it
+  must lock SPI flash register DLOCK, FLOCKDN, and WRSDIS before end of post.
+  $EN_DIS
+**/
+  UINT8                       SpiFlashCfgLockDown;
+
+/** Offset 0x0037
 **/
-  UINT8                       UnusedUpdSpace0[2];
+  UINT8                       UnusedUpdSpace0;
 
 /** Offset 0x0038 - MicrocodeRegionBase
   Memory Base of Microcode Updates
@@ -477,7 +484,7 @@ typedef struct {
 
 /** Offset 0x020C - PCIe DeEmphasis control per root port
   0: -6dB, 1(Default): -3.5dB
-  0:Disable, 2:L1
+  0:-6dB, 1:-3.5dB
 **/
   UINT8                       PegDeEmphasis[3];
 
@@ -2053,9 +2060,15 @@ typedef struct {
 **/
   UINT8                       MeUnconfigIsValid;
 
-/** Offset 0x077A
+/** Offset 0x077A - Activates VR mailbox command for Intersil VR C-state 
issues.
+  Intersil VR mailbox command. <b>0 - no mailbox command sent.</b>  1 - VR 
mailbox
+  command sent for IA/GT rails only. 2 - VR mailbox command sent for IA/GT/SA 
rails.
+**/
+  UINT8                       IslVrCmd;
+
+/** Offset 0x077B
 **/
-  UINT8                       ReservedFspsUpd[6];
+  UINT8                       ReservedFspsUpd[5];
 } FSP_S_CONFIG;
 
 /** Fsp S Test Configuration
@@ -2100,7 +2113,7 @@ typedef struct {
   UINT8                       DmiIot;
 
 /** Offset 0x0789 - PEG Max Payload size per root port
-  0xFF(Default):Auto, 0x1: Force 128B, 0X2: Force 256B
+  0xFF(Default):Auto, 0x1: Force 128B, 0x2: Force 256B
   0xFF: Auto, 0x1: Force 128B, 0x2: Force 256B
 **/
   UINT8                       PegMaxPayload[3];
@@ -2513,25 +2526,25 @@ typedef struct {
 /** Offset 0x07DA - Enable or Disable Package C-State Demotion
   Enable or Disable Package C-State Demotion. 0: Disable; 1: Enable; <b>2: 
Auto</b>
   (Auto: Enabled for Skylake; Disabled for Kabylake)
-  $EN_DIS
+  0:Disable, 1:Enable, 2:Auto
 **/
   UINT8                       PkgCStateDemotion;
 
 /** Offset 0x07DB - Enable or Disable Package C-State UnDemotion
   Enable or Disable Package C-State UnDemotion. 0: Disable; 1: Enable; <b>2: 
Auto</b>
   (Auto: Enabled for Skylake; Disabled for Kabylake)
-  $EN_DIS
+  0:Disable, 1:Enable, 2:Auto
 **/
   UINT8                       PkgCStateUnDemotion;
 
 /** Offset 0x07DC - Enable or Disable CState-Pre wake
-  Enable or Disable CState-Pre wake. Disable; <b>1: Enable</b>
+  Enable or Disable CState-Pre wake. 0: Disable; <b>1: Enable</b>
   $EN_DIS
 **/
   UINT8                       CStatePreWake;
 
 /** Offset 0x07DD - Enable or Disable TimedMwait Support.
-  Enable or Disable TimedMwait Support. <b>Disable</b>; 1: Enable
+  Enable or Disable TimedMwait Support. <b>0: Disable</b>; 1: Enable
   $EN_DIS
 **/
   UINT8                       TimedMwait;
@@ -2599,7 +2612,7 @@ typedef struct {
 
 /** Offset 0x07E8 - Configuration for boot TDP selection
   Configuration for boot TDP selection; <b>0: TDP Nominal</b>; 1: TDP Down; 2: 
TDP
-  Up;0xFF : Deactivate
+  Up; 0xFF: Deactivate
   0:TDP Nominal, 1:TDP Down, 2:TDP Up, 0xFF:Deactivate
 **/
   UINT8                       ConfigTdpLevel;
@@ -2625,12 +2638,14 @@ typedef struct {
   UINT16                      StateRatio[40];
 
 /** Offset 0x083C - Interrupt Response Time Limit of C-State LatencyContol0
-  Interrupt Response Time Limit of C-State LatencyContol0. Range of value 0 to 
0x3FF
+  Interrupt Response Time Limit of C-State LatencyContol0.Range of value 0 to 
0x3FF,
+  Default is 0x4E, Server Platform is 0x4B
 **/
   UINT16                      CstateLatencyControl0Irtl;
 
 /** Offset 0x083E - Interrupt Response Time Limit of C-State LatencyContol1
-  Interrupt Response Time Limit of C-State LatencyContol1.Range of value 0 to 
0x3FF
+  Interrupt Response Time Limit of C-State LatencyContol1.Range of value 0 to 
0x3FF,
+  Default is 0x76, Server Platform is 0x6B
 **/
   UINT16                      CstateLatencyControl1Irtl;
 
@@ -2776,11 +2791,18 @@ typedef struct {
 **/
   UINT8                       EightCoreRatioLimit;
 
-/** Offset 0x0888 - ReservedCpuPostMemTest
+/** Offset 0x0888 - Set Three Strike Counter Disable
+  False (default): Three Strike counter will be incremented and True: Prevents 
Three
+  Strike counter from incrementing; <b>0: False</b>; 1: True.
+  0: False, 1: True
+**/
+  UINT8                       ThreeStrikeCounterDisable;
+
+/** Offset 0x0889 - ReservedCpuPostMemTest
   Reserved for CPU Post-Mem Test
   $EN_DIS
 **/
-  UINT8                       ReservedCpuPostMemTest[2];
+  UINT8                       ReservedCpuPostMemTest[1];
 
 /** Offset 0x088A - SgxSinitDataFromTpm
   SgxSinitDataFromTpm default values
@@ -2916,7 +2938,7 @@ typedef struct {
   UINT8                       PchPmDisableEnergyReport;
 
 /** Offset 0x0A2F - PCH Pm Pmc Read Disable
-  When set to true, this bit disallows host reads to PMC XRAM.
+  Deprecated
   $EN_DIS
 **/
   UINT8                       PchPmPmcReadDisable;
diff --git a/KabylakeFspBinPkg/Include/MemInfoHob.h 
b/KabylakeFspBinPkg/Include/MemInfoHob.h
index 2cd11f7..248b4d5 100644
--- a/KabylakeFspBinPkg/Include/MemInfoHob.h
+++ b/KabylakeFspBinPkg/Include/MemInfoHob.h
@@ -1,16 +1,32 @@
 /** @file
-  This file contains definitions required for creation of
-  Memory S3 Save data, Memory Info data and Memory Platform
-  data hobs.
 
-Copyright (c) 2017, 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.
+Copyright (c) 2016, Intel Corporation. All rights reserved.<BR>
 
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+Redistribution and use in source and binary forms, with or without 
modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice, this
+  list of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the above copyright notice, 
this
+  list of conditions and the following disclaimer in the documentation and/or
+  other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors may
+  be used to endorse or promote products derived from this software without
+  specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+  THE POSSIBILITY OF SUCH DAMAGE.
+
+  This file is automatically generated. Please do NOT modify !!!
 
 **/
 #ifndef _MEM_INFO_HOB_H_
@@ -125,7 +141,7 @@ typedef struct {
 #define MRC_DDR_TYPE_UNKNOWN  3
 #endif
 
-#define MAX_PROFILE_NUM 4 // number of memory profiles supported
+#define MAX_PROFILE_NUM     4 // number of memory profiles supported
 #define MAX_XMP_PROFILE_NUM 2 // number of XMP profiles supported
 
 //
@@ -154,59 +170,69 @@ typedef struct {
   UINT16 tWTR_S;    ///< Number of tCK cycles for the channel DIMM's minimum 
internal write to read command delay time for different bank groups.
 } MRC_CH_TIMING;
 
+typedef struct {
+  UINT8 SG;         ///< Number of tCK cycles between transactions in the same 
bank group.
+  UINT8 DG;         ///< Number of tCK cycles between transactions when 
switching bank groups.
+  UINT8 DR;         ///< Number of tCK cycles between transactions when 
switching between Ranks (in the same DIMM).
+  UINT8 DD;         ///< Number of tCK cycles between transactions when 
switching between DIMMs.
+} MRC_TA_TIMING;
+
 ///
 /// Memory SMBIOS & OC Memory Data Hob
 ///
 typedef struct {
-  UINT8  Status;                            ///< See MrcDimmStatus for the 
definition of this field.
-  UINT8  DimmId;
-  UINT32 DimmCapacity;                      ///< DIMM size in MBytes.
-  UINT16 MfgId;
-  UINT8  ModulePartNum[20];                 ///< Module part number for DDR3 
is 18 bytes however for DRR4 20 bytes as per JEDEC Spec, so reserving 20 bytes
-  UINT8  RankInDimm;                        ///< The number of ranks in this 
DIMM.
-  UINT8  SpdDramDeviceType;                 ///< Save SPD DramDeviceType 
information needed for SMBIOS structure creation.
-  UINT8  SpdModuleType;                     ///< Save SPD ModuleType 
information needed for SMBIOS structure creation.
-  UINT8  SpdModuleMemoryBusWidth;           ///< Save SPD ModuleMemoryBusWidth 
information needed for SMBIOS structure creation.
-  UINT8  SpdSave[MAX_SPD_SAVE];             ///< Save SPD Manufacturing 
information needed for SMBIOS structure creation.
+  UINT8            Status;                  ///< See MrcDimmStatus for the 
definition of this field.
+  UINT8            DimmId;
+  UINT32           DimmCapacity;            ///< DIMM size in MBytes.
+  UINT16           MfgId;
+  UINT8            ModulePartNum[20];       ///< Module part number for DDR3 
is 18 bytes however for DRR4 20 bytes as per JEDEC Spec, so reserving 20 bytes
+  UINT8            RankInDimm;              ///< The number of ranks in this 
DIMM.
+  UINT8            SpdDramDeviceType;       ///< Save SPD DramDeviceType 
information needed for SMBIOS structure creation.
+  UINT8            SpdModuleType;           ///< Save SPD ModuleType 
information needed for SMBIOS structure creation.
+  UINT8            SpdModuleMemoryBusWidth; ///< Save SPD ModuleMemoryBusWidth 
information needed for SMBIOS structure creation.
+  UINT8            SpdSave[MAX_SPD_SAVE];   ///< Save SPD Manufacturing 
information needed for SMBIOS structure creation.
 } DIMM_INFO;
 
 typedef struct {
-  UINT8         Status;                     ///< Indicates whether this 
channel should be used.
-  UINT8         ChannelId;
-  UINT8         DimmCount;                  ///< Number of valid DIMMs that 
exist in the channel.
-  MRC_CH_TIMING Timing[MAX_PROFILE_NUM];    ///< The channel timing values.
-  DIMM_INFO     Dimm[MAX_DIMM];             ///< Save the DIMM output 
characteristics.
+  UINT8            Status;                  ///< Indicates whether this 
channel should be used.
+  UINT8            ChannelId;
+  UINT8            DimmCount;               ///< Number of valid DIMMs that 
exist in the channel.
+  MRC_CH_TIMING    Timing[MAX_PROFILE_NUM]; ///< The channel timing values.
+  DIMM_INFO        DimmInfo[MAX_DIMM];      ///< Save the DIMM output 
characteristics.
 } CHANNEL_INFO;
 
 typedef struct {
-  UINT8            Status;                  ///< Indicates whether this 
controller should be used.
-  UINT16           DeviceId;                ///< The PCI device id of this 
memory controller.
-  UINT8            RevisionId;              ///< The PCI revision id of this 
memory controller.
-  UINT8            ChannelCount;            ///< Number of valid channels that 
exist on the controller.
-  CHANNEL_INFO     Channel[MAX_CH];         ///< The following are channel 
level definitions.
+  UINT8             Status;                  ///< Indicates whether this 
controller should be used.
+  UINT16            DeviceId;                ///< The PCI device id of this 
memory controller.
+  UINT8             RevisionId;              ///< The PCI revision id of this 
memory controller.
+  UINT8             ChannelCount;            ///< Number of valid channels 
that exist on the controller.
+  CHANNEL_INFO      ChannelInfo[MAX_CH];     ///< The following are channel 
level definitions.
+  MRC_TA_TIMING     tRd2Rd;                  ///< Read-to-Read   Turn Around 
Timings
+  MRC_TA_TIMING     tRd2Wr;                  ///< Read-to-Write  Turn Around 
Timings
+  MRC_TA_TIMING     tWr2Rd;                  ///< Write-to-Read  Turn Around 
Timings
+  MRC_TA_TIMING     tWr2Wr;                  ///< Write-to-Write Turn Around 
Timings
 } CONTROLLER_INFO;
 
 typedef struct {
-  EFI_HOB_GUID_TYPE EfiHobGuidType;
   UINT8             Revision;
-  UINT16            DataWidth;
+  UINT16            DataWidth;              ///< Data width, in bits, of this 
memory device
   /** As defined in SMBIOS 3.0 spec
     Section 7.18.2 and Table 75
   **/
-  UINT8             DdrType;                ///< DDR type: DDR3, DDR4, or 
LPDDR3
-  UINT32            Frequency;              ///< The system's common memory 
controller frequency in MT/s.
+  UINT8             MemoryType;             ///< DDR type: DDR3, DDR4, or 
LPDDR3
+  UINT16            MaximumMemoryClockSpeed;///< The maximum capable speed of 
the device, in megahertz (MHz)
+  UINT16            ConfiguredMemoryClockSpeed; ///< The configured clock 
speed to the memory device, in megahertz (MHz)
   /** As defined in SMBIOS 3.0 spec
     Section 7.17.3 and Table 72
   **/
   UINT8             ErrorCorrectionType;
 
   SiMrcVersion      Version;
-  UINT32            FreqMax;
   BOOLEAN           EccSupport;
   UINT8             MemoryProfile;
   UINT32            TotalPhysicalMemorySize;
-  UINT32            DefaultXmptCK[MAX_XMP_PROFILE_NUM]; // Stores the tCK 
value read from SPD XMP profiles if they exist.
-  UINT8             XmpProfileEnable;                   // If XMP capable 
DIMMs are detected, this will indicate which XMP Profiles are common among all 
DIMMs.
+  UINT32            DefaultXmptCK[MAX_XMP_PROFILE_NUM];///< Stores the tCK 
value read from SPD XMP profiles if they exist.
+  UINT8             XmpProfileEnable;                  ///< If XMP capable 
DIMMs are detected, this will indicate which XMP Profiles are common among all 
DIMMs.
   UINT8             Ratio;
   UINT8             RefClk;
   UINT32            VddVoltage[MAX_PROFILE_NUM];
@@ -239,6 +265,7 @@ typedef struct {
   MEMORY_PLATFORM_DATA Data;
   UINT8                *Buffer;
 } MEMORY_PLATFORM_DATA_HOB;
+
 #pragma pack (pop)
 
 #endif // _MEM_INFO_HOB_H_
-- 
coreboot mailing list: [email protected]
https://mail.coreboot.org/mailman/listinfo/coreboot

Reply via email to