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

相关文章

Spring AI ectorStore的使用流程

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

python之流程控制语句match-case详解

《python之流程控制语句match-case详解》:本文主要介绍python之流程控制语句match-case使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录match-case 语法详解与实战一、基础值匹配(类似 switch-case)二、数据结构解构匹

Android如何获取当前CPU频率和占用率

《Android如何获取当前CPU频率和占用率》最近在优化App的性能,需要获取当前CPU视频频率和占用率,所以本文小编就来和大家总结一下如何在Android中获取当前CPU频率和占用率吧... 最近在优化 App 的性能,需要获取当前 CPU视频频率和占用率,通过查询资料,大致思路如下:目前没有标准的

在VSCode中本地运行DeepSeek的流程步骤

《在VSCode中本地运行DeepSeek的流程步骤》本文详细介绍了如何在本地VSCode中安装和配置Ollama和CodeGPT,以使用DeepSeek进行AI编码辅助,无需依赖云服务,需要的朋友可... 目录步骤 1:在 VSCode 中安装 Ollama 和 CodeGPT安装Ollama下载Olla

linux环境openssl、openssh升级流程

《linux环境openssl、openssh升级流程》该文章详细介绍了在Ubuntu22.04系统上升级OpenSSL和OpenSSH的方法,首先,升级OpenSSL的步骤包括下载最新版本、安装编译... 目录一.升级openssl1.官网下载最新版openssl2.安装编译环境3.下载后解压安装4.备份

C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)

《C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)》本文主要介绍了C#集成DeepSeek模型实现AI私有化的方法,包括搭建基础环境,如安装Ollama和下载DeepS... 目录前言搭建基础环境1、安装 Ollama2、下载 DeepSeek R1 模型客户端 ChatBo

Go使用pprof进行CPU,内存和阻塞情况分析

《Go使用pprof进行CPU,内存和阻塞情况分析》Go语言提供了强大的pprof工具,用于分析CPU、内存、Goroutine阻塞等性能问题,帮助开发者优化程序,提高运行效率,下面我们就来深入了解下... 目录1. pprof 介绍2. 快速上手:启用 pprof3. CPU Profiling:分析 C

Linux流媒体服务器部署流程

《Linux流媒体服务器部署流程》文章详细介绍了流媒体服务器的部署步骤,包括更新系统、安装依赖组件、编译安装Nginx和RTMP模块、配置Nginx和FFmpeg,以及测试流媒体服务器的搭建... 目录流媒体服务器部署部署安装1.更新系统2.安装依赖组件3.解压4.编译安装(添加RTMP和openssl模块

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

springboot启动流程过程

《springboot启动流程过程》SpringBoot简化了Spring框架的使用,通过创建`SpringApplication`对象,判断应用类型并设置初始化器和监听器,在`run`方法中,读取配... 目录springboot启动流程springboot程序启动入口1.创建SpringApplicat