更换了800*480的屏幕以后报错[记录]
更换了800*480的屏幕以后,报错:
[ 0.138371] rockchip-drm display-subsystem: bound ff990000.vop (ops 0xb039a8e4) [ 0.138480] rockchip-drm display-subsystem: bound ff000000.syscon:rgb (ops 0xb039b444) [ 0.139121] rockchip-drm display-subsystem: failed to parse loader memory [ 0.139394] [drm:rockchip_gem_create_object] *ERROR* failed to allocate 1536000 byte dma buffer [ 0.139418] rockchip-drm display-subsystem: [drm:rockchip_drm_fbdev_init] *ERROR* Failed to set initial hw config - -12. [ 0.139819] rockchip-drm display-subsystem: master bind failed: -12 [ 0.139913] rockchip-drm: probe of display-subsystem failed with error -12
应该是ARGB的缓存空间800*480*4=1536000
查源代码是这个位置申请的DMA内存
解决方法:
改设备树
reserved-memory { #address-cells = <1>; #size-cells = <1>; ranges; linux,cma { compatible = "shared-dma-pool"; inactive; reusable; size = <0x1000000>; linux,cma-default; }; drm_logo: drm-logo@00000000 { compatible = "rockchip,drm-logo"; reg = <0x0 0x0>; }; };
这是设备树中的一部分内容,用于描述保留内存区域和相关设备的配置。让我为你解释一下:
首先,`reserved-memory` 是一个设备树节点,它用于定义保留内存区域。
`#address-cells` 和 `#size-cells` 属性指定了地址单元和大小单元的数量。
`ranges` 属性为空,表示没有定义范围。
`linux,cma` 是关于连续内存分配器(Contiguous Memory Allocator)的配置。`compatible` 属性表示与共享DMA池(Shared DMA Pool)兼容。`inactive` 表示此连续内存未被使用,`reusable` 表示可以重新使用,`size` 属性定义了连续内存的大小,`linux,cma-default` 表示这是默认的连续内存配置。
`drm_logo` 是一个子节点,它描述了一个名为 `drm-logo` 的设备。`compatible` 属性指定了该设备与 Rockchip 平台上的 DRM-Logo 兼容。`reg` 属性定义了该设备的寄存器地址范围。
这段设备树描述了一个保留内存区域和一个 DRM-Logo 设备。