PCIE那些事之AER高级信息上报

本文深入探讨了PCIe的AER(Advanced Error Reporting)机制,包括AER的错误类型、处理流程和在Linux系统中的实现。内容涵盖了Correctable Errors和Uncorrectable errors的区别,AER信息类型的解析,以及如何使用aer-inject工具进行AER错误测试和系统恢复。
摘要由CSDN通过智能技术生成

本文总结了AER错误处理流程
在这里插入图片描述

什么是AER

AER 英文简称 Advanced Error Reporting 翻译中文是高级错误报告,是PCIE异常信息处理机制,用于报告PCIe 错误信息
错误信息主要分为两种 Correctable Errors 和Uncorrectable errors
其中 Correctable Errors包含非致命的错误和致命的错误
a.ERR_FATAL:致命错误,此错误类型影响了PCIe link链路。
b.ERR_NONFATAL:指影响了设备功能,但是PCIe link还是稳定的
Correctable Errors:可纠正错误是指错误发生后,硬件可以自动恢复。
Uncorrectable errors:错误发生后,影响设备功能,硬件不能自动恢复。

AER信息类型

如下列表所述,注意如果是链路出现了错误需要需要Upstream设备向Root来报告错误进行重新训练

在这里插入图片描述
AER错误需要EP和RC端同时打开才能使用
这些错误信息可以通过设备控制器进行使能或者禁止
在这里插入图片描述

设备可以通过设备状态寄存器查询AER探测状态
在这里插入图片描述
RC寄存器中可以控制是否enable AER功能
在这里插入图片描述

AER机制原理

ERROR Message通过port端口上报给Root Complex 最后通过中断方式通知CPU进行处理
在这里插入图片描述
PCIe Correctable Errors处理流程
AER Driver同时获取RC和EP的错误状态信息, 此时Errors已经被物理层或者数据链路层给修复,AER仅仅获取错误的状态
在这里插入图片描述

PCIE Uncorrectable errors处理流程
AER可以同时获取RC和EP的状态,并行recovery强制热复位修复,复位会重新训练链路,影响系统数据的传输
在这里插入图片描述

linux AER处理流程

在这里插入图片描述

linux内核通过aerdrv.c进行驱动管理,分为驱动层drv.c和核心层core.c
在这里插入图片描述

系统运行的时候会注册aerdriver设备驱动驱动,AER注册成功需要支持以下2个条件
1.kernel中需要开启AER功能配置
2.需要支持MSI中断

static int __init aer_service_init(void)
{
   
	if (!pci_aer_available() || aer_acpi_firmware_first())
		return -ENXIO;
	return pcie_port_service_register(&aerdriver);
}
device_initcall(aer_service_init);


aerdriver是设备驱动结构体

static struct pcie_port_service_driver aerdriver = {
   
	.name		= "aer",
	.port_type	= PCI_EXP_TYPE_ROOT_PORT,
	.service	= PCIE_PORT_SERVICE_AER,

	.probe		= aer_probe,
	.remove		= aer_remove,
	.error_resume	= aer_error_resume,
	.reset_link	= aer_root_reset,
};

调用aer_probe 填充pcie_dev资源,注册中断进行aer错误收集与处理,使能root aer功能

static int aer_probe(struct pcie_device *dev)
{
   
	int status;
	struct aer_rpc *rpc;
	struct device *device = &dev->port->dev;

	/* Alloc rpc data structure */
	rpc = aer_alloc_rpc(dev);
	if (
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值