Bios工程师手边事—SBIOS添加EC功能

UEFI学习(四)-- SIO的Read与Write SIO默认是通过2E/2F访问,这个访问的通道在EC/SIO里面可以通过更改寄存器来更改;访问SIO的方式已经知道了,接下来实际操作一下,用以上的code去访问并Print出SIO address的value;因为0x2E/0x2F这两个通道地址我们需要经常用到,且有概率变更为4E/4F,所以可以定义一个宏定义,方便后续更改;既然知道了访问地址空间的通道是什么,接下来看Spec,查看通过通道访问的规范;EC与SIO都可以通过4E/4F 2E/2F去访问特定的地址空间; 阅读详情
AI摘要

本文详细介绍了在SBIOS中如何添加EC功能模块,包括IO地址解码、逻辑设备使能、62/66端口处理以及ASL宣告Device。通过理解EC的访问方式和资源配置,有助于实现EC在BIOS中的正常工作。

前言:敬畏主就是智慧,远离恶便是聪明(还是守着本心吧)。

在笔记本平台中,我们经常用到EC芯片。从BIOS角度来看,EC在平台中的地位和SuperIO,BMC没有什么不同:都是挂在LPC下面;所用IO端口都要解码至LPCbridge上;都要为ACPI OS提供ASL Device,以供其驱动装载和调用。

    本文针对EC,谈一下在SBIOS中如何添加其功能模块,使得EC功能可以正常使用。如果知道EC怎么访问,那么SuperIO和BMC也就没什么特殊的了。

 

1. IO地址解码

SBIOS如果想访问EC,就需要将HOST端的IO地址和EC端的寄存器对应起来。只有这样,HOST端才可以和EC通信。想做到这些,必须要做两件事。使能逻辑设备和解码相应IO地址至LPC bridge。

 

1.1 使能逻辑设备

1.1.1 BaseAddress

首先要搞懂EC所使用的Base Address,因为想要访问逻辑设备,都是通过Base Address来进行的。这是一对IO端口,我们经常叫做Index IO,Data IO。对于以前的EC芯片,Base Address都是通过HW进行strap的,现在的EC芯片大多是sw进行strap的,直接在EC里面将想使用的Base Address填入特定的寄存器即可。Base Address一般是2E/2F,4E/4F,164E/164F其中一对,当然我们也可以自定义。只要在EC中填写相应的值,然后在LPC bridge中进行解码即可。

1.1.2 逻辑设备

    从整个平台来讲,EC属于LPC下的一个物理设备。但其功能上,可以划分很多模块,如Keyboard,Mouse,PM1,PM2,PM3,UART,CIR,SHM等,我想这就是称其为逻辑设备的原因吧。我们可以对单独的某个逻辑设备进行使能和禁止,因为每一个逻辑设备都对应一个逻辑设备号。我们访问逻辑设备时,首先要将逻辑设备号写入PNPCFG register的offset 07处,这样就选择了该逻辑设备,在改写其0x30~0xFF处的值,就等于对该逻辑设备进行配置了。

 

那么我们来看一下下面一段代码:

IoWrite8(0x4E,0x07);

IoWrite8(0x4F,0x05);

IoWrite8(0x4E,0x30);

IoWrite8(0x4F,0x01);

从代码中可看到,BaseAddress是0x4E/0x4F。前两行代码,是选择了一个逻辑设备号为5的设备。后两行是使能该逻辑设备。有过这方面经验的工程师一看到5,就知道这个是使能键盘了。其所使用的IO地址默认为60/64,分别在PNPCFGregister的offset 60,61,62,63处填写。

 

1.2 解码至LPC

    真要做到地址解码,除了EC端还不行,那只是EC端的一厢情愿。如果要解码60/64,LPC Bridge首先要承认这个IO地址属于它的,也就是要把60/64解码到LPC桥上。那么X86 CPU在BUS上访问60/64时,LPC才会将相应数据抓过来。对于INTEL的桥片来说,解码60/64很简单,只需要在LPC config space里使能相应bit位即可。

对于一些不常用的IO端口,如果EC想据为已有,怎么办呢?对于INTEL桥片来讲,其lpc bridge上有专门的四个decode range寄存器,我们可以用它们来解码相应的IO。然后在EC的逻辑设备中选择一个,在60/61/62/63处填写即可。

 

