Intel GOP 简介

GOP是 Grapshics Output Protocol 的缩写,这是 UEFI 定义的 Pre-OS 显示接口,目标就是提供显示的基本功能。 无论你使用何种显卡,如果想让屏幕在开机过程有所显示,必须遵从这个协议。这次简单介绍一下 Intel 的 GOP。

Intel 的GOP 会放在BIOS 中,可以看作 BIOS 的一部分。Intel Release 的 GOP有三部分:

1.IntelGopDriver: 这是DXE 的GOP Driver

2.IntelGraphicsPeim: 这是 PEI 阶段的 GOP。用户按下开机键后会希望尽快点亮屏幕看到提示信息,因此在 PEI 阶段点亮屏幕是非常必要的。如果希望上电就能显示,还可以去找屏幕厂商进行定制。

3.VBT:GOP 的配置文件,比如:要求某个端口输出eDP 还是HDMI信号。

BIOS 会在 PEI 阶段 调用IntelGraphicsPeim,然后 DXE 阶段调用IntelGopDriver.efi。和其他的 UEFI 下的Driver一样,这两个文件是C语言编写的,如果由需要可以联系Intel FAE 索要 DEBUG 版本的 GOP。

在OS启动过程中,OS Loader会通过 ExitBootervices()通知 Driver 退出,这时 GOP 会在从系统中卸载。但是 Intel GFX Driver会继续使用 VBT 提供的配置信息(之前的文章提到过如何在 Windows 下查找VBT)。

在 S4 和 S5 的阶段,会调用 GOP。但是 S3 和 ModernStandby 不会调用 GOP。特别是后者,如果遇到问题通常都是 Graphics Driver的问题。

目前用于修改 VBT 进行 GOP 配置的软件是: DisCon (Display Conigureation Tool),上一代的工具是 BMP (至少用了十年以上)。个人感觉这两种没有什么差别。使用的方法都是一个 Binary File 配合一个解释文件(BMP 用的是 BSF ,  DisCon 用的是 XML文件)来使用。特别注意,我感觉目前 DisCon 似乎还不稳定,有时候在解析 XML 配置文件的时候会遇到问题。出现这种问题请检查 DisCon 的版本和 VBT/Json 文件是否匹配。

特别提一下 VBT 一个新功能:LFP PnP ID。使用场景是:当你打算使用一个 VBT 支持多个LFP(Local Front Panel,内置屏幕),比如一个型号的笔记本有多个 SKU,使用了几种不同的屏幕。之前的解决方法是在 BIOS 中放置多个 VBT,然后通过 GPIO 之类的作为 BoardID,在POST过程中Load不同的 VBT。显而易见的是这样会比较麻烦,BIOS 改动较大(作为BIOS工程师,最好的设计就是不要BIOS修改)。另外,还有直接在C 代码中,通过结构体来更改 VBT 数值的方法,这种方法会让接手的人一头雾水:放在BIOS 中的 VBT 和最终 OS 下 Dump 出来的结果不同。因此,在新版的 VBT 中增加了使用 LFP PnP ID 来区分不同Panel 的方法。

1.在Select Panel Type 中选择Panel #FF

2.在 Panel #0X 的 PnP ID 中填写你屏幕的 PnP ID

3.在开机过程中 GOP ,会从 Panel #01 开始扫描,如果发现有匹配的 PnP ID ,那就会使用对应的 Panel 参数

4.对于这个功能,如果 GOP 扫描中没有发现,那么会使用 Panel #01 的设定值;如果Select Panel Type 中没有使用Panel #FF,那么这个功能不会开启。

《Intel GOP 简介》有8个想法

  1. Hi Ziv,
    The article is simple and beautiful, I have learn a lot.

    May I ask your opinion which stage will the GOP initial ready? If my screen not show any logo under pre-OS, wanna check is IntelGopDriver.efi or IntelGraphicsPeim.efi problem.
    Since GOP initial ready after capture complete panel EDID, I assume the answer is after DXE stage?

    To the article there's only one suggestion, default panel setting is not Panel#01 but depend on below setting. (the latest GOP are default Panel#03)
    "Integrated LFP configuration" -> "Device 1 (LFP1) configuration" -> "Select Panel type"

    Best regards,
    Mike

    1. Hi Mike,

      Usually we think iGFX is initialized during DXE stage. But as you know, customer want to lighten their display as early as possible. For this reason, IntelGraphicsPeim is a PEI module to prepare a framebuffer for display. After running this module, BIOS can show a pciture on screen. And in DXE stage, IntelGopDriver.efi would fully initialize the graphic card.

      Ziv

  2. 因為panel閃頻問題, 需要diable GOP sDRRS設定, 但調整Intel GOP設定 to diable sDRRS卻發現LFP panel configuration的參數都會跟著變動, 尤其是Panel的PWM設定會從PWM0變成PWM1導致panel malfuction.
    想請教如果要調整Intel GOP設定 to diable sDRRS for multiple panels, 應該如何設定較為正確

    1. 你这个问题听起来是 GOP 的Bug, 建议确保工具、GOP、VBT都是最新版本,如果仍然有问题,联系 Intel 查看。

    1. 据我所知,能调整的参数只有:

      Integrated Display Configuration ->
      LFP Panel Configuration ->
      Panel #0X ->
      eDP Fast Link Training Configuration Parameters ->
      Pre-Emphasis
      Voltage Swing

      修改之后如果有问题,请联系 Intel FAE 看看是否还有其他办法。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注