On a750, Qualcomm decided to gate support for certain features behind a "software fuse." This consists of a register in the cx_mem zone, which is normally only writeable by the TrustZone firmware. On bootup it is 0, and we must call an SCM method to initialize it. Then we communicate its value to userspace. This implements all of this, copying the SCM call from the downstream kernel and kgsl. So far the only optional feature we use is ray tracing (i.e. the "ray_intersection" instruction) in a pending Mesa MR [1], so that's what we expose to userspace. There's one extra patch to write some missing registers, which depends on the register XML bump but is otherwise unrelated, I just included it to make things easier on myself. Note, 'drm/msm/a7xx: Initialize a750 "software fuse"' has a compile-time dependency on 'firmware: qcom_scm: Add gpu_init_regs call' and it depends on 'arm64: dts: qcom: sm8650: Fix GPU cx_mem size' to avoid a boot-time hang. The commit the latter fixes, db33633b05c0 ("arm64: dts: qcom: sm8650: add GPU nodes"), hasn't landed upstream yet, so we can avoid regressions by merging it first. I think the rest of the series can go through drm/msm for 6.10 after we land the first commit in the same tree as db33633b05c0 to make sure linux-next is never broken, although we'll need Bjorn's ack to land 'firmware: qcom_scm: Add gpu_init_regs call' through drm/msm. [1] https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/28447 Connor Abbott (6): arm64: dts: qcom: sm8650: Fix GPU cx_mem size firmware: qcom_scm: Add gpu_init_regs call drm/msm: Update a6xx registers drm/msm/a7xx: Initialize a750 "software fuse" drm/msm: Add MSM_PARAM_RAYTRACING uapi drm/msm/a7xx: Add missing register writes from downstream arch/arm64/boot/dts/qcom/sm8650.dtsi | 2 +- drivers/firmware/qcom/qcom_scm.c | 14 +++ drivers/firmware/qcom/qcom_scm.h | 3 + drivers/gpu/drm/msm/adreno/a6xx_gpu.c | 97 ++++++++++++++++++- drivers/gpu/drm/msm/adreno/adreno_gpu.c | 3 + drivers/gpu/drm/msm/adreno/adreno_gpu.h | 2 + drivers/gpu/drm/msm/registers/adreno/a6xx.xml | 28 +++++- include/linux/firmware/qcom/qcom_scm.h | 23 +++++ include/uapi/drm/msm_drm.h | 1 + 9 files changed, 168 insertions(+), 5 deletions(-) -- 2.31.1 --- Changes in v3: - Formatting/style fixes. - Fix RB_CMP_DBG_ECO_CNTL write on a730/a740 and add comments from kgsl. - Link to v2: https://lore.kernel.org/r/20240426-a750-raytracing-v2-0-562ac9866d63@xxxxxxxxx --- Connor Abbott (6): arm64: dts: qcom: sm8650: Fix GPU cx_mem size firmware: qcom_scm: Add gpu_init_regs call drm/msm: Update a6xx registers drm/msm/a7xx: Initialize a750 "software fuse" drm/msm: Add MSM_PARAM_RAYTRACING uapi drm/msm/a7xx: Add missing register writes from downstream arch/arm64/boot/dts/qcom/sm8650.dtsi | 2 +- drivers/firmware/qcom/qcom_scm.c | 14 ++++ drivers/firmware/qcom/qcom_scm.h | 3 + drivers/gpu/drm/msm/adreno/a6xx_gpu.c | 102 +++++++++++++++++++++++++- drivers/gpu/drm/msm/adreno/adreno_gpu.c | 3 + drivers/gpu/drm/msm/adreno/adreno_gpu.h | 2 + drivers/gpu/drm/msm/registers/adreno/a6xx.xml | 28 ++++++- include/linux/firmware/qcom/qcom_scm.h | 23 ++++++ include/uapi/drm/msm_drm.h | 1 + 9 files changed, 173 insertions(+), 5 deletions(-) --- base-commit: 7e6b8924568d1aa476b77323df8d2bdd31bd7257 change-id: 20240426-a750-raytracing-dee7a526513b Best regards, -- Connor Abbott <cwabbott0@xxxxxxxxx>