这些做完之后,DXE阶段的驱动所需要的资源就准备好了。Keyboard,Mouse,UART的驱动就可以正常地使用了。

 

2. 62/66端口

如果有人问我,对于BIOS工程师来讲,EC区别于SUPERIO之处在哪里?我会回答,62/66端口。因为有SUPER IO的平台,ACPI OS下不会有EC的驱动,有EC的平台,ACPI OS会加载一个EC驱动。因为EC的驱动所需要的重要资源之一,就是62/66端口,这是EC所独有的。

系统如何访问62/66端口,都在ACPI SPEC中第12章节写明。具体看下图:

 

图1. EC Command



    这上面的五个Command Byte Encoding,在ACPI OS下都是以中断的方式进行的。80命令读取EC Space的值;81命令可以改写EC space的值;82/83是让EC进入一种Burst模式,在这种模式下,OS以Polling方式和EC交互,虽然数据是以Polling方式传输,但82/83命令是以中断的方式来握手的,很多EC工程师不注意,造成系统经常启动时死机。其实不是死机,只是ACPI OS在等待中断而已。84命令是让EC驱动读取Qevent值。

    在BIOS启动过程中,我们经常要读取EC版本和其相关信息,就要通过80命令。但是由于没有注册SCI中断,所以我们只能通过POLLING的方式来和EC进行交互,说白了就是以不断检查状态寄存器的方式来询问EC代码是否执行完。但我们也可以不操作EC Space,自定义其它的command,如:SBIOS工程师和ECBIOS工程师约定往0x66写0x50,然后读0x62为版本号中的一位,我们可以按如下方式读写:

    IoRead8(0x62);

    CheckIBF();

    IoWrite8(0x66,0x50);

    CheckOBF();

    Result := IoRead8(0x62);

第一行代码看似无关紧要,但最好带上,以免出现奇奇怪怪的BUG。我们的Linux内核经常出现调节亮度,按三次键盘亮度只调节一格的问题,我只在EC driver中加了上面一行代码就解决问题了。针对OBF的问题,靠EC是完成不了,只能依靠HOST端了。

 

3. ASL宣告Device

有了EC,就要宣告EC设备,将相应的IO资源和SCI中断资源报上去。只有这样,EC driver才能正常加载。我们来看一下,ACPI SPEC怎么宣告EC device的。

 

Device(\_EC0) {
// PnP ID
Name(_HID, EISAID(PNP0C09))
// Returns the “Current Resources” of EC
Name(_CRS, Buffer(){0x4B, 0x62, 0, 1, 0x4B,
0x66, 0, 1, 0x79, 0})
// Define that the EC SCI is bit 0 of the GP_STS register
Name(_GPE, 0) // embedded controller is wired to bit 0 of GPE
OperationRegion(\EC0, EmbeddedControl, 0, 0xFF)
Field(\EC0, AnyAcc, Lock, Preserve) {
// Field definitions
}
Method(Q00){..}
Method(QFF){..}
}

 

这是最小化的代码,ACPI1.0 SPEC的,所以和现在的SPEC有些出入。但是作为宣告EC Device的模板,还是可以的。

宣告EC Device,首先要有_HID,有了它,EC驱动才知道这是个EC Device。

_CRS和_GPE,有了它EC驱动就可以知道所用的IO端口和SCI中断源。EC驱动首先工获取它们,然后才能注册中断,才能确认操作EC所使用的command_addr和data_addr。

因为我们还要操作EC SPACE,所以要有EmbededControl型的OperationRegion。如果说其它区域是代码区域,那么这个OperationRegion就是数据区域了。EC driver和EC进行交互所需要的数据都要在这里声明。

为了触发动作,还需要有一系列的QEvent。根据Qevent所要求执行的具体动作,在Qevent和Method里面添加相应的代码,一般来讲,都是直接通知驱动执行相应的功能。

除了这些,EC往往还要支持电池,指示LID,AC状态。所以还要添加几个Device的宣告。

 

 


