RK平台HDMI-IN/camera调试:预留CMA内存

发布于:2025-06-26 ⋅ 阅读:(21) ⋅ 点赞:(0)

CMA内存是物理连续的,不需要再进行映射等操作,iommu物理上不连续,需要映射成连续的地址,因此CMA内存的效率比较高,可以用于sensor的mipi信号不佳或者系统负载较大的时候,接收的图像出现异常:例如出现绿条纹、帧率下降、概率性分屏等等的场景。

1.config预留

可以在config配置中设置预留CMA内存的大小,并且关闭对应模块的iommu,对应模块的驱动有实现优先使用iommu,若是iommu关闭的话,则会使用CMA内存,参考如下,设置预留CMA内存为128M,并关闭rkcif的iommu。

diff --git a/arch/arm64/configs/rockchip_defconfig b/arch/arm64/configs/rockchip_defconfig
old mode 100644
new mode 100755
index 544e4d3f751a..dddfc053d86c
--- a/arch/arm64/configs/rockchip_defconfig
+++ b/arch/arm64/configs/rockchip_defconfig
@@ -951,6 +951,7 @@ CONFIG_CRYPTO_ANSI_CPRNG=y
 CONFIG_CRYPTO_DEV_ROCKCHIP=y
 CONFIG_CRYPTO_DEV_ROCKCHIP_DEV=y
 CONFIG_DMA_CMA=y
+CONFIG_CMA_SIZE_MBYTES=128
 CONFIG_PRINTK_TIME=y
 CONFIG_PRINTK_TIME_FROM_ARM_ARCH_TIMER=y
 CONFIG_PRINTK_CALLER=y
 
diff --git a/arch/arm64/boot/dts/rockchip/rk3588-evb1-imx415.dtsi b/arch/arm64/boot/dts/rockchip/rk3588-evb1-imx415.dtsi
old mode 100644
new mode 100755
index cf58a3af48bb..770a5907e51e
--- a/arch/arm64/boot/dts/rockchip/rk3588-evb1-imx415.dtsi
+++ b/arch/arm64/boot/dts/rockchip/rk3588-evb1-imx415.dtsi
@@ -132,7 +132,7 @@
 };
 
 &rkcif_mmu {
-       status = "okay";
+       status = "disabled";
 };

2.dts配置预留CMA给对应模块独占

dts可以设置预留CMA,并且给对应的模块使用,参考如下修改:

设置预留CMA内存大小:

diff --git a/arch/arm64/boot/dts/rockchip/rk3588-android.dtsi b/arch/arm64/boot/dts/rockchip/rk3588-android.dtsi
old mode 100644
new mode 100755
index 7b37e019bca1..c6dd806bbbe1
--- a/arch/arm64/boot/dts/rockchip/rk3588-android.dtsi
+++ b/arch/arm64/boot/dts/rockchip/rk3588-android.dtsi
@@ -83,6 +83,14 @@
                        compatible = "rockchip,drm-cubic-lut";
                        reg = <0x0 0x0 0x0 0x0>;
                };
+
+                cif_reserved: vicap@40000000 {
+                        compatible = "shared-dma-pool";
+                        inactive;
+                        reusable;
+                        reg = <0x0 (1024 * 0x100000) 0x0 (256 * 0x100000)>; //1G ~ 1G+256MB
+                        linux,cma-default;
+                };
        };
 };

在对应的模块关闭iommu,并且引用CMA内存:

diff --git a/arch/arm64/boot/dts/rockchip/rk3588-evb1-imx415.dtsi b/arch/arm64/boot/dts/rockchip/rk3588-evb1-imx415.dtsi
old mode 100644
new mode 100755
index cf58a3af48bb..07acbb5329a3
--- a/arch/arm64/boot/dts/rockchip/rk3588-evb1-imx415.dtsi
+++ b/arch/arm64/boot/dts/rockchip/rk3588-evb1-imx415.dtsi
@@ -109,6 +109,7 @@
 
 &rkcif {
        status = "okay";
+       memory-region = <&cif_reserved>;
 };
 
 &rkcif_mipi_lvds {
@@ -132,7 +133,7 @@
 };
 
 &rkcif_mmu {
-       status = "okay";
+       status = "disabled";
 };


网站公告

今日签到

点亮在社区的每一天
去签到