Repository navigation
drivers/spi: QEMU virtual SPI loopback bus for utest (#11972) - #11979
cms19859230182-lang wants to merge 5 commits into
Conversation
…1972) Register a pure-software SPI bus (default name spi2) with memcpy loopback xfer so components.drivers.spi.loopback passes on qemu-vexpress-a9 without a PL022 model. Fix utest include/CPPPATH and align Kconfig/rtconfig bus name. Verified: scons + qemu utest_run components.drivers.spi.loopback PASSED. Fixes RT-Thread#11972 (SPI/QEMU checklist item).
|
👋 感谢您对 RT-Thread 的贡献!Thank you for your contribution to RT-Thread! 为确保代码符合 RT-Thread 的编码规范,请在你的仓库中执行以下步骤运行代码格式化工作流(如果格式化CI运行失败)。 🛠 操作步骤 | Steps
完成后,提交将自动更新至 如有问题欢迎联系我们,再次感谢您的贡献!💐 |
📌 Code Review Assignment🏷️ Tag: componentsReviewers: @Maihuanyi Changed Files (Click to expand)
🏷️ Tag: components_driver_spiReviewers: @Liang1795 @wdfk-prog Changed Files (Click to expand)
🏷️ Tag: workflowReviewers: @Rbb666 @kurisaW @supperthomas Changed Files (Click to expand)
📊 Current Review Status (Last Updated: 2026-11-05 19:35 CST)
📝 Review Instructions
|
Fix the 'Check File Format and License' CI job failure: - put the spi_virt_ops initializer brace on the assignment line - add the missing newline at end of file No functional change.
|
Rbb666
left a comment
There was a problem hiding this comment.
请将虚拟 SPI 总线与实际硬件回环测试的开关分开。
当前启用 RT_UTEST_SPI_LOOPBACK 就会编译 spi_virt_bus.c,在 INIT_BOARD_EXPORT 中按 RT_UTEST_SPI_LOOPBACK_BUS_NAME 注册软件总线。这个名字原本用于选择真实 SPI 控制器(默认 spi2),会与真实总线重名,造成注册失败,或让硬件回环测试实际只测到 memcpy。
建议新增默认关闭的虚拟总线选项,使用独立设备名,仅在 QEMU 测试配置中启用;硬件回环仍使用真实控制器。测试开关请放入现有 CI/attachconfig 配置,并由 .config 生成 rtconfig.h,不要固定进 BSP 默认配置。请分别验证虚拟总线和真实 BSP 的设备注册、测试选择。
收到,我来看看咋回事 |
…#11972) Add a dedicated, default-off RT_UTEST_SPI_VIRT_BUS switch (default name spi_virt) so enabling RT_UTEST_SPI_LOOPBACK no longer compiles or registers a software SPI bus. Hardware loopback now always runs on the real controller named by RT_UTEST_SPI_LOOPBACK_BUS_NAME, while QEMU/CI targets opt in to the virtual bus explicitly. Also move the utest enablement out of the qemu-vexpress-a9 BSP defaults and into ci.attachconfig as peripheral.SPI_VIRT_LOOPBACK.
|
建议将 SPI 回环用例接入 当前 请补充以下改动:
|
|
我觉得把模拟的设备放在qemu的文件夹下会更好点 |
Rbb666
left a comment
There was a problem hiding this comment.
已复核当前提交 a96b49bba92d8a72450ba592dec48e3cab0bc12b。此前提出的虚拟总线独立开关、独立设备名以及 A9 自动测试接入均已补齐;SPI 专项 CI 确实执行了回环用例并通过。
请在合并前处理以下兼容性问题:
[P2] 限制或适配启用设备模型的配置
spi_virt_bus.c 第 88 行 注册的是一个没有设备树节点的静态总线。在启用 RT_USING_DM 的 BSP 上,rt_spi_bus_register() 会查询 CS 引脚;例如 qemu-virt64-aarch64 默认启用了 DM 和 OFW,查询会因 parent.ofw_node == RT_NULL 返回 -RT_EINVAL,随后注销总线,回环测试无法找到 spi_virt。新增的 Kconfig 选项目前没有排除这些配置。
建议适配无设备树节点的虚拟总线注册;若本次只支持非 DM 配置,请先给 RT_UTEST_SPI_VIRT_BUS 增加 depends on !RT_USING_DM,并在帮助中说明限制。该失败路径已通过提取原注册代码的主机测试复现,尚未在 AArch64 QEMU 上实跑;当前 A9 CI 未启用 DM,因此不会覆盖此问题。
另请整理以下内容:
- PR 描述仍写默认名称
spi2、修改 BSP 默认配置,与当前实现不一致。请更新为独立虚拟总线spi_virt和专用 CI 配置,并补充加载该配置的验证步骤。 - 描述及首个提交中的
Fixes #11972会关闭整个跟踪 issue,而本 PR 只完成 SPI 子项。请改用Refs #11972,并确保最终合入的提交信息中也不保留该关闭关键字。 - 标题和提交信息请按仓库规范使用方括号前缀,例如
[drivers][spi] 增加虚拟 SPI 回环总线及 A9 自动测试;格式修复和 CLA 空提交建议在合并时整理。
关于模拟设备的目录位置:当前实现仅依赖通用 SPI 接口,没有 QEMU 平台依赖,保留在 SPI 组件的 utest 目录便于复用,平台启用配置放在 BSP/CI 中即可。暂不建议把迁移到某个 QEMU BSP 作为本 PR 的合并条件。
感觉现在这样也还行,qemu属于BSP层级,这个用例虽然也是给QEMU跑的hh,不过其他的BSP也可运行,也算是通用的了吧 |
摘要
为
#11972清单里 SPI/QEMU 格增加固件内虚拟 SPI bus(软件 MOSI↔MISO 回环),使现有components.drivers.spi.loopbackutest 在qemu-vexpress-a9上全绿,无需真实 PL022 模型。本 PR 仅覆盖 SPI/QEMU 子项;清单其它设备格不在范围内,勿视为整份 #11972 已完成。
改动文件
components/drivers/spi/utest/spi_virt_bus.c(新建):纯软件 SPI bus,默认名spi2;configure+xfer(memcpy 回环) +rt_spi_bus_register+INIT_BOARD_EXPORTcomponents/drivers/spi/utest/SConscript:纳入spi_virt_bus.c;CPPPATH补utilities/utest与drivers/includecomponents/drivers/spi/utest/Kconfig:RT_UTEST_SPI_LOOPBACK_BUS_NAME默认spi2,补充 qemu 说明bsp/qemu-vexpress-a9/rtconfig.h:打开RT_USING_UTEST/RT_UTEST_SPI_LOOPBACK,bus 名spi2bsp/qemu-vexpress-a9/.config:与上面对齐的 Kconfig 符号验证
摘录:
时钟矩阵 100k–10M Hz;数据长度 1–512 bytes(全双工 sendrecv/transfer/transfer_message)均通过。
English
Add an in-firmware virtual SPI loopback bus (software MOSI↔MISO) so
components.drivers.spi.loopbackpasses onqemu-vexpress-a9without a PL022 model. Default bus namespi2. Fixes the SPI/QEMU checklist item of #11972 only.Fixes #11972