EC中的QEvent(SCI中断) 文章目录前言一、QEvent(SCI中断)是什么?二、查询事件过程 前言 SCI中断信号是由EC的PMC电源管理通道产生,通过EC芯片的SCI引脚发送到CPU的SCI引脚。中间一般接有电平转换芯片。 一、QEvent(SCI中断)是什么? SCI(System Control Interrupt,系统控制中断)是一个系统中断,由硬件用来通知操作系统ACPI事件。 如上图所示便是SCI信号,在EC的代码中就是将SCI对应的输出引脚拉高一段时间后再拉低。 二、查询事件过程 当EC检测到一个需要操作系统或BI 阅读详情

相关推荐

EC中Q的SCI 信号 Event

0000000000

tianpu2320959696的博客 1628

BIOS入知识枝桠——SMBIOS

OVERVIEW SMBIOS全拼System Management BIOS, 是通过系统固件传递管理信息的标准。应用在PC上,即是主板或系统制造厂商以标准格式显示产品信息所遵循的统一规范。 主板厂商或OEM厂商生产的PC,出厂前都会按照SMBIOS标准将相关信息写入BIOS中。比如OEM客制化信息等。 SMBIOS信息也会记录很多硬件信息, 比如CPU型号, 缓存, 内存大小等等 SMBIOS由DMTF组织管理和维护。DMTF是一个工业化组织,通过与领先科技公司的开放与协作简化网络访问技术的

这里是为我所统率的战场 1万+

EC space访问代码

EC RAM, EC space访问代码 Description:These functions of this file are reference only in the DOS! It can read/write ITE-EC RAM by PM-port(62/66)、KBC-port(60/64) and EC-port(2E/2F or 4E/4F)

Embedded Controller (EC)

Embedded Controller,简称EC,是OEM在生产过程中常见的定制固件。EC的独特之处在于,他可以通过与主机的微处理器的简单接口执行复杂的底层功能。EC包含一个主控接口(Host Interface),可以将EC本身与数据总线(Data Bus)相连,并且是支持双向通信的(bi-directional)。

weixin_59227335的博客 4317

Unity2020 发布Android包,下载安装配置JDK、SDK、NDK详细教程

配置成功页面 JDK、SDK、NDK

qq_41263535的博客 1万+

告别迷茫!用ETAS RTA-OS配置你的第一个AUTOSAR OS任务(含VRTA虚拟ECU实战)

本文详细介绍了如何使用ETAS RTA-OS工具链在VRTA虚拟ECU上配置和运行第一个AUTOSAR OS任务。通过从XML配置到任务调度的全流程实战,帮助开发者快速掌握嵌入式操作系统开发的核心步骤,特别适合刚接触AUTOSAR的开发者快速上手。

weixin_42533622的博客 418

电脑主板SuperIO IT8786E/IT8728F实现看门狗(Watch Dog)功能及操作EC的源码

看门狗(Watchdog)作为一种常见的系统保护机制,扮演着至关重要的角色。SuperIO中的GPIO逻辑设备功能还是挺丰富的,除了通用Simple /功能,SMI输出路SMl Ouput Routing)、外部中断路由(External lnterrupt Routing)、LED闪烁(LED Blinking)等功能,还支持看门狗(Watch Dod Timer),这里就是介绍一种使用SuperIO IT8786E/IT8728F实示例代码://打开SuperIO//关闭SuperIO编辑模式。

华为奋斗者精神 1万+

手把手教你用Pico4UE搭建100平米VR大空间:从设备检查、系统升级到地图绘制全流程

本文详细介绍了使用Pico4UE搭建100平米VR大空间的完整流程,包括设备检查、系统升级、地图绘制和性能优化等关键步骤。通过实战案例和专业技术建议,帮助用户高效部署企业级VR解决方案,适用于展厅漫游、工业仿真等多种场景。

weixin_28273593的博客 507

什么是EC(Embedded Controller)

EC是指Embedded Controller。主要应用于移动计算机系统和嵌入式计算机系统中,为此类计算机提供系统管理功能。EC的主要功能是控制计算机主板上电时序、管理电池充电和放电,提供键盘矩阵接口、智能风扇接口、串口、GPIO、PS/2等常规IO功能,EC通常还有SPI接口,可以连接Flash ROM(主板BIOS)及其它SPI设备。在没有SIO(Super I/O)芯片的情况下,EC可以被定义成SIO。

caokayoung的博客 7446

Calibre 3Dstack --每日一个命令day27【overlap】(3-27)

