[PATCH v2 4/4] arm64: dts: qcom: x1-dell-thena: bump linux,cma to 256 MiB

Michael Scott mike.scott at oss.qualcomm.com
Fri May 22 10:16:58 PDT 2026


On 5/21/26 5:04 AM, Bryan O'Donoghue wrote:
> On 21/05/2026 02:09, Michael Scott wrote:
>> The 128 MiB linux,cma reserved-memory pool on dell-thena is too small
>> to support the camera pipeline in parallel with the normal Linux
>> desktop. On a freshly-booted system with GNOME running, the typical
>> runtime consumers — msm DRM framebuffers (Wayland triple buffering on
>> the eDP panel), qcom_iris video codec buffers, qcom_camss VFE
>> pre-allocated buffers — already occupy ~100 MiB of the pool, leaving
>> only ~25 MiB free.
>>
>> The libcamera "simple" pipeline handler used by /dev/media0 on
>> dell-thena allocates four ABGR8888 frames at 1920×1088 = 32 MiB total.
>> That request fails on the fourth frame:
>>
>>      ERROR DmaBufAllocator: dma-heap allocation failure for frame-3
>>      ERROR Allocator: Stream is not part of /base/.../camera at 10 
>> active configuration
>>      Can't allocate buffers
>>      Failed to start camera session
>>
>> resulting in gnome-snapshot's "Could not play camera stream" and any
>> other libcamera-mediated app being unable to actually stream.
>>
>> Bumping linux,cma to 256 MiB (a 0.9% reservation on these laptops'
>> typical 27 GiB RAM) leaves ~150 MiB free at runtime — sufficient for
>> the libcamera buffer set plus headroom for video playback or other
>> CMA-hungry workloads in parallel.
>>
>> Tested on Dell Latitude 7455: with the 256 MiB pool, CmaFree at
>> GNOME-desktop idle is ~150 MiB, gnome-snapshot streams the OV02E10
>> camera cleanly, and `cam -c 1 --capture=2` succeeds.
>>
>> The companion board files dell-inspiron-14-plus-7441 and the upstream
>> .dts variants inherit from x1-dell-thena.dtsi, so this changes the
>> pool size for every dell-thena-based laptop in one place.
>>
>> Signed-off-by: Michael Scott <mike.scott at oss.qualcomm.com>
>> ---
>>   arch/arm64/boot/dts/qcom/x1-dell-thena.dtsi | 2 +-
>>   1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/arch/arm64/boot/dts/qcom/x1-dell-thena.dtsi 
>> b/arch/arm64/boot/dts/qcom/x1-dell-thena.dtsi
>> index d6de4da02dcd..714988a81384 100644
>> --- a/arch/arm64/boot/dts/qcom/x1-dell-thena.dtsi
>> +++ b/arch/arm64/boot/dts/qcom/x1-dell-thena.dtsi
>> @@ -167,7 +167,7 @@ led-camera-indicator {
>>       reserved-memory {
>>           linux,cma {
>>               compatible = "shared-dma-pool";
>> -            size = <0x0 0x8000000>;
>> +            size = <0x0 0x10000000>;
>>               reusable;
>>               linux,cma-default;
>>           };
>
> How old is your version of libcamera ?
>
> With CONFIG_UDMA=y you don't need a contiguous memory area at all and 
> you will get juicy and delicious GPUISP.

I have CONFIG_UDMABUF=y enabled.

>
> Instead of allocating in the kernel just use a better version of 
> libcamera
>
> ┌─[deckard at inspiron14p-linux] - [~/Development/libcamera] - [Thu May 
> 21, 13:03]
> └─[$] <git:(0.7.0-multipass-v0*)> zcat /proc/config.gz | grep UDMA
> CONFIG_UDMABUF=y
> ┌─[deckard at inspiron14p-linux] - [~/Development/libcamera] - [Thu May 
> 21, 13:03]
> └─[$] <git:(0.7.0-multipass-v0*)> cam -v
> libcamera version v0.7.1
> ┌─[deckard at inspiron14p-linux] - [~/Development/libcamera] - [Thu May 
> 21, 13:03]
> └─[$] <git:(0.7.0-multipass-v0*)> qcam
> [68:50:10.493478857] [438859]  INFO Camera camera_manager.cpp:340 
> libcamera v0.7.1
> [68:50:10.511134091] [438863] ERROR V4L2 v4l2_subdevice.cpp:1192 
> 'ov02e10 10-0010': Unable to get rectangle 2 on pad 0/0: Inappropriate 
> ioctl for device
> [68:50:10.511201590] [438863]  WARN CameraSensor 
> camera_sensor_legacy.cpp:402 'ov02e10 10-0010': The PixelArraySize 
> property has been defaulted to 1928x1088
> [68:50:10.511206069] [438863] ERROR V4L2 v4l2_subdevice.cpp:1192 
> 'ov02e10 10-0010': Unable to get rectangle 1 on pad 0/0: Inappropriate 
> ioctl for device
> [68:50:10.511209559] [438863]  WARN CameraSensor 
> camera_sensor_legacy.cpp:413 'ov02e10 10-0010': The 
> PixelArrayActiveAreas property has been defaulted to (0, 0)/1928x1088
> [68:50:10.511213778] [438863] ERROR V4L2 v4l2_subdevice.cpp:1192 
> 'ov02e10 10-0010': Unable to get rectangle 0 on pad 0/0: Inappropriate 
> ioctl for device
> [68:50:10.511216590] [438863]  WARN CameraSensor 
> camera_sensor_legacy.cpp:421 'ov02e10 10-0010': Failed to retrieve the 
> sensor crop rectangle
> [68:50:10.511219559] [438863]  WARN CameraSensor 
> camera_sensor_legacy.cpp:427 'ov02e10 10-0010': The sensor kernel 
> driver needs to be fixed
> [68:50:10.511221746] [438863]  WARN CameraSensor 
> camera_sensor_legacy.cpp:429 'ov02e10 10-0010': See 
> Documentation/sensor_driver_requirements.rst in the libcamera sources 
> for more information
> [68:50:10.511327474] [438863]  WARN CameraSensorProperties 
> camera_sensor_properties.cpp:538 No static properties available for 
> 'ov02e10'
> [68:50:10.511330599] [438863]  WARN CameraSensorProperties 
> camera_sensor_properties.cpp:540 Please consider updating the camera 
> sensor properties database
> [68:50:10.511334089] [438863]  WARN CameraSensor 
> camera_sensor_legacy.cpp:617 'ov02e10 10-0010': Rotation control not 
> available, default to 0 degrees
> [68:50:10.511340912] [438863]  WARN CameraSensor 
> camera_sensor_legacy.cpp:502 'ov02e10 10-0010': No sensor delays found 
> in static properties. Assuming unverified defaults.
> [68:50:10.512362985] [438863]  WARN IPAProxy ipa_proxy.cpp:196 
> Configuration file 'ov02e10.yaml' not found for IPA module 'simple', 
> falling back to '/usr/share/libcamera/ipa/simple/uncalibrated.yaml'
> [68:50:10.512372828] [438863] ERROR V4L2 v4l2_subdevice.cpp:1192 
> 'ov02e10 10-0010': Unable to get rectangle 0 on pad 0/0: Inappropriate 
> ioctl for device
> [68:50:10.512377464] [438863]  WARN CameraSensor 
> camera_sensor_legacy.cpp:881 'ov02e10 10-0010': The analogue crop 
> rectangle has been defaulted to the active area size
> [68:50:10.512386578] [438863]  WARN IPASoft soft_simple.cpp:104 
> IPASoft: Failed to create camera sensor helper for ov02e10
> [68:50:10.512505275] [438863]  INFO Camera camera_manager.cpp:223 
> Adding camera '/base/soc at 0/cci at ac16000/i2c-bus at 1/camera at 10' for 
> pipeline handler simple
> [68:50:10.548026157] [438859]  INFO Camera camera.cpp:1216 configuring 
> streams: (0) 1920x1088-ABGR8888/sRGB
> [68:50:10.548323081] [438863]  INFO IPASoft soft_simple.cpp:258 
> IPASoft: Exposure 1-2242, gain 16-248 (1)
> [68:50:10.548402247] [438863]  INFO SoftwareIsp software_isp.cpp:278 
> Input 1928x1088-GRBG-10-CSI2P stride 2416
> Zero-copy enabled
> [68:50:10.636862424] [438866]  INFO eGL egl.cpp:288 EGL: EGL_VERSION: 1.5
> [68:50:10.636899299] [438866]  INFO eGL egl.cpp:289 EGL: EGL_VENDOR: 
> Mesa Project
> [68:50:10.636902112] [438866]  INFO eGL egl.cpp:290 EGL: 
> EGL_CLIENT_APIS: OpenGL OpenGL_ES
> [68:50:10.636904768] [438866]  INFO eGL egl.cpp:291 EGL: 
> EGL_EXTENSIONS: EGL_ANDROID_blob_cache EGL_ANDROID_native_fence_sync 
> EGL_EXT_config_select_group EGL_EXT_create_context_robustness 
> EGL_EXT_image_dma_buf_import EGL_EXT_image_dma_buf_import_modifiers 
> EGL_EXT_query_reset_notification_strategy EGL_EXT_surface_compression 
> EGL_IMG_context_priority EGL_KHR_cl_event2 EGL_KHR_config_attribs 
> EGL_KHR_context_flush_control EGL_KHR_create_context 
> EGL_KHR_create_context_no_error EGL_KHR_fence_sync 
> EGL_KHR_get_all_proc_addresses EGL_KHR_gl_colorspace 
> EGL_KHR_gl_renderbuffer_image EGL_KHR_gl_texture_2D_image 
> EGL_KHR_gl_texture_3D_image EGL_KHR_gl_texture_cubemap_image 
> EGL_KHR_image_base EGL_KHR_no_config_context EGL_KHR_reusable_sync 
> EGL_KHR_surfaceless_context EGL_EXT_pixel_format_float 
> EGL_KHR_wait_sync EGL_MESA_configless_context EGL_MESA_gl_interop 
> EGL_MESA_image_dma_buf_export EGL_MESA_query_driver 
> EGL_MESA_x11_native_visual_id EGL_NV_context_priority_realtime
> [68:50:10.643064652] [438866]  INFO eGL egl.cpp:332 EGL: GL_VERSION: 
> OpenGL ES 3.2 Mesa 26.0.6-arch1.1
> [68:50:12.667202273] [438866]  INFO Benchmark benchmark.cpp:89 Debayer 
> processed 30 frames in 228802us, 7626 us/frame
> ┌─[deckard at inspiron14p-linux] - [~/Development/libcamera] - [Thu May 
> 21, 13:03]
> └─[$] <git:(0.7.0-multipass-v0*)>

Good point about the libcamera version. I debugged this on Ubuntu 26.04 
(v0.7.0+patches). I tried testing v0.7.1, but it caused a crash due to 
API changes with other parts of the subsystem.  I checked the diff of 
upstream between v0.7.0 and v0.7.1 for the dma allocator code and I 
didn't see any changes, but I wasn't looking at the software ISP changes.

This highlights that "I'm doing this wrong". I'll move to a cleaner 
rolling distro where staying current is a lot easier.

The GPUISP support looks great!

Dropping this patch as I'm not understanding the full allocator story.  
Sorry for the noise.




More information about the linux-phy mailing list