feat(rockchip-rga): add dry-run command buffer - #1248
Conversation
There was a problem hiding this comment.
Review 总结
本 PR 新增 rockchip-rga no_std 驱动 crate,覆盖 RGA core 基础类型、最小寄存器表、版本读取、dry-run command buffer 编码层(copy/fill),并在 ax-driver 中接入 rga feature 和 FDT probe glue。代码质量良好,结构清晰。
代码分析
drivers/gpu/rockchip-rga/src/lib.rs
RgaCoreConfig/RgaCoreResource/RgaCore/RockchipRga层次分明,与rockchip-npucrate 的RknpuCore/Rknpu模式一致。unsafe impl Send for RgaCore合理:MMIO base 指针由平台 glue 保证有效性,read32正确使用read_volatile。DriverGeneric实现最小可用,后续可扩展。
drivers/gpu/rockchip-rga/src/registers.rs
- 寄存器偏移常量与 RGA2/RGA3 技术参考一致,CMD_BUFFER_WORDS=0x20(32字)匹配 old RGA command block 格式。
drivers/gpu/rockchip-rga/src/command.rs
- dry-run command buffer 编码逻辑完整:validate → encode → 测试覆盖。
encode_mode/encode_src_info/encode_src_vir_info/encode_dst_vir_info/encode_src_act_info/encode_dst_act_info字段宽度和位域掩码与 RGA 硬件手册匹配(src active info 13 位、dst active info 12 位、src vir info 含 UV stride 10 位字段)。descriptor_base_word()正确检查 16 字节对齐和 32 位溢出。- 5 个单元测试覆盖正常 copy/fill 编码和非法参数拒绝(未对齐地址、stride 过小、尺寸不匹配)。
drivers/ax-driver/src/rga.rs
- FDT probe glue 与
rknpu.rs模式一致:model_register!宏、page_aligned_region对齐、iomap→RgaCoreResource构建 →RockchipRga::new→plat_dev.register。 detect_core_config正确映射rga3_core0/rga3_core1/rga2_core0compatible 字符串。decode_fdt_irq正确处理 GIC 中断类型(SPI +32、PPI +16)。- DMA mask 使用
u32::MAX as u64与 NPU 驱动一致。
验证结果
cargo fmt --check✅ 通过cargo clippy --manifest-path drivers/gpu/rockchip-rga/Cargo.toml --all-features -- -D warnings✅ 无警告cargo test --manifest-path drivers/gpu/rockchip-rga/Cargo.toml --all-features✅ 5/5 通过cargo clippy --manifest-path drivers/ax-driver/Cargo.toml --all-features -- -D warnings✅ 无警告
CI 状态
所有 GitHub Actions check runs 状态为 skipped(fork PR 需要 approval 触发 CI),无失败。
相关 PR
无重叠或冲突的开放 PR。#1189(NPU bench)已关闭,在后续描述中提到需要 RGA 支持图像预处理。
遗留项(非阻塞,已由作者在 PR body 中声明 deferred)
- 真实硬件提交路径(RGA_CMD_BASE/RGA_CMD_CTRL)
- DMA image buffer 分配与 cache sync
- IRQ/polling completion
- resize/rotate/format convert
- 用户态接口(/dev/rga、librga、V4L2/DRM)
- RK3588 实板验证
结论
代码结构良好,遵循项目既有模式(与 rockchip-npu 对齐),测试充分,验证通过。deferred 项不影响当前 dry-run bring-up 目标。建议合并。
Powered by mimo-v2.5-pro
ZR233
left a comment
There was a problem hiding this comment.
本次审查通过。
PR 新增 drivers/gpu/rockchip-rga 作为 no_std RGA 基础驱动 crate,并在 ax-driver 中增加 rga feature 与 FDT probe glue。可复用 crate 只依赖 dma-api / rdif-base,FDT、iomap、DMA capability 绑定保留在 ax-driver glue 层,符合当前驱动分层方向。dry-run command buffer 的寄存器偏移、32-word mode block、MMU descriptor 地址右移 4 位、active/virtual info 字段布局与 Linux RGA 旧 command-buffer 路径一致;当前只覆盖 copy/fill dry-run,真实硬件提交、cache sync、IRQ/polling、用户态接口和 RK3588 实板验证已在 PR body 中明确 deferred,不影响这一步的合入目标。
重复/重叠检查:在 origin/dev 中只找到 RK3588 DTS/power-domain 里的 RGA 节点和 rockchip-pm 域信息,没有已有 rockchip-rga crate 或等价 command-buffer 实现;相关 open PR 主要是 #1185、#1160 这类相邻驱动/显示/平台改动,没有重复实现 RGA dry-run encoder。未发现 [patch.crates-io]。
冲突处理:原 head 976943e8f4f6bcccfab2b51d17faa62026afca64 与当前 dev 冲突,且 maintainer edits 已开启。我单独创建 conflict worktree,将当前 dev merge 到作者分支并推送了普通非 force 更新 25a315c19646e7d4cb30349f4ebc320f66b40d0e。冲突文件为 Cargo.toml,解决逻辑是保留当前 dev 的版本提升和新增 release/kmod 变更,同时保留本 PR 的 drivers/gpu/* workspace member 与 rockchip-rga = { version = "0.1.0", path = "drivers/gpu/rockchip-rga" } workspace dependency;Cargo.lock 通过 Cargo metadata 重新校验解析,没有手工拼锁文件。
验证结果:
- 原 PR head:
cargo fmt --all --check通过;cargo test -p rockchip-rga通过,5 个测试全过;cargo xtask clippy --package rockchip-rga通过;cargo clippy -p ax-driver --no-default-features --features rga -- -D warnings通过;git diff --check origin/dev...HEAD通过;metadata 确认rockchip-rga/dma-api/rdif-base均为 workspace path crate。 - merge repair 后的 conflict worktree:
cargo fmt --all --check、cargo test -p rockchip-rga、cargo xtask clippy --package rockchip-rga、cargo clippy -p ax-driver --no-default-features --features rga -- -D warnings、git diff --check、conflict-marker scan 均通过。 - 推送后的当前 PR head
25a315c19646e7d4cb30349f4ebc320f66b40d0e:再次执行cargo fmt --all --check、cargo test -p rockchip-rga、cargo xtask clippy --package rockchip-rga、cargo clippy -p ax-driver --no-default-features --features rga -- -D warnings、git diff --check origin/dev...HEAD、conflict-marker scan、metadata 检查,均通过。
CI 状态:推送 conflict repair 后新一轮 CI 已启动;审查提交前看到 Detect changed paths 和 Run sync-lint / run_container 通过,Check formatting / run_host 仍 pending,其它 container/host 互斥或发布类任务为预期 skipped。当前合入前仍应等 required CI 完成。
There was a problem hiding this comment.
审查总结
本 PR 新增 rockchip-rga no_std 驱动基础 crate(dry-run command buffer),并在 ax-driver 中通过 rga feature 接入 FDT probe glue。代码结构良好,遵循项目既有模式(与 rockchip-npu 对齐),测试充分。
实现分析
drivers/gpu/rockchip-rga/src/lib.rs
RgaCoreConfig/RgaCoreResource/RgaCore/RockchipRga层次分明,与rockchip-npucrate 的RknpuCore/Rknpu模式一致。unsafe impl Send for RgaCore合理:MMIO base 指针由平台 glue 保证有效性,read32正确使用read_volatile。DriverGeneric实现最小可用,后续可扩展。
drivers/gpu/rockchip-rga/src/registers.rs
- 寄存器偏移常量与 RGA2/RGA3 技术参考一致,
CMD_BUFFER_WORDS=0x20(32字)匹配 old RGA command block 格式。
drivers/gpu/rockchip-rga/src/command.rs
- dry-run command buffer 编码逻辑完整:validate → encode → 测试覆盖。
encode_mode/encode_src_info/encode_src_vir_info/encode_dst_vir_info/encode_src_act_info/encode_dst_act_info字段宽度和位域掩码与 RGA 硬件手册匹配(src active info 13 位、dst active info 12 位、src vir info 含 UV stride 10 位字段)。descriptor_base_word()正确检查 16 字节对齐和 32 位溢出。- 5 个单元测试覆盖正常 copy/fill 编码和非法参数拒绝(未对齐地址、stride 过小、尺寸不匹配)。
drivers/ax-driver/src/rga.rs
- FDT probe glue 与
rknpu.rs模式一致:model_register!宏、page_aligned_region对齐、iomap→RgaCoreResource构建 →RockchipRga::new→plat_dev.register。 detect_core_config正确映射rga3_core0/rga3_core1/rga2_core0compatible 字符串。decode_fdt_irq正确处理 GIC 中断类型(SPI +32、PPI +16)。- DMA mask 使用
u32::MAX as u64与 NPU 驱动一致。
本地验证结果
cargo fmt --check✅ 通过cargo clippy -p rockchip-rga --all-features -- -D warnings✅ 无警告cargo test -p rockchip-rga✅ 5/5 通过git diff --check✅ 通过[patch.crates-io]检查:无 crates.io patch ✅
CI 状态
Check formatting / run_host✅ successRun sync-lint / run_container✅ success- 所有 QEMU 测试(arceos/starry aarch64/riscv64/loongarch64/x86_64)✅ success
Test axvisor self-hosted x86_64 / run_host❌ failure(与本 PR 无关:该测试运行在s1lqc-rcore-os-runner-7自托管 runner 上,dev分支最新 pushc5f6d615同一 check 也失败,属于基础设施/基线已知问题,与 rockchip-rga Arm GPU 驱动无关)Test starry x86_64 qemu / run_containercancelled、Run clippy / run_hostcancelled(被 Cancel stale CI runs 机制取消,属预期行为)- 已跳过的 check(host/container 互斥矩阵、分支限制发布 job)均为预期行为
重复/重叠分析
origin/dev基线中只有 RK3588 DTS/power-domain 里的 RGA 节点和rockchip-pm域信息,没有已有rockchip-rgacrate 或等价 command-buffer 实现。- 开放 PR 中无与 RGA、GPU 驱动、command buffer encoder 重叠的 PR。#1185、#1160 等为相邻驱动/显示/平台改动,但不涉及 RGA dry-run encoder。
- 无
[patch.crates-io]。
冲突处理
原始 head 与 dev 有冲突,ZR233 已在前一次审查中单独创建 conflict worktree 解决了 Cargo.toml 冲突(保留当前 dev 的版本提升和新增变更,同时保留本 PR 的 drivers/gpu/* workspace member 和 rockchip-rga dependency),并推送了非 force 更新 25a315c19。修复后验证通过。
审查线程
无未解决的 review thread。
遗留项(非阻塞,作者已在 PR body 中声明 deferred)
- 真实硬件提交路径(RGA_CMD_BASE/RGA_CMD_CTRL)
- DMA image buffer 分配与 cache sync
- IRQ/polling completion
- resize/rotate/format convert
- 用户态接口(/dev/rga、librga、V4L2/DRM)
- RK3588 实板验证
结论
代码结构良好,遵循项目既有模式,测试充分,验证通过。唯一 CI 失败与本 PR 无关(基线基础设施问题)。deferred 项不影响当前 dry-run bring-up 目标。无阻塞问题,建议合并。
Powered by mimo-v2.5-pro
Co-authored-by: 周睿 <zrufo747@outlook.com>
Co-authored-by: 周睿 <zrufo747@outlook.com>
Co-authored-by: 周睿 <zrufo747@outlook.com>
Summary
rockchip-rgano_std 驱动基础 crate,先覆盖 RGA core/resource 描述、最小寄存器表和版本寄存器读取。ax-driver中接入rgafeature 和 FDT probe glue,为后续 RK3588 实板上的 RGA bring-up 留出入口。Commits
feat(rockchip-rga): add dry-run command bufferWhat's included
drivers/gpu/rockchip-rgaRockchipRga/RgaCore/RgaCoreResource基础类型。read_version_info(),用于后续实板读取RGA_VERSION_INFO。drivers/ax-driverrgafeature。rockchip,rga3_core0/rockchip,rga3_core1/rockchip,rga2_core0。reg/ IRQ,完成 MMIO 映射和 DMA capability 绑定。drivers/gpu/*workspace member。rockchip-rgaworkspace dependency。What's NOT included (deferred)
RGA_CMD_BASE/RGA_CMD_CTRL启动硬件。/dev/rga、librga、V4L2 或 DRM 用户态接口兼容。Changed files
Cargo.tomlCargo.lockdrivers/ax-driver/Cargo.tomldrivers/ax-driver/src/lib.rsdrivers/ax-driver/src/rga.rsdrivers/gpu/rockchip-rga/Cargo.tomldrivers/gpu/rockchip-rga/src/lib.rsdrivers/gpu/rockchip-rga/src/registers.rsdrivers/gpu/rockchip-rga/src/command.rsTesting
cargo fmt --allcargo test -p rockchip-rgacargo xtask clippy --package rockchip-rgacargo clippy -p ax-driver --no-default-features --features rga -- -D warningscargo xtask clippy --package ax-drivergit diff --check