[PATCH 0/6] soc: qcom: Add Qualcomm Page Compression Engine (QPaCE) driver
WARM3d
From: Georgi Djakov <hidden>
Date: 2026-09-30 14:52:25
Also in:
linux-arm-msm, linux-block, linux-devicetree, lkml
QPaCE (Qualcomm Page Compression Engine) is a hardware block found on Qualcomm SoCs that accelerates page compression and decompression for use with the zram block device. It is composed of multiple compression, decompression, and copy engines. This series uses QPaCE's "urgent" (synchronous) path, intended for low- latency single-page operations. A command is issued by writing the source and destination DMA addresses to one of several per-CPU urgent command registers with a single store; completion is then detected by polling the command's status register. The hardware also provides a ring-based (asynchronous) path for high- throughput batched compression, where transfer and event rings allow multiple descriptors to be queued and submitted with a single doorbell write, with completion signalled via an interrupt. This path is not implemented in this series. The driver integrates with zram through a new "qpace-lz4" zcomp backend. Both compression and decompression are performed by the QPaCE hardware via the urgent synchronous path: each request DMA-maps the source and destination buffers, issues a blocking hardware command, and returns the result size. The driver also integrates with the Qualcomm Last Level Cache Controller (LLCC) to activate dedicated cache slices for compression and decompression data. This is validated on next-20260929 with the following patch applied on top to allow booting completely to the serial console: https://lore.kernel.org/all/20260911-rsc_read-v2-1-98675c248278@oss.qualcomm.com/ (local) Georgi Djakov (6): dt-bindings: soc: qcom: Add QPaCE binding soc: qcom: qpace: Add Qualcomm Page Compression Engine driver trace: qpace: Add tracepoints for QPaCE operations zram: Add QPaCE zcomp backend soc: qcom: qpace: Add LLCC slice support arm64: dts: qcom: hawi: Add QPaCE DT node .../bindings/soc/qcom/qcom,hawi-qpace.yaml | 94 ++ arch/arm64/boot/dts/qcom/hawi.dtsi | 17 + drivers/block/zram/Kconfig | 11 + drivers/block/zram/Makefile | 1 + drivers/block/zram/backend_qpace.c | 134 +++ drivers/block/zram/backend_qpace.h | 13 + drivers/block/zram/zcomp.c | 11 +- drivers/soc/qcom/Kconfig | 14 + drivers/soc/qcom/Makefile | 1 + drivers/soc/qcom/qpace.c | 830 ++++++++++++++++++ drivers/soc/qcom/qpace_internal.h | 84 ++ include/linux/soc/qcom/llcc-qcom.h | 2 + include/linux/soc/qcom/qpace.h | 154 ++++ include/trace/events/qpace.h | 99 +++ 14 files changed, 1463 insertions(+), 2 deletions(-) create mode 100644 Documentation/devicetree/bindings/soc/qcom/qcom,hawi-qpace.yaml create mode 100644 drivers/block/zram/backend_qpace.c create mode 100644 drivers/block/zram/backend_qpace.h create mode 100644 drivers/soc/qcom/qpace.c create mode 100644 drivers/soc/qcom/qpace_internal.h create mode 100644 include/linux/soc/qcom/qpace.h create mode 100644 include/trace/events/qpace.h