1,定义SmcDfxInfo_ExuSensor。
2,如下图所示,通过smc直接读取的6个字节分别为192 31 96 32 192 22 ; 3个scanner的结果均为192 +(22<<8)= 5824,与通过第5第6字节计算出来的数据一致。
3,定义Scanner_Lm75_Inlet、Scanner_Lm75_Outlet、Scanner_MbTemp。
1,定义SmcDfxInfo_ExuSensor。
2,如下图所示,通过smc直接读取的6个字节分别为192 31 96 32 192 22 ; 3个scanner的结果均为192 +(22<<8)= 5824,与通过第5第6字节计算出来的数据一致。
3,定义Scanner_Lm75_Inlet、Scanner_Lm75_Outlet、Scanner_MbTemp。
1、查看Scanner的bmc.kepler.Scanner.Aggregate AggregateStatus属性,确认下当前是否是从smcdfxinfo更新的value,如果是false的话说明没从smcdfxinfo更新;
2、用blockio read读下smc_expboardsmc的寄存器,看下是不是从cpld拿到的6个字节数据,里面是不是就是两两一样的
1,3个scanner的AggregateStatus都是true,但是3个scanner的AggregateOffset都是0,这个是不是有问题?
2,用blockio read读下smc_expboardsmc的寄存器拿到的6个字节数据是不一样的,刚好只跟通过4 5字节数据计算出来的一致。
framework.log可以看到dfx版本校验成功:
1970-01-01 00:00:31.384358 hwproxy NOTICE: aggregate.lua(377): aggregate: SmcDfxInfo_ExuSensor_0101, version check success, expect version: 100, version by expr: nil, version by opcode: 205, version by dfx: 1000
Scanner配置有问题,三个Scanner的配置完全一样,会被合并成一个Scanner处理
实际上是三个不同的温度值,Scanner在配置的时候要根据获取温度的opcode去配置对应的offset
需要理解下Scanner有两种模式:
汇聚扫描情况下,Smcdfxinfo是把SMC提供的硬件信息用过一个opcode全部获取回来,再根据配置计算值之后分发到各个Scanner上去;
无法汇聚扫描的情况下,会走独立扫描,独立扫描会根据Scanner配置的offset(opcode)从SMC获取对应的硬件信息,这就意味着获取不同硬件信息的Scanner配置不可能完全相同。
所以这里不应该出现配置完全相同的三个Scanner,这种配置完全相同的Scanner会被认为读取的是同一个物理信息而被合并处理。
验证了一下,是这个原因。按照正常设计是三个Scanner的offset配置成三个未使用或未定义的值即可吗? 还是说需要三个scanner的offset不同且可正常访问?
对于SMC器件来说,offset就是opcode,每个opcode就对应一个具体的命令:
假设:opcode 0x0001 是获取进风口温度;opcode 0x0002是获取出风口温度;opcode 0x0003是获取Md温度;opcode 0x0004是获取硬盘背板温度…等等,而0x10E5(4352)是dfx命令字,可以获取全部硬件信息(全部opcode能获取到的所有信息)
现在的问题就是这三个Scanner的offset应该根据软硬件接口文档配置成对应的opcode,实际错误的使用了DFX的命令字。
嗯,了解。dfx 的opcode 可以获取到3个scanner的硬件信息并赋值给三个scanner,按照正常设计,三个scanner的opcode是否也是需要实现能够获取到硬件信息?还是说三个scanner的opcode是三个不同的无效opcode 就可以了?
三个scanner的opcode是否也是需要实现能够获取到硬件信息
– 正解
好的,多谢!