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

相关文章

Nginx分布式部署流程分析

《Nginx分布式部署流程分析》文章介绍Nginx在分布式部署中的反向代理和负载均衡作用,用于分发请求、减轻服务器压力及解决session共享问题,涵盖配置方法、策略及Java项目应用,并提及分布式事... 目录分布式部署NginxJava中的代理代理分为正向代理和反向代理正向代理反向代理Nginx应用场景

Spring Boot分层架构详解之从Controller到Service再到Mapper的完整流程(用户管理系统为例)

《SpringBoot分层架构详解之从Controller到Service再到Mapper的完整流程(用户管理系统为例)》本文将以一个实际案例(用户管理系统)为例,详细解析SpringBoot中Co... 目录引言:为什么学习Spring Boot分层架构?第一部分:Spring Boot的整体架构1.1

nodejs打包作为公共包使用的完整流程

《nodejs打包作为公共包使用的完整流程》在Node.js项目中,打包和部署是发布应用的关键步骤,:本文主要介绍nodejs打包作为公共包使用的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言一、前置准备二、创建与编码三、一键构建四、本地“白嫖”测试(可选)五、发布公共包六、常见踩坑提醒

Ubuntu向多台主机批量传输文件的流程步骤

《Ubuntu向多台主机批量传输文件的流程步骤》:本文主要介绍在Ubuntu中批量传输文件到多台主机的方法,需确保主机互通、用户名密码统一及端口开放,通过安装sshpass工具,准备包含目标主机信... 目录Ubuntu 向多台主机批量传输文件1.安装 sshpass2.准备主机列表文件3.创建一个批处理脚

一个Java的main方法在JVM中的执行流程示例详解

《一个Java的main方法在JVM中的执行流程示例详解》main方法是Java程序的入口点,程序从这里开始执行,:本文主要介绍一个Java的main方法在JVM中执行流程的相关资料,文中通过代码... 目录第一阶段:加载 (Loading)第二阶段:链接 (Linking)第三阶段:初始化 (Initia

Git打标签从本地创建到远端推送的详细流程

《Git打标签从本地创建到远端推送的详细流程》在软件开发中,Git标签(Tag)是为发布版本、标记里程碑量身定制的“快照锚点”,它能永久记录项目历史中的关键节点,然而,仅创建本地标签往往不够,如何将其... 目录一、标签的两种“形态”二、本地创建与查看1. 打附注标http://www.chinasem.cn

通过Docker容器部署Python环境的全流程

《通过Docker容器部署Python环境的全流程》在现代化开发流程中,Docker因其轻量化、环境隔离和跨平台一致性的特性,已成为部署Python应用的标准工具,本文将详细演示如何通过Docker容... 目录引言一、docker与python的协同优势二、核心步骤详解三、进阶配置技巧四、生产环境最佳实践

MyBatis分页查询实战案例完整流程

《MyBatis分页查询实战案例完整流程》MyBatis是一个强大的Java持久层框架,支持自定义SQL和高级映射,本案例以员工工资信息管理为例,详细讲解如何在IDEA中使用MyBatis结合Page... 目录1. MyBATis框架简介2. 分页查询原理与应用场景2.1 分页查询的基本原理2.1.1 分

redis-sentinel基础概念及部署流程

《redis-sentinel基础概念及部署流程》RedisSentinel是Redis的高可用解决方案,通过监控主从节点、自动故障转移、通知机制及配置提供,实现集群故障恢复与服务持续可用,核心组件包... 目录一. 引言二. 核心功能三. 核心组件四. 故障转移流程五. 服务部署六. sentinel部署

SpringBoot集成XXL-JOB实现任务管理全流程

《SpringBoot集成XXL-JOB实现任务管理全流程》XXL-JOB是一款轻量级分布式任务调度平台,功能丰富、界面简洁、易于扩展,本文介绍如何通过SpringBoot项目,使用RestTempl... 目录一、前言二、项目结构简述三、Maven 依赖四、Controller 代码详解五、Service