diff --git a/src/freedreno/perfcntrs/freedreno_perfcntr.h b/src/freedreno/perfcntrs/freedreno_perfcntr.h index 3a1cb42b43a..a0b6e99acde 100644 --- a/src/freedreno/perfcntrs/freedreno_perfcntr.h +++ b/src/freedreno/perfcntrs/freedreno_perfcntr.h @@ -26,8 +26,10 @@ extern "C" { /* Describes a single counter: */ struct fd_perfcntr_counter { - /* offset of the select register to choose what to count: */ + /* offset of the SELect register to choose what to count: */ unsigned select_reg; + /* additional SEL regs to enable slice counters (gen8+) */ + unsigned slice_select_regs[2]; /* offset of the lo/hi 32b to read current counter value: */ unsigned counter_reg_lo; unsigned counter_reg_hi; diff --git a/src/freedreno/registers/gen_header.py b/src/freedreno/registers/gen_header.py index c902cd54c86..07e6f0cb4e6 100644 --- a/src/freedreno/registers/gen_header.py +++ b/src/freedreno/registers/gen_header.py @@ -1135,12 +1135,21 @@ def dump_perfcntrs(args): (counter_lo, counter_hi) = get_counter() select = get_reg(group['select']) + select_offset = 0 if "select_offset" in group: - select = select + int(group["select_offset"]) + select_offset = int(group["select_offset"]) + select = select + select_offset + + slice_select_str = "" + if "slice_select" in group: + slice_select = group["slice_select"] + for reg in slice_select: + val = get_reg(reg) + select_offset + slice_select_str += "0x%04x, " % val # TODO add support for things that need enable/clear regs - print(" { 0x%04x, 0x%04x, 0x%04x }," % (select, counter_lo, counter_hi)) + print(" { 0x%04x, {%s}, 0x%04x, 0x%04x }," % (select, slice_select_str, counter_lo, counter_hi)) print("};") print()