Ice Lake CPU RESET流程

2024-06-13 00:18
文章标签 流程 cpu reset lake ice

本文主要是介绍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流程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1055754

相关文章

java Long 与long之间的转换流程

《javaLong与long之间的转换流程》Long类提供了一些方法,用于在long和其他数据类型(如String)之间进行转换,本文将详细介绍如何在Java中实现Long和long之间的转换,感... 目录概述流程步骤1:将long转换为Long对象步骤2:将Longhttp://www.cppcns.c

Java进程CPU使用率过高排查步骤详细讲解

《Java进程CPU使用率过高排查步骤详细讲解》:本文主要介绍Java进程CPU使用率过高排查的相关资料,针对Java进程CPU使用率高的问题,我们可以遵循以下步骤进行排查和优化,文中通过代码介绍... 目录前言一、初步定位问题1.1 确认进程状态1.2 确定Java进程ID1.3 快速生成线程堆栈二、分析

conda安装GPU版pytorch默认却是cpu版本

《conda安装GPU版pytorch默认却是cpu版本》本文主要介绍了遇到Conda安装PyTorchGPU版本却默认安装CPU的问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的... 目录一、问题描述二、网上解决方案罗列【此节为反面方案罗列!!!】三、发现的根本原因[独家]3.1 p

Linux CPU飙升排查五步法解读

《LinuxCPU飙升排查五步法解读》:本文主要介绍LinuxCPU飙升排查五步法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录排查思路-五步法1. top命令定位应用进程pid2.php top-Hp[pid]定位应用进程对应的线程tid3. printf"%

spring-gateway filters添加自定义过滤器实现流程分析(可插拔)

《spring-gatewayfilters添加自定义过滤器实现流程分析(可插拔)》:本文主要介绍spring-gatewayfilters添加自定义过滤器实现流程分析(可插拔),本文通过实例图... 目录需求背景需求拆解设计流程及作用域逻辑处理代码逻辑需求背景公司要求,通过公司网络代理访问的请求需要做请

使用JavaConfig配置Spring的流程步骤

《使用JavaConfig配置Spring的流程步骤》JavaConfig是Spring框架提供的一种基于Java的配置方式,它通过使用@Configuration注解标记的类来替代传统的XML配置文... 目录一、什么是 JavaConfig?1. 核心注解2. 与 XML 配置的对比二、JavaConf

Java对接Dify API接口的完整流程

《Java对接DifyAPI接口的完整流程》Dify是一款AI应用开发平台,提供多种自然语言处理能力,通过调用Dify开放API,开发者可以快速集成智能对话、文本生成等功能到自己的Java应用中,本... 目录Java对接Dify API接口完整指南一、Dify API简介二、准备工作三、基础对接实现1.

判断PyTorch是GPU版还是CPU版的方法小结

《判断PyTorch是GPU版还是CPU版的方法小结》PyTorch作为当前最流行的深度学习框架之一,支持在CPU和GPU(NVIDIACUDA)上运行,所以对于深度学习开发者来说,正确识别PyTor... 目录前言为什么需要区分GPU和CPU版本?性能差异硬件要求如何检查PyTorch版本?方法1:使用命

将Java项目提交到云服务器的流程步骤

《将Java项目提交到云服务器的流程步骤》所谓将项目提交到云服务器即将你的项目打成一个jar包然后提交到云服务器即可,因此我们需要准备服务器环境为:Linux+JDK+MariDB(MySQL)+Gi... 目录1. 安装 jdk1.1 查看 jdk 版本1.2 下载 jdk2. 安装 mariadb(my

Spring AI ectorStore的使用流程

《SpringAIectorStore的使用流程》SpringAI中的VectorStore是一种用于存储和检索高维向量数据的数据库或存储解决方案,它在AI应用中发挥着至关重要的作用,本文给大家介... 目录一、VectorStore的基本概念二、VectorStore的核心接口三、VectorStore的