From a1a9ac6cac4b92a4ba56da6834994d48616c36fa Mon Sep 17 00:00:00 2001 From: lfdevs Date: Sun, 27 Sep 2026 02:47:35 +0800 Subject: [PATCH] freedreno: add unofficial experimental support for Adreno 850 Add Adreno 850 device IDs for both the MSM DRM catalog and KGSL, using the A8xx Gen2 and A840-derived configuration. Set the measured highest bank bit fallback to 16 for kernels that do not expose it. Accept KGSL UBWC 7.0 and map it to the existing A8xx 8-channel configuration. Keep the A8xx register database synchronized with the kernel catalog by adding the A850 CP, VSC, SP, and CX_MISC register definitions. This change intentionally leaves A850-specific GMU programming and MALU support to the kernel and future Mesa changes. Tested by building the aarch64 Mesa packages in the termux-package-builder container and running glxinfo, vulkaninfo, vkmark, and GMEM/SYSMEM offscreen tests on an Adreno 850 device. Kernel patches can be found at: https://patchwork.freedesktop.org/series/174781/ --- src/freedreno/common/freedreno_devices.py | 23 +++++++++++++++++++++++ src/freedreno/registers/adreno/a6xx.xml | 8 ++++++++ src/freedreno/vulkan/msm_kgsl.h | 1 + src/freedreno/vulkan/tu_knl_kgsl.cc | 1 + 4 files changed, 33 insertions(+) diff --git a/src/freedreno/common/freedreno_devices.py b/src/freedreno/common/freedreno_devices.py index b1dfb7e601b3..921f039e3abf 100644 --- a/src/freedreno/common/freedreno_devices.py +++ b/src/freedreno/common/freedreno_devices.py @@ -1604,5 +1604,28 @@ raw_magic_regs = a8xx_base_raw_magic_regs, )) +add_gpus([ + GPUId(chip_id=0x44051401, name="Adreno (TM) 850"), # DRM/MSM + GPUId(chip_id=0xffff44051401, name="Adreno (TM) 850"), # DRM/MSM fuse fallback + GPUId(chip_id=0xffff44051431, name="Adreno (TM) 850"), # KGSL + ], A6xxGPUInfo( + CHIP.A8XX, + [a7xx_base, a7xx_gen3, a8xx_base, a8xx_gen2, + GPUProps(shading_rate_matches_vk = True)], + num_ccu = 6, + num_slices = 3, + tile_align_w = 96, + tile_align_h = 32, + tile_max_w = 16416, + tile_max_h = 16384, + num_vsc_pipes = 32, + cs_shared_mem_size = 32 * 1024, + wave_granularity = 2, + fibers_per_sp = 128 * 2 * 16, + highest_bank_bit = 16, + magic_regs = dict(), + raw_magic_regs = a8xx_base_raw_magic_regs, + )) + if __name__ == "__main__": main() diff --git a/src/freedreno/registers/adreno/a6xx.xml b/src/freedreno/registers/adreno/a6xx.xml index c26f1a950b7c..07e3ee9f4e2d 100644 --- a/src/freedreno/registers/adreno/a6xx.xml +++ b/src/freedreno/registers/adreno/a6xx.xml @@ -269,6 +269,7 @@ by a particular renderpass/blit. + @@ -1326,6 +1327,7 @@ by a particular renderpass/blit. + @@ -4384,6 +4386,7 @@ by a particular renderpass/blit. +