Re: [PATCH 04/13] drm/msm/registers: Add perfcntr json

From: Dmitry Baryshkov

Date: Tue Apr 21 2026 - 23:35:04 EST


On Mon, Apr 20, 2026 at 03:25:26PM -0700, Rob Clark wrote:
> Pull in perfcntr json and wire up generation of perfcntr tables.
>
> Sync from https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/40522
>
> Signed-off-by: Rob Clark <robin.clark@xxxxxxxxxxxxxxxx>
> ---
> drivers/gpu/drm/msm/Makefile | 17 ++
> .../msm/registers/adreno/a6xx_perfcntrs.json | 105 ++++++++
> .../msm/registers/adreno/a7xx_perfcntrs.json | 228 +++++++++++++++++
> .../msm/registers/adreno/a8xx_perfcntrs.json | 240 ++++++++++++++++++
> 4 files changed, 590 insertions(+)
> create mode 100644 drivers/gpu/drm/msm/registers/adreno/a6xx_perfcntrs.json
> create mode 100644 drivers/gpu/drm/msm/registers/adreno/a7xx_perfcntrs.json
> create mode 100644 drivers/gpu/drm/msm/registers/adreno/a8xx_perfcntrs.json
>
> diff --git a/drivers/gpu/drm/msm/Makefile b/drivers/gpu/drm/msm/Makefile
> index ce00cfb0a875..55388544de9f 100644
> --- a/drivers/gpu/drm/msm/Makefile
> +++ b/drivers/gpu/drm/msm/Makefile
> @@ -176,6 +176,11 @@ quiet_cmd_headergen = GENHDR $@
> cmd_headergen = mkdir -p $(obj)/generated && $(PYTHON3) $(src)/registers/gen_header.py \
> $(headergen-opts) --rnn $(src)/registers --xml $< c-defines > $@
>
> +# TODO how to do this for a2xx/a5xx which have different .xml arg?
> +quiet_cmd_headergen_json = GENHDRJSN $@
> + cmd_headergen_json = mkdir -p $(obj)/generated && $(PYTHON3) $(src)/registers/gen_header.py \
> + $(headergen-opts) --rnn $(src)/registers --xml $(src)/registers/adreno/a6xx.xml perfcntrs --json $< > $@
> +
> $(obj)/generated/%.xml.h: $(src)/registers/adreno/%.xml \
> $(src)/registers/adreno/adreno_common.xml \
> $(src)/registers/adreno/adreno_pm4.xml \
> @@ -192,6 +197,18 @@ $(obj)/generated/%.xml.h: $(src)/registers/display/%.xml \
> FORCE
> $(call if_changed,headergen)
>
> +$(obj)/generated/%.json.c: $(src)/registers/adreno/%.json \
> + $(src)/registers/adreno/a6xx_perfcntrs.json \
> + $(src)/registers/adreno/a7xx_perfcntrs.json \
> + $(src)/registers/adreno/a8xx_perfcntrs.json \

The extra .json arguments are unnecessary. Instead there should be a
a6xx.xml as a target prerequisite. Also the .json.c names should be
added to the targets variable, otherwise they will be remade all the
time.

> + FORCE
> + $(call if_changed,headergen_json)
> +
> +adreno-y += \
> + generated/a6xx_perfcntrs.json.o \
> + generated/a7xx_perfcntrs.json.o \
> + generated/a8xx_perfcntrs.json.o \
> +
> ADRENO_HEADERS = \
> generated/a2xx.xml.h \
> generated/a3xx.xml.h \

Consider applying the following diff on top of your changes. It handles
a2xx and a5xx prefcntrs, all the dependencies, etc. I tried
experimenting a bit, but I think the generated rules is the easiest way
to handle all the requirements in a simplest way without extra
repetitions.

diff --git a/drivers/gpu/drm/msm/Makefile b/drivers/gpu/drm/msm/Makefile
index 6143283d91fd..d405b04fa7b7 100644
--- a/drivers/gpu/drm/msm/Makefile
+++ b/drivers/gpu/drm/msm/Makefile
@@ -180,7 +180,7 @@ quiet_cmd_headergen = GENHDR $@
# TODO how to do this for a2xx/a5xx which have different .xml arg?
quiet_cmd_headergen_json = GENHDRJSN $@
cmd_headergen_json = mkdir -p $(obj)/generated && $(PYTHON3) $(src)/registers/gen_header.py \
- $(headergen-opts) --rnn $(src)/registers --xml $(src)/registers/adreno/a6xx.xml perfcntrs --json $< > $@
+ $(headergen-opts) --rnn $(src)/registers --xml $(filter %.xml,$^) perfcntrs --json $< > $@

$(obj)/generated/%.xml.h: $(src)/registers/adreno/%.xml \
$(src)/registers/adreno/adreno_common.xml \
@@ -198,17 +198,22 @@ $(obj)/generated/%.xml.h: $(src)/registers/display/%.xml \
FORCE
$(call if_changed,headergen)

-$(obj)/generated/%.json.c: $(src)/registers/adreno/%.json \
- $(src)/registers/adreno/a6xx_perfcntrs.json \
- $(src)/registers/adreno/a7xx_perfcntrs.json \
- $(src)/registers/adreno/a8xx_perfcntrs.json \
+ADRENO_PERFCNTRS =
+
+define adreno_perfcntrs
+ADRENO_PERFCNTRS += generated/$(1)_perfcntrs.json.c
+$$(obj)/generated/$(1)_perfcntrs.json.c: $$(src)/registers/adreno/$(1)_perfcntrs.json \
+ $$(src)/registers/adreno/$(2).xml \
FORCE
- $(call if_changed,headergen_json)
+ $$(call if_changed,headergen_json)
+endef
+
+$(eval $(call adreno_perfcntrs,a2xx,a2xx))
+$(eval $(call adreno_perfcntrs,a5xx,a5xx))
+$(eval $(call adreno_perfcntrs,a6xx,a6xx))
+$(eval $(call adreno_perfcntrs,a7xx,a6xx))
+$(eval $(call adreno_perfcntrs,a8xx,a6xx))

-adreno-y += \
- generated/a6xx_perfcntrs.json.o \
- generated/a7xx_perfcntrs.json.o \
- generated/a8xx_perfcntrs.json.o \
+adreno-y += $(ADRENO_PERFCNTRS:.c=.o)

ADRENO_HEADERS = \
generated/a2xx.xml.h \
@@ -244,4 +249,4 @@ DISPLAY_HEADERS = \
$(addprefix $(obj)/,$(adreno-y)): $(addprefix $(obj)/,$(ADRENO_HEADERS))
$(addprefix $(obj)/,$(msm-display-y)): $(addprefix $(obj)/,$(DISPLAY_HEADERS))

-targets += $(ADRENO_HEADERS) $(DISPLAY_HEADERS)
+targets += $(ADRENO_HEADERS) $(DISPLAY_HEADERS) $(ADRENO_PERFCNTRS)

--
With best wishes
Dmitry