工具/软件:
尊敬的 TI 团队:
在icssgx-eth运行 AM6548 平台上的 ICSSG 以太网接口 () 初始化期间、我们遇到了关键问题 Linux 内核版本 6.12 。
问题描述:
在 icssg-prueth 驱动程序初始化序列期间、尝试更新 Rx 流 ID 失败。 系统日志报告以下错误: ERROR: Failed to update Rx Flow ID -22
调试 icssg_send_fdb_msg 函数后、可以观察到命令已成功发送到 PRU 固件。 此命令标识为 ICSSG_FW_MGMT_FDB_CMD_TYPE_RX_FLOW (0x05) param=0x10。 但是、PRU 固件始终以响应 status=16。 驱动程序将此不成功状态解释为错误、导致出现错误 -22 代码(对应于,或“无效参数“) EINVAL。
相关日志片段:
[ 12.585715] icssg-prueth icssg0-eth: DEBUG: icssg_send_fdb_msg - entering for slice 1
[ 12.593657] icssg-prueth icssg0-eth: DEBUG: cmd header=0x81, type=0x5, seqnum=1, param=0x10
[ 12.602142] icssg-prueth icssg0-eth: DEBUG: cmd_args[0]=0x0, cmd_args[1]=0x0, cmd_args[2]=0x0
[ 12.610774] icssg-prueth icssg0-eth: DEBUG: icssg_queue_pop returned addr=0x834c
[ 12.618270] icssg-prueth icssg0-eth: DEBUG: Writing command to shared memory at addr=0x8350
[ 12.626750] icssg-prueth icssg0-eth: DEBUG: Pushing command to queue (slice 1)
[ 12.634060] icssg-prueth icssg0-eth: DEBUG: Waiting for firmware response...
[ 12.641215] icssg-prueth icssg0-eth: DEBUG: Got response at addr=0x834c
[ 12.647924] icssg-prueth icssg0-eth: DEBUG: Writing command to shared memory at addr=0x8350
[ 12.656413] icssg-prueth icssg0-eth: DEBUG: Command structure before memcpy: header=0x81, type=0x5, seqnum=1, param=0x10
[ 12.667414] icssg-prueth icssg0-eth: DEBUG: Command args: [0]=0x0, [1]=0x0, [2]=0x0
[ 12.675210] icssg-prueth icssg0-eth: DEBUG: Verified written command: header=0x81, type=0x5, seqnum=1, param=0x10
[ 12.685560] icssg-prueth icssg0-eth: DEBUG: Verified args: [0]=0x0, [1]=0x0, [2]=0x0
[ 12.693362] icssg-prueth icssg0-eth: DEBUG: Response - header=0x81, type=0x5, seqnum=1, status=16
[ 12.702322] icssg-prueth icssg0-eth: DEBUG: Returning buffer to pool
[ 12.708827] icssg-prueth icssg0-eth: DEBUG: icssg_send_fdb_msg completed successfully
[ 12.716788] icssg-prueth icssg0-eth: DEBUG: FDB response - seqnum: 1 (expected 1), status: 16
[ 12.725440] icssg-prueth icssg0-eth: ERROR: Failed to update Rx Flow ID -22 (flow_id_base=150, port=2)
可疑原因和故障排除:
我们怀疑此问题是由于 icssg-prueth Linux 内核 6.12 中的驱动程序与 AM6548 上加载的 PRU 固件之间的兼容性不匹配造成的。 ICSSG_FW_MGMT_FDB_CMD_TYPE_RX_FLOW (0x05)在内核提交 9facce84f406 (https://github.com/torvalds/linux/commit/9facce84f4062f782ebde18daa7006a23d40b607#diff-17a60a35256de0708f6ac4275c44d0364058230e350558b9f2e3633ddba37e20) 中引入或修改了特定的命令。
为解决此问题、我们尝试 ti-linux-firmware 将软件包更新为 commit cdd233788b9a (https://github.com/TexasInstruments/ti-linux-firmware/commit/cdd233788b9a8a2fe9fbc82d17e34d5ae32fdc3b) 中引用的版本。 但是、此更新未解决问题、并且固件将继续响应 status=16。
向 TI 提问:
- 您能否提供
status=16AM6548 ICSSG PRU 固件在响应ICSSG_FW_MGMT_FDB_CMD_TYPE_RX_FLOW (0x05)命令时返回的最终含义? 此状态代码是否指示无效命令、不受支持的功能、参数错误或其他特定条件? - 在哪里可以找到 AM6548 ICSSG PRU 固件的全面且最新的文档、特别是详细说明其命令接口 (
MGMT_CMD_TYPE)、命令参数和所有可能的响应状态代码? - 运行 Linux 内核 6.12.x(或最接近的受支持内核版本)时、AM6548 的官方建议 PRU 固件版本是什么? 是否有特定的固件版本完全支持
ICSSG_FW_MGMT_FDB_CMD_TYPE_RX_FLOW最新内核驱动程序预期的命令? - 有任何解决此问题的建议?
感谢您的时间和帮助。
此致、
Andy、Siemens AG