本文介绍了Calibre3Dstack中overlap命令的使用方法。该命令用于检查两个已放置层之间的重叠量是否符合要求,支持设置检查名称、层类型、堆叠范围、检查方向等参数。关键参数包括:-constraint指定重叠约束条件,-exact控制百分比精度,-by_area切换为面积检查模式,-intersection报告相交区域。检查结果可通过RVE选项定制显示方式,适用于3D堆叠设计中的层间重叠验证场景。

u013620135的博客 112

SAP_ABAP_SD_BAPI清单案例教程——销售订单开票_BAPI_BILLINGDOC_CREATEMULTIPLE_VF01_S4版本

SAP BAPI(Business Application Programming Interface)是SAP系统中的一组规范和标准,用于从SAP系统中获取数据、输入数据和更新数据。这些API允许开发者以编程方式与SAP系统交互,而无需编写大量的自定义代码。2.1 Copy代码 直接可使用。2.2 VF01开票。

java_zhong1990的专栏 2214

Bios工程师手边事—ACPI电源管理

ACPI是高级配置与电源接口(AdvancedConfiguration and Power Interface)的简称,它是1997年由Intel、Microsoft、Toshiba,HP,Phoenix所共同制定,提供操作系统应用程序管理所有电源管理的接口。2000年8月推出 ACPI 2.0规范。2004年9月推出 ACPI 3.0规范。2009年6月16日则推出ACPI 4.0规范。最新A

zhao_longwei的专栏 1万+

蓝鸟四轴飞控系统C程序V3.0(基础版本)深度解读

2. 解析遥控通道数据(油门 / 横滚 / 俯仰 / 偏航),转换为标准化值(-1000~+1000);3. 封装PID初始化(PID_Init,配置KP/KI/KD、输出限幅、积分限幅);,包含姿态角(Attitude_Data.Roll/Pitch/Yaw)、角速度(Gyro_Data.X/Y/Z)、遥控值(RC_Data[0~5])、电池电压(Bat_Volt)、电机PWM值(Motor_PWM[0~3])、系统状态(Sys_State),校验和通过Check_Sum()函数计算;

搏博的专栏 344

bios与EC 直接数据访问

