本文主要是介绍Ice Lake CPU RESET流程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1、 处理器支持3种reset,分别是cold reset和warm reset和PWRGD reset;
a) cold reset是指在首次上电触发CPU的PWRGOOD和RESET_N,其中PWRGD的触发需要在Base Clock就绪并且power都已经稳定之后才可以,该reset将会复位处理器里的所有的状态,包括被其他reset阻止的sticky state。
b) warm reset是指RESET_N被触发并解触发,在PWRGOOD信号保持触发的状态下。Warm reset会保存error log和系统检查bank状态(machine check bank states)用来做error分析。
i. 一个干净的warm reset的典型流程应该开始于BIOS给CF9寄存器写值;紧随Reset_Warn,PCH会用GO_S1_RW来作为响应;这些信息通过DMI由PCH发给CPU。RESET_N信号被触发,PCH和处理器之间的握手(handshake)将会提示CPU接下来即将发生RESET,并允许其做相关的准备。当GO_S1_RW周期握手完成后,处理器会将所有的核(cores)置于静止状态(期间core将不会expect任何traffic)并过度至LFM(low frequency Mode)。当warn reset 周期完成之后,处理器会drain 他的IO 队列(queues),将memory置于自刷新(self-refresh)如果需要的话,并且将PCIe和DMI3的链接置于L2。当从reset重新恢复的时候,PLL(除了filter PLL和PCU PLL外)将会被重新锁定。IO链接将会经历初始化和校准。
ii. 一个突发的热复位多数因为error而发生,没有来自于PCH的GO_S1_RW和Reset_Warn来触发RESET_N。
c) PWRGOOD复位类似于cold reset,是指PWRGOOD解触发而RESET_N被触发。这种复位方式bypass了Voltage Regulator的上升时间。FIVRs(full integrated voltage regular,集成式调压模块,cpu die上集成电源vr技术)将会重新上电因为当PWRGOOD解触发的时候,所有的片上FIVRs都会掉电。
2、 Reset Flow
Reset Flow包含7个阶段
(1) Phase 1 and 2 (Expectation from the platform)
该阶段的主要功能是起电源井(bring up power wells),以CPU PWRGOOD触发为结束。Platform预期将会按照如下的顺序触发信号:
PWRGD解触发并且RESET_N被触发;
在所有的外部电(external power rails)起来并且refrence clock(BCLK)稳定2ms之后,平台触发PWRGD和继续触发RESET_N信号给socket;
PWRGD必须有一个明确的边沿(clean edge);
只要所有的外部电源都保持稳定的话,则PWRGD持续触发
(2) Phase 3(Early CPu infrastructure bring up)
该阶段的主要目的是初始化片上的逻辑和必要的时钟用来结束PCU的复位状态(bring the PCU out of reset),进入到此阶段则表明平台已经稳定了参考时钟并且平台的电源轨(power rail)都已经起来了。实质上,在触发PWRGD之前平台所有需要依赖的条件都已经满足。
触发PWRGD(从Phase2到Phase3的触发条件)
早期启动power well,FIVR启动(Early boot power well/FIVR ramps up)
Filter PLL和PCU PLL锁定
PCU提出复位(bring up of reset)并且开始下载fuse(download of fuses)
解触发PCH reset signal预示着从phase 3到phase 4的过渡;
(3) Phase 4 (PCH and uncore agent subsystem bring up)
该阶段的作用是启动边带寄出设备(side-band infrastructure)、共享FIVR 和 PLL和任何不需要从PCH得到strap信息的子系统;Strap信息在DMI link训练完成之后被发送。在状态的最后,RESET_N到处理器将会解复位。
PCH微控制器从复位中出来后(come out of reset),开始复位pcode执行器,这个是计划的“重进入”点对于Warm Reset processing来说。(This is the planned ‘re-entry’ point for warm Reset processing)
全局PMSB(Power Management IOSF sideband)和GPSB(General
Purpose IOSF sideband)从复位中被带出
PECI和SPD SMBUS从复位中走出
SVID接口被设置来初始化外部的VR的输入电压为目标值
PLL将DMI3、intel UPI和PCIe link的锁定
在DMI link 训练完成后strap information将会被发送
RESET_N信号的解触发会完成PCU的复位并且标志着从P4阶段转移到p5阶段
(4) Phase5 (Uncore initialization and core bring up)
该阶段的作用是初始化非核(uncore)和完成core的复位
P5是在外部pin RESET_N解触发完成之后进入的。Boot mode related straps可以使用同时他们会在PWRGOOD触发的时候被采样;
Pcode服务DMI3的握手协议(pcode services DMI3 handshake protocol)。如果DMI3的连接使用了DMI3模式,那么pcode开始DMi3连接的训练并且检查链路是否被训练为L0 gen1的速率。如果是传统的socket(legacy socket),并且如果DMI3并没有在3到4ms的时间内达到L0,那么pcode将会执行error flow。在一个非传统socket上,如果DMI3 link没有被训练为L0,那么pcode将不会记录MCA(will not log an MCA)并且不会触发CATERR_N。
Pcode基于straps修饰boot模式流程(pcod performs boot mode processing based on straps)。它会合适地设置advertised firmware,IO,和Intel TXT(Trusted Execution Technology(可信执行技术)) agent bit。它也会根据straps来升级intel UPI 参数交换寄存器(parameters exchange register)。
开始intel UPI链路的训练:(a)在传统socket下,会从slow mode开始UPI链路的training,然后停在参数交换(parameter exchange)(stalling at parameter exchange will hold peer socket from completing its link training and hence the reset sequence)。没有均衡被pcode执行;(b)在非传统socket下开始UPI 链路训练,链路连接到传统的socket将不会完成训练直到传统socket上的uncore初始化和DMI3 握手完成。链路连接到remote
socket将会完成训练和初始化。
Pcode决定了核数(core)、切片数(slices)和核的st/mt-threading数量。在这一步pcode也计数了BIOS禁止的核的数量。Pcode决定是否BIST应该被执行。如果BIST
strap被设置或者被请求之后,BIST将会被执行;
Pcode编程(program)了内存控制逻辑(memory controller logical ids)并且从物理转换到逻辑模式;
LLC复位并配置
如果BMCINIT strap被设置,pcode进入SSP模式,并且pcode服务PECI接口来允许PECI主机来配置非核。如果它不是service processor boot mode,pcode等待链接来得到参数交换(parameter exchange)
Pcode使用intel UPI parameter exchange寄存器来配置返回路径(return route)到所有的事务(agents found at one-hop distance)
Core完成reset
(5) Reset phase 6(Microcode execution)
这一步是在core完成内部reset序列并准备开始fetch。如果没有线程被委派(designated)为boot strap processor(BSP),然后它将会进入等待状态。否则它开始抓取Architectrue Reset Vector并且开始BIOS的执行;
在开始前应假设:(a)在这个阶段开始前,以下信息应该被提供给core:APIC-ID,是否是BSP,SMT enable/disable,reset模式(cold,warm,C6 exit)
获取BIOS所需的非核心(uncore necessary to the get to the BIOS)并且TXT地址空间全部初始化完成;
在这一阶段:
初始化内核的内部结构,阵列,微架构和结构状态(architectural)
执行MLC BIST ,如果BIST被允许的话
从非核读取LLC BIST 结果,并且在EAX register中报告;
报告LLC和MLC BIST结果
被选择为BSP的核和线程将会抓取BIOS或进入到等待状态;
结束时应假设至少有一个线程被委派为BSP包
(6) Reset phase 7(BIOS execution and memory controller bring up)
在该阶段下,BIOS开始在内核中跑起来并且通过(go through)了所有必要的枚举和设置(enumeration & set up)。内存控制子系统也完成了复位在该状态中,这一节描述了BIOS需要去做什么来配置处理器;
开始的假设为:(a)到BIOS的路径已经建立起来(通过UPI或者DMi3)(b)到Intel TXT 地址空间的路径已经建立起来
这一节至描述了BIOS针对处理器的任务,在OS接管之前
Program CPUBusNo:CPUBusNo描述了PCI配置空间的Bus number。该寄存器将会被设置为0并且在所有类型的reset中被标志为无效(marked invalid)。BIOS将会需要将核实的bus number编程进这个寄存器中,并且将这个寄存器标志位有效。直到这个有效位被设置之前,CPU都不会解码bus#到配置tx传输上(config tx transactions)。所有的传输都会被socket在本地消耗。
DDR/IMC bring up:将memory 子系统带离reset,bios需要按照如下流程:(需要注意的是,在目前的版本的处理器中,IMC的bring up会在较早的时候被提出。在这一阶段会改变频率)(a)BIOS询问DIMM和配置预期的DDR连接速率;(b)BIOS处理SET_MC_FREQ指令给pcode,后者然后锁定IMC PLLs并且bring up IMC按照需要的速率;
UPI link configuration:从cold reset中出来或者S3重新恢复(resume)时,Intel UPI连接将会按照slow mode来建立(come up)。BIOS询问平台的其他socket来找到被各种socket所支持的频率最高的共同分母(the highest common denominator of frequencies supported by various
socket)。流程如下:BIOS编程新的intel UPI PLL 速率并且通过BIOS到pcode的Mailbox command来指示fast mode。
Core min/max ratio change:BIOS将会需要为每一个socket里的FlexRatioMSR来编程;
Core Enable/Disable flow:平台允许的内核将会在Resolved_Core里被报告。BIOS将会编程内核来disable CSR_DESIRED_CORES里的mask;
Credit 初始化在uncore中
调用平台的warm reset来是上述的改变生效
其他在该阶段执行的任务包括:
BIOS调用phase shedding在DRAM VR,通过调用MailBox_BIOS_CMD_VDD_RAMP
BIOS处理comm决定哪一个DRAM被CPU发现,CPU在冷复位时会做一次这样的动作
理器将会支持cold boot序列,其中包括DDR电源的设置。BIOS需要决定平台上VR的类型并调整电压为预期的电压值;
BIOS将会需要初始化多种电源管理特性在交给OS接管之前
这篇关于Ice Lake CPU RESET流程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!