sr定义smc长字节 block读取偏移需求讨论


1,上图标表示bitIo读取4字节;掩码为0xff0000;
2, 如果定义Type为1时按blockIo读取,读取32字节, scanner只关心28-31字节,是不是可以新增一个偏移字段支持通过定义偏移为28,掩码为0xffffffff实现?
3,当然也可以通过定义SmcDfxInfo将读取到的多字节数据映射到各个scanner实现28-31字节赋值给关心28-31字节的accessor或scanner;
4,如果定义了SmcDfxInfo,那么在dfx服务启动之前,scanner是否会去获取数据?是否通过expr算式规避scanner获取到异常数据就成了必选项?
5,SmcDfxInfo和scanner关系讨论贴: SmcDfxInfo类与Scanner的关系 - 交流互助区 - openUBMC 论坛
6,scanner解析多字节数据讨论帖: Scanner如何解析多字节的长数据 - 交流互助区 - openUBMC 论坛

没太理解你啥意思,要blockio写入的话就得在代码里做了,csr里配Accessor实现不了,blockio读取的话可以配置smcdfx试试,应该可以实现

smcdfx 可以实现,这个有试过。 我关联的帖子有位同学说是smcdfx服务起来之后会把数据给到scanner ,在smcdfx服务起来之前是scanner 本身获取的数据,scanner本身是拿不到blockio 的数据,这个时刻获取到的数据可能是异常的。 想实现scanner 获取block io 的数据并不难,sr 加个偏移字段就可以了,就看有没有必要。

那我理解smcdfx中关联的scanner配个访问不通的假地址就好了,有效数据不走Scanner配置的偏移只取smcdfx中的数据

配假地址试过,功能上来看没有问题,可以设计上评估下看是不是有漏洞。

mask最早设计的时候是给bit位操作用的,到是没有考虑过byte的掩码
其实也不一定要用mask,可以考虑还是读4个字节,然后在使用的地方通过表达式右移3位就好了

smcdfx只是汇聚了多个smc命令字,一个命令返回多个命令的总集
smcdfx扫了后会把值给到配置的scanner,scanner就不会再去扫了,因为理论上值是一样的。
除非是smcdfx里不支持对应的scanner的值,这个scanner才回去规划自己的周期性扫描

部分功能smc实现是返回32字节。只读前4字节没有问题。要看有没有办法只读scanner关心的中间的4字节。

smcdfx扫描启动之前,scanner拿到的值是不是会有问题。

不会,两者不互斥,除非硬件返回数据不一样
不想两个同时扫的原因只是为了减少不必要的硬件访问

其实如果是这种的话不建议用scanner来处理,scanner最初的设计就是简单的寄存器值读取,逻辑越简单越好。

复杂的逻辑更适合用代码来实现,非配置化

问题是smcdfx将拿到的32字节数据拆分后,把scanner关心的如28-31字节数据给到scanner,但是在smcdfx起来之前,似乎scanner没有办法拿到第28-31字节数据。

如果只是把smcdfx转给一个scanner,其实就没必要配smcdfx了,理论上是smcdfx能关联的scanner越多效率越高

还有种思路我建议你要推动硬件去适配,如果只要28-31,为啥要上报那么多数据?都是成本

嗯,只是举个例子,smcdfx的32字节关联一般是转给多个scanner,某个scanner只要28-31。