简单得说,就像人与人交流,需要语言,这个语言又可以分为很多种,比如普通话,方言,外语。所以根据实际场合去用正确得语言也是很重要得。那么就像bios与EC间得通信,是通过protocol去访问。当然这里得protocol就像刚才说得语言,但这个语言里包含了许多种各个场合对应得交流方式 所以看下这块protocol typedef struct _EFI_TOSHIBA_EC_ACCESS { EC_ACCESS_GET_EC_ACPI_DATA GetEcAcpiData; EC_ACCESS_

weixin_48463430的博客 1976

DeepSeek在实时计算与流处理系统中的突破性实践

对于技术决策者而言,现在正是将DeepSeek实时计算技术纳入企业架构蓝图的关键时机,那些能够率先构建实时智能能力的企业,将在数据驱动的商业竞争中赢得决定性优势。DeepSeek通过创新的流处理架构,成功将复杂事件处理(CEP)的延迟降低到亚秒级,同时保证了计算结果的精确性。DeepSeek研发的神经架构搜索(NAS)与知识蒸馏联合优化框架,可在保持模型精度的前提下,将参数量压缩至原始模型的1/100,实现边缘设备的实时AI推理。随着5G和物联网技术的普及,对实时处理能力的需求将呈指数级增长。

Programming Talk 291

国科大学习资料--模式识别与机器学习(黄庆明)--2020期末考试题

国科大学习资料–模式识别与机器学习(黄庆明)–2020期末考试题 国科大学习资料–模式识别与机器学习(黄庆明)–2020期末考试题 国科大学习资料–模式识别与机器学习(黄庆明)–2020期末考试题 ============================================================================================================================================================

无名何许人的博客 2604

X86-BIOS版本与EC版本查看方法

本文介绍BIOS与EC版本查看方法,emmc引导/Ubuntu系统丢失

high_sky_fly的博客 3214

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

HttpClient的BaseAddress怎么用

HttpClient 的 BaseAddress 属性可以用来设置该 HttpClient 实例所发送请求的默认基地址。你可以在创建 HttpClient 实例时直接设置,也可以在使用时动态设置。例如: // 在创建 HttpClient 实例时设置基地址 var client = new HttpClient { BaseAddress = new Uri("https://www.exampl...

weixin_42596214的博客 620

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

基地址和偏移地址的概念

基地址(Base Address)和偏移地址(Offset Address)是在计算机体系结构和操作系统中经常使用的概念,用于表示内存地址的组成部分。 1. 基地址(Base Address):基地址是一个固定的内存地址,通常是一个模块(如可执行文件或动态链接库)在内存中加载时的起始地址。它是一个绝对地址,表示模块在内存中的位置。基地址可以被看作是模块的逻辑起点,所有相对于模块的内部地址都是相对于基地址进行计算的。 2. 偏移地址(Offset Address):偏移地址是相对于某个基地址的地址差值

SXXYNHHXX的博客 1万+

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

BIOS知识枝桠——Event

Event传统的中断模式硬件中断软件中断Event OverviewTPLEvent Function UEFI不再为开发者提供中断支持,但在UEFI内部还是使用了时钟中断,所有的异步操作都要通过事件(Event)完成。在Legacy BIOS中,要处理异步事件或实现一些特定的功能,需要通过中断模式 传统的中断模式 常用中断分为硬件中断和软件中断 硬件中断 敲键盘事件: 敲键盘→键盘信号传输给EC→EC产生硬件中断 (IRQ1)到CPU→中断信号输入到CPU的中断控制器→OS执行对应的软件代码来获取键盘

这里是为我所统率的战场 4463

各主板黑苹果dsdt补丁_DSDT电量显示补丁教程

知识储备DSDT正则匹配(不懂就依葫芦画瓢)背景由于普通PC的电池设备并不兼容与苹果的SMbus设备,所以,对于黑苹果,只能够通过ACPI来获取电池状态。为了解决电量显示我可是爬了不少帖子、花了不少时间呢。但是从我参考的中外教程来看,我觉得都不太理想,作为一个程序员的我都要看好几遍,普通用户怕是望而却步。再说作为小白用户其实没必要搞清楚里面的弯弯道道,能正常显示电量就是目标,所以萌生了写...

weixin_39637589的博客 1998

BIOS工程师手边事—Keyboard

键盘作入计算机系统中的人机交互输入设备,其重要性不言而喻。USB键盘驱动较为复杂,需要USB控制器驱动,USB总线驱动和USB键盘驱动,内容比较繁杂。以后有空再来整理这方面的内容。今天重点整理一下笔记本中的矩阵键盘相关知识。 嵌入式BIOS部分: 1,配置矩阵键盘表: 查看如上图所示的矩阵键盘丝印图,对照键盘接口配置矩阵键盘表。虽然各个EC厂商代码的矩阵键盘表配置方式都不一样,但

zhao_longwei的专栏 6212

ASL code基本操作

一、ASL基本准则 1.变量命名不超过四个字符,且不能以数字开头。 2、变量或者函数命名,不分大小写。 3.Scope形成作用域,概念类似于C++中的namespace,Java中的package。 4.Device定义也会形成自己的作用域,类似于C++中的Class的概念。 5.Method或者Function定义函数,函数可以定义在Device下或者Scope下,但是不能脱离Scope定义单独的函数,也就是说,函数必须依附于对象(Scope or Device). 6.以“_”字符开头的函数

Unique_Eric的博客 9061

Bios工程师手边事—battery

公司的电池又出问题了。对于电池,只是解决问题的话,不会困难。但将整个电池的知识点串连起来,却不是件轻松的事。 电池部分可以分成二块来看待: 1,ECBIOS读取电池,并处理 2,SYSTEMBIOS写ASL代码,提供给驱动 附:驱动和EC沟通,报给内核   嵌入式BIOS部分 嵌入式BIOS工程师做电池,手边的事情一般有: 1,侦测电池插拔动作 一般有两种方式来作这个功能: (

zhao_longwei的专栏 7358

[翻译] (黑苹果)笔记本电脑原生电源管理指南 [Guide] Native Power Management for Laptops

来源:https://www.tonymacx86.com/threads/guide-native-power-management-for-laptops.175801/ Overview 概述 Power Management should be one of the first things implemented when trying to install OS X on a lap...

tomggx的专栏 1万+
上一篇: Bios工程师手边事—HDA Audio
下一篇: Bios工程师手边事—ACPI电源管理
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值