哈斯韦尔和继任者还能掩盖 A20 线吗?

Can the A20 line still be masked off on Haswell and successors?

维基百科引用英特尔手册中的这一说法

The functionality of A20M# is used primarily by older operating systems and not used by modern operating systems. On newer Intel 64 processors, A20M# may be absent.

现在手册中确实有这个短语,但有歧义:

  1. A20M# 是仅指引脚还是指整个掩码?
  2. A20M event/interrupt在许多指令的描述中被命名(例如TXT GETSEC或VMX指令)

我所知道的

A20M# 针脚本身不见了,它曾被 DMI 中的 VLW(虚拟传统线)接口取代。 DMI 协议足够丰富,可以包含用于断言各种遗留 pin 的消息:

The PCH supports VLW messages as alternative method of conveying the status of the following legacy sideband interface signals to the processor: • A20M#, INTR, SMI#, INIT#, NMI

此语录出自PCH系列8(Haswell时代)。


到目前为止,PCH 具有 A20GATE 直通功能。
当 PCH 配置为捕获对传统 8042 IO 端口(60h、64h)的访问并改为提供 SMI(用于 PS2 模拟 USB keyboards/mice)时,它可以选择让 A20 线启用序列通过而不会被困住。

根据 PCH 的配置方式,这允许 EC(移动设备)或 SuperIO 芯片(台式机)成为命令序列的目标。


奇怪的是,PCH 系列 8(Haswell 时代)数据表,报告:

Note: A20M# functionality is not supported.

在 LPC 部分(EC/SuperIO 所在的位置),但这可能仅意味着 PCH 本身 不模拟 A20 门并且外部芯片(EC 或 SuperIO)必须处理它。

在这种情况下,PCI 必须有一个引脚才能被外部芯片断言。数据表没有提到任何。

不过,我在中文网站的某处找到了我以前的 Haswell 笔记本电脑的原理图,原理图显示引脚(实际上是球)AN10 (a.k.a.TP14) 用作 A20M输入引脚:

左边的蓝框标注为LYNX-POINT-DH82LPMS_BGA695

GATEA20信号的另一端来自EC(符合预期):

IT8586E/AX是联想的EC(貌似)。

所以 A20 线仍然可以在 Haswell 平台上屏蔽掉,除非我误解了原理图。

因此,关于 A20M 方面的数据表并不完整。 Intel 的 BIOS Writer Guide 可能包含了所有内容。


我想知道的

是否可以在至少一个 Haswell 平台上禁用 A20 线? Skylake 和继任者呢?

我做了什么

I wrote a simple legacy boot loader that checks if the A20 line is enabled and try to disable it:

  1. 如果A20线被禁用,则测试结束。 A20门功能存在于测试平台。
  2. 否则,它 asks the BIOS the supported A20 gate methods and then ask it to disable the A20 line(我相信 OSDev 的功能命名法,即启用与禁用什么东西,所以我希望调用禁用 A20 而不是掩码)
  3. 如果 BIOS 返回错误,程序将通过 KBC 禁用 A20 线,使用快速 a20 方法和端口 0eeh 方法。
  4. 再次测试A20线路状态。如果它仍然启用,请手动禁用它(除非它已经完成)并再次测试它。

当我 运行 在我的 Skylake 笔记本电脑上执行此操作时,BIOS 返回仅支持快速 A20 方法并且没有发出错误信号,但 A20 线路仍处于启用状态。即使手动禁用它,A20 线仍然启用。

我的结论是 A20 线不能在 Skylake 上禁用,即它不存在了。

似乎至少有一个Skylake平台不能再禁用A20线了。

除了我的测试,我还找到了我可以在网上找到的第一个 Skylake 笔记本电脑示意图 (Acer Swift SF314-51):

右边是EC,它有一个A20GATE connected/pulled高达+3VS。
我不太熟悉这个示意图中的符号,但这些是唯一存在的 A20GATE 迹线,与 PCH 没有连接。

考虑到(根据数据表)PCH 不支持 A20 门仿真,这似乎是支持此平台上缺少 A20 屏蔽功能的有力证据.

这个推理是有效的iif 我已经正确理解了原理图并且只证明 存在 最近的 x86 平台,其中 A20 掩蔽不存在了。


在有人给出更完整的答案之前,我将不回答这个问题。

VLW 甚至在 PCH 之前就存在了,因为 'IOAPIC virtual wire mode' 通过 ICH DMI / APIC 总线模拟来自 8259A 的 INTR 输入,这与将 8259A INTR 指向 LINT 引脚 INTR 的 LAPIC 虚拟线模式相反硬连接到。 'PIC mode' 绕过 LAPIC 直接连接到 BSP 逻辑核心的 INTR 引脚。

并且当第一个 PCH 到达时,所以 Ibex Peak for Nehalem-EX, A20M# disappeared. It can now only be emulated by the PCH as a VLW A20M interrupt, and VLW is apparently an undocumented U2C (uncore to core) IDI opcode separate to IntLog/Phy. VLWs are broadcast to all cores by the Ubox/IIO (and internally to the LAPICs) in the same manner that the 2 CPU LINT pins are shared by all LAPICs (for INTR, NMI etc., only one processor should have an unmasked LINT entry(作为 ExtInt))(并且那些 LINT 引脚直接连接到从 8259A 和 NMI 源(PCH / DRAM)发出的 INTR,而 IOAPIC 消息是通过 DMI(以前是通过 APIC 总线)传输的 PCI VLW)。 IOH SAD 曾经包含 QPIPNCB 以进一步过滤 VLW——假设它现在存在于 IIO 中。我认为 VLW 被传递到 INTR 虚拟连接到的 LINT 引脚的 LVT LINT 条目,如果 LAPIC 被禁用,那么它直接进入 INTR

A20GATE is driven to the PCH by the EC yes, and this causes the A20M VLW or A20M# pre-PCH (Port 92h also can trigger A20M#). A20M# is a separate pin to LINT and detection of A20M# happens at a macroinstruction boundary。据推测,VLW 也被所有内核吸收,并在宏指令边界中断所有逻辑内核。 A20M 中断 MSROM 处理程序可以像使用当前 IP 刷新和重新启动指令流一样简单,并启用新设置,该设置更改 AGU 地址生成以屏蔽该位,使地址回绕。由于它是电平敏感的,当它被置低时会有另一个中断。

this Haswell M, A20GATE is still here as GA20 on the LPC interface, and it's also there on your Skylake U。我不确定它是否连接在原理图上,电线上没有 x,也没有定向网络标签,但 AG20GATE 网络标签在那里,这表明它已连接,但我不确定大的是什么蓝色类型的端子符号表示与没有标签符号和标签的电线相比有什么区别,与带有标签符号和标签的电线相比有什么区别。当它说 A20M# 不受支持时,这意味着物理引脚,但支持生成 VLW 的 IOAPIC。支持 A20GATE 直通意味着这些设备可以启用 A20 掩码。

Intel SDM(2021 年 4 月版)第 3 卷第 8.7.13.4 节(外部信号兼容性)说:

The functionality of A20M# is used primarily by older operating systems and not used by modern operating systems. On newer Intel 64 processors, A20M# may be absent.

(重点是我的)。

它没有指定何时删除它,但你可以假设它从某个时间点开始不可用。