Linux 6.8: AMD HDR and Raspberry Pi 5
Date:
The Linux kernel 6.8 came out on March 10th, 2024, bringing brand-new features and plenty of performance improvements on different subsystems. As part of Igalia, I’m happy to be an active part of many features that are released in this version, and today I’m going to review some of them.
Linux 6.8 is packed with a lot of great features, performance optimizations, and new hardware support. In this release, we can check the Intel Xe DRM driver experimentally, further support for AMD Zen 5 and other upcoming AMD hardware, initial support for the Qualcomm Snapdragon 8 Gen 3 SoC, the Imagination PowerVR DRM kernel driver, support for the Nintendo NSO controllers, and much more.
Igalia is widely known for its contributions to Web Platforms, Chromium, and Mesa. But, we also make significant contributions to the Linux kernel. This release shows some of the great work that Igalia is putting into the kernel and strengthens our desire to keep working with this great community.
Let’s take a deep dive into Igalia’s major contributions to the 6.8 release:
AMD HDR & Color Management
You may have seen the release of a new Steam Deck last year, the Steam Deck OLED. What you may not know is that Igalia helped bring this product to life by putting some effort into the AMD driver-specific color management properties implementation. Melissa Wen, together with Joshua Ashton (Valve), and Harry Wentland (AMD), implemented several driver-specific properties to allow Gamescope to manage color features provided by the AMD hardware to fit HDR content and improve gamers’ experience.
She has explained all features implemented in the AMD display kernel driver in two blog posts and a 2023 XDC talk:
- AMD Driver-specific Properties for Color Management on Linux (Part 1)
- AMD Driver-specific Properties for Color Management on Linux (Part 2)
- The Rainbow Treasure Map Talk: Advanced color management on Linux with AMD/Steam Deck
Async Flip
André Almeida worked together with Simon Ser (SourceHut) to provide support for asynchronous page-flips in the atomic API. This feature targets users who want to present a new frame immediately, even if after missing a V-blank. This feature is particularly useful for applications with high frame rates, such as gaming.
Raspberry Pi 5
Raspberry Pi 5 was officially released on October 2023 and Igalia was ready to bring top-notch graphics support for it. Although we still can’t use the RPi 5 with the mainline kernel, it is superb to see some pieces coming upstream. Iago Toral worked on implementing all the kernel support needed for the V3D 7.1.x driver.
With the kernel patches, by the time the RPi 5 was released, it already included a fully 3.1 OpenGL ES and Vulkan 1.2 compliant driver implemented by Igalia.
GPU stats and CPU jobs for the Raspberry Pi 4/5
Apart from the release of the Raspberry Pi 5, Igalia is still working on improving the whole Raspberry Pi environment. I worked, together with José Maria “Chema” Casanova, implementing the support for GPU stats on the V3D driver. This means that RPi 4/5 users now can access the usage percentage of the GPU and they can access the statistics by process or globally.
I also worked, together with Melissa, implementing CPU jobs for the V3D driver. As the Broadcom GPU isn’t capable of performing some operations, the Vulkan driver uses the CPU to compensate for it. In order to avoid stalls in the job submission, now CPU jobs are part of the kernel and can be easily synchronized though with synchronization objects.
If you are curious about the CPU job implementation, you can check this blog post.
Other Contributions & Fixes
Sometimes we don’t contribute to a major feature in the release, however we can help improving documentation and sending fixes. André also contributed to this release by documenting the different AMD GPU reset methods, making it easier to understand by future users.
During Igalia’s efforts to improve the general users’ experience on the Steam Deck, Guilherme G. Piccoli noticed a message in the kernel log and readily provided a fix for this PCI issue.
Outside of the Steam Deck world, we can check some of Igalia’s work on the Qualcomm Adreno GPUs. Although most of our Adreno-related work is located at the user-space, Danylo Piliaiev sent a couple of kernel fixes to the msm driver, fixing some hangs and some CTS tests.
We also had contributions from our 2023 Igalia CE student, Nia Espera. Nia’s project was related to mobile Linux and she managed to write a couple of patches to the kernel in order to add support for the OnePlus 9 and OnePlus 9 Pro devices.
If you are a student interested in open-source and would like to have a first exposure to the professional world, check if we have openings for the Igalia Coding Experience. I was a CE student myself and being mentored by a Igalian was a incredible experience.
Check the complete list of Igalia’s contributions for the 6.8 release
Authored (57):
André Almeida (2)
Danylo Piliaiev (2)
Guilherme G. Piccoli (1)
Iago Toral Quiroga (4)
- drm/v3d: update UAPI to match user-space for V3D 7.x
- drm/v3d: fix up register addresses for V3D 7.x
- dt-bindings: gpu: v3d: Add BCM2712’s compatible
- drm/v3d: add brcm,2712-v3d as a compatible V3D device
Maíra Canal (17)
- drm/v3d: wait for all jobs to finish before unregistering
- drm/v3d: Implement show_fdinfo() callback for GPU usage stats
- drm/v3d: Expose the total GPU usage stats on sysfs
- MAINTAINERS: Add Maira to V3D maintainers
- drm/v3d: Don’t allow two multisync extensions in the same job
- drm/v3d: Decouple job allocation from job initiation
- drm/v3d: Use v3d_get_extensions() to parse CPU job data
- drm/v3d: Create tracepoints to track the CPU job
- drm/v3d: Enable BO mapping
- drm/v3d: Create a CPU job extension for a indirect CSD job
- drm/v3d: Create a CPU job extension for the timestamp query job
- drm/v3d: Create a CPU job extension for the reset timestamp job
- drm/v3d: Create a CPU job extension to copy timestamp query to a buffer
- drm/v3d: Create a CPU job extension for the reset performance query job
- drm/v3d: Create a CPU job extension for the copy performance query job
- drm/v3d: Fix support for register debugging on the RPi 4
- drm/v3d: Free the job and assign it to NULL if initialization fails
Melissa Wen (27)
- drm/v3d: Remove unused function header
- drm/v3d: Move wait BO ioctl to the v3d_bo file
- drm/v3d: Detach job submissions IOCTLs to a new specific file
- drm/v3d: Simplify job refcount handling
- drm/v3d: Add a CPU job submission
- drm/v3d: Detach the CSD job BO setup
- drm/drm_mode_object: increase max objects to accommodate new color props
- drm/drm_property: make replace_property_blob_from_id a DRM helper
- drm/drm_plane: track color mgmt changes per plane
- drm/amd/display: add driver-specific property for plane degamma LUT
- drm/amd/display: explicitly define EOTF and inverse EOTF
- drm/amd/display: document AMDGPU pre-defined transfer functions
- drm/amd/display: add plane 3D LUT driver-specific properties
- drm/amd/display: add plane shaper LUT and TF driver-specific properties
- drm/amd/display: add CRTC gamma TF driver-specific property
- drm/amd/display: add comments to describe DM crtc color mgmt behavior
- drm/amd/display: encapsulate atomic regamma operation
- drm/amd/display: decouple steps for mapping CRTC degamma to DC plane
- drm/amd/display: reject atomic commit if setting both plane and CRTC degamma
- drm/amd/display: add plane shaper LUT support
- drm/amd/display: add plane shaper TF support
- drm/amd/display: add plane 3D LUT support
- drm/amd/display: fix documentation for dm_crtc_additional_color_mgmt()
- drm/amd/display: fix bandwidth validation failure on DCN 2.1
- drm/amd/display: cleanup inconsistent indenting in amdgpu_dm_color
- drm/amd/display: fix null-pointer dereference on edid reading
- drm/amd/display: check dc_link before dereferencing
Nia Espera (4)
- dt-bindings: iio: adc: qcom: Add Qualcomm smb139x
- arm64: dts: qcom: sm8350: Fix DMA0 address
- arm64: dts: qcom: pm8350k: Remove hanging whitespace
- arm64: dts: qcom: sm8350: Fix remoteproc interrupt type
Signed-off-by (88):
André Almeida (4)
- drm: Refuse to async flip with atomic prop changes
- drm: allow DRM_MODE_PAGE_FLIP_ASYNC for atomic commits
- drm: introduce DRM_CAP_ATOMIC_ASYNC_PAGE_FLIP
- drm/amd: Document device reset methods
Danylo Piliaiev (2)
Guilherme G. Piccoli (1)
Iago Toral Quiroga (4)
- drm/v3d: update UAPI to match user-space for V3D 7.x
- drm/v3d: fix up register addresses for V3D 7.x
- dt-bindings: gpu: v3d: Add BCM2712’s compatible
- drm/v3d: add brcm,2712-v3d as a compatible V3D device
Jose Maria Casanova Crespo (2)
- drm/v3d: Implement show_fdinfo() callback for GPU usage stats
- drm/v3d: Expose the total GPU usage stats on sysfs
Maíra Canal (28)
- drm/v3d: wait for all jobs to finish before unregistering
- drm/v3d: update UAPI to match user-space for V3D 7.x
- drm/v3d: fix up register addresses for V3D 7.x
- dt-bindings: gpu: v3d: Add BCM2712’s compatible
- drm/v3d: add brcm,2712-v3d as a compatible V3D device
- drm/v3d: Implement show_fdinfo() callback for GPU usage stats
- drm/v3d: Expose the total GPU usage stats on sysfs
- MAINTAINERS: Drop Emma Anholt from all M lines.
- MAINTAINERS: Add Maira to V3D maintainers
- drm/v3d: Remove unused function header
- drm/v3d: Move wait BO ioctl to the v3d_bo file
- drm/v3d: Detach job submissions IOCTLs to a new specific file
- drm/v3d: Simplify job refcount handling
- drm/v3d: Don’t allow two multisync extensions in the same job
- drm/v3d: Decouple job allocation from job initiation
- drm/v3d: Add a CPU job submission
- drm/v3d: Use v3d_get_extensions() to parse CPU job data
- drm/v3d: Create tracepoints to track the CPU job
- drm/v3d: Detach the CSD job BO setup
- drm/v3d: Enable BO mapping
- drm/v3d: Create a CPU job extension for a indirect CSD job
- drm/v3d: Create a CPU job extension for the timestamp query job
- drm/v3d: Create a CPU job extension for the reset timestamp job
- drm/v3d: Create a CPU job extension to copy timestamp query to a buffer
- drm/v3d: Create a CPU job extension for the reset performance query job
- drm/v3d: Create a CPU job extension for the copy performance query job
- drm/v3d: Fix support for register debugging on the RPi 4
- drm/v3d: Free the job and assign it to NULL if initialization fails
Melissa Wen (43)
- drm/v3d: Remove unused function header
- drm/v3d: Move wait BO ioctl to the v3d_bo file
- drm/v3d: Detach job submissions IOCTLs to a new specific file
- drm/v3d: Simplify job refcount handling
- drm/v3d: Add a CPU job submission
- drm/v3d: Detach the CSD job BO setup
- drm/v3d: Create a CPU job extension for a indirect CSD job
- drm/drm_mode_object: increase max objects to accommodate new color props
- drm/drm_property: make replace_property_blob_from_id a DRM helper
- drm/drm_plane: track color mgmt changes per plane
- drm/amd/display: add driver-specific property for plane degamma LUT
- drm/amd/display: add plane degamma TF driver-specific property
- drm/amd/display: explicitly define EOTF and inverse EOTF
- drm/amd/display: document AMDGPU pre-defined transfer functions
- drm/amd/display: add plane HDR multiplier driver-specific property
- drm/amd/display: add plane 3D LUT driver-specific properties
- drm/amd/display: add plane shaper LUT and TF driver-specific properties
- drm/amd/display: add plane blend LUT and TF driver-specific properties
- drm/amd/display: add CRTC gamma TF driver-specific property
- drm/amd/display: add comments to describe DM crtc color mgmt behavior
- drm/amd/display: encapsulate atomic regamma operation
- drm/amd/display: add CRTC gamma TF support
- drm/amd/display: set sdr_ref_white_level to 80 for out_transfer_func
- drm/amd/display: mark plane as needing reset if color props change
- drm/amd/display: decouple steps for mapping CRTC degamma to DC plane
- drm/amd/display: add plane degamma TF and LUT support
- drm/amd/display: reject atomic commit if setting both plane and CRTC degamma
- drm/amd/display: add dc_fixpt_from_s3132 helper
- drm/amd/display: add HDR multiplier support
- drm/amd/display: add plane shaper LUT support
- drm/amd/display: add plane shaper TF support
- drm/amd/display: add plane 3D LUT support
- drm/amd/display: handle empty LUTs in __set_input_tf
- drm/amd/display: add plane blend LUT and TF support
- drm/amd/display: allow newer DC hardware to use degamma ROM for PQ/HLG
- drm/amd/display: copy 3D LUT settings from crtc state to stream_update
- drm/amd/display: add plane CTM driver-specific property
- drm/amd/display: add plane CTM support
- drm/amd/display: fix documentation for dm_crtc_additional_color_mgmt()
- drm/amd/display: fix bandwidth validation failure on DCN 2.1
- drm/amd/display: cleanup inconsistent indenting in amdgpu_dm_color
- drm/amd/display: fix null-pointer dereference on edid reading
- drm/amd/display: check dc_link before dereferencing
Nia Espera (4)
- dt-bindings: iio: adc: qcom: Add Qualcomm smb139x
- arm64: dts: qcom: sm8350: Fix DMA0 address
- arm64: dts: qcom: pm8350k: Remove hanging whitespace
- arm64: dts: qcom: sm8350: Fix remoteproc interrupt type
Acked-by (4):
Jose Maria Casanova Crespo (2)
- drm/v3d: Implement show_fdinfo() callback for GPU usage stats
- drm/v3d: Expose the total GPU usage stats on sysfs
Maíra Canal (1)
Melissa Wen (1)
Reviewed-by (30):
André Almeida (1)
Christian Gmeiner (1)
Iago Toral Quiroga (20)
- drm/v3d: wait for all jobs to finish before unregistering
- drm/v3d: Remove unused function header
- drm/v3d: Move wait BO ioctl to the v3d_bo file
- drm/v3d: Detach job submissions IOCTLs to a new specific file
- drm/v3d: Simplify job refcount handling
- drm/v3d: Don’t allow two multisync extensions in the same job
- drm/v3d: Decouple job allocation from job initiation
- drm/v3d: Add a CPU job submission
- drm/v3d: Use v3d_get_extensions() to parse CPU job data
- drm/v3d: Create tracepoints to track the CPU job
- drm/v3d: Detach the CSD job BO setup
- drm/v3d: Enable BO mapping
- drm/v3d: Create a CPU job extension for a indirect CSD job
- drm/v3d: Create a CPU job extension for the timestamp query job
- drm/v3d: Create a CPU job extension for the reset timestamp job
- drm/v3d: Create a CPU job extension to copy timestamp query to a buffer
- drm/v3d: Create a CPU job extension for the reset performance query job
- drm/v3d: Create a CPU job extension for the copy performance query job
- drm/v3d: Fix support for register debugging on the RPi 4
- drm/v3d: Free the job and assign it to NULL if initialization fails
Maíra Canal (4)
- drm/v3d: update UAPI to match user-space for V3D 7.x
- drm/v3d: fix up register addresses for V3D 7.x
- dt-bindings: gpu: v3d: Add BCM2712’s compatible
- drm/v3d: add brcm,2712-v3d as a compatible V3D device
Melissa Wen (4)
- drm/v3d: Implement show_fdinfo() callback for GPU usage stats
- drm/v3d: Expose the total GPU usage stats on sysfs
- drm/v3d: Fix missing error code in v3d_submit_cpu_ioctl()
- drm/amd/display: fix documentation for amdgpu_dm_verify_lut3d_size()