WeHack BBS
[讨论] 如何移植coreboot到Skylake及更新的Intel主板? - 可打印的版本

+- WeHack BBS (https://bbs.wehack.space)
+-- 版块: 计算机技术 (https://bbs.wehack.space/forum-5.html)
+--- 版块: 固件技术讨论区 (https://bbs.wehack.space/forum-8.html)
+--- 主题: [讨论] 如何移植coreboot到Skylake及更新的Intel主板? (/thread-322.html)



[讨论] 如何移植coreboot到Skylake及更新的Intel主板? - vimacs - 11-19-2021

我想实践一下Skylake平台的coreboot移植,但是一直都没动手。以前整理过一些资料,现在找不到了,所以只好重新整理,并且在这里开个帖子记录一下。如果有人收集到相关的资料,也可以在这里写一下。

我参考的主板是 ASRock H110M-DVS REV2.0, 之前好不容易在闲鱼上找到一块,但是现在也很久没开机了。

对于Sandy/Ivy Bridge,我们有 autoport 工具,对于 Haswell/Broadwell,方法也是类似的,我把这两代平台的 autoport 也实现了,并且移植了几个主板。但是到了 Skylake 这代,PCH 有很多东西和以前的平台不一样了,而且使用的 blob 也变成了完整版的 FSP,配置方法很不一样。

对于 GPIO 的配置,coreboot 提供了 intelp2m 工具。

我想重点谈的是 PCIe 设备的配置问题,例如 H110M-DVS 的:

https://review.coreboot.org/plugins/gitiles/coreboot/+/refs/heads/master/src/mainboard/asrock/h110m/devicetree.cb#134

我们怎么获得 PcieRpClkReqSupport, PcieRpClkReqNumber 这些参数的值?这些东西好像没什么文档。不过我手上有以前泄露出的 Intel FSP 源码,可以从这里找线索。据说 FSP 源码也可以通过和 Intel 签 NDA 获得。泄露的源码有两个版本,一个是比较早的 Intel FSP leak,另一个是个几十G的 Intel exconfidential Lake drop 1,后者的版本要新一些,功能更完整,所以我们参考后者。

我以前应该整理过关于 ClkReqNumber 这个参数的获取方法。

可以参考这段源码,Skylake和Kabylake都有。

代码:
// KabylakeSiliconPkg/Pch/Library/Private/PeiDxeSmmPchPciExpressHelpersLib/PchPciExpressHelpersLibrary.c
/**
  This returns ClkReq Number from Port Number

  @param[in]    PortIndex     PCIe Port Number (Zero Base)

  @retval       ClkReq Number
**/
UINT8
GetPortClkReqNumber (
  IN      UINT8           PortIndex
  )
{
  UINT8 ClkReqNum;
  PchPcrRead8 (PID_FIA, R_PCH_PCR_FIA_DRCRM1 + (PortIndex / 2), &ClkReqNum);
  if (PortIndex % 2 == 0) {
    ClkReqNum &= 0x0F;
  } else {
    ClkReqNum = ClkReqNum >> 4;
  }
  return ClkReqNum;
}


而初始化的过程可以见 KabylakeSiliconPkg/Pch/Library/Private/PeiPchInitLib/PchInit.c 的 PchConfigureClkreqMapping 函数,这个函数也写了 PID_FIA PCR.

PID_FIA 是 0xCF, R_PCH_PCR_FIA_DRCRM1 是 0x100.


RE: [讨论] 如何移植coreboot到Skylake及更新的Intel主板? - vimacs - 11-20-2021

试着用inteltool读PCR,结果读PCR 0xCF的时候把系统读死机了,改一下inteltool的代码让它读到offset=0x200的地方,发现0x100附近的值全是0,不知道为什么。