RK平台HDMI-IN/camera调试:预留CMA内存
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=yCONFIG_CRYPTO_DEV_ROCKCHIP=yCONFIG_CRYPTO_DEV_ROCKCHIP_DEV=yCONFIG_DMA_CMA=y
+CONFIG_CMA_SIZE_MBYTES=128CONFIG_PRINTK_TIME=yCONFIG_PRINTK_TIME_FROM_ARM_ARCH_TIMER=yCONFIG_PRINTK_CALLER=ydiff --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";};