SoC 互连、错误监控与 QoS
1. 两类互连驱动
本目录互连代码主要做:
- cache coherency/port管理;
- timeout、target abort、decode error和master定位。
它们通常不提供drivers/interconnect中的带宽投票API。
2. ARM CCI
arm-cci.c支持ARM CCI-400/500/550 coherent interconnect:
- 解析CPU/ACE/ACE-Lite port;
- 保存port控制寄存器;
- CPU PM/低级电源转换时enable/disable snoop和DVM;
- 提供CCI PMU相关基础。
CCI端口在CPU缓存仍活动时错误关闭会破坏一致性,所以低级操作与CPU suspend顺序严格绑定。
RK3588采用Cortex-A55/A76与DSU体系,DTS未声明CCI compatible,本驱动不匹配。
3. OMAP L3
omap_l3_smx.c和omap_l3_noc.c处理中断:
1 | L3 error IRQ |
错误可能来自访问断电模块、非法地址、timeout或权限。Handler必须先保存寄存器再清状态,否则会丢失诊断。
4. Broadcom GISB
brcmstb_gisb.c管理GISB arbiter timeout/target abort:
- 读取错误地址和master;
- 根据SoC master mask打印来源;
- 清错误;
- 可在external abort hook中辅助诊断。
它是错误观测器,不会自动修复造成timeout的外设。
5. Baikal-T1 AXI/APB
bt1-axi.c、bt1-apb.c读取error handler block,记录总线错误地址/类型,并通过sysfs暴露错误计数和部分timeout参数。
修改timeout过小会制造误报,过大则让CPU长时间等待故障slave。
6. DA8xx Master Priority
da8xx-mstpri.c允许调整多个master优先级。这是静态仲裁配置,不是动态interconnect带宽框架。
优先级提高某master会牺牲其它master延迟,需结合DDR和实时业务整体评估。
7. TI SYSC
ti-sysc.c是OMAP interconnect target module通用driver:
- 识别SYSC/SYSS/REV寄存器布局;
- clock/reset/idle/wakeup;
- legacy hwmod兼容;
- runtime PM;
- populate child。
其代码很大是因为需要支持多代TI寄存器quirk,不是通用SoC syscon driver。
8. QCOM SSC、Tegra ACONNECT、Sun50i DE2
这些driver主要打开特定功能域:
- SSC block bus连接Sensor Core内部外设;
- ACONNECT连接Tegra Audio Processing Engine;
- DE2 bus申请SRAM并使显示engine可访问。
它们都是平台电源/访问前置条件,children仍由其它功能driver管理。
9. 错误处理原则
总线错误日志至少应包含:
- fault address;
- read/write及opcode;
- master/initiator;
- target/slave;
- security/privilege;
- timeout或decode;
- power/clock状态。
只打印“bus error”而不保存首个fault寄存器,后续中断风暴会覆盖根因。
10. RK3588边界
RK3588的NoC QoS、PM domain、DDR/devfreq和system monitor位于Rockchip专用目录及firmware/DT配置,不由上述驱动实现。即使协议同样称AXI/APB,也不能复用Baikal、OMAP或Broadcom寄存器驱动。
正在加载留言…