freedreno: slurp in rnndb
authorRob Clark <robdclark@chromium.org>
Thu, 23 Jul 2020 21:59:38 +0000 (14:59 -0700)
committerMarge Bot <eric+marge@anholt.net>
Tue, 28 Jul 2020 09:45:08 +0000 (09:45 +0000)
Pull in all of $envytools/rnndb (including display, etc) from envytools
commit 6ccdda33ac4d88e19d2a70e1b4edaaab5ec4b026

This changes the directory structure to match the organization in the
envytools tree.

Signed-off-by: Rob Clark <robdclark@chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6070>

34 files changed:
src/freedreno/registers/a2xx.xml [deleted file]
src/freedreno/registers/a3xx.xml [deleted file]
src/freedreno/registers/a4xx.xml [deleted file]
src/freedreno/registers/a5xx.xml [deleted file]
src/freedreno/registers/a6xx.xml [deleted file]
src/freedreno/registers/adreno.xml [new file with mode: 0644]
src/freedreno/registers/adreno/a2xx.xml [new file with mode: 0644]
src/freedreno/registers/adreno/a3xx.xml [new file with mode: 0644]
src/freedreno/registers/adreno/a4xx.xml [new file with mode: 0644]
src/freedreno/registers/adreno/a5xx.xml [new file with mode: 0644]
src/freedreno/registers/adreno/a6xx.xml [new file with mode: 0644]
src/freedreno/registers/adreno/a6xx_gmu.xml [new file with mode: 0644]
src/freedreno/registers/adreno/adreno_common.xml [new file with mode: 0644]
src/freedreno/registers/adreno/adreno_control_regs.xml [new file with mode: 0644]
src/freedreno/registers/adreno/adreno_pipe_regs.xml [new file with mode: 0644]
src/freedreno/registers/adreno/adreno_pm4.xml [new file with mode: 0644]
src/freedreno/registers/adreno/ocmem.xml [new file with mode: 0644]
src/freedreno/registers/adreno_common.xml [deleted file]
src/freedreno/registers/adreno_pm4.xml [deleted file]
src/freedreno/registers/dsi/dsi.xml [new file with mode: 0644]
src/freedreno/registers/dsi/mmss_cc.xml [new file with mode: 0644]
src/freedreno/registers/dsi/sfpb.xml [new file with mode: 0644]
src/freedreno/registers/edp/edp.xml [new file with mode: 0644]
src/freedreno/registers/hdmi/hdmi.xml [new file with mode: 0644]
src/freedreno/registers/hdmi/qfprom.xml [new file with mode: 0644]
src/freedreno/registers/mdp/mdp4.xml [new file with mode: 0644]
src/freedreno/registers/mdp/mdp5.xml [new file with mode: 0644]
src/freedreno/registers/mdp/mdp_common.xml [new file with mode: 0644]
src/freedreno/registers/meson.build
src/freedreno/registers/msm.xml [new file with mode: 0644]
src/freedreno/registers/rules-ng-ng.txt [new file with mode: 0644]
src/freedreno/registers/rules-ng-ng.xsd [new file with mode: 0644]
src/freedreno/registers/text-format.txt [new file with mode: 0644]
src/freedreno/registers/update-headers.sh [deleted file]

diff --git a/src/freedreno/registers/a2xx.xml b/src/freedreno/registers/a2xx.xml
deleted file mode 100644 (file)
index 549ce1e..0000000
+++ /dev/null
@@ -1,1831 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<database xmlns="http://nouveau.freedesktop.org/"
-xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-xsi:schemaLocation="http://nouveau.freedesktop.org/ rules-ng.xsd">
-<import file="freedreno_copyright.xml"/>
-<import file="adreno/adreno_common.xml"/>
-<import file="adreno/adreno_pm4.xml"/>
-
-
-<enum name="a2xx_rb_dither_type">
-       <value name="DITHER_PIXEL" value="0"/>
-       <value name="DITHER_SUBPIXEL" value="1"/>
-</enum>
-
-<enum name="a2xx_colorformatx">
-       <value name="COLORX_4_4_4_4" value="0"/>
-       <value name="COLORX_1_5_5_5" value="1"/>
-       <value name="COLORX_5_6_5" value="2"/>
-       <value name="COLORX_8" value="3"/>
-       <value name="COLORX_8_8" value="4"/>
-       <value name="COLORX_8_8_8_8" value="5"/>
-       <value name="COLORX_S8_8_8_8" value="6"/>
-       <value name="COLORX_16_FLOAT" value="7"/>
-       <value name="COLORX_16_16_FLOAT" value="8"/>
-       <value name="COLORX_16_16_16_16_FLOAT" value="9"/>
-       <value name="COLORX_32_FLOAT" value="10"/>
-       <value name="COLORX_32_32_FLOAT" value="11"/>
-       <value name="COLORX_32_32_32_32_FLOAT" value="12"/>
-       <value name="COLORX_2_3_3" value="13"/>
-       <value name="COLORX_8_8_8" value="14"/>
-</enum>
-
-<enum name="a2xx_sq_surfaceformat">
-       <value name="FMT_1_REVERSE" value="0"/>
-       <value name="FMT_1" value="1"/>
-       <value name="FMT_8" value="2"/>
-       <value name="FMT_1_5_5_5" value="3"/>
-       <value name="FMT_5_6_5" value="4"/>
-       <value name="FMT_6_5_5" value="5"/>
-       <value name="FMT_8_8_8_8" value="6"/>
-       <value name="FMT_2_10_10_10" value="7"/>
-       <value name="FMT_8_A" value="8"/>
-       <value name="FMT_8_B" value="9"/>
-       <value name="FMT_8_8" value="10"/>
-       <value name="FMT_Cr_Y1_Cb_Y0" value="11"/>
-       <value name="FMT_Y1_Cr_Y0_Cb" value="12"/>
-       <value name="FMT_5_5_5_1" value="13"/>
-       <value name="FMT_8_8_8_8_A" value="14"/>
-       <value name="FMT_4_4_4_4" value="15"/>
-       <value name="FMT_8_8_8" value="16"/>
-       <value name="FMT_DXT1" value="18"/>
-       <value name="FMT_DXT2_3" value="19"/>
-       <value name="FMT_DXT4_5" value="20"/>
-       <value name="FMT_10_10_10_2" value="21"/>
-       <value name="FMT_24_8" value="22"/>
-       <value name="FMT_16" value="24"/>
-       <value name="FMT_16_16" value="25"/>
-       <value name="FMT_16_16_16_16" value="26"/>
-       <value name="FMT_16_EXPAND" value="27"/>
-       <value name="FMT_16_16_EXPAND" value="28"/>
-       <value name="FMT_16_16_16_16_EXPAND" value="29"/>
-       <value name="FMT_16_FLOAT" value="30"/>
-       <value name="FMT_16_16_FLOAT" value="31"/>
-       <value name="FMT_16_16_16_16_FLOAT" value="32"/>
-       <value name="FMT_32" value="33"/>
-       <value name="FMT_32_32" value="34"/>
-       <value name="FMT_32_32_32_32" value="35"/>
-       <value name="FMT_32_FLOAT" value="36"/>
-       <value name="FMT_32_32_FLOAT" value="37"/>
-       <value name="FMT_32_32_32_32_FLOAT" value="38"/>
-       <value name="FMT_ATI_TC_RGB" value="39"/>
-       <value name="FMT_ATI_TC_RGBA" value="40"/>
-       <value name="FMT_ATI_TC_555_565_RGB" value="41"/>
-       <value name="FMT_ATI_TC_555_565_RGBA" value="42"/>
-       <value name="FMT_ATI_TC_RGBA_INTERP" value="43"/>
-       <value name="FMT_ATI_TC_555_565_RGBA_INTERP" value="44"/>
-       <value name="FMT_ETC1_RGBA_INTERP" value="46"/>
-       <value name="FMT_ETC1_RGB" value="47"/>
-       <value name="FMT_ETC1_RGBA" value="48"/>
-       <value name="FMT_DXN" value="49"/>
-       <value name="FMT_2_3_3" value="51"/>
-       <value name="FMT_2_10_10_10_AS_16_16_16_16" value="54"/>
-       <value name="FMT_10_10_10_2_AS_16_16_16_16" value="55"/>
-       <value name="FMT_32_32_32_FLOAT" value="57"/>
-       <value name="FMT_DXT3A" value="58"/>
-       <value name="FMT_DXT5A" value="59"/>
-       <value name="FMT_CTX1" value="60"/>
-</enum>
-
-<enum name="a2xx_sq_ps_vtx_mode">
-       <value name="POSITION_1_VECTOR" value="0"/>
-       <value name="POSITION_2_VECTORS_UNUSED" value="1"/>
-       <value name="POSITION_2_VECTORS_SPRITE" value="2"/>
-       <value name="POSITION_2_VECTORS_EDGE" value="3"/>
-       <value name="POSITION_2_VECTORS_KILL" value="4"/>
-       <value name="POSITION_2_VECTORS_SPRITE_KILL" value="5"/>
-       <value name="POSITION_2_VECTORS_EDGE_KILL" value="6"/>
-       <value name="MULTIPASS" value="7"/>
-</enum>
-
-<enum name="a2xx_sq_sample_cntl">
-       <value name="CENTROIDS_ONLY" value="0"/>
-       <value name="CENTERS_ONLY" value="1"/>
-       <value name="CENTROIDS_AND_CENTERS" value="2"/>
-</enum>
-
-<enum name="a2xx_dx_clip_space">
-       <value name="DXCLIP_OPENGL" value="0"/>
-       <value name="DXCLIP_DIRECTX" value="1"/>
-</enum>
-
-<enum name="a2xx_pa_su_sc_polymode">
-       <value name="POLY_DISABLED" value="0"/>
-       <value name="POLY_DUALMODE" value="1"/>
-</enum>
-
-<enum name="a2xx_rb_edram_mode">
-       <value name="EDRAM_NOP" value="0"/>
-       <value name="COLOR_DEPTH" value="4"/>
-       <value name="DEPTH_ONLY" value="5"/>
-       <value name="EDRAM_COPY" value="6"/>
-</enum>
-
-<enum name="a2xx_pa_sc_pattern_bit_order">
-       <value name="LITTLE" value="0"/>
-       <value name="BIG" value="1"/>
-</enum>
-
-<enum name="a2xx_pa_sc_auto_reset_cntl">
-       <value name="NEVER" value="0"/>
-       <value name="EACH_PRIMITIVE" value="1"/>
-       <value name="EACH_PACKET" value="2"/>
-</enum>
-
-<enum name="a2xx_pa_pixcenter">
-       <value name="PIXCENTER_D3D" value="0"/>
-       <value name="PIXCENTER_OGL" value="1"/>
-</enum>
-
-<enum name="a2xx_pa_roundmode">
-       <value name="TRUNCATE" value="0"/>
-       <value name="ROUND" value="1"/>
-       <value name="ROUNDTOEVEN" value="2"/>
-       <value name="ROUNDTOODD" value="3"/>
-</enum>
-
-<enum name="a2xx_pa_quantmode">
-       <value name="ONE_SIXTEENTH" value="0"/>
-       <value name="ONE_EIGTH" value="1"/>
-       <value name="ONE_QUARTER" value="2"/>
-       <value name="ONE_HALF" value="3"/>
-       <value name="ONE" value="4"/>
-</enum>
-
-<enum name="a2xx_rb_copy_sample_select">
-       <value name="SAMPLE_0" value="0"/>
-       <value name="SAMPLE_1" value="1"/>
-       <value name="SAMPLE_2" value="2"/>
-       <value name="SAMPLE_3" value="3"/>
-       <value name="SAMPLE_01" value="4"/>
-       <value name="SAMPLE_23" value="5"/>
-       <value name="SAMPLE_0123" value="6"/>
-</enum>
-
-<enum name="a2xx_rb_blend_opcode">
-       <value name="BLEND2_DST_PLUS_SRC" value="0"/>
-       <value name="BLEND2_SRC_MINUS_DST" value="1"/>
-       <value name="BLEND2_MIN_DST_SRC" value="2"/>
-       <value name="BLEND2_MAX_DST_SRC" value="3"/>
-       <value name="BLEND2_DST_MINUS_SRC" value="4"/>
-       <value name="BLEND2_DST_PLUS_SRC_BIAS" value="5"/>
-</enum>
-
-<enum name="a2xx_su_perfcnt_select">
-       <value value="0" name="PERF_PAPC_PASX_REQ"/>
-       <value value="2" name="PERF_PAPC_PASX_FIRST_VECTOR"/>
-       <value value="3" name="PERF_PAPC_PASX_SECOND_VECTOR"/>
-       <value value="4" name="PERF_PAPC_PASX_FIRST_DEAD"/>
-       <value value="5" name="PERF_PAPC_PASX_SECOND_DEAD"/>
-       <value value="6" name="PERF_PAPC_PASX_VTX_KILL_DISCARD"/>
-       <value value="7" name="PERF_PAPC_PASX_VTX_NAN_DISCARD"/>
-       <value value="8" name="PERF_PAPC_PA_INPUT_PRIM"/>
-       <value value="9" name="PERF_PAPC_PA_INPUT_NULL_PRIM"/>
-       <value value="10" name="PERF_PAPC_PA_INPUT_EVENT_FLAG"/>
-       <value value="11" name="PERF_PAPC_PA_INPUT_FIRST_PRIM_SLOT"/>
-       <value value="12" name="PERF_PAPC_PA_INPUT_END_OF_PACKET"/>
-       <value value="13" name="PERF_PAPC_CLPR_CULL_PRIM"/>
-       <value value="15" name="PERF_PAPC_CLPR_VV_CULL_PRIM"/>
-       <value value="17" name="PERF_PAPC_CLPR_VTX_KILL_CULL_PRIM"/>
-       <value value="18" name="PERF_PAPC_CLPR_VTX_NAN_CULL_PRIM"/>
-       <value value="19" name="PERF_PAPC_CLPR_CULL_TO_NULL_PRIM"/>
-       <value value="21" name="PERF_PAPC_CLPR_VV_CLIP_PRIM"/>
-       <value value="23" name="PERF_PAPC_CLPR_POINT_CLIP_CANDIDATE"/>
-       <value value="24" name="PERF_PAPC_CLPR_CLIP_PLANE_CNT_1"/>
-       <value value="25" name="PERF_PAPC_CLPR_CLIP_PLANE_CNT_2"/>
-       <value value="26" name="PERF_PAPC_CLPR_CLIP_PLANE_CNT_3"/>
-       <value value="27" name="PERF_PAPC_CLPR_CLIP_PLANE_CNT_4"/>
-       <value value="28" name="PERF_PAPC_CLPR_CLIP_PLANE_CNT_5"/>
-       <value value="29" name="PERF_PAPC_CLPR_CLIP_PLANE_CNT_6"/>
-       <value value="30" name="PERF_PAPC_CLPR_CLIP_PLANE_NEAR"/>
-       <value value="31" name="PERF_PAPC_CLPR_CLIP_PLANE_FAR"/>
-       <value value="32" name="PERF_PAPC_CLPR_CLIP_PLANE_LEFT"/>
-       <value value="33" name="PERF_PAPC_CLPR_CLIP_PLANE_RIGHT"/>
-       <value value="34" name="PERF_PAPC_CLPR_CLIP_PLANE_TOP"/>
-       <value value="35" name="PERF_PAPC_CLPR_CLIP_PLANE_BOTTOM"/>
-       <value value="36" name="PERF_PAPC_CLSM_NULL_PRIM"/>
-       <value value="37" name="PERF_PAPC_CLSM_TOTALLY_VISIBLE_PRIM"/>
-       <value value="38" name="PERF_PAPC_CLSM_CLIP_PRIM"/>
-       <value value="39" name="PERF_PAPC_CLSM_CULL_TO_NULL_PRIM"/>
-       <value value="40" name="PERF_PAPC_CLSM_OUT_PRIM_CNT_1"/>
-       <value value="41" name="PERF_PAPC_CLSM_OUT_PRIM_CNT_2"/>
-       <value value="42" name="PERF_PAPC_CLSM_OUT_PRIM_CNT_3"/>
-       <value value="43" name="PERF_PAPC_CLSM_OUT_PRIM_CNT_4"/>
-       <value value="44" name="PERF_PAPC_CLSM_OUT_PRIM_CNT_5"/>
-       <value value="45" name="PERF_PAPC_CLSM_OUT_PRIM_CNT_6_7"/>
-       <value value="46" name="PERF_PAPC_CLSM_NON_TRIVIAL_CULL"/>
-       <value value="47" name="PERF_PAPC_SU_INPUT_PRIM"/>
-       <value value="48" name="PERF_PAPC_SU_INPUT_CLIP_PRIM"/>
-       <value value="49" name="PERF_PAPC_SU_INPUT_NULL_PRIM"/>
-       <value value="50" name="PERF_PAPC_SU_ZERO_AREA_CULL_PRIM"/>
-       <value value="51" name="PERF_PAPC_SU_BACK_FACE_CULL_PRIM"/>
-       <value value="52" name="PERF_PAPC_SU_FRONT_FACE_CULL_PRIM"/>
-       <value value="53" name="PERF_PAPC_SU_POLYMODE_FACE_CULL"/>
-       <value value="54" name="PERF_PAPC_SU_POLYMODE_BACK_CULL"/>
-       <value value="55" name="PERF_PAPC_SU_POLYMODE_FRONT_CULL"/>
-       <value value="56" name="PERF_PAPC_SU_POLYMODE_INVALID_FILL"/>
-       <value value="57" name="PERF_PAPC_SU_OUTPUT_PRIM"/>
-       <value value="58" name="PERF_PAPC_SU_OUTPUT_CLIP_PRIM"/>
-       <value value="59" name="PERF_PAPC_SU_OUTPUT_NULL_PRIM"/>
-       <value value="60" name="PERF_PAPC_SU_OUTPUT_EVENT_FLAG"/>
-       <value value="61" name="PERF_PAPC_SU_OUTPUT_FIRST_PRIM_SLOT"/>
-       <value value="62" name="PERF_PAPC_SU_OUTPUT_END_OF_PACKET"/>
-       <value value="63" name="PERF_PAPC_SU_OUTPUT_POLYMODE_FACE"/>
-       <value value="64" name="PERF_PAPC_SU_OUTPUT_POLYMODE_BACK"/>
-       <value value="65" name="PERF_PAPC_SU_OUTPUT_POLYMODE_FRONT"/>
-       <value value="66" name="PERF_PAPC_SU_OUT_CLIP_POLYMODE_FACE"/>
-       <value value="67" name="PERF_PAPC_SU_OUT_CLIP_POLYMODE_BACK"/>
-       <value value="68" name="PERF_PAPC_SU_OUT_CLIP_POLYMODE_FRONT"/>
-       <value value="69" name="PERF_PAPC_PASX_REQ_IDLE"/>
-       <value value="70" name="PERF_PAPC_PASX_REQ_BUSY"/>
-       <value value="71" name="PERF_PAPC_PASX_REQ_STALLED"/>
-       <value value="72" name="PERF_PAPC_PASX_REC_IDLE"/>
-       <value value="73" name="PERF_PAPC_PASX_REC_BUSY"/>
-       <value value="74" name="PERF_PAPC_PASX_REC_STARVED_SX"/>
-       <value value="75" name="PERF_PAPC_PASX_REC_STALLED"/>
-       <value value="76" name="PERF_PAPC_PASX_REC_STALLED_POS_MEM"/>
-       <value value="77" name="PERF_PAPC_PASX_REC_STALLED_CCGSM_IN"/>
-       <value value="78" name="PERF_PAPC_CCGSM_IDLE"/>
-       <value value="79" name="PERF_PAPC_CCGSM_BUSY"/>
-       <value value="80" name="PERF_PAPC_CCGSM_STALLED"/>
-       <value value="81" name="PERF_PAPC_CLPRIM_IDLE"/>
-       <value value="82" name="PERF_PAPC_CLPRIM_BUSY"/>
-       <value value="83" name="PERF_PAPC_CLPRIM_STALLED"/>
-       <value value="84" name="PERF_PAPC_CLPRIM_STARVED_CCGSM"/>
-       <value value="85" name="PERF_PAPC_CLIPSM_IDLE"/>
-       <value value="86" name="PERF_PAPC_CLIPSM_BUSY"/>
-       <value value="87" name="PERF_PAPC_CLIPSM_WAIT_CLIP_VERT_ENGH"/>
-       <value value="88" name="PERF_PAPC_CLIPSM_WAIT_HIGH_PRI_SEQ"/>
-       <value value="89" name="PERF_PAPC_CLIPSM_WAIT_CLIPGA"/>
-       <value value="90" name="PERF_PAPC_CLIPSM_WAIT_AVAIL_VTE_CLIP"/>
-       <value value="91" name="PERF_PAPC_CLIPSM_WAIT_CLIP_OUTSM"/>
-       <value value="92" name="PERF_PAPC_CLIPGA_IDLE"/>
-       <value value="93" name="PERF_PAPC_CLIPGA_BUSY"/>
-       <value value="94" name="PERF_PAPC_CLIPGA_STARVED_VTE_CLIP"/>
-       <value value="95" name="PERF_PAPC_CLIPGA_STALLED"/>
-       <value value="96" name="PERF_PAPC_CLIP_IDLE"/>
-       <value value="97" name="PERF_PAPC_CLIP_BUSY"/>
-       <value value="98" name="PERF_PAPC_SU_IDLE"/>
-       <value value="99" name="PERF_PAPC_SU_BUSY"/>
-       <value value="100" name="PERF_PAPC_SU_STARVED_CLIP"/>
-       <value value="101" name="PERF_PAPC_SU_STALLED_SC"/>
-       <value value="102" name="PERF_PAPC_SU_FACENESS_CULL"/>
-</enum>
-
-<enum name="a2xx_sc_perfcnt_select">
-       <value value="0" name="SC_SR_WINDOW_VALID"/>
-       <value value="1" name="SC_CW_WINDOW_VALID"/>
-       <value value="2" name="SC_QM_WINDOW_VALID"/>
-       <value value="3" name="SC_FW_WINDOW_VALID"/>
-       <value value="4" name="SC_EZ_WINDOW_VALID"/>
-       <value value="5" name="SC_IT_WINDOW_VALID"/>
-       <value value="6" name="SC_STARVED_BY_PA"/>
-       <value value="7" name="SC_STALLED_BY_RB_TILE"/>
-       <value value="8" name="SC_STALLED_BY_RB_SAMP"/>
-       <value value="9" name="SC_STARVED_BY_RB_EZ"/>
-       <value value="10" name="SC_STALLED_BY_SAMPLE_FF"/>
-       <value value="11" name="SC_STALLED_BY_SQ"/>
-       <value value="12" name="SC_STALLED_BY_SP"/>
-       <value value="13" name="SC_TOTAL_NO_PRIMS"/>
-       <value value="14" name="SC_NON_EMPTY_PRIMS"/>
-       <value value="15" name="SC_NO_TILES_PASSING_QM"/>
-       <value value="16" name="SC_NO_PIXELS_PRE_EZ"/>
-       <value value="17" name="SC_NO_PIXELS_POST_EZ"/>
-</enum>
-
-<enum name="a2xx_vgt_perfcount_select">
-       <value value="0" name="VGT_SQ_EVENT_WINDOW_ACTIVE"/>
-       <value value="1" name="VGT_SQ_SEND"/>
-       <value value="2" name="VGT_SQ_STALLED"/>
-       <value value="3" name="VGT_SQ_STARVED_BUSY"/>
-       <value value="4" name="VGT_SQ_STARVED_IDLE"/>
-       <value value="5" name="VGT_SQ_STATIC"/>
-       <value value="6" name="VGT_PA_EVENT_WINDOW_ACTIVE"/>
-       <value value="7" name="VGT_PA_CLIP_V_SEND"/>
-       <value value="8" name="VGT_PA_CLIP_V_STALLED"/>
-       <value value="9" name="VGT_PA_CLIP_V_STARVED_BUSY"/>
-       <value value="10" name="VGT_PA_CLIP_V_STARVED_IDLE"/>
-       <value value="11" name="VGT_PA_CLIP_V_STATIC"/>
-       <value value="12" name="VGT_PA_CLIP_P_SEND"/>
-       <value value="13" name="VGT_PA_CLIP_P_STALLED"/>
-       <value value="14" name="VGT_PA_CLIP_P_STARVED_BUSY"/>
-       <value value="15" name="VGT_PA_CLIP_P_STARVED_IDLE"/>
-       <value value="16" name="VGT_PA_CLIP_P_STATIC"/>
-       <value value="17" name="VGT_PA_CLIP_S_SEND"/>
-       <value value="18" name="VGT_PA_CLIP_S_STALLED"/>
-       <value value="19" name="VGT_PA_CLIP_S_STARVED_BUSY"/>
-       <value value="20" name="VGT_PA_CLIP_S_STARVED_IDLE"/>
-       <value value="21" name="VGT_PA_CLIP_S_STATIC"/>
-       <value value="22" name="RBIU_FIFOS_EVENT_WINDOW_ACTIVE"/>
-       <value value="23" name="RBIU_IMMED_DATA_FIFO_STARVED"/>
-       <value value="24" name="RBIU_IMMED_DATA_FIFO_STALLED"/>
-       <value value="25" name="RBIU_DMA_REQUEST_FIFO_STARVED"/>
-       <value value="26" name="RBIU_DMA_REQUEST_FIFO_STALLED"/>
-       <value value="27" name="RBIU_DRAW_INITIATOR_FIFO_STARVED"/>
-       <value value="28" name="RBIU_DRAW_INITIATOR_FIFO_STALLED"/>
-       <value value="29" name="BIN_PRIM_NEAR_CULL"/>
-       <value value="30" name="BIN_PRIM_ZERO_CULL"/>
-       <value value="31" name="BIN_PRIM_FAR_CULL"/>
-       <value value="32" name="BIN_PRIM_BIN_CULL"/>
-       <value value="33" name="BIN_PRIM_FACE_CULL"/>
-       <value value="34" name="SPARE34"/>
-       <value value="35" name="SPARE35"/>
-       <value value="36" name="SPARE36"/>
-       <value value="37" name="SPARE37"/>
-       <value value="38" name="SPARE38"/>
-       <value value="39" name="SPARE39"/>
-       <value value="40" name="TE_SU_IN_VALID"/>
-       <value value="41" name="TE_SU_IN_READ"/>
-       <value value="42" name="TE_SU_IN_PRIM"/>
-       <value value="43" name="TE_SU_IN_EOP"/>
-       <value value="44" name="TE_SU_IN_NULL_PRIM"/>
-       <value value="45" name="TE_WK_IN_VALID"/>
-       <value value="46" name="TE_WK_IN_READ"/>
-       <value value="47" name="TE_OUT_PRIM_VALID"/>
-       <value value="48" name="TE_OUT_PRIM_READ"/>
-</enum>
-
-<enum name="a2xx_tcr_perfcount_select">
-       <value value="0" name="DGMMPD_IPMUX0_STALL"/>
-       <value value="4" name="DGMMPD_IPMUX_ALL_STALL"/>
-       <value value="5" name="OPMUX0_L2_WRITES"/>
-</enum>
-
-<enum name="a2xx_tp_perfcount_select">
-       <value value="0" name="POINT_QUADS"/>
-       <value value="1" name="BILIN_QUADS"/>
-       <value value="2" name="ANISO_QUADS"/>
-       <value value="3" name="MIP_QUADS"/>
-       <value value="4" name="VOL_QUADS"/>
-       <value value="5" name="MIP_VOL_QUADS"/>
-       <value value="6" name="MIP_ANISO_QUADS"/>
-       <value value="7" name="VOL_ANISO_QUADS"/>
-       <value value="8" name="ANISO_2_1_QUADS"/>
-       <value value="9" name="ANISO_4_1_QUADS"/>
-       <value value="10" name="ANISO_6_1_QUADS"/>
-       <value value="11" name="ANISO_8_1_QUADS"/>
-       <value value="12" name="ANISO_10_1_QUADS"/>
-       <value value="13" name="ANISO_12_1_QUADS"/>
-       <value value="14" name="ANISO_14_1_QUADS"/>
-       <value value="15" name="ANISO_16_1_QUADS"/>
-       <value value="16" name="MIP_VOL_ANISO_QUADS"/>
-       <value value="17" name="ALIGN_2_QUADS"/>
-       <value value="18" name="ALIGN_4_QUADS"/>
-       <value value="19" name="PIX_0_QUAD"/>
-       <value value="20" name="PIX_1_QUAD"/>
-       <value value="21" name="PIX_2_QUAD"/>
-       <value value="22" name="PIX_3_QUAD"/>
-       <value value="23" name="PIX_4_QUAD"/>
-       <value value="24" name="TP_MIPMAP_LOD0"/>
-       <value value="25" name="TP_MIPMAP_LOD1"/>
-       <value value="26" name="TP_MIPMAP_LOD2"/>
-       <value value="27" name="TP_MIPMAP_LOD3"/>
-       <value value="28" name="TP_MIPMAP_LOD4"/>
-       <value value="29" name="TP_MIPMAP_LOD5"/>
-       <value value="30" name="TP_MIPMAP_LOD6"/>
-       <value value="31" name="TP_MIPMAP_LOD7"/>
-       <value value="32" name="TP_MIPMAP_LOD8"/>
-       <value value="33" name="TP_MIPMAP_LOD9"/>
-       <value value="34" name="TP_MIPMAP_LOD10"/>
-       <value value="35" name="TP_MIPMAP_LOD11"/>
-       <value value="36" name="TP_MIPMAP_LOD12"/>
-       <value value="37" name="TP_MIPMAP_LOD13"/>
-       <value value="38" name="TP_MIPMAP_LOD14"/>
-</enum>
-
-<enum name="a2xx_tcm_perfcount_select">
-       <value value="0" name="QUAD0_RD_LAT_FIFO_EMPTY"/>
-       <value value="3" name="QUAD0_RD_LAT_FIFO_4TH_FULL"/>
-       <value value="4" name="QUAD0_RD_LAT_FIFO_HALF_FULL"/>
-       <value value="5" name="QUAD0_RD_LAT_FIFO_FULL"/>
-       <value value="6" name="QUAD0_RD_LAT_FIFO_LT_4TH_FULL"/>
-       <value value="28" name="READ_STARVED_QUAD0"/>
-       <value value="32" name="READ_STARVED"/>
-       <value value="33" name="READ_STALLED_QUAD0"/>
-       <value value="37" name="READ_STALLED"/>
-       <value value="38" name="VALID_READ_QUAD0"/>
-       <value value="42" name="TC_TP_STARVED_QUAD0"/>
-       <value value="46" name="TC_TP_STARVED"/>
-</enum>
-
-<enum name="a2xx_tcf_perfcount_select">
-       <value value="0" name="VALID_CYCLES"/>
-       <value value="1" name="SINGLE_PHASES"/>
-       <value value="2" name="ANISO_PHASES"/>
-       <value value="3" name="MIP_PHASES"/>
-       <value value="4" name="VOL_PHASES"/>
-       <value value="5" name="MIP_VOL_PHASES"/>
-       <value value="6" name="MIP_ANISO_PHASES"/>
-       <value value="7" name="VOL_ANISO_PHASES"/>
-       <value value="8" name="ANISO_2_1_PHASES"/>
-       <value value="9" name="ANISO_4_1_PHASES"/>
-       <value value="10" name="ANISO_6_1_PHASES"/>
-       <value value="11" name="ANISO_8_1_PHASES"/>
-       <value value="12" name="ANISO_10_1_PHASES"/>
-       <value value="13" name="ANISO_12_1_PHASES"/>
-       <value value="14" name="ANISO_14_1_PHASES"/>
-       <value value="15" name="ANISO_16_1_PHASES"/>
-       <value value="16" name="MIP_VOL_ANISO_PHASES"/>
-       <value value="17" name="ALIGN_2_PHASES"/>
-       <value value="18" name="ALIGN_4_PHASES"/>
-       <value value="19" name="TPC_BUSY"/>
-       <value value="20" name="TPC_STALLED"/>
-       <value value="21" name="TPC_STARVED"/>
-       <value value="22" name="TPC_WORKING"/>
-       <value value="23" name="TPC_WALKER_BUSY"/>
-       <value value="24" name="TPC_WALKER_STALLED"/>
-       <value value="25" name="TPC_WALKER_WORKING"/>
-       <value value="26" name="TPC_ALIGNER_BUSY"/>
-       <value value="27" name="TPC_ALIGNER_STALLED"/>
-       <value value="28" name="TPC_ALIGNER_STALLED_BY_BLEND"/>
-       <value value="29" name="TPC_ALIGNER_STALLED_BY_CACHE"/>
-       <value value="30" name="TPC_ALIGNER_WORKING"/>
-       <value value="31" name="TPC_BLEND_BUSY"/>
-       <value value="32" name="TPC_BLEND_SYNC"/>
-       <value value="33" name="TPC_BLEND_STARVED"/>
-       <value value="34" name="TPC_BLEND_WORKING"/>
-       <value value="35" name="OPCODE_0x00"/>
-       <value value="36" name="OPCODE_0x01"/>
-       <value value="37" name="OPCODE_0x04"/>
-       <value value="38" name="OPCODE_0x10"/>
-       <value value="39" name="OPCODE_0x11"/>
-       <value value="40" name="OPCODE_0x12"/>
-       <value value="41" name="OPCODE_0x13"/>
-       <value value="42" name="OPCODE_0x18"/>
-       <value value="43" name="OPCODE_0x19"/>
-       <value value="44" name="OPCODE_0x1A"/>
-       <value value="45" name="OPCODE_OTHER"/>
-       <value value="56" name="IN_FIFO_0_EMPTY"/>
-       <value value="57" name="IN_FIFO_0_LT_HALF_FULL"/>
-       <value value="58" name="IN_FIFO_0_HALF_FULL"/>
-       <value value="59" name="IN_FIFO_0_FULL"/>
-       <value value="72" name="IN_FIFO_TPC_EMPTY"/>
-       <value value="73" name="IN_FIFO_TPC_LT_HALF_FULL"/>
-       <value value="74" name="IN_FIFO_TPC_HALF_FULL"/>
-       <value value="75" name="IN_FIFO_TPC_FULL"/>
-       <value value="76" name="TPC_TC_XFC"/>
-       <value value="77" name="TPC_TC_STATE"/>
-       <value value="78" name="TC_STALL"/>
-       <value value="79" name="QUAD0_TAPS"/>
-       <value value="83" name="QUADS"/>
-       <value value="84" name="TCA_SYNC_STALL"/>
-       <value value="85" name="TAG_STALL"/>
-       <value value="88" name="TCB_SYNC_STALL"/>
-       <value value="89" name="TCA_VALID"/>
-       <value value="90" name="PROBES_VALID"/>
-       <value value="91" name="MISS_STALL"/>
-       <value value="92" name="FETCH_FIFO_STALL"/>
-       <value value="93" name="TCO_STALL"/>
-       <value value="94" name="ANY_STALL"/>
-       <value value="95" name="TAG_MISSES"/>
-       <value value="96" name="TAG_HITS"/>
-       <value value="97" name="SUB_TAG_MISSES"/>
-       <value value="98" name="SET0_INVALIDATES"/>
-       <value value="99" name="SET1_INVALIDATES"/>
-       <value value="100" name="SET2_INVALIDATES"/>
-       <value value="101" name="SET3_INVALIDATES"/>
-       <value value="102" name="SET0_TAG_MISSES"/>
-       <value value="103" name="SET1_TAG_MISSES"/>
-       <value value="104" name="SET2_TAG_MISSES"/>
-       <value value="105" name="SET3_TAG_MISSES"/>
-       <value value="106" name="SET0_TAG_HITS"/>
-       <value value="107" name="SET1_TAG_HITS"/>
-       <value value="108" name="SET2_TAG_HITS"/>
-       <value value="109" name="SET3_TAG_HITS"/>
-       <value value="110" name="SET0_SUB_TAG_MISSES"/>
-       <value value="111" name="SET1_SUB_TAG_MISSES"/>
-       <value value="112" name="SET2_SUB_TAG_MISSES"/>
-       <value value="113" name="SET3_SUB_TAG_MISSES"/>
-       <value value="114" name="SET0_EVICT1"/>
-       <value value="115" name="SET0_EVICT2"/>
-       <value value="116" name="SET0_EVICT3"/>
-       <value value="117" name="SET0_EVICT4"/>
-       <value value="118" name="SET0_EVICT5"/>
-       <value value="119" name="SET0_EVICT6"/>
-       <value value="120" name="SET0_EVICT7"/>
-       <value value="121" name="SET0_EVICT8"/>
-       <value value="130" name="SET1_EVICT1"/>
-       <value value="131" name="SET1_EVICT2"/>
-       <value value="132" name="SET1_EVICT3"/>
-       <value value="133" name="SET1_EVICT4"/>
-       <value value="134" name="SET1_EVICT5"/>
-       <value value="135" name="SET1_EVICT6"/>
-       <value value="136" name="SET1_EVICT7"/>
-       <value value="137" name="SET1_EVICT8"/>
-       <value value="146" name="SET2_EVICT1"/>
-       <value value="147" name="SET2_EVICT2"/>
-       <value value="148" name="SET2_EVICT3"/>
-       <value value="149" name="SET2_EVICT4"/>
-       <value value="150" name="SET2_EVICT5"/>
-       <value value="151" name="SET2_EVICT6"/>
-       <value value="152" name="SET2_EVICT7"/>
-       <value value="153" name="SET2_EVICT8"/>
-       <value value="162" name="SET3_EVICT1"/>
-       <value value="163" name="SET3_EVICT2"/>
-       <value value="164" name="SET3_EVICT3"/>
-       <value value="165" name="SET3_EVICT4"/>
-       <value value="166" name="SET3_EVICT5"/>
-       <value value="167" name="SET3_EVICT6"/>
-       <value value="168" name="SET3_EVICT7"/>
-       <value value="169" name="SET3_EVICT8"/>
-       <value value="178" name="FF_EMPTY"/>
-       <value value="179" name="FF_LT_HALF_FULL"/>
-       <value value="180" name="FF_HALF_FULL"/>
-       <value value="181" name="FF_FULL"/>
-       <value value="182" name="FF_XFC"/>
-       <value value="183" name="FF_STALLED"/>
-       <value value="184" name="FG_MASKS"/>
-       <value value="185" name="FG_LEFT_MASKS"/>
-       <value value="186" name="FG_LEFT_MASK_STALLED"/>
-       <value value="187" name="FG_LEFT_NOT_DONE_STALL"/>
-       <value value="188" name="FG_LEFT_FG_STALL"/>
-       <value value="189" name="FG_LEFT_SECTORS"/>
-       <value value="195" name="FG0_REQUESTS"/>
-       <value value="196" name="FG0_STALLED"/>
-       <value value="199" name="MEM_REQ512"/>
-       <value value="200" name="MEM_REQ_SENT"/>
-       <value value="202" name="MEM_LOCAL_READ_REQ"/>
-       <value value="203" name="TC0_MH_STALLED"/>
-</enum>
-
-<enum name="a2xx_sq_perfcnt_select">
-       <value value="0" name="SQ_PIXEL_VECTORS_SUB"/>
-       <value value="1" name="SQ_VERTEX_VECTORS_SUB"/>
-       <value value="2" name="SQ_ALU0_ACTIVE_VTX_SIMD0"/>
-       <value value="3" name="SQ_ALU1_ACTIVE_VTX_SIMD0"/>
-       <value value="4" name="SQ_ALU0_ACTIVE_PIX_SIMD0"/>
-       <value value="5" name="SQ_ALU1_ACTIVE_PIX_SIMD0"/>
-       <value value="6" name="SQ_ALU0_ACTIVE_VTX_SIMD1"/>
-       <value value="7" name="SQ_ALU1_ACTIVE_VTX_SIMD1"/>
-       <value value="8" name="SQ_ALU0_ACTIVE_PIX_SIMD1"/>
-       <value value="9" name="SQ_ALU1_ACTIVE_PIX_SIMD1"/>
-       <value value="10" name="SQ_EXPORT_CYCLES"/>
-       <value value="11" name="SQ_ALU_CST_WRITTEN"/>
-       <value value="12" name="SQ_TEX_CST_WRITTEN"/>
-       <value value="13" name="SQ_ALU_CST_STALL"/>
-       <value value="14" name="SQ_ALU_TEX_STALL"/>
-       <value value="15" name="SQ_INST_WRITTEN"/>
-       <value value="16" name="SQ_BOOLEAN_WRITTEN"/>
-       <value value="17" name="SQ_LOOPS_WRITTEN"/>
-       <value value="18" name="SQ_PIXEL_SWAP_IN"/>
-       <value value="19" name="SQ_PIXEL_SWAP_OUT"/>
-       <value value="20" name="SQ_VERTEX_SWAP_IN"/>
-       <value value="21" name="SQ_VERTEX_SWAP_OUT"/>
-       <value value="22" name="SQ_ALU_VTX_INST_ISSUED"/>
-       <value value="23" name="SQ_TEX_VTX_INST_ISSUED"/>
-       <value value="24" name="SQ_VC_VTX_INST_ISSUED"/>
-       <value value="25" name="SQ_CF_VTX_INST_ISSUED"/>
-       <value value="26" name="SQ_ALU_PIX_INST_ISSUED"/>
-       <value value="27" name="SQ_TEX_PIX_INST_ISSUED"/>
-       <value value="28" name="SQ_VC_PIX_INST_ISSUED"/>
-       <value value="29" name="SQ_CF_PIX_INST_ISSUED"/>
-       <value value="30" name="SQ_ALU0_FIFO_EMPTY_SIMD0"/>
-       <value value="31" name="SQ_ALU1_FIFO_EMPTY_SIMD0"/>
-       <value value="32" name="SQ_ALU0_FIFO_EMPTY_SIMD1"/>
-       <value value="33" name="SQ_ALU1_FIFO_EMPTY_SIMD1"/>
-       <value value="34" name="SQ_ALU_NOPS"/>
-       <value value="35" name="SQ_PRED_SKIP"/>
-       <value value="36" name="SQ_SYNC_ALU_STALL_SIMD0_VTX"/>
-       <value value="37" name="SQ_SYNC_ALU_STALL_SIMD1_VTX"/>
-       <value value="38" name="SQ_SYNC_TEX_STALL_VTX"/>
-       <value value="39" name="SQ_SYNC_VC_STALL_VTX"/>
-       <value value="40" name="SQ_CONSTANTS_USED_SIMD0"/>
-       <value value="41" name="SQ_CONSTANTS_SENT_SP_SIMD0"/>
-       <value value="42" name="SQ_GPR_STALL_VTX"/>
-       <value value="43" name="SQ_GPR_STALL_PIX"/>
-       <value value="44" name="SQ_VTX_RS_STALL"/>
-       <value value="45" name="SQ_PIX_RS_STALL"/>
-       <value value="46" name="SQ_SX_PC_FULL"/>
-       <value value="47" name="SQ_SX_EXP_BUFF_FULL"/>
-       <value value="48" name="SQ_SX_POS_BUFF_FULL"/>
-       <value value="49" name="SQ_INTERP_QUADS"/>
-       <value value="50" name="SQ_INTERP_ACTIVE"/>
-       <value value="51" name="SQ_IN_PIXEL_STALL"/>
-       <value value="52" name="SQ_IN_VTX_STALL"/>
-       <value value="53" name="SQ_VTX_CNT"/>
-       <value value="54" name="SQ_VTX_VECTOR2"/>
-       <value value="55" name="SQ_VTX_VECTOR3"/>
-       <value value="56" name="SQ_VTX_VECTOR4"/>
-       <value value="57" name="SQ_PIXEL_VECTOR1"/>
-       <value value="58" name="SQ_PIXEL_VECTOR23"/>
-       <value value="59" name="SQ_PIXEL_VECTOR4"/>
-       <value value="60" name="SQ_CONSTANTS_USED_SIMD1"/>
-       <value value="61" name="SQ_CONSTANTS_SENT_SP_SIMD1"/>
-       <value value="62" name="SQ_SX_MEM_EXP_FULL"/>
-       <value value="63" name="SQ_ALU0_ACTIVE_VTX_SIMD2"/>
-       <value value="64" name="SQ_ALU1_ACTIVE_VTX_SIMD2"/>
-       <value value="65" name="SQ_ALU0_ACTIVE_PIX_SIMD2"/>
-       <value value="66" name="SQ_ALU1_ACTIVE_PIX_SIMD2"/>
-       <value value="67" name="SQ_ALU0_ACTIVE_VTX_SIMD3"/>
-       <value value="68" name="SQ_PERFCOUNT_VTX_QUAL_TP_DONE"/>
-       <value value="69" name="SQ_ALU0_ACTIVE_PIX_SIMD3"/>
-       <value value="70" name="SQ_PERFCOUNT_PIX_QUAL_TP_DONE"/>
-       <value value="71" name="SQ_ALU0_FIFO_EMPTY_SIMD2"/>
-       <value value="72" name="SQ_ALU1_FIFO_EMPTY_SIMD2"/>
-       <value value="73" name="SQ_ALU0_FIFO_EMPTY_SIMD3"/>
-       <value value="74" name="SQ_ALU1_FIFO_EMPTY_SIMD3"/>
-       <value value="75" name="SQ_SYNC_ALU_STALL_SIMD2_VTX"/>
-       <value value="76" name="SQ_PERFCOUNT_VTX_POP_THREAD"/>
-       <value value="77" name="SQ_SYNC_ALU_STALL_SIMD0_PIX"/>
-       <value value="78" name="SQ_SYNC_ALU_STALL_SIMD1_PIX"/>
-       <value value="79" name="SQ_SYNC_ALU_STALL_SIMD2_PIX"/>
-       <value value="80" name="SQ_PERFCOUNT_PIX_POP_THREAD"/>
-       <value value="81" name="SQ_SYNC_TEX_STALL_PIX"/>
-       <value value="82" name="SQ_SYNC_VC_STALL_PIX"/>
-       <value value="83" name="SQ_CONSTANTS_USED_SIMD2"/>
-       <value value="84" name="SQ_CONSTANTS_SENT_SP_SIMD2"/>
-       <value value="85" name="SQ_PERFCOUNT_VTX_DEALLOC_ACK"/>
-       <value value="86" name="SQ_PERFCOUNT_PIX_DEALLOC_ACK"/>
-       <value value="87" name="SQ_ALU0_FIFO_FULL_SIMD0"/>
-       <value value="88" name="SQ_ALU1_FIFO_FULL_SIMD0"/>
-       <value value="89" name="SQ_ALU0_FIFO_FULL_SIMD1"/>
-       <value value="90" name="SQ_ALU1_FIFO_FULL_SIMD1"/>
-       <value value="91" name="SQ_ALU0_FIFO_FULL_SIMD2"/>
-       <value value="92" name="SQ_ALU1_FIFO_FULL_SIMD2"/>
-       <value value="93" name="SQ_ALU0_FIFO_FULL_SIMD3"/>
-       <value value="94" name="SQ_ALU1_FIFO_FULL_SIMD3"/>
-       <value value="95" name="VC_PERF_STATIC"/>
-       <value value="96" name="VC_PERF_STALLED"/>
-       <value value="97" name="VC_PERF_STARVED"/>
-       <value value="98" name="VC_PERF_SEND"/>
-       <value value="99" name="VC_PERF_ACTUAL_STARVED"/>
-       <value value="100" name="PIXEL_THREAD_0_ACTIVE"/>
-       <value value="101" name="VERTEX_THREAD_0_ACTIVE"/>
-       <value value="102" name="PIXEL_THREAD_0_NUMBER"/>
-       <value value="103" name="VERTEX_THREAD_0_NUMBER"/>
-       <value value="104" name="VERTEX_EVENT_NUMBER"/>
-       <value value="105" name="PIXEL_EVENT_NUMBER"/>
-       <value value="106" name="PTRBUFF_EF_PUSH"/>
-       <value value="107" name="PTRBUFF_EF_POP_EVENT"/>
-       <value value="108" name="PTRBUFF_EF_POP_NEW_VTX"/>
-       <value value="109" name="PTRBUFF_EF_POP_DEALLOC"/>
-       <value value="110" name="PTRBUFF_EF_POP_PVECTOR"/>
-       <value value="111" name="PTRBUFF_EF_POP_PVECTOR_X"/>
-       <value value="112" name="PTRBUFF_EF_POP_PVECTOR_VNZ"/>
-       <value value="113" name="PTRBUFF_PB_DEALLOC"/>
-       <value value="114" name="PTRBUFF_PI_STATE_PPB_POP"/>
-       <value value="115" name="PTRBUFF_PI_RTR"/>
-       <value value="116" name="PTRBUFF_PI_READ_EN"/>
-       <value value="117" name="PTRBUFF_PI_BUFF_SWAP"/>
-       <value value="118" name="PTRBUFF_SQ_FREE_BUFF"/>
-       <value value="119" name="PTRBUFF_SQ_DEC"/>
-       <value value="120" name="PTRBUFF_SC_VALID_CNTL_EVENT"/>
-       <value value="121" name="PTRBUFF_SC_VALID_IJ_XFER"/>
-       <value value="122" name="PTRBUFF_SC_NEW_VECTOR_1_Q"/>
-       <value value="123" name="PTRBUFF_QUAL_NEW_VECTOR"/>
-       <value value="124" name="PTRBUFF_QUAL_EVENT"/>
-       <value value="125" name="PTRBUFF_END_BUFFER"/>
-       <value value="126" name="PTRBUFF_FILL_QUAD"/>
-       <value value="127" name="VERTS_WRITTEN_SPI"/>
-       <value value="128" name="TP_FETCH_INSTR_EXEC"/>
-       <value value="129" name="TP_FETCH_INSTR_REQ"/>
-       <value value="130" name="TP_DATA_RETURN"/>
-       <value value="131" name="SPI_WRITE_CYCLES_SP"/>
-       <value value="132" name="SPI_WRITES_SP"/>
-       <value value="133" name="SP_ALU_INSTR_EXEC"/>
-       <value value="134" name="SP_CONST_ADDR_TO_SQ"/>
-       <value value="135" name="SP_PRED_KILLS_TO_SQ"/>
-       <value value="136" name="SP_EXPORT_CYCLES_TO_SX"/>
-       <value value="137" name="SP_EXPORTS_TO_SX"/>
-       <value value="138" name="SQ_CYCLES_ELAPSED"/>
-       <value value="139" name="SQ_TCFS_OPT_ALLOC_EXEC"/>
-       <value value="140" name="SQ_TCFS_NO_OPT_ALLOC"/>
-       <value value="141" name="SQ_ALU0_NO_OPT_ALLOC"/>
-       <value value="142" name="SQ_ALU1_NO_OPT_ALLOC"/>
-       <value value="143" name="SQ_TCFS_ARB_XFC_CNT"/>
-       <value value="144" name="SQ_ALU0_ARB_XFC_CNT"/>
-       <value value="145" name="SQ_ALU1_ARB_XFC_CNT"/>
-       <value value="146" name="SQ_TCFS_CFS_UPDATE_CNT"/>
-       <value value="147" name="SQ_ALU0_CFS_UPDATE_CNT"/>
-       <value value="148" name="SQ_ALU1_CFS_UPDATE_CNT"/>
-       <value value="149" name="SQ_VTX_PUSH_THREAD_CNT"/>
-       <value value="150" name="SQ_VTX_POP_THREAD_CNT"/>
-       <value value="151" name="SQ_PIX_PUSH_THREAD_CNT"/>
-       <value value="152" name="SQ_PIX_POP_THREAD_CNT"/>
-       <value value="153" name="SQ_PIX_TOTAL"/>
-       <value value="154" name="SQ_PIX_KILLED"/>
-</enum>
-
-<enum name="a2xx_sx_perfcnt_select">
-       <value value="0" name="SX_EXPORT_VECTORS"/>
-       <value value="1" name="SX_DUMMY_QUADS"/>
-       <value value="2" name="SX_ALPHA_FAIL"/>
-       <value value="3" name="SX_RB_QUAD_BUSY"/>
-       <value value="4" name="SX_RB_COLOR_BUSY"/>
-       <value value="5" name="SX_RB_QUAD_STALL"/>
-       <value value="6" name="SX_RB_COLOR_STALL"/>
-</enum>
-
-<enum name="a2xx_rbbm_perfcount1_sel">
-       <value value="0" name="RBBM1_COUNT"/>
-       <value value="1" name="RBBM1_NRT_BUSY"/>
-       <value value="2" name="RBBM1_RB_BUSY"/>
-       <value value="3" name="RBBM1_SQ_CNTX0_BUSY"/>
-       <value value="4" name="RBBM1_SQ_CNTX17_BUSY"/>
-       <value value="5" name="RBBM1_VGT_BUSY"/>
-       <value value="6" name="RBBM1_VGT_NODMA_BUSY"/>
-       <value value="7" name="RBBM1_PA_BUSY"/>
-       <value value="8" name="RBBM1_SC_CNTX_BUSY"/>
-       <value value="9" name="RBBM1_TPC_BUSY"/>
-       <value value="10" name="RBBM1_TC_BUSY"/>
-       <value value="11" name="RBBM1_SX_BUSY"/>
-       <value value="12" name="RBBM1_CP_COHER_BUSY"/>
-       <value value="13" name="RBBM1_CP_NRT_BUSY"/>
-       <value value="14" name="RBBM1_GFX_IDLE_STALL"/>
-       <value value="15" name="RBBM1_INTERRUPT"/>
-</enum>
-
-<enum name="a2xx_cp_perfcount_sel">
-       <value value="0" name="ALWAYS_COUNT"/>
-       <value value="1" name="TRANS_FIFO_FULL"/>
-       <value value="2" name="TRANS_FIFO_AF"/>
-       <value value="3" name="RCIU_PFPTRANS_WAIT"/>
-       <value value="6" name="RCIU_NRTTRANS_WAIT"/>
-       <value value="8" name="CSF_NRT_READ_WAIT"/>
-       <value value="9" name="CSF_I1_FIFO_FULL"/>
-       <value value="10" name="CSF_I2_FIFO_FULL"/>
-       <value value="11" name="CSF_ST_FIFO_FULL"/>
-       <value value="13" name="CSF_RING_ROQ_FULL"/>
-       <value value="14" name="CSF_I1_ROQ_FULL"/>
-       <value value="15" name="CSF_I2_ROQ_FULL"/>
-       <value value="16" name="CSF_ST_ROQ_FULL"/>
-       <value value="18" name="MIU_TAG_MEM_FULL"/>
-       <value value="19" name="MIU_WRITECLEAN"/>
-       <value value="22" name="MIU_NRT_WRITE_STALLED"/>
-       <value value="23" name="MIU_NRT_READ_STALLED"/>
-       <value value="24" name="ME_WRITE_CONFIRM_FIFO_FULL"/>
-       <value value="25" name="ME_VS_DEALLOC_FIFO_FULL"/>
-       <value value="26" name="ME_PS_DEALLOC_FIFO_FULL"/>
-       <value value="27" name="ME_REGS_VS_EVENT_FIFO_FULL"/>
-       <value value="28" name="ME_REGS_PS_EVENT_FIFO_FULL"/>
-       <value value="29" name="ME_REGS_CF_EVENT_FIFO_FULL"/>
-       <value value="30" name="ME_MICRO_RB_STARVED"/>
-       <value value="31" name="ME_MICRO_I1_STARVED"/>
-       <value value="32" name="ME_MICRO_I2_STARVED"/>
-       <value value="33" name="ME_MICRO_ST_STARVED"/>
-       <value value="40" name="RCIU_RBBM_DWORD_SENT"/>
-       <value value="41" name="ME_BUSY_CLOCKS"/>
-       <value value="42" name="ME_WAIT_CONTEXT_AVAIL"/>
-       <value value="43" name="PFP_TYPE0_PACKET"/>
-       <value value="44" name="PFP_TYPE3_PACKET"/>
-       <value value="45" name="CSF_RB_WPTR_NEQ_RPTR"/>
-       <value value="46" name="CSF_I1_SIZE_NEQ_ZERO"/>
-       <value value="47" name="CSF_I2_SIZE_NEQ_ZERO"/>
-       <value value="48" name="CSF_RBI1I2_FETCHING"/>
-</enum>
-
-<enum name="a2xx_rb_perfcnt_select">
-       <value value="0" name="RBPERF_CNTX_BUSY"/>
-       <value value="1" name="RBPERF_CNTX_BUSY_MAX"/>
-       <value value="2" name="RBPERF_SX_QUAD_STARVED"/>
-       <value value="3" name="RBPERF_SX_QUAD_STARVED_MAX"/>
-       <value value="4" name="RBPERF_GA_GC_CH0_SYS_REQ"/>
-       <value value="5" name="RBPERF_GA_GC_CH0_SYS_REQ_MAX"/>
-       <value value="6" name="RBPERF_GA_GC_CH1_SYS_REQ"/>
-       <value value="7" name="RBPERF_GA_GC_CH1_SYS_REQ_MAX"/>
-       <value value="8" name="RBPERF_MH_STARVED"/>
-       <value value="9" name="RBPERF_MH_STARVED_MAX"/>
-       <value value="10" name="RBPERF_AZ_BC_COLOR_BUSY"/>
-       <value value="11" name="RBPERF_AZ_BC_COLOR_BUSY_MAX"/>
-       <value value="12" name="RBPERF_AZ_BC_Z_BUSY"/>
-       <value value="13" name="RBPERF_AZ_BC_Z_BUSY_MAX"/>
-       <value value="14" name="RBPERF_RB_SC_TILE_RTR_N"/>
-       <value value="15" name="RBPERF_RB_SC_TILE_RTR_N_MAX"/>
-       <value value="16" name="RBPERF_RB_SC_SAMP_RTR_N"/>
-       <value value="17" name="RBPERF_RB_SC_SAMP_RTR_N_MAX"/>
-       <value value="18" name="RBPERF_RB_SX_QUAD_RTR_N"/>
-       <value value="19" name="RBPERF_RB_SX_QUAD_RTR_N_MAX"/>
-       <value value="20" name="RBPERF_RB_SX_COLOR_RTR_N"/>
-       <value value="21" name="RBPERF_RB_SX_COLOR_RTR_N_MAX"/>
-       <value value="22" name="RBPERF_RB_SC_SAMP_LZ_BUSY"/>
-       <value value="23" name="RBPERF_RB_SC_SAMP_LZ_BUSY_MAX"/>
-       <value value="24" name="RBPERF_ZXP_STALL"/>
-       <value value="25" name="RBPERF_ZXP_STALL_MAX"/>
-       <value value="26" name="RBPERF_EVENT_PENDING"/>
-       <value value="27" name="RBPERF_EVENT_PENDING_MAX"/>
-       <value value="28" name="RBPERF_RB_MH_VALID"/>
-       <value value="29" name="RBPERF_RB_MH_VALID_MAX"/>
-       <value value="30" name="RBPERF_SX_RB_QUAD_SEND"/>
-       <value value="31" name="RBPERF_SX_RB_COLOR_SEND"/>
-       <value value="32" name="RBPERF_SC_RB_TILE_SEND"/>
-       <value value="33" name="RBPERF_SC_RB_SAMPLE_SEND"/>
-       <value value="34" name="RBPERF_SX_RB_MEM_EXPORT"/>
-       <value value="35" name="RBPERF_SX_RB_QUAD_EVENT"/>
-       <value value="36" name="RBPERF_SC_RB_TILE_EVENT_FILTERED"/>
-       <value value="37" name="RBPERF_SC_RB_TILE_EVENT_ALL"/>
-       <value value="38" name="RBPERF_RB_SC_EZ_SEND"/>
-       <value value="39" name="RBPERF_RB_SX_INDEX_SEND"/>
-       <value value="40" name="RBPERF_GMEM_INTFO_RD"/>
-       <value value="41" name="RBPERF_GMEM_INTF1_RD"/>
-       <value value="42" name="RBPERF_GMEM_INTFO_WR"/>
-       <value value="43" name="RBPERF_GMEM_INTF1_WR"/>
-       <value value="44" name="RBPERF_RB_CP_CONTEXT_DONE"/>
-       <value value="45" name="RBPERF_RB_CP_CACHE_FLUSH"/>
-       <value value="46" name="RBPERF_ZPASS_DONE"/>
-       <value value="47" name="RBPERF_ZCMD_VALID"/>
-       <value value="48" name="RBPERF_CCMD_VALID"/>
-       <value value="49" name="RBPERF_ACCUM_GRANT"/>
-       <value value="50" name="RBPERF_ACCUM_C0_GRANT"/>
-       <value value="51" name="RBPERF_ACCUM_C1_GRANT"/>
-       <value value="52" name="RBPERF_ACCUM_FULL_BE_WR"/>
-       <value value="53" name="RBPERF_ACCUM_REQUEST_NO_GRANT"/>
-       <value value="54" name="RBPERF_ACCUM_TIMEOUT_PULSE"/>
-       <value value="55" name="RBPERF_ACCUM_LIN_TIMEOUT_PULSE"/>
-       <value value="56" name="RBPERF_ACCUM_CAM_HIT_FLUSHING"/>
-</enum>
-
-<enum name="a2xx_mh_perfcnt_select">
-       <value value="0" name="CP_R0_REQUESTS"/>
-       <value value="1" name="CP_R1_REQUESTS"/>
-       <value value="2" name="CP_R2_REQUESTS"/>
-       <value value="3" name="CP_R3_REQUESTS"/>
-       <value value="4" name="CP_R4_REQUESTS"/>
-       <value value="5" name="CP_TOTAL_READ_REQUESTS"/>
-       <value value="6" name="CP_TOTAL_WRITE_REQUESTS"/>
-       <value value="7" name="CP_TOTAL_REQUESTS"/>
-       <value value="8" name="CP_DATA_BYTES_WRITTEN"/>
-       <value value="9" name="CP_WRITE_CLEAN_RESPONSES"/>
-       <value value="10" name="CP_R0_READ_BURSTS_RECEIVED"/>
-       <value value="11" name="CP_R1_READ_BURSTS_RECEIVED"/>
-       <value value="12" name="CP_R2_READ_BURSTS_RECEIVED"/>
-       <value value="13" name="CP_R3_READ_BURSTS_RECEIVED"/>
-       <value value="14" name="CP_R4_READ_BURSTS_RECEIVED"/>
-       <value value="15" name="CP_TOTAL_READ_BURSTS_RECEIVED"/>
-       <value value="16" name="CP_R0_DATA_BEATS_READ"/>
-       <value value="17" name="CP_R1_DATA_BEATS_READ"/>
-       <value value="18" name="CP_R2_DATA_BEATS_READ"/>
-       <value value="19" name="CP_R3_DATA_BEATS_READ"/>
-       <value value="20" name="CP_R4_DATA_BEATS_READ"/>
-       <value value="21" name="CP_TOTAL_DATA_BEATS_READ"/>
-       <value value="22" name="VGT_R0_REQUESTS"/>
-       <value value="23" name="VGT_R1_REQUESTS"/>
-       <value value="24" name="VGT_TOTAL_REQUESTS"/>
-       <value value="25" name="VGT_R0_READ_BURSTS_RECEIVED"/>
-       <value value="26" name="VGT_R1_READ_BURSTS_RECEIVED"/>
-       <value value="27" name="VGT_TOTAL_READ_BURSTS_RECEIVED"/>
-       <value value="28" name="VGT_R0_DATA_BEATS_READ"/>
-       <value value="29" name="VGT_R1_DATA_BEATS_READ"/>
-       <value value="30" name="VGT_TOTAL_DATA_BEATS_READ"/>
-       <value value="31" name="TC_TOTAL_REQUESTS"/>
-       <value value="32" name="TC_ROQ_REQUESTS"/>
-       <value value="33" name="TC_INFO_SENT"/>
-       <value value="34" name="TC_READ_BURSTS_RECEIVED"/>
-       <value value="35" name="TC_DATA_BEATS_READ"/>
-       <value value="36" name="TCD_BURSTS_READ"/>
-       <value value="37" name="RB_REQUESTS"/>
-       <value value="38" name="RB_DATA_BYTES_WRITTEN"/>
-       <value value="39" name="RB_WRITE_CLEAN_RESPONSES"/>
-       <value value="40" name="AXI_READ_REQUESTS_ID_0"/>
-       <value value="41" name="AXI_READ_REQUESTS_ID_1"/>
-       <value value="42" name="AXI_READ_REQUESTS_ID_2"/>
-       <value value="43" name="AXI_READ_REQUESTS_ID_3"/>
-       <value value="44" name="AXI_READ_REQUESTS_ID_4"/>
-       <value value="45" name="AXI_READ_REQUESTS_ID_5"/>
-       <value value="46" name="AXI_READ_REQUESTS_ID_6"/>
-       <value value="47" name="AXI_READ_REQUESTS_ID_7"/>
-       <value value="48" name="AXI_TOTAL_READ_REQUESTS"/>
-       <value value="49" name="AXI_WRITE_REQUESTS_ID_0"/>
-       <value value="50" name="AXI_WRITE_REQUESTS_ID_1"/>
-       <value value="51" name="AXI_WRITE_REQUESTS_ID_2"/>
-       <value value="52" name="AXI_WRITE_REQUESTS_ID_3"/>
-       <value value="53" name="AXI_WRITE_REQUESTS_ID_4"/>
-       <value value="54" name="AXI_WRITE_REQUESTS_ID_5"/>
-       <value value="55" name="AXI_WRITE_REQUESTS_ID_6"/>
-       <value value="56" name="AXI_WRITE_REQUESTS_ID_7"/>
-       <value value="57" name="AXI_TOTAL_WRITE_REQUESTS"/>
-       <value value="58" name="AXI_TOTAL_REQUESTS_ID_0"/>
-       <value value="59" name="AXI_TOTAL_REQUESTS_ID_1"/>
-       <value value="60" name="AXI_TOTAL_REQUESTS_ID_2"/>
-       <value value="61" name="AXI_TOTAL_REQUESTS_ID_3"/>
-       <value value="62" name="AXI_TOTAL_REQUESTS_ID_4"/>
-       <value value="63" name="AXI_TOTAL_REQUESTS_ID_5"/>
-       <value value="64" name="AXI_TOTAL_REQUESTS_ID_6"/>
-       <value value="65" name="AXI_TOTAL_REQUESTS_ID_7"/>
-       <value value="66" name="AXI_TOTAL_REQUESTS"/>
-       <value value="67" name="AXI_READ_CHANNEL_BURSTS_ID_0"/>
-       <value value="68" name="AXI_READ_CHANNEL_BURSTS_ID_1"/>
-       <value value="69" name="AXI_READ_CHANNEL_BURSTS_ID_2"/>
-       <value value="70" name="AXI_READ_CHANNEL_BURSTS_ID_3"/>
-       <value value="71" name="AXI_READ_CHANNEL_BURSTS_ID_4"/>
-       <value value="72" name="AXI_READ_CHANNEL_BURSTS_ID_5"/>
-       <value value="73" name="AXI_READ_CHANNEL_BURSTS_ID_6"/>
-       <value value="74" name="AXI_READ_CHANNEL_BURSTS_ID_7"/>
-       <value value="75" name="AXI_READ_CHANNEL_TOTAL_BURSTS"/>
-       <value value="76" name="AXI_READ_CHANNEL_DATA_BEATS_READ_ID_0"/>
-       <value value="77" name="AXI_READ_CHANNEL_DATA_BEATS_READ_ID_1"/>
-       <value value="78" name="AXI_READ_CHANNEL_DATA_BEATS_READ_ID_2"/>
-       <value value="79" name="AXI_READ_CHANNEL_DATA_BEATS_READ_ID_3"/>
-       <value value="80" name="AXI_READ_CHANNEL_DATA_BEATS_READ_ID_4"/>
-       <value value="81" name="AXI_READ_CHANNEL_DATA_BEATS_READ_ID_5"/>
-       <value value="82" name="AXI_READ_CHANNEL_DATA_BEATS_READ_ID_6"/>
-       <value value="83" name="AXI_READ_CHANNEL_DATA_BEATS_READ_ID_7"/>
-       <value value="84" name="AXI_READ_CHANNEL_TOTAL_DATA_BEATS_READ"/>
-       <value value="85" name="AXI_WRITE_CHANNEL_BURSTS_ID_0"/>
-       <value value="86" name="AXI_WRITE_CHANNEL_BURSTS_ID_1"/>
-       <value value="87" name="AXI_WRITE_CHANNEL_BURSTS_ID_2"/>
-       <value value="88" name="AXI_WRITE_CHANNEL_BURSTS_ID_3"/>
-       <value value="89" name="AXI_WRITE_CHANNEL_BURSTS_ID_4"/>
-       <value value="90" name="AXI_WRITE_CHANNEL_BURSTS_ID_5"/>
-       <value value="91" name="AXI_WRITE_CHANNEL_BURSTS_ID_6"/>
-       <value value="92" name="AXI_WRITE_CHANNEL_BURSTS_ID_7"/>
-       <value value="93" name="AXI_WRITE_CHANNEL_TOTAL_BURSTS"/>
-       <value value="94" name="AXI_WRITE_CHANNEL_DATA_BYTES_WRITTEN_ID_0"/>
-       <value value="95" name="AXI_WRITE_CHANNEL_DATA_BYTES_WRITTEN_ID_1"/>
-       <value value="96" name="AXI_WRITE_CHANNEL_DATA_BYTES_WRITTEN_ID_2"/>
-       <value value="97" name="AXI_WRITE_CHANNEL_DATA_BYTES_WRITTEN_ID_3"/>
-       <value value="98" name="AXI_WRITE_CHANNEL_DATA_BYTES_WRITTEN_ID_4"/>
-       <value value="99" name="AXI_WRITE_CHANNEL_DATA_BYTES_WRITTEN_ID_5"/>
-       <value value="100" name="AXI_WRITE_CHANNEL_DATA_BYTES_WRITTEN_ID_6"/>
-       <value value="101" name="AXI_WRITE_CHANNEL_DATA_BYTES_WRITTEN_ID_7"/>
-       <value value="102" name="AXI_WRITE_CHANNEL_TOTAL_DATA_BYTES_WRITTEN"/>
-       <value value="103" name="AXI_WRITE_RESPONSE_CHANNEL_RESPONSES_ID_0"/>
-       <value value="104" name="AXI_WRITE_RESPONSE_CHANNEL_RESPONSES_ID_1"/>
-       <value value="105" name="AXI_WRITE_RESPONSE_CHANNEL_RESPONSES_ID_2"/>
-       <value value="106" name="AXI_WRITE_RESPONSE_CHANNEL_RESPONSES_ID_3"/>
-       <value value="107" name="AXI_WRITE_RESPONSE_CHANNEL_RESPONSES_ID_4"/>
-       <value value="108" name="AXI_WRITE_RESPONSE_CHANNEL_RESPONSES_ID_5"/>
-       <value value="109" name="AXI_WRITE_RESPONSE_CHANNEL_RESPONSES_ID_6"/>
-       <value value="110" name="AXI_WRITE_RESPONSE_CHANNEL_RESPONSES_ID_7"/>
-       <value value="111" name="AXI_WRITE_RESPONSE_CHANNEL_TOTAL_RESPONSES"/>
-       <value value="112" name="TOTAL_MMU_MISSES"/>
-       <value value="113" name="MMU_READ_MISSES"/>
-       <value value="114" name="MMU_WRITE_MISSES"/>
-       <value value="115" name="TOTAL_MMU_HITS"/>
-       <value value="116" name="MMU_READ_HITS"/>
-       <value value="117" name="MMU_WRITE_HITS"/>
-       <value value="118" name="SPLIT_MODE_TC_HITS"/>
-       <value value="119" name="SPLIT_MODE_TC_MISSES"/>
-       <value value="120" name="SPLIT_MODE_NON_TC_HITS"/>
-       <value value="121" name="SPLIT_MODE_NON_TC_MISSES"/>
-       <value value="122" name="STALL_AWAITING_TLB_MISS_FETCH"/>
-       <value value="123" name="MMU_TLB_MISS_READ_BURSTS_RECEIVED"/>
-       <value value="124" name="MMU_TLB_MISS_DATA_BEATS_READ"/>
-       <value value="125" name="CP_CYCLES_HELD_OFF"/>
-       <value value="126" name="VGT_CYCLES_HELD_OFF"/>
-       <value value="127" name="TC_CYCLES_HELD_OFF"/>
-       <value value="128" name="TC_ROQ_CYCLES_HELD_OFF"/>
-       <value value="129" name="TC_CYCLES_HELD_OFF_TCD_FULL"/>
-       <value value="130" name="RB_CYCLES_HELD_OFF"/>
-       <value value="131" name="TOTAL_CYCLES_ANY_CLNT_HELD_OFF"/>
-       <value value="132" name="TLB_MISS_CYCLES_HELD_OFF"/>
-       <value value="133" name="AXI_READ_REQUEST_HELD_OFF"/>
-       <value value="134" name="AXI_WRITE_REQUEST_HELD_OFF"/>
-       <value value="135" name="AXI_REQUEST_HELD_OFF"/>
-       <value value="136" name="AXI_REQUEST_HELD_OFF_INFLIGHT_LIMIT"/>
-       <value value="137" name="AXI_WRITE_DATA_HELD_OFF"/>
-       <value value="138" name="CP_SAME_PAGE_BANK_REQUESTS"/>
-       <value value="139" name="VGT_SAME_PAGE_BANK_REQUESTS"/>
-       <value value="140" name="TC_SAME_PAGE_BANK_REQUESTS"/>
-       <value value="141" name="TC_ARB_HOLD_SAME_PAGE_BANK_REQUESTS"/>
-       <value value="142" name="RB_SAME_PAGE_BANK_REQUESTS"/>
-       <value value="143" name="TOTAL_SAME_PAGE_BANK_REQUESTS"/>
-       <value value="144" name="CP_SAME_PAGE_BANK_REQUESTS_KILLED_FAIRNESS_LIMIT"/>
-       <value value="145" name="VGT_SAME_PAGE_BANK_REQUESTS_KILLED_FAIRNESS_LIMIT"/>
-       <value value="146" name="TC_SAME_PAGE_BANK_REQUESTS_KILLED_FAIRNESS_LIMIT"/>
-       <value value="147" name="RB_SAME_PAGE_BANK_REQUESTS_KILLED_FAIRNESS_LIMIT"/>
-       <value value="148" name="TOTAL_SAME_PAGE_BANK_KILLED_FAIRNESS_LIMIT"/>
-       <value value="149" name="TOTAL_MH_READ_REQUESTS"/>
-       <value value="150" name="TOTAL_MH_WRITE_REQUESTS"/>
-       <value value="151" name="TOTAL_MH_REQUESTS"/>
-       <value value="152" name="MH_BUSY"/>
-       <value value="153" name="CP_NTH_ACCESS_SAME_PAGE_BANK_SEQUENCE"/>
-       <value value="154" name="VGT_NTH_ACCESS_SAME_PAGE_BANK_SEQUENCE"/>
-       <value value="155" name="TC_NTH_ACCESS_SAME_PAGE_BANK_SEQUENCE"/>
-       <value value="156" name="RB_NTH_ACCESS_SAME_PAGE_BANK_SEQUENCE"/>
-       <value value="157" name="TC_ROQ_N_VALID_ENTRIES"/>
-       <value value="158" name="ARQ_N_ENTRIES"/>
-       <value value="159" name="WDB_N_ENTRIES"/>
-       <value value="160" name="MH_READ_LATENCY_OUTST_REQ_SUM"/>
-       <value value="161" name="MC_READ_LATENCY_OUTST_REQ_SUM"/>
-       <value value="162" name="MC_TOTAL_READ_REQUESTS"/>
-       <value value="163" name="ELAPSED_CYCLES_MH_GATED_CLK"/>
-       <value value="164" name="ELAPSED_CLK_CYCLES"/>
-       <value value="165" name="CP_W_16B_REQUESTS"/>
-       <value value="166" name="CP_W_32B_REQUESTS"/>
-       <value value="167" name="TC_16B_REQUESTS"/>
-       <value value="168" name="TC_32B_REQUESTS"/>
-       <value value="169" name="PA_REQUESTS"/>
-       <value value="170" name="PA_DATA_BYTES_WRITTEN"/>
-       <value value="171" name="PA_WRITE_CLEAN_RESPONSES"/>
-       <value value="172" name="PA_CYCLES_HELD_OFF"/>
-       <value value="173" name="AXI_READ_REQUEST_DATA_BEATS_ID_0"/>
-       <value value="174" name="AXI_READ_REQUEST_DATA_BEATS_ID_1"/>
-       <value value="175" name="AXI_READ_REQUEST_DATA_BEATS_ID_2"/>
-       <value value="176" name="AXI_READ_REQUEST_DATA_BEATS_ID_3"/>
-       <value value="177" name="AXI_READ_REQUEST_DATA_BEATS_ID_4"/>
-       <value value="178" name="AXI_READ_REQUEST_DATA_BEATS_ID_5"/>
-       <value value="179" name="AXI_READ_REQUEST_DATA_BEATS_ID_6"/>
-       <value value="180" name="AXI_READ_REQUEST_DATA_BEATS_ID_7"/>
-       <value value="181" name="AXI_TOTAL_READ_REQUEST_DATA_BEATS"/>
-</enum>
-
-<domain name="A2XX" width="32">
-
-       <bitset name="a2xx_vgt_current_bin_id_min_max" inline="yes">
-               <bitfield name="COLUMN" low="0" high="2" type="uint"/>
-               <bitfield name="ROW" low="3" high="5" type="uint"/>
-               <bitfield name="GUARD_BAND_MASK" low="6" high="8" type="uint"/>
-       </bitset>
-
-       <reg32 offset="0x0001" name="RBBM_PATCH_RELEASE"/>
-       <reg32 offset="0x003b" name="RBBM_CNTL"/>
-       <reg32 offset="0x003c" name="RBBM_SOFT_RESET"/>
-       <reg32 offset="0x00c0" name="CP_PFP_UCODE_ADDR"/>
-       <reg32 offset="0x00c1" name="CP_PFP_UCODE_DATA"/>
-
-       <enum name="adreno_mmu_clnt_beh">
-               <value name="BEH_NEVR" value="0"/>
-               <value name="BEH_TRAN_RNG" value="1"/>
-               <value name="BEH_TRAN_FLT" value="2"/>
-       </enum>
-
-       <!--
-               Note: these seem applicable only for a2xx devices with gpummu?  At
-               any rate, MH_MMU_CONFIG shows up in places in a3xx firmware where
-               it doesn't make sense, so I think offset 0x40 must be a different
-               register on a3xx.. so moving this back into A2XX domain:
-        -->
-       <reg32 offset="0x0040" name="MH_MMU_CONFIG">
-               <bitfield name="MMU_ENABLE" pos="0" type="boolean"/>
-               <bitfield name="SPLIT_MODE_ENABLE" pos="1" type="boolean"/>
-               <bitfield name="RB_W_CLNT_BEHAVIOR" low="4" high="5" type="adreno_mmu_clnt_beh"/>
-               <bitfield name="CP_W_CLNT_BEHAVIOR" low="6" high="7" type="adreno_mmu_clnt_beh"/>
-               <bitfield name="CP_R0_CLNT_BEHAVIOR" low="8" high="9" type="adreno_mmu_clnt_beh"/>
-               <bitfield name="CP_R1_CLNT_BEHAVIOR" low="10" high="11" type="adreno_mmu_clnt_beh"/>
-               <bitfield name="CP_R2_CLNT_BEHAVIOR" low="12" high="13" type="adreno_mmu_clnt_beh"/>
-               <bitfield name="CP_R3_CLNT_BEHAVIOR" low="14" high="15" type="adreno_mmu_clnt_beh"/>
-               <bitfield name="CP_R4_CLNT_BEHAVIOR" low="16" high="17" type="adreno_mmu_clnt_beh"/>
-               <bitfield name="VGT_R0_CLNT_BEHAVIOR" low="18" high="19" type="adreno_mmu_clnt_beh"/>
-               <bitfield name="VGT_R1_CLNT_BEHAVIOR" low="20" high="21" type="adreno_mmu_clnt_beh"/>
-               <bitfield name="TC_R_CLNT_BEHAVIOR" low="22" high="23" type="adreno_mmu_clnt_beh"/>
-               <bitfield name="PA_W_CLNT_BEHAVIOR" low="24" high="25" type="adreno_mmu_clnt_beh"/>
-       </reg32>
-       <reg32 offset="0x0041" name="MH_MMU_VA_RANGE">
-               <bitfield name="NUM_64KB_REGIONS" low="0" high="11" type="uint"/>
-               <bitfield name="VA_BASE" low="12" high="31" type="uint"/>
-       </reg32>
-       <reg32 offset="0x0042" name="MH_MMU_PT_BASE"/>
-       <reg32 offset="0x0043" name="MH_MMU_PAGE_FAULT"/>
-       <reg32 offset="0x0044" name="MH_MMU_TRAN_ERROR"/>
-       <reg32 offset="0x0045" name="MH_MMU_INVALIDATE">
-               <bitfield name="INVALIDATE_ALL" pos="0" type="boolean"/>
-               <bitfield name="INVALIDATE_TC" pos="1" type="boolean"/>
-       </reg32>
-       <reg32 offset="0x0046" name="MH_MMU_MPU_BASE"/>
-       <reg32 offset="0x0047" name="MH_MMU_MPU_END"/>
-
-       <reg32 offset="0x0394" name="NQWAIT_UNTIL"/>
-       <reg32 offset="0x0395" name="RBBM_PERFCOUNTER1_SELECT"/>
-       <reg32 offset="0x0397" name="RBBM_PERFCOUNTER1_LO"/>
-       <reg32 offset="0x0398" name="RBBM_PERFCOUNTER1_HI"/>
-       <reg32 offset="0x039b" name="RBBM_DEBUG"/>
-       <reg32 offset="0x039c" name="RBBM_PM_OVERRIDE1">
-               <bitfield name="RBBM_AHBCLK_PM_OVERRIDE" pos="0" type="boolean"/>
-               <bitfield name="SC_REG_SCLK_PM_OVERRIDE" pos="1" type="boolean"/>
-               <bitfield name="SC_SCLK_PM_OVERRIDE" pos="2" type="boolean"/>
-               <bitfield name="SP_TOP_SCLK_PM_OVERRIDE" pos="3" type="boolean"/>
-               <bitfield name="SP_V0_SCLK_PM_OVERRIDE" pos="4" type="boolean"/>
-               <bitfield name="SQ_REG_SCLK_PM_OVERRIDE" pos="5" type="boolean"/>
-               <bitfield name="SQ_REG_FIFOS_SCLK_PM_OVERRIDE" pos="6" type="boolean"/>
-               <bitfield name="SQ_CONST_MEM_SCLK_PM_OVERRIDE" pos="7" type="boolean"/>
-               <bitfield name="SQ_SQ_SCLK_PM_OVERRIDE" pos="8" type="boolean"/>
-               <bitfield name="SX_SCLK_PM_OVERRIDE" pos="9" type="boolean"/>
-               <bitfield name="SX_REG_SCLK_PM_OVERRIDE" pos="10" type="boolean"/>
-               <bitfield name="TCM_TCO_SCLK_PM_OVERRIDE" pos="11" type="boolean"/>
-               <bitfield name="TCM_TCM_SCLK_PM_OVERRIDE" pos="12" type="boolean"/>
-               <bitfield name="TCM_TCD_SCLK_PM_OVERRIDE" pos="13" type="boolean"/>
-               <bitfield name="TCM_REG_SCLK_PM_OVERRIDE" pos="14" type="boolean"/>
-               <bitfield name="TPC_TPC_SCLK_PM_OVERRIDE" pos="15" type="boolean"/>
-               <bitfield name="TPC_REG_SCLK_PM_OVERRIDE" pos="16" type="boolean"/>
-               <bitfield name="TCF_TCA_SCLK_PM_OVERRIDE" pos="17" type="boolean"/>
-               <bitfield name="TCF_TCB_SCLK_PM_OVERRIDE" pos="18" type="boolean"/>
-               <bitfield name="TCF_TCB_READ_SCLK_PM_OVERRIDE" pos="19" type="boolean"/>
-               <bitfield name="TP_TP_SCLK_PM_OVERRIDE" pos="20" type="boolean"/>
-               <bitfield name="TP_REG_SCLK_PM_OVERRIDE" pos="21" type="boolean"/>
-               <bitfield name="CP_G_SCLK_PM_OVERRIDE" pos="22" type="boolean"/>
-               <bitfield name="CP_REG_SCLK_PM_OVERRIDE" pos="23" type="boolean"/>
-               <bitfield name="CP_G_REG_SCLK_PM_OVERRIDE" pos="24" type="boolean"/>
-               <bitfield name="SPI_SCLK_PM_OVERRIDE" pos="25" type="boolean"/>
-               <bitfield name="RB_REG_SCLK_PM_OVERRIDE" pos="26" type="boolean"/>
-               <bitfield name="RB_SCLK_PM_OVERRIDE" pos="27" type="boolean"/>
-               <bitfield name="MH_MH_SCLK_PM_OVERRIDE" pos="28" type="boolean"/>
-               <bitfield name="MH_REG_SCLK_PM_OVERRIDE" pos="29" type="boolean"/>
-               <bitfield name="MH_MMU_SCLK_PM_OVERRIDE" pos="30" type="boolean"/>
-               <bitfield name="MH_TCROQ_SCLK_PM_OVERRIDE" pos="31" type="boolean"/>
-       </reg32>
-       <reg32 offset="0x039d" name="RBBM_PM_OVERRIDE2"/>
-       <reg32 offset="0x03a0" name="RBBM_DEBUG_OUT"/>
-       <reg32 offset="0x03a1" name="RBBM_DEBUG_CNTL"/>
-       <reg32 offset="0x03b3" name="RBBM_READ_ERROR"/>
-       <reg32 offset="0x03b4" name="RBBM_INT_CNTL">
-               <bitfield name="RDERR_INT_MASK" pos="0" type="boolean"/>
-               <bitfield name="DISPLAY_UPDATE_INT_MASK" pos="1" type="boolean"/>
-               <bitfield name="GUI_IDLE_INT_MASK" pos="19" type="boolean"/>
-       </reg32>
-       <reg32 offset="0x03b5" name="RBBM_INT_STATUS"/>
-       <reg32 offset="0x03b6" name="RBBM_INT_ACK"/>
-       <reg32 offset="0x03b7" name="MASTER_INT_SIGNAL">
-               <bitfield name="MH_INT_STAT" pos="5" type="boolean"/>
-               <bitfield name="SQ_INT_STAT" pos="26" type="boolean"/>
-               <bitfield name="CP_INT_STAT" pos="30" type="boolean"/>
-               <bitfield name="RBBM_INT_STAT" pos="31" type="boolean"/>
-       </reg32>
-       <reg32 offset="0x03f9" name="RBBM_PERIPHID1"/>
-       <reg32 offset="0x03fa" name="RBBM_PERIPHID2"/>
-       <reg32 offset="0x0444" name="CP_PERFMON_CNTL"/>
-       <reg32 offset="0x0445" name="CP_PERFCOUNTER_SELECT"/>
-       <reg32 offset="0x0446" name="CP_PERFCOUNTER_LO"/>
-       <reg32 offset="0x0447" name="CP_PERFCOUNTER_HI"/>
-       <reg32 offset="0x05d0" name="RBBM_STATUS">
-               <bitfield name="CMDFIFO_AVAIL" low="0" high="4" type="uint"/>
-               <bitfield name="TC_BUSY" pos="5" type="boolean"/>
-               <bitfield name="HIRQ_PENDING" pos="8" type="boolean"/>
-               <bitfield name="CPRQ_PENDING" pos="9" type="boolean"/>
-               <bitfield name="CFRQ_PENDING" pos="10" type="boolean"/>
-               <bitfield name="PFRQ_PENDING" pos="11" type="boolean"/>
-               <bitfield name="VGT_BUSY_NO_DMA" pos="12" type="boolean"/>
-               <bitfield name="RBBM_WU_BUSY" pos="14" type="boolean"/>
-               <bitfield name="CP_NRT_BUSY" pos="16" type="boolean"/>
-               <bitfield name="MH_BUSY" pos="18" type="boolean"/>
-               <bitfield name="MH_COHERENCY_BUSY" pos="19" type="boolean"/>
-               <bitfield name="SX_BUSY" pos="21" type="boolean"/>
-               <bitfield name="TPC_BUSY" pos="22" type="boolean"/>
-               <bitfield name="SC_CNTX_BUSY" pos="24" type="boolean"/>
-               <bitfield name="PA_BUSY" pos="25" type="boolean"/>
-               <bitfield name="VGT_BUSY" pos="26" type="boolean"/>
-               <bitfield name="SQ_CNTX17_BUSY" pos="27" type="boolean"/>
-               <bitfield name="SQ_CNTX0_BUSY" pos="28" type="boolean"/>
-               <bitfield name="RB_CNTX_BUSY" pos="30" type="boolean"/>
-               <bitfield name="GUI_ACTIVE" pos="31" type="boolean"/>
-       </reg32>
-       <reg32 offset="0x0a40" name="MH_ARBITER_CONFIG">
-               <bitfield name="SAME_PAGE_LIMIT" low="0" high="5" type="uint"/>
-               <bitfield name="SAME_PAGE_GRANULARITY" pos="6" type="boolean"/>
-               <bitfield name="L1_ARB_ENABLE" pos="7" type="boolean"/>
-               <bitfield name="L1_ARB_HOLD_ENABLE" pos="8" type="boolean"/>
-               <bitfield name="L2_ARB_CONTROL" pos="9" type="boolean"/>
-               <bitfield name="PAGE_SIZE" low="10" high="12" type="uint"/>
-               <bitfield name="TC_REORDER_ENABLE" pos="13" type="boolean"/>
-               <bitfield name="TC_ARB_HOLD_ENABLE" pos="14" type="boolean"/>
-               <bitfield name="IN_FLIGHT_LIMIT_ENABLE" pos="15" type="boolean"/>
-               <bitfield name="IN_FLIGHT_LIMIT" low="16" high="21" type="uint"/>
-               <bitfield name="CP_CLNT_ENABLE" pos="22" type="boolean"/>
-               <bitfield name="VGT_CLNT_ENABLE" pos="23" type="boolean"/>
-               <bitfield name="TC_CLNT_ENABLE" pos="24" type="boolean"/>
-               <bitfield name="RB_CLNT_ENABLE" pos="25" type="boolean"/>
-               <bitfield name="PA_CLNT_ENABLE" pos="26" type="boolean"/>
-       </reg32>
-       <reg32 offset="0x0a42" name="MH_INTERRUPT_MASK">
-               <bitfield name="AXI_READ_ERROR" pos="0" type="boolean"/>
-               <bitfield name="AXI_WRITE_ERROR" pos="1" type="boolean"/>
-               <bitfield name="MMU_PAGE_FAULT" pos="2" type="boolean"/>
-       </reg32>
-       <reg32 offset="0x0a43" name="MH_INTERRUPT_STATUS"/>
-       <reg32 offset="0x0a44" name="MH_INTERRUPT_CLEAR"/>
-       <reg32 offset="0x0a54" name="MH_CLNT_INTF_CTRL_CONFIG1"/>
-       <reg32 offset="0x0a55" name="MH_CLNT_INTF_CTRL_CONFIG2"/>
-       <reg32 offset="0x0c01" name="A220_VSC_BIN_SIZE">
-               <bitfield name="WIDTH" low="0" high="4" shr="5" type="uint"/>
-               <bitfield name="HEIGHT" low="5" high="9" shr="5" type="uint"/>
-       </reg32>
-       <array offset="0x0c06" name="VSC_PIPE" stride="3" length="8">
-               <reg32 offset="0x0" name="CONFIG"/>
-               <reg32 offset="0x1" name="DATA_ADDRESS"/>
-               <reg32 offset="0x2" name="DATA_LENGTH"/>
-       </array>
-       <reg32 offset="0x0c38" name="PC_DEBUG_CNTL"/>
-       <reg32 offset="0x0c39" name="PC_DEBUG_DATA"/>
-       <reg32 offset="0x0c44" name="PA_SC_VIZ_QUERY_STATUS"/>
-       <reg32 offset="0x0c80" name="GRAS_DEBUG_CNTL"/>
-       <reg32 offset="0x0c80" name="PA_SU_DEBUG_CNTL"/>
-       <reg32 offset="0x0c81" name="GRAS_DEBUG_DATA"/>
-       <reg32 offset="0x0c81" name="PA_SU_DEBUG_DATA"/>
-       <reg32 offset="0x0c86" name="PA_SU_FACE_DATA">
-               <bitfield name="BASE_ADDR" low="5" high="31" type="uint"/>
-       </reg32>
-       <reg32 offset="0x0d00" name="SQ_GPR_MANAGEMENT">
-               <bitfield name="REG_DYNAMIC" pos="0" type="boolean"/>
-               <bitfield name="REG_SIZE_PIX" low="4" high="11" type="uint"/>
-               <bitfield name="REG_SIZE_VTX" low="12" high="19" type="uint"/>
-       </reg32>
-       <reg32 offset="0x0d01" name="SQ_FLOW_CONTROL"/>
-       <reg32 offset="0x0d02" name="SQ_INST_STORE_MANAGMENT">
-               <bitfield name="INST_BASE_PIX" low="0" high="11" type="uint"/>
-               <bitfield name="INST_BASE_VTX" low="16" high="27" type="uint"/>
-       </reg32>
-       <reg32 offset="0x0d05" name="SQ_DEBUG_MISC"/>
-       <reg32 offset="0x0d34" name="SQ_INT_CNTL"/>
-       <reg32 offset="0x0d35" name="SQ_INT_STATUS"/>
-       <reg32 offset="0x0d36" name="SQ_INT_ACK"/>
-       <reg32 offset="0x0dae" name="SQ_DEBUG_INPUT_FSM"/>
-       <reg32 offset="0x0daf" name="SQ_DEBUG_CONST_MGR_FSM"/>
-       <reg32 offset="0x0db0" name="SQ_DEBUG_TP_FSM"/>
-       <reg32 offset="0x0db1" name="SQ_DEBUG_FSM_ALU_0"/>
-       <reg32 offset="0x0db2" name="SQ_DEBUG_FSM_ALU_1"/>
-       <reg32 offset="0x0db3" name="SQ_DEBUG_EXP_ALLOC"/>
-       <reg32 offset="0x0db4" name="SQ_DEBUG_PTR_BUFF"/>
-       <reg32 offset="0x0db5" name="SQ_DEBUG_GPR_VTX"/>
-       <reg32 offset="0x0db6" name="SQ_DEBUG_GPR_PIX"/>
-       <reg32 offset="0x0db7" name="SQ_DEBUG_TB_STATUS_SEL"/>
-       <reg32 offset="0x0db8" name="SQ_DEBUG_VTX_TB_0"/>
-       <reg32 offset="0x0db9" name="SQ_DEBUG_VTX_TB_1"/>
-       <reg32 offset="0x0dba" name="SQ_DEBUG_VTX_TB_STATUS_REG"/>
-       <reg32 offset="0x0dbb" name="SQ_DEBUG_VTX_TB_STATE_MEM"/>
-       <reg32 offset="0x0dbc" name="SQ_DEBUG_PIX_TB_0"/>
-       <reg32 offset="0x0dbd" name="SQ_DEBUG_PIX_TB_STATUS_REG_0"/>
-       <reg32 offset="0x0dbe" name="SQ_DEBUG_PIX_TB_STATUS_REG_1"/>
-       <reg32 offset="0x0dbf" name="SQ_DEBUG_PIX_TB_STATUS_REG_2"/>
-       <reg32 offset="0x0dc0" name="SQ_DEBUG_PIX_TB_STATUS_REG_3"/>
-       <reg32 offset="0x0dc1" name="SQ_DEBUG_PIX_TB_STATE_MEM"/>
-       <reg32 offset="0x0e00" name="TC_CNTL_STATUS">
-               <bitfield name="L2_INVALIDATE" pos="0" type="boolean"/>
-       </reg32>
-       <reg32 offset="0x0e1e" name="TP0_CHICKEN"/>
-       <reg32 offset="0x0f01" name="RB_BC_CONTROL">
-               <bitfield name="ACCUM_LINEAR_MODE_ENABLE" pos="0" type="boolean"/>
-               <bitfield name="ACCUM_TIMEOUT_SELECT" low="1" high="2" type="uint"/>
-               <bitfield name="DISABLE_EDRAM_CAM" pos="3" type="boolean"/>
-               <bitfield name="DISABLE_EZ_FAST_CONTEXT_SWITCH" pos="4" type="boolean"/>
-               <bitfield name="DISABLE_EZ_NULL_ZCMD_DROP" pos="5" type="boolean"/>
-               <bitfield name="DISABLE_LZ_NULL_ZCMD_DROP" pos="6" type="boolean"/>
-               <bitfield name="ENABLE_AZ_THROTTLE" pos="7" type="boolean"/>
-               <bitfield name="AZ_THROTTLE_COUNT" low="8" high="12" type="uint"/>
-               <bitfield name="ENABLE_CRC_UPDATE" pos="14" type="boolean"/>
-               <bitfield name="CRC_MODE" pos="15" type="boolean"/>
-               <bitfield name="DISABLE_SAMPLE_COUNTERS" pos="16" type="boolean"/>
-               <bitfield name="DISABLE_ACCUM" pos="17" type="boolean"/>
-               <bitfield name="ACCUM_ALLOC_MASK" low="18" high="21" type="uint"/>
-               <bitfield name="LINEAR_PERFORMANCE_ENABLE" pos="22" type="boolean"/>
-               <bitfield name="ACCUM_DATA_FIFO_LIMIT" low="23" high="26" type="uint"/>
-               <bitfield name="MEM_EXPORT_TIMEOUT_SELECT" low="27" high="28" type="uint"/>
-               <bitfield name="MEM_EXPORT_LINEAR_MODE_ENABLE" pos="29" type="boolean"/>
-               <bitfield name="CRC_SYSTEM" pos="30" type="boolean"/>
-               <bitfield name="RESERVED6" pos="31" type="boolean"/>
-       </reg32>
-       <reg32 offset="0x0f02" name="RB_EDRAM_INFO"/>
-       <reg32 offset="0x0f26" name="RB_DEBUG_CNTL"/>
-       <reg32 offset="0x0f27" name="RB_DEBUG_DATA"/>
-       <reg32 offset="0x2000" name="RB_SURFACE_INFO">
-               <bitfield name="SURFACE_PITCH" low="0" high="13" type="uint"/>
-               <bitfield name="MSAA_SAMPLES" low="14" high="15" type="uint"/>
-       </reg32>
-       <reg32 offset="0x2001" name="RB_COLOR_INFO">
-               <bitfield name="FORMAT" low="0" high="3" type="a2xx_colorformatx"/>
-               <bitfield name="ROUND_MODE" low="4" high="5" type="uint"/>
-               <bitfield name="LINEAR" pos="6" type="boolean"/>
-               <bitfield name="ENDIAN" low="7" high="8" type="uint"/>
-               <bitfield name="SWAP" low="9" high="10" type="uint"/>
-               <bitfield name="BASE" low="12" high="31" shr="12"/>
-       </reg32>
-       <reg32 offset="0x2002" name="RB_DEPTH_INFO">
-               <bitfield name="DEPTH_FORMAT" pos="0" type="adreno_rb_depth_format"/>
-               <bitfield name="DEPTH_BASE" low="12" high="31" type="uint" shr="12"/>
-       </reg32>
-       <reg32 offset="0x2005" name="A225_RB_COLOR_INFO3"/>
-       <reg32 offset="0x2006" name="COHER_DEST_BASE_0"/>
-       <reg32 offset="0x200e" name="PA_SC_SCREEN_SCISSOR_TL" type="adreno_reg_xy"/>
-       <reg32 offset="0x200f" name="PA_SC_SCREEN_SCISSOR_BR" type="adreno_reg_xy"/>
-       <reg32 offset="0x2080" name="PA_SC_WINDOW_OFFSET">
-               <bitfield name="X" low="0" high="14" type="int"/>
-               <bitfield name="Y" low="16" high="30" type="int"/>
-               <bitfield name="DISABLE" pos="31" type="boolean"/>
-       </reg32>
-       <reg32 offset="0x2081" name="PA_SC_WINDOW_SCISSOR_TL" type="adreno_reg_xy"/>
-       <reg32 offset="0x2082" name="PA_SC_WINDOW_SCISSOR_BR" type="adreno_reg_xy"/>
-       <reg32 offset="0x2010" name="UNKNOWN_2010"/>
-       <reg32 offset="0x2100" name="VGT_MAX_VTX_INDX"/>
-       <reg32 offset="0x2101" name="VGT_MIN_VTX_INDX"/>
-       <reg32 offset="0x2102" name="VGT_INDX_OFFSET"/>
-       <reg32 offset="0x2103" name="A225_PC_MULTI_PRIM_IB_RESET_INDX"/>
-       <reg32 offset="0x2104" name="RB_COLOR_MASK">
-               <bitfield name="WRITE_RED" pos="0" type="boolean"/>
-               <bitfield name="WRITE_GREEN" pos="1" type="boolean"/>
-               <bitfield name="WRITE_BLUE" pos="2" type="boolean"/>
-               <bitfield name="WRITE_ALPHA" pos="3" type="boolean"/>
-       </reg32>
-       <reg32 offset="0x2105" name="RB_BLEND_RED"/>
-       <reg32 offset="0x2106" name="RB_BLEND_GREEN"/>
-       <reg32 offset="0x2107" name="RB_BLEND_BLUE"/>
-       <reg32 offset="0x2108" name="RB_BLEND_ALPHA"/>
-       <reg32 offset="0x2109" name="RB_FOG_COLOR">
-               <bitfield name="FOG_RED" low="0" high="7" type="uint"/>
-               <bitfield name="FOG_GREEN" low="8" high="15" type="uint"/>
-               <bitfield name="FOG_BLUE" low="16" high="23" type="uint"/>
-       </reg32>
-       <reg32 offset="0x210c" name="RB_STENCILREFMASK_BF" type="adreno_rb_stencilrefmask"/>
-       <reg32 offset="0x210d" name="RB_STENCILREFMASK" type="adreno_rb_stencilrefmask"/>
-       <reg32 offset="0x210e" name="RB_ALPHA_REF"/>
-       <reg32 offset="0x210f" name="PA_CL_VPORT_XSCALE" type="float"/>
-       <reg32 offset="0x2110" name="PA_CL_VPORT_XOFFSET" type="float"/>
-       <reg32 offset="0x2111" name="PA_CL_VPORT_YSCALE" type="float"/>
-       <reg32 offset="0x2112" name="PA_CL_VPORT_YOFFSET" type="float"/>
-       <reg32 offset="0x2113" name="PA_CL_VPORT_ZSCALE" type="float"/>
-       <reg32 offset="0x2114" name="PA_CL_VPORT_ZOFFSET" type="float"/>
-       <reg32 offset="0x2180" name="SQ_PROGRAM_CNTL">
-               <doc>
-                       note: only 0x3f worth of valid register values for VS_REGS and
-                       PS_REGS, but high bit is set to indicate '0 registers used':
-               </doc>
-               <bitfield name="VS_REGS" low="0" high="7" type="uint"/>
-               <bitfield name="PS_REGS" low="8" high="15" type="uint"/>
-               <bitfield name="VS_RESOURCE" pos="16" type="boolean"/>
-               <bitfield name="PS_RESOURCE" pos="17" type="boolean"/>
-               <bitfield name="PARAM_GEN" pos="18" type="boolean"/>
-               <bitfield name="GEN_INDEX_PIX" pos="19" type="boolean"/>
-               <bitfield name="VS_EXPORT_COUNT" low="20" high="23" type="uint"/>
-               <bitfield name="VS_EXPORT_MODE" low="24" high="26" type="a2xx_sq_ps_vtx_mode"/>
-               <bitfield name="PS_EXPORT_MODE" low="27" high="30" type="uint"/>
-               <bitfield name="GEN_INDEX_VTX" pos="31" type="boolean"/>
-       </reg32>
-       <reg32 offset="0x2181" name="SQ_CONTEXT_MISC">
-               <bitfield name="INST_PRED_OPTIMIZE" pos="0" type="boolean"/>
-               <bitfield name="SC_OUTPUT_SCREEN_XY" pos="1" type="boolean"/>
-               <bitfield name="SC_SAMPLE_CNTL" low="2" high="3" type="a2xx_sq_sample_cntl"/>
-               <bitfield name="PARAM_GEN_POS" low="8" high="15" type="uint"/>
-               <bitfield name="PERFCOUNTER_REF" pos="16" type="boolean"/>
-               <bitfield name="YEILD_OPTIMIZE" pos="17" type="boolean"/>
-               <bitfield name="TX_CACHE_SEL" pos="18" type="boolean"/>
-       </reg32>
-       <reg32 offset="0x2182" name="SQ_INTERPOLATOR_CNTL">
-               <bitfield name="PARAM_SHADE" low="0" high="15" type="uint"/>
-               <bitfield name="SAMPLING_PATTERN" low="16" high="31" type="uint"/>
-       </reg32>
-       <reg32 offset="0x2183" name="SQ_WRAPPING_0">
-               <bitfield name="PARAM_WRAP_0" low="0" high="3" type="uint"/>
-               <bitfield name="PARAM_WRAP_1" low="4" high="7" type="uint"/>
-               <bitfield name="PARAM_WRAP_2" low="8" high="11" type="uint"/>
-               <bitfield name="PARAM_WRAP_3" low="12" high="15" type="uint"/>
-               <bitfield name="PARAM_WRAP_4" low="16" high="19" type="uint"/>
-               <bitfield name="PARAM_WRAP_5" low="20" high="23" type="uint"/>
-               <bitfield name="PARAM_WRAP_6" low="24" high="27" type="uint"/>
-               <bitfield name="PARAM_WRAP_7" low="28" high="31" type="uint"/>
-       </reg32>
-       <reg32 offset="0x2184" name="SQ_WRAPPING_1">
-               <bitfield name="PARAM_WRAP_8" low="0" high="3" type="uint"/>
-               <bitfield name="PARAM_WRAP_9" low="4" high="7" type="uint"/>
-               <bitfield name="PARAM_WRAP_10" low="8" high="11" type="uint"/>
-               <bitfield name="PARAM_WRAP_11" low="12" high="15" type="uint"/>
-               <bitfield name="PARAM_WRAP_12" low="16" high="19" type="uint"/>
-               <bitfield name="PARAM_WRAP_13" low="20" high="23" type="uint"/>
-               <bitfield name="PARAM_WRAP_14" low="24" high="27" type="uint"/>
-               <bitfield name="PARAM_WRAP_15" low="28" high="31" type="uint"/>
-       </reg32>
-       <reg32 offset="0x21f6" name="SQ_PS_PROGRAM">
-               <bitfield name="BASE" low="0" high="11" type="uint"/>
-               <bitfield name="SIZE" low="12" high="23" type="uint"/>
-       </reg32>
-       <reg32 offset="0x21f7" name="SQ_VS_PROGRAM">
-               <bitfield name="BASE" low="0" high="11" type="uint"/>
-               <bitfield name="SIZE" low="12" high="23" type="uint"/>
-       </reg32>
-       <reg32 offset="0x21f9" name="VGT_EVENT_INITIATOR"/>
-       <reg32 offset="0x21fc" name="VGT_DRAW_INITIATOR" type="vgt_draw_initiator"/>
-       <reg32 offset="0x21fd" name="VGT_IMMED_DATA"/>
-       <reg32 offset="0x2200" name="RB_DEPTHCONTROL">
-               <bitfield name="STENCIL_ENABLE" pos="0" type="boolean"/>
-               <bitfield name="Z_ENABLE" pos="1" type="boolean"/>
-               <bitfield name="Z_WRITE_ENABLE" pos="2" type="boolean"/>
-               <bitfield name="EARLY_Z_ENABLE" pos="3" type="boolean"/>
-               <bitfield name="ZFUNC" low="4" high="6" type="adreno_compare_func"/>
-               <bitfield name="BACKFACE_ENABLE" pos="7" type="boolean"/>
-               <bitfield name="STENCILFUNC" low="8" high="10" type="adreno_compare_func"/>
-               <bitfield name="STENCILFAIL" low="11" high="13" type="adreno_stencil_op"/>
-               <bitfield name="STENCILZPASS" low="14" high="16" type="adreno_stencil_op"/>
-               <bitfield name="STENCILZFAIL" low="17" high="19" type="adreno_stencil_op"/>
-               <bitfield name="STENCILFUNC_BF" low="20" high="22" type="adreno_compare_func"/>
-               <bitfield name="STENCILFAIL_BF" low="23" high="25" type="adreno_stencil_op"/>
-               <bitfield name="STENCILZPASS_BF" low="26" high="28" type="adreno_stencil_op"/>
-               <bitfield name="STENCILZFAIL_BF" low="29" high="31" type="adreno_stencil_op"/>
-       </reg32>
-       <reg32 offset="0x2201" name="RB_BLEND_CONTROL">
-               <bitfield name="COLOR_SRCBLEND" low="0" high="4" type="adreno_rb_blend_factor"/>
-               <bitfield name="COLOR_COMB_FCN" low="5" high="7" type="a2xx_rb_blend_opcode"/>
-               <bitfield name="COLOR_DESTBLEND" low="8" high="12" type="adreno_rb_blend_factor"/>
-               <bitfield name="ALPHA_SRCBLEND" low="16" high="20" type="adreno_rb_blend_factor"/>
-               <bitfield name="ALPHA_COMB_FCN" low="21" high="23" type="a2xx_rb_blend_opcode"/>
-               <bitfield name="ALPHA_DESTBLEND" low="24" high="28" type="adreno_rb_blend_factor"/>
-               <bitfield name="BLEND_FORCE_ENABLE" pos="29" type="boolean"/>
-               <bitfield name="BLEND_FORCE" pos="30" type="boolean"/>
-       </reg32>
-       <reg32 offset="0x2202" name="RB_COLORCONTROL">
-               <bitfield name="ALPHA_FUNC" low="0" high="2" type="adreno_compare_func"/>
-               <bitfield name="ALPHA_TEST_ENABLE" pos="3" type="boolean"/>
-               <bitfield name="ALPHA_TO_MASK_ENABLE" pos="4" type="boolean"/>
-               <bitfield name="BLEND_DISABLE" pos="5" type="boolean"/>
-               <bitfield name="VOB_ENABLE" pos="6" type="boolean"/>
-               <bitfield name="VS_EXPORTS_FOG" pos="7" type="boolean"/>
-               <bitfield name="ROP_CODE" low="8" high="11" type="uint"/>
-               <bitfield name="DITHER_MODE" low="12" high="13" type="adreno_rb_dither_mode"/>
-               <bitfield name="DITHER_TYPE" low="14" high="15" type="a2xx_rb_dither_type"/>
-               <bitfield name="PIXEL_FOG" pos="16" type="boolean"/>
-               <bitfield name="ALPHA_TO_MASK_OFFSET0" low="24" high="25" type="uint"/>
-               <bitfield name="ALPHA_TO_MASK_OFFSET1" low="26" high="27" type="uint"/>
-               <bitfield name="ALPHA_TO_MASK_OFFSET2" low="28" high="29" type="uint"/>
-               <bitfield name="ALPHA_TO_MASK_OFFSET3" low="30" high="31" type="uint"/>
-       </reg32>
-       <reg32 offset="0x2203" name="VGT_CURRENT_BIN_ID_MAX" type="a2xx_vgt_current_bin_id_min_max"/>
-       <reg32 offset="0x2204" name="PA_CL_CLIP_CNTL">
-               <bitfield name="CLIP_DISABLE" pos="16" type="boolean"/>
-               <bitfield name="BOUNDARY_EDGE_FLAG_ENA" pos="18" type="boolean"/>
-               <bitfield name="DX_CLIP_SPACE_DEF" pos="19" type="a2xx_dx_clip_space"/>
-               <bitfield name="DIS_CLIP_ERR_DETECT" pos="20" type="boolean"/>
-               <bitfield name="VTX_KILL_OR" pos="21" type="boolean"/>
-               <bitfield name="XY_NAN_RETAIN" pos="22" type="boolean"/>
-               <bitfield name="Z_NAN_RETAIN" pos="23" type="boolean"/>
-               <bitfield name="W_NAN_RETAIN" pos="24" type="boolean"/>
-       </reg32>
-       <reg32 offset="0x2205" name="PA_SU_SC_MODE_CNTL">
-               <bitfield name="CULL_FRONT" pos="0" type="boolean"/>
-               <bitfield name="CULL_BACK" pos="1" type="boolean"/>
-               <bitfield name="FACE" pos="2" type="boolean"/>
-               <bitfield name="POLYMODE" low="3" high="4" type="a2xx_pa_su_sc_polymode"/>
-               <bitfield name="FRONT_PTYPE" low="5" high="7" type="adreno_pa_su_sc_draw"/>
-               <bitfield name="BACK_PTYPE" low="8" high="10" type="adreno_pa_su_sc_draw"/>
-               <bitfield name="POLY_OFFSET_FRONT_ENABLE" pos="11" type="boolean"/>
-               <bitfield name="POLY_OFFSET_BACK_ENABLE" pos="12" type="boolean"/>
-               <bitfield name="POLY_OFFSET_PARA_ENABLE" pos="13" type="boolean"/>
-               <bitfield name="MSAA_ENABLE" pos="15" type="boolean"/>
-               <bitfield name="VTX_WINDOW_OFFSET_ENABLE" pos="16" type="boolean"/>
-               <bitfield name="LINE_STIPPLE_ENABLE" pos="18" type="boolean"/>
-               <bitfield name="PROVOKING_VTX_LAST" pos="19" type="boolean"/>
-               <bitfield name="PERSP_CORR_DIS" pos="20" type="boolean"/>
-               <bitfield name="MULTI_PRIM_IB_ENA" pos="21" type="boolean"/>
-               <bitfield name="QUAD_ORDER_ENABLE" pos="23" type="boolean"/>
-               <bitfield name="WAIT_RB_IDLE_ALL_TRI" pos="25" type="boolean"/>
-               <bitfield name="WAIT_RB_IDLE_FIRST_TRI_NEW_STATE" pos="26" type="boolean"/>
-               <bitfield name="CLAMPED_FACENESS" pos="28" type="boolean"/>
-               <bitfield name="ZERO_AREA_FACENESS" pos="29" type="boolean"/>
-               <bitfield name="FACE_KILL_ENABLE" pos="30" type="boolean"/>
-               <bitfield name="FACE_WRITE_ENABLE" pos="31" type="boolean"/>
-       </reg32>
-       <reg32 offset="0x2206" name="PA_CL_VTE_CNTL">
-               <bitfield name="VPORT_X_SCALE_ENA" pos="0" type="boolean"/>
-               <bitfield name="VPORT_X_OFFSET_ENA" pos="1" type="boolean"/>
-               <bitfield name="VPORT_Y_SCALE_ENA" pos="2" type="boolean"/>
-               <bitfield name="VPORT_Y_OFFSET_ENA" pos="3" type="boolean"/>
-               <bitfield name="VPORT_Z_SCALE_ENA" pos="4" type="boolean"/>
-               <bitfield name="VPORT_Z_OFFSET_ENA" pos="5" type="boolean"/>
-               <bitfield name="VTX_XY_FMT" pos="8" type="boolean"/>
-               <bitfield name="VTX_Z_FMT" pos="9" type="boolean"/>
-               <bitfield name="VTX_W0_FMT" pos="10" type="boolean"/>
-               <bitfield name="PERFCOUNTER_REF" pos="11" type="boolean"/>
-       </reg32>
-       <reg32 offset="0x2207" name="VGT_CURRENT_BIN_ID_MIN" type="a2xx_vgt_current_bin_id_min_max"/>
-       <reg32 offset="0x2208" name="RB_MODECONTROL">
-               <bitfield name="EDRAM_MODE" low="0" high="2" type="a2xx_rb_edram_mode"/>
-       </reg32>
-       <reg32 offset="0x2209" name="A220_RB_LRZ_VSC_CONTROL"/>
-       <reg32 offset="0x220a" name="RB_SAMPLE_POS"/>
-       <reg32 offset="0x220b" name="CLEAR_COLOR">
-               <bitfield name="RED" low="0" high="7"/>
-               <bitfield name="GREEN" low="8" high="15"/>
-               <bitfield name="BLUE" low="16" high="23"/>
-               <bitfield name="ALPHA" low="24" high="31"/>
-       </reg32>
-       <reg32 offset="0x2210" name="A220_GRAS_CONTROL"/>
-       <reg32 offset="0x2280" name="PA_SU_POINT_SIZE">
-               <bitfield name="HEIGHT" low="0" high="15" type="ufixed" radix="4"/>
-               <bitfield name="WIDTH" low="16" high="31" type="ufixed" radix="4"/>
-       </reg32>
-       <reg32 offset="0x2281" name="PA_SU_POINT_MINMAX">
-               <bitfield name="MIN" low="0" high="15" type="ufixed" radix="4"/>
-               <bitfield name="MAX" low="16" high="31" type="ufixed" radix="4"/>
-       </reg32>
-       <reg32 offset="0x2282" name="PA_SU_LINE_CNTL">
-               <bitfield name="WIDTH" low="0" high="15" type="ufixed" radix="4"/>
-       </reg32>
-       <reg32 offset="0x2283" name="PA_SC_LINE_STIPPLE">
-               <bitfield name="LINE_PATTERN" low="0" high="15" type="hex"/>
-               <bitfield name="REPEAT_COUNT" low="16" high="23" type="uint"/>
-               <bitfield name="PATTERN_BIT_ORDER" pos="28" type="a2xx_pa_sc_pattern_bit_order"/>
-               <bitfield name="AUTO_RESET_CNTL" low="29" high="30" type="a2xx_pa_sc_auto_reset_cntl"/>
-       </reg32>
-       <reg32 offset="0x2293" name="PA_SC_VIZ_QUERY">
-               <bitfield name="VIZ_QUERY_ENA" pos="0" type="boolean"/>
-               <bitfield name="VIZ_QUERY_ID" low="1" high="6" type="uint"/>
-               <bitfield name="KILL_PIX_POST_EARLY_Z" pos="8" type="boolean"/>
-       </reg32>
-       <reg32 offset="0x2294" name="VGT_ENHANCE"/>
-       <reg32 offset="0x2300" name="PA_SC_LINE_CNTL">
-               <bitfield name="BRES_CNTL" low="0" high="15" type="uint"/>
-               <bitfield name="USE_BRES_CNTL" pos="8" type="boolean"/>
-               <bitfield name="EXPAND_LINE_WIDTH" pos="9" type="boolean"/>
-               <bitfield name="LAST_PIXEL" pos="10" type="boolean"/>
-       </reg32>
-       <reg32 offset="0x2301" name="PA_SC_AA_CONFIG">
-               <bitfield name="MSAA_NUM_SAMPLES" low="0" high="2" type="uint"/>
-               <bitfield name="MAX_SAMPLE_DIST" low="13" high="16" type="uint"/>
-       </reg32>
-       <reg32 offset="0x2302" name="PA_SU_VTX_CNTL">
-               <bitfield name="PIX_CENTER" pos="0" type="a2xx_pa_pixcenter"/>
-               <bitfield name="ROUND_MODE" low="1" high="2" type="a2xx_pa_roundmode"/>
-               <bitfield name="QUANT_MODE" low="7" high="9" type="a2xx_pa_quantmode"/>
-       </reg32>
-       <reg32 offset="0x2303" name="PA_CL_GB_VERT_CLIP_ADJ" type="float"/>
-       <reg32 offset="0x2304" name="PA_CL_GB_VERT_DISC_ADJ" type="float"/>
-       <reg32 offset="0x2305" name="PA_CL_GB_HORZ_CLIP_ADJ" type="float"/>
-       <reg32 offset="0x2306" name="PA_CL_GB_HORZ_DISC_ADJ" type="float"/>
-       <reg32 offset="0x2307" name="SQ_VS_CONST">
-               <bitfield name="BASE" low="0" high="8" type="uint"/>
-               <bitfield name="SIZE" low="12" high="20" type="uint"/>
-       </reg32>
-       <reg32 offset="0x2308" name="SQ_PS_CONST">
-               <bitfield name="BASE" low="0" high="8" type="uint"/>
-               <bitfield name="SIZE" low="12" high="20" type="uint"/>
-       </reg32>
-       <reg32 offset="0x2309" name="SQ_DEBUG_MISC_0"/>
-       <reg32 offset="0x230a" name="SQ_DEBUG_MISC_1"/>
-       <reg32 offset="0x2312" name="PA_SC_AA_MASK"/>
-       <reg32 offset="0x2316" name="VGT_VERTEX_REUSE_BLOCK_CNTL">
-               <bitfield name="VTX_REUSE_DEPTH" low="0" high="2" type="uint"/>
-       </reg32>
-       <reg32 offset="0x2317" name="VGT_OUT_DEALLOC_CNTL">
-               <bitfield name="DEALLOC_DIST" low="0" high="1" type="uint"/>
-       </reg32>
-       <reg32 offset="0x2318" name="RB_COPY_CONTROL">
-               <bitfield name="COPY_SAMPLE_SELECT" low="0" high="2" type="a2xx_rb_copy_sample_select"/>
-               <bitfield name="DEPTH_CLEAR_ENABLE" pos="3" type="boolean"/>
-               <bitfield name="CLEAR_MASK" low="4" high="7" type="hex"/>
-       </reg32>
-       <reg32 offset="0x2319" name="RB_COPY_DEST_BASE"/>
-       <reg32 offset="0x231a" name="RB_COPY_DEST_PITCH" shr="5" type="uint"/>
-       <reg32 offset="0x231b" name="RB_COPY_DEST_INFO">
-               <bitfield name="DEST_ENDIAN" low="0" high="2" type="adreno_rb_surface_endian"/>
-               <bitfield name="LINEAR" pos="3" type="boolean"/>
-               <bitfield name="FORMAT" low="4" high="7" type="a2xx_colorformatx"/>
-               <bitfield name="SWAP" low="8" high="9" type="uint"/>
-               <bitfield name="DITHER_MODE" low="10" high="11" type="adreno_rb_dither_mode"/>
-               <bitfield name="DITHER_TYPE" low="12" high="13" type="a2xx_rb_dither_type"/>
-               <bitfield name="WRITE_RED" pos="14" type="boolean"/>
-               <bitfield name="WRITE_GREEN" pos="15" type="boolean"/>
-               <bitfield name="WRITE_BLUE" pos="16" type="boolean"/>
-               <bitfield name="WRITE_ALPHA" pos="17" type="boolean"/>
-       </reg32>
-       <reg32 offset="0x231c" name="RB_COPY_DEST_OFFSET">
-               <bitfield name="X" low="0" high="12" type="uint"/>
-               <bitfield name="Y" low="13" high="25" type="uint"/>
-       </reg32>
-       <reg32 offset="0x231d" name="RB_DEPTH_CLEAR"/>
-       <reg32 offset="0x2324" name="RB_SAMPLE_COUNT_CTL"/>
-       <reg32 offset="0x2326" name="RB_COLOR_DEST_MASK"/>
-       <reg32 offset="0x2340" name="A225_GRAS_UCP0X"/>
-       <reg32 offset="0x2357" name="A225_GRAS_UCP5W"/>
-       <reg32 offset="0x2360" name="A225_GRAS_UCP_ENABLED"/>
-       <reg32 offset="0x2380" name="PA_SU_POLY_OFFSET_FRONT_SCALE"/>
-       <reg32 offset="0x2381" name="PA_SU_POLY_OFFSET_FRONT_OFFSET"/>
-       <reg32 offset="0x2382" name="PA_SU_POLY_OFFSET_BACK_SCALE"/>
-       <reg32 offset="0x2383" name="PA_SU_POLY_OFFSET_BACK_OFFSET"/>
-       <reg32 offset="0x4000" name="SQ_CONSTANT_0"/>
-       <reg32 offset="0x4800" name="SQ_FETCH_0"/>
-       <reg32 offset="0x4900" name="SQ_CF_BOOLEANS"/>
-       <reg32 offset="0x4908" name="SQ_CF_LOOP"/>
-       <reg32 offset="0xa29" name="COHER_SIZE_PM4"/>
-       <reg32 offset="0xa2a" name="COHER_BASE_PM4"/>
-       <reg32 offset="0xa2b" name="COHER_STATUS_PM4"/>
-
-       <reg32 offset="0x0c88" name="PA_SU_PERFCOUNTER0_SELECT"/>
-       <reg32 offset="0x0c89" name="PA_SU_PERFCOUNTER1_SELECT"/>
-       <reg32 offset="0x0c8a" name="PA_SU_PERFCOUNTER2_SELECT"/>
-       <reg32 offset="0x0c8b" name="PA_SU_PERFCOUNTER3_SELECT"/>
-       <reg32 offset="0x0c8c" name="PA_SU_PERFCOUNTER0_LOW"/>
-       <reg32 offset="0x0c8d" name="PA_SU_PERFCOUNTER0_HI"/>
-       <reg32 offset="0x0c8e" name="PA_SU_PERFCOUNTER1_LOW"/>
-       <reg32 offset="0x0c8f" name="PA_SU_PERFCOUNTER1_HI"/>
-       <reg32 offset="0x0c90" name="PA_SU_PERFCOUNTER2_LOW"/>
-       <reg32 offset="0x0c91" name="PA_SU_PERFCOUNTER2_HI"/>
-       <reg32 offset="0x0c92" name="PA_SU_PERFCOUNTER3_LOW"/>
-       <reg32 offset="0x0c93" name="PA_SU_PERFCOUNTER3_HI"/>
-       <reg32 offset="0x0c98" name="PA_SC_PERFCOUNTER0_SELECT"/>
-       <reg32 offset="0x0c99" name="PA_SC_PERFCOUNTER0_LOW"/>
-       <reg32 offset="0x0c9a" name="PA_SC_PERFCOUNTER0_HI"/>
-       <reg32 offset="0x0c48" name="VGT_PERFCOUNTER0_SELECT"/>
-       <reg32 offset="0x0c49" name="VGT_PERFCOUNTER1_SELECT"/>
-       <reg32 offset="0x0c4a" name="VGT_PERFCOUNTER2_SELECT"/>
-       <reg32 offset="0x0c4b" name="VGT_PERFCOUNTER3_SELECT"/>
-       <reg32 offset="0x0c4c" name="VGT_PERFCOUNTER0_LOW"/>
-       <reg32 offset="0x0c4e" name="VGT_PERFCOUNTER1_LOW"/>
-       <reg32 offset="0x0c50" name="VGT_PERFCOUNTER2_LOW"/>
-       <reg32 offset="0x0c52" name="VGT_PERFCOUNTER3_LOW"/>
-       <reg32 offset="0x0c4d" name="VGT_PERFCOUNTER0_HI"/>
-       <reg32 offset="0x0c4f" name="VGT_PERFCOUNTER1_HI"/>
-       <reg32 offset="0x0c51" name="VGT_PERFCOUNTER2_HI"/>
-       <reg32 offset="0x0c53" name="VGT_PERFCOUNTER3_HI"/>
-       <reg32 offset="0x0e05" name="TCR_PERFCOUNTER0_SELECT"/>
-       <reg32 offset="0x0e08" name="TCR_PERFCOUNTER1_SELECT"/>
-       <reg32 offset="0x0e06" name="TCR_PERFCOUNTER0_HI"/>
-       <reg32 offset="0x0e09" name="TCR_PERFCOUNTER1_HI"/>
-       <reg32 offset="0x0e07" name="TCR_PERFCOUNTER0_LOW"/>
-       <reg32 offset="0x0e0a" name="TCR_PERFCOUNTER1_LOW"/>
-       <reg32 offset="0x0e1f" name="TP0_PERFCOUNTER0_SELECT"/>
-       <reg32 offset="0x0e20" name="TP0_PERFCOUNTER0_HI"/>
-       <reg32 offset="0x0e21" name="TP0_PERFCOUNTER0_LOW"/>
-       <reg32 offset="0x0e22" name="TP0_PERFCOUNTER1_SELECT"/>
-       <reg32 offset="0x0e23" name="TP0_PERFCOUNTER1_HI"/>
-       <reg32 offset="0x0e24" name="TP0_PERFCOUNTER1_LOW"/>
-       <reg32 offset="0x0e54" name="TCM_PERFCOUNTER0_SELECT"/>
-       <reg32 offset="0x0e57" name="TCM_PERFCOUNTER1_SELECT"/>
-       <reg32 offset="0x0e55" name="TCM_PERFCOUNTER0_HI"/>
-       <reg32 offset="0x0e58" name="TCM_PERFCOUNTER1_HI"/>
-       <reg32 offset="0x0e56" name="TCM_PERFCOUNTER0_LOW"/>
-       <reg32 offset="0x0e59" name="TCM_PERFCOUNTER1_LOW"/>
-       <reg32 offset="0x0e5a" name="TCF_PERFCOUNTER0_SELECT"/>
-       <reg32 offset="0x0e5d" name="TCF_PERFCOUNTER1_SELECT"/>
-       <reg32 offset="0x0e60" name="TCF_PERFCOUNTER2_SELECT"/>
-       <reg32 offset="0x0e63" name="TCF_PERFCOUNTER3_SELECT"/>
-       <reg32 offset="0x0e66" name="TCF_PERFCOUNTER4_SELECT"/>
-       <reg32 offset="0x0e69" name="TCF_PERFCOUNTER5_SELECT"/>
-       <reg32 offset="0x0e6c" name="TCF_PERFCOUNTER6_SELECT"/>
-       <reg32 offset="0x0e6f" name="TCF_PERFCOUNTER7_SELECT"/>
-       <reg32 offset="0x0e72" name="TCF_PERFCOUNTER8_SELECT"/>
-       <reg32 offset="0x0e75" name="TCF_PERFCOUNTER9_SELECT"/>
-       <reg32 offset="0x0e78" name="TCF_PERFCOUNTER10_SELECT"/>
-       <reg32 offset="0x0e7b" name="TCF_PERFCOUNTER11_SELECT"/>
-       <reg32 offset="0x0e5b" name="TCF_PERFCOUNTER0_HI"/>
-       <reg32 offset="0x0e5e" name="TCF_PERFCOUNTER1_HI"/>
-       <reg32 offset="0x0e61" name="TCF_PERFCOUNTER2_HI"/>
-       <reg32 offset="0x0e64" name="TCF_PERFCOUNTER3_HI"/>
-       <reg32 offset="0x0e67" name="TCF_PERFCOUNTER4_HI"/>
-       <reg32 offset="0x0e6a" name="TCF_PERFCOUNTER5_HI"/>
-       <reg32 offset="0x0e6d" name="TCF_PERFCOUNTER6_HI"/>
-       <reg32 offset="0x0e70" name="TCF_PERFCOUNTER7_HI"/>
-       <reg32 offset="0x0e73" name="TCF_PERFCOUNTER8_HI"/>
-       <reg32 offset="0x0e76" name="TCF_PERFCOUNTER9_HI"/>
-       <reg32 offset="0x0e79" name="TCF_PERFCOUNTER10_HI"/>
-       <reg32 offset="0x0e7c" name="TCF_PERFCOUNTER11_HI"/>
-       <reg32 offset="0x0e5c" name="TCF_PERFCOUNTER0_LOW"/>
-       <reg32 offset="0x0e5f" name="TCF_PERFCOUNTER1_LOW"/>
-       <reg32 offset="0x0e62" name="TCF_PERFCOUNTER2_LOW"/>
-       <reg32 offset="0x0e65" name="TCF_PERFCOUNTER3_LOW"/>
-       <reg32 offset="0x0e68" name="TCF_PERFCOUNTER4_LOW"/>
-       <reg32 offset="0x0e6b" name="TCF_PERFCOUNTER5_LOW"/>
-       <reg32 offset="0x0e6e" name="TCF_PERFCOUNTER6_LOW"/>
-       <reg32 offset="0x0e71" name="TCF_PERFCOUNTER7_LOW"/>
-       <reg32 offset="0x0e74" name="TCF_PERFCOUNTER8_LOW"/>
-       <reg32 offset="0x0e77" name="TCF_PERFCOUNTER9_LOW"/>
-       <reg32 offset="0x0e7a" name="TCF_PERFCOUNTER10_LOW"/>
-       <reg32 offset="0x0e7d" name="TCF_PERFCOUNTER11_LOW"/>
-       <reg32 offset="0x0dc8" name="SQ_PERFCOUNTER0_SELECT"/>
-       <reg32 offset="0x0dc9" name="SQ_PERFCOUNTER1_SELECT"/>
-       <reg32 offset="0x0dca" name="SQ_PERFCOUNTER2_SELECT"/>
-       <reg32 offset="0x0dcb" name="SQ_PERFCOUNTER3_SELECT"/>
-       <reg32 offset="0x0dcc" name="SQ_PERFCOUNTER0_LOW"/>
-       <reg32 offset="0x0dcd" name="SQ_PERFCOUNTER0_HI"/>
-       <reg32 offset="0x0dce" name="SQ_PERFCOUNTER1_LOW"/>
-       <reg32 offset="0x0dcf" name="SQ_PERFCOUNTER1_HI"/>
-       <reg32 offset="0x0dd0" name="SQ_PERFCOUNTER2_LOW"/>
-       <reg32 offset="0x0dd1" name="SQ_PERFCOUNTER2_HI"/>
-       <reg32 offset="0x0dd2" name="SQ_PERFCOUNTER3_LOW"/>
-       <reg32 offset="0x0dd3" name="SQ_PERFCOUNTER3_HI"/>
-       <reg32 offset="0x0dd4" name="SX_PERFCOUNTER0_SELECT"/>
-       <reg32 offset="0x0dd8" name="SX_PERFCOUNTER0_LOW"/>
-       <reg32 offset="0x0dd9" name="SX_PERFCOUNTER0_HI"/>
-       <reg32 offset="0x0a46" name="MH_PERFCOUNTER0_SELECT"/>
-       <reg32 offset="0x0a4a" name="MH_PERFCOUNTER1_SELECT"/>
-       <reg32 offset="0x0a47" name="MH_PERFCOUNTER0_CONFIG"/>
-       <reg32 offset="0x0a4b" name="MH_PERFCOUNTER1_CONFIG"/>
-       <reg32 offset="0x0a48" name="MH_PERFCOUNTER0_LOW"/>
-       <reg32 offset="0x0a4c" name="MH_PERFCOUNTER1_LOW"/>
-       <reg32 offset="0x0a49" name="MH_PERFCOUNTER0_HI"/>
-       <reg32 offset="0x0a4d" name="MH_PERFCOUNTER1_HI"/>
-       <reg32 offset="0x0f04" name="RB_PERFCOUNTER0_SELECT"/>
-       <reg32 offset="0x0f08" name="RB_PERFCOUNTER0_LOW"/>
-       <reg32 offset="0x0f09" name="RB_PERFCOUNTER0_HI"/>
-</domain>
-
-<domain name="A2XX_SQ_TEX" width="32">
-       <doc>Texture state dwords</doc>
-       <enum name="sq_tex_clamp">
-               <value name="SQ_TEX_WRAP" value="0"/>
-               <value name="SQ_TEX_MIRROR" value="1"/>
-               <value name="SQ_TEX_CLAMP_LAST_TEXEL" value="2"/>
-               <value name="SQ_TEX_MIRROR_ONCE_LAST_TEXEL" value="3"/>
-               <value name="SQ_TEX_CLAMP_HALF_BORDER" value="4"/>
-               <value name="SQ_TEX_MIRROR_ONCE_HALF_BORDER" value="5"/>
-               <value name="SQ_TEX_CLAMP_BORDER" value="6"/>
-               <value name="SQ_TEX_MIRROR_ONCE_BORDER" value="7"/>
-       </enum>
-       <enum name="sq_tex_swiz">
-               <value name="SQ_TEX_X" value="0"/>
-               <value name="SQ_TEX_Y" value="1"/>
-               <value name="SQ_TEX_Z" value="2"/>
-               <value name="SQ_TEX_W" value="3"/>
-               <value name="SQ_TEX_ZERO" value="4"/>
-               <value name="SQ_TEX_ONE" value="5"/>
-       </enum>
-       <enum name="sq_tex_filter">
-               <value name="SQ_TEX_FILTER_POINT" value="0"/>
-               <value name="SQ_TEX_FILTER_BILINEAR" value="1"/>
-               <value name="SQ_TEX_FILTER_BASEMAP" value="2"/>
-               <value name="SQ_TEX_FILTER_USE_FETCH_CONST" value="3"/>
-       </enum>
-       <enum name="sq_tex_aniso_filter">
-               <value name="SQ_TEX_ANISO_FILTER_DISABLED" value="0"/>
-               <value name="SQ_TEX_ANISO_FILTER_MAX_1_1" value="1"/>
-               <value name="SQ_TEX_ANISO_FILTER_MAX_2_1" value="2"/>
-               <value name="SQ_TEX_ANISO_FILTER_MAX_4_1" value="3"/>
-               <value name="SQ_TEX_ANISO_FILTER_MAX_8_1" value="4"/>
-               <value name="SQ_TEX_ANISO_FILTER_MAX_16_1" value="5"/>
-               <value name="SQ_TEX_ANISO_FILTER_USE_FETCH_CONST" value="7"/>
-       </enum>
-       <enum name="sq_tex_dimension">
-               <value name="SQ_TEX_DIMENSION_1D" value="0"/>
-               <value name="SQ_TEX_DIMENSION_2D" value="1"/>
-               <value name="SQ_TEX_DIMENSION_3D" value="2"/>
-               <value name="SQ_TEX_DIMENSION_CUBE" value="3"/>
-       </enum>
-       <enum name="sq_tex_border_color">
-               <value name="SQ_TEX_BORDER_COLOR_BLACK" value="0"/>
-               <value name="SQ_TEX_BORDER_COLOR_WHITE" value="1"/>
-               <value name="SQ_TEX_BORDER_COLOR_ACBYCR_BLACK" value="2"/>
-               <value name="SQ_TEX_BORDER_COLOR_ACBCRY_BLACK" value="3"/>
-       </enum>
-       <enum name="sq_tex_sign">
-               <value name="SQ_TEX_SIGN_UNSIGNED" value="0"/>
-               <value name="SQ_TEX_SIGN_SIGNED" value="1"/>
-               <!-- biased: 2*color-1 (range -1,1 when sampling) -->
-               <value name="SQ_TEX_SIGN_UNSIGNED_BIASED" value="2"/>
-               <!-- gamma: sRGB to linear - doesn't seem to work on adreno? -->
-               <value name="SQ_TEX_SIGN_GAMMA" value="3"/>
-       </enum>
-       <enum name="sq_tex_endian">
-               <value name="SQ_TEX_ENDIAN_NONE" value="0"/>
-               <value name="SQ_TEX_ENDIAN_8IN16" value="1"/>
-               <value name="SQ_TEX_ENDIAN_8IN32" value="2"/>
-               <value name="SQ_TEX_ENDIAN_16IN32" value="3"/>
-       </enum>
-       <enum name="sq_tex_clamp_policy">
-               <value name="SQ_TEX_CLAMP_POLICY_D3D" value="0"/>
-               <value name="SQ_TEX_CLAMP_POLICY_OGL" value="1"/>
-       </enum>
-       <enum name="sq_tex_num_format">
-               <value name="SQ_TEX_NUM_FORMAT_FRAC" value="0"/>
-               <value name="SQ_TEX_NUM_FORMAT_INT" value="1"/>
-       </enum>
-       <enum name="sq_tex_type">
-       <value name="SQ_TEX_TYPE_0" value="0"/>
-       <value name="SQ_TEX_TYPE_1" value="1"/>
-       <value name="SQ_TEX_TYPE_2" value="2"/>
-       <value name="SQ_TEX_TYPE_3" value="3"/>
-       </enum>
-       <reg32 offset="0" name="0">
-               <bitfield name="TYPE" low="0" high="1" type="sq_tex_type"/>
-               <bitfield name="SIGN_X" low="2" high="3" type="sq_tex_sign"/>
-               <bitfield name="SIGN_Y" low="4" high="5" type="sq_tex_sign"/>
-               <bitfield name="SIGN_Z" low="6" high="7" type="sq_tex_sign"/>
-               <bitfield name="SIGN_W" low="8" high="9" type="sq_tex_sign"/>
-               <bitfield name="CLAMP_X" low="10" high="12" type="sq_tex_clamp"/>
-               <bitfield name="CLAMP_Y" low="13" high="15" type="sq_tex_clamp"/>"
-               <bitfield name="CLAMP_Z" low="16" high="18" type="sq_tex_clamp"/>"
-               <bitfield name="PITCH" low="22" high="30" shr="5" type="uint"/>
-               <bitfield name="TILED" pos="31" type="boolean"/>
-       </reg32>
-       <reg32 offset="1" name="1">
-               <bitfield name="FORMAT" low="0" high="5" type="a2xx_sq_surfaceformat"/>
-               <bitfield name="ENDIANNESS" low="6" high="7" type="sq_tex_endian"/>
-               <bitfield name="REQUEST_SIZE" low="8" high="9" type="uint"/>
-               <bitfield name="STACKED" pos="10" type="boolean"/>
-               <bitfield name="CLAMP_POLICY" pos="11" type="sq_tex_clamp_policy"/>
-               <bitfield name="BASE_ADDRESS" low="12" high="31" type="uint" shr="12"/>
-       </reg32>
-       <reg32 offset="2" name="2">
-               <bitfield name="WIDTH" low="0" high="12" type="uint"/>
-               <bitfield name="HEIGHT" low="13" high="25" type="uint"/>
-               <bitfield name="DEPTH" low="26" high="31" type="uint"/>
-               <!-- 1d/3d have different bit configurations -->
-       </reg32>
-       <reg32 offset="3" name="3">
-               <bitfield name="NUM_FORMAT" pos="0" type="sq_tex_num_format"/>
-               <bitfield name="SWIZ_X" low="1" high="3" type="sq_tex_swiz"/>
-               <bitfield name="SWIZ_Y" low="4" high="6" type="sq_tex_swiz"/>
-               <bitfield name="SWIZ_Z" low="7" high="9" type="sq_tex_swiz"/>
-               <bitfield name="SWIZ_W" low="10" high="12" type="sq_tex_swiz"/>
-               <bitfield name="EXP_ADJUST" low="13" high="18" type="int"/>
-               <bitfield name="XY_MAG_FILTER" low="19" high="20" type="sq_tex_filter"/>
-               <bitfield name="XY_MIN_FILTER" low="21" high="22" type="sq_tex_filter"/>
-               <bitfield name="MIP_FILTER" low="23" high="24" type="sq_tex_filter"/>
-               <bitfield name="ANISO_FILTER" low="25" high="27" type="sq_tex_aniso_filter"/>
-               <bitfield name="BORDER_SIZE" pos="31" type="uint"/>
-       </reg32>
-       <reg32 offset="4" name="4">
-               <bitfield name="VOL_MAG_FILTER" pos="0" type="sq_tex_filter"/>
-               <bitfield name="VOL_MIN_FILTER" pos="1" type="sq_tex_filter"/>
-               <bitfield name="MIP_MIN_LEVEL" low="2" high="5" type="uint"/>
-               <bitfield name="MIP_MAX_LEVEL" low="6" high="9" type="uint"/>
-               <bitfield name="MAX_ANISO_WALK" pos="10" type="boolean"/>
-               <bitfield name="MIN_ANISO_WALK" pos="11" type="boolean"/>
-               <bitfield name="LOD_BIAS" low="12" high="21" type="fixed" radix="5"/>
-               <bitfield name="GRAD_EXP_ADJUST_H" low="22" high="26" type="uint"/>
-               <bitfield name="GRAD_EXP_ADJUST_V" low="27" high="31" type="uint"/>
-       </reg32>
-       <reg32 offset="5" name="5">
-               <bitfield name="BORDER_COLOR" low="0" high="1" type="sq_tex_border_color"/>
-               <bitfield name="FORCE_BCW_MAX" pos="2" type="boolean"/>
-               <bitfield name="TRI_CLAMP" low="3" high="4" type="uint"/>
-               <bitfield name="ANISO_BIAS" low="5" high="8" type="fixed" radix="0"/> <!-- radix unknown -->
-               <bitfield name="DIMENSION" low="9" high="10" type="sq_tex_dimension"/>
-               <bitfield name="PACKED_MIPS" pos="11" type="boolean"/>
-               <bitfield name="MIP_ADDRESS" low="12" high="31" type="uint" shr="12"/>
-       </reg32>
-</domain>
-
-</database>
diff --git a/src/freedreno/registers/a3xx.xml b/src/freedreno/registers/a3xx.xml
deleted file mode 100644 (file)
index 0819dc4..0000000
+++ /dev/null
@@ -1,1749 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<database xmlns="http://nouveau.freedesktop.org/"
-xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-xsi:schemaLocation="http://nouveau.freedesktop.org/ rules-ng.xsd">
-<import file="freedreno_copyright.xml"/>
-<import file="adreno/adreno_common.xml"/>
-<import file="adreno/adreno_pm4.xml"/>
-
-<enum name="a3xx_tile_mode">
-       <value name="LINEAR" value="0"/>
-       <value name="TILE_4X4" value="1"/>    <!-- "normal" case for textures -->
-       <value name="TILE_32X32" value="2"/>  <!-- only used in GMEM -->
-       <value name="TILE_4X2" value="3"/>    <!-- only used for CrCb -->
-</enum>
-
-<enum name="a3xx_state_block_id">
-       <value name="HLSQ_BLOCK_ID_TP_TEX" value="2"/>
-       <value name="HLSQ_BLOCK_ID_TP_MIPMAP" value="3"/>
-       <value name="HLSQ_BLOCK_ID_SP_VS" value="4"/>
-       <value name="HLSQ_BLOCK_ID_SP_FS" value="6"/>
-</enum>
-
-<enum name="a3xx_cache_opcode">
-       <value name="INVALIDATE" value="1"/>
-</enum>
-
-<enum name="a3xx_vtx_fmt">
-       <value name="VFMT_32_FLOAT" value="0x0"/>
-       <value name="VFMT_32_32_FLOAT" value="0x1"/>
-       <value name="VFMT_32_32_32_FLOAT" value="0x2"/>
-       <value name="VFMT_32_32_32_32_FLOAT" value="0x3"/>
-
-       <value name="VFMT_16_FLOAT" value="0x4"/>
-       <value name="VFMT_16_16_FLOAT" value="0x5"/>
-       <value name="VFMT_16_16_16_FLOAT" value="0x6"/>
-       <value name="VFMT_16_16_16_16_FLOAT" value="0x7"/>
-
-       <value name="VFMT_32_FIXED" value="0x8"/>
-       <value name="VFMT_32_32_FIXED" value="0x9"/>
-       <value name="VFMT_32_32_32_FIXED" value="0xa"/>
-       <value name="VFMT_32_32_32_32_FIXED" value="0xb"/>
-
-       <value name="VFMT_16_SINT" value="0x10"/>
-       <value name="VFMT_16_16_SINT" value="0x11"/>
-       <value name="VFMT_16_16_16_SINT" value="0x12"/>
-       <value name="VFMT_16_16_16_16_SINT" value="0x13"/>
-       <value name="VFMT_16_UINT" value="0x14"/>
-       <value name="VFMT_16_16_UINT" value="0x15"/>
-       <value name="VFMT_16_16_16_UINT" value="0x16"/>
-       <value name="VFMT_16_16_16_16_UINT" value="0x17"/>
-       <value name="VFMT_16_SNORM" value="0x18"/>
-       <value name="VFMT_16_16_SNORM" value="0x19"/>
-       <value name="VFMT_16_16_16_SNORM" value="0x1a"/>
-       <value name="VFMT_16_16_16_16_SNORM" value="0x1b"/>
-       <value name="VFMT_16_UNORM" value="0x1c"/>
-       <value name="VFMT_16_16_UNORM" value="0x1d"/>
-       <value name="VFMT_16_16_16_UNORM" value="0x1e"/>
-       <value name="VFMT_16_16_16_16_UNORM" value="0x1f"/>
-
-       <!-- seems to be no NORM variants for 32bit.. -->
-       <value name="VFMT_32_UINT" value="0x20"/>
-       <value name="VFMT_32_32_UINT" value="0x21"/>
-       <value name="VFMT_32_32_32_UINT" value="0x22"/>
-       <value name="VFMT_32_32_32_32_UINT" value="0x23"/>
-       <value name="VFMT_32_SINT" value="0x24"/>
-       <value name="VFMT_32_32_SINT" value="0x25"/>
-       <value name="VFMT_32_32_32_SINT" value="0x26"/>
-       <value name="VFMT_32_32_32_32_SINT" value="0x27"/>
-
-       <value name="VFMT_8_UINT" value="0x28"/>
-       <value name="VFMT_8_8_UINT" value="0x29"/>
-       <value name="VFMT_8_8_8_UINT" value="0x2a"/>
-       <value name="VFMT_8_8_8_8_UINT" value="0x2b"/>
-       <value name="VFMT_8_UNORM" value="0x2c"/>
-       <value name="VFMT_8_8_UNORM" value="0x2d"/>
-       <value name="VFMT_8_8_8_UNORM" value="0x2e"/>
-       <value name="VFMT_8_8_8_8_UNORM" value="0x2f"/>
-       <value name="VFMT_8_SINT" value="0x30"/>
-       <value name="VFMT_8_8_SINT" value="0x31"/>
-       <value name="VFMT_8_8_8_SINT" value="0x32"/>
-       <value name="VFMT_8_8_8_8_SINT" value="0x33"/>
-       <value name="VFMT_8_SNORM" value="0x34"/>
-       <value name="VFMT_8_8_SNORM" value="0x35"/>
-       <value name="VFMT_8_8_8_SNORM" value="0x36"/>
-       <value name="VFMT_8_8_8_8_SNORM" value="0x37"/>
-       <value name="VFMT_10_10_10_2_UINT" value="0x38"/>
-       <value name="VFMT_10_10_10_2_UNORM" value="0x39"/>
-       <value name="VFMT_10_10_10_2_SINT" value="0x3a"/>
-       <value name="VFMT_10_10_10_2_SNORM" value="0x3b"/>
-       <value name="VFMT_2_10_10_10_UINT" value="0x3c"/>
-       <value name="VFMT_2_10_10_10_UNORM" value="0x3d"/>
-       <value name="VFMT_2_10_10_10_SINT" value="0x3e"/>
-       <value name="VFMT_2_10_10_10_SNORM" value="0x3f"/>
-
-       <value name="VFMT_NONE" value="0xff"/>
-</enum>
-
-<enum name="a3xx_tex_fmt">
-       <value name="TFMT_5_6_5_UNORM" value="0x4"/>
-       <value name="TFMT_5_5_5_1_UNORM" value="0x5"/>
-       <value name="TFMT_4_4_4_4_UNORM" value="0x7"/>
-       <value name="TFMT_Z16_UNORM" value="0x9"/>
-       <value name="TFMT_X8Z24_UNORM" value="0xa"/>
-       <value name="TFMT_Z32_FLOAT" value="0xb"/>
-
-       <!--
-               The NV12 tiled/linear formats seem to require gang'd sampler
-               slots (ie. sampler state N plus N+1) for Y and UV planes.
-               They fetch yuv in single sam instruction, but still require
-               colorspace conversion in the shader.
-        -->
-       <value name="TFMT_UV_64X32" value="0x10"/>
-       <value name="TFMT_VU_64X32" value="0x11"/>
-       <value name="TFMT_Y_64X32" value="0x12"/>
-       <value name="TFMT_NV12_64X32" value="0x13"/>
-       <value name="TFMT_UV_LINEAR" value="0x14"/>
-       <value name="TFMT_VU_LINEAR" value="0x15"/>
-       <value name="TFMT_Y_LINEAR" value="0x16"/>
-       <value name="TFMT_NV12_LINEAR" value="0x17"/>
-       <value name="TFMT_I420_Y" value="0x18"/>
-       <value name="TFMT_I420_U" value="0x1a"/>
-       <value name="TFMT_I420_V" value="0x1b"/>
-
-       <value name="TFMT_ATC_RGB" value="0x20"/>
-       <value name="TFMT_ATC_RGBA_EXPLICIT" value="0x21"/>
-       <value name="TFMT_ETC1" value="0x22"/>
-       <value name="TFMT_ATC_RGBA_INTERPOLATED" value="0x23"/>
-
-       <value name="TFMT_DXT1" value="0x24"/>
-       <value name="TFMT_DXT3" value="0x25"/>
-       <value name="TFMT_DXT5" value="0x26"/>
-
-       <value name="TFMT_2_10_10_10_UNORM" value="0x28"/>
-       <value name="TFMT_10_10_10_2_UNORM" value="0x29"/>
-       <value name="TFMT_9_9_9_E5_FLOAT" value="0x2a"/>
-       <value name="TFMT_11_11_10_FLOAT" value="0x2b"/>
-       <value name="TFMT_A8_UNORM" value="0x2c"/>    <!-- GL_ALPHA -->
-       <value name="TFMT_L8_UNORM" value="0x2d"/>
-       <value name="TFMT_L8_A8_UNORM" value="0x2f"/> <!-- GL_LUMINANCE_ALPHA -->
-
-       <!--
-               NOTE: GL_ALPHA and GL_LUMINANCE_ALPHA aren't handled in a similar way
-               to float16, float32.. but they seem to use non-standard swizzle too..
-               perhaps we can ditch that if the pattern follows of 0xn0, 0xn1, 0xn2,
-               0xn3 for 1, 2, 3, 4 components respectively..
-
-               Only formats filled in below are the ones that have been observed by
-               the blob or tested.. you can guess what the missing ones are..
-        -->
-
-       <value name="TFMT_8_UNORM" value="0x30"/>     <!-- GL_LUMINANCE -->
-       <value name="TFMT_8_8_UNORM" value="0x31"/>
-       <value name="TFMT_8_8_8_UNORM" value="0x32"/>
-       <value name="TFMT_8_8_8_8_UNORM" value="0x33"/>
-
-       <value name="TFMT_8_SNORM" value="0x34"/>
-       <value name="TFMT_8_8_SNORM" value="0x35"/>
-       <value name="TFMT_8_8_8_SNORM" value="0x36"/>
-       <value name="TFMT_8_8_8_8_SNORM" value="0x37"/>
-
-       <value name="TFMT_8_UINT" value="0x38"/>
-       <value name="TFMT_8_8_UINT" value="0x39"/>
-       <value name="TFMT_8_8_8_UINT" value="0x3a"/>
-       <value name="TFMT_8_8_8_8_UINT" value="0x3b"/>
-
-       <value name="TFMT_8_SINT" value="0x3c"/>
-       <value name="TFMT_8_8_SINT" value="0x3d"/>
-       <value name="TFMT_8_8_8_SINT" value="0x3e"/>
-       <value name="TFMT_8_8_8_8_SINT" value="0x3f"/>
-
-       <value name="TFMT_16_FLOAT" value="0x40"/>
-       <value name="TFMT_16_16_FLOAT" value="0x41"/>
-       <!-- TFMT_FLOAT_16_16_16 -->
-       <value name="TFMT_16_16_16_16_FLOAT" value="0x43"/>
-
-       <value name="TFMT_16_UINT" value="0x44"/>
-       <value name="TFMT_16_16_UINT" value="0x45"/>
-       <value name="TFMT_16_16_16_16_UINT" value="0x47"/>
-
-       <value name="TFMT_16_SINT" value="0x48"/>
-       <value name="TFMT_16_16_SINT" value="0x49"/>
-       <value name="TFMT_16_16_16_16_SINT" value="0x4b"/>
-
-       <value name="TFMT_16_UNORM" value="0x4c"/>
-       <value name="TFMT_16_16_UNORM" value="0x4d"/>
-       <value name="TFMT_16_16_16_16_UNORM" value="0x4f"/>
-
-       <value name="TFMT_16_SNORM" value="0x50"/>
-       <value name="TFMT_16_16_SNORM" value="0x51"/>
-       <value name="TFMT_16_16_16_16_SNORM" value="0x53"/>
-
-       <value name="TFMT_32_FLOAT" value="0x54"/>
-       <value name="TFMT_32_32_FLOAT" value="0x55"/>
-       <!-- TFMT_32_32_32_FLOAT -->
-       <value name="TFMT_32_32_32_32_FLOAT" value="0x57"/>
-
-       <value name="TFMT_32_UINT" value="0x58"/>
-       <value name="TFMT_32_32_UINT" value="0x59"/>
-       <value name="TFMT_32_32_32_32_UINT" value="0x5b"/>
-
-       <value name="TFMT_32_SINT" value="0x5c"/>
-       <value name="TFMT_32_32_SINT" value="0x5d"/>
-       <value name="TFMT_32_32_32_32_SINT" value="0x5f"/>
-
-       <value name="TFMT_2_10_10_10_UINT" value="0x60"/>
-       <value name="TFMT_10_10_10_2_UINT" value="0x61"/>
-
-       <value name="TFMT_ETC2_RG11_SNORM" value="0x70"/>
-       <value name="TFMT_ETC2_RG11_UNORM" value="0x71"/>
-       <value name="TFMT_ETC2_R11_SNORM" value="0x72"/>
-       <value name="TFMT_ETC2_R11_UNORM" value="0x73"/>
-       <value name="TFMT_ETC2_RGBA8" value="0x74"/>
-       <value name="TFMT_ETC2_RGB8A1" value="0x75"/>
-       <value name="TFMT_ETC2_RGB8" value="0x76"/>
-
-       <value name="TFMT_NONE" value="0xff"/>
-</enum>
-
-<enum name="a3xx_color_fmt">
-       <value name="RB_R5G6B5_UNORM"       value="0x00"/>
-       <value name="RB_R5G5B5A1_UNORM"     value="0x01"/>
-       <value name="RB_R4G4B4A4_UNORM"     value="0x03"/>
-       <value name="RB_R8G8B8_UNORM"       value="0x04"/>
-       <value name="RB_R8G8B8A8_UNORM"     value="0x08"/>
-       <value name="RB_R8G8B8A8_SNORM"     value="0x09"/>
-       <value name="RB_R8G8B8A8_UINT"      value="0x0a"/>
-       <value name="RB_R8G8B8A8_SINT"      value="0x0b"/>
-       <value name="RB_R8G8_UNORM"         value="0x0c"/>
-       <value name="RB_R8G8_SNORM"         value="0x0d"/>
-       <value name="RB_R8G8_UINT"          value="0x0e"/>
-       <value name="RB_R8G8_SINT"          value="0x0f"/>
-       <value name="RB_R10G10B10A2_UNORM"  value="0x10"/>
-       <value name="RB_A2R10G10B10_UNORM"  value="0x11"/>
-       <value name="RB_R10G10B10A2_UINT"   value="0x12"/>
-       <value name="RB_A2R10G10B10_UINT"   value="0x13"/>
-
-       <value name="RB_A8_UNORM"           value="0x14"/>
-       <value name="RB_R8_UNORM"           value="0x15"/>
-
-       <value name="RB_R16_FLOAT"          value="0x18"/>
-       <value name="RB_R16G16_FLOAT"       value="0x19"/>
-       <value name="RB_R16G16B16A16_FLOAT" value="0x1b"/> <!-- GL_HALF_FLOAT_OES -->
-       <value name="RB_R11G11B10_FLOAT"    value="0x1c"/>
-
-       <value name="RB_R16_SNORM"          value="0x20"/>
-       <value name="RB_R16G16_SNORM"       value="0x21"/>
-       <value name="RB_R16G16B16A16_SNORM" value="0x23"/>
-
-       <value name="RB_R16_UNORM"          value="0x24"/>
-       <value name="RB_R16G16_UNORM"       value="0x25"/>
-       <value name="RB_R16G16B16A16_UNORM" value="0x27"/>
-
-       <value name="RB_R16_SINT"           value="0x28"/>
-       <value name="RB_R16G16_SINT"        value="0x29"/>
-       <value name="RB_R16G16B16A16_SINT"  value="0x2b"/>
-
-       <value name="RB_R16_UINT"           value="0x2c"/>
-       <value name="RB_R16G16_UINT"        value="0x2d"/>
-       <value name="RB_R16G16B16A16_UINT"  value="0x2f"/>
-
-       <value name="RB_R32_FLOAT"          value="0x30"/>
-       <value name="RB_R32G32_FLOAT"       value="0x31"/>
-       <value name="RB_R32G32B32A32_FLOAT" value="0x33"/> <!-- GL_FLOAT -->
-
-       <value name="RB_R32_SINT"           value="0x34"/>
-       <value name="RB_R32G32_SINT"        value="0x35"/>
-       <value name="RB_R32G32B32A32_SINT"  value="0x37"/>
-
-       <value name="RB_R32_UINT"           value="0x38"/>
-       <value name="RB_R32G32_UINT"        value="0x39"/>
-       <value name="RB_R32G32B32A32_UINT"  value="0x3b"/>
-
-       <value name="RB_NONE"               value="0xff"/>
-</enum>
-
-<enum name="a3xx_cp_perfcounter_select">
-       <value value="0x00" name="CP_ALWAYS_COUNT"/>
-       <value value="0x03" name="CP_AHB_PFPTRANS_WAIT"/>
-       <value value="0x06" name="CP_AHB_NRTTRANS_WAIT"/>
-       <value value="0x08" name="CP_CSF_NRT_READ_WAIT"/>
-       <value value="0x09" name="CP_CSF_I1_FIFO_FULL"/>
-       <value value="0x0a" name="CP_CSF_I2_FIFO_FULL"/>
-       <value value="0x0b" name="CP_CSF_ST_FIFO_FULL"/>
-       <value value="0x0c" name="CP_RESERVED_12"/>
-       <value value="0x0d" name="CP_CSF_RING_ROQ_FULL"/>
-       <value value="0x0e" name="CP_CSF_I1_ROQ_FULL"/>
-       <value value="0x0f" name="CP_CSF_I2_ROQ_FULL"/>
-       <value value="0x10" name="CP_CSF_ST_ROQ_FULL"/>
-       <value value="0x11" name="CP_RESERVED_17"/>
-       <value value="0x12" name="CP_MIU_TAG_MEM_FULL"/>
-       <value value="0x16" name="CP_MIU_NRT_WRITE_STALLED"/>
-       <value value="0x17" name="CP_MIU_NRT_READ_STALLED"/>
-       <value value="0x1a" name="CP_ME_REGS_RB_DONE_FIFO_FULL"/>
-       <value value="0x1b" name="CP_ME_REGS_VS_EVENT_FIFO_FULL"/>
-       <value value="0x1c" name="CP_ME_REGS_PS_EVENT_FIFO_FULL"/>
-       <value value="0x1d" name="CP_ME_REGS_CF_EVENT_FIFO_FULL"/>
-       <value value="0x1e" name="CP_ME_MICRO_RB_STARVED"/>
-       <value value="0x28" name="CP_AHB_RBBM_DWORD_SENT"/>
-       <value value="0x29" name="CP_ME_BUSY_CLOCKS"/>
-       <value value="0x2a" name="CP_ME_WAIT_CONTEXT_AVAIL"/>
-       <value value="0x2b" name="CP_PFP_TYPE0_PACKET"/>
-       <value value="0x2c" name="CP_PFP_TYPE3_PACKET"/>
-       <value value="0x2d" name="CP_CSF_RB_WPTR_NEQ_RPTR"/>
-       <value value="0x2e" name="CP_CSF_I1_SIZE_NEQ_ZERO"/>
-       <value value="0x2f" name="CP_CSF_I2_SIZE_NEQ_ZERO"/>
-       <value value="0x30" name="CP_CSF_RBI1I2_FETCHING"/>
-</enum>
-
-<enum name="a3xx_gras_tse_perfcounter_select">
-       <value value="0x00" name="GRAS_TSEPERF_INPUT_PRIM"/>
-       <value value="0x01" name="GRAS_TSEPERF_INPUT_NULL_PRIM"/>
-       <value value="0x02" name="GRAS_TSEPERF_TRIVAL_REJ_PRIM"/>
-       <value value="0x03" name="GRAS_TSEPERF_CLIPPED_PRIM"/>
-       <value value="0x04" name="GRAS_TSEPERF_NEW_PRIM"/>
-       <value value="0x05" name="GRAS_TSEPERF_ZERO_AREA_PRIM"/>
-       <value value="0x06" name="GRAS_TSEPERF_FACENESS_CULLED_PRIM"/>
-       <value value="0x07" name="GRAS_TSEPERF_ZERO_PIXEL_PRIM"/>
-       <value value="0x08" name="GRAS_TSEPERF_OUTPUT_NULL_PRIM"/>
-       <value value="0x09" name="GRAS_TSEPERF_OUTPUT_VISIBLE_PRIM"/>
-       <value value="0x0a" name="GRAS_TSEPERF_PRE_CLIP_PRIM"/>
-       <value value="0x0b" name="GRAS_TSEPERF_POST_CLIP_PRIM"/>
-       <value value="0x0c" name="GRAS_TSEPERF_WORKING_CYCLES"/>
-       <value value="0x0d" name="GRAS_TSEPERF_PC_STARVE"/>
-       <value value="0x0e" name="GRAS_TSERASPERF_STALL"/>
-</enum>
-
-<enum name="a3xx_gras_ras_perfcounter_select">
-       <value value="0x00" name="GRAS_RASPERF_16X16_TILES"/>
-       <value value="0x01" name="GRAS_RASPERF_8X8_TILES"/>
-       <value value="0x02" name="GRAS_RASPERF_4X4_TILES"/>
-       <value value="0x03" name="GRAS_RASPERF_WORKING_CYCLES"/>
-       <value value="0x04" name="GRAS_RASPERF_STALL_CYCLES_BY_RB"/>
-       <value value="0x05" name="GRAS_RASPERF_STALL_CYCLES_BY_VSC"/>
-       <value value="0x06" name="GRAS_RASPERF_STARVE_CYCLES_BY_TSE"/>
-</enum>
-
-<enum name="a3xx_hlsq_perfcounter_select">
-       <value value="0x00" name="HLSQ_PERF_SP_VS_CONSTANT"/>
-       <value value="0x01" name="HLSQ_PERF_SP_VS_INSTRUCTIONS"/>
-       <value value="0x02" name="HLSQ_PERF_SP_FS_CONSTANT"/>
-       <value value="0x03" name="HLSQ_PERF_SP_FS_INSTRUCTIONS"/>
-       <value value="0x04" name="HLSQ_PERF_TP_STATE"/>
-       <value value="0x05" name="HLSQ_PERF_QUADS"/>
-       <value value="0x06" name="HLSQ_PERF_PIXELS"/>
-       <value value="0x07" name="HLSQ_PERF_VERTICES"/>
-       <value value="0x08" name="HLSQ_PERF_FS8_THREADS"/>
-       <value value="0x09" name="HLSQ_PERF_FS16_THREADS"/>
-       <value value="0x0a" name="HLSQ_PERF_FS32_THREADS"/>
-       <value value="0x0b" name="HLSQ_PERF_VS8_THREADS"/>
-       <value value="0x0c" name="HLSQ_PERF_VS16_THREADS"/>
-       <value value="0x0d" name="HLSQ_PERF_SP_VS_DATA_BYTES"/>
-       <value value="0x0e" name="HLSQ_PERF_SP_FS_DATA_BYTES"/>
-       <value value="0x0f" name="HLSQ_PERF_ACTIVE_CYCLES"/>
-       <value value="0x10" name="HLSQ_PERF_STALL_CYCLES_SP_STATE"/>
-       <value value="0x11" name="HLSQ_PERF_STALL_CYCLES_SP_VS"/>
-       <value value="0x12" name="HLSQ_PERF_STALL_CYCLES_SP_FS"/>
-       <value value="0x13" name="HLSQ_PERF_STALL_CYCLES_UCHE"/>
-       <value value="0x14" name="HLSQ_PERF_RBBM_LOAD_CYCLES"/>
-       <value value="0x15" name="HLSQ_PERF_DI_TO_VS_START_SP0"/>
-       <value value="0x16" name="HLSQ_PERF_DI_TO_FS_START_SP0"/>
-       <value value="0x17" name="HLSQ_PERF_VS_START_TO_DONE_SP0"/>
-       <value value="0x18" name="HLSQ_PERF_FS_START_TO_DONE_SP0"/>
-       <value value="0x19" name="HLSQ_PERF_SP_STATE_COPY_CYCLES_VS"/>
-       <value value="0x1a" name="HLSQ_PERF_SP_STATE_COPY_CYCLES_FS"/>
-       <value value="0x1b" name="HLSQ_PERF_UCHE_LATENCY_CYCLES"/>
-       <value value="0x1c" name="HLSQ_PERF_UCHE_LATENCY_COUNT"/>
-</enum>
-
-<enum name="a3xx_pc_perfcounter_select">
-       <value value="0x00" name="PC_PCPERF_VISIBILITY_STREAMS"/>
-       <value value="0x01" name="PC_PCPERF_TOTAL_INSTANCES"/>
-       <value value="0x02" name="PC_PCPERF_PRIMITIVES_PC_VPC"/>
-       <value value="0x03" name="PC_PCPERF_PRIMITIVES_KILLED_BY_VS"/>
-       <value value="0x04" name="PC_PCPERF_PRIMITIVES_VISIBLE_BY_VS"/>
-       <value value="0x05" name="PC_PCPERF_DRAWCALLS_KILLED_BY_VS"/>
-       <value value="0x06" name="PC_PCPERF_DRAWCALLS_VISIBLE_BY_VS"/>
-       <value value="0x07" name="PC_PCPERF_VERTICES_TO_VFD"/>
-       <value value="0x08" name="PC_PCPERF_REUSED_VERTICES"/>
-       <value value="0x09" name="PC_PCPERF_CYCLES_STALLED_BY_VFD"/>
-       <value value="0x0a" name="PC_PCPERF_CYCLES_STALLED_BY_TSE"/>
-       <value value="0x0b" name="PC_PCPERF_CYCLES_STALLED_BY_VBIF"/>
-       <value value="0x0c" name="PC_PCPERF_CYCLES_IS_WORKING"/>
-</enum>
-
-<enum name="a3xx_rb_perfcounter_select">
-       <value value="0x00" name="RB_RBPERF_ACTIVE_CYCLES_ANY"/>
-       <value value="0x01" name="RB_RBPERF_ACTIVE_CYCLES_ALL"/>
-       <value value="0x02" name="RB_RBPERF_STARVE_CYCLES_BY_SP"/>
-       <value value="0x03" name="RB_RBPERF_STARVE_CYCLES_BY_RAS"/>
-       <value value="0x04" name="RB_RBPERF_STARVE_CYCLES_BY_MARB"/>
-       <value value="0x05" name="RB_RBPERF_STALL_CYCLES_BY_MARB"/>
-       <value value="0x06" name="RB_RBPERF_STALL_CYCLES_BY_HLSQ"/>
-       <value value="0x07" name="RB_RBPERF_RB_MARB_DATA"/>
-       <value value="0x08" name="RB_RBPERF_SP_RB_QUAD"/>
-       <value value="0x09" name="RB_RBPERF_RAS_EARLY_Z_QUADS"/>
-       <value value="0x0a" name="RB_RBPERF_GMEM_CH0_READ"/>
-       <value value="0x0b" name="RB_RBPERF_GMEM_CH1_READ"/>
-       <value value="0x0c" name="RB_RBPERF_GMEM_CH0_WRITE"/>
-       <value value="0x0d" name="RB_RBPERF_GMEM_CH1_WRITE"/>
-       <value value="0x0e" name="RB_RBPERF_CP_CONTEXT_DONE"/>
-       <value value="0x0f" name="RB_RBPERF_CP_CACHE_FLUSH"/>
-       <value value="0x10" name="RB_RBPERF_CP_ZPASS_DONE"/>
-</enum>
-
-<enum name="a3xx_rbbm_perfcounter_select">
-       <value value="0" name="RBBM_ALAWYS_ON"/>
-       <value value="1" name="RBBM_VBIF_BUSY"/>
-       <value value="2" name="RBBM_TSE_BUSY"/>
-       <value value="3" name="RBBM_RAS_BUSY"/>
-       <value value="4" name="RBBM_PC_DCALL_BUSY"/>
-       <value value="5" name="RBBM_PC_VSD_BUSY"/>
-       <value value="6" name="RBBM_VFD_BUSY"/>
-       <value value="7" name="RBBM_VPC_BUSY"/>
-       <value value="8" name="RBBM_UCHE_BUSY"/>
-       <value value="9" name="RBBM_VSC_BUSY"/>
-       <value value="10" name="RBBM_HLSQ_BUSY"/>
-       <value value="11" name="RBBM_ANY_RB_BUSY"/>
-       <value value="12" name="RBBM_ANY_TEX_BUSY"/>
-       <value value="13" name="RBBM_ANY_USP_BUSY"/>
-       <value value="14" name="RBBM_ANY_MARB_BUSY"/>
-       <value value="15" name="RBBM_ANY_ARB_BUSY"/>
-       <value value="16" name="RBBM_AHB_STATUS_BUSY"/>
-       <value value="17" name="RBBM_AHB_STATUS_STALLED"/>
-       <value value="18" name="RBBM_AHB_STATUS_TXFR"/>
-       <value value="19" name="RBBM_AHB_STATUS_TXFR_SPLIT"/>
-       <value value="20" name="RBBM_AHB_STATUS_TXFR_ERROR"/>
-       <value value="21" name="RBBM_AHB_STATUS_LONG_STALL"/>
-       <value value="22" name="RBBM_RBBM_STATUS_MASKED"/>
-</enum>
-
-<enum name="a3xx_sp_perfcounter_select">
-       <value value="0x00" name="SP_LM_LOAD_INSTRUCTIONS"/>
-       <value value="0x01" name="SP_LM_STORE_INSTRUCTIONS"/>
-       <value value="0x02" name="SP_LM_ATOMICS"/>
-       <value value="0x03" name="SP_UCHE_LOAD_INSTRUCTIONS"/>
-       <value value="0x04" name="SP_UCHE_STORE_INSTRUCTIONS"/>
-       <value value="0x05" name="SP_UCHE_ATOMICS"/>
-       <value value="0x06" name="SP_VS_TEX_INSTRUCTIONS"/>
-       <value value="0x07" name="SP_VS_CFLOW_INSTRUCTIONS"/>
-       <value value="0x08" name="SP_VS_EFU_INSTRUCTIONS"/>
-       <value value="0x09" name="SP_VS_FULL_ALU_INSTRUCTIONS"/>
-       <value value="0x0a" name="SP_VS_HALF_ALU_INSTRUCTIONS"/>
-       <value value="0x0b" name="SP_FS_TEX_INSTRUCTIONS"/>
-       <value value="0x0c" name="SP_FS_CFLOW_INSTRUCTIONS"/>
-       <value value="0x0d" name="SP_FS_EFU_INSTRUCTIONS"/>
-       <value value="0x0e" name="SP_FS_FULL_ALU_INSTRUCTIONS"/>
-       <value value="0x0f" name="SP_FS_HALF_ALU_INSTRUCTIONS"/>
-       <value value="0x10" name="SP_FS_BARY_INSTRUCTIONS"/>
-       <value value="0x11" name="SP_VS_INSTRUCTIONS"/>
-       <value value="0x12" name="SP_FS_INSTRUCTIONS"/>
-       <value value="0x13" name="SP_ADDR_LOCK_COUNT"/>
-       <value value="0x14" name="SP_UCHE_READ_TRANS"/>
-       <value value="0x15" name="SP_UCHE_WRITE_TRANS"/>
-       <value value="0x16" name="SP_EXPORT_VPC_TRANS"/>
-       <value value="0x17" name="SP_EXPORT_RB_TRANS"/>
-       <value value="0x18" name="SP_PIXELS_KILLED"/>
-       <value value="0x19" name="SP_ICL1_REQUESTS"/>
-       <value value="0x1a" name="SP_ICL1_MISSES"/>
-       <value value="0x1b" name="SP_ICL0_REQUESTS"/>
-       <value value="0x1c" name="SP_ICL0_MISSES"/>
-       <value value="0x1d" name="SP_ALU_ACTIVE_CYCLES"/>
-       <value value="0x1e" name="SP_EFU_ACTIVE_CYCLES"/>
-       <value value="0x1f" name="SP_STALL_CYCLES_BY_VPC"/>
-       <value value="0x20" name="SP_STALL_CYCLES_BY_TP"/>
-       <value value="0x21" name="SP_STALL_CYCLES_BY_UCHE"/>
-       <value value="0x22" name="SP_STALL_CYCLES_BY_RB"/>
-       <value value="0x23" name="SP_ACTIVE_CYCLES_ANY"/>
-       <value value="0x24" name="SP_ACTIVE_CYCLES_ALL"/>
-</enum>
-
-<enum name="a3xx_tp_perfcounter_select">
-       <value value="0x00" name="TPL1_TPPERF_L1_REQUESTS"/>
-       <value value="0x01" name="TPL1_TPPERF_TP0_L1_REQUESTS"/>
-       <value value="0x02" name="TPL1_TPPERF_TP0_L1_MISSES"/>
-       <value value="0x03" name="TPL1_TPPERF_TP1_L1_REQUESTS"/>
-       <value value="0x04" name="TPL1_TPPERF_TP1_L1_MISSES"/>
-       <value value="0x05" name="TPL1_TPPERF_TP2_L1_REQUESTS"/>
-       <value value="0x06" name="TPL1_TPPERF_TP2_L1_MISSES"/>
-       <value value="0x07" name="TPL1_TPPERF_TP3_L1_REQUESTS"/>
-       <value value="0x08" name="TPL1_TPPERF_TP3_L1_MISSES"/>
-       <value value="0x09" name="TPL1_TPPERF_OUTPUT_TEXELS_POINT"/>
-       <value value="0x0a" name="TPL1_TPPERF_OUTPUT_TEXELS_BILINEAR"/>
-       <value value="0x0b" name="TPL1_TPPERF_OUTPUT_TEXELS_MIP"/>
-       <value value="0x0c" name="TPL1_TPPERF_OUTPUT_TEXELS_ANISO"/>
-       <value value="0x0d" name="TPL1_TPPERF_BILINEAR_OPS"/>
-       <value value="0x0e" name="TPL1_TPPERF_QUADSQUADS_OFFSET"/>
-       <value value="0x0f" name="TPL1_TPPERF_QUADQUADS_SHADOW"/>
-       <value value="0x10" name="TPL1_TPPERF_QUADS_ARRAY"/>
-       <value value="0x11" name="TPL1_TPPERF_QUADS_PROJECTION"/>
-       <value value="0x12" name="TPL1_TPPERF_QUADS_GRADIENT"/>
-       <value value="0x13" name="TPL1_TPPERF_QUADS_1D2D"/>
-       <value value="0x14" name="TPL1_TPPERF_QUADS_3DCUBE"/>
-       <value value="0x15" name="TPL1_TPPERF_ZERO_LOD"/>
-       <value value="0x16" name="TPL1_TPPERF_OUTPUT_TEXELS"/>
-       <value value="0x17" name="TPL1_TPPERF_ACTIVE_CYCLES_ANY"/>
-       <value value="0x18" name="TPL1_TPPERF_ACTIVE_CYCLES_ALL"/>
-       <value value="0x19" name="TPL1_TPPERF_STALL_CYCLES_BY_ARB"/>
-       <value value="0x1a" name="TPL1_TPPERF_LATENCY"/>
-       <value value="0x1b" name="TPL1_TPPERF_LATENCY_TRANS"/>
-</enum>
-
-<enum name="a3xx_vfd_perfcounter_select">
-       <value value="0" name="VFD_PERF_UCHE_BYTE_FETCHED"/>
-       <value value="1" name="VFD_PERF_UCHE_TRANS"/>
-       <value value="2" name="VFD_PERF_VPC_BYPASS_COMPONENTS"/>
-       <value value="3" name="VFD_PERF_FETCH_INSTRUCTIONS"/>
-       <value value="4" name="VFD_PERF_DECODE_INSTRUCTIONS"/>
-       <value value="5" name="VFD_PERF_ACTIVE_CYCLES"/>
-       <value value="6" name="VFD_PERF_STALL_CYCLES_UCHE"/>
-       <value value="7" name="VFD_PERF_STALL_CYCLES_HLSQ"/>
-       <value value="8" name="VFD_PERF_STALL_CYCLES_VPC_BYPASS"/>
-       <value value="9" name="VFD_PERF_STALL_CYCLES_VPC_ALLOC"/>
-</enum>
-
-<enum name="a3xx_vpc_perfcounter_select">
-       <value value="0" name="VPC_PERF_SP_LM_PRIMITIVES"/>
-       <value value="1" name="VPC_PERF_COMPONENTS_FROM_SP"/>
-       <value value="2" name="VPC_PERF_SP_LM_COMPONENTS"/>
-       <value value="3" name="VPC_PERF_ACTIVE_CYCLES"/>
-       <value value="4" name="VPC_PERF_STALL_CYCLES_LM"/>
-       <value value="5" name="VPC_PERF_STALL_CYCLES_RAS"/>
-</enum>
-
-<enum name="a3xx_uche_perfcounter_select">
-       <value value="0x00" name="UCHE_UCHEPERF_VBIF_READ_BEATS_TP"/>
-       <value value="0x01" name="UCHE_UCHEPERF_VBIF_READ_BEATS_VFD"/>
-       <value value="0x02" name="UCHE_UCHEPERF_VBIF_READ_BEATS_HLSQ"/>
-       <value value="0x03" name="UCHE_UCHEPERF_VBIF_READ_BEATS_MARB"/>
-       <value value="0x04" name="UCHE_UCHEPERF_VBIF_READ_BEATS_SP"/>
-       <value value="0x08" name="UCHE_UCHEPERF_READ_REQUESTS_TP"/>
-       <value value="0x09" name="UCHE_UCHEPERF_READ_REQUESTS_VFD"/>
-       <value value="0x0a" name="UCHE_UCHEPERF_READ_REQUESTS_HLSQ"/>
-       <value value="0x0b" name="UCHE_UCHEPERF_READ_REQUESTS_MARB"/>
-       <value value="0x0c" name="UCHE_UCHEPERF_READ_REQUESTS_SP"/>
-       <value value="0x0d" name="UCHE_UCHEPERF_WRITE_REQUESTS_MARB"/>
-       <value value="0x0e" name="UCHE_UCHEPERF_WRITE_REQUESTS_SP"/>
-       <value value="0x0f" name="UCHE_UCHEPERF_TAG_CHECK_FAILS"/>
-       <value value="0x10" name="UCHE_UCHEPERF_EVICTS"/>
-       <value value="0x11" name="UCHE_UCHEPERF_FLUSHES"/>
-       <value value="0x12" name="UCHE_UCHEPERF_VBIF_LATENCY_CYCLES"/>
-       <value value="0x13" name="UCHE_UCHEPERF_VBIF_LATENCY_SAMPLES"/>
-       <value value="0x14" name="UCHE_UCHEPERF_ACTIVE_CYCLES"/>
-</enum>
-
-<enum name="a3xx_intp_mode">
-       <value name="SMOOTH" value="0"/>
-       <value name="FLAT" value="1"/>
-       <value name="ZERO" value="2"/>
-       <value name="ONE" value="3"/>
-</enum>
-
-<enum name="a3xx_repl_mode">
-       <value name="S" value="1"/>
-       <value name="T" value="2"/>
-       <value name="ONE_T" value="3"/>
-</enum>
-
-<domain name="A3XX" width="32">
-       <!-- RBBM registers -->
-       <reg32 offset="0x0000" name="RBBM_HW_VERSION"/>
-       <reg32 offset="0x0001" name="RBBM_HW_RELEASE"/>
-       <reg32 offset="0x0002" name="RBBM_HW_CONFIGURATION"/>
-       <reg32 offset="0x0010" name="RBBM_CLOCK_CTL"/>
-       <reg32 offset="0x0012" name="RBBM_SP_HYST_CNT"/>
-       <reg32 offset="0x0018" name="RBBM_SW_RESET_CMD"/>
-       <reg32 offset="0x0020" name="RBBM_AHB_CTL0"/>
-       <reg32 offset="0x0021" name="RBBM_AHB_CTL1"/>
-       <reg32 offset="0x0022" name="RBBM_AHB_CMD"/>
-       <reg32 offset="0x0027" name="RBBM_AHB_ERROR_STATUS"/>
-       <reg32 offset="0x002e" name="RBBM_GPR0_CTL"/>
-       <reg32 offset="0x0030" name="RBBM_STATUS">
-               <bitfield name="HI_BUSY" pos="0" type="boolean"/>
-               <bitfield name="CP_ME_BUSY" pos="1" type="boolean"/>
-               <bitfield name="CP_PFP_BUSY" pos="2" type="boolean"/>
-               <bitfield name="CP_NRT_BUSY" pos="14" type="boolean"/>
-               <bitfield name="VBIF_BUSY" pos="15" type="boolean"/>
-               <bitfield name="TSE_BUSY" pos="16" type="boolean"/>
-               <bitfield name="RAS_BUSY" pos="17" type="boolean"/>
-               <bitfield name="RB_BUSY" pos="18" type="boolean"/>
-               <bitfield name="PC_DCALL_BUSY" pos="19" type="boolean"/>
-               <bitfield name="PC_VSD_BUSY" pos="20" type="boolean"/>
-               <bitfield name="VFD_BUSY" pos="21" type="boolean"/>
-               <bitfield name="VPC_BUSY" pos="22" type="boolean"/>
-               <bitfield name="UCHE_BUSY" pos="23" type="boolean"/>
-               <bitfield name="SP_BUSY" pos="24" type="boolean"/>
-               <bitfield name="TPL1_BUSY" pos="25" type="boolean"/>
-               <bitfield name="MARB_BUSY" pos="26" type="boolean"/>
-               <bitfield name="VSC_BUSY" pos="27" type="boolean"/>
-               <bitfield name="ARB_BUSY" pos="28" type="boolean"/>
-               <bitfield name="HLSQ_BUSY" pos="29" type="boolean"/>
-               <bitfield name="GPU_BUSY_NOHC" pos="30" type="boolean"/>
-               <bitfield name="GPU_BUSY" pos="31" type="boolean"/>
-       </reg32>
-       <!-- used in fw CP_WAIT_FOR_IDLE, similar to NQWAIT_UNTIL on a2xx: -->
-       <reg32 offset="0x0040" name="RBBM_NQWAIT_UNTIL"/>
-       <reg32 offset="0x0033" name="RBBM_WAIT_IDLE_CLOCKS_CTL"/>
-       <reg32 offset="0x0050" name="RBBM_INTERFACE_HANG_INT_CTL"/>
-       <reg32 offset="0x0051" name="RBBM_INTERFACE_HANG_MASK_CTL0"/>
-       <reg32 offset="0x0054" name="RBBM_INTERFACE_HANG_MASK_CTL1"/>
-       <reg32 offset="0x0057" name="RBBM_INTERFACE_HANG_MASK_CTL2"/>
-       <reg32 offset="0x005a" name="RBBM_INTERFACE_HANG_MASK_CTL3"/>
-
-       <bitset name="A3XX_INT0">
-               <bitfield name="RBBM_GPU_IDLE" pos="0" type="boolean"/>
-               <bitfield name="RBBM_AHB_ERROR" pos="1" type="boolean"/>
-               <bitfield name="RBBM_REG_TIMEOUT" pos="2" type="boolean"/>
-               <bitfield name="RBBM_ME_MS_TIMEOUT" pos="3" type="boolean"/>
-               <bitfield name="RBBM_PFP_MS_TIMEOUT" pos="4" type="boolean"/>
-               <bitfield name="RBBM_ATB_BUS_OVERFLOW" pos="5" type="boolean"/>
-               <bitfield name="VFD_ERROR" pos="6" type="boolean"/>
-               <bitfield name="CP_SW_INT" pos="7" type="boolean"/>
-               <bitfield name="CP_T0_PACKET_IN_IB" pos="8" type="boolean"/>
-               <bitfield name="CP_OPCODE_ERROR" pos="9" type="boolean"/>
-               <bitfield name="CP_RESERVED_BIT_ERROR" pos="10" type="boolean"/>
-               <bitfield name="CP_HW_FAULT" pos="11" type="boolean"/>
-               <bitfield name="CP_DMA" pos="12" type="boolean"/>
-               <bitfield name="CP_IB2_INT" pos="13" type="boolean"/>
-               <bitfield name="CP_IB1_INT" pos="14" type="boolean"/>
-               <bitfield name="CP_RB_INT" pos="15" type="boolean"/>
-               <bitfield name="CP_REG_PROTECT_FAULT" pos="16" type="boolean"/>
-               <bitfield name="CP_RB_DONE_TS" pos="17" type="boolean"/>
-               <bitfield name="CP_VS_DONE_TS" pos="18" type="boolean"/>
-               <bitfield name="CP_PS_DONE_TS" pos="19" type="boolean"/>
-               <bitfield name="CACHE_FLUSH_TS" pos="20" type="boolean"/>
-               <bitfield name="CP_AHB_ERROR_HALT" pos="21" type="boolean"/>
-               <bitfield name="MISC_HANG_DETECT" pos="24" type="boolean"/>
-               <bitfield name="UCHE_OOB_ACCESS" pos="25" type="boolean"/>
-       </bitset>
-
-
-       <!--
-               set in pm4 fw INVALID_JUMP_TABLE_ENTRY and CP_INTERRUPT (compare
-               to CP_INT_STATUS in a2xx firmware), so this seems to be the a3xx
-               way for fw to raise and irq:
-        -->
-       <reg32 offset="0x0060" name="RBBM_INT_SET_CMD" type="A3XX_INT0"/>
-       <reg32 offset="0x0061" name="RBBM_INT_CLEAR_CMD" type="A3XX_INT0"/>
-       <reg32 offset="0x0063" name="RBBM_INT_0_MASK" type="A3XX_INT0"/>
-       <reg32 offset="0x0064" name="RBBM_INT_0_STATUS" type="A3XX_INT0"/>
-       <reg32 offset="0x0080" name="RBBM_PERFCTR_CTL">
-               <bitfield name="ENABLE" pos="0" type="boolean"/>
-       </reg32>
-       <reg32 offset="0x0081" name="RBBM_PERFCTR_LOAD_CMD0"/>
-       <reg32 offset="0x0082" name="RBBM_PERFCTR_LOAD_CMD1"/>
-       <reg32 offset="0x0084" name="RBBM_PERFCTR_LOAD_VALUE_LO"/>
-       <reg32 offset="0x0085" name="RBBM_PERFCTR_LOAD_VALUE_HI"/>
-       <reg32 offset="0x0086" name="RBBM_PERFCOUNTER0_SELECT" type="a3xx_rbbm_perfcounter_select"/>
-       <reg32 offset="0x0087" name="RBBM_PERFCOUNTER1_SELECT" type="a3xx_rbbm_perfcounter_select"/>
-       <reg32 offset="0x0088" name="RBBM_GPU_BUSY_MASKED"/>
-       <reg32 offset="0x0090" name="RBBM_PERFCTR_CP_0_LO"/>
-       <reg32 offset="0x0091" name="RBBM_PERFCTR_CP_0_HI"/>
-       <reg32 offset="0x0092" name="RBBM_PERFCTR_RBBM_0_LO"/>
-       <reg32 offset="0x0093" name="RBBM_PERFCTR_RBBM_0_HI"/>
-       <reg32 offset="0x0094" name="RBBM_PERFCTR_RBBM_1_LO"/>
-       <reg32 offset="0x0095" name="RBBM_PERFCTR_RBBM_1_HI"/>
-       <reg32 offset="0x0096" name="RBBM_PERFCTR_PC_0_LO"/>
-       <reg32 offset="0x0097" name="RBBM_PERFCTR_PC_0_HI"/>
-       <reg32 offset="0x0098" name="RBBM_PERFCTR_PC_1_LO"/>
-       <reg32 offset="0x0099" name="RBBM_PERFCTR_PC_1_HI"/>
-       <reg32 offset="0x009a" name="RBBM_PERFCTR_PC_2_LO"/>
-       <reg32 offset="0x009b" name="RBBM_PERFCTR_PC_2_HI"/>
-       <reg32 offset="0x009c" name="RBBM_PERFCTR_PC_3_LO"/>
-       <reg32 offset="0x009d" name="RBBM_PERFCTR_PC_3_HI"/>
-       <reg32 offset="0x009e" name="RBBM_PERFCTR_VFD_0_LO"/>
-       <reg32 offset="0x009f" name="RBBM_PERFCTR_VFD_0_HI"/>
-       <reg32 offset="0x00a0" name="RBBM_PERFCTR_VFD_1_LO"/>
-       <reg32 offset="0x00a1" name="RBBM_PERFCTR_VFD_1_HI"/>
-       <reg32 offset="0x00a2" name="RBBM_PERFCTR_HLSQ_0_LO"/>
-       <reg32 offset="0x00a3" name="RBBM_PERFCTR_HLSQ_0_HI"/>
-       <reg32 offset="0x00a4" name="RBBM_PERFCTR_HLSQ_1_LO"/>
-       <reg32 offset="0x00a5" name="RBBM_PERFCTR_HLSQ_1_HI"/>
-       <reg32 offset="0x00a6" name="RBBM_PERFCTR_HLSQ_2_LO"/>
-       <reg32 offset="0x00a7" name="RBBM_PERFCTR_HLSQ_2_HI"/>
-       <reg32 offset="0x00a8" name="RBBM_PERFCTR_HLSQ_3_LO"/>
-       <reg32 offset="0x00a9" name="RBBM_PERFCTR_HLSQ_3_HI"/>
-       <reg32 offset="0x00aa" name="RBBM_PERFCTR_HLSQ_4_LO"/>
-       <reg32 offset="0x00ab" name="RBBM_PERFCTR_HLSQ_4_HI"/>
-       <reg32 offset="0x00ac" name="RBBM_PERFCTR_HLSQ_5_LO"/>
-       <reg32 offset="0x00ad" name="RBBM_PERFCTR_HLSQ_5_HI"/>
-       <reg32 offset="0x00ae" name="RBBM_PERFCTR_VPC_0_LO"/>
-       <reg32 offset="0x00af" name="RBBM_PERFCTR_VPC_0_HI"/>
-       <reg32 offset="0x00b0" name="RBBM_PERFCTR_VPC_1_LO"/>
-       <reg32 offset="0x00b1" name="RBBM_PERFCTR_VPC_1_HI"/>
-       <reg32 offset="0x00b2" name="RBBM_PERFCTR_TSE_0_LO"/>
-       <reg32 offset="0x00b3" name="RBBM_PERFCTR_TSE_0_HI"/>
-       <reg32 offset="0x00b4" name="RBBM_PERFCTR_TSE_1_LO"/>
-       <reg32 offset="0x00b5" name="RBBM_PERFCTR_TSE_1_HI"/>
-       <reg32 offset="0x00b6" name="RBBM_PERFCTR_RAS_0_LO"/>
-       <reg32 offset="0x00b7" name="RBBM_PERFCTR_RAS_0_HI"/>
-       <reg32 offset="0x00b8" name="RBBM_PERFCTR_RAS_1_LO"/>
-       <reg32 offset="0x00b9" name="RBBM_PERFCTR_RAS_1_HI"/>
-       <reg32 offset="0x00ba" name="RBBM_PERFCTR_UCHE_0_LO"/>
-       <reg32 offset="0x00bb" name="RBBM_PERFCTR_UCHE_0_HI"/>
-       <reg32 offset="0x00bc" name="RBBM_PERFCTR_UCHE_1_LO"/>
-       <reg32 offset="0x00bd" name="RBBM_PERFCTR_UCHE_1_HI"/>
-       <reg32 offset="0x00be" name="RBBM_PERFCTR_UCHE_2_LO"/>
-       <reg32 offset="0x00bf" name="RBBM_PERFCTR_UCHE_2_HI"/>
-       <reg32 offset="0x00c0" name="RBBM_PERFCTR_UCHE_3_LO"/>
-       <reg32 offset="0x00c1" name="RBBM_PERFCTR_UCHE_3_HI"/>
-       <reg32 offset="0x00c2" name="RBBM_PERFCTR_UCHE_4_LO"/>
-       <reg32 offset="0x00c3" name="RBBM_PERFCTR_UCHE_4_HI"/>
-       <reg32 offset="0x00c4" name="RBBM_PERFCTR_UCHE_5_LO"/>
-       <reg32 offset="0x00c5" name="RBBM_PERFCTR_UCHE_5_HI"/>
-       <reg32 offset="0x00c6" name="RBBM_PERFCTR_TP_0_LO"/>
-       <reg32 offset="0x00c7" name="RBBM_PERFCTR_TP_0_HI"/>
-       <reg32 offset="0x00c8" name="RBBM_PERFCTR_TP_1_LO"/>
-       <reg32 offset="0x00c9" name="RBBM_PERFCTR_TP_1_HI"/>
-       <reg32 offset="0x00ca" name="RBBM_PERFCTR_TP_2_LO"/>
-       <reg32 offset="0x00cb" name="RBBM_PERFCTR_TP_2_HI"/>
-       <reg32 offset="0x00cc" name="RBBM_PERFCTR_TP_3_LO"/>
-       <reg32 offset="0x00cd" name="RBBM_PERFCTR_TP_3_HI"/>
-       <reg32 offset="0x00ce" name="RBBM_PERFCTR_TP_4_LO"/>
-       <reg32 offset="0x00cf" name="RBBM_PERFCTR_TP_4_HI"/>
-       <reg32 offset="0x00d0" name="RBBM_PERFCTR_TP_5_LO"/>
-       <reg32 offset="0x00d1" name="RBBM_PERFCTR_TP_5_HI"/>
-       <reg32 offset="0x00d2" name="RBBM_PERFCTR_SP_0_LO"/>
-       <reg32 offset="0x00d3" name="RBBM_PERFCTR_SP_0_HI"/>
-       <reg32 offset="0x00d4" name="RBBM_PERFCTR_SP_1_LO"/>
-       <reg32 offset="0x00d5" name="RBBM_PERFCTR_SP_1_HI"/>
-       <reg32 offset="0x00d6" name="RBBM_PERFCTR_SP_2_LO"/>
-       <reg32 offset="0x00d7" name="RBBM_PERFCTR_SP_2_HI"/>
-       <reg32 offset="0x00d8" name="RBBM_PERFCTR_SP_3_LO"/>
-       <reg32 offset="0x00d9" name="RBBM_PERFCTR_SP_3_HI"/>
-       <reg32 offset="0x00da" name="RBBM_PERFCTR_SP_4_LO"/>
-       <reg32 offset="0x00db" name="RBBM_PERFCTR_SP_4_HI"/>
-       <reg32 offset="0x00dc" name="RBBM_PERFCTR_SP_5_LO"/>
-       <reg32 offset="0x00dd" name="RBBM_PERFCTR_SP_5_HI"/>
-       <reg32 offset="0x00de" name="RBBM_PERFCTR_SP_6_LO"/>
-       <reg32 offset="0x00df" name="RBBM_PERFCTR_SP_6_HI"/>
-       <reg32 offset="0x00e0" name="RBBM_PERFCTR_SP_7_LO"/>
-       <reg32 offset="0x00e1" name="RBBM_PERFCTR_SP_7_HI"/>
-       <reg32 offset="0x00e2" name="RBBM_PERFCTR_RB_0_LO"/>
-       <reg32 offset="0x00e3" name="RBBM_PERFCTR_RB_0_HI"/>
-       <reg32 offset="0x00e4" name="RBBM_PERFCTR_RB_1_LO"/>
-       <reg32 offset="0x00e5" name="RBBM_PERFCTR_RB_1_HI"/>
-       <reg32 offset="0x00ea" name="RBBM_PERFCTR_PWR_0_LO"/>
-       <reg32 offset="0x00eb" name="RBBM_PERFCTR_PWR_0_HI"/>
-       <reg32 offset="0x00ec" name="RBBM_PERFCTR_PWR_1_LO"/>
-       <reg32 offset="0x00ed" name="RBBM_PERFCTR_PWR_1_HI"/>
-       <reg32 offset="0x0100" name="RBBM_RBBM_CTL"/>
-       <reg32 offset="0x0111" name="RBBM_DEBUG_BUS_CTL"/>
-       <reg32 offset="0x0112" name="RBBM_DEBUG_BUS_DATA_STATUS"/>
-
-       <!-- CP registers -->
-       <reg32 offset="0x01c9" name="CP_PFP_UCODE_ADDR"/>
-       <reg32 offset="0x01ca" name="CP_PFP_UCODE_DATA"/>
-       <reg32 offset="0x01cc" name="CP_ROQ_ADDR"/>
-       <reg32 offset="0x01cd" name="CP_ROQ_DATA"/>
-       <reg32 offset="0x01d1" name="CP_MERCIU_ADDR"/>
-       <reg32 offset="0x01d2" name="CP_MERCIU_DATA"/>
-       <reg32 offset="0x01d3" name="CP_MERCIU_DATA2"/>
-       <!-- see a3xx_snapshot_cp_meq().. looks like the way to dump queue between pfp and pm4 -->
-       <reg32 offset="0x01da" name="CP_MEQ_ADDR"/>
-       <reg32 offset="0x01db" name="CP_MEQ_DATA"/>
-       <reg32 offset="0x01f5" name="CP_WFI_PEND_CTR"/>
-       <reg32 offset="0x039d" name="RBBM_PM_OVERRIDE2"/>
-
-       <reg32 offset="0x0445" name="CP_PERFCOUNTER_SELECT" type="a3xx_cp_perfcounter_select"/>
-       <reg32 offset="0x045c" name="CP_HW_FAULT"/>
-       <reg32 offset="0x045e" name="CP_PROTECT_CTRL"/>
-       <reg32 offset="0x045f" name="CP_PROTECT_STATUS"/>
-       <array offset="0x0460" name="CP_PROTECT" stride="1" length="16">
-               <reg32 offset="0x0" name="REG"/>
-       </array>
-       <reg32 offset="0x054d" name="CP_AHB_FAULT"/>
-
-       <reg32 offset="0x0d00" name="SQ_GPR_MANAGEMENT"/>
-       <reg32 offset="0x0d02" name="SQ_INST_STORE_MANAGMENT"/>
-       <reg32 offset="0x0e1e" name="TP0_CHICKEN"/>
-
-       <!-- these I guess or either SP or HLSQ since related to shader core setup: -->
-       <reg32 offset="0x0e22" name="SP_GLOBAL_MEM_SIZE" type="uint">
-               <doc>
-                       The pair of MEM_SIZE/ADDR registers get programmed
-                       in sequence with the size/addr of each buffer.
-               </doc>
-       </reg32>
-       <reg32 offset="0x0e23" name="SP_GLOBAL_MEM_ADDR"/>
-
-       <!-- GRAS registers -->
-       <reg32 offset="0x2040" name="GRAS_CL_CLIP_CNTL">
-               <bitfield name="IJ_PERSP_CENTER" pos="12" type="boolean"/>
-               <bitfield name="IJ_NON_PERSP_CENTER" pos="13" type="boolean"/>
-               <bitfield name="IJ_PERSP_CENTROID" pos="14" type="boolean"/>
-               <bitfield name="IJ_NON_PERSP_CENTROID" pos="15" type="boolean"/>
-               <bitfield name="CLIP_DISABLE" pos="16" type="boolean"/>
-               <bitfield name="ZFAR_CLIP_DISABLE" pos="17" type="boolean"/>
-               <bitfield name="VP_CLIP_CODE_IGNORE" pos="19" type="boolean"/>
-               <bitfield name="VP_XFORM_DISABLE" pos="20" type="boolean"/>
-               <bitfield name="PERSP_DIVISION_DISABLE" pos="21" type="boolean"/>
-               <bitfield name="ZERO_GB_SCALE_Z" pos="22" type="boolean">
-                       <doc>aka clip_halfz</doc>
-               </bitfield>
-               <!-- set when gl_FragCoord.z is enabled in frag shader: -->
-               <bitfield name="ZCOORD" pos="23" type="boolean"/>
-               <bitfield name="WCOORD" pos="24" type="boolean"/>
-               <!-- set when frag shader writes z (so early z test disabled: -->
-               <bitfield name="ZCLIP_DISABLE" pos="25" type="boolean"/>
-               <bitfield name="NUM_USER_CLIP_PLANES" low="26" high="28" type="uint"/>
-       </reg32>
-       <reg32 offset="0x2044" name="GRAS_CL_GB_CLIP_ADJ">
-               <bitfield name="HORZ" low="0" high="9" type="uint"/>
-               <bitfield name="VERT" low="10" high="19" type="uint"/>
-       </reg32>
-       <reg32 offset="0x2048" name="GRAS_CL_VPORT_XOFFSET" type="float"/>
-       <reg32 offset="0x2049" name="GRAS_CL_VPORT_XSCALE" type="float"/>
-       <reg32 offset="0x204a" name="GRAS_CL_VPORT_YOFFSET" type="float"/>
-       <reg32 offset="0x204b" name="GRAS_CL_VPORT_YSCALE" type="float"/>
-       <reg32 offset="0x204c" name="GRAS_CL_VPORT_ZOFFSET" type="float"/>
-       <reg32 offset="0x204d" name="GRAS_CL_VPORT_ZSCALE" type="float"/>
-       <reg32 offset="0x2068" name="GRAS_SU_POINT_MINMAX">
-               <bitfield name="MIN" low="0" high="15" type="ufixed" radix="4"/>
-               <bitfield name="MAX" low="16" high="31" type="ufixed" radix="4"/>
-       </reg32>
-       <reg32 offset="0x2069" name="GRAS_SU_POINT_SIZE" type="fixed" radix="4"/>
-       <reg32 offset="0x206c" name="GRAS_SU_POLY_OFFSET_SCALE">
-               <bitfield name="VAL" low="0" high="23" type="fixed" radix="20"/>
-               <doc>range of -8.0 to 8.0</doc>
-       </reg32>
-       <reg32 offset="0x206d" name="GRAS_SU_POLY_OFFSET_OFFSET" radix="6" type="fixed">
-               <doc>range of -512.0 to 512.0</doc>
-       </reg32>
-       <reg32 offset="0x2070" name="GRAS_SU_MODE_CONTROL">
-               <bitfield name="CULL_FRONT" pos="0" type="boolean"/>
-               <bitfield name="CULL_BACK" pos="1" type="boolean"/>
-               <bitfield name="FRONT_CW" pos="2" type="boolean"/>
-               <bitfield name="LINEHALFWIDTH" low="3" high="10" radix="2" type="fixed"/>
-               <bitfield name="POLY_OFFSET" pos="11" type="boolean"/>
-       </reg32>
-       <reg32 offset="0x2072" name="GRAS_SC_CONTROL">
-               <!-- complete wild-ass-guess for sizes of these bitfields.. -->
-               <bitfield name="RENDER_MODE" low="4" high="7" type="a3xx_render_mode"/>
-               <bitfield name="MSAA_SAMPLES" low="8" high="11" type="a3xx_msaa_samples"/>
-               <bitfield name="RASTER_MODE" low="12" high="15"/>
-       </reg32>
-
-       <reg32 offset="0x2074" name="GRAS_SC_SCREEN_SCISSOR_TL" type="adreno_reg_xy"/>
-       <reg32 offset="0x2075" name="GRAS_SC_SCREEN_SCISSOR_BR" type="adreno_reg_xy"/>
-       <reg32 offset="0x2079" name="GRAS_SC_WINDOW_SCISSOR_TL" type="adreno_reg_xy"/>
-       <reg32 offset="0x207a" name="GRAS_SC_WINDOW_SCISSOR_BR" type="adreno_reg_xy"/>
-
-       <!-- RB registers -->
-       <reg32 offset="0x20c0" name="RB_MODE_CONTROL">
-               <!-- guess on the # of bits here.. -->
-               <bitfield name="GMEM_BYPASS" pos="7" type="boolean"/>
-               <doc>
-                       RENDER_MODE is RB_RESOLVE_PASS for gmem->mem, otherwise RB_RENDER_PASS
-               </doc>
-               <bitfield name="RENDER_MODE" low="8" high="10" type="a3xx_render_mode"/>
-               <bitfield name="MRT" low="12" high="13" type="uint">
-                       <doc>render targets - 1</doc>
-               </bitfield>
-               <bitfield name="MARB_CACHE_SPLIT_MODE" pos="15" type="boolean"/>
-               <bitfield name="PACKER_TIMER_ENABLE" pos="16" type="boolean"/>
-       </reg32>
-       <reg32 offset="0x20c1" name="RB_RENDER_CONTROL">
-               <bitfield name="DUAL_COLOR_IN_ENABLE" pos="0" type="boolean"/>
-               <bitfield name="YUV_IN_ENABLE" pos="1" type="boolean"/>
-               <bitfield name="COV_VALUE_INPUT_ENABLE" pos="2" type="boolean"/>
-               <!-- set when gl_FrontFacing is accessed in frag shader: -->
-               <bitfield name="FACENESS" pos="3" type="boolean"/>
-               <bitfield name="BIN_WIDTH" low="4" high="11" shr="5" type="uint"/>
-               <bitfield name="DISABLE_COLOR_PIPE" pos="12" type="boolean"/>
-               <!--
-                       ENABLE_GMEM not set on mem2gmem..  so possibly it is actually
-                       controlling blend or readback from GMEM??
-                -->
-               <bitfield name="ENABLE_GMEM" pos="13" type="boolean"/>
-               <bitfield name="COORD_MASK" low="14" high="17" type="hex"/>
-               <bitfield name="I_CLAMP_ENABLE" pos="19" type="boolean"/>
-               <bitfield name="COV_VALUE_OUTPUT_ENABLE" pos="20" type="boolean"/>
-               <bitfield name="ALPHA_TEST" pos="22" type="boolean"/>
-               <bitfield name="ALPHA_TEST_FUNC" low="24" high="26" type="adreno_compare_func"/>
-               <bitfield name="ALPHA_TO_COVERAGE" pos="30" type="boolean"/>
-               <bitfield name="ALPHA_TO_ONE" pos="31" type="boolean"/>
-       </reg32>
-       <reg32 offset="0x20c2" name="RB_MSAA_CONTROL">
-               <bitfield name="DISABLE" pos="10" type="boolean"/>
-               <bitfield name="SAMPLES" low="12" high="15" type="a3xx_msaa_samples"/>
-               <bitfield name="SAMPLE_MASK" low="16" high="31" type="hex"/>
-       </reg32>
-       <reg32 offset="0x20c3" name="RB_ALPHA_REF">
-               <bitfield name="UINT" low="8" high="15" type="hex"/>
-               <bitfield name="FLOAT" low="16" high="31" type="float"/>
-       </reg32>
-       <array offset="0x20c4" name="RB_MRT" stride="4" length="4">
-               <reg32 offset="0x0" name="CONTROL">
-                       <bitfield name="READ_DEST_ENABLE" pos="3" type="boolean"/>
-                       <!-- both these bits seem to get set when enabling GL_BLEND.. -->
-                       <bitfield name="BLEND" pos="4" type="boolean"/>
-                       <bitfield name="BLEND2" pos="5" type="boolean"/>
-                       <bitfield name="ROP_CODE" low="8" high="11" type="a3xx_rop_code"/>
-                       <bitfield name="DITHER_MODE" low="12" high="13" type="adreno_rb_dither_mode"/>
-                       <bitfield name="COMPONENT_ENABLE" low="24" high="27" type="hex"/>
-               </reg32>
-               <reg32 offset="0x1" name="BUF_INFO">
-                       <bitfield name="COLOR_FORMAT" low="0" high="5" type="a3xx_color_fmt"/>
-                       <bitfield name="COLOR_TILE_MODE" low="6" high="7" type="a3xx_tile_mode"/>
-                       <bitfield name="COLOR_SWAP" low="10" high="11" type="a3xx_color_swap"/>
-                       <bitfield name="COLOR_SRGB" pos="14" type="boolean"/>
-                       <doc>
-                               Pitch (actually, appears to be pitch in bytes, so really is a stride)
-                               in GMEM, so pitch of the current tile.
-                       </doc>
-                       <bitfield name="COLOR_BUF_PITCH" low="17" high="31" shr="5" type="uint"/>
-               </reg32>
-               <reg32 offset="0x2" name="BUF_BASE">
-                       <doc>offset into GMEM (or system memory address in bypass mode)</doc>
-                       <bitfield name="COLOR_BUF_BASE" low="4" high="31" shr="5" type="hex"/>
-               </reg32>
-               <reg32 offset="0x3" name="BLEND_CONTROL">
-                       <bitfield name="RGB_SRC_FACTOR" low="0" high="4" type="adreno_rb_blend_factor"/>
-                       <bitfield name="RGB_BLEND_OPCODE" low="5" high="7" type="a3xx_rb_blend_opcode"/>
-                       <bitfield name="RGB_DEST_FACTOR" low="8" high="12" type="adreno_rb_blend_factor"/>
-                       <bitfield name="ALPHA_SRC_FACTOR" low="16" high="20" type="adreno_rb_blend_factor"/>
-                       <bitfield name="ALPHA_BLEND_OPCODE" low="21" high="23" type="a3xx_rb_blend_opcode"/>
-                       <bitfield name="ALPHA_DEST_FACTOR" low="24" high="28" type="adreno_rb_blend_factor"/>
-                       <bitfield name="CLAMP_ENABLE" pos="29" type="boolean"/>
-               </reg32>
-       </array>
-
-       <reg32 offset="0x20e4" name="RB_BLEND_RED">
-               <bitfield name="UINT" low="0" high="7" type="hex"/>
-               <bitfield name="FLOAT" low="16" high="31" type="float"/>
-       </reg32>
-       <reg32 offset="0x20e5" name="RB_BLEND_GREEN">
-               <bitfield name="UINT" low="0" high="7" type="hex"/>
-               <bitfield name="FLOAT" low="16" high="31" type="float"/>
-       </reg32>
-       <reg32 offset="0x20e6" name="RB_BLEND_BLUE">
-               <bitfield name="UINT" low="0" high="7" type="hex"/>
-               <bitfield name="FLOAT" low="16" high="31" type="float"/>
-       </reg32>
-       <reg32 offset="0x20e7" name="RB_BLEND_ALPHA">
-               <bitfield name="UINT" low="0" high="7" type="hex"/>
-               <bitfield name="FLOAT" low="16" high="31" type="float"/>
-       </reg32>
-
-       <reg32 offset="0x20e8" name="RB_CLEAR_COLOR_DW0"/>
-       <reg32 offset="0x20e9" name="RB_CLEAR_COLOR_DW1"/>
-       <reg32 offset="0x20ea" name="RB_CLEAR_COLOR_DW2"/>
-       <reg32 offset="0x20eb" name="RB_CLEAR_COLOR_DW3"/>
-       <reg32 offset="0x20ec" name="RB_COPY_CONTROL">
-               <!-- not sure # of bits -->
-               <bitfield name="MSAA_RESOLVE" low="0" high="1" type="a3xx_msaa_samples"/>
-               <bitfield name="DEPTHCLEAR" pos="3" type="boolean"/>
-               <bitfield name="MODE" low="4" high="6" type="adreno_rb_copy_control_mode"/>
-               <bitfield name="MSAA_SRGB_DOWNSAMPLE" pos="7" type="boolean"/>
-               <bitfield name="FASTCLEAR" low="8" high="11" type="hex"/>
-               <bitfield name="DEPTH32_RESOLVE" pos="12" type="boolean"/> <!-- enabled on a Z32F copy -->
-               <bitfield name="GMEM_BASE" low="14" high="31" shr="14" type="hex"/>
-       </reg32>
-       <reg32 offset="0x20ed" name="RB_COPY_DEST_BASE">
-               <bitfield name="BASE" low="4" high="31" shr="5" type="hex"/>
-       </reg32>
-       <reg32 offset="0x20ee" name="RB_COPY_DEST_PITCH">
-               <doc>actually, appears to be pitch in bytes, so really is a stride</doc>
-               <!-- not actually sure about max pitch... -->
-               <bitfield name="PITCH" low="0" high="31" shr="5" type="uint"/>
-       </reg32>
-       <reg32 offset="0x20ef" name="RB_COPY_DEST_INFO">
-               <bitfield name="TILE" low="0" high="1" type="a3xx_tile_mode"/>
-               <bitfield name="FORMAT" low="2" high="7" type="a3xx_color_fmt"/>
-               <bitfield name="SWAP" low="8" high="9" type="a3xx_color_swap"/>
-               <bitfield name="DITHER_MODE" low="10" high="11" type="adreno_rb_dither_mode"/>
-               <bitfield name="COMPONENT_ENABLE" low="14" high="17" type="hex"/>
-               <bitfield name="ENDIAN" low="18" high="20" type="adreno_rb_surface_endian"/>
-       </reg32>
-       <reg32 offset="0x2100" name="RB_DEPTH_CONTROL">
-               <!--
-                       guessing that this matches a2xx with the stencil fields
-                       moved out into RB_STENCIL_CONTROL?
-                -->
-               <bitfield name="FRAG_WRITES_Z" pos="0" type="boolean"/>
-               <bitfield name="Z_ENABLE" pos="1" type="boolean"/>
-               <bitfield name="Z_WRITE_ENABLE" pos="2" type="boolean"/>
-               <bitfield name="EARLY_Z_DISABLE" pos="3" type="boolean"/>
-               <bitfield name="ZFUNC" low="4" high="6" type="adreno_compare_func"/>
-               <bitfield name="Z_CLAMP_ENABLE" pos="7" type="boolean"/>
-               <doc>Z_TEST_ENABLE bit is set for zfunc other than GL_ALWAYS or GL_NEVER</doc>
-               <bitfield name="Z_TEST_ENABLE" pos="31" type="boolean"/>
-       </reg32>
-       <reg32 offset="0x2101" name="RB_DEPTH_CLEAR">
-               <doc>seems to be always set to 0x00000000</doc>
-       </reg32>
-       <reg32 offset="0x2102" name="RB_DEPTH_INFO">
-               <bitfield name="DEPTH_FORMAT" low="0" high="1" type="adreno_rb_depth_format"/>
-               <doc>
-                       DEPTH_BASE is offset in GMEM to depth/stencil buffer, ie
-                       bin_w * bin_h / 1024 (possible rounded up to multiple of
-                       something??  ie. 39 becomes 40, 78 becomes 80.. 75 becomes
-                       80.. so maybe it needs to be multiple of 8??
-               </doc>
-               <bitfield name="DEPTH_BASE" low="11" high="31" shr="12" type="hex"/>
-       </reg32>
-       <reg32 offset="0x2103" name="RB_DEPTH_PITCH" shr="3" type="uint">
-               <doc>
-                       Pitch of depth buffer or combined depth+stencil buffer
-                       in z24s8 cases.
-               </doc>
-       </reg32>
-       <reg32 offset="0x2104" name="RB_STENCIL_CONTROL">
-               <bitfield name="STENCIL_ENABLE" pos="0" type="boolean"/>
-               <bitfield name="STENCIL_ENABLE_BF" pos="1" type="boolean"/>
-               <!--
-                       set for stencil operations that require read from stencil
-                       buffer, but not for example for stencil clear (which does
-                       not require read).. so guessing this is analogous to
-                       READ_DEST_ENABLE for color buffer..
-                -->
-               <bitfield name="STENCIL_READ" pos="2" type="boolean"/>
-               <bitfield name="FUNC" low="8" high="10" type="adreno_compare_func"/>
-               <bitfield name="FAIL" low="11" high="13" type="adreno_stencil_op"/>
-               <bitfield name="ZPASS" low="14" high="16" type="adreno_stencil_op"/>
-               <bitfield name="ZFAIL" low="17" high="19" type="adreno_stencil_op"/>
-               <bitfield name="FUNC_BF" low="20" high="22" type="adreno_compare_func"/>
-               <bitfield name="FAIL_BF" low="23" high="25" type="adreno_stencil_op"/>
-               <bitfield name="ZPASS_BF" low="26" high="28" type="adreno_stencil_op"/>
-               <bitfield name="ZFAIL_BF" low="29" high="31" type="adreno_stencil_op"/>
-       </reg32>
-       <reg32 offset="0x2105" name="RB_STENCIL_CLEAR">
-               <doc>seems to be always set to 0x00000000</doc>
-       </reg32>
-       <reg32 offset="0x2106" name="RB_STENCIL_INFO">
-               <doc>Base address for stencil when not using interleaved depth/stencil</doc>
-               <bitfield name="STENCIL_BASE" low="11" high="31" shr="12" type="hex"/>
-       </reg32>
-       <reg32 offset="0x2107" name="RB_STENCIL_PITCH" shr="3" type="uint">
-               <doc>pitch of stencil buffer when not using interleaved depth/stencil</doc>
-       </reg32>
-       <reg32 offset="0x2108" name="RB_STENCILREFMASK" type="adreno_rb_stencilrefmask"/>
-       <reg32 offset="0x2109" name="RB_STENCILREFMASK_BF" type="adreno_rb_stencilrefmask"/>
-       <!-- VSC == visibility stream c?? -->
-       <reg32 offset="0x210c" name="RB_LRZ_VSC_CONTROL">
-               <doc>seems to be set to 0x00000002 during binning pass</doc>
-               <bitfield name="BINNING_ENABLE" pos="1" type="boolean"/>
-       </reg32>
-       <reg32 offset="0x210e" name="RB_WINDOW_OFFSET">
-               <doc>X/Y offset of current bin</doc>
-               <bitfield name="X" low="0" high="15" type="uint"/>
-               <bitfield name="Y" low="16" high="31" type="uint"/>
-       </reg32>
-       <reg32 offset="0x2110" name="RB_SAMPLE_COUNT_CONTROL">
-               <bitfield name="RESET" pos="0" type="boolean"/>
-               <bitfield name="COPY" pos="1" type="boolean"/>
-       </reg32>
-       <reg32 offset="0x2111" name="RB_SAMPLE_COUNT_ADDR"/>
-       <reg32 offset="0x2114" name="RB_Z_CLAMP_MIN"/>
-       <reg32 offset="0x2115" name="RB_Z_CLAMP_MAX"/>
-
-       <!-- PC registers -->
-       <reg32 offset="0x21e1" name="VGT_BIN_BASE">
-               <doc>
-                       seems to be where firmware writes BIN_DATA_ADDR from
-                       CP_SET_BIN_DATA packet..  probably should be called
-                       PC_BIN_BASE (just using name from yamato for now)
-               </doc>
-       </reg32>
-       <reg32 offset="0x21e2" name="VGT_BIN_SIZE">
-               <doc>probably should be PC_BIN_SIZE</doc>
-       </reg32>
-       <reg32 offset="0x21e4" name="PC_VSTREAM_CONTROL">
-               <doc>SIZE is current pipe width * height (in tiles)</doc>
-               <bitfield name="SIZE" low="16" high="21" type="uint"/>
-               <doc>
-                       N is some sort of slot # between 0..(SIZE-1).  In case
-                       multiple tiles use same pipe, each tile gets unique slot #
-               </doc>
-               <bitfield name="N" low="22" high="26" type="uint"/>
-       </reg32>
-       <reg32 offset="0x21ea" name="PC_VERTEX_REUSE_BLOCK_CNTL"/>
-       <reg32 offset="0x21ec" name="PC_PRIM_VTX_CNTL">
-               <doc>
-                       STRIDE_IN_VPC: ALIGN(next_outloc - 8, 4) / 4
-                       (but, in cases where you'd expect 1, the blob driver uses
-                       2, so possibly 0 (no varying) or minimum of 2)
-               </doc>
-               <bitfield name="STRIDE_IN_VPC" low="0" high="4" type="uint"/>
-               <bitfield name="POLYMODE_FRONT_PTYPE" low="5" high="7" type="adreno_pa_su_sc_draw"/>
-               <bitfield name="POLYMODE_BACK_PTYPE" low="8" high="10" type="adreno_pa_su_sc_draw"/>
-               <bitfield name="POLYMODE_ENABLE" pos="12" type="boolean"/>
-               <bitfield name="PRIMITIVE_RESTART" pos="20" type="boolean"/>
-               <bitfield name="PROVOKING_VTX_LAST" pos="25" type="boolean"/>
-               <!-- PSIZE bit set if gl_PointSize written: -->
-               <bitfield name="PSIZE" pos="26" type="boolean"/>
-       </reg32>
-       <reg32 offset="0x21ed" name="PC_RESTART_INDEX"/>
-
-       <!-- HLSQ registers -->
-       <bitset name="a3xx_hlsq_vs_fs_control_reg" inline="yes">
-               <bitfield name="CONSTLENGTH" low="0" high="9" type="uint"/>
-               <bitfield name="CONSTSTARTOFFSET" low="12" high="20" type="uint"/>
-               <bitfield name="INSTRLENGTH" low="24" high="31" type="uint"/>
-       </bitset>
-       <bitset name="a3xx_hlsq_const_vs_fs_presv_range_reg" inline="yes">
-               <!-- are these a3xx_regid?? -->
-               <bitfield name="STARTENTRY" low="0" high="8"/>
-               <bitfield name="ENDENTRY" low="16" high="24"/>
-       </bitset>
-
-       <reg32 offset="0x2200" name="HLSQ_CONTROL_0_REG">
-               <bitfield name="FSTHREADSIZE" low="4" high="5" type="a3xx_threadsize"/>
-               <bitfield name="FSSUPERTHREADENABLE" pos="6" type="boolean"/>
-               <bitfield name="COMPUTEMODE" pos="8" type="boolean"/>
-               <bitfield name="SPSHADERRESTART" pos="9" type="boolean"/>
-               <bitfield name="RESERVED2" pos="10" type="boolean"/>
-               <bitfield name="CYCLETIMEOUTLIMITVPC" low="12" high="23" type="uint"/>
-               <bitfield name="FSONLYTEX" pos="25" type="boolean"/>
-               <bitfield name="CHUNKDISABLE" pos="26" type="boolean"/>
-               <bitfield name="CONSTMODE" pos="27" type="uint"/>
-               <bitfield name="LAZYUPDATEDISABLE" pos="28" type="boolean"/>
-               <bitfield name="SPCONSTFULLUPDATE" pos="29" type="boolean"/>
-               <bitfield name="TPFULLUPDATE" pos="30" type="boolean"/>
-               <bitfield name="SINGLECONTEXT" pos="31" type="boolean"/>
-       </reg32>
-       <reg32 offset="0x2201" name="HLSQ_CONTROL_1_REG">
-               <bitfield name="VSTHREADSIZE" low="6" high="7" type="a3xx_threadsize"/>
-               <bitfield name="VSSUPERTHREADENABLE" pos="8" type="boolean"/>
-               <bitfield name="FRAGCOORDXYREGID" low="16" high="23" type="a3xx_regid"/>
-               <bitfield name="FRAGCOORDZWREGID" low="24" high="31" type="a3xx_regid"/>
-       </reg32>
-       <reg32 offset="0x2202" name="HLSQ_CONTROL_2_REG">
-               <bitfield name="FACENESSREGID" low="2" high="9" type="a3xx_regid"/>
-               <bitfield name="COVVALUEREGID" low="18" high="25" type="a3xx_regid"/>
-               <bitfield name="PRIMALLOCTHRESHOLD" low="26" high="31" type="uint"/>
-       </reg32>
-       <reg32 offset="0x2203" name="HLSQ_CONTROL_3_REG">
-               <bitfield name="IJPERSPCENTERREGID" low="0" high="7" type="a3xx_regid"/>
-               <bitfield name="IJNONPERSPCENTERREGID" low="8" high="15" type="a3xx_regid"/>
-               <bitfield name="IJPERSPCENTROIDREGID" low="16" high="23" type="a3xx_regid"/>
-               <bitfield name="IJNONPERSPCENTROIDREGID" low="24" high="31" type="a3xx_regid"/>
-       </reg32>
-       <reg32 offset="0x2204" name="HLSQ_VS_CONTROL_REG" type="a3xx_hlsq_vs_fs_control_reg"/>
-       <reg32 offset="0x2205" name="HLSQ_FS_CONTROL_REG" type="a3xx_hlsq_vs_fs_control_reg"/>
-       <reg32 offset="0x2206" name="HLSQ_CONST_VSPRESV_RANGE_REG" type="a3xx_hlsq_const_vs_fs_presv_range_reg"/>
-       <reg32 offset="0x2207" name="HLSQ_CONST_FSPRESV_RANGE_REG" type="a3xx_hlsq_const_vs_fs_presv_range_reg"/>
-       <reg32 offset="0x220a" name="HLSQ_CL_NDRANGE_0_REG">
-               <bitfield name="WORKDIM" low="0" high="1" type="uint"/>
-               <bitfield name="LOCALSIZE0" low="2" high="11" type="uint"/>
-               <bitfield name="LOCALSIZE1" low="12" high="21" type="uint"/>
-               <bitfield name="LOCALSIZE2" low="22" high="31" type="uint"/>
-       </reg32>
-       <array offset="0x220b" name="HLSQ_CL_GLOBAL_WORK" stride="2" length="3">
-               <doc>indexed by dimension</doc>
-               <reg32 offset="0" name="SIZE" type="uint"/>
-               <reg32 offset="1" name="OFFSET" type="uint"/>
-       </array>
-       <reg32 offset="0x2211" name="HLSQ_CL_CONTROL_0_REG"/>
-       <reg32 offset="0x2212" name="HLSQ_CL_CONTROL_1_REG"/>
-       <reg32 offset="0x2214" name="HLSQ_CL_KERNEL_CONST_REG"/>
-       <array offset="0x2215" name="HLSQ_CL_KERNEL_GROUP" stride="1" length="3">
-               <doc>indexed by dimension, global_size / local_size</doc>
-               <reg32 offset="0" name="RATIO" type="uint"/>
-       </array>
-       <reg32 offset="0x2216" name="HLSQ_CL_KERNEL_GROUP_Y_REG" type="uint"/>
-       <reg32 offset="0x2217" name="HLSQ_CL_KERNEL_GROUP_Z_REG" type="uint"/>
-       <reg32 offset="0x221a" name="HLSQ_CL_WG_OFFSET_REG"/>
-
-       <!-- VFD registers -->
-       <reg32 offset="0x2240" name="VFD_CONTROL_0">
-               <doc>
-                       TOTALATTRTOVS is # of attributes to vertex shader, in register
-                       slots (ie. vec4+vec3 -> 7)
-               </doc>
-               <bitfield name="TOTALATTRTOVS" low="0" high="17" type="uint"/>
-               <bitfield name="PACKETSIZE" low="18" high="21" type="uint"/>
-               <doc>STRMDECINSTRCNT is # of VFD_DECODE_INSTR registers valid</doc>
-               <bitfield name="STRMDECINSTRCNT" low="22" high="26" type="uint"/>
-               <doc>STRMFETCHINSTRCNT is # of VFD_FETCH_INSTR registers valid</doc>
-               <bitfield name="STRMFETCHINSTRCNT" low="27" high="31" type="uint"/>
-       </reg32>
-       <reg32 offset="0x2241" name="VFD_CONTROL_1">
-               <doc>MAXSTORAGE could be # of attributes/vbo's</doc>
-               <bitfield name="MAXSTORAGE" low="0" high="3" type="uint"/>
-               <bitfield name="MAXTHRESHOLD" low="4" high="7" type="uint"/>
-               <bitfield name="MINTHRESHOLD" low="8" high="11" type="uint"/>
-               <bitfield name="REGID4VTX" low="16" high="23" type="a3xx_regid"/>
-               <bitfield name="REGID4INST" low="24" high="31" type="a3xx_regid"/>
-       </reg32>
-       <reg32 offset="0x2242" name="VFD_INDEX_MIN" type="uint"/>
-       <reg32 offset="0x2243" name="VFD_INDEX_MAX" type="uint"/>
-       <reg32 offset="0x2244" name="VFD_INSTANCEID_OFFSET" type="uint"/>
-       <reg32 offset="0x2245" name="VFD_INDEX_OFFSET" type="uint"/>
-       <array offset="0x2246" name="VFD_FETCH" stride="2" length="16">
-               <reg32 offset="0x0" name="INSTR_0">
-                       <bitfield name="FETCHSIZE" low="0" high="6" type="uint"/>
-                       <bitfield name="BUFSTRIDE" low="7" high="15" type="uint"/>
-                       <bitfield name="INSTANCED" pos="16" type="boolean"/>
-                       <bitfield name="SWITCHNEXT" pos="17" type="boolean"/>
-                       <bitfield name="INDEXCODE" low="18" high="23" type="uint"/>
-                       <bitfield name="STEPRATE" low="24" high="31" type="uint"/>
-               </reg32>
-               <reg32 offset="0x1" name="INSTR_1"/>
-       </array>
-       <array offset="0x2266" name="VFD_DECODE" stride="1" length="16">
-               <reg32 offset="0x0" name="INSTR">
-                       <bitfield name="WRITEMASK" low="0" high="3" type="hex"/>
-                       <!-- not sure if this is a bit flag and another flag above it, or?? -->
-                       <bitfield name="CONSTFILL" pos="4" type="boolean"/>
-                       <bitfield name="FORMAT" low="6" high="11" type="a3xx_vtx_fmt"/>
-                       <bitfield name="REGID" low="12" high="19" type="a3xx_regid"/>
-                       <bitfield name="INT" pos="20" type="boolean"/>
-                       <doc>SHIFTCNT appears to be size, ie. FLOAT_32_32_32 is 12, and BYTE_8 is 1</doc>
-                       <bitfield name="SWAP" low="22" high="23" type="a3xx_color_swap"/>
-                       <bitfield name="SHIFTCNT" low="24" high="28" type="uint"/>
-                       <bitfield name="LASTCOMPVALID" pos="29" type="boolean"/>
-                       <bitfield name="SWITCHNEXT" pos="30" type="boolean"/>
-               </reg32>
-       </array>
-       <reg32 offset="0x227e" name="VFD_VS_THREADING_THRESHOLD">
-               <bitfield name="REGID_THRESHOLD" low="0" high="3" type="uint"/>
-               <!-- <bitfield name="RESERVED6" low="4" high="7" type="uint"/> -->
-               <bitfield name="REGID_VTXCNT" low="8" high="15" type="a3xx_regid"/>
-       </reg32>
-
-       <!-- VPC registers -->
-       <reg32 offset="0x2280" name="VPC_ATTR">
-               <bitfield name="TOTALATTR" low="0" high="8" type="uint"/>
-               <!-- PSIZE bit set if gl_PointSize written: -->
-               <bitfield name="PSIZE" pos="9" type="boolean"/>
-               <bitfield name="THRDASSIGN" low="12" high="27" type="uint"/>
-               <bitfield name="LMSIZE" low="28" high="31" type="uint"/>
-       </reg32>
-       <reg32 offset="0x2281" name="VPC_PACK">
-               <!-- these are always seem to be set to same as TOTALATTR -->
-               <bitfield name="NUMFPNONPOSVAR" low="8" high="15" type="uint"/>
-               <bitfield name="NUMNONPOSVSVAR" low="16" high="23" type="uint"/>
-       </reg32>
-       <!--
-               varying interpolate mode.  One field per scalar/component
-               (since varying slots are scalar, so things don't have to
-               be aligned to vec4).
-               4 regs * 16 scalar components each => 16 vec4
-        -->
-       <array offset="0x2282" name="VPC_VARYING_INTERP" stride="1" length="4">
-               <reg32 offset="0x0" name="MODE">
-                       <bitfield name="C0" low="0"  high="1"  type="a3xx_intp_mode"/>
-                       <bitfield name="C1" low="2"  high="3"  type="a3xx_intp_mode"/>
-                       <bitfield name="C2" low="4"  high="5"  type="a3xx_intp_mode"/>
-                       <bitfield name="C3" low="6"  high="7"  type="a3xx_intp_mode"/>
-                       <bitfield name="C4" low="8"  high="9"  type="a3xx_intp_mode"/>
-                       <bitfield name="C5" low="10" high="11" type="a3xx_intp_mode"/>
-                       <bitfield name="C6" low="12" high="13" type="a3xx_intp_mode"/>
-                       <bitfield name="C7" low="14" high="15" type="a3xx_intp_mode"/>
-                       <bitfield name="C8" low="16" high="17" type="a3xx_intp_mode"/>
-                       <bitfield name="C9" low="18" high="19" type="a3xx_intp_mode"/>
-                       <bitfield name="CA" low="20" high="21" type="a3xx_intp_mode"/>
-                       <bitfield name="CB" low="22" high="23" type="a3xx_intp_mode"/>
-                       <bitfield name="CC" low="24" high="25" type="a3xx_intp_mode"/>
-                       <bitfield name="CD" low="26" high="27" type="a3xx_intp_mode"/>
-                       <bitfield name="CE" low="28" high="29" type="a3xx_intp_mode"/>
-                       <bitfield name="CF" low="30" high="31" type="a3xx_intp_mode"/>
-               </reg32>
-       </array>
-       <array offset="0x2286" name="VPC_VARYING_PS_REPL" stride="1" length="4">
-               <reg32 offset="0x0" name="MODE">
-                       <bitfield name="C0" low="0"  high="1"  type="a3xx_repl_mode"/>
-                       <bitfield name="C1" low="2"  high="3"  type="a3xx_repl_mode"/>
-                       <bitfield name="C2" low="4"  high="5"  type="a3xx_repl_mode"/>
-                       <bitfield name="C3" low="6"  high="7"  type="a3xx_repl_mode"/>
-                       <bitfield name="C4" low="8"  high="9"  type="a3xx_repl_mode"/>
-                       <bitfield name="C5" low="10" high="11" type="a3xx_repl_mode"/>
-                       <bitfield name="C6" low="12" high="13" type="a3xx_repl_mode"/>
-                       <bitfield name="C7" low="14" high="15" type="a3xx_repl_mode"/>
-                       <bitfield name="C8" low="16" high="17" type="a3xx_repl_mode"/>
-                       <bitfield name="C9" low="18" high="19" type="a3xx_repl_mode"/>
-                       <bitfield name="CA" low="20" high="21" type="a3xx_repl_mode"/>
-                       <bitfield name="CB" low="22" high="23" type="a3xx_repl_mode"/>
-                       <bitfield name="CC" low="24" high="25" type="a3xx_repl_mode"/>
-                       <bitfield name="CD" low="26" high="27" type="a3xx_repl_mode"/>
-                       <bitfield name="CE" low="28" high="29" type="a3xx_repl_mode"/>
-                       <bitfield name="CF" low="30" high="31" type="a3xx_repl_mode"/>
-               </reg32>
-       </array>
-       <reg32 offset="0x228a" name="VPC_VARY_CYLWRAP_ENABLE_0"/>
-       <reg32 offset="0x228b" name="VPC_VARY_CYLWRAP_ENABLE_1"/>
-
-       <!-- SP registers -->
-       <bitset name="a3xx_vs_fs_length_reg" inline="yes">
-               <bitfield name="SHADERLENGTH" low="0" high="31" type="uint"/>
-       </bitset>
-
-       <bitset name="sp_vs_fs_obj_offset_reg" inline="yes">
-               <bitfield name="FIRSTEXECINSTROFFSET" low="0" high="15" type="uint"/>
-               <doc>
-                       From register spec:
-                       SP_FS_OBJ_OFFSET_REG.CONSTOBJECTSTARTOFFSET [16:24]: Constant object
-                       start offset in on chip RAM,
-                       128bit aligned
-               </doc>
-               <bitfield name="CONSTOBJECTOFFSET" low="16" high="24" type="uint"/>
-               <bitfield name="SHADEROBJOFFSET" low="25" high="31" type="uint"/>
-       </bitset>
-
-       <reg32 offset="0x22c0" name="SP_SP_CTRL_REG">
-               <!-- this bit is set during resolve pass: -->
-               <bitfield name="RESOLVE" pos="16" type="boolean"/>
-               <bitfield name="CONSTMODE" pos="18" type="uint"/>
-               <bitfield name="BINNING" pos="19" type="boolean"/>
-               <bitfield name="SLEEPMODE" low="20" high="21" type="uint"/>
-               <!-- L0MODE==1 when oxiliForceSpL0ModeBuffer=1 -->
-               <bitfield name="L0MODE" low="22" high="23" type="uint"/>
-       </reg32>
-       <reg32 offset="0x22c4" name="SP_VS_CTRL_REG0">
-               <bitfield name="THREADMODE" pos="0" type="a3xx_threadmode"/>
-               <bitfield name="INSTRBUFFERMODE" pos="1" type="a3xx_instrbuffermode"/>
-               <!-- maybe CACHEINVALID is two bits?? -->
-               <bitfield name="CACHEINVALID" pos="2" type="boolean"/>
-               <bitfield name="ALUSCHMODE" pos="3" type="boolean"/>
-               <doc>
-                       The full/half register footprint is in units of four components,
-                       so if r0.x is used, that counts as all of r0.[xyzw] as used.
-                       There are separate full/half register footprint values as the
-                       full and half registers are independent (not overlapping).
-                       Presumably the thread scheduler hardware allocates the full/half
-                       register names from the actual physical register file and
-                       handles the register renaming.
-               </doc>
-               <bitfield name="HALFREGFOOTPRINT" low="4" high="9" type="uint"/>
-               <bitfield name="FULLREGFOOTPRINT" low="10" high="15" type="uint"/>
-               <bitfield name="THREADSIZE" pos="20" type="a3xx_threadsize"/>
-               <bitfield name="SUPERTHREADMODE" pos="21" type="boolean"/>
-               <doc>
-                       From regspec:
-                       SP_FS_CTRL_REG0.FS_LENGTH [31:24]: FS length, unit = 256bits.
-                       If bit31 is 1, it means overflow
-                       or any long shader.
-               </doc>
-               <bitfield name="LENGTH" low="24" high="31" type="uint"/>
-       </reg32>
-       <reg32 offset="0x22c5" name="SP_VS_CTRL_REG1">
-               <bitfield name="CONSTLENGTH" low="0" high="9" type="uint"/>
-               <!--
-                       not sure about full vs half const.. I can't get blob generate
-                       something with a mediump/lowp uniform.
-                -->
-               <bitfield name="CONSTFOOTPRINT" low="10" high="19" type="uint"/>
-               <bitfield name="INITIALOUTSTANDING" low="24" high="30" type="uint"/>
-       </reg32>
-       <reg32 offset="0x22c6" name="SP_VS_PARAM_REG">
-               <bitfield name="POSREGID" low="0" high="7" type="a3xx_regid"/>
-               <bitfield name="PSIZEREGID" low="8" high="15" type="a3xx_regid"/>
-               <bitfield name="POS2DMODE" pos="16" type="boolean"/>
-               <bitfield name="TOTALVSOUTVAR" low="20" high="24" type="uint"/>
-       </reg32>
-       <array offset="0x22c7" name="SP_VS_OUT" stride="1" length="8">
-               <reg32 offset="0x0" name="REG">
-                       <bitfield name="A_REGID" low="0" high="7" type="a3xx_regid"/>
-                       <bitfield name="A_HALF" pos="8" type="boolean"/>
-                       <bitfield name="A_COMPMASK" low="9" high="12" type="hex"/>
-                       <bitfield name="B_REGID" low="16" high="23" type="a3xx_regid"/>
-                       <bitfield name="B_HALF" pos="24" type="boolean"/>
-                       <bitfield name="B_COMPMASK" low="25" high="28" type="hex"/>
-               </reg32>
-       </array>
-       <array offset="0x22d0" name="SP_VS_VPC_DST" stride="1" length="4">
-               <reg32 offset="0x0" name="REG">
-                       <doc>
-                               These seem to be offsets for storage of the varyings.
-                               Always seems to start from 8, possibly loc 0 and 4
-                               are for gl_Position and gl_PointSize?
-                       </doc>
-                       <bitfield name="OUTLOC0" low="0" high="6" type="uint"/>
-                       <bitfield name="OUTLOC1" low="8" high="14" type="uint"/>
-                       <bitfield name="OUTLOC2" low="16" high="22" type="uint"/>
-                       <bitfield name="OUTLOC3" low="24" high="30" type="uint"/>
-               </reg32>
-       </array>
-       <reg32 offset="0x22d4" name="SP_VS_OBJ_OFFSET_REG" type="sp_vs_fs_obj_offset_reg"/>
-       <doc>
-               SP_VS_OBJ_START_REG contains pointer to the vertex shader program,
-               immediately followed by the binning shader program (although I
-               guess that is probably just re-using the same gpu buffer)
-       </doc>
-       <reg32 offset="0x22d5" name="SP_VS_OBJ_START_REG"/>
-       <reg32 offset="0x22d6" name="SP_VS_PVT_MEM_PARAM_REG">
-               <bitfield name="MEMSIZEPERITEM" low="0" high="7" type="uint"/>
-               <bitfield name="HWSTACKOFFSET" low="8" high="23" type="uint"/>
-               <bitfield name="HWSTACKSIZEPERTHREAD" low="24" high="31" type="uint"/>
-       </reg32>
-       <reg32 offset="0x22d7" name="SP_VS_PVT_MEM_ADDR_REG">
-               <bitfield name="BURSTLEN" low="0" high="4"/>
-               <bitfield name="SHADERSTARTADDRESS" shr="5" low="5" high="31"/>
-       </reg32>
-       <reg32 offset="0x22d8" name="SP_VS_PVT_MEM_SIZE_REG"/>
-       <reg32 offset="0x22df" name="SP_VS_LENGTH_REG" type="a3xx_vs_fs_length_reg"/>
-       <reg32 offset="0x22e0" name="SP_FS_CTRL_REG0">
-               <bitfield name="THREADMODE" pos="0" type="a3xx_threadmode"/>
-               <bitfield name="INSTRBUFFERMODE" pos="1" type="a3xx_instrbuffermode"/>
-               <!-- maybe CACHEINVALID is two bits?? -->
-               <bitfield name="CACHEINVALID" pos="2" type="boolean"/>
-               <bitfield name="ALUSCHMODE" pos="3" type="boolean"/>
-               <doc>
-                       The full/half register footprint is in units of four components,
-                       so if r0.x is used, that counts as all of r0.[xyzw] as used.
-                       There are separate full/half register footprint values as the
-                       full and half registers are independent (not overlapping).
-                       Presumably the thread scheduler hardware allocates the full/half
-                       register names from the actual physical register file and
-                       handles the register renaming.
-               </doc>
-               <bitfield name="HALFREGFOOTPRINT" low="4" high="9" type="uint"/>
-               <bitfield name="FULLREGFOOTPRINT" low="10" high="15" type="uint"/>
-               <bitfield name="FSBYPASSENABLE" pos="17" type="boolean"/>
-               <bitfield name="INOUTREGOVERLAP" pos="18" type="boolean"/>
-               <bitfield name="OUTORDERED" pos="19" type="boolean"/>
-               <bitfield name="THREADSIZE" pos="20" type="a3xx_threadsize"/>
-               <bitfield name="SUPERTHREADMODE" pos="21" type="boolean"/>
-               <bitfield name="PIXLODENABLE" pos="22" type="boolean"/>
-               <bitfield name="COMPUTEMODE" pos="23" type="boolean"/>
-               <doc>
-                       From regspec:
-                       SP_FS_CTRL_REG0.FS_LENGTH [31:24]: FS length, unit = 256bits.
-                       If bit31 is 1, it means overflow
-                       or any long shader.
-               </doc>
-               <bitfield name="LENGTH" low="24" high="31" type="uint"/>
-       </reg32>
-       <reg32 offset="0x22e1" name="SP_FS_CTRL_REG1">
-               <bitfield name="CONSTLENGTH" low="0" high="9" type="uint"/>
-               <bitfield name="CONSTFOOTPRINT" low="10" high="19" type="uint"/>
-               <bitfield name="INITIALOUTSTANDING" low="20" high="23" type="uint"/>
-               <bitfield name="HALFPRECVAROFFSET" low="24" high="30" type="uint"/>
-       </reg32>
-       <reg32 offset="0x22e2" name="SP_FS_OBJ_OFFSET_REG" type="sp_vs_fs_obj_offset_reg"/>
-       <doc>SP_FS_OBJ_START_REG contains pointer to fragment shader program</doc>
-       <reg32 offset="0x22e3" name="SP_FS_OBJ_START_REG"/>
-       <reg32 offset="0x22e4" name="SP_FS_PVT_MEM_PARAM_REG">
-               <bitfield name="MEMSIZEPERITEM" low="0" high="7" type="uint"/>
-               <bitfield name="HWSTACKOFFSET" low="8" high="23" type="uint"/>
-               <bitfield name="HWSTACKSIZEPERTHREAD" low="24" high="31" type="uint"/>
-       </reg32>
-       <reg32 offset="0x22e5" name="SP_FS_PVT_MEM_ADDR_REG">
-               <bitfield name="BURSTLEN" low="0" high="4"/>
-               <bitfield name="SHADERSTARTADDRESS" shr="5" low="5" high="31"/>
-       </reg32>
-       <reg32 offset="0x22e6" name="SP_FS_PVT_MEM_SIZE_REG"/>
-       <reg32 offset="0x22e8" name="SP_FS_FLAT_SHAD_MODE_REG_0">
-               <doc>seems to be one bit per scalar, '1' for flat, '0' for smooth</doc>
-       </reg32>
-       <reg32 offset="0x22e9" name="SP_FS_FLAT_SHAD_MODE_REG_1">
-               <doc>seems to be one bit per scalar, '1' for flat, '0' for smooth</doc>
-       </reg32>
-       <reg32 offset="0x22ec" name="SP_FS_OUTPUT_REG">
-               <bitfield name="MRT" low="0" high="1" type="uint">
-                       <doc>render targets - 1</doc>
-               </bitfield>
-               <bitfield name="DEPTH_ENABLE" pos="7" type="boolean"/>
-               <bitfield name="DEPTH_REGID" low="8" high="15" type="a3xx_regid"/>
-       </reg32>
-       <array offset="0x22f0" name="SP_FS_MRT" stride="1" length="4">
-               <reg32 offset="0x0" name="REG">
-                       <bitfield name="REGID" low="0" high="7" type="a3xx_regid"/>
-                       <bitfield name="HALF_PRECISION" pos="8" type="boolean"/>
-                       <bitfield name="SINT" pos="10" type="boolean"/>
-                       <bitfield name="UINT" pos="11" type="boolean"/>
-               </reg32>
-       </array>
-       <array offset="0x22f4" name="SP_FS_IMAGE_OUTPUT" stride="1" length="4">
-               <reg32 offset="0x0" name="REG">
-                       <bitfield name="MRTFORMAT" low="0" high="5" type="a3xx_color_fmt"/>
-               </reg32>
-       </array>
-       <reg32 offset="0x22ff" name="SP_FS_LENGTH_REG" type="a3xx_vs_fs_length_reg"/>
-
-       <reg32 offset="0x2301" name="PA_SC_AA_CONFIG"/>
-       <!-- TPL1 registers -->
-       <!-- assume VS/FS_TEX_OFFSET is same -->
-       <bitset name="a3xx_tpl1_tp_vs_fs_tex_offset" inline="yes">
-               <bitfield name="SAMPLEROFFSET" low="0" high="7" type="uint"/>
-               <bitfield name="MEMOBJOFFSET" low="8" high="15" type="uint"/>
-               <!-- not sure the size of this: -->
-               <bitfield name="BASETABLEPTR" low="16" high="31" type="uint"/>
-       </bitset>
-       <reg32 offset="0x2340" name="TPL1_TP_VS_TEX_OFFSET" type="a3xx_tpl1_tp_vs_fs_tex_offset"/>
-       <reg32 offset="0x2341" name="TPL1_TP_VS_BORDER_COLOR_BASE_ADDR"/>
-       <reg32 offset="0x2342" name="TPL1_TP_FS_TEX_OFFSET" type="a3xx_tpl1_tp_vs_fs_tex_offset"/>
-       <reg32 offset="0x2343" name="TPL1_TP_FS_BORDER_COLOR_BASE_ADDR"/>
-
-       <!-- VBIF registers -->
-       <reg32 offset="0x3001" name="VBIF_CLKON"/>
-       <reg32 offset="0x300c" name="VBIF_FIXED_SORT_EN"/>
-       <reg32 offset="0x300d" name="VBIF_FIXED_SORT_SEL0"/>
-       <reg32 offset="0x300e" name="VBIF_FIXED_SORT_SEL1"/>
-       <reg32 offset="0x301c" name="VBIF_ABIT_SORT"/>
-       <reg32 offset="0x301d" name="VBIF_ABIT_SORT_CONF"/>
-       <reg32 offset="0x302a" name="VBIF_GATE_OFF_WRREQ_EN"/>
-       <reg32 offset="0x302c" name="VBIF_IN_RD_LIM_CONF0"/>
-       <reg32 offset="0x302d" name="VBIF_IN_RD_LIM_CONF1"/>
-       <reg32 offset="0x3030" name="VBIF_IN_WR_LIM_CONF0"/>
-       <reg32 offset="0x3031" name="VBIF_IN_WR_LIM_CONF1"/>
-       <reg32 offset="0x3034" name="VBIF_OUT_RD_LIM_CONF0"/>
-       <reg32 offset="0x3035" name="VBIF_OUT_WR_LIM_CONF0"/>
-       <reg32 offset="0x3036" name="VBIF_DDR_OUT_MAX_BURST"/>
-       <reg32 offset="0x303c" name="VBIF_ARB_CTL"/>
-       <reg32 offset="0x3049" name="VBIF_ROUND_ROBIN_QOS_ARB"/>
-       <reg32 offset="0x3058" name="VBIF_OUT_AXI_AMEMTYPE_CONF0"/>
-       <reg32 offset="0x305e" name="VBIF_OUT_AXI_AOOO_EN"/>
-       <reg32 offset="0x305f" name="VBIF_OUT_AXI_AOOO"/>
-
-       <bitset name="a3xx_vbif_perf_cnt" inline="yes">
-               <bitfield name="CNT0" pos="0" type="boolean"/>
-               <bitfield name="CNT1" pos="1" type="boolean"/>
-               <bitfield name="PWRCNT0" pos="2" type="boolean"/>
-               <bitfield name="PWRCNT1" pos="3" type="boolean"/>
-               <bitfield name="PWRCNT2" pos="4" type="boolean"/>
-       </bitset>
-
-       <reg32 offset="0x3070" name="VBIF_PERF_CNT_EN" type="a3xx_vbif_perf_cnt"/>
-       <reg32 offset="0x3071" name="VBIF_PERF_CNT_CLR" type="a3xx_vbif_perf_cnt"/>
-       <reg32 offset="0x3072" name="VBIF_PERF_CNT_SEL"/>
-       <reg32 offset="0x3073" name="VBIF_PERF_CNT0_LO"/>
-       <reg32 offset="0x3074" name="VBIF_PERF_CNT0_HI"/>
-       <reg32 offset="0x3075" name="VBIF_PERF_CNT1_LO"/>
-       <reg32 offset="0x3076" name="VBIF_PERF_CNT1_HI"/>
-       <reg32 offset="0x3077" name="VBIF_PERF_PWR_CNT0_LO"/>
-       <reg32 offset="0x3078" name="VBIF_PERF_PWR_CNT0_HI"/>
-       <reg32 offset="0x3079" name="VBIF_PERF_PWR_CNT1_LO"/>
-       <reg32 offset="0x307a" name="VBIF_PERF_PWR_CNT1_HI"/>
-       <reg32 offset="0x307b" name="VBIF_PERF_PWR_CNT2_LO"/>
-       <reg32 offset="0x307c" name="VBIF_PERF_PWR_CNT2_HI"/>
-
-
-       <reg32 offset="0x0c01" name="VSC_BIN_SIZE">
-               <bitfield name="WIDTH" low="0" high="4" shr="5" type="uint"/>
-               <bitfield name="HEIGHT" low="5" high="9" shr="5" type="uint"/>
-       </reg32>
-
-       <reg32 offset="0x0c02" name="VSC_SIZE_ADDRESS"/>
-       <array offset="0x0c06" name="VSC_PIPE" stride="3" length="8">
-               <reg32 offset="0x0" name="CONFIG">
-                       <doc>
-                               Configures the mapping between VSC_PIPE buffer and
-                               bin, X/Y specify the bin index in the horiz/vert
-                               direction (0,0 is upper left, 0,1 is leftmost bin
-                               on second row, and so on).  W/H specify the number
-                               of bins assigned to this VSC_PIPE in the horiz/vert
-                               dimension.
-                       </doc>
-                       <bitfield name="X" low="0" high="9" type="uint"/>
-                       <bitfield name="Y" low="10" high="19" type="uint"/>
-                       <bitfield name="W" low="20" high="23" type="uint"/>
-                       <bitfield name="H" low="24" high="27" type="uint"/>
-               </reg32>
-               <reg32 offset="0x1" name="DATA_ADDRESS"/>
-               <reg32 offset="0x2" name="DATA_LENGTH"/>
-       </array>
-       <reg32 offset="0x0c3c" name="VSC_BIN_CONTROL">
-               <doc>seems to be set to 0x00000001 during binning pass</doc>
-               <bitfield name="BINNING_ENABLE" pos="0" type="boolean"/>
-       </reg32>
-       <reg32 offset="0x0c3d" name="UNKNOWN_0C3D">
-               <doc>seems to be always set to 0x00000001</doc>
-       </reg32>
-       <reg32 offset="0x0c48" name="PC_PERFCOUNTER0_SELECT" type="a3xx_pc_perfcounter_select"/>
-       <reg32 offset="0x0c49" name="PC_PERFCOUNTER1_SELECT" type="a3xx_pc_perfcounter_select"/>
-       <reg32 offset="0x0c4a" name="PC_PERFCOUNTER2_SELECT" type="a3xx_pc_perfcounter_select"/>
-       <reg32 offset="0x0c4b" name="PC_PERFCOUNTER3_SELECT" type="a3xx_pc_perfcounter_select"/>
-       <reg32 offset="0x0c81" name="GRAS_TSE_DEBUG_ECO">
-               <doc>seems to be always set to 0x00000001</doc>
-       </reg32>
-
-       <reg32 offset="0x0c88" name="GRAS_PERFCOUNTER0_SELECT" type="a3xx_gras_tse_perfcounter_select"/>
-       <reg32 offset="0x0c89" name="GRAS_PERFCOUNTER1_SELECT" type="a3xx_gras_tse_perfcounter_select"/>
-       <reg32 offset="0x0c8a" name="GRAS_PERFCOUNTER2_SELECT" type="a3xx_gras_ras_perfcounter_select"/>
-       <reg32 offset="0x0c8b" name="GRAS_PERFCOUNTER3_SELECT" type="a3xx_gras_ras_perfcounter_select"/>
-       <array offset="0x0ca0" name="GRAS_CL_USER_PLANE" stride="4" length="6">
-               <reg32 offset="0x0" name="X"/>
-               <reg32 offset="0x1" name="Y"/>
-               <reg32 offset="0x2" name="Z"/>
-               <reg32 offset="0x3" name="W"/>
-       </array>
-       <reg32 offset="0x0cc0" name="RB_GMEM_BASE_ADDR"/>
-       <reg32 offset="0x0cc1" name="RB_DEBUG_ECO_CONTROLS_ADDR"/>
-       <reg32 offset="0x0cc6" name="RB_PERFCOUNTER0_SELECT" type="a3xx_rb_perfcounter_select"/>
-       <reg32 offset="0x0cc7" name="RB_PERFCOUNTER1_SELECT" type="a3xx_rb_perfcounter_select"/>
-       <reg32 offset="0x0ce0" name="RB_FRAME_BUFFER_DIMENSION">
-               <bitfield name="WIDTH" low="0" high="13" type="uint"/>
-               <bitfield name="HEIGHT" low="14" high="27" type="uint"/>
-       </reg32>
-       <reg32 offset="0x0e00" name="HLSQ_PERFCOUNTER0_SELECT" type="a3xx_hlsq_perfcounter_select"/>
-       <reg32 offset="0x0e01" name="HLSQ_PERFCOUNTER1_SELECT" type="a3xx_hlsq_perfcounter_select"/>
-       <reg32 offset="0x0e02" name="HLSQ_PERFCOUNTER2_SELECT" type="a3xx_hlsq_perfcounter_select"/>
-       <reg32 offset="0x0e03" name="HLSQ_PERFCOUNTER3_SELECT" type="a3xx_hlsq_perfcounter_select"/>
-       <reg32 offset="0x0e04" name="HLSQ_PERFCOUNTER4_SELECT" type="a3xx_hlsq_perfcounter_select"/>
-       <reg32 offset="0x0e05" name="HLSQ_PERFCOUNTER5_SELECT" type="a3xx_hlsq_perfcounter_select"/>
-       <reg32 offset="0x0e43" name="UNKNOWN_0E43">
-               <doc>seems to be always set to 0x00000001</doc>
-       </reg32>
-       <reg32 offset="0x0e44" name="VFD_PERFCOUNTER0_SELECT" type="a3xx_vfd_perfcounter_select"/>
-       <reg32 offset="0x0e45" name="VFD_PERFCOUNTER1_SELECT" type="a3xx_vfd_perfcounter_select"/>
-       <reg32 offset="0x0e61" name="VPC_VPC_DEBUG_RAM_SEL"/>
-       <reg32 offset="0x0e62" name="VPC_VPC_DEBUG_RAM_READ"/>
-       <reg32 offset="0x0e64" name="VPC_PERFCOUNTER0_SELECT" type="a3xx_vpc_perfcounter_select"/>
-       <reg32 offset="0x0e65" name="VPC_PERFCOUNTER1_SELECT" type="a3xx_vpc_perfcounter_select"/>
-       <reg32 offset="0x0e82" name="UCHE_CACHE_MODE_CONTROL_REG"/>
-       <reg32 offset="0x0e84" name="UCHE_PERFCOUNTER0_SELECT" type="a3xx_uche_perfcounter_select"/>
-       <reg32 offset="0x0e85" name="UCHE_PERFCOUNTER1_SELECT" type="a3xx_uche_perfcounter_select"/>
-       <reg32 offset="0x0e86" name="UCHE_PERFCOUNTER2_SELECT" type="a3xx_uche_perfcounter_select"/>
-       <reg32 offset="0x0e87" name="UCHE_PERFCOUNTER3_SELECT" type="a3xx_uche_perfcounter_select"/>
-       <reg32 offset="0x0e88" name="UCHE_PERFCOUNTER4_SELECT" type="a3xx_uche_perfcounter_select"/>
-       <reg32 offset="0x0e89" name="UCHE_PERFCOUNTER5_SELECT" type="a3xx_uche_perfcounter_select"/>
-       <reg32 offset="0x0ea0" name="UCHE_CACHE_INVALIDATE0_REG">
-               <!-- might be shifted right by 5, assuming 32byte cache line size.. -->
-               <bitfield name="ADDR" low="0" high="27" type="hex"/>
-       </reg32>
-       <reg32 offset="0x0ea1" name="UCHE_CACHE_INVALIDATE1_REG">
-               <!-- might be shifted right by 5, assuming 32byte cache line size.. -->
-               <bitfield name="ADDR" low="0" high="27" type="hex"/>
-               <!-- I'd assume 2 bits, for FLUSH/INVALIDATE/CLEAN? -->
-               <bitfield name="OPCODE" low="28" high="29" type="a3xx_cache_opcode"/>
-               <bitfield name="ENTIRE_CACHE" pos="31" type="boolean"/>
-       </reg32>
-       <reg32 offset="0x0ea6" name="UNKNOWN_0EA6"/>
-       <reg32 offset="0x0ec4" name="SP_PERFCOUNTER0_SELECT" type="a3xx_sp_perfcounter_select"/>
-       <reg32 offset="0x0ec5" name="SP_PERFCOUNTER1_SELECT" type="a3xx_sp_perfcounter_select"/>
-       <reg32 offset="0x0ec6" name="SP_PERFCOUNTER2_SELECT" type="a3xx_sp_perfcounter_select"/>
-       <reg32 offset="0x0ec7" name="SP_PERFCOUNTER3_SELECT" type="a3xx_sp_perfcounter_select"/>
-       <reg32 offset="0x0ec8" name="SP_PERFCOUNTER4_SELECT" type="a3xx_sp_perfcounter_select"/>
-       <reg32 offset="0x0ec9" name="SP_PERFCOUNTER5_SELECT" type="a3xx_sp_perfcounter_select"/>
-       <reg32 offset="0x0eca" name="SP_PERFCOUNTER6_SELECT" type="a3xx_sp_perfcounter_select"/>
-       <reg32 offset="0x0ecb" name="SP_PERFCOUNTER7_SELECT" type="a3xx_sp_perfcounter_select"/>
-       <reg32 offset="0x0ee0" name="UNKNOWN_0EE0">
-               <doc>seems to be always set to 0x00000003</doc>
-       </reg32>
-       <reg32 offset="0x0f03" name="UNKNOWN_0F03">
-               <doc>seems to be always set to 0x00000001</doc>
-       </reg32>
-       <reg32 offset="0x0f04" name="TP_PERFCOUNTER0_SELECT" type="a3xx_tp_perfcounter_select"/>
-       <reg32 offset="0x0f05" name="TP_PERFCOUNTER1_SELECT" type="a3xx_tp_perfcounter_select"/>
-       <reg32 offset="0x0f06" name="TP_PERFCOUNTER2_SELECT" type="a3xx_tp_perfcounter_select"/>
-       <reg32 offset="0x0f07" name="TP_PERFCOUNTER3_SELECT" type="a3xx_tp_perfcounter_select"/>
-       <reg32 offset="0x0f08" name="TP_PERFCOUNTER4_SELECT" type="a3xx_tp_perfcounter_select"/>
-       <reg32 offset="0x0f09" name="TP_PERFCOUNTER5_SELECT" type="a3xx_tp_perfcounter_select"/>
-
-       <!-- this seems to be the register that CP_RUN_OPENCL writes: -->
-       <reg32 offset="0x21f0" name="VGT_CL_INITIATOR"/>
-
-       <!-- seems to be same as a2xx according to fwdump.. -->
-       <reg32 offset="0x21f9" name="VGT_EVENT_INITIATOR"/>
-       <reg32 offset="0x21fc" name="VGT_DRAW_INITIATOR" type="vgt_draw_initiator"/>
-       <reg32 offset="0x21fd" name="VGT_IMMED_DATA"/>
-</domain>
-
-<domain name="A3XX_TEX_SAMP" width="32">
-       <doc>Texture sampler dwords</doc>
-       <enum name="a3xx_tex_filter">
-               <value name="A3XX_TEX_NEAREST" value="0"/>
-               <value name="A3XX_TEX_LINEAR" value="1"/>
-               <value name="A3XX_TEX_ANISO" value="2"/>
-       </enum>
-       <enum name="a3xx_tex_clamp">
-               <value name="A3XX_TEX_REPEAT" value="0"/>
-               <value name="A3XX_TEX_CLAMP_TO_EDGE" value="1"/>
-               <value name="A3XX_TEX_MIRROR_REPEAT" value="2"/>
-               <value name="A3XX_TEX_CLAMP_TO_BORDER" value="3"/>
-               <value name="A3XX_TEX_MIRROR_CLAMP" value="4"/>
-       </enum>
-       <enum name="a3xx_tex_aniso">
-               <value name="A3XX_TEX_ANISO_1" value="0"/>
-               <value name="A3XX_TEX_ANISO_2" value="1"/>
-               <value name="A3XX_TEX_ANISO_4" value="2"/>
-               <value name="A3XX_TEX_ANISO_8" value="3"/>
-               <value name="A3XX_TEX_ANISO_16" value="4"/>
-       </enum>
-       <reg32 offset="0" name="0">
-               <bitfield name="CLAMPENABLE" pos="0" type="boolean"/>
-               <bitfield name="MIPFILTER_LINEAR" pos="1" type="boolean"/>
-               <bitfield name="XY_MAG" low="2" high="3" type="a3xx_tex_filter"/>
-               <bitfield name="XY_MIN" low="4" high="5" type="a3xx_tex_filter"/>
-               <bitfield name="WRAP_S" low="6" high="8" type="a3xx_tex_clamp"/>
-               <bitfield name="WRAP_T" low="9" high="11" type="a3xx_tex_clamp"/>
-               <bitfield name="WRAP_R" low="12" high="14" type="a3xx_tex_clamp"/>
-               <bitfield name="ANISO" low="15" high="17" type="a3xx_tex_aniso"/>
-               <bitfield name="COMPARE_FUNC" low="20" high="22" type="adreno_compare_func"/>
-               <bitfield name="CUBEMAPSEAMLESSFILTOFF" pos="24" type="boolean"/>
-               <!-- UNNORM_COORDS == CLK_NORMALIZED_COORDS_FALSE -->
-               <bitfield name="UNNORM_COORDS" pos="31" type="boolean"/>
-       </reg32>
-       <reg32 offset="1" name="1">
-               <bitfield name="LOD_BIAS" low="0" high="10" type="fixed" radix="6"/>
-               <bitfield name="MAX_LOD" low="12" high="21" type="ufixed" radix="6"/>
-               <bitfield name="MIN_LOD" low="22" high="31" type="ufixed" radix="6"/>
-       </reg32>
-</domain>
-
-<domain name="A3XX_TEX_CONST" width="32">
-       <doc>Texture constant dwords</doc>
-       <enum name="a3xx_tex_swiz">
-               <!-- same as a2xx? -->
-               <value name="A3XX_TEX_X" value="0"/>
-               <value name="A3XX_TEX_Y" value="1"/>
-               <value name="A3XX_TEX_Z" value="2"/>
-               <value name="A3XX_TEX_W" value="3"/>
-               <value name="A3XX_TEX_ZERO" value="4"/>
-               <value name="A3XX_TEX_ONE" value="5"/>
-       </enum>
-       <enum name="a3xx_tex_type">
-               <value name="A3XX_TEX_1D" value="0"/>
-               <value name="A3XX_TEX_2D" value="1"/>
-               <value name="A3XX_TEX_CUBE" value="2"/>
-               <value name="A3XX_TEX_3D" value="3"/>
-       </enum>
-       <enum name="a3xx_tex_msaa">
-               <value name="A3XX_TPL1_MSAA1X" value="0"/>
-               <value name="A3XX_TPL1_MSAA2X" value="1"/>
-               <value name="A3XX_TPL1_MSAA4X" value="2"/>
-               <value name="A3XX_TPL1_MSAA8X" value="3"/>
-       </enum>
-       <reg32 offset="0" name="0">
-               <bitfield name="TILE_MODE" low="0" high="1" type="a3xx_tile_mode"/>
-               <bitfield name="SRGB" pos="2" type="boolean"/>
-               <bitfield name="SWIZ_X" low="4" high="6" type="a3xx_tex_swiz"/>
-               <bitfield name="SWIZ_Y" low="7" high="9" type="a3xx_tex_swiz"/>
-               <bitfield name="SWIZ_Z" low="10" high="12" type="a3xx_tex_swiz"/>
-               <bitfield name="SWIZ_W" low="13" high="15" type="a3xx_tex_swiz"/>
-               <bitfield name="MIPLVLS" low="16" high="19" type="uint"/>
-               <bitfield name="MSAATEX" low="20" high="21" type="a3xx_tex_msaa"/>
-               <bitfield name="FMT" low="22" high="28" type="a3xx_tex_fmt"/>
-               <bitfield name="NOCONVERT" pos="29" type="boolean"/>
-               <bitfield name="TYPE" low="30" high="31" type="a3xx_tex_type"/>
-       </reg32>
-       <reg32 offset="1" name="1">
-               <bitfield name="HEIGHT" low="0" high="13" type="uint"/>
-               <bitfield name="WIDTH" low="14" high="27" type="uint"/>
-               <!-- minimum pitch (for mipmap levels): log2(pitchalign / 16) -->
-               <bitfield name="PITCHALIGN" low="28" high="31" type="uint"/>
-       </reg32>
-       <reg32 offset="2" name="2">
-               <doc>INDX is index of texture address(es) in MIPMAP state block</doc>
-               <bitfield name="INDX" low="0" high="8" type="uint"/>
-               <doc>Pitch in bytes (so actually stride)</doc>
-               <bitfield name="PITCH" low="12" high="29" type="uint"/>
-               <doc>SWAP bit is set for BGRA instead of RGBA</doc>
-               <bitfield name="SWAP" low="30" high="31" type="a3xx_color_swap"/>
-       </reg32>
-       <reg32 offset="3" name="3">
-               <!--
-               Update: the two LAYERSZn seem not to be the same thing.
-               According to Ilia's experimentation the first one goes up
-               to at *least* bit 14..
-                -->
-               <bitfield name="LAYERSZ1" low="0" high="16" shr="12" type="uint"/>
-               <bitfield name="DEPTH" low="17" high="27" type="uint"/>
-               <bitfield name="LAYERSZ2" low="28" high="31" shr="12" type="uint"/>
-       </reg32>
-</domain>
-
-</database>
diff --git a/src/freedreno/registers/a4xx.xml b/src/freedreno/registers/a4xx.xml
deleted file mode 100644 (file)
index b4c4253..0000000
+++ /dev/null
@@ -1,2390 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<database xmlns="http://nouveau.freedesktop.org/"
-xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-xsi:schemaLocation="http://nouveau.freedesktop.org/ rules-ng.xsd">
-<import file="freedreno_copyright.xml"/>
-<import file="adreno/adreno_common.xml"/>
-<import file="adreno/adreno_pm4.xml"/>
-
-<enum name="a4xx_color_fmt">
-       <value name="RB4_A8_UNORM" value="0x01"/>
-       <value name="RB4_R8_UNORM" value="0x02"/>
-       <value name="RB4_R8_SNORM" value="0x03"/>
-       <value name="RB4_R8_UINT" value="0x04"/>
-       <value name="RB4_R8_SINT" value="0x05"/>
-
-       <value name="RB4_R4G4B4A4_UNORM" value="0x08"/>
-       <value name="RB4_R5G5B5A1_UNORM" value="0x0a"/>
-       <value name="RB4_R5G6B5_UNORM" value="0x0e"/>
-       <value name="RB4_R8G8_UNORM" value="0x0f"/>
-       <value name="RB4_R8G8_SNORM" value="0x10"/>
-       <value name="RB4_R8G8_UINT" value="0x11"/>
-       <value name="RB4_R8G8_SINT" value="0x12"/>
-       <value name="RB4_R16_UNORM" value="0x13"/>
-       <value name="RB4_R16_SNORM" value="0x14"/>
-       <value name="RB4_R16_FLOAT" value="0x15"/>
-       <value name="RB4_R16_UINT" value="0x16"/>
-       <value name="RB4_R16_SINT" value="0x17"/>
-
-       <value name="RB4_R8G8B8_UNORM" value="0x19"/>
-
-       <value name="RB4_R8G8B8A8_UNORM" value="0x1a"/>
-       <value name="RB4_R8G8B8A8_SNORM" value="0x1c"/>
-       <value name="RB4_R8G8B8A8_UINT" value="0x1d"/>
-       <value name="RB4_R8G8B8A8_SINT" value="0x1e"/>
-       <value name="RB4_R10G10B10A2_UNORM" value="0x1f"/>
-       <value name="RB4_R10G10B10A2_UINT" value="0x22"/>
-       <value name="RB4_R11G11B10_FLOAT" value="0x27"/>
-       <value name="RB4_R16G16_UNORM" value="0x28"/>
-       <value name="RB4_R16G16_SNORM" value="0x29"/>
-       <value name="RB4_R16G16_FLOAT" value="0x2a"/>
-       <value name="RB4_R16G16_UINT" value="0x2b"/>
-       <value name="RB4_R16G16_SINT" value="0x2c"/>
-       <value name="RB4_R32_FLOAT" value="0x2d"/>
-       <value name="RB4_R32_UINT" value="0x2e"/>
-       <value name="RB4_R32_SINT" value="0x2f"/>
-
-       <value name="RB4_R16G16B16A16_UNORM" value="0x34"/>
-       <value name="RB4_R16G16B16A16_SNORM" value="0x35"/>
-       <value name="RB4_R16G16B16A16_FLOAT" value="0x36"/>
-       <value name="RB4_R16G16B16A16_UINT" value="0x37"/>
-       <value name="RB4_R16G16B16A16_SINT" value="0x38"/>
-       <value name="RB4_R32G32_FLOAT" value="0x39"/>
-       <value name="RB4_R32G32_UINT" value="0x3a"/>
-       <value name="RB4_R32G32_SINT" value="0x3b"/>
-
-       <value name="RB4_R32G32B32A32_FLOAT" value="0x3c"/>
-       <value name="RB4_R32G32B32A32_UINT" value="0x3d"/>
-       <value name="RB4_R32G32B32A32_SINT" value="0x3e"/>
-
-       <value name="RB4_NONE" value="0xff"/>
-</enum>
-
-<enum name="a4xx_tile_mode">
-       <value name="TILE4_LINEAR" value="0"/>
-       <value name="TILE4_2" value="2"/>
-       <value name="TILE4_3" value="3"/>
-</enum>
-
-<enum name="a4xx_vtx_fmt" prefix="chipset">
-       <!-- hmm, shifted one compared to a3xx?!?  -->
-       <value name="VFMT4_32_FLOAT" value="0x1"/>
-       <value name="VFMT4_32_32_FLOAT" value="0x2"/>
-       <value name="VFMT4_32_32_32_FLOAT" value="0x3"/>
-       <value name="VFMT4_32_32_32_32_FLOAT" value="0x4"/>
-
-       <value name="VFMT4_16_FLOAT" value="0x5"/>
-       <value name="VFMT4_16_16_FLOAT" value="0x6"/>
-       <value name="VFMT4_16_16_16_FLOAT" value="0x7"/>
-       <value name="VFMT4_16_16_16_16_FLOAT" value="0x8"/>
-
-       <value name="VFMT4_32_FIXED" value="0x9"/>
-       <value name="VFMT4_32_32_FIXED" value="0xa"/>
-       <value name="VFMT4_32_32_32_FIXED" value="0xb"/>
-       <value name="VFMT4_32_32_32_32_FIXED" value="0xc"/>
-
-       <value name="VFMT4_11_11_10_FLOAT" value="0xd"/>
-
-       <!-- beyond here it does not appear to be shifted -->
-       <value name="VFMT4_16_SINT" value="0x10"/>
-       <value name="VFMT4_16_16_SINT" value="0x11"/>
-       <value name="VFMT4_16_16_16_SINT" value="0x12"/>
-       <value name="VFMT4_16_16_16_16_SINT" value="0x13"/>
-       <value name="VFMT4_16_UINT" value="0x14"/>
-       <value name="VFMT4_16_16_UINT" value="0x15"/>
-       <value name="VFMT4_16_16_16_UINT" value="0x16"/>
-       <value name="VFMT4_16_16_16_16_UINT" value="0x17"/>
-       <value name="VFMT4_16_SNORM" value="0x18"/>
-       <value name="VFMT4_16_16_SNORM" value="0x19"/>
-       <value name="VFMT4_16_16_16_SNORM" value="0x1a"/>
-       <value name="VFMT4_16_16_16_16_SNORM" value="0x1b"/>
-       <value name="VFMT4_16_UNORM" value="0x1c"/>
-       <value name="VFMT4_16_16_UNORM" value="0x1d"/>
-       <value name="VFMT4_16_16_16_UNORM" value="0x1e"/>
-       <value name="VFMT4_16_16_16_16_UNORM" value="0x1f"/>
-
-       <value name="VFMT4_32_UINT" value="0x20"/>
-       <value name="VFMT4_32_32_UINT" value="0x21"/>
-       <value name="VFMT4_32_32_32_UINT" value="0x22"/>
-       <value name="VFMT4_32_32_32_32_UINT" value="0x23"/>
-       <value name="VFMT4_32_SINT" value="0x24"/>
-       <value name="VFMT4_32_32_SINT" value="0x25"/>
-       <value name="VFMT4_32_32_32_SINT" value="0x26"/>
-       <value name="VFMT4_32_32_32_32_SINT" value="0x27"/>
-
-       <value name="VFMT4_8_UINT" value="0x28"/>
-       <value name="VFMT4_8_8_UINT" value="0x29"/>
-       <value name="VFMT4_8_8_8_UINT" value="0x2a"/>
-       <value name="VFMT4_8_8_8_8_UINT" value="0x2b"/>
-       <value name="VFMT4_8_UNORM" value="0x2c"/>
-       <value name="VFMT4_8_8_UNORM" value="0x2d"/>
-       <value name="VFMT4_8_8_8_UNORM" value="0x2e"/>
-       <value name="VFMT4_8_8_8_8_UNORM" value="0x2f"/>
-       <value name="VFMT4_8_SINT" value="0x30"/>
-       <value name="VFMT4_8_8_SINT" value="0x31"/>
-       <value name="VFMT4_8_8_8_SINT" value="0x32"/>
-       <value name="VFMT4_8_8_8_8_SINT" value="0x33"/>
-       <value name="VFMT4_8_SNORM" value="0x34"/>
-       <value name="VFMT4_8_8_SNORM" value="0x35"/>
-       <value name="VFMT4_8_8_8_SNORM" value="0x36"/>
-       <value name="VFMT4_8_8_8_8_SNORM" value="0x37"/>
-
-       <value name="VFMT4_10_10_10_2_UINT" value="0x38"/>
-       <value name="VFMT4_10_10_10_2_UNORM" value="0x39"/>
-       <value name="VFMT4_10_10_10_2_SINT" value="0x3a"/>
-       <value name="VFMT4_10_10_10_2_SNORM" value="0x3b"/>
-       <value name="VFMT4_2_10_10_10_UINT" value="0x3c"/>
-       <value name="VFMT4_2_10_10_10_UNORM" value="0x3d"/>
-       <value name="VFMT4_2_10_10_10_SINT" value="0x3e"/>
-       <value name="VFMT4_2_10_10_10_SNORM" value="0x3f"/>
-
-       <value name="VFMT4_NONE" value="0xff"/>
-</enum>
-
-<enum name="a4xx_tex_fmt">
-       <!-- 0x00 .. 0x02 -->
-
-       <!-- 8-bit formats -->
-       <value name="TFMT4_A8_UNORM" value="0x03"/>
-       <value name="TFMT4_8_UNORM"  value="0x04"/>
-       <value name="TFMT4_8_SNORM"  value="0x05"/>
-       <value name="TFMT4_8_UINT"   value="0x06"/>
-       <value name="TFMT4_8_SINT"   value="0x07"/>
-
-       <!-- 16-bit formats -->
-       <value name="TFMT4_4_4_4_4_UNORM" value="0x08"/>
-       <value name="TFMT4_5_5_5_1_UNORM" value="0x09"/>
-       <!-- 0x0a -->
-       <value name="TFMT4_5_6_5_UNORM"   value="0x0b"/>
-
-       <!-- 0x0c -->
-
-       <value name="TFMT4_L8_A8_UNORM" value="0x0d"/>
-       <value name="TFMT4_8_8_UNORM"   value="0x0e"/>
-       <value name="TFMT4_8_8_SNORM"   value="0x0f"/>
-       <value name="TFMT4_8_8_UINT"    value="0x10"/>
-       <value name="TFMT4_8_8_SINT"    value="0x11"/>
-
-       <value name="TFMT4_16_UNORM" value="0x12"/>
-       <value name="TFMT4_16_SNORM" value="0x13"/>
-       <value name="TFMT4_16_FLOAT" value="0x14"/>
-       <value name="TFMT4_16_UINT"  value="0x15"/>
-       <value name="TFMT4_16_SINT"  value="0x16"/>
-
-       <!-- 0x17 .. 0x1b -->
-
-       <!-- 32-bit formats -->
-       <value name="TFMT4_8_8_8_8_UNORM" value="0x1c"/>
-       <value name="TFMT4_8_8_8_8_SNORM" value="0x1d"/>
-       <value name="TFMT4_8_8_8_8_UINT"  value="0x1e"/>
-       <value name="TFMT4_8_8_8_8_SINT"  value="0x1f"/>
-
-       <value name="TFMT4_9_9_9_E5_FLOAT"   value="0x20"/>
-       <value name="TFMT4_10_10_10_2_UNORM" value="0x21"/>
-       <value name="TFMT4_10_10_10_2_UINT"  value="0x22"/>
-       <!-- 0x23 .. 0x24 -->
-       <value name="TFMT4_11_11_10_FLOAT"   value="0x25"/>
-
-       <value name="TFMT4_16_16_UNORM" value="0x26"/>
-       <value name="TFMT4_16_16_SNORM" value="0x27"/>
-       <value name="TFMT4_16_16_FLOAT" value="0x28"/>
-       <value name="TFMT4_16_16_UINT"  value="0x29"/>
-       <value name="TFMT4_16_16_SINT"  value="0x2a"/>
-
-       <value name="TFMT4_32_FLOAT" value="0x2b"/>
-       <value name="TFMT4_32_UINT"  value="0x2c"/>
-       <value name="TFMT4_32_SINT"  value="0x2d"/>
-
-       <!-- 0x2e .. 0x32 -->
-
-       <!-- 64-bit formats -->
-       <value name="TFMT4_16_16_16_16_UNORM" value="0x33"/>
-       <value name="TFMT4_16_16_16_16_SNORM" value="0x34"/>
-       <value name="TFMT4_16_16_16_16_FLOAT" value="0x35"/>
-       <value name="TFMT4_16_16_16_16_UINT"  value="0x36"/>
-       <value name="TFMT4_16_16_16_16_SINT"  value="0x37"/>
-
-       <value name="TFMT4_32_32_FLOAT" value="0x38"/>
-       <value name="TFMT4_32_32_UINT"  value="0x39"/>
-       <value name="TFMT4_32_32_SINT"  value="0x3a"/>
-
-       <!-- 96-bit formats -->
-       <value name="TFMT4_32_32_32_FLOAT" value="0x3b"/>
-       <value name="TFMT4_32_32_32_UINT"  value="0x3c"/>
-       <value name="TFMT4_32_32_32_SINT"  value="0x3d"/>
-
-       <!-- 0x3e -->
-
-       <!-- 128-bit formats -->
-       <value name="TFMT4_32_32_32_32_FLOAT" value="0x3f"/>
-       <value name="TFMT4_32_32_32_32_UINT"  value="0x40"/>
-       <value name="TFMT4_32_32_32_32_SINT"  value="0x41"/>
-
-       <!-- 0x42 .. 0x46 -->
-       <value name="TFMT4_X8Z24_UNORM" value="0x47"/>
-       <!-- 0x48 .. 0x55 -->
-
-       <!-- compressed formats -->
-       <value name="TFMT4_DXT1"                  value="0x56"/>
-       <value name="TFMT4_DXT3"                  value="0x57"/>
-       <value name="TFMT4_DXT5"                  value="0x58"/>
-       <!-- 0x59 -->
-       <value name="TFMT4_RGTC1_UNORM"           value="0x5a"/>
-       <value name="TFMT4_RGTC1_SNORM"           value="0x5b"/>
-       <!-- 0x5c .. 0x5d -->
-       <value name="TFMT4_RGTC2_UNORM"           value="0x5e"/>
-       <value name="TFMT4_RGTC2_SNORM"           value="0x5f"/>
-       <!-- 0x60 -->
-       <value name="TFMT4_BPTC_UFLOAT"           value="0x61"/>
-       <value name="TFMT4_BPTC_FLOAT"            value="0x62"/>
-       <value name="TFMT4_BPTC"                  value="0x63"/>
-       <value name="TFMT4_ATC_RGB"               value="0x64"/>
-       <value name="TFMT4_ATC_RGBA_EXPLICIT"     value="0x65"/>
-       <value name="TFMT4_ATC_RGBA_INTERPOLATED" value="0x66"/>
-       <value name="TFMT4_ETC2_RG11_UNORM"       value="0x67"/>
-       <value name="TFMT4_ETC2_RG11_SNORM"       value="0x68"/>
-       <value name="TFMT4_ETC2_R11_UNORM"        value="0x69"/>
-       <value name="TFMT4_ETC2_R11_SNORM"        value="0x6a"/>
-       <value name="TFMT4_ETC1"                  value="0x6b"/>
-       <value name="TFMT4_ETC2_RGB8"             value="0x6c"/>
-       <value name="TFMT4_ETC2_RGBA8"            value="0x6d"/>
-       <value name="TFMT4_ETC2_RGB8A1"           value="0x6e"/>
-       <value name="TFMT4_ASTC_4x4"              value="0x6f"/>
-       <value name="TFMT4_ASTC_5x4"              value="0x70"/>
-       <value name="TFMT4_ASTC_5x5"              value="0x71"/>
-       <value name="TFMT4_ASTC_6x5"              value="0x72"/>
-       <value name="TFMT4_ASTC_6x6"              value="0x73"/>
-       <value name="TFMT4_ASTC_8x5"              value="0x74"/>
-       <value name="TFMT4_ASTC_8x6"              value="0x75"/>
-       <value name="TFMT4_ASTC_8x8"              value="0x76"/>
-       <value name="TFMT4_ASTC_10x5"             value="0x77"/>
-       <value name="TFMT4_ASTC_10x6"             value="0x78"/>
-       <value name="TFMT4_ASTC_10x8"             value="0x79"/>
-       <value name="TFMT4_ASTC_10x10"            value="0x7a"/>
-       <value name="TFMT4_ASTC_12x10"            value="0x7b"/>
-       <value name="TFMT4_ASTC_12x12"            value="0x7c"/>
-       <!-- 0x7d .. 0x7f -->
-
-       <value name="TFMT4_NONE"                  value="0xff"/>
-</enum>
-
-<enum name="a4xx_depth_format">
-       <value name="DEPTH4_NONE" value="0"/>
-       <value name="DEPTH4_16" value="1"/>
-       <value name="DEPTH4_24_8" value="2"/>
-       <value name="DEPTH4_32" value="3"/>
-</enum>
-
-<!--
-NOTE counters extracted from test-perf log with the following awful
-script:
-##################
-#!/bin/bash
-
-log=$1
-
-grep -F "counter
-countable
-group" $log | grep -v gl > shortlist.txt
-
-countable=""
-IFS=$'\n'; for line in $(cat shortlist.txt); do
-       # parse ######### group[$n]: $name
-       l=${line########### group}
-       if [ $l != $line ];  then
-               group=`echo $line | awk '{print $3}'`
-               echo "Group: $group"
-               continue
-       fi
-       # parse #########   counter[$n]: $name
-       l=${line###########   counter}
-       if [ $l != $line ]; then
-               countable=`echo $line | awk '{print $3}'`
-               #echo "  Countable: $countable"
-               continue
-       fi
-       # parse                 countable:
-       l=${line##              countable:}
-       if [ $l != $line ]; then
-               val=`echo $line | awk '{print $2}'`
-               echo "<value value=\"$val\" name=\"$countable\"/>"
-       fi
-
-done
-##################
- -->
-<enum name="a4xx_ccu_perfcounter_select">
-       <value value="0" name="CCU_BUSY_CYCLES"/>
-       <value value="2" name="CCU_RB_DEPTH_RETURN_STALL"/>
-       <value value="3" name="CCU_RB_COLOR_RETURN_STALL"/>
-       <value value="6" name="CCU_DEPTH_BLOCKS"/>
-       <value value="7" name="CCU_COLOR_BLOCKS"/>
-       <value value="8" name="CCU_DEPTH_BLOCK_HIT"/>
-       <value value="9" name="CCU_COLOR_BLOCK_HIT"/>
-       <value value="10" name="CCU_DEPTH_FLAG1_COUNT"/>
-       <value value="11" name="CCU_DEPTH_FLAG2_COUNT"/>
-       <value value="12" name="CCU_DEPTH_FLAG3_COUNT"/>
-       <value value="13" name="CCU_DEPTH_FLAG4_COUNT"/>
-       <value value="14" name="CCU_COLOR_FLAG1_COUNT"/>
-       <value value="15" name="CCU_COLOR_FLAG2_COUNT"/>
-       <value value="16" name="CCU_COLOR_FLAG3_COUNT"/>
-       <value value="17" name="CCU_COLOR_FLAG4_COUNT"/>
-       <value value="18" name="CCU_PARTIAL_BLOCK_READ"/>
-</enum>
-
-<!--
-NOTE other than CP_ALWAYS_COUNT (which is the only one we use so far),
-on a3xx the countable #'s from AMD_performance_monitor disagreed with
-TRM.  All these #'s for a4xx come from AMD_performance_monitor, so
-perhaps they should be taken with a grain of salt
--->
-<enum name="a4xx_cp_perfcounter_select">
-       <!-- first ctr at least seems same as a3xx, so we can measure freq -->
-       <value value="0" name="CP_ALWAYS_COUNT"/>
-       <value value="1" name="CP_BUSY"/>
-       <value value="2" name="CP_PFP_IDLE"/>
-       <value value="3" name="CP_PFP_BUSY_WORKING"/>
-       <value value="4" name="CP_PFP_STALL_CYCLES_ANY"/>
-       <value value="5" name="CP_PFP_STARVE_CYCLES_ANY"/>
-       <value value="6" name="CP_PFP_STARVED_PER_LOAD_ADDR"/>
-       <value value="7" name="CP_PFP_STALLED_PER_STORE_ADDR"/>
-       <value value="8" name="CP_PFP_PC_PROFILE"/>
-       <value value="9" name="CP_PFP_MATCH_PM4_PKT_PROFILE"/>
-       <value value="10" name="CP_PFP_COND_INDIRECT_DISCARDED"/>
-       <value value="11" name="CP_LONG_RESUMPTIONS"/>
-       <value value="12" name="CP_RESUME_CYCLES"/>
-       <value value="13" name="CP_RESUME_TO_BOUNDARY_CYCLES"/>
-       <value value="14" name="CP_LONG_PREEMPTIONS"/>
-       <value value="15" name="CP_PREEMPT_CYCLES"/>
-       <value value="16" name="CP_PREEMPT_TO_BOUNDARY_CYCLES"/>
-       <value value="17" name="CP_ME_FIFO_EMPTY_PFP_IDLE"/>
-       <value value="18" name="CP_ME_FIFO_EMPTY_PFP_BUSY"/>
-       <value value="19" name="CP_ME_FIFO_NOT_EMPTY_NOT_FULL"/>
-       <value value="20" name="CP_ME_FIFO_FULL_ME_BUSY"/>
-       <value value="21" name="CP_ME_FIFO_FULL_ME_NON_WORKING"/>
-       <value value="22" name="CP_ME_WAITING_FOR_PACKETS"/>
-       <value value="23" name="CP_ME_BUSY_WORKING"/>
-       <value value="24" name="CP_ME_STARVE_CYCLES_ANY"/>
-       <value value="25" name="CP_ME_STARVE_CYCLES_PER_PROFILE"/>
-       <value value="26" name="CP_ME_STALL_CYCLES_PER_PROFILE"/>
-       <value value="27" name="CP_ME_PC_PROFILE"/>
-       <value value="28" name="CP_RCIU_FIFO_EMPTY"/>
-       <value value="29" name="CP_RCIU_FIFO_NOT_EMPTY_NOT_FULL"/>
-       <value value="30" name="CP_RCIU_FIFO_FULL"/>
-       <value value="31" name="CP_RCIU_FIFO_FULL_NO_CONTEXT"/>
-       <value value="32" name="CP_RCIU_FIFO_FULL_AHB_MASTER"/>
-       <value value="33" name="CP_RCIU_FIFO_FULL_OTHER"/>
-       <value value="34" name="CP_AHB_IDLE"/>
-       <value value="35" name="CP_AHB_STALL_ON_GRANT_NO_SPLIT"/>
-       <value value="36" name="CP_AHB_STALL_ON_GRANT_SPLIT"/>
-       <value value="37" name="CP_AHB_STALL_ON_GRANT_SPLIT_PROFILE"/>
-       <value value="38" name="CP_AHB_BUSY_WORKING"/>
-       <value value="39" name="CP_AHB_BUSY_STALL_ON_HRDY"/>
-       <value value="40" name="CP_AHB_BUSY_STALL_ON_HRDY_PROFILE"/>
-</enum>
-
-<enum name="a4xx_gras_ras_perfcounter_select">
-       <value value="0" name="RAS_SUPER_TILES"/>
-       <value value="1" name="RAS_8X8_TILES"/>
-       <value value="2" name="RAS_4X4_TILES"/>
-       <value value="3" name="RAS_BUSY_CYCLES"/>
-       <value value="4" name="RAS_STALL_CYCLES_BY_RB"/>
-       <value value="5" name="RAS_STALL_CYCLES_BY_VSC"/>
-       <value value="6" name="RAS_STARVE_CYCLES_BY_TSE"/>
-       <value value="7" name="RAS_SUPERTILE_CYCLES"/>
-       <value value="8" name="RAS_TILE_CYCLES"/>
-       <value value="9" name="RAS_FULLY_COVERED_SUPER_TILES"/>
-       <value value="10" name="RAS_FULLY_COVERED_8X8_TILES"/>
-       <value value="11" name="RAS_4X4_PRIM"/>
-       <value value="12" name="RAS_8X4_4X8_PRIM"/>
-       <value value="13" name="RAS_8X8_PRIM"/>
-</enum>
-
-<enum name="a4xx_gras_tse_perfcounter_select">
-       <value value="0" name="TSE_INPUT_PRIM"/>
-       <value value="1" name="TSE_INPUT_NULL_PRIM"/>
-       <value value="2" name="TSE_TRIVAL_REJ_PRIM"/>
-       <value value="3" name="TSE_CLIPPED_PRIM"/>
-       <value value="4" name="TSE_NEW_PRIM"/>
-       <value value="5" name="TSE_ZERO_AREA_PRIM"/>
-       <value value="6" name="TSE_FACENESS_CULLED_PRIM"/>
-       <value value="7" name="TSE_ZERO_PIXEL_PRIM"/>
-       <value value="8" name="TSE_OUTPUT_NULL_PRIM"/>
-       <value value="9" name="TSE_OUTPUT_VISIBLE_PRIM"/>
-       <value value="10" name="TSE_PRE_CLIP_PRIM"/>
-       <value value="11" name="TSE_POST_CLIP_PRIM"/>
-       <value value="12" name="TSE_BUSY_CYCLES"/>
-       <value value="13" name="TSE_PC_STARVE"/>
-       <value value="14" name="TSE_RAS_STALL"/>
-       <value value="15" name="TSE_STALL_BARYPLANE_FIFO_FULL"/>
-       <value value="16" name="TSE_STALL_ZPLANE_FIFO_FULL"/>
-</enum>
-
-<enum name="a4xx_hlsq_perfcounter_select">
-       <value value="0" name="HLSQ_SP_VS_STAGE_CONSTANT"/>
-       <value value="1" name="HLSQ_SP_VS_STAGE_INSTRUCTIONS"/>
-       <value value="2" name="HLSQ_SP_FS_STAGE_CONSTANT"/>
-       <value value="3" name="HLSQ_SP_FS_STAGE_INSTRUCTIONS"/>
-       <value value="4" name="HLSQ_TP_STATE"/>
-       <value value="5" name="HLSQ_QUADS"/>
-       <value value="6" name="HLSQ_PIXELS"/>
-       <value value="7" name="HLSQ_VERTICES"/>
-       <value value="13" name="HLSQ_SP_VS_STAGE_DATA_BYTES"/>
-       <value value="14" name="HLSQ_SP_FS_STAGE_DATA_BYTES"/>
-       <value value="15" name="HLSQ_BUSY_CYCLES"/>
-       <value value="16" name="HLSQ_STALL_CYCLES_SP_STATE"/>
-       <value value="17" name="HLSQ_STALL_CYCLES_SP_VS_STAGE"/>
-       <value value="18" name="HLSQ_STALL_CYCLES_SP_FS_STAGE"/>
-       <value value="19" name="HLSQ_STALL_CYCLES_UCHE"/>
-       <value value="20" name="HLSQ_RBBM_LOAD_CYCLES"/>
-       <value value="21" name="HLSQ_DI_TO_VS_START_SP"/>
-       <value value="22" name="HLSQ_DI_TO_FS_START_SP"/>
-       <value value="23" name="HLSQ_VS_STAGE_START_TO_DONE_SP"/>
-       <value value="24" name="HLSQ_FS_STAGE_START_TO_DONE_SP"/>
-       <value value="25" name="HLSQ_SP_STATE_COPY_CYCLES_VS_STAGE"/>
-       <value value="26" name="HLSQ_SP_STATE_COPY_CYCLES_FS_STAGE"/>
-       <value value="27" name="HLSQ_UCHE_LATENCY_CYCLES"/>
-       <value value="28" name="HLSQ_UCHE_LATENCY_COUNT"/>
-       <value value="29" name="HLSQ_STARVE_CYCLES_VFD"/>
-</enum>
-
-<enum name="a4xx_pc_perfcounter_select">
-       <value value="0" name="PC_VIS_STREAMS_LOADED"/>
-       <value value="2" name="PC_VPC_PRIMITIVES"/>
-       <value value="3" name="PC_DEAD_PRIM"/>
-       <value value="4" name="PC_LIVE_PRIM"/>
-       <value value="5" name="PC_DEAD_DRAWCALLS"/>
-       <value value="6" name="PC_LIVE_DRAWCALLS"/>
-       <value value="7" name="PC_VERTEX_MISSES"/>
-       <value value="9" name="PC_STALL_CYCLES_VFD"/>
-       <value value="10" name="PC_STALL_CYCLES_TSE"/>
-       <value value="11" name="PC_STALL_CYCLES_UCHE"/>
-       <value value="12" name="PC_WORKING_CYCLES"/>
-       <value value="13" name="PC_IA_VERTICES"/>
-       <value value="14" name="PC_GS_PRIMITIVES"/>
-       <value value="15" name="PC_HS_INVOCATIONS"/>
-       <value value="16" name="PC_DS_INVOCATIONS"/>
-       <value value="17" name="PC_DS_PRIMITIVES"/>
-       <value value="20" name="PC_STARVE_CYCLES_FOR_INDEX"/>
-       <value value="21" name="PC_STARVE_CYCLES_FOR_TESS_FACTOR"/>
-       <value value="22" name="PC_STARVE_CYCLES_FOR_VIZ_STREAM"/>
-       <value value="23" name="PC_STALL_CYCLES_TESS"/>
-       <value value="24" name="PC_STARVE_CYCLES_FOR_POSITION"/>
-       <value value="25" name="PC_MODE0_DRAWCALL"/>
-       <value value="26" name="PC_MODE1_DRAWCALL"/>
-       <value value="27" name="PC_MODE2_DRAWCALL"/>
-       <value value="28" name="PC_MODE3_DRAWCALL"/>
-       <value value="29" name="PC_MODE4_DRAWCALL"/>
-       <value value="30" name="PC_PREDICATED_DEAD_DRAWCALL"/>
-       <value value="31" name="PC_STALL_CYCLES_BY_TSE_ONLY"/>
-       <value value="32" name="PC_STALL_CYCLES_BY_VPC_ONLY"/>
-       <value value="33" name="PC_VPC_POS_DATA_TRANSACTION"/>
-       <value value="34" name="PC_BUSY_CYCLES"/>
-       <value value="35" name="PC_STARVE_CYCLES_DI"/>
-       <value value="36" name="PC_STALL_CYCLES_VPC"/>
-       <value value="37" name="TESS_WORKING_CYCLES"/>
-       <value value="38" name="TESS_NUM_CYCLES_SETUP_WORKING"/>
-       <value value="39" name="TESS_NUM_CYCLES_PTGEN_WORKING"/>
-       <value value="40" name="TESS_NUM_CYCLES_CONNGEN_WORKING"/>
-       <value value="41" name="TESS_BUSY_CYCLES"/>
-       <value value="42" name="TESS_STARVE_CYCLES_PC"/>
-       <value value="43" name="TESS_STALL_CYCLES_PC"/>
-</enum>
-
-<enum name="a4xx_pwr_perfcounter_select">
-       <!-- NOTE not actually used.. see RBBM_RBBM_CTL.RESET_PWR_CTR0/1 -->
-       <value value="0" name="PWR_CORE_CLOCK_CYCLES"/>
-       <value value="1" name="PWR_BUSY_CLOCK_CYCLES"/>
-</enum>
-
-<enum name="a4xx_rb_perfcounter_select">
-       <value value="0" name="RB_BUSY_CYCLES"/>
-       <value value="1" name="RB_BUSY_CYCLES_BINNING"/>
-       <value value="2" name="RB_BUSY_CYCLES_RENDERING"/>
-       <value value="3" name="RB_BUSY_CYCLES_RESOLVE"/>
-       <value value="4" name="RB_STARVE_CYCLES_BY_SP"/>
-       <value value="5" name="RB_STARVE_CYCLES_BY_RAS"/>
-       <value value="6" name="RB_STARVE_CYCLES_BY_MARB"/>
-       <value value="7" name="RB_STALL_CYCLES_BY_MARB"/>
-       <value value="8" name="RB_STALL_CYCLES_BY_HLSQ"/>
-       <value value="9" name="RB_RB_RB_MARB_DATA"/>
-       <value value="10" name="RB_SP_RB_QUAD"/>
-       <value value="11" name="RB_RAS_RB_Z_QUADS"/>
-       <value value="12" name="RB_GMEM_CH0_READ"/>
-       <value value="13" name="RB_GMEM_CH1_READ"/>
-       <value value="14" name="RB_GMEM_CH0_WRITE"/>
-       <value value="15" name="RB_GMEM_CH1_WRITE"/>
-       <value value="16" name="RB_CP_CONTEXT_DONE"/>
-       <value value="17" name="RB_CP_CACHE_FLUSH"/>
-       <value value="18" name="RB_CP_ZPASS_DONE"/>
-       <value value="19" name="RB_STALL_FIFO0_FULL"/>
-       <value value="20" name="RB_STALL_FIFO1_FULL"/>
-       <value value="21" name="RB_STALL_FIFO2_FULL"/>
-       <value value="22" name="RB_STALL_FIFO3_FULL"/>
-       <value value="23" name="RB_RB_HLSQ_TRANSACTIONS"/>
-       <value value="24" name="RB_Z_READ"/>
-       <value value="25" name="RB_Z_WRITE"/>
-       <value value="26" name="RB_C_READ"/>
-       <value value="27" name="RB_C_WRITE"/>
-       <value value="28" name="RB_C_READ_LATENCY"/>
-       <value value="29" name="RB_Z_READ_LATENCY"/>
-       <value value="30" name="RB_STALL_BY_UCHE"/>
-       <value value="31" name="RB_MARB_UCHE_TRANSACTIONS"/>
-       <value value="32" name="RB_CACHE_STALL_MISS"/>
-       <value value="33" name="RB_CACHE_STALL_FIFO_FULL"/>
-       <value value="34" name="RB_8BIT_BLENDER_UNITS_ACTIVE"/>
-       <value value="35" name="RB_16BIT_BLENDER_UNITS_ACTIVE"/>
-       <value value="36" name="RB_SAMPLER_UNITS_ACTIVE"/>
-       <value value="38" name="RB_TOTAL_PASS"/>
-       <value value="39" name="RB_Z_PASS"/>
-       <value value="40" name="RB_Z_FAIL"/>
-       <value value="41" name="RB_S_FAIL"/>
-       <value value="42" name="RB_POWER0"/>
-       <value value="43" name="RB_POWER1"/>
-       <value value="44" name="RB_POWER2"/>
-       <value value="45" name="RB_POWER3"/>
-       <value value="46" name="RB_POWER4"/>
-       <value value="47" name="RB_POWER5"/>
-       <value value="48" name="RB_POWER6"/>
-       <value value="49" name="RB_POWER7"/>
-</enum>
-
-<enum name="a4xx_rbbm_perfcounter_select">
-       <value value="0" name="RBBM_ALWAYS_ON"/>
-       <value value="1" name="RBBM_VBIF_BUSY"/>
-       <value value="2" name="RBBM_TSE_BUSY"/>
-       <value value="3" name="RBBM_RAS_BUSY"/>
-       <value value="4" name="RBBM_PC_DCALL_BUSY"/>
-       <value value="5" name="RBBM_PC_VSD_BUSY"/>
-       <value value="6" name="RBBM_VFD_BUSY"/>
-       <value value="7" name="RBBM_VPC_BUSY"/>
-       <value value="8" name="RBBM_UCHE_BUSY"/>
-       <value value="9" name="RBBM_VSC_BUSY"/>
-       <value value="10" name="RBBM_HLSQ_BUSY"/>
-       <value value="11" name="RBBM_ANY_RB_BUSY"/>
-       <value value="12" name="RBBM_ANY_TPL1_BUSY"/>
-       <value value="13" name="RBBM_ANY_SP_BUSY"/>
-       <value value="14" name="RBBM_ANY_MARB_BUSY"/>
-       <value value="15" name="RBBM_ANY_ARB_BUSY"/>
-       <value value="16" name="RBBM_AHB_STATUS_BUSY"/>
-       <value value="17" name="RBBM_AHB_STATUS_STALLED"/>
-       <value value="18" name="RBBM_AHB_STATUS_TXFR"/>
-       <value value="19" name="RBBM_AHB_STATUS_TXFR_SPLIT"/>
-       <value value="20" name="RBBM_AHB_STATUS_TXFR_ERROR"/>
-       <value value="21" name="RBBM_AHB_STATUS_LONG_STALL"/>
-       <value value="22" name="RBBM_STATUS_MASKED"/>
-       <value value="23" name="RBBM_CP_BUSY_GFX_CORE_IDLE"/>
-       <value value="24" name="RBBM_TESS_BUSY"/>
-       <value value="25" name="RBBM_COM_BUSY"/>
-       <value value="32" name="RBBM_DCOM_BUSY"/>
-       <value value="33" name="RBBM_ANY_CCU_BUSY"/>
-       <value value="34" name="RBBM_DPM_BUSY"/>
-</enum>
-
-<enum name="a4xx_sp_perfcounter_select">
-       <value value="0" name="SP_LM_LOAD_INSTRUCTIONS"/>
-       <value value="1" name="SP_LM_STORE_INSTRUCTIONS"/>
-       <value value="2" name="SP_LM_ATOMICS"/>
-       <value value="3" name="SP_GM_LOAD_INSTRUCTIONS"/>
-       <value value="4" name="SP_GM_STORE_INSTRUCTIONS"/>
-       <value value="5" name="SP_GM_ATOMICS"/>
-       <value value="6" name="SP_VS_STAGE_TEX_INSTRUCTIONS"/>
-       <value value="7" name="SP_VS_STAGE_CFLOW_INSTRUCTIONS"/>
-       <value value="8" name="SP_VS_STAGE_EFU_INSTRUCTIONS"/>
-       <value value="9" name="SP_VS_STAGE_FULL_ALU_INSTRUCTIONS"/>
-       <value value="10" name="SP_VS_STAGE_HALF_ALU_INSTRUCTIONS"/>
-       <value value="11" name="SP_FS_STAGE_TEX_INSTRUCTIONS"/>
-       <value value="12" name="SP_FS_STAGE_CFLOW_INSTRUCTIONS"/>
-       <value value="13" name="SP_FS_STAGE_EFU_INSTRUCTIONS"/>
-       <value value="14" name="SP_FS_STAGE_FULL_ALU_INSTRUCTIONS"/>
-       <value value="15" name="SP_FS_STAGE_HALF_ALU_INSTRUCTIONS"/>
-       <value value="17" name="SP_VS_INSTRUCTIONS"/>
-       <value value="18" name="SP_FS_INSTRUCTIONS"/>
-       <value value="19" name="SP_ADDR_LOCK_COUNT"/>
-       <value value="20" name="SP_UCHE_READ_TRANS"/>
-       <value value="21" name="SP_UCHE_WRITE_TRANS"/>
-       <value value="22" name="SP_EXPORT_VPC_TRANS"/>
-       <value value="23" name="SP_EXPORT_RB_TRANS"/>
-       <value value="24" name="SP_PIXELS_KILLED"/>
-       <value value="25" name="SP_ICL1_REQUESTS"/>
-       <value value="26" name="SP_ICL1_MISSES"/>
-       <value value="27" name="SP_ICL0_REQUESTS"/>
-       <value value="28" name="SP_ICL0_MISSES"/>
-       <value value="29" name="SP_ALU_WORKING_CYCLES"/>
-       <value value="30" name="SP_EFU_WORKING_CYCLES"/>
-       <value value="31" name="SP_STALL_CYCLES_BY_VPC"/>
-       <value value="32" name="SP_STALL_CYCLES_BY_TP"/>
-       <value value="33" name="SP_STALL_CYCLES_BY_UCHE"/>
-       <value value="34" name="SP_STALL_CYCLES_BY_RB"/>
-       <value value="35" name="SP_BUSY_CYCLES"/>
-       <value value="36" name="SP_HS_INSTRUCTIONS"/>
-       <value value="37" name="SP_DS_INSTRUCTIONS"/>
-       <value value="38" name="SP_GS_INSTRUCTIONS"/>
-       <value value="39" name="SP_CS_INSTRUCTIONS"/>
-       <value value="40" name="SP_SCHEDULER_NON_WORKING"/>
-       <value value="41" name="SP_WAVE_CONTEXTS"/>
-       <value value="42" name="SP_WAVE_CONTEXT_CYCLES"/>
-       <value value="43" name="SP_POWER0"/>
-       <value value="44" name="SP_POWER1"/>
-       <value value="45" name="SP_POWER2"/>
-       <value value="46" name="SP_POWER3"/>
-       <value value="47" name="SP_POWER4"/>
-       <value value="48" name="SP_POWER5"/>
-       <value value="49" name="SP_POWER6"/>
-       <value value="50" name="SP_POWER7"/>
-       <value value="51" name="SP_POWER8"/>
-       <value value="52" name="SP_POWER9"/>
-       <value value="53" name="SP_POWER10"/>
-       <value value="54" name="SP_POWER11"/>
-       <value value="55" name="SP_POWER12"/>
-       <value value="56" name="SP_POWER13"/>
-       <value value="57" name="SP_POWER14"/>
-       <value value="58" name="SP_POWER15"/>
-</enum>
-
-<enum name="a4xx_tp_perfcounter_select">
-       <value value="0" name="TP_L1_REQUESTS"/>
-       <value value="1" name="TP_L1_MISSES"/>
-       <value value="8" name="TP_QUADS_OFFSET"/>
-       <value value="9" name="TP_QUAD_SHADOW"/>
-       <value value="10" name="TP_QUADS_ARRAY"/>
-       <value value="11" name="TP_QUADS_GRADIENT"/>
-       <value value="12" name="TP_QUADS_1D2D"/>
-       <value value="13" name="TP_QUADS_3DCUBE"/>
-       <value value="16" name="TP_BUSY_CYCLES"/>
-       <value value="17" name="TP_STALL_CYCLES_BY_ARB"/>
-       <value value="20" name="TP_STATE_CACHE_REQUESTS"/>
-       <value value="21" name="TP_STATE_CACHE_MISSES"/>
-       <value value="22" name="TP_POWER0"/>
-       <value value="23" name="TP_POWER1"/>
-       <value value="24" name="TP_POWER2"/>
-       <value value="25" name="TP_POWER3"/>
-       <value value="26" name="TP_POWER4"/>
-       <value value="27" name="TP_POWER5"/>
-       <value value="28" name="TP_POWER6"/>
-       <value value="29" name="TP_POWER7"/>
-</enum>
-
-<enum name="a4xx_uche_perfcounter_select">
-       <value value="0" name="UCHE_VBIF_READ_BEATS_TP"/>
-       <value value="1" name="UCHE_VBIF_READ_BEATS_VFD"/>
-       <value value="2" name="UCHE_VBIF_READ_BEATS_HLSQ"/>
-       <value value="3" name="UCHE_VBIF_READ_BEATS_MARB"/>
-       <value value="4" name="UCHE_VBIF_READ_BEATS_SP"/>
-       <value value="5" name="UCHE_READ_REQUESTS_TP"/>
-       <value value="6" name="UCHE_READ_REQUESTS_VFD"/>
-       <value value="7" name="UCHE_READ_REQUESTS_HLSQ"/>
-       <value value="8" name="UCHE_READ_REQUESTS_MARB"/>
-       <value value="9" name="UCHE_READ_REQUESTS_SP"/>
-       <value value="10" name="UCHE_WRITE_REQUESTS_MARB"/>
-       <value value="11" name="UCHE_WRITE_REQUESTS_SP"/>
-       <value value="12" name="UCHE_TAG_CHECK_FAILS"/>
-       <value value="13" name="UCHE_EVICTS"/>
-       <value value="14" name="UCHE_FLUSHES"/>
-       <value value="15" name="UCHE_VBIF_LATENCY_CYCLES"/>
-       <value value="16" name="UCHE_VBIF_LATENCY_SAMPLES"/>
-       <value value="17" name="UCHE_BUSY_CYCLES"/>
-       <value value="18" name="UCHE_VBIF_READ_BEATS_PC"/>
-       <value value="19" name="UCHE_READ_REQUESTS_PC"/>
-       <value value="20" name="UCHE_WRITE_REQUESTS_VPC"/>
-       <value value="21" name="UCHE_STALL_BY_VBIF"/>
-       <value value="22" name="UCHE_WRITE_REQUESTS_VSC"/>
-       <value value="23" name="UCHE_POWER0"/>
-       <value value="24" name="UCHE_POWER1"/>
-       <value value="25" name="UCHE_POWER2"/>
-       <value value="26" name="UCHE_POWER3"/>
-       <value value="27" name="UCHE_POWER4"/>
-       <value value="28" name="UCHE_POWER5"/>
-       <value value="29" name="UCHE_POWER6"/>
-       <value value="30" name="UCHE_POWER7"/>
-</enum>
-
-<enum name="a4xx_vbif_perfcounter_select">
-       <value value="0" name="AXI_READ_REQUESTS_ID_0"/>
-       <value value="1" name="AXI_READ_REQUESTS_ID_1"/>
-       <value value="2" name="AXI_READ_REQUESTS_ID_2"/>
-       <value value="3" name="AXI_READ_REQUESTS_ID_3"/>
-       <value value="4" name="AXI_READ_REQUESTS_ID_4"/>
-       <value value="5" name="AXI_READ_REQUESTS_ID_5"/>
-       <value value="6" name="AXI_READ_REQUESTS_ID_6"/>
-       <value value="7" name="AXI_READ_REQUESTS_ID_7"/>
-       <value value="8" name="AXI_READ_REQUESTS_ID_8"/>
-       <value value="9" name="AXI_READ_REQUESTS_ID_9"/>
-       <value value="10" name="AXI_READ_REQUESTS_ID_10"/>
-       <value value="11" name="AXI_READ_REQUESTS_ID_11"/>
-       <value value="12" name="AXI_READ_REQUESTS_ID_12"/>
-       <value value="13" name="AXI_READ_REQUESTS_ID_13"/>
-       <value value="14" name="AXI_READ_REQUESTS_ID_14"/>
-       <value value="15" name="AXI_READ_REQUESTS_ID_15"/>
-       <value value="16" name="AXI0_READ_REQUESTS_TOTAL"/>
-       <value value="17" name="AXI1_READ_REQUESTS_TOTAL"/>
-       <value value="18" name="AXI2_READ_REQUESTS_TOTAL"/>
-       <value value="19" name="AXI3_READ_REQUESTS_TOTAL"/>
-       <value value="20" name="AXI_READ_REQUESTS_TOTAL"/>
-       <value value="21" name="AXI_WRITE_REQUESTS_ID_0"/>
-       <value value="22" name="AXI_WRITE_REQUESTS_ID_1"/>
-       <value value="23" name="AXI_WRITE_REQUESTS_ID_2"/>
-       <value value="24" name="AXI_WRITE_REQUESTS_ID_3"/>
-       <value value="25" name="AXI_WRITE_REQUESTS_ID_4"/>
-       <value value="26" name="AXI_WRITE_REQUESTS_ID_5"/>
-       <value value="27" name="AXI_WRITE_REQUESTS_ID_6"/>
-       <value value="28" name="AXI_WRITE_REQUESTS_ID_7"/>
-       <value value="29" name="AXI_WRITE_REQUESTS_ID_8"/>
-       <value value="30" name="AXI_WRITE_REQUESTS_ID_9"/>
-       <value value="31" name="AXI_WRITE_REQUESTS_ID_10"/>
-       <value value="32" name="AXI_WRITE_REQUESTS_ID_11"/>
-       <value value="33" name="AXI_WRITE_REQUESTS_ID_12"/>
-       <value value="34" name="AXI_WRITE_REQUESTS_ID_13"/>
-       <value value="35" name="AXI_WRITE_REQUESTS_ID_14"/>
-       <value value="36" name="AXI_WRITE_REQUESTS_ID_15"/>
-       <value value="37" name="AXI0_WRITE_REQUESTS_TOTAL"/>
-       <value value="38" name="AXI1_WRITE_REQUESTS_TOTAL"/>
-       <value value="39" name="AXI2_WRITE_REQUESTS_TOTAL"/>
-       <value value="40" name="AXI3_WRITE_REQUESTS_TOTAL"/>
-       <value value="41" name="AXI_WRITE_REQUESTS_TOTAL"/>
-       <value value="42" name="AXI_TOTAL_REQUESTS"/>
-       <value value="43" name="AXI_READ_DATA_BEATS_ID_0"/>
-       <value value="44" name="AXI_READ_DATA_BEATS_ID_1"/>
-       <value value="45" name="AXI_READ_DATA_BEATS_ID_2"/>
-       <value value="46" name="AXI_READ_DATA_BEATS_ID_3"/>
-       <value value="47" name="AXI_READ_DATA_BEATS_ID_4"/>
-       <value value="48" name="AXI_READ_DATA_BEATS_ID_5"/>
-       <value value="49" name="AXI_READ_DATA_BEATS_ID_6"/>
-       <value value="50" name="AXI_READ_DATA_BEATS_ID_7"/>
-       <value value="51" name="AXI_READ_DATA_BEATS_ID_8"/>
-       <value value="52" name="AXI_READ_DATA_BEATS_ID_9"/>
-       <value value="53" name="AXI_READ_DATA_BEATS_ID_10"/>
-       <value value="54" name="AXI_READ_DATA_BEATS_ID_11"/>
-       <value value="55" name="AXI_READ_DATA_BEATS_ID_12"/>
-       <value value="56" name="AXI_READ_DATA_BEATS_ID_13"/>
-       <value value="57" name="AXI_READ_DATA_BEATS_ID_14"/>
-       <value value="58" name="AXI_READ_DATA_BEATS_ID_15"/>
-       <value value="59" name="AXI0_READ_DATA_BEATS_TOTAL"/>
-       <value value="60" name="AXI1_READ_DATA_BEATS_TOTAL"/>
-       <value value="61" name="AXI2_READ_DATA_BEATS_TOTAL"/>
-       <value value="62" name="AXI3_READ_DATA_BEATS_TOTAL"/>
-       <value value="63" name="AXI_READ_DATA_BEATS_TOTAL"/>
-       <value value="64" name="AXI_WRITE_DATA_BEATS_ID_0"/>
-       <value value="65" name="AXI_WRITE_DATA_BEATS_ID_1"/>
-       <value value="66" name="AXI_WRITE_DATA_BEATS_ID_2"/>
-       <value value="67" name="AXI_WRITE_DATA_BEATS_ID_3"/>
-       <value value="68" name="AXI_WRITE_DATA_BEATS_ID_4"/>
-       <value value="69" name="AXI_WRITE_DATA_BEATS_ID_5"/>
-       <value value="70" name="AXI_WRITE_DATA_BEATS_ID_6"/>
-       <value value="71" name="AXI_WRITE_DATA_BEATS_ID_7"/>
-       <value value="72" name="AXI_WRITE_DATA_BEATS_ID_8"/>
-       <value value="73" name="AXI_WRITE_DATA_BEATS_ID_9"/>
-       <value value="74" name="AXI_WRITE_DATA_BEATS_ID_10"/>
-       <value value="75" name="AXI_WRITE_DATA_BEATS_ID_11"/>
-       <value value="76" name="AXI_WRITE_DATA_BEATS_ID_12"/>
-       <value value="77" name="AXI_WRITE_DATA_BEATS_ID_13"/>
-       <value value="78" name="AXI_WRITE_DATA_BEATS_ID_14"/>
-       <value value="79" name="AXI_WRITE_DATA_BEATS_ID_15"/>
-       <value value="80" name="AXI0_WRITE_DATA_BEATS_TOTAL"/>
-       <value value="81" name="AXI1_WRITE_DATA_BEATS_TOTAL"/>
-       <value value="82" name="AXI2_WRITE_DATA_BEATS_TOTAL"/>
-       <value value="83" name="AXI3_WRITE_DATA_BEATS_TOTAL"/>
-       <value value="84" name="AXI_WRITE_DATA_BEATS_TOTAL"/>
-       <value value="85" name="AXI_DATA_BEATS_TOTAL"/>
-       <value value="86" name="CYCLES_HELD_OFF_ID_0"/>
-       <value value="87" name="CYCLES_HELD_OFF_ID_1"/>
-       <value value="88" name="CYCLES_HELD_OFF_ID_2"/>
-       <value value="89" name="CYCLES_HELD_OFF_ID_3"/>
-       <value value="90" name="CYCLES_HELD_OFF_ID_4"/>
-       <value value="91" name="CYCLES_HELD_OFF_ID_5"/>
-       <value value="92" name="CYCLES_HELD_OFF_ID_6"/>
-       <value value="93" name="CYCLES_HELD_OFF_ID_7"/>
-       <value value="94" name="CYCLES_HELD_OFF_ID_8"/>
-       <value value="95" name="CYCLES_HELD_OFF_ID_9"/>
-       <value value="96" name="CYCLES_HELD_OFF_ID_10"/>
-       <value value="97" name="CYCLES_HELD_OFF_ID_11"/>
-       <value value="98" name="CYCLES_HELD_OFF_ID_12"/>
-       <value value="99" name="CYCLES_HELD_OFF_ID_13"/>
-       <value value="100" name="CYCLES_HELD_OFF_ID_14"/>
-       <value value="101" name="CYCLES_HELD_OFF_ID_15"/>
-       <value value="102" name="AXI_READ_REQUEST_HELD_OFF"/>
-       <value value="103" name="AXI_WRITE_REQUEST_HELD_OFF"/>
-       <value value="104" name="AXI_REQUEST_HELD_OFF"/>
-       <value value="105" name="AXI_WRITE_DATA_HELD_OFF"/>
-       <value value="106" name="OCMEM_AXI_READ_REQUEST_HELD_OFF"/>
-       <value value="107" name="OCMEM_AXI_WRITE_REQUEST_HELD_OFF"/>
-       <value value="108" name="OCMEM_AXI_REQUEST_HELD_OFF"/>
-       <value value="109" name="OCMEM_AXI_WRITE_DATA_HELD_OFF"/>
-       <value value="110" name="ELAPSED_CYCLES_DDR"/>
-       <value value="111" name="ELAPSED_CYCLES_OCMEM"/>
-</enum>
-
-<enum name="a4xx_vfd_perfcounter_select">
-       <value value="0" name="VFD_UCHE_BYTE_FETCHED"/>
-       <value value="1" name="VFD_UCHE_TRANS"/>
-       <value value="3" name="VFD_FETCH_INSTRUCTIONS"/>
-       <value value="5" name="VFD_BUSY_CYCLES"/>
-       <value value="6" name="VFD_STALL_CYCLES_UCHE"/>
-       <value value="7" name="VFD_STALL_CYCLES_HLSQ"/>
-       <value value="8" name="VFD_STALL_CYCLES_VPC_BYPASS"/>
-       <value value="9" name="VFD_STALL_CYCLES_VPC_ALLOC"/>
-       <value value="13" name="VFD_MODE_0_FIBERS"/>
-       <value value="14" name="VFD_MODE_1_FIBERS"/>
-       <value value="15" name="VFD_MODE_2_FIBERS"/>
-       <value value="16" name="VFD_MODE_3_FIBERS"/>
-       <value value="17" name="VFD_MODE_4_FIBERS"/>
-       <value value="18" name="VFD_BFIFO_STALL"/>
-       <value value="19" name="VFD_NUM_VERTICES_TOTAL"/>
-       <value value="20" name="VFD_PACKER_FULL"/>
-       <value value="21" name="VFD_UCHE_REQUEST_FIFO_FULL"/>
-       <value value="22" name="VFD_STARVE_CYCLES_PC"/>
-       <value value="23" name="VFD_STARVE_CYCLES_UCHE"/>
-</enum>
-
-<enum name="a4xx_vpc_perfcounter_select">
-       <value value="2" name="VPC_SP_LM_COMPONENTS"/>
-       <value value="3" name="VPC_SP0_LM_BYTES"/>
-       <value value="4" name="VPC_SP1_LM_BYTES"/>
-       <value value="5" name="VPC_SP2_LM_BYTES"/>
-       <value value="6" name="VPC_SP3_LM_BYTES"/>
-       <value value="7" name="VPC_WORKING_CYCLES"/>
-       <value value="8" name="VPC_STALL_CYCLES_LM"/>
-       <value value="9" name="VPC_STARVE_CYCLES_RAS"/>
-       <value value="10" name="VPC_STREAMOUT_CYCLES"/>
-       <value value="12" name="VPC_UCHE_TRANSACTIONS"/>
-       <value value="13" name="VPC_STALL_CYCLES_UCHE"/>
-       <value value="14" name="VPC_BUSY_CYCLES"/>
-       <value value="15" name="VPC_STARVE_CYCLES_SP"/>
-</enum>
-
-<enum name="a4xx_vsc_perfcounter_select">
-       <value value="0" name="VSC_BUSY_CYCLES"/>
-       <value value="1" name="VSC_WORKING_CYCLES"/>
-       <value value="2" name="VSC_STALL_CYCLES_UCHE"/>
-       <value value="3" name="VSC_STARVE_CYCLES_RAS"/>
-       <value value="4" name="VSC_EOT_NUM"/>
-</enum>
-
-<domain name="A4XX" width="32">
-       <!-- RB registers -->
-       <reg32 offset="0x0cc0" name="RB_GMEM_BASE_ADDR"/>
-       <reg32 offset="0x0cc7" name="RB_PERFCTR_RB_SEL_0" type="a4xx_rb_perfcounter_select"/>
-       <reg32 offset="0x0cc8" name="RB_PERFCTR_RB_SEL_1" type="a4xx_rb_perfcounter_select"/>
-       <reg32 offset="0x0cc9" name="RB_PERFCTR_RB_SEL_2" type="a4xx_rb_perfcounter_select"/>
-       <reg32 offset="0x0cca" name="RB_PERFCTR_RB_SEL_3" type="a4xx_rb_perfcounter_select"/>
-       <reg32 offset="0x0ccb" name="RB_PERFCTR_RB_SEL_4" type="a4xx_rb_perfcounter_select"/>
-       <reg32 offset="0x0ccc" name="RB_PERFCTR_RB_SEL_5" type="a4xx_rb_perfcounter_select"/>
-       <reg32 offset="0x0ccd" name="RB_PERFCTR_RB_SEL_6" type="a4xx_rb_perfcounter_select"/>
-       <reg32 offset="0x0cce" name="RB_PERFCTR_RB_SEL_7" type="a4xx_rb_perfcounter_select"/>
-       <reg32 offset="0x0ccf" name="RB_PERFCTR_CCU_SEL_0" type="a4xx_ccu_perfcounter_select"/>
-       <reg32 offset="0x0cd0" name="RB_PERFCTR_CCU_SEL_1" type="a4xx_ccu_perfcounter_select"/>
-       <reg32 offset="0x0cd1" name="RB_PERFCTR_CCU_SEL_2" type="a4xx_ccu_perfcounter_select"/>
-       <reg32 offset="0x0cd2" name="RB_PERFCTR_CCU_SEL_3" type="a4xx_ccu_perfcounter_select"/>
-       <reg32 offset="0x0ce0" name="RB_FRAME_BUFFER_DIMENSION">
-               <bitfield name="WIDTH" low="0" high="13" type="uint"/>
-               <bitfield name="HEIGHT" low="16" high="29" type="uint"/>
-       </reg32>
-       <reg32 offset="0x20cc" name="RB_CLEAR_COLOR_DW0"/>
-       <reg32 offset="0x20cd" name="RB_CLEAR_COLOR_DW1"/>
-       <reg32 offset="0x20ce" name="RB_CLEAR_COLOR_DW2"/>
-       <reg32 offset="0x20cf" name="RB_CLEAR_COLOR_DW3"/>
-       <reg32 offset="0x20a0" name="RB_MODE_CONTROL">
-               <!--
-               for non-bypass mode, these are bin width/height..  although
-               possibly bigger bitfields to hold entire width/height for
-               gmem-bypass??  Either way, it appears to need to be multiple
-               of 32..
-               -->
-               <bitfield name="WIDTH" low="0" high="5" shr="5" type="uint"/>
-               <bitfield name="HEIGHT" low="8" high="13" shr="5" type="uint"/>
-               <bitfield name="ENABLE_GMEM" pos="16" type="boolean"/>
-       </reg32>
-       <reg32 offset="0x20a1" name="RB_RENDER_CONTROL">
-               <bitfield name="BINNING_PASS" pos="0" type="boolean"/>
-               <!-- nearly everything has bit3 set.. -->
-               <!-- bit5 set on resolve and tiling pass -->
-               <bitfield name="DISABLE_COLOR_PIPE" pos="5" type="boolean"/>
-       </reg32>
-       <reg32 offset="0x20a2" name="RB_MSAA_CONTROL">
-               <bitfield name="DISABLE" pos="12" type="boolean"/>
-               <bitfield name="SAMPLES" low="13" high="15" type="uint"/>
-       </reg32>
-       <reg32 offset="0x20a3" name="RB_RENDER_CONTROL2">
-               <bitfield name="COORD_MASK" low="0" high="3" type="hex"/>
-               <bitfield name="SAMPLEMASK" pos="4" type="boolean"/>
-               <bitfield name="FACENESS" pos="5" type="boolean"/>
-               <bitfield name="SAMPLEID" pos="6" type="boolean"/>
-               <bitfield name="MSAA_SAMPLES" low="7" high="9" type="uint"/>
-               <bitfield name="SAMPLEID_HR" pos="11" type="boolean"/>
-               <bitfield name="IJ_PERSP_PIXEL" pos="12" type="boolean"/>
-               <!-- the 2 below are just educated guesses -->
-               <bitfield name="IJ_PERSP_CENTROID" pos="13" type="boolean"/>
-               <bitfield name="IJ_PERSP_SAMPLE" pos="14" type="boolean"/>
-               <!-- needs to be enabled to get nopersp values,
-                    perhaps other cases too? -->
-               <bitfield name="SIZE" pos="15" type="boolean"/>
-       </reg32>
-       <array offset="0x20a4" name="RB_MRT" stride="5" length="8">
-               <reg32 offset="0x0" name="CONTROL">
-                       <bitfield name="READ_DEST_ENABLE" pos="3" type="boolean"/>
-                       <!-- both these bits seem to get set when enabling GL_BLEND.. -->
-                       <bitfield name="BLEND" pos="4" type="boolean"/>
-                       <bitfield name="BLEND2" pos="5" type="boolean"/>
-                       <bitfield name="ROP_ENABLE" pos="6" type="boolean"/>
-                       <bitfield name="ROP_CODE" low="8" high="11" type="a3xx_rop_code"/>
-                       <bitfield name="COMPONENT_ENABLE" low="24" high="27" type="hex"/>
-               </reg32>
-               <reg32 offset="0x1" name="BUF_INFO">
-                       <bitfield name="COLOR_FORMAT" low="0" high="5" type="a4xx_color_fmt"/>
-                       <!--
-                           guestimate position of COLOR_TILE_MODE..  this works out if
-                           common value is 2, like on a3xx..
-                        -->
-                       <bitfield name="COLOR_TILE_MODE" low="6" high="7" type="a4xx_tile_mode"/>
-                       <bitfield name="DITHER_MODE" low="9" high="10" type="adreno_rb_dither_mode"/>
-                       <bitfield name="COLOR_SWAP" low="11" high="12" type="a3xx_color_swap"/>
-                       <bitfield name="COLOR_SRGB" pos="13" type="boolean"/>
-                       <!-- note: possibly some # of lsb's aren't there: -->
-                       <doc>
-                               Pitch (actually, appears to be pitch in bytes, so really is a stride)
-                               in GMEM, so pitch of the current tile.
-                       </doc>
-                       <bitfield name="COLOR_BUF_PITCH" low="14" high="31" shr="4" type="uint"/>
-               </reg32>
-               <reg32 offset="0x2" name="BASE"/>
-               <reg32 offset="0x3" name="CONTROL3">
-                       <!-- probably missing some lsb's.. and guessing upper size -->
-                       <!-- pitch * cpp * msaa: -->
-                       <bitfield name="STRIDE" low="3" high="25" type="uint"/>
-               </reg32>
-               <reg32 offset="0x4" name="BLEND_CONTROL">
-                       <bitfield name="RGB_SRC_FACTOR" low="0" high="4" type="adreno_rb_blend_factor"/>
-                       <bitfield name="RGB_BLEND_OPCODE" low="5" high="7" type="a3xx_rb_blend_opcode"/>
-                       <bitfield name="RGB_DEST_FACTOR" low="8" high="12" type="adreno_rb_blend_factor"/>
-                       <bitfield name="ALPHA_SRC_FACTOR" low="16" high="20" type="adreno_rb_blend_factor"/>
-                       <bitfield name="ALPHA_BLEND_OPCODE" low="21" high="23" type="a3xx_rb_blend_opcode"/>
-                       <bitfield name="ALPHA_DEST_FACTOR" low="24" high="28" type="adreno_rb_blend_factor"/>
-               </reg32>
-       </array>
-
-       <reg32 offset="0x20f0" name="RB_BLEND_RED">
-               <bitfield name="UINT" low="0" high="7" type="hex"/>
-               <bitfield name="SINT" low="8" high="15" type="hex"/>
-               <bitfield name="FLOAT" low="16" high="31" type="float"/>
-       </reg32>
-       <reg32 offset="0x20f1" name="RB_BLEND_RED_F32" type="float"/>
-
-       <reg32 offset="0x20f2" name="RB_BLEND_GREEN">
-               <bitfield name="UINT" low="0" high="7" type="hex"/>
-               <bitfield name="SINT" low="8" high="15" type="hex"/>
-               <bitfield name="FLOAT" low="16" high="31" type="float"/>
-       </reg32>
-       <reg32 offset="0x20f3" name="RB_BLEND_GREEN_F32" type="float"/>
-
-       <reg32 offset="0x20f4" name="RB_BLEND_BLUE">
-               <bitfield name="UINT" low="0" high="7" type="hex"/>
-               <bitfield name="SINT" low="8" high="15" type="hex"/>
-               <bitfield name="FLOAT" low="16" high="31" type="float"/>
-       </reg32>
-       <reg32 offset="0x20f5" name="RB_BLEND_BLUE_F32" type="float"/>
-
-       <reg32 offset="0x20f6" name="RB_BLEND_ALPHA">
-               <bitfield name="UINT" low="0" high="7" type="hex"/>
-               <bitfield name="SINT" low="8" high="15" type="hex"/>
-               <bitfield name="FLOAT" low="16" high="31" type="float"/>
-       </reg32>
-       <reg32 offset="0x20f7" name="RB_BLEND_ALPHA_F32" type="float"/>
-
-       <reg32 offset="0x20f8" name="RB_ALPHA_CONTROL">
-               <bitfield name="ALPHA_REF" low="0" high="7" type="hex"/>
-               <bitfield name="ALPHA_TEST" pos="8" type="boolean"/>
-               <bitfield name="ALPHA_TEST_FUNC" low="9" high="11" type="adreno_compare_func"/>
-       </reg32>
-       <reg32 offset="0x20f9" name="RB_FS_OUTPUT">
-               <!-- per-mrt enable bit -->
-               <bitfield name="ENABLE_BLEND" low="0" high="7"/>
-               <bitfield name="INDEPENDENT_BLEND" pos="8" type="boolean"/>
-               <!-- a guess? -->
-               <bitfield name="SAMPLE_MASK" low="16" high="31"/>
-       </reg32>
-       <reg32 offset="0x20fa" name="RB_SAMPLE_COUNT_CONTROL">
-               <bitfield name="COPY" pos="1" type="boolean"/>
-               <bitfield name="ADDR" low="2" high="31" shr="2"/>
-       </reg32>
-       <!-- always 00000000 for binning pass, else 0000000f: -->
-       <reg32 offset="0x20fb" name="RB_RENDER_COMPONENTS">
-               <bitfield name="RT0" low="0" high="3"/>
-               <bitfield name="RT1" low="4" high="7"/>
-               <bitfield name="RT2" low="8" high="11"/>
-               <bitfield name="RT3" low="12" high="15"/>
-               <bitfield name="RT4" low="16" high="19"/>
-               <bitfield name="RT5" low="20" high="23"/>
-               <bitfield name="RT6" low="24" high="27"/>
-               <bitfield name="RT7" low="28" high="31"/>
-       </reg32>
-
-       <reg32 offset="0x20fc" name="RB_COPY_CONTROL">
-               <!-- not sure # of bits -->
-               <bitfield name="MSAA_RESOLVE" low="0" high="1" type="a3xx_msaa_samples"/>
-               <bitfield name="MODE" low="4" high="6" type="adreno_rb_copy_control_mode"/>
-               <bitfield name="FASTCLEAR" low="8" high="11" type="hex"/>
-               <bitfield name="GMEM_BASE" low="14" high="31" shr="14" type="hex"/>
-       </reg32>
-       <reg32 offset="0x20fd" name="RB_COPY_DEST_BASE">
-               <bitfield name="BASE" low="5" high="31" shr="5" type="hex"/>
-       </reg32>
-       <reg32 offset="0x20fe" name="RB_COPY_DEST_PITCH">
-               <doc>actually, appears to be pitch in bytes, so really is a stride</doc>
-               <!-- not actually sure about max pitch... -->
-               <bitfield name="PITCH" low="0" high="31" shr="5" type="uint"/>
-       </reg32>
-       <reg32 offset="0x20ff" name="RB_COPY_DEST_INFO">
-               <bitfield name="FORMAT" low="2" high="7" type="a4xx_color_fmt"/>
-               <bitfield name="SWAP" low="8" high="9" type="a3xx_color_swap"/>
-               <bitfield name="DITHER_MODE" low="10" high="11" type="adreno_rb_dither_mode"/>
-               <bitfield name="COMPONENT_ENABLE" low="14" high="17" type="hex"/>
-               <bitfield name="ENDIAN" low="18" high="20" type="adreno_rb_surface_endian"/>
-               <bitfield name="TILE" low="24" high="25" type="a4xx_tile_mode"/>
-       </reg32>
-       <reg32 offset="0x2100" name="RB_FS_OUTPUT_REG">
-               <!-- bit0 set except for binning pass.. -->
-               <bitfield name="MRT" low="0" high="3" type="uint"/>
-               <bitfield name="FRAG_WRITES_Z" pos="5" type="boolean"/>
-       </reg32>
-       <reg32 offset="0x2101" name="RB_DEPTH_CONTROL">
-               <!--
-                       guessing that this matches a2xx with the stencil fields
-                       moved out into RB_STENCIL_CONTROL?
-                -->
-               <bitfield name="FRAG_WRITES_Z" pos="0" type="boolean"/>
-               <bitfield name="Z_ENABLE" pos="1" type="boolean"/>
-               <bitfield name="Z_WRITE_ENABLE" pos="2" type="boolean"/>
-               <bitfield name="ZFUNC" low="4" high="6" type="adreno_compare_func"/>
-               <bitfield name="Z_CLAMP_ENABLE" pos="7" type="boolean"/>
-               <bitfield name="EARLY_Z_DISABLE" pos="16" type="boolean"/>
-               <bitfield name="FORCE_FRAGZ_TO_FS" pos="17" type="boolean"/>
-               <doc>Z_TEST_ENABLE bit is set for zfunc other than GL_ALWAYS or GL_NEVER</doc>
-               <bitfield name="Z_TEST_ENABLE" pos="31" type="boolean"/>
-       </reg32>
-       <reg32 offset="0x2102" name="RB_DEPTH_CLEAR"/>
-       <reg32 offset="0x2103" name="RB_DEPTH_INFO">
-               <bitfield name="DEPTH_FORMAT" low="0" high="1" type="a4xx_depth_format"/>
-               <doc>
-                       DEPTH_BASE is offset in GMEM to depth/stencil buffer, ie
-                       bin_w * bin_h / 1024 (possible rounded up to multiple of
-                       something??  ie. 39 becomes 40, 78 becomes 80.. 75 becomes
-                       80.. so maybe it needs to be multiple of 8??
-               </doc>
-               <bitfield name="DEPTH_BASE" low="12" high="31" shr="12" type="hex"/>
-       </reg32>
-       <reg32 offset="0x2104" name="RB_DEPTH_PITCH" shr="5" type="uint">
-               <doc>stride of depth/stencil buffer</doc>
-       </reg32>
-       <reg32 offset="0x2105" name="RB_DEPTH_PITCH2" shr="5" type="uint">
-               <doc>???</doc>
-       </reg32>
-       <reg32 offset="0x2106" name="RB_STENCIL_CONTROL">
-               <bitfield name="STENCIL_ENABLE" pos="0" type="boolean"/>
-               <bitfield name="STENCIL_ENABLE_BF" pos="1" type="boolean"/>
-               <!--
-                       set for stencil operations that require read from stencil
-                       buffer, but not for example for stencil clear (which does
-                       not require read).. so guessing this is analogous to
-                       READ_DEST_ENABLE for color buffer..
-                -->
-               <bitfield name="STENCIL_READ" pos="2" type="boolean"/>
-               <bitfield name="FUNC" low="8" high="10" type="adreno_compare_func"/>
-               <bitfield name="FAIL" low="11" high="13" type="adreno_stencil_op"/>
-               <bitfield name="ZPASS" low="14" high="16" type="adreno_stencil_op"/>
-               <bitfield name="ZFAIL" low="17" high="19" type="adreno_stencil_op"/>
-               <bitfield name="FUNC_BF" low="20" high="22" type="adreno_compare_func"/>
-               <bitfield name="FAIL_BF" low="23" high="25" type="adreno_stencil_op"/>
-               <bitfield name="ZPASS_BF" low="26" high="28" type="adreno_stencil_op"/>
-               <bitfield name="ZFAIL_BF" low="29" high="31" type="adreno_stencil_op"/>
-       </reg32>
-       <reg32 offset="0x2107" name="RB_STENCIL_CONTROL2">
-               <!--
-               This seems to be set by blob if there is a stencil buffer
-               at all in GMEM, regardless of whether it is enabled for
-               a particular draw (ie. RB_STENCIL_CONTROL).  Not really
-               sure if that is required or just a quirk of the blob
-               -->
-               <bitfield name="STENCIL_BUFFER" pos="0" type="boolean"/>
-       </reg32>
-       <reg32 offset="0x2108" name="RB_STENCIL_INFO">
-               <bitfield name="SEPARATE_STENCIL" pos="0" type="boolean"/>
-               <doc>Base address for stencil when not using interleaved depth/stencil</doc>
-               <bitfield name="STENCIL_BASE" low="12" high="31" shr="12" type="hex"/>
-       </reg32>
-       <reg32 offset="0x2109" name="RB_STENCIL_PITCH" shr="5" type="uint">
-               <doc>pitch of stencil buffer when not using interleaved depth/stencil</doc>
-       </reg32>
-
-       <reg32 offset="0x210b" name="RB_STENCILREFMASK" type="adreno_rb_stencilrefmask"/>
-       <reg32 offset="0x210c" name="RB_STENCILREFMASK_BF" type="adreno_rb_stencilrefmask"/>
-       <reg32 offset="0x210d" name="RB_BIN_OFFSET" type="adreno_reg_xy"/>
-       <array offset="0x2120" name="RB_VPORT_Z_CLAMP" stride="2" length="16">
-               <reg32 offset="0x0" name="MIN"/>
-               <reg32 offset="0x1" name="MAX"/>
-       </array>
-
-       <!-- RBBM registers -->
-       <reg32 offset="0x0000" name="RBBM_HW_VERSION"/>
-       <reg32 offset="0x0002" name="RBBM_HW_CONFIGURATION"/>
-       <array offset="0x4" name="RBBM_CLOCK_CTL_TP" stride="1" length="4">
-               <reg32 offset="0x0" name="REG"/>
-       </array>
-       <array offset="0x8" name="RBBM_CLOCK_CTL2_TP" stride="1" length="4">
-               <reg32 offset="0x0" name="REG"/>
-       </array>
-       <array offset="0xc" name="RBBM_CLOCK_HYST_TP" stride="1" length="4">
-               <reg32 offset="0x0" name="REG"/>
-       </array>
-       <array offset="0x10" name="RBBM_CLOCK_DELAY_TP" stride="1" length="4">
-               <reg32 offset="0x0" name="REG"/>
-       </array>
-       <reg32 offset="0x0014" name="RBBM_CLOCK_CTL_UCHE "/>
-       <reg32 offset="0x0015" name="RBBM_CLOCK_CTL2_UCHE"/>
-       <reg32 offset="0x0016" name="RBBM_CLOCK_CTL3_UCHE"/>
-       <reg32 offset="0x0017" name="RBBM_CLOCK_CTL4_UCHE"/>
-       <reg32 offset="0x0018" name="RBBM_CLOCK_HYST_UCHE"/>
-       <reg32 offset="0x0019" name="RBBM_CLOCK_DELAY_UCHE"/>
-       <reg32 offset="0x001a" name="RBBM_CLOCK_MODE_GPC"/>
-       <reg32 offset="0x001b" name="RBBM_CLOCK_DELAY_GPC"/>
-       <reg32 offset="0x001c" name="RBBM_CLOCK_HYST_GPC"/>
-       <reg32 offset="0x001d" name="RBBM_CLOCK_CTL_TSE_RAS_RBBM"/>
-       <reg32 offset="0x001e" name="RBBM_CLOCK_HYST_TSE_RAS_RBBM"/>
-       <reg32 offset="0x001f" name="RBBM_CLOCK_DELAY_TSE_RAS_RBBM"/>
-       <reg32 offset="0x0020" name="RBBM_CLOCK_CTL"/>
-       <reg32 offset="0x0021" name="RBBM_SP_HYST_CNT"/>
-       <reg32 offset="0x0022" name="RBBM_SW_RESET_CMD"/>
-       <reg32 offset="0x0023" name="RBBM_AHB_CTL0"/>
-       <reg32 offset="0x0024" name="RBBM_AHB_CTL1"/>
-       <reg32 offset="0x0025" name="RBBM_AHB_CMD"/>
-       <reg32 offset="0x0026" name="RBBM_RB_SUB_BLOCK_SEL_CTL"/>
-       <reg32 offset="0x0028" name="RBBM_RAM_ACC_63_32"/>
-       <reg32 offset="0x002b" name="RBBM_WAIT_IDLE_CLOCKS_CTL"/>
-       <reg32 offset="0x002f" name="RBBM_INTERFACE_HANG_INT_CTL"/>
-       <reg32 offset="0x0034" name="RBBM_INTERFACE_HANG_MASK_CTL4"/>
-       <reg32 offset="0x0036" name="RBBM_INT_CLEAR_CMD"/>
-       <reg32 offset="0x0037" name="RBBM_INT_0_MASK"/>
-       <reg32 offset="0x003e" name="RBBM_RBBM_CTL"/>
-       <reg32 offset="0x003f" name="RBBM_AHB_DEBUG_CTL"/>
-       <reg32 offset="0x0041" name="RBBM_VBIF_DEBUG_CTL"/>
-       <reg32 offset="0x0042" name="RBBM_CLOCK_CTL2"/>
-       <reg32 offset="0x0045" name="RBBM_BLOCK_SW_RESET_CMD"/>
-       <reg32 offset="0x0047" name="RBBM_RESET_CYCLES"/>
-       <reg32 offset="0x0049" name="RBBM_EXT_TRACE_BUS_CTL"/>
-       <reg32 offset="0x004a" name="RBBM_CFG_DEBBUS_SEL_A"/>
-       <reg32 offset="0x004b" name="RBBM_CFG_DEBBUS_SEL_B"/>
-       <reg32 offset="0x004c" name="RBBM_CFG_DEBBUS_SEL_C"/>
-       <reg32 offset="0x004d" name="RBBM_CFG_DEBBUS_SEL_D"/>
-       <reg32 offset="0x0098" name="RBBM_POWER_CNTL_IP">
-               <bitfield name="SW_COLLAPSE" pos="0" type="boolean"/>
-               <bitfield name="SP_TP_PWR_ON" pos="20" type="boolean"/>
-       </reg32>
-       <reg32 offset="0x009c" name="RBBM_PERFCTR_CP_0_LO"/>
-       <reg32 offset="0x009d" name="RBBM_PERFCTR_CP_0_HI"/>
-       <reg32 offset="0x009e" name="RBBM_PERFCTR_CP_1_LO"/>
-       <reg32 offset="0x009f" name="RBBM_PERFCTR_CP_1_HI"/>
-       <reg32 offset="0x00a0" name="RBBM_PERFCTR_CP_2_LO"/>
-       <reg32 offset="0x00a1" name="RBBM_PERFCTR_CP_2_HI"/>
-       <reg32 offset="0x00a2" name="RBBM_PERFCTR_CP_3_LO"/>
-       <reg32 offset="0x00a3" name="RBBM_PERFCTR_CP_3_HI"/>
-       <reg32 offset="0x00a4" name="RBBM_PERFCTR_CP_4_LO"/>
-       <reg32 offset="0x00a5" name="RBBM_PERFCTR_CP_4_HI"/>
-       <reg32 offset="0x00a6" name="RBBM_PERFCTR_CP_5_LO"/>
-       <reg32 offset="0x00a7" name="RBBM_PERFCTR_CP_5_HI"/>
-       <reg32 offset="0x00a8" name="RBBM_PERFCTR_CP_6_LO"/>
-       <reg32 offset="0x00a9" name="RBBM_PERFCTR_CP_6_HI"/>
-       <reg32 offset="0x00aa" name="RBBM_PERFCTR_CP_7_LO"/>
-       <reg32 offset="0x00ab" name="RBBM_PERFCTR_CP_7_HI"/>
-       <reg32 offset="0x00ac" name="RBBM_PERFCTR_RBBM_0_LO"/>
-       <reg32 offset="0x00ad" name="RBBM_PERFCTR_RBBM_0_HI"/>
-       <reg32 offset="0x00ae" name="RBBM_PERFCTR_RBBM_1_LO"/>
-       <reg32 offset="0x00af" name="RBBM_PERFCTR_RBBM_1_HI"/>
-       <reg32 offset="0x00b0" name="RBBM_PERFCTR_RBBM_2_LO"/>
-       <reg32 offset="0x00b1" name="RBBM_PERFCTR_RBBM_2_HI"/>
-       <reg32 offset="0x00b2" name="RBBM_PERFCTR_RBBM_3_LO"/>
-       <reg32 offset="0x00b3" name="RBBM_PERFCTR_RBBM_3_HI"/>
-       <reg32 offset="0x00b4" name="RBBM_PERFCTR_PC_0_LO"/>
-       <reg32 offset="0x00b5" name="RBBM_PERFCTR_PC_0_HI"/>
-       <reg32 offset="0x00b6" name="RBBM_PERFCTR_PC_1_LO"/>
-       <reg32 offset="0x00b7" name="RBBM_PERFCTR_PC_1_HI"/>
-       <reg32 offset="0x00b8" name="RBBM_PERFCTR_PC_2_LO"/>
-       <reg32 offset="0x00b9" name="RBBM_PERFCTR_PC_2_HI"/>
-       <reg32 offset="0x00ba" name="RBBM_PERFCTR_PC_3_LO"/>
-       <reg32 offset="0x00bb" name="RBBM_PERFCTR_PC_3_HI"/>
-       <reg32 offset="0x00bc" name="RBBM_PERFCTR_PC_4_LO"/>
-       <reg32 offset="0x00bd" name="RBBM_PERFCTR_PC_4_HI"/>
-       <reg32 offset="0x00be" name="RBBM_PERFCTR_PC_5_LO"/>
-       <reg32 offset="0x00bf" name="RBBM_PERFCTR_PC_5_HI"/>
-       <reg32 offset="0x00c0" name="RBBM_PERFCTR_PC_6_LO"/>
-       <reg32 offset="0x00c1" name="RBBM_PERFCTR_PC_6_HI"/>
-       <reg32 offset="0x00c2" name="RBBM_PERFCTR_PC_7_LO"/>
-       <reg32 offset="0x00c3" name="RBBM_PERFCTR_PC_7_HI"/>
-       <reg32 offset="0x00c4" name="RBBM_PERFCTR_VFD_0_LO"/>
-       <reg32 offset="0x00c5" name="RBBM_PERFCTR_VFD_0_HI"/>
-       <reg32 offset="0x00c6" name="RBBM_PERFCTR_VFD_1_LO"/>
-       <reg32 offset="0x00c7" name="RBBM_PERFCTR_VFD_1_HI"/>
-       <reg32 offset="0x00c8" name="RBBM_PERFCTR_VFD_2_LO"/>
-       <reg32 offset="0x00c9" name="RBBM_PERFCTR_VFD_2_HI"/>
-       <reg32 offset="0x00ca" name="RBBM_PERFCTR_VFD_3_LO"/>
-       <reg32 offset="0x00cb" name="RBBM_PERFCTR_VFD_3_HI"/>
-       <reg32 offset="0x00cc" name="RBBM_PERFCTR_VFD_4_LO"/>
-       <reg32 offset="0x00cd" name="RBBM_PERFCTR_VFD_4_HI"/>
-       <reg32 offset="0x00ce" name="RBBM_PERFCTR_VFD_5_LO"/>
-       <reg32 offset="0x00cf" name="RBBM_PERFCTR_VFD_5_HI"/>
-       <reg32 offset="0x00d0" name="RBBM_PERFCTR_VFD_6_LO"/>
-       <reg32 offset="0x00d1" name="RBBM_PERFCTR_VFD_6_HI"/>
-       <reg32 offset="0x00d2" name="RBBM_PERFCTR_VFD_7_LO"/>
-       <reg32 offset="0x00d3" name="RBBM_PERFCTR_VFD_7_HI"/>
-       <reg32 offset="0x00d4" name="RBBM_PERFCTR_HLSQ_0_LO"/>
-       <reg32 offset="0x00d5" name="RBBM_PERFCTR_HLSQ_0_HI"/>
-       <reg32 offset="0x00d6" name="RBBM_PERFCTR_HLSQ_1_LO"/>
-       <reg32 offset="0x00d7" name="RBBM_PERFCTR_HLSQ_1_HI"/>
-       <reg32 offset="0x00d8" name="RBBM_PERFCTR_HLSQ_2_LO"/>
-       <reg32 offset="0x00d9" name="RBBM_PERFCTR_HLSQ_2_HI"/>
-       <reg32 offset="0x00da" name="RBBM_PERFCTR_HLSQ_3_LO"/>
-       <reg32 offset="0x00db" name="RBBM_PERFCTR_HLSQ_3_HI"/>
-       <reg32 offset="0x00dc" name="RBBM_PERFCTR_HLSQ_4_LO"/>
-       <reg32 offset="0x00dd" name="RBBM_PERFCTR_HLSQ_4_HI"/>
-       <reg32 offset="0x00de" name="RBBM_PERFCTR_HLSQ_5_LO"/>
-       <reg32 offset="0x00df" name="RBBM_PERFCTR_HLSQ_5_HI"/>
-       <reg32 offset="0x00e0" name="RBBM_PERFCTR_HLSQ_6_LO"/>
-       <reg32 offset="0x00e1" name="RBBM_PERFCTR_HLSQ_6_HI"/>
-       <reg32 offset="0x00e2" name="RBBM_PERFCTR_HLSQ_7_LO"/>
-       <reg32 offset="0x00e3" name="RBBM_PERFCTR_HLSQ_7_HI"/>
-       <reg32 offset="0x00e4" name="RBBM_PERFCTR_VPC_0_LO"/>
-       <reg32 offset="0x00e5" name="RBBM_PERFCTR_VPC_0_HI"/>
-       <reg32 offset="0x00e6" name="RBBM_PERFCTR_VPC_1_LO"/>
-       <reg32 offset="0x00e7" name="RBBM_PERFCTR_VPC_1_HI"/>
-       <reg32 offset="0x00e8" name="RBBM_PERFCTR_VPC_2_LO"/>
-       <reg32 offset="0x00e9" name="RBBM_PERFCTR_VPC_2_HI"/>
-       <reg32 offset="0x00ea" name="RBBM_PERFCTR_VPC_3_LO"/>
-       <reg32 offset="0x00eb" name="RBBM_PERFCTR_VPC_3_HI"/>
-       <reg32 offset="0x00ec" name="RBBM_PERFCTR_CCU_0_LO"/>
-       <reg32 offset="0x00ed" name="RBBM_PERFCTR_CCU_0_HI"/>
-       <reg32 offset="0x00ee" name="RBBM_PERFCTR_CCU_1_LO"/>
-       <reg32 offset="0x00ef" name="RBBM_PERFCTR_CCU_1_HI"/>
-       <reg32 offset="0x00f0" name="RBBM_PERFCTR_CCU_2_LO"/>
-       <reg32 offset="0x00f1" name="RBBM_PERFCTR_CCU_2_HI"/>
-       <reg32 offset="0x00f2" name="RBBM_PERFCTR_CCU_3_LO"/>
-       <reg32 offset="0x00f3" name="RBBM_PERFCTR_CCU_3_HI"/>
-       <reg32 offset="0x00f4" name="RBBM_PERFCTR_TSE_0_LO"/>
-       <reg32 offset="0x00f5" name="RBBM_PERFCTR_TSE_0_HI"/>
-       <reg32 offset="0x00f6" name="RBBM_PERFCTR_TSE_1_LO"/>
-       <reg32 offset="0x00f7" name="RBBM_PERFCTR_TSE_1_HI"/>
-       <reg32 offset="0x00f8" name="RBBM_PERFCTR_TSE_2_LO"/>
-       <reg32 offset="0x00f9" name="RBBM_PERFCTR_TSE_2_HI"/>
-       <reg32 offset="0x00fa" name="RBBM_PERFCTR_TSE_3_LO"/>
-       <reg32 offset="0x00fb" name="RBBM_PERFCTR_TSE_3_HI"/>
-       <reg32 offset="0x00fc" name="RBBM_PERFCTR_RAS_0_LO"/>
-       <reg32 offset="0x00fd" name="RBBM_PERFCTR_RAS_0_HI"/>
-       <reg32 offset="0x00fe" name="RBBM_PERFCTR_RAS_1_LO"/>
-       <reg32 offset="0x00ff" name="RBBM_PERFCTR_RAS_1_HI"/>
-       <reg32 offset="0x0100" name="RBBM_PERFCTR_RAS_2_LO"/>
-       <reg32 offset="0x0101" name="RBBM_PERFCTR_RAS_2_HI"/>
-       <reg32 offset="0x0102" name="RBBM_PERFCTR_RAS_3_LO"/>
-       <reg32 offset="0x0103" name="RBBM_PERFCTR_RAS_3_HI"/>
-       <reg32 offset="0x0104" name="RBBM_PERFCTR_UCHE_0_LO"/>
-       <reg32 offset="0x0105" name="RBBM_PERFCTR_UCHE_0_HI"/>
-       <reg32 offset="0x0106" name="RBBM_PERFCTR_UCHE_1_LO"/>
-       <reg32 offset="0x0107" name="RBBM_PERFCTR_UCHE_1_HI"/>
-       <reg32 offset="0x0108" name="RBBM_PERFCTR_UCHE_2_LO"/>
-       <reg32 offset="0x0109" name="RBBM_PERFCTR_UCHE_2_HI"/>
-       <reg32 offset="0x010a" name="RBBM_PERFCTR_UCHE_3_LO"/>
-       <reg32 offset="0x010b" name="RBBM_PERFCTR_UCHE_3_HI"/>
-       <reg32 offset="0x010c" name="RBBM_PERFCTR_UCHE_4_LO"/>
-       <reg32 offset="0x010d" name="RBBM_PERFCTR_UCHE_4_HI"/>
-       <reg32 offset="0x010e" name="RBBM_PERFCTR_UCHE_5_LO"/>
-       <reg32 offset="0x010f" name="RBBM_PERFCTR_UCHE_5_HI"/>
-       <reg32 offset="0x0110" name="RBBM_PERFCTR_UCHE_6_LO"/>
-       <reg32 offset="0x0111" name="RBBM_PERFCTR_UCHE_6_HI"/>
-       <reg32 offset="0x0112" name="RBBM_PERFCTR_UCHE_7_LO"/>
-       <reg32 offset="0x0113" name="RBBM_PERFCTR_UCHE_7_HI"/>
-       <reg32 offset="0x0114" name="RBBM_PERFCTR_TP_0_LO"/>
-       <reg32 offset="0x0115" name="RBBM_PERFCTR_TP_0_HI"/>
-       <reg32 offset="0x0116" name="RBBM_PERFCTR_TP_1_LO"/>
-       <reg32 offset="0x0117" name="RBBM_PERFCTR_TP_1_HI"/>
-       <reg32 offset="0x0118" name="RBBM_PERFCTR_TP_2_LO"/>
-       <reg32 offset="0x0119" name="RBBM_PERFCTR_TP_2_HI"/>
-       <reg32 offset="0x011a" name="RBBM_PERFCTR_TP_3_LO"/>
-       <reg32 offset="0x011b" name="RBBM_PERFCTR_TP_3_HI"/>
-       <reg32 offset="0x011c" name="RBBM_PERFCTR_TP_4_LO"/>
-       <reg32 offset="0x011d" name="RBBM_PERFCTR_TP_4_HI"/>
-       <reg32 offset="0x011e" name="RBBM_PERFCTR_TP_5_LO"/>
-       <reg32 offset="0x011f" name="RBBM_PERFCTR_TP_5_HI"/>
-       <reg32 offset="0x0120" name="RBBM_PERFCTR_TP_6_LO"/>
-       <reg32 offset="0x0121" name="RBBM_PERFCTR_TP_6_HI"/>
-       <reg32 offset="0x0122" name="RBBM_PERFCTR_TP_7_LO"/>
-       <reg32 offset="0x0123" name="RBBM_PERFCTR_TP_7_HI"/>
-       <reg32 offset="0x0124" name="RBBM_PERFCTR_SP_0_LO"/>
-       <reg32 offset="0x0125" name="RBBM_PERFCTR_SP_0_HI"/>
-       <reg32 offset="0x0126" name="RBBM_PERFCTR_SP_1_LO"/>
-       <reg32 offset="0x0127" name="RBBM_PERFCTR_SP_1_HI"/>
-       <reg32 offset="0x0128" name="RBBM_PERFCTR_SP_2_LO"/>
-       <reg32 offset="0x0129" name="RBBM_PERFCTR_SP_2_HI"/>
-       <reg32 offset="0x012a" name="RBBM_PERFCTR_SP_3_LO"/>
-       <reg32 offset="0x012b" name="RBBM_PERFCTR_SP_3_HI"/>
-       <reg32 offset="0x012c" name="RBBM_PERFCTR_SP_4_LO"/>
-       <reg32 offset="0x012d" name="RBBM_PERFCTR_SP_4_HI"/>
-       <reg32 offset="0x012e" name="RBBM_PERFCTR_SP_5_LO"/>
-       <reg32 offset="0x012f" name="RBBM_PERFCTR_SP_5_HI"/>
-       <reg32 offset="0x0130" name="RBBM_PERFCTR_SP_6_LO"/>
-       <reg32 offset="0x0131" name="RBBM_PERFCTR_SP_6_HI"/>
-       <reg32 offset="0x0132" name="RBBM_PERFCTR_SP_7_LO"/>
-       <reg32 offset="0x0133" name="RBBM_PERFCTR_SP_7_HI"/>
-       <reg32 offset="0x0134" name="RBBM_PERFCTR_SP_8_LO"/>
-       <reg32 offset="0x0135" name="RBBM_PERFCTR_SP_8_HI"/>
-       <reg32 offset="0x0136" name="RBBM_PERFCTR_SP_9_LO"/>
-       <reg32 offset="0x0137" name="RBBM_PERFCTR_SP_9_HI"/>
-       <reg32 offset="0x0138" name="RBBM_PERFCTR_SP_10_LO"/>
-       <reg32 offset="0x0139" name="RBBM_PERFCTR_SP_10_HI"/>
-       <reg32 offset="0x013a" name="RBBM_PERFCTR_SP_11_LO"/>
-       <reg32 offset="0x013b" name="RBBM_PERFCTR_SP_11_HI"/>
-       <reg32 offset="0x013c" name="RBBM_PERFCTR_RB_0_LO"/>
-       <reg32 offset="0x013d" name="RBBM_PERFCTR_RB_0_HI"/>
-       <reg32 offset="0x013e" name="RBBM_PERFCTR_RB_1_LO"/>
-       <reg32 offset="0x013f" name="RBBM_PERFCTR_RB_1_HI"/>
-       <reg32 offset="0x0140" name="RBBM_PERFCTR_RB_2_LO"/>
-       <reg32 offset="0x0141" name="RBBM_PERFCTR_RB_2_HI"/>
-       <reg32 offset="0x0142" name="RBBM_PERFCTR_RB_3_LO"/>
-       <reg32 offset="0x0143" name="RBBM_PERFCTR_RB_3_HI"/>
-       <reg32 offset="0x0144" name="RBBM_PERFCTR_RB_4_LO"/>
-       <reg32 offset="0x0145" name="RBBM_PERFCTR_RB_4_HI"/>
-       <reg32 offset="0x0146" name="RBBM_PERFCTR_RB_5_LO"/>
-       <reg32 offset="0x0147" name="RBBM_PERFCTR_RB_5_HI"/>
-       <reg32 offset="0x0148" name="RBBM_PERFCTR_RB_6_LO"/>
-       <reg32 offset="0x0149" name="RBBM_PERFCTR_RB_6_HI"/>
-       <reg32 offset="0x014a" name="RBBM_PERFCTR_RB_7_LO"/>
-       <reg32 offset="0x014b" name="RBBM_PERFCTR_RB_7_HI"/>
-       <reg32 offset="0x014c" name="RBBM_PERFCTR_VSC_0_LO"/>
-       <reg32 offset="0x014d" name="RBBM_PERFCTR_VSC_0_HI"/>
-       <reg32 offset="0x014e" name="RBBM_PERFCTR_VSC_1_LO"/>
-       <reg32 offset="0x014f" name="RBBM_PERFCTR_VSC_1_HI"/>
-       <reg32 offset="0x0166" name="RBBM_PERFCTR_PWR_0_LO"/>
-       <reg32 offset="0x0167" name="RBBM_PERFCTR_PWR_0_HI"/>
-       <reg32 offset="0x0168" name="RBBM_PERFCTR_PWR_1_LO"/>
-       <reg32 offset="0x0169" name="RBBM_PERFCTR_PWR_1_HI"/>
-       <reg32 offset="0x016e" name="RBBM_ALWAYSON_COUNTER_LO"/>
-       <reg32 offset="0x016f" name="RBBM_ALWAYSON_COUNTER_HI"/>
-       <array offset="0x0068" name="RBBM_CLOCK_CTL_SP" stride="1" length="4">
-               <reg32 offset="0x0" name="REG"/>
-       </array>
-       <array offset="0x006c" name="RBBM_CLOCK_CTL2_SP" stride="1" length="4">
-               <reg32 offset="0x0" name="REG"/>
-       </array>
-       <array offset="0x0070" name="RBBM_CLOCK_HYST_SP" stride="1" length="4">
-               <reg32 offset="0x0" name="REG"/>
-       </array>
-       <array offset="0x0074" name="RBBM_CLOCK_DELAY_SP" stride="1" length="4">
-               <reg32 offset="0x0" name="REG"/>
-       </array>
-       <array offset="0x0078" name="RBBM_CLOCK_CTL_RB" stride="1" length="4">
-               <reg32 offset="0x0" name="REG"/>
-       </array>
-       <array offset="0x007c" name="RBBM_CLOCK_CTL2_RB" stride="1" length="4">
-               <reg32 offset="0x0" name="REG"/>
-       </array>
-       <array offset="0x0082" name="RBBM_CLOCK_CTL_MARB_CCU" stride="1" length="4">
-               <reg32 offset="0x0" name="REG"/>
-       </array>
-       <array offset="0x0086" name="RBBM_CLOCK_HYST_RB_MARB_CCU" stride="1" length="4">
-               <reg32 offset="0x0" name="REG"/>
-       </array>
-       <reg32 offset="0x0080" name="RBBM_CLOCK_HYST_COM_DCOM"/>
-       <reg32 offset="0x0081" name="RBBM_CLOCK_CTL_COM_DCOM"/>
-       <reg32 offset="0x008a" name="RBBM_CLOCK_CTL_HLSQ"/>
-       <reg32 offset="0x008b" name="RBBM_CLOCK_HYST_HLSQ"/>
-       <reg32 offset="0x008c" name="RBBM_CLOCK_DELAY_HLSQ"/>
-       <bitset name="A4XX_CGC_HLSQ">
-               <bitfield name="EARLY_CYC" low="20" high="22" type="uint"/>
-       </bitset>
-       <reg32 offset="0x008d" name="RBBM_CLOCK_DELAY_COM_DCOM"/>
-       <array offset="0x008e" name="RBBM_CLOCK_DELAY_RB_MARB_CCU_L1" stride="1" length="4">
-               <reg32 offset="0x0" name="REG"/>
-       </array>
-       <bitset name="A4XX_INT0">
-               <bitfield name="RBBM_GPU_IDLE" pos="0" type="boolean"/>
-               <bitfield name="RBBM_AHB_ERROR" pos="1" type="boolean"/>
-               <bitfield name="RBBM_REG_TIMEOUT" pos="2" type="boolean"/>
-               <bitfield name="RBBM_ME_MS_TIMEOUT" pos="3" type="boolean"/>
-               <bitfield name="RBBM_PFP_MS_TIMEOUT" pos="4" type="boolean"/>
-               <bitfield name="RBBM_ATB_BUS_OVERFLOW" pos="5" type="boolean"/>
-               <bitfield name="VFD_ERROR" pos="6" type="boolean"/>
-               <bitfield name="CP_SW_INT" pos="7" type="boolean"/>
-               <bitfield name="CP_T0_PACKET_IN_IB" pos="8" type="boolean"/>
-               <bitfield name="CP_OPCODE_ERROR" pos="9" type="boolean"/>
-               <bitfield name="CP_RESERVED_BIT_ERROR" pos="10" type="boolean"/>
-               <bitfield name="CP_HW_FAULT" pos="11" type="boolean"/>
-               <bitfield name="CP_DMA" pos="12" type="boolean"/>
-               <bitfield name="CP_IB2_INT" pos="13" type="boolean"/>
-               <bitfield name="CP_IB1_INT" pos="14" type="boolean"/>
-               <bitfield name="CP_RB_INT" pos="15" type="boolean"/>
-               <bitfield name="CP_REG_PROTECT_FAULT" pos="16" type="boolean"/>
-               <bitfield name="CP_RB_DONE_TS" pos="17" type="boolean"/>
-               <bitfield name="CP_VS_DONE_TS" pos="18" type="boolean"/>
-               <bitfield name="CP_PS_DONE_TS" pos="19" type="boolean"/>
-               <bitfield name="CACHE_FLUSH_TS" pos="20" type="boolean"/>
-               <bitfield name="CP_AHB_ERROR_HALT" pos="21" type="boolean"/>
-               <bitfield name="MISC_HANG_DETECT" pos="24" type="boolean"/>
-               <bitfield name="UCHE_OOB_ACCESS" pos="25" type="boolean"/>
-       </bitset>
-
-       <reg32 offset="0x0099" name="RBBM_SP_REGFILE_SLEEP_CNTL_0"/>
-       <reg32 offset="0x009a" name="RBBM_SP_REGFILE_SLEEP_CNTL_1"/>
-       <reg32 offset="0x0170" name="RBBM_PERFCTR_CTL"/>
-       <reg32 offset="0x0171" name="RBBM_PERFCTR_LOAD_CMD0"/>
-       <reg32 offset="0x0172" name="RBBM_PERFCTR_LOAD_CMD1"/>
-       <reg32 offset="0x0173" name="RBBM_PERFCTR_LOAD_CMD2"/>
-       <reg32 offset="0x0174" name="RBBM_PERFCTR_LOAD_VALUE_LO"/>
-       <reg32 offset="0x0175" name="RBBM_PERFCTR_LOAD_VALUE_HI"/>
-       <reg32 offset="0x0176" name="RBBM_PERFCTR_RBBM_SEL_0" type="a4xx_rbbm_perfcounter_select"/>
-       <reg32 offset="0x0177" name="RBBM_PERFCTR_RBBM_SEL_1" type="a4xx_rbbm_perfcounter_select"/>
-       <reg32 offset="0x0178" name="RBBM_PERFCTR_RBBM_SEL_2" type="a4xx_rbbm_perfcounter_select"/>
-       <reg32 offset="0x0179" name="RBBM_PERFCTR_RBBM_SEL_3" type="a4xx_rbbm_perfcounter_select"/>
-       <reg32 offset="0x017a" name="RBBM_GPU_BUSY_MASKED"/>
-       <reg32 offset="0x017d" name="RBBM_INT_0_STATUS"/>
-       <reg32 offset="0x0182" name="RBBM_CLOCK_STATUS"/>
-       <reg32 offset="0x0189" name="RBBM_AHB_STATUS"/>
-       <reg32 offset="0x018c" name="RBBM_AHB_ME_SPLIT_STATUS"/>
-       <reg32 offset="0x018d" name="RBBM_AHB_PFP_SPLIT_STATUS"/>
-       <reg32 offset="0x018f" name="RBBM_AHB_ERROR_STATUS"/>
-       <reg32 offset="0x0191" name="RBBM_STATUS">
-               <bitfield name="HI_BUSY" pos="0" type="boolean"/>
-               <bitfield name="CP_ME_BUSY" pos="1" type="boolean"/>
-               <bitfield name="CP_PFP_BUSY" pos="2" type="boolean"/>
-               <bitfield name="CP_NRT_BUSY" pos="14" type="boolean"/>
-               <bitfield name="VBIF_BUSY" pos="15" type="boolean"/>
-               <bitfield name="TSE_BUSY" pos="16" type="boolean"/>
-               <bitfield name="RAS_BUSY" pos="17" type="boolean"/>
-               <bitfield name="RB_BUSY" pos="18" type="boolean"/>
-               <bitfield name="PC_DCALL_BUSY" pos="19" type="boolean"/>
-               <bitfield name="PC_VSD_BUSY" pos="20" type="boolean"/>
-               <bitfield name="VFD_BUSY" pos="21" type="boolean"/>
-               <bitfield name="VPC_BUSY" pos="22" type="boolean"/>
-               <bitfield name="UCHE_BUSY" pos="23" type="boolean"/>
-               <bitfield name="SP_BUSY" pos="24" type="boolean"/>
-               <bitfield name="TPL1_BUSY" pos="25" type="boolean"/>
-               <bitfield name="MARB_BUSY" pos="26" type="boolean"/>
-               <bitfield name="VSC_BUSY" pos="27" type="boolean"/>
-               <bitfield name="ARB_BUSY" pos="28" type="boolean"/>
-               <bitfield name="HLSQ_BUSY" pos="29" type="boolean"/>
-               <bitfield name="GPU_BUSY_NOHC" pos="30" type="boolean"/>
-               <bitfield name="GPU_BUSY" pos="31" type="boolean"/>
-       </reg32>
-       <reg32 offset="0x019f" name="RBBM_INTERFACE_RRDY_STATUS5"/>
-       <reg32 offset="0x01b0" name="RBBM_POWER_STATUS">
-               <bitfield name="SP_TP_PWR_ON" pos="20" type="boolean"/>
-       </reg32>
-       <reg32 offset="0x01b8" name="RBBM_WAIT_IDLE_CLOCKS_CTL2"/>
-
-       <!-- CP registers -->
-       <reg32 offset="0x0228" name="CP_SCRATCH_UMASK"/>
-       <reg32 offset="0x0229" name="CP_SCRATCH_ADDR"/>
-       <reg32 offset="0x0200" name="CP_RB_BASE"/>
-       <reg32 offset="0x0201" name="CP_RB_CNTL"/>
-       <reg32 offset="0x0205" name="CP_RB_WPTR"/>
-       <reg32 offset="0x0203" name="CP_RB_RPTR_ADDR"/>
-       <reg32 offset="0x0204" name="CP_RB_RPTR"/>
-       <reg32 offset="0x0206" name="CP_IB1_BASE"/>
-       <reg32 offset="0x0207" name="CP_IB1_BUFSZ"/>
-       <reg32 offset="0x0208" name="CP_IB2_BASE"/>
-       <reg32 offset="0x0209" name="CP_IB2_BUFSZ"/>
-       <reg32 offset="0x020c" name="CP_ME_NRT_ADDR"/>
-       <reg32 offset="0x020d" name="CP_ME_NRT_DATA"/>
-       <reg32 offset="0x0217" name="CP_ME_RB_DONE_DATA"/>
-       <reg32 offset="0x0219" name="CP_QUEUE_THRESH2"/>
-       <reg32 offset="0x021b" name="CP_MERCIU_SIZE"/>
-       <reg32 offset="0x021c" name="CP_ROQ_ADDR"/>
-       <reg32 offset="0x021d" name="CP_ROQ_DATA"/>
-       <reg32 offset="0x021e" name="CP_MEQ_ADDR"/>
-       <reg32 offset="0x021f" name="CP_MEQ_DATA"/>
-       <reg32 offset="0x0220" name="CP_MERCIU_ADDR"/>
-       <reg32 offset="0x0221" name="CP_MERCIU_DATA"/>
-       <reg32 offset="0x0222" name="CP_MERCIU_DATA2"/>
-       <reg32 offset="0x0223" name="CP_PFP_UCODE_ADDR"/>
-       <reg32 offset="0x0224" name="CP_PFP_UCODE_DATA"/>
-       <reg32 offset="0x0225" name="CP_ME_RAM_WADDR"/>
-       <reg32 offset="0x0226" name="CP_ME_RAM_RADDR"/>
-       <reg32 offset="0x0227" name="CP_ME_RAM_DATA"/>
-       <reg32 offset="0x022a" name="CP_PREEMPT"/>
-       <reg32 offset="0x022c" name="CP_CNTL"/>
-       <reg32 offset="0x022d" name="CP_ME_CNTL"/>
-       <reg32 offset="0x022e" name="CP_DEBUG"/>
-       <reg32 offset="0x0231" name="CP_DEBUG_ECO_CONTROL"/>
-       <reg32 offset="0x0232" name="CP_DRAW_STATE_ADDR"/>
-       <array offset="0x0240" name="CP_PROTECT" stride="1" length="16">
-               <reg32 offset="0x0" name="REG" type="adreno_cp_protect"/>
-       </array>
-       <reg32 offset="0x0250" name="CP_PROTECT_CTRL"/>
-       <reg32 offset="0x04c0" name="CP_ST_BASE"/>
-       <reg32 offset="0x04ce" name="CP_STQ_AVAIL"/>
-       <reg32 offset="0x04d0" name="CP_MERCIU_STAT"/>
-       <reg32 offset="0x04d2" name="CP_WFI_PEND_CTR"/>
-       <reg32 offset="0x04d8" name="CP_HW_FAULT"/>
-       <reg32 offset="0x04da" name="CP_PROTECT_STATUS"/>
-       <reg32 offset="0x04dd" name="CP_EVENTS_IN_FLIGHT"/>
-       <reg32 offset="0x0500" name="CP_PERFCTR_CP_SEL_0" type="a4xx_cp_perfcounter_select"/>
-       <reg32 offset="0x0501" name="CP_PERFCTR_CP_SEL_1" type="a4xx_cp_perfcounter_select"/>
-       <reg32 offset="0x0502" name="CP_PERFCTR_CP_SEL_2" type="a4xx_cp_perfcounter_select"/>
-       <reg32 offset="0x0503" name="CP_PERFCTR_CP_SEL_3" type="a4xx_cp_perfcounter_select"/>
-       <reg32 offset="0x0504" name="CP_PERFCTR_CP_SEL_4" type="a4xx_cp_perfcounter_select"/>
-       <reg32 offset="0x0505" name="CP_PERFCTR_CP_SEL_5" type="a4xx_cp_perfcounter_select"/>
-       <reg32 offset="0x0506" name="CP_PERFCTR_CP_SEL_6" type="a4xx_cp_perfcounter_select"/>
-       <reg32 offset="0x0507" name="CP_PERFCTR_CP_SEL_7" type="a4xx_cp_perfcounter_select"/>
-       <reg32 offset="0x050b" name="CP_PERFCOMBINER_SELECT"/>
-       <array offset="0x0578" name="CP_SCRATCH" stride="1" length="23">
-               <reg32 offset="0x0" name="REG"/>
-       </array>
-
-
-       <!-- SP registers -->
-       <reg32 offset="0x0ec0" name="SP_VS_STATUS"/>
-       <reg32 offset="0x0ec3" name="SP_MODE_CONTROL"/>
-
-       <reg32 offset="0x0ec4" name="SP_PERFCTR_SP_SEL_0" type="a4xx_sp_perfcounter_select"/>
-       <reg32 offset="0x0ec5" name="SP_PERFCTR_SP_SEL_1" type="a4xx_sp_perfcounter_select"/>
-       <reg32 offset="0x0ec6" name="SP_PERFCTR_SP_SEL_2" type="a4xx_sp_perfcounter_select"/>
-       <reg32 offset="0x0ec7" name="SP_PERFCTR_SP_SEL_3" type="a4xx_sp_perfcounter_select"/>
-       <reg32 offset="0x0ec8" name="SP_PERFCTR_SP_SEL_4" type="a4xx_sp_perfcounter_select"/>
-       <reg32 offset="0x0ec9" name="SP_PERFCTR_SP_SEL_5" type="a4xx_sp_perfcounter_select"/>
-       <reg32 offset="0x0eca" name="SP_PERFCTR_SP_SEL_6" type="a4xx_sp_perfcounter_select"/>
-       <reg32 offset="0x0ecb" name="SP_PERFCTR_SP_SEL_7" type="a4xx_sp_perfcounter_select"/>
-       <reg32 offset="0x0ecc" name="SP_PERFCTR_SP_SEL_8" type="a4xx_sp_perfcounter_select"/>
-       <reg32 offset="0x0ecd" name="SP_PERFCTR_SP_SEL_9" type="a4xx_sp_perfcounter_select"/>
-       <reg32 offset="0x0ece" name="SP_PERFCTR_SP_SEL_10" type="a4xx_sp_perfcounter_select"/>
-       <reg32 offset="0x0ecf" name="SP_PERFCTR_SP_SEL_11" type="a4xx_sp_perfcounter_select"/>
-
-       <reg32 offset="0x22c0" name="SP_SP_CTRL_REG">
-               <bitfield name="BINNING_PASS" pos="19" type="boolean"/>
-       </reg32>
-       <reg32 offset="0x22c1" name="SP_INSTR_CACHE_CTRL">
-               <!-- set when VS in buffer mode: -->
-               <bitfield name="VS_BUFFER" pos="7" type="boolean"/>
-               <!-- set when FS in buffer mode: -->
-               <bitfield name="FS_BUFFER" pos="8" type="boolean"/>
-               <!-- set when both VS or FS in buffer mode: -->
-               <bitfield name="INSTR_BUFFER" pos="10" type="boolean"/>
-               <!-- TODO other bits probably matter when other stages active? -->
-       </reg32>
-
-       <bitset name="a4xx_sp_vs_fs_ctrl_reg0" inline="yes">
-               <!--
-                       NOTE that SP_{VS,FS}_CTRL_REG1 are different, but so far REG0
-                       appears to be the same..
-               -->
-               <bitfield name="THREADMODE" pos="0" type="a3xx_threadmode"/>
-               <!-- VARYING bit only for FS.. think it controls emitting (ei) flag? -->
-               <bitfield name="VARYING" pos="1" type="boolean"/>
-               <!-- maybe CACHEINVALID is two bits?? -->
-               <bitfield name="CACHEINVALID" pos="2" type="boolean"/>
-               <doc>
-                       The full/half register footprint is in units of four components,
-                       so if r0.x is used, that counts as all of r0.[xyzw] as used.
-                       There are separate full/half register footprint values as the
-                       full and half registers are independent (not overlapping).
-                       Presumably the thread scheduler hardware allocates the full/half
-                       register names from the actual physical register file and
-                       handles the register renaming.
-               </doc>
-               <bitfield name="HALFREGFOOTPRINT" low="4" high="9" type="uint"/>
-               <bitfield name="FULLREGFOOTPRINT" low="10" high="15" type="uint"/>
-               <!-- maybe INOUTREGOVERLAP is a bitflag? -->
-               <bitfield name="INOUTREGOVERLAP" low="18" high="19" type="uint"/>
-               <bitfield name="THREADSIZE" pos="20" type="a3xx_threadsize"/>
-               <bitfield name="SUPERTHREADMODE" pos="21" type="boolean"/>
-               <bitfield name="PIXLODENABLE" pos="22" type="boolean"/>
-       </bitset>
-
-       <reg32 offset="0x22c4" name="SP_VS_CTRL_REG0" type="a4xx_sp_vs_fs_ctrl_reg0"/>
-       <reg32 offset="0x22c5" name="SP_VS_CTRL_REG1">
-               <bitfield name="CONSTLENGTH" low="0" high="7" type="uint"/>
-               <bitfield name="INITIALOUTSTANDING" low="24" high="30" type="uint"/>
-       </reg32>
-       <reg32 offset="0x22c6" name="SP_VS_PARAM_REG">
-               <bitfield name="POSREGID" low="0" high="7" type="a3xx_regid"/>
-               <bitfield name="PSIZEREGID" low="8" high="15" type="a3xx_regid"/>
-               <bitfield name="TOTALVSOUTVAR" low="20" high="31" type="uint"/>
-       </reg32>
-       <array offset="0x22c7" name="SP_VS_OUT" stride="1" length="16">
-               <reg32 offset="0x0" name="REG">
-                       <bitfield name="A_REGID" low="0" high="8" type="a3xx_regid"/>
-                       <bitfield name="A_COMPMASK" low="9" high="12" type="hex"/>
-                       <bitfield name="B_REGID" low="16" high="24" type="a3xx_regid"/>
-                       <bitfield name="B_COMPMASK" low="25" high="28" type="hex"/>
-               </reg32>
-       </array>
-       <array offset="0x22d8" name="SP_VS_VPC_DST" stride="1" length="8">
-               <reg32 offset="0x0" name="REG">
-                       <doc>
-                               These seem to be offsets for storage of the varyings.
-                               Always seems to start from 8, possibly loc 0 and 4
-                               are for gl_Position and gl_PointSize?
-                       </doc>
-                       <bitfield name="OUTLOC0" low="0" high="7" type="uint"/>
-                       <bitfield name="OUTLOC1" low="8" high="15" type="uint"/>
-                       <bitfield name="OUTLOC2" low="16" high="23" type="uint"/>
-                       <bitfield name="OUTLOC3" low="24" high="31" type="uint"/>
-               </reg32>
-       </array>
-
-       <reg32 offset="0x22e0" name="SP_VS_OBJ_OFFSET_REG">
-               <!-- always 00000000: -->
-               <doc>
-                       From register spec:
-                       SP_FS_OBJ_OFFSET_REG.CONSTOBJECTSTARTOFFSET [16:24]: Constant object
-                       start offset in on chip RAM,
-                       128bit aligned
-               </doc>
-               <bitfield name="CONSTOBJECTOFFSET" low="16" high="24" type="uint"/>
-               <bitfield name="SHADEROBJOFFSET" low="25" high="31" type="uint"/>
-       </reg32>
-       <reg32 offset="0x22e1" name="SP_VS_OBJ_START"/>
-       <reg32 offset="0x22e2" name="SP_VS_PVT_MEM_PARAM"/>"
-       <reg32 offset="0x22e3" name="SP_VS_PVT_MEM_ADDR"/>
-       <reg32 offset="0x22e5" name="SP_VS_LENGTH_REG" type="uint"/>
-       <reg32 offset="0x22e8" name="SP_FS_CTRL_REG0" type="a4xx_sp_vs_fs_ctrl_reg0"/>
-       <reg32 offset="0x22e9" name="SP_FS_CTRL_REG1">
-               <bitfield name="CONSTLENGTH" low="0" high="7" type="uint"/>
-               <bitfield name="FACENESS" pos="19" type="boolean"/>
-               <bitfield name="VARYING" pos="20" type="boolean"/>
-               <bitfield name="FRAGCOORD" pos="21" type="boolean"/>
-       </reg32>
-       <reg32 offset="0x22ea" name="SP_FS_OBJ_OFFSET_REG">
-               <bitfield name="CONSTOBJECTOFFSET" low="16" high="24" type="uint"/>
-               <bitfield name="SHADEROBJOFFSET" low="25" high="31" type="uint"/>
-       </reg32>
-       <reg32 offset="0x22eb" name="SP_FS_OBJ_START"/>
-       <reg32 offset="0x22ec" name="SP_FS_PVT_MEM_PARAM"/>"
-       <reg32 offset="0x22ed" name="SP_FS_PVT_MEM_ADDR"/>
-       <reg32 offset="0x22ef" name="SP_FS_LENGTH_REG" type="uint"/>
-       <reg32 offset="0x22f0" name="SP_FS_OUTPUT_REG">
-               <bitfield name="MRT" low="0" high="3" type="uint"/>
-               <bitfield name="DEPTH_ENABLE" pos="7" type="boolean"/>
-               <!-- TODO double check.. for now assume same as a3xx -->
-               <bitfield name="DEPTH_REGID" low="8" high="15" type="a3xx_regid"/>
-               <bitfield name="SAMPLEMASK_REGID" low="24" high="31" type="a3xx_regid"/>
-       </reg32>
-       <array offset="0x22f1" name="SP_FS_MRT" stride="1" length="8">
-               <reg32 offset="0x0" name="REG">
-                       <bitfield name="REGID" low="0" high="7" type="a3xx_regid"/>
-                       <bitfield name="HALF_PRECISION" pos="8" type="boolean"/>
-                       <bitfield name="MRTFORMAT" low="12" high="17" type="a4xx_color_fmt"/>
-                       <bitfield name="COLOR_SRGB" pos="18" type="boolean"/>
-               </reg32>
-       </array>
-       <reg32 offset="0x2300" name="SP_CS_CTRL_REG0"/>
-       <reg32 offset="0x2301" name="SP_CS_OBJ_OFFSET_REG"/>
-       <reg32 offset="0x2302" name="SP_CS_OBJ_START"/>
-       <reg32 offset="0x2303" name="SP_CS_PVT_MEM_PARAM"/>
-       <reg32 offset="0x2304" name="SP_CS_PVT_MEM_ADDR"/>
-       <reg32 offset="0x2305" name="SP_CS_PVT_MEM_SIZE"/>
-       <reg32 offset="0x2306" name="SP_CS_LENGTH_REG" type="uint"/>
-       <reg32 offset="0x230d" name="SP_HS_OBJ_OFFSET_REG">
-               <bitfield name="CONSTOBJECTOFFSET" low="16" high="24" type="uint"/>
-               <bitfield name="SHADEROBJOFFSET" low="25" high="31" type="uint"/>
-       </reg32>
-       <reg32 offset="0x230e" name="SP_HS_OBJ_START"/>
-       <reg32 offset="0x230f" name="SP_HS_PVT_MEM_PARAM"/>"
-       <reg32 offset="0x2310" name="SP_HS_PVT_MEM_ADDR"/>
-       <reg32 offset="0x2312" name="SP_HS_LENGTH_REG" type="uint"/>
-
-       <reg32 offset="0x231a" name="SP_DS_PARAM_REG">
-               <bitfield name="POSREGID" low="0" high="7" type="a3xx_regid"/>
-               <bitfield name="TOTALGSOUTVAR" low="20" high="31" type="uint"/>
-       </reg32>
-       <array offset="0x231b" name="SP_DS_OUT" stride="1" length="16">
-               <reg32 offset="0x0" name="REG">
-                       <bitfield name="A_REGID" low="0" high="8" type="a3xx_regid"/>
-                       <bitfield name="A_COMPMASK" low="9" high="12" type="hex"/>
-                       <bitfield name="B_REGID" low="16" high="24" type="a3xx_regid"/>
-                       <bitfield name="B_COMPMASK" low="25" high="28" type="hex"/>
-               </reg32>
-       </array>
-       <array offset="0x232c" name="SP_DS_VPC_DST" stride="1" length="8">
-               <reg32 offset="0x0" name="REG">
-                       <doc>
-                               These seem to be offsets for storage of the varyings.
-                               Always seems to start from 8, possibly loc 0 and 4
-                               are for gl_Position and gl_PointSize?
-                       </doc>
-                       <bitfield name="OUTLOC0" low="0" high="7" type="uint"/>
-                       <bitfield name="OUTLOC1" low="8" high="15" type="uint"/>
-                       <bitfield name="OUTLOC2" low="16" high="23" type="uint"/>
-                       <bitfield name="OUTLOC3" low="24" high="31" type="uint"/>
-               </reg32>
-       </array>
-       <reg32 offset="0x2334" name="SP_DS_OBJ_OFFSET_REG">
-               <bitfield name="CONSTOBJECTOFFSET" low="16" high="24" type="uint"/>
-               <bitfield name="SHADEROBJOFFSET" low="25" high="31" type="uint"/>
-       </reg32>
-       <reg32 offset="0x2335" name="SP_DS_OBJ_START"/>
-       <reg32 offset="0x2336" name="SP_DS_PVT_MEM_PARAM"/>"
-       <reg32 offset="0x2337" name="SP_DS_PVT_MEM_ADDR"/>
-       <reg32 offset="0x2339" name="SP_DS_LENGTH_REG" type="uint"/>
-
-       <reg32 offset="0x2341" name="SP_GS_PARAM_REG">
-               <bitfield name="POSREGID" low="0" high="7" type="a3xx_regid"/>
-               <bitfield name="PRIMREGID" low="8" high="15" type="a3xx_regid"/>
-               <bitfield name="TOTALGSOUTVAR" low="20" high="31" type="uint"/>
-       </reg32>
-       <array offset="0x2342" name="SP_GS_OUT" stride="1" length="16">
-               <reg32 offset="0x0" name="REG">
-                       <bitfield name="A_REGID" low="0" high="8" type="a3xx_regid"/>
-                       <bitfield name="A_COMPMASK" low="9" high="12" type="hex"/>
-                       <bitfield name="B_REGID" low="16" high="24" type="a3xx_regid"/>
-                       <bitfield name="B_COMPMASK" low="25" high="28" type="hex"/>
-               </reg32>
-       </array>
-       <array offset="0x2353" name="SP_GS_VPC_DST" stride="1" length="8">
-               <reg32 offset="0x0" name="REG">
-                       <doc>
-                               These seem to be offsets for storage of the varyings.
-                               Always seems to start from 8, possibly loc 0 and 4
-                               are for gl_Position and gl_PointSize?
-                       </doc>
-                       <bitfield name="OUTLOC0" low="0" high="7" type="uint"/>
-                       <bitfield name="OUTLOC1" low="8" high="15" type="uint"/>
-                       <bitfield name="OUTLOC2" low="16" high="23" type="uint"/>
-                       <bitfield name="OUTLOC3" low="24" high="31" type="uint"/>
-               </reg32>
-       </array>
-       <reg32 offset="0x235b" name="SP_GS_OBJ_OFFSET_REG">
-               <bitfield name="CONSTOBJECTOFFSET" low="16" high="24" type="uint"/>
-               <bitfield name="SHADEROBJOFFSET" low="25" high="31" type="uint"/>
-       </reg32>
-       <reg32 offset="0x235c" name="SP_GS_OBJ_START"/>
-       <reg32 offset="0x235d" name="SP_GS_PVT_MEM_PARAM"/>"
-       <reg32 offset="0x235e" name="SP_GS_PVT_MEM_ADDR"/>
-       <reg32 offset="0x2360" name="SP_GS_LENGTH_REG" type="uint"/>
-
-       <!-- VPC registers -->
-       <reg32 offset="0x0e60" name="VPC_DEBUG_RAM_SEL"/>
-       <reg32 offset="0x0e61" name="VPC_DEBUG_RAM_READ"/>
-       <reg32 offset="0x0e64" name="VPC_DEBUG_ECO_CONTROL"/>
-       <reg32 offset="0x0e65" name="VPC_PERFCTR_VPC_SEL_0" type="a4xx_vpc_perfcounter_select"/>
-       <reg32 offset="0x0e66" name="VPC_PERFCTR_VPC_SEL_1" type="a4xx_vpc_perfcounter_select"/>
-       <reg32 offset="0x0e67" name="VPC_PERFCTR_VPC_SEL_2" type="a4xx_vpc_perfcounter_select"/>
-       <reg32 offset="0x0e68" name="VPC_PERFCTR_VPC_SEL_3" type="a4xx_vpc_perfcounter_select"/>
-       <reg32 offset="0x2140" name="VPC_ATTR">
-               <bitfield name="TOTALATTR" low="0" high="8" type="uint"/>
-               <!-- PSIZE bit set if gl_PointSize written: -->
-               <bitfield name="PSIZE" pos="9" type="boolean"/>
-               <bitfield name="THRDASSIGN" low="12" high="13" type="uint"/>
-               <bitfield name="ENABLE" pos="25" type="boolean"/>
-       </reg32>
-       <reg32 offset="0x2141" name="VPC_PACK">
-               <bitfield name="NUMBYPASSVAR" low="0" high="7" type="uint"/>
-               <bitfield name="NUMFPNONPOSVAR" low="8" high="15" type="uint"/>
-               <bitfield name="NUMNONPOSVSVAR" low="16" high="23" type="uint"/>
-       </reg32>
-       <array offset="0x2142" name="VPC_VARYING_INTERP" stride="1" length="8">
-               <reg32 offset="0x0" name="MODE"/>
-       </array>
-       <array offset="0x214a" name="VPC_VARYING_PS_REPL" stride="1" length="8">
-               <reg32 offset="0x0" name="MODE"/>
-       </array>
-
-       <reg32 offset="0x216e" name="VPC_SO_FLUSH_WADDR_3"/>
-
-       <!-- VSC registers -->
-       <reg32 offset="0x0c00" name="VSC_BIN_SIZE">
-               <bitfield name="WIDTH" low="0" high="4" shr="5" type="uint"/>
-               <bitfield name="HEIGHT" low="5" high="9" shr="5" type="uint"/>
-       </reg32>
-       <reg32 offset="0x0c01" name="VSC_SIZE_ADDRESS"/>
-       <reg32 offset="0x0c02" name="VSC_SIZE_ADDRESS2"/>
-       <reg32 offset="0x0c03" name="VSC_DEBUG_ECO_CONTROL"/>
-       <array offset="0x0c08" name="VSC_PIPE_CONFIG" stride="1" length="8">
-               <reg32 offset="0x0" name="REG">
-                       <doc>
-                               Configures the mapping between VSC_PIPE buffer and
-                               bin, X/Y specify the bin index in the horiz/vert
-                               direction (0,0 is upper left, 0,1 is leftmost bin
-                               on second row, and so on).  W/H specify the number
-                               of bins assigned to this VSC_PIPE in the horiz/vert
-                               dimension.
-                       </doc>
-                       <bitfield name="X" low="0" high="9" type="uint"/>
-                       <bitfield name="Y" low="10" high="19" type="uint"/>
-                       <bitfield name="W" low="20" high="23" type="uint"/>
-                       <bitfield name="H" low="24" high="27" type="uint"/>
-               </reg32>
-       </array>
-       <array offset="0x0c10" name="VSC_PIPE_DATA_ADDRESS" stride="1" length="8">
-               <reg32 offset="0x0" name="REG"/>
-       </array>
-       <array offset="0x0c18" name="VSC_PIPE_DATA_LENGTH" stride="1" length="8">
-               <reg32 offset="0x0" name="REG"/>
-       </array>
-       <reg32 offset="0x0c41" name="VSC_PIPE_PARTIAL_POSN_1"/>
-       <reg32 offset="0x0c50" name="VSC_PERFCTR_VSC_SEL_0" type="a4xx_vsc_perfcounter_select"/>
-       <reg32 offset="0x0c51" name="VSC_PERFCTR_VSC_SEL_1" type="a4xx_vsc_perfcounter_select"/>
-
-       <!-- VFD registers -->
-       <reg32 offset="0x0e40" name="VFD_DEBUG_CONTROL"/>
-       <reg32 offset="0x0e43" name="VFD_PERFCTR_VFD_SEL_0" type="a4xx_vfd_perfcounter_select"/>
-       <reg32 offset="0x0e44" name="VFD_PERFCTR_VFD_SEL_1" type="a4xx_vfd_perfcounter_select"/>
-       <reg32 offset="0x0e45" name="VFD_PERFCTR_VFD_SEL_2" type="a4xx_vfd_perfcounter_select"/>
-       <reg32 offset="0x0e46" name="VFD_PERFCTR_VFD_SEL_3" type="a4xx_vfd_perfcounter_select"/>
-       <reg32 offset="0x0e47" name="VFD_PERFCTR_VFD_SEL_4" type="a4xx_vfd_perfcounter_select"/>
-       <reg32 offset="0x0e48" name="VFD_PERFCTR_VFD_SEL_5" type="a4xx_vfd_perfcounter_select"/>
-       <reg32 offset="0x0e49" name="VFD_PERFCTR_VFD_SEL_6" type="a4xx_vfd_perfcounter_select"/>
-       <reg32 offset="0x0e4a" name="VFD_PERFCTR_VFD_SEL_7" type="a4xx_vfd_perfcounter_select"/>
-       <reg32 offset="0x21d0" name="VGT_CL_INITIATOR"/>
-       <reg32 offset="0x21d9" name="VGT_EVENT_INITIATOR"/>
-       <reg32 offset="0x2200" name="VFD_CONTROL_0">
-               <doc>
-                       TOTALATTRTOVS is # of attributes to vertex shader, in register
-                       slots (ie. vec4+vec3 -> 7)
-               </doc>
-               <bitfield name="TOTALATTRTOVS" low="0" high="7" type="uint"/>
-               <doc>
-               BYPASSATTROVS seems to count varyings that are just directly
-               assigned from attributes (ie, "vFoo = aFoo;")
-               </doc>
-               <bitfield name="BYPASSATTROVS" low="9" high="16" type="uint"/>
-               <doc>STRMDECINSTRCNT is # of VFD_DECODE_INSTR registers valid</doc>
-               <bitfield name="STRMDECINSTRCNT" low="20" high="25" type="uint"/>
-               <doc>STRMFETCHINSTRCNT is # of VFD_FETCH_INSTR registers valid</doc>
-               <bitfield name="STRMFETCHINSTRCNT" low="26" high="31" type="uint"/>
-       </reg32>
-       <reg32 offset="0x2201" name="VFD_CONTROL_1">
-               <doc>MAXSTORAGE could be # of attributes/vbo's</doc>
-               <bitfield name="MAXSTORAGE" low="0" high="15" type="uint"/>
-               <bitfield name="REGID4VTX" low="16" high="23" type="a3xx_regid"/>
-               <bitfield name="REGID4INST" low="24" high="31" type="a3xx_regid"/>
-       </reg32>
-       <reg32 offset="0x2202" name="VFD_CONTROL_2"/>
-       <reg32 offset="0x2203" name="VFD_CONTROL_3">
-               <bitfield name="REGID_VTXCNT" low="8" high="15" type="a3xx_regid"/>
-               <bitfield name="REGID_TESSX" low="16" high="23" type="a3xx_regid"/>
-               <bitfield name="REGID_TESSY" low="24" high="31" type="a3xx_regid"/>
-       </reg32>
-       <reg32 offset="0x2204" name="VFD_CONTROL_4"/>
-       <reg32 offset="0x2208" name="VFD_INDEX_OFFSET"/>
-       <array offset="0x220a" name="VFD_FETCH" stride="4" length="32">
-               <reg32 offset="0x0" name="INSTR_0">
-                       <bitfield name="FETCHSIZE" low="0" high="6" type="uint"/>
-                       <bitfield name="BUFSTRIDE" low="7" high="16" type="uint"/>
-                       <bitfield name="SWITCHNEXT" pos="19" type="boolean"/>
-                       <bitfield name="INSTANCED" pos="20" type="boolean"/>
-               </reg32>
-               <reg32 offset="0x1" name="INSTR_1"/>
-               <reg32 offset="0x2" name="INSTR_2">
-                       <bitfield name="SIZE" low="0" high="31"/>
-               </reg32>
-               <reg32 offset="0x3" name="INSTR_3">
-                       <!-- might well be bigger.. -->
-                       <bitfield name="STEPRATE" low="0" high="8" type="uint"/>
-               </reg32>
-       </array>
-       <array offset="0x228a" name="VFD_DECODE" stride="1" length="32">
-               <reg32 offset="0x0" name="INSTR">
-                       <bitfield name="WRITEMASK" low="0" high="3" type="hex"/>
-                       <!-- not sure if this is a bit flag and another flag above it, or?? -->
-                       <bitfield name="CONSTFILL" pos="4" type="boolean"/>
-                       <bitfield name="FORMAT" low="6" high="11" type="a4xx_vtx_fmt"/>
-                       <bitfield name="REGID" low="12" high="19" type="a3xx_regid"/>
-                       <bitfield name="INT" pos="20" type="boolean"/>
-                       <doc>SHIFTCNT appears to be size, ie. FLOAT_32_32_32 is 12, and BYTE_8 is 1</doc>
-                       <bitfield name="SWAP" low="22" high="23" type="a3xx_color_swap"/>
-                       <bitfield name="SHIFTCNT" low="24" high="28" type="uint"/>
-                       <bitfield name="LASTCOMPVALID" pos="29" type="boolean"/>
-                       <bitfield name="SWITCHNEXT" pos="30" type="boolean"/>
-               </reg32>
-       </array>
-
-       <!-- TPL1 registers -->
-       <reg32 offset="0x0f00" name="TPL1_DEBUG_ECO_CONTROL"/>
-       <!-- always 0000003a: -->
-       <reg32 offset="0x0f03" name="TPL1_TP_MODE_CONTROL"/>
-       <reg32 offset="0x0f04" name="TPL1_PERFCTR_TP_SEL_0" type="a4xx_tp_perfcounter_select"/>
-       <reg32 offset="0x0f05" name="TPL1_PERFCTR_TP_SEL_1" type="a4xx_tp_perfcounter_select"/>
-       <reg32 offset="0x0f06" name="TPL1_PERFCTR_TP_SEL_2" type="a4xx_tp_perfcounter_select"/>
-       <reg32 offset="0x0f07" name="TPL1_PERFCTR_TP_SEL_3" type="a4xx_tp_perfcounter_select"/>
-       <reg32 offset="0x0f08" name="TPL1_PERFCTR_TP_SEL_4" type="a4xx_tp_perfcounter_select"/>
-       <reg32 offset="0x0f09" name="TPL1_PERFCTR_TP_SEL_5" type="a4xx_tp_perfcounter_select"/>
-       <reg32 offset="0x0f0a" name="TPL1_PERFCTR_TP_SEL_6" type="a4xx_tp_perfcounter_select"/>
-       <reg32 offset="0x0f0b" name="TPL1_PERFCTR_TP_SEL_7" type="a4xx_tp_perfcounter_select"/>
-       <reg32 offset="0x2380" name="TPL1_TP_TEX_OFFSET"/>
-       <reg32 offset="0x2381" name="TPL1_TP_TEX_COUNT">
-               <bitfield name="VS" low="0" high="7" type="uint"/>
-               <bitfield name="HS" low="8" high="15" type="uint"/>
-               <bitfield name="DS" low="16" high="23" type="uint"/>
-               <bitfield name="GS" low="24" high="31" type="uint"/>
-       </reg32>
-       <reg32 offset="0x2384" name="TPL1_TP_VS_BORDER_COLOR_BASE_ADDR"/>
-       <reg32 offset="0x2387" name="TPL1_TP_HS_BORDER_COLOR_BASE_ADDR"/>
-       <reg32 offset="0x238a" name="TPL1_TP_DS_BORDER_COLOR_BASE_ADDR"/>
-       <reg32 offset="0x238d" name="TPL1_TP_GS_BORDER_COLOR_BASE_ADDR"/>
-       <reg32 offset="0x23a0" name="TPL1_TP_FS_TEX_COUNT"/>
-       <reg32 offset="0x23a1" name="TPL1_TP_FS_BORDER_COLOR_BASE_ADDR"/>
-       <reg32 offset="0x23a4" name="TPL1_TP_CS_BORDER_COLOR_BASE_ADDR"/>
-       <reg32 offset="0x23a5" name="TPL1_TP_CS_SAMPLER_BASE_ADDR"/>
-       <reg32 offset="0x23a6" name="TPL1_TP_CS_TEXMEMOBJ_BASE_ADDR"/>
-
-       <!-- GRAS registers -->
-       <reg32 offset="0x0c80" name="GRAS_TSE_STATUS"/>
-       <reg32 offset="0x0c81" name="GRAS_DEBUG_ECO_CONTROL"/>
-       <reg32 offset="0x0c88" name="GRAS_PERFCTR_TSE_SEL_0" type="a4xx_gras_tse_perfcounter_select"/>
-       <reg32 offset="0x0c89" name="GRAS_PERFCTR_TSE_SEL_1" type="a4xx_gras_tse_perfcounter_select"/>
-       <reg32 offset="0x0c8a" name="GRAS_PERFCTR_TSE_SEL_2" type="a4xx_gras_tse_perfcounter_select"/>
-       <reg32 offset="0x0c8b" name="GRAS_PERFCTR_TSE_SEL_3" type="a4xx_gras_tse_perfcounter_select"/>
-       <reg32 offset="0x0c8c" name="GRAS_PERFCTR_RAS_SEL_0" type="a4xx_gras_ras_perfcounter_select"/>
-       <reg32 offset="0x0c8d" name="GRAS_PERFCTR_RAS_SEL_1" type="a4xx_gras_ras_perfcounter_select"/>
-       <reg32 offset="0x0c8e" name="GRAS_PERFCTR_RAS_SEL_2" type="a4xx_gras_ras_perfcounter_select"/>
-       <reg32 offset="0x0c8f" name="GRAS_PERFCTR_RAS_SEL_3" type="a4xx_gras_ras_perfcounter_select"/>
-       <reg32 offset="0x2000" name="GRAS_CL_CLIP_CNTL">
-               <bitfield name="CLIP_DISABLE" pos="15" type="boolean"/>
-               <bitfield name="ZNEAR_CLIP_DISABLE" pos="16" type="boolean"/>
-               <bitfield name="ZFAR_CLIP_DISABLE" pos="17" type="boolean"/>
-               <bitfield name="ZERO_GB_SCALE_Z" pos="22" type="boolean"/>
-       </reg32>
-       <reg32 offset="0x2003" name="GRAS_CNTL">
-               <bitfield name="IJ_PERSP" pos="0" type="boolean"/>
-               <bitfield name="IJ_LINEAR" pos="1" type="boolean"/>
-       </reg32>
-       <reg32 offset="0x2004" name="GRAS_CL_GB_CLIP_ADJ">
-               <bitfield name="HORZ" low="0" high="9" type="uint"/>
-               <bitfield name="VERT" low="10" high="19" type="uint"/>
-       </reg32>
-       <reg32 offset="0x2008" name="GRAS_CL_VPORT_XOFFSET_0" type="float"/>
-       <reg32 offset="0x2009" name="GRAS_CL_VPORT_XSCALE_0" type="float"/>
-       <reg32 offset="0x200a" name="GRAS_CL_VPORT_YOFFSET_0" type="float"/>
-       <reg32 offset="0x200b" name="GRAS_CL_VPORT_YSCALE_0" type="float"/>
-       <reg32 offset="0x200c" name="GRAS_CL_VPORT_ZOFFSET_0" type="float"/>
-       <reg32 offset="0x200d" name="GRAS_CL_VPORT_ZSCALE_0" type="float"/>
-       <reg32 offset="0x2070" name="GRAS_SU_POINT_MINMAX">
-               <bitfield name="MIN" low="0" high="15" type="ufixed" radix="4"/>
-               <bitfield name="MAX" low="16" high="31" type="ufixed" radix="4"/>
-       </reg32>
-       <reg32 offset="0x2071" name="GRAS_SU_POINT_SIZE" type="fixed" radix="4"/>
-       <reg32 offset="0x2073" name="GRAS_ALPHA_CONTROL">
-               <bitfield name="ALPHA_TEST_ENABLE" pos="2" type="boolean"/>
-               <bitfield name="FORCE_FRAGZ_TO_FS" pos="3" type="boolean"/>
-       </reg32>
-       <reg32 offset="0x2074" name="GRAS_SU_POLY_OFFSET_SCALE" type="float"/>
-       <reg32 offset="0x2075" name="GRAS_SU_POLY_OFFSET_OFFSET" type="float"/>
-       <reg32 offset="0x2076" name="GRAS_SU_POLY_OFFSET_CLAMP" type="float"/>
-       <reg32 offset="0x2077" name="GRAS_DEPTH_CONTROL">
-               <!-- guestimating that this is GRAS based on addr -->
-               <bitfield name="FORMAT" low="0" high="1" type="a4xx_depth_format"/>
-       </reg32>
-       <reg32 offset="0x2078" name="GRAS_SU_MODE_CONTROL">
-               <bitfield name="CULL_FRONT" pos="0" type="boolean"/>
-               <bitfield name="CULL_BACK" pos="1" type="boolean"/>
-               <bitfield name="FRONT_CW" pos="2" type="boolean"/>
-               <bitfield name="LINEHALFWIDTH" low="3" high="10" radix="2" type="fixed"/>
-               <bitfield name="POLY_OFFSET" pos="11" type="boolean"/>
-               <bitfield name="MSAA_ENABLE" pos="13" type="boolean"/>
-               <!-- bit20 set whenever RENDER_MODE = RB_RENDERING_PASS -->
-               <bitfield name="RENDERING_PASS" pos="20" type="boolean"/>
-       </reg32>
-       <reg32 offset="0x207b" name="GRAS_SC_CONTROL">
-               <!-- complete wild-ass-guess for sizes of these bitfields.. -->
-               <bitfield name="RENDER_MODE" low="2" high="3" type="a3xx_render_mode"/>
-               <bitfield name="MSAA_SAMPLES" low="7" high="9" type="uint"/>
-               <bitfield name="MSAA_DISABLE" pos="11" type="boolean"/>
-               <bitfield name="RASTER_MODE" low="12" high="15"/>
-       </reg32>
-       <reg32 offset="0x207c" name="GRAS_SC_SCREEN_SCISSOR_TL" type="adreno_reg_xy"/>
-       <reg32 offset="0x207d" name="GRAS_SC_SCREEN_SCISSOR_BR" type="adreno_reg_xy"/>
-       <reg32 offset="0x209c" name="GRAS_SC_WINDOW_SCISSOR_BR" type="adreno_reg_xy"/>
-       <reg32 offset="0x209d" name="GRAS_SC_WINDOW_SCISSOR_TL" type="adreno_reg_xy"/>
-       <reg32 offset="0x209e" name="GRAS_SC_EXTENT_WINDOW_BR" type="adreno_reg_xy"/>
-       <reg32 offset="0x209f" name="GRAS_SC_EXTENT_WINDOW_TL" type="adreno_reg_xy"/>
-
-       <!-- UCHE registers -->
-       <reg32 offset="0x0e80" name="UCHE_CACHE_MODE_CONTROL"/>
-       <reg32 offset="0x0e83" name="UCHE_TRAP_BASE_LO"/>
-       <reg32 offset="0x0e84" name="UCHE_TRAP_BASE_HI"/>
-       <reg32 offset="0x0e88" name="UCHE_CACHE_STATUS"/>
-       <reg32 offset="0x0e8a" name="UCHE_INVALIDATE0"/>
-       <reg32 offset="0x0e8b" name="UCHE_INVALIDATE1"/>
-       <reg32 offset="0x0e8c" name="UCHE_CACHE_WAYS_VFD"/>
-       <reg32 offset="0x0e8e" name="UCHE_PERFCTR_UCHE_SEL_0" type="a4xx_uche_perfcounter_select"/>
-       <reg32 offset="0x0e8f" name="UCHE_PERFCTR_UCHE_SEL_1" type="a4xx_uche_perfcounter_select"/>
-       <reg32 offset="0x0e90" name="UCHE_PERFCTR_UCHE_SEL_2" type="a4xx_uche_perfcounter_select"/>
-       <reg32 offset="0x0e91" name="UCHE_PERFCTR_UCHE_SEL_3" type="a4xx_uche_perfcounter_select"/>
-       <reg32 offset="0x0e92" name="UCHE_PERFCTR_UCHE_SEL_4" type="a4xx_uche_perfcounter_select"/>
-       <reg32 offset="0x0e93" name="UCHE_PERFCTR_UCHE_SEL_5" type="a4xx_uche_perfcounter_select"/>
-       <reg32 offset="0x0e94" name="UCHE_PERFCTR_UCHE_SEL_6" type="a4xx_uche_perfcounter_select"/>
-       <reg32 offset="0x0e95" name="UCHE_PERFCTR_UCHE_SEL_7" type="a4xx_uche_perfcounter_select"/>
-
-       <!-- HLSQ registers -->
-       <reg32 offset="0x0e00" name="HLSQ_TIMEOUT_THRESHOLD"/>
-       <reg32 offset="0x0e04" name="HLSQ_DEBUG_ECO_CONTROL"/>
-       <!-- always 00000000: -->
-       <reg32 offset="0x0e05" name="HLSQ_MODE_CONTROL"/>
-       <reg32 offset="0x0e0e" name="HLSQ_PERF_PIPE_MASK"/>
-       <reg32 offset="0x0e06" name="HLSQ_PERFCTR_HLSQ_SEL_0" type="a4xx_hlsq_perfcounter_select"/>
-       <reg32 offset="0x0e07" name="HLSQ_PERFCTR_HLSQ_SEL_1" type="a4xx_hlsq_perfcounter_select"/>
-       <reg32 offset="0x0e08" name="HLSQ_PERFCTR_HLSQ_SEL_2" type="a4xx_hlsq_perfcounter_select"/>
-       <reg32 offset="0x0e09" name="HLSQ_PERFCTR_HLSQ_SEL_3" type="a4xx_hlsq_perfcounter_select"/>
-       <reg32 offset="0x0e0a" name="HLSQ_PERFCTR_HLSQ_SEL_4" type="a4xx_hlsq_perfcounter_select"/>
-       <reg32 offset="0x0e0b" name="HLSQ_PERFCTR_HLSQ_SEL_5" type="a4xx_hlsq_perfcounter_select"/>
-       <reg32 offset="0x0e0c" name="HLSQ_PERFCTR_HLSQ_SEL_6" type="a4xx_hlsq_perfcounter_select"/>
-       <reg32 offset="0x0e0d" name="HLSQ_PERFCTR_HLSQ_SEL_7" type="a4xx_hlsq_perfcounter_select"/>
-       <reg32 offset="0x23c0" name="HLSQ_CONTROL_0_REG">
-               <!-- I guess same as a3xx, but so far only seen 08000050 -->
-               <bitfield name="FSTHREADSIZE" pos="4" type="a3xx_threadsize"/>
-               <bitfield name="FSSUPERTHREADENABLE" pos="6" type="boolean"/>
-               <bitfield name="SPSHADERRESTART" pos="9" type="boolean"/>
-               <bitfield name="RESERVED2" pos="10" type="boolean"/>
-               <bitfield name="CHUNKDISABLE" pos="26" type="boolean"/>
-               <bitfield name="CONSTMODE" pos="27" type="uint"/>
-               <bitfield name="LAZYUPDATEDISABLE" pos="28" type="boolean"/>
-               <bitfield name="SPCONSTFULLUPDATE" pos="29" type="boolean"/>
-               <bitfield name="TPFULLUPDATE" pos="30" type="boolean"/>
-               <bitfield name="SINGLECONTEXT" pos="31" type="boolean"/>
-       </reg32>
-       <reg32 offset="0x23c1" name="HLSQ_CONTROL_1_REG">
-               <bitfield name="VSTHREADSIZE" pos="6" type="a3xx_threadsize"/>
-               <bitfield name="VSSUPERTHREADENABLE" pos="8" type="boolean"/>
-               <bitfield name="RESERVED1" pos="9" type="boolean"/>
-               <bitfield name="COORDREGID" low="16" high="23" type="a3xx_regid"/>
-               <!-- set if gl_FragCoord.[zw] used in frag shader: -->
-               <bitfield name="ZWCOORDREGID" low="24" high="31" type="a3xx_regid"/>
-       </reg32>
-       <reg32 offset="0x23c2" name="HLSQ_CONTROL_2_REG">
-               <bitfield name="PRIMALLOCTHRESHOLD" low="26" high="31" type="uint"/>
-               <bitfield name="FACEREGID" low="2" high="9" type="a3xx_regid"/>
-               <bitfield name="SAMPLEID_REGID" low="10" high="17" type="a3xx_regid"/>
-               <bitfield name="SAMPLEMASK_REGID" low="18" high="25" type="a3xx_regid"/>
-       </reg32>
-       <reg32 offset="0x23c3" name="HLSQ_CONTROL_3_REG">
-               <!-- register loaded with position (bary.f) -->
-               <bitfield name="IJ_PERSP_PIXEL" low="0" high="7" type="a3xx_regid"/>
-               <bitfield name="IJ_LINEAR_PIXEL" low="8" high="15" type="a3xx_regid"/>
-               <bitfield name="IJ_PERSP_CENTROID" low="16" high="23" type="a3xx_regid"/>
-               <bitfield name="IJ_LINEAR_CENTROID" low="24" high="31" type="a3xx_regid"/>
-       </reg32>
-       <!-- 0x23c4 3 regids, lowest one goes to 0 when *not* per-sample shading -->
-       <reg32 offset="0x23c4" name="HLSQ_CONTROL_4_REG">
-               <bitfield name="IJ_PERSP_SAMPLE" low="0" high="7" type="a3xx_regid"/>
-               <bitfield name="IJ_LINEAR_SAMPLE" low="8" high="15" type="a3xx_regid"/>
-       </reg32>
-
-       <bitset name="a4xx_xs_control_reg" inline="yes">
-               <bitfield name="CONSTLENGTH" low="0" high="7" type="uint"/>
-               <bitfield name="CONSTOBJECTOFFSET" low="8" high="14" type="uint"/>
-               <bitfield name="SSBO_ENABLE" pos="15" type="boolean"/>
-               <bitfield name="ENABLED" pos="16" type="boolean"/>
-               <bitfield name="SHADEROBJOFFSET" low="17" high="23" type="uint"/>
-               <bitfield name="INSTRLENGTH" low="24" high="31" type="uint"/>
-       </bitset>
-       <reg32 offset="0x23c5" name="HLSQ_VS_CONTROL_REG" type="a4xx_xs_control_reg"/>
-       <reg32 offset="0x23c6" name="HLSQ_FS_CONTROL_REG" type="a4xx_xs_control_reg"/>
-       <reg32 offset="0x23c7" name="HLSQ_HS_CONTROL_REG" type="a4xx_xs_control_reg"/>
-       <reg32 offset="0x23c8" name="HLSQ_DS_CONTROL_REG" type="a4xx_xs_control_reg"/>
-       <reg32 offset="0x23c9" name="HLSQ_GS_CONTROL_REG" type="a4xx_xs_control_reg"/>
-       <reg32 offset="0x23ca" name="HLSQ_CS_CONTROL_REG" type="a4xx_xs_control_reg"/>
-       <reg32 offset="0x23cd" name="HLSQ_CL_NDRANGE_0">
-               <bitfield name="KERNELDIM" low="0" high="1" type="uint"/>
-               <!-- localsize is value minus one: -->
-               <bitfield name="LOCALSIZEX" low="2" high="11" type="uint"/>
-               <bitfield name="LOCALSIZEY" low="12" high="21" type="uint"/>
-               <bitfield name="LOCALSIZEZ" low="22" high="31" type="uint"/>
-       </reg32>
-       <reg32 offset="0x23ce" name="HLSQ_CL_NDRANGE_1">
-               <bitfield name="SIZE_X" low="0" high="31" type="uint"/>
-       </reg32>
-       <reg32 offset="0x23cf" name="HLSQ_CL_NDRANGE_2"/>
-       <reg32 offset="0x23d0" name="HLSQ_CL_NDRANGE_3">
-               <bitfield name="SIZE_Y" low="0" high="31" type="uint"/>
-       </reg32>
-       <reg32 offset="0x23d1" name="HLSQ_CL_NDRANGE_4"/>
-       <reg32 offset="0x23d2" name="HLSQ_CL_NDRANGE_5">
-               <bitfield name="SIZE_Z" low="0" high="31" type="uint"/>
-       </reg32>
-       <reg32 offset="0x23d3" name="HLSQ_CL_NDRANGE_6"/>
-       <reg32 offset="0x23d4" name="HLSQ_CL_CONTROL_0">
-               <bitfield name="WGIDCONSTID" low="0" high="7" type="a3xx_regid"/>
-               <bitfield name="LOCALIDREGID" low="24" high="31" type="a3xx_regid"/>
-       </reg32>
-       <reg32 offset="0x23d5" name="HLSQ_CL_CONTROL_1"/>
-       <reg32 offset="0x23d6" name="HLSQ_CL_KERNEL_CONST"/>
-       <reg32 offset="0x23d7" name="HLSQ_CL_KERNEL_GROUP_X"/>
-       <reg32 offset="0x23d8" name="HLSQ_CL_KERNEL_GROUP_Y"/>
-       <reg32 offset="0x23d9" name="HLSQ_CL_KERNEL_GROUP_Z"/>
-       <reg32 offset="0x23da" name="HLSQ_CL_WG_OFFSET"/>
-       <reg32 offset="0x23db" name="HLSQ_UPDATE_CONTROL"/>
-
-       <!-- PC registers -->
-       <reg32 offset="0x0d00" name="PC_BINNING_COMMAND">
-               <bitfield name="BINNING_ENABLE" pos="0" type="boolean"/>
-       </reg32>
-       <reg32 offset="0x0d08" name="PC_TESSFACTOR_ADDR"/>
-       <reg32 offset="0x0d0c" name="PC_DRAWCALL_SETUP_OVERRIDE"/>
-       <reg32 offset="0x0d10" name="PC_PERFCTR_PC_SEL_0" type="a4xx_pc_perfcounter_select"/>
-       <reg32 offset="0x0d11" name="PC_PERFCTR_PC_SEL_1" type="a4xx_pc_perfcounter_select"/>
-       <reg32 offset="0x0d12" name="PC_PERFCTR_PC_SEL_2" type="a4xx_pc_perfcounter_select"/>
-       <reg32 offset="0x0d13" name="PC_PERFCTR_PC_SEL_3" type="a4xx_pc_perfcounter_select"/>
-       <reg32 offset="0x0d14" name="PC_PERFCTR_PC_SEL_4" type="a4xx_pc_perfcounter_select"/>
-       <reg32 offset="0x0d15" name="PC_PERFCTR_PC_SEL_5" type="a4xx_pc_perfcounter_select"/>
-       <reg32 offset="0x0d16" name="PC_PERFCTR_PC_SEL_6" type="a4xx_pc_perfcounter_select"/>
-       <reg32 offset="0x0d17" name="PC_PERFCTR_PC_SEL_7" type="a4xx_pc_perfcounter_select"/>
-       <reg32 offset="0x21c0" name="PC_BIN_BASE"/>
-       <reg32 offset="0x21c2" name="PC_VSTREAM_CONTROL">
-               <doc>SIZE is current pipe width * height (in tiles)</doc>
-               <bitfield name="SIZE" low="16" high="21" type="uint"/>
-               <doc>
-                       N is some sort of slot # between 0..(SIZE-1).  In case
-                       multiple tiles use same pipe, each tile gets unique slot #
-               </doc>
-               <bitfield name="N" low="22" high="26" type="uint"/>
-       </reg32>
-       <reg32 offset="0x21c4" name="PC_PRIM_VTX_CNTL">
-               <!-- bit0 set if there is >= 1 varying (actually used by FS) -->
-               <bitfield name="VAROUT" low="0" high="3" type="uint">
-                       <doc>in groups of 4x vec4, blob only uses values
-                       0, 1, 2, 4, 6, 8</doc>
-               </bitfield>
-               <bitfield name="PRIMITIVE_RESTART" pos="20" type="boolean"/>
-               <bitfield name="PROVOKING_VTX_LAST" pos="25" type="boolean"/>
-               <!-- PSIZE bit set if gl_PointSize written: -->
-               <bitfield name="PSIZE" pos="26" type="boolean"/>
-       </reg32>
-       <reg32 offset="0x21c5" name="PC_PRIM_VTX_CNTL2">
-               <bitfield name="POLYMODE_FRONT_PTYPE" low="0" high="2" type="adreno_pa_su_sc_draw"/>
-               <bitfield name="POLYMODE_BACK_PTYPE" low="3" high="5" type="adreno_pa_su_sc_draw"/>
-               <bitfield name="POLYMODE_ENABLE" pos="6" type="boolean"/>
-       </reg32>
-       <reg32 offset="0x21c6" name="PC_RESTART_INDEX"/>
-       <reg32 offset="0x21e5" name="PC_GS_PARAM">
-               <bitfield name="MAX_VERTICES" low="0" high="9" type="uint"/><!-- +1, i.e. max is 1024 -->
-               <bitfield name="INVOCATIONS" low="11" high="15" type="uint"/><!-- +1, i.e. max is 32 -->
-               <bitfield name="PRIMTYPE" low="23" high="24" type="adreno_pa_su_sc_draw"/>
-               <bitfield name="LAYER" pos="31" type="boolean"/>
-       </reg32>
-       <reg32 offset="0x21e7" name="PC_HS_PARAM">
-               <bitfield name="VERTICES_OUT" low="0" high="5" type="uint"/>
-               <bitfield name="SPACING" low="21" high="22" type="a4xx_tess_spacing"/>
-               <bitfield name="CW" pos="23" type="boolean"/>
-               <bitfield name="CONNECTED" pos="24" type="boolean"/>
-       </reg32>
-
-       <!-- VBIF registers -->
-       <reg32 offset="0x3000" name="VBIF_VERSION"/>
-       <reg32 offset="0x3001" name="VBIF_CLKON">
-               <bitfield name="FORCE_ON_TESTBUS" pos="0" type="boolean"/>
-       </reg32>
-       <reg32 offset="0x301c" name="VBIF_ABIT_SORT"/>
-       <reg32 offset="0x301d" name="VBIF_ABIT_SORT_CONF"/>
-       <reg32 offset="0x302a" name="VBIF_GATE_OFF_WRREQ_EN"/>
-       <reg32 offset="0x302c" name="VBIF_IN_RD_LIM_CONF0"/>
-       <reg32 offset="0x302d" name="VBIF_IN_RD_LIM_CONF1"/>
-       <reg32 offset="0x3030" name="VBIF_IN_WR_LIM_CONF0"/>
-       <reg32 offset="0x3031" name="VBIF_IN_WR_LIM_CONF1"/>
-       <reg32 offset="0x3049" name="VBIF_ROUND_ROBIN_QOS_ARB"/>
-       <reg32 offset="0x30c0" name="VBIF_PERF_CNT_EN0"/>
-       <reg32 offset="0x30c1" name="VBIF_PERF_CNT_EN1"/>
-       <reg32 offset="0x30c2" name="VBIF_PERF_CNT_EN2"/>
-       <reg32 offset="0x30c3" name="VBIF_PERF_CNT_EN3"/>
-       <reg32 offset="0x30d0" name="VBIF_PERF_CNT_SEL0" type="a4xx_vbif_perfcounter_select"/>
-       <reg32 offset="0x30d1" name="VBIF_PERF_CNT_SEL1" type="a4xx_vbif_perfcounter_select"/>
-       <reg32 offset="0x30d2" name="VBIF_PERF_CNT_SEL2" type="a4xx_vbif_perfcounter_select"/>
-       <reg32 offset="0x30d3" name="VBIF_PERF_CNT_SEL3" type="a4xx_vbif_perfcounter_select"/>
-       <reg32 offset="0x30d8" name="VBIF_PERF_CNT_LOW0"/>
-       <reg32 offset="0x30d9" name="VBIF_PERF_CNT_LOW1"/>
-       <reg32 offset="0x30da" name="VBIF_PERF_CNT_LOW2"/>
-       <reg32 offset="0x30db" name="VBIF_PERF_CNT_LOW3"/>
-       <reg32 offset="0x30e0" name="VBIF_PERF_CNT_HIGH0"/>
-       <reg32 offset="0x30e1" name="VBIF_PERF_CNT_HIGH1"/>
-       <reg32 offset="0x30e2" name="VBIF_PERF_CNT_HIGH2"/>
-       <reg32 offset="0x30e3" name="VBIF_PERF_CNT_HIGH3"/>
-       <reg32 offset="0x3100" name="VBIF_PERF_PWR_CNT_EN0"/>
-       <reg32 offset="0x3101" name="VBIF_PERF_PWR_CNT_EN1"/>
-       <reg32 offset="0x3102" name="VBIF_PERF_PWR_CNT_EN2"/>
-
-       <!--
-       Unknown registers:
-       (mostly related to DX11 features not used yet, I guess?)
-       -->
-
-       <!-- always 00000006: -->
-       <reg32 offset="0x0cc5" name="UNKNOWN_0CC5"/>
-
-       <!-- always 00000000: -->
-       <reg32 offset="0x0cc6" name="UNKNOWN_0CC6"/>
-
-       <!-- always 00000001: -->
-       <reg32 offset="0x0d01" name="UNKNOWN_0D01"/>
-
-       <!-- always 00000000: -->
-       <reg32 offset="0x0e42" name="UNKNOWN_0E42"/>
-
-       <!-- always 00040000: -->
-       <reg32 offset="0x0ec2" name="UNKNOWN_0EC2"/>
-
-       <!-- always 00000000: -->
-       <reg32 offset="0x2001" name="UNKNOWN_2001"/>
-
-       <!-- always 00000000: -->
-       <reg32 offset="0x209b" name="UNKNOWN_209B"/>
-
-       <!-- always 00000000: -->
-       <reg32 offset="0x20ef" name="UNKNOWN_20EF"/>
-
-       <!-- always 00000000: -->
-       <reg32 offset="0x2152" name="UNKNOWN_2152"/>
-
-       <!-- always 00000000: -->
-       <reg32 offset="0x2153" name="UNKNOWN_2153"/>
-
-       <!-- always 00000000: -->
-       <reg32 offset="0x2154" name="UNKNOWN_2154"/>
-
-       <!-- always 00000000: -->
-       <reg32 offset="0x2155" name="UNKNOWN_2155"/>
-
-       <!-- always 00000000: -->
-       <reg32 offset="0x2156" name="UNKNOWN_2156"/>
-
-       <!-- always 00000000: -->
-       <reg32 offset="0x2157" name="UNKNOWN_2157"/>
-
-       <!-- always 0000000b: -->
-       <reg32 offset="0x21c3" name="UNKNOWN_21C3"/>
-
-       <!-- always 00000001: -->
-       <reg32 offset="0x21e6" name="UNKNOWN_21E6"/>
-
-       <!-- always 00000000: -->
-       <reg32 offset="0x2209" name="UNKNOWN_2209"/>
-
-       <!-- always 00000000: -->
-       <reg32 offset="0x22d7" name="UNKNOWN_22D7"/>
-
-        <!-- always 00fcfc00: -->
-        <reg32 offset="0x2352" name="UNKNOWN_2352"/>
-
-</domain>
-
-
-<domain name="A4XX_TEX_SAMP" width="32">
-       <doc>Texture sampler dwords</doc>
-       <enum name="a4xx_tex_filter">
-               <value name="A4XX_TEX_NEAREST" value="0"/>
-               <value name="A4XX_TEX_LINEAR" value="1"/>
-               <value name="A4XX_TEX_ANISO" value="2"/>
-       </enum>
-       <enum name="a4xx_tex_clamp">
-               <value name="A4XX_TEX_REPEAT" value="0"/>
-               <value name="A4XX_TEX_CLAMP_TO_EDGE" value="1"/>
-               <value name="A4XX_TEX_MIRROR_REPEAT" value="2"/>
-               <value name="A4XX_TEX_CLAMP_TO_BORDER" value="3"/>
-               <value name="A4XX_TEX_MIRROR_CLAMP" value="4"/>
-       </enum>
-       <enum name="a4xx_tex_aniso">
-               <value name="A4XX_TEX_ANISO_1" value="0"/>
-               <value name="A4XX_TEX_ANISO_2" value="1"/>
-               <value name="A4XX_TEX_ANISO_4" value="2"/>
-               <value name="A4XX_TEX_ANISO_8" value="3"/>
-               <value name="A4XX_TEX_ANISO_16" value="4"/>
-       </enum>
-       <reg32 offset="0" name="0">
-               <bitfield name="MIPFILTER_LINEAR_NEAR" pos="0" type="boolean"/>
-               <bitfield name="XY_MAG" low="1" high="2" type="a4xx_tex_filter"/>
-               <bitfield name="XY_MIN" low="3" high="4" type="a4xx_tex_filter"/>
-               <bitfield name="WRAP_S" low="5" high="7" type="a4xx_tex_clamp"/>
-               <bitfield name="WRAP_T" low="8" high="10" type="a4xx_tex_clamp"/>
-               <bitfield name="WRAP_R" low="11" high="13" type="a4xx_tex_clamp"/>
-               <bitfield name="ANISO" low="14" high="16" type="a4xx_tex_aniso"/>
-               <bitfield name="LOD_BIAS" low="19" high="31" type="fixed" radix="8"/><!-- no idea how many bits for real -->
-       </reg32>
-       <reg32 offset="1" name="1">
-               <bitfield name="COMPARE_FUNC" low="1" high="3" type="adreno_compare_func"/>
-               <bitfield name="CUBEMAPSEAMLESSFILTOFF" pos="4" type="boolean"/>
-               <bitfield name="UNNORM_COORDS" pos="5" type="boolean"/>
-               <bitfield name="MIPFILTER_LINEAR_FAR" pos="6" type="boolean"/>
-               <bitfield name="MAX_LOD" low="8" high="19" type="ufixed" radix="8"/>
-               <bitfield name="MIN_LOD" low="20" high="31" type="ufixed" radix="8"/>
-       </reg32>
-</domain>
-
-<domain name="A4XX_TEX_CONST" width="32">
-       <doc>Texture constant dwords</doc>
-       <enum name="a4xx_tex_swiz">
-               <!-- same as a2xx? -->
-               <value name="A4XX_TEX_X" value="0"/>
-               <value name="A4XX_TEX_Y" value="1"/>
-               <value name="A4XX_TEX_Z" value="2"/>
-               <value name="A4XX_TEX_W" value="3"/>
-               <value name="A4XX_TEX_ZERO" value="4"/>
-               <value name="A4XX_TEX_ONE" value="5"/>
-       </enum>
-       <enum name="a4xx_tex_type">
-               <value name="A4XX_TEX_1D" value="0"/>
-               <value name="A4XX_TEX_2D" value="1"/>
-               <value name="A4XX_TEX_CUBE" value="2"/>
-               <value name="A4XX_TEX_3D" value="3"/>
-       </enum>
-       <reg32 offset="0" name="0">
-               <bitfield name="TILED" pos="0" type="boolean"/>
-               <bitfield name="SRGB" pos="2" type="boolean"/>
-               <bitfield name="SWIZ_X" low="4" high="6" type="a4xx_tex_swiz"/>
-               <bitfield name="SWIZ_Y" low="7" high="9" type="a4xx_tex_swiz"/>
-               <bitfield name="SWIZ_Z" low="10" high="12" type="a4xx_tex_swiz"/>
-               <bitfield name="SWIZ_W" low="13" high="15" type="a4xx_tex_swiz"/>
-               <bitfield name="MIPLVLS" low="16" high="19" type="uint"/>
-               <bitfield name="FMT" low="22" high="28" type="a4xx_tex_fmt"/>
-               <bitfield name="TYPE" low="29" high="30" type="a4xx_tex_type"/>
-       </reg32>
-       <reg32 offset="1" name="1">
-               <bitfield name="HEIGHT" low="0" high="14" type="uint"/>
-               <bitfield name="WIDTH" low="15" high="29" type="uint"/>
-       </reg32>
-       <reg32 offset="2" name="2">
-               <!-- minimum pitch (for mipmap levels): log2(pitchalign / 32) -->
-               <bitfield name="PITCHALIGN" low="0" high="3" type="uint"/>
-               <doc>Pitch in bytes (so actually stride)</doc>
-               <bitfield name="PITCH" low="9" high="29" type="uint"/>
-               <bitfield name="SWAP" low="30" high="31" type="a3xx_color_swap"/>
-       </reg32>
-       <reg32 offset="3" name="3">
-               <bitfield name="LAYERSZ" low="0" high="13" shr="12" type="uint"/>
-               <bitfield name="DEPTH" low="18" high="30" type="uint"/>
-       </reg32>
-       <reg32 offset="4" name="4">
-               <!--
-               like a3xx we seem to have two LAYERSZ's.. although this one
-               seems too small to be useful, and when it overflows blob just
-               sets it to zero..
-                -->
-               <bitfield name="LAYERSZ" low="0" high="3" shr="12" type="uint"/>
-               <bitfield name="BASE" low="5" high="31" shr="5"/>
-       </reg32>
-       <reg32 offset="5" name="5"/>
-       <reg32 offset="6" name="6"/>
-       <reg32 offset="7" name="7"/>
-</domain>
-
-<domain name="A4XX_SSBO_0" width="32">
-       <reg32 offset="0" name="0">
-               <bitfield name="BASE" low="5" high="31" shr="5"/>
-       </reg32>
-       <reg32 offset="1" name="1">
-               <doc>Pitch in bytes (so actually stride)</doc>
-               <bitfield name="PITCH" low="0" high="21" type="uint"/>
-       </reg32>
-       <reg32 offset="2" name="2">
-               <bitfield name="ARRAY_PITCH" low="12" high="25" shr="12" type="uint"/>
-       </reg32>
-       <reg32 offset="3" name="3">
-               <!-- bytes per pixel: -->
-               <bitfield name="CPP" low="0" high="5" type="uint"/>
-       </reg32>
-</domain>
-
-<domain name="A4XX_SSBO_1" width="32">
-       <reg32 offset="0" name="0">
-               <bitfield name="CPP" low="0" high="4" type="uint"/>
-               <bitfield name="FMT" low="8" high="15" type="a4xx_color_fmt"/>
-               <bitfield name="WIDTH" low="16" high="31" type="uint"/>
-       </reg32>
-       <reg32 offset="1" name="1">
-               <bitfield name="HEIGHT" low="0" high="15" type="uint"/>
-               <bitfield name="DEPTH" low="16" high="31" type="uint"/>
-       </reg32>
-</domain>
-
-</database>
diff --git a/src/freedreno/registers/a5xx.xml b/src/freedreno/registers/a5xx.xml
deleted file mode 100644 (file)
index 34ae474..0000000
+++ /dev/null
@@ -1,2996 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<database xmlns="http://nouveau.freedesktop.org/"
-xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-xsi:schemaLocation="http://nouveau.freedesktop.org/ rules-ng.xsd">
-<import file="freedreno_copyright.xml"/>
-<import file="adreno/adreno_common.xml"/>
-<import file="adreno/adreno_pm4.xml"/>
-
-<enum name="a5xx_color_fmt">
-       <value value="0x02" name="RB5_A8_UNORM"/>
-       <value value="0x03" name="RB5_R8_UNORM"/>
-       <value value="0x04" name="RB5_R8_SNORM"/>
-       <value value="0x05" name="RB5_R8_UINT"/>
-       <value value="0x06" name="RB5_R8_SINT"/>
-       <value value="0x08" name="RB5_R4G4B4A4_UNORM"/>
-       <value value="0x0a" name="RB5_R5G5B5A1_UNORM"/>
-       <value value="0x0e" name="RB5_R5G6B5_UNORM"/>
-       <value value="0x0f" name="RB5_R8G8_UNORM"/>
-       <value value="0x10" name="RB5_R8G8_SNORM"/>
-       <value value="0x11" name="RB5_R8G8_UINT"/>
-       <value value="0x12" name="RB5_R8G8_SINT"/>
-       <value value="0x15" name="RB5_R16_UNORM"/>
-       <value value="0x16" name="RB5_R16_SNORM"/>
-       <value value="0x17" name="RB5_R16_FLOAT"/>
-       <value value="0x18" name="RB5_R16_UINT"/>
-       <value value="0x19" name="RB5_R16_SINT"/>
-       <value value="0x30" name="RB5_R8G8B8A8_UNORM"/>
-       <value value="0x31" name="RB5_R8G8B8_UNORM"/>
-       <value value="0x32" name="RB5_R8G8B8A8_SNORM"/>
-       <value value="0x33" name="RB5_R8G8B8A8_UINT"/>
-       <value value="0x34" name="RB5_R8G8B8A8_SINT"/>
-       <value value="0x37" name="RB5_R10G10B10A2_UNORM"/>  <!-- GL_RGB10_A2 -->
-       <value value="0x3a" name="RB5_R10G10B10A2_UINT"/>   <!-- GL_RGB10_A2UI -->
-       <value value="0x42" name="RB5_R11G11B10_FLOAT"/>    <!-- GL_R11F_G11F_B10F -->
-       <value value="0x43" name="RB5_R16G16_UNORM"/>
-       <value value="0x44" name="RB5_R16G16_SNORM"/>
-       <value value="0x45" name="RB5_R16G16_FLOAT"/>
-       <value value="0x46" name="RB5_R16G16_UINT"/>
-       <value value="0x47" name="RB5_R16G16_SINT"/>
-       <value value="0x4a" name="RB5_R32_FLOAT"/>
-       <value value="0x4b" name="RB5_R32_UINT"/>
-       <value value="0x4c" name="RB5_R32_SINT"/>
-       <value value="0x60" name="RB5_R16G16B16A16_UNORM"/>
-       <value value="0x61" name="RB5_R16G16B16A16_SNORM"/>
-       <value value="0x62" name="RB5_R16G16B16A16_FLOAT"/>
-       <value value="0x63" name="RB5_R16G16B16A16_UINT"/>
-       <value value="0x64" name="RB5_R16G16B16A16_SINT"/>
-       <value value="0x67" name="RB5_R32G32_FLOAT"/>
-       <value value="0x68" name="RB5_R32G32_UINT"/>
-       <value value="0x69" name="RB5_R32G32_SINT"/>
-       <value value="0x82" name="RB5_R32G32B32A32_FLOAT"/>
-       <value value="0x83" name="RB5_R32G32B32A32_UINT"/>
-       <value value="0x84" name="RB5_R32G32B32A32_SINT"/>
-
-       <value value="0xff" name="RB5_NONE"/>
-</enum>
-
-<enum name="a5xx_tile_mode">
-       <value name="TILE5_LINEAR" value="0"/>
-       <value name="TILE5_2" value="2"/>
-       <value name="TILE5_3" value="3"/>
-</enum>
-
-<enum name="a5xx_vtx_fmt" prefix="chipset">
-       <value value="0x03" name="VFMT5_8_UNORM"/>
-       <value value="0x04" name="VFMT5_8_SNORM"/>
-       <value value="0x05" name="VFMT5_8_UINT"/>
-       <value value="0x06" name="VFMT5_8_SINT"/>
-
-       <value value="0x0f" name="VFMT5_8_8_UNORM"/>
-       <value value="0x10" name="VFMT5_8_8_SNORM"/>
-       <value value="0x11" name="VFMT5_8_8_UINT"/>
-       <value value="0x12" name="VFMT5_8_8_SINT"/>
-
-       <value value="0x15" name="VFMT5_16_UNORM"/>
-       <value value="0x16" name="VFMT5_16_SNORM"/>
-       <value value="0x17" name="VFMT5_16_FLOAT"/>
-       <value value="0x18" name="VFMT5_16_UINT"/>
-       <value value="0x19" name="VFMT5_16_SINT"/>
-
-       <value value="0x21" name="VFMT5_8_8_8_UNORM"/>
-       <value value="0x22" name="VFMT5_8_8_8_SNORM"/>
-       <value value="0x23" name="VFMT5_8_8_8_UINT"/>
-       <value value="0x24" name="VFMT5_8_8_8_SINT"/>
-
-       <value value="0x30" name="VFMT5_8_8_8_8_UNORM"/>
-       <value value="0x32" name="VFMT5_8_8_8_8_SNORM"/>
-       <value value="0x33" name="VFMT5_8_8_8_8_UINT"/>
-       <value value="0x34" name="VFMT5_8_8_8_8_SINT"/>
-
-       <value value="0x36" name="VFMT5_10_10_10_2_UNORM"/>
-       <value value="0x39" name="VFMT5_10_10_10_2_SNORM"/>
-       <value value="0x3a" name="VFMT5_10_10_10_2_UINT"/>
-       <value value="0x3b" name="VFMT5_10_10_10_2_SINT"/>
-
-       <value value="0x42" name="VFMT5_11_11_10_FLOAT"/>
-
-       <value value="0x43" name="VFMT5_16_16_UNORM"/>
-       <value value="0x44" name="VFMT5_16_16_SNORM"/>
-       <value value="0x45" name="VFMT5_16_16_FLOAT"/>
-       <value value="0x46" name="VFMT5_16_16_UINT"/>
-       <value value="0x47" name="VFMT5_16_16_SINT"/>
-
-       <value value="0x48" name="VFMT5_32_UNORM"/>
-       <value value="0x49" name="VFMT5_32_SNORM"/>
-       <value value="0x4a" name="VFMT5_32_FLOAT"/>
-       <value value="0x4b" name="VFMT5_32_UINT"/>
-       <value value="0x4c" name="VFMT5_32_SINT"/>
-       <value value="0x4d" name="VFMT5_32_FIXED"/>
-
-       <value value="0x58" name="VFMT5_16_16_16_UNORM"/>
-       <value value="0x59" name="VFMT5_16_16_16_SNORM"/>
-       <value value="0x5a" name="VFMT5_16_16_16_FLOAT"/>
-       <value value="0x5b" name="VFMT5_16_16_16_UINT"/>
-       <value value="0x5c" name="VFMT5_16_16_16_SINT"/>
-
-       <value value="0x60" name="VFMT5_16_16_16_16_UNORM"/>
-       <value value="0x61" name="VFMT5_16_16_16_16_SNORM"/>
-       <value value="0x62" name="VFMT5_16_16_16_16_FLOAT"/>
-       <value value="0x63" name="VFMT5_16_16_16_16_UINT"/>
-       <value value="0x64" name="VFMT5_16_16_16_16_SINT"/>
-
-       <value value="0x65" name="VFMT5_32_32_UNORM"/>
-       <value value="0x66" name="VFMT5_32_32_SNORM"/>
-       <value value="0x67" name="VFMT5_32_32_FLOAT"/>
-       <value value="0x68" name="VFMT5_32_32_UINT"/>
-       <value value="0x69" name="VFMT5_32_32_SINT"/>
-       <value value="0x6a" name="VFMT5_32_32_FIXED"/>
-
-       <value value="0x70" name="VFMT5_32_32_32_UNORM"/>
-       <value value="0x71" name="VFMT5_32_32_32_SNORM"/>
-       <value value="0x72" name="VFMT5_32_32_32_UINT"/>
-       <value value="0x73" name="VFMT5_32_32_32_SINT"/>
-       <value value="0x74" name="VFMT5_32_32_32_FLOAT"/>
-       <value value="0x75" name="VFMT5_32_32_32_FIXED"/>
-
-       <value value="0x80" name="VFMT5_32_32_32_32_UNORM"/>
-       <value value="0x81" name="VFMT5_32_32_32_32_SNORM"/>
-       <value value="0x82" name="VFMT5_32_32_32_32_FLOAT"/>
-       <value value="0x83" name="VFMT5_32_32_32_32_UINT"/>
-       <value value="0x84" name="VFMT5_32_32_32_32_SINT"/>
-       <value value="0x85" name="VFMT5_32_32_32_32_FIXED"/>
-
-       <value value="0xff" name="VFMT5_NONE"/>
-</enum>
-
-<enum name="a5xx_tex_fmt">
-       <value value="0x02" name="TFMT5_A8_UNORM"/>
-       <value value="0x03" name="TFMT5_8_UNORM"/>
-       <value value="0x04" name="TFMT5_8_SNORM"/>
-       <value value="0x05" name="TFMT5_8_UINT"/>
-       <value value="0x06" name="TFMT5_8_SINT"/>
-       <value value="0x08" name="TFMT5_4_4_4_4_UNORM"/>
-       <value value="0x0a" name="TFMT5_5_5_5_1_UNORM"/>
-       <value value="0x0e" name="TFMT5_5_6_5_UNORM"/>
-       <value value="0x0f" name="TFMT5_8_8_UNORM"/>
-       <value value="0x10" name="TFMT5_8_8_SNORM"/>
-       <value value="0x11" name="TFMT5_8_8_UINT"/>
-       <value value="0x12" name="TFMT5_8_8_SINT"/>
-       <value value="0x13" name="TFMT5_L8_A8_UNORM"/>
-       <value value="0x15" name="TFMT5_16_UNORM"/>
-       <value value="0x16" name="TFMT5_16_SNORM"/>
-       <value value="0x17" name="TFMT5_16_FLOAT"/>
-       <value value="0x18" name="TFMT5_16_UINT"/>
-       <value value="0x19" name="TFMT5_16_SINT"/>
-       <value value="0x30" name="TFMT5_8_8_8_8_UNORM"/>
-       <value value="0x31" name="TFMT5_8_8_8_UNORM"/>
-       <value value="0x32" name="TFMT5_8_8_8_8_SNORM"/>
-       <value value="0x33" name="TFMT5_8_8_8_8_UINT"/>
-       <value value="0x34" name="TFMT5_8_8_8_8_SINT"/>
-       <value value="0x35" name="TFMT5_9_9_9_E5_FLOAT"/>
-       <value value="0x36" name="TFMT5_10_10_10_2_UNORM"/>
-       <value value="0x3a" name="TFMT5_10_10_10_2_UINT"/>
-       <value value="0x42" name="TFMT5_11_11_10_FLOAT"/>
-       <value value="0x43" name="TFMT5_16_16_UNORM"/>
-       <value value="0x44" name="TFMT5_16_16_SNORM"/>
-       <value value="0x45" name="TFMT5_16_16_FLOAT"/>
-       <value value="0x46" name="TFMT5_16_16_UINT"/>
-       <value value="0x47" name="TFMT5_16_16_SINT"/>
-       <value value="0x4a" name="TFMT5_32_FLOAT"/>
-       <value value="0x4b" name="TFMT5_32_UINT"/>
-       <value value="0x4c" name="TFMT5_32_SINT"/>
-       <value value="0x60" name="TFMT5_16_16_16_16_UNORM"/>
-       <value value="0x61" name="TFMT5_16_16_16_16_SNORM"/>
-       <value value="0x62" name="TFMT5_16_16_16_16_FLOAT"/>
-       <value value="0x63" name="TFMT5_16_16_16_16_UINT"/>
-       <value value="0x64" name="TFMT5_16_16_16_16_SINT"/>
-       <value value="0x67" name="TFMT5_32_32_FLOAT"/>
-       <value value="0x68" name="TFMT5_32_32_UINT"/>
-       <value value="0x69" name="TFMT5_32_32_SINT"/>
-       <value value="0x72" name="TFMT5_32_32_32_UINT"/>
-       <value value="0x73" name="TFMT5_32_32_32_SINT"/>
-       <value value="0x74" name="TFMT5_32_32_32_FLOAT"/>
-       <value value="0x82" name="TFMT5_32_32_32_32_FLOAT"/>
-       <value value="0x83" name="TFMT5_32_32_32_32_UINT"/>
-       <value value="0x84" name="TFMT5_32_32_32_32_SINT"/>
-       <value value="0xa0" name="TFMT5_X8Z24_UNORM"/>
-
-       <value value="0xab" name="TFMT5_ETC2_RG11_UNORM"/>
-       <value value="0xac" name="TFMT5_ETC2_RG11_SNORM"/>
-       <value value="0xad" name="TFMT5_ETC2_R11_UNORM"/>
-       <value value="0xae" name="TFMT5_ETC2_R11_SNORM"/>
-       <value value="0xaf" name="TFMT5_ETC1"/>
-       <value value="0xb0" name="TFMT5_ETC2_RGB8"/>
-       <value value="0xb1" name="TFMT5_ETC2_RGBA8"/>
-       <value value="0xb2" name="TFMT5_ETC2_RGB8A1"/>
-       <value value="0xb3" name="TFMT5_DXT1"/>
-       <value value="0xb4" name="TFMT5_DXT3"/>
-       <value value="0xb5" name="TFMT5_DXT5"/>
-       <value value="0xb7" name="TFMT5_RGTC1_UNORM"/>
-       <value value="0xb8" name="TFMT5_RGTC1_SNORM"/>
-       <value value="0xbb" name="TFMT5_RGTC2_UNORM"/>
-       <value value="0xbc" name="TFMT5_RGTC2_SNORM"/>
-       <value value="0xbe" name="TFMT5_BPTC_UFLOAT"/>
-       <value value="0xbf" name="TFMT5_BPTC_FLOAT"/>
-       <value value="0xc0" name="TFMT5_BPTC"/>
-       <value value="0xc1" name="TFMT5_ASTC_4x4"/>
-       <value value="0xc2" name="TFMT5_ASTC_5x4"/>
-       <value value="0xc3" name="TFMT5_ASTC_5x5"/>
-       <value value="0xc4" name="TFMT5_ASTC_6x5"/>
-       <value value="0xc5" name="TFMT5_ASTC_6x6"/>
-       <value value="0xc6" name="TFMT5_ASTC_8x5"/>
-       <value value="0xc7" name="TFMT5_ASTC_8x6"/>
-       <value value="0xc8" name="TFMT5_ASTC_8x8"/>
-       <value value="0xc9" name="TFMT5_ASTC_10x5"/>
-       <value value="0xca" name="TFMT5_ASTC_10x6"/>
-       <value value="0xcb" name="TFMT5_ASTC_10x8"/>
-       <value value="0xcc" name="TFMT5_ASTC_10x10"/>
-       <value value="0xcd" name="TFMT5_ASTC_12x10"/>
-       <value value="0xce" name="TFMT5_ASTC_12x12"/>
-
-       <value value="0xff" name="TFMT5_NONE"/>
-</enum>
-
-<enum name="a5xx_depth_format">
-       <value name="DEPTH5_NONE" value="0"/>
-       <value name="DEPTH5_16" value="1"/>
-       <value name="DEPTH5_24_8" value="2"/>
-       <value name="DEPTH5_32" value="4"/>
-</enum>
-
-<enum name="a5xx_blit_buf">
-       <value value="0" name="BLIT_MRT0"/>
-       <value value="1" name="BLIT_MRT1"/>
-       <value value="2" name="BLIT_MRT2"/>
-       <value value="3" name="BLIT_MRT3"/>
-       <value value="4" name="BLIT_MRT4"/>
-       <value value="5" name="BLIT_MRT5"/>
-       <value value="6" name="BLIT_MRT6"/>
-       <value value="7" name="BLIT_MRT7"/>
-       <value value="8" name="BLIT_ZS"/>       <!-- depth or combined depth+stencil -->
-       <value value="9" name="BLIT_S"/>        <!-- separate stencil -->
-</enum>
-
-<!-- see comment in a4xx.xml about script to extract countables from test-perf output -->
-<enum name="a5xx_cp_perfcounter_select">
-       <value value="0" name="PERF_CP_ALWAYS_COUNT"/>
-       <value value="1" name="PERF_CP_BUSY_GFX_CORE_IDLE"/>
-       <value value="2" name="PERF_CP_BUSY_CYCLES"/>
-       <value value="3" name="PERF_CP_PFP_IDLE"/>
-       <value value="4" name="PERF_CP_PFP_BUSY_WORKING"/>
-       <value value="5" name="PERF_CP_PFP_STALL_CYCLES_ANY"/>
-       <value value="6" name="PERF_CP_PFP_STARVE_CYCLES_ANY"/>
-       <value value="7" name="PERF_CP_PFP_ICACHE_MISS"/>
-       <value value="8" name="PERF_CP_PFP_ICACHE_HIT"/>
-       <value value="9" name="PERF_CP_PFP_MATCH_PM4_PKT_PROFILE"/>
-       <value value="10" name="PERF_CP_ME_BUSY_WORKING"/>
-       <value value="11" name="PERF_CP_ME_IDLE"/>
-       <value value="12" name="PERF_CP_ME_STARVE_CYCLES_ANY"/>
-       <value value="13" name="PERF_CP_ME_FIFO_EMPTY_PFP_IDLE"/>
-       <value value="14" name="PERF_CP_ME_FIFO_EMPTY_PFP_BUSY"/>
-       <value value="15" name="PERF_CP_ME_FIFO_FULL_ME_BUSY"/>
-       <value value="16" name="PERF_CP_ME_FIFO_FULL_ME_NON_WORKING"/>
-       <value value="17" name="PERF_CP_ME_STALL_CYCLES_ANY"/>
-       <value value="18" name="PERF_CP_ME_ICACHE_MISS"/>
-       <value value="19" name="PERF_CP_ME_ICACHE_HIT"/>
-       <value value="20" name="PERF_CP_NUM_PREEMPTIONS"/>
-       <value value="21" name="PERF_CP_PREEMPTION_REACTION_DELAY"/>
-       <value value="22" name="PERF_CP_PREEMPTION_SWITCH_OUT_TIME"/>
-       <value value="23" name="PERF_CP_PREEMPTION_SWITCH_IN_TIME"/>
-       <value value="24" name="PERF_CP_DEAD_DRAWS_IN_BIN_RENDER"/>
-       <value value="25" name="PERF_CP_PREDICATED_DRAWS_KILLED"/>
-       <value value="26" name="PERF_CP_MODE_SWITCH"/>
-       <value value="27" name="PERF_CP_ZPASS_DONE"/>
-       <value value="28" name="PERF_CP_CONTEXT_DONE"/>
-       <value value="29" name="PERF_CP_CACHE_FLUSH"/>
-       <value value="30" name="PERF_CP_LONG_PREEMPTIONS"/>
-</enum>
-
-<enum name="a5xx_rbbm_perfcounter_select">
-       <value value="0" name="PERF_RBBM_ALWAYS_COUNT"/>
-       <value value="1" name="PERF_RBBM_ALWAYS_ON"/>
-       <value value="2" name="PERF_RBBM_TSE_BUSY"/>
-       <value value="3" name="PERF_RBBM_RAS_BUSY"/>
-       <value value="4" name="PERF_RBBM_PC_DCALL_BUSY"/>
-       <value value="5" name="PERF_RBBM_PC_VSD_BUSY"/>
-       <value value="6" name="PERF_RBBM_STATUS_MASKED"/>
-       <value value="7" name="PERF_RBBM_COM_BUSY"/>
-       <value value="8" name="PERF_RBBM_DCOM_BUSY"/>
-       <value value="9" name="PERF_RBBM_VBIF_BUSY"/>
-       <value value="10" name="PERF_RBBM_VSC_BUSY"/>
-       <value value="11" name="PERF_RBBM_TESS_BUSY"/>
-       <value value="12" name="PERF_RBBM_UCHE_BUSY"/>
-       <value value="13" name="PERF_RBBM_HLSQ_BUSY"/>
-</enum>
-
-<enum name="a5xx_pc_perfcounter_select">
-       <value value="0" name="PERF_PC_BUSY_CYCLES"/>
-       <value value="1" name="PERF_PC_WORKING_CYCLES"/>
-       <value value="2" name="PERF_PC_STALL_CYCLES_VFD"/>
-       <value value="3" name="PERF_PC_STALL_CYCLES_TSE"/>
-       <value value="4" name="PERF_PC_STALL_CYCLES_VPC"/>
-       <value value="5" name="PERF_PC_STALL_CYCLES_UCHE"/>
-       <value value="6" name="PERF_PC_STALL_CYCLES_TESS"/>
-       <value value="7" name="PERF_PC_STALL_CYCLES_TSE_ONLY"/>
-       <value value="8" name="PERF_PC_STALL_CYCLES_VPC_ONLY"/>
-       <value value="9" name="PERF_PC_PASS1_TF_STALL_CYCLES"/>
-       <value value="10" name="PERF_PC_STARVE_CYCLES_FOR_INDEX"/>
-       <value value="11" name="PERF_PC_STARVE_CYCLES_FOR_TESS_FACTOR"/>
-       <value value="12" name="PERF_PC_STARVE_CYCLES_FOR_VIZ_STREAM"/>
-       <value value="13" name="PERF_PC_STARVE_CYCLES_FOR_POSITION"/>
-       <value value="14" name="PERF_PC_STARVE_CYCLES_DI"/>
-       <value value="15" name="PERF_PC_VIS_STREAMS_LOADED"/>
-       <value value="16" name="PERF_PC_INSTANCES"/>
-       <value value="17" name="PERF_PC_VPC_PRIMITIVES"/>
-       <value value="18" name="PERF_PC_DEAD_PRIM"/>
-       <value value="19" name="PERF_PC_LIVE_PRIM"/>
-       <value value="20" name="PERF_PC_VERTEX_HITS"/>
-       <value value="21" name="PERF_PC_IA_VERTICES"/>
-       <value value="22" name="PERF_PC_IA_PRIMITIVES"/>
-       <value value="23" name="PERF_PC_GS_PRIMITIVES"/>
-       <value value="24" name="PERF_PC_HS_INVOCATIONS"/>
-       <value value="25" name="PERF_PC_DS_INVOCATIONS"/>
-       <value value="26" name="PERF_PC_VS_INVOCATIONS"/>
-       <value value="27" name="PERF_PC_GS_INVOCATIONS"/>
-       <value value="28" name="PERF_PC_DS_PRIMITIVES"/>
-       <value value="29" name="PERF_PC_VPC_POS_DATA_TRANSACTION"/>
-       <value value="30" name="PERF_PC_3D_DRAWCALLS"/>
-       <value value="31" name="PERF_PC_2D_DRAWCALLS"/>
-       <value value="32" name="PERF_PC_NON_DRAWCALL_GLOBAL_EVENTS"/>
-       <value value="33" name="PERF_TESS_BUSY_CYCLES"/>
-       <value value="34" name="PERF_TESS_WORKING_CYCLES"/>
-       <value value="35" name="PERF_TESS_STALL_CYCLES_PC"/>
-       <value value="36" name="PERF_TESS_STARVE_CYCLES_PC"/>
-</enum>
-
-<enum name="a5xx_vfd_perfcounter_select">
-       <value value="0" name="PERF_VFD_BUSY_CYCLES"/>
-       <value value="1" name="PERF_VFD_STALL_CYCLES_UCHE"/>
-       <value value="2" name="PERF_VFD_STALL_CYCLES_VPC_ALLOC"/>
-       <value value="3" name="PERF_VFD_STALL_CYCLES_MISS_VB"/>
-       <value value="4" name="PERF_VFD_STALL_CYCLES_MISS_Q"/>
-       <value value="5" name="PERF_VFD_STALL_CYCLES_SP_INFO"/>
-       <value value="6" name="PERF_VFD_STALL_CYCLES_SP_ATTR"/>
-       <value value="7" name="PERF_VFD_STALL_CYCLES_VFDP_VB"/>
-       <value value="8" name="PERF_VFD_STALL_CYCLES_VFDP_Q"/>
-       <value value="9" name="PERF_VFD_DECODER_PACKER_STALL"/>
-       <value value="10" name="PERF_VFD_STARVE_CYCLES_UCHE"/>
-       <value value="11" name="PERF_VFD_RBUFFER_FULL"/>
-       <value value="12" name="PERF_VFD_ATTR_INFO_FIFO_FULL"/>
-       <value value="13" name="PERF_VFD_DECODED_ATTRIBUTE_BYTES"/>
-       <value value="14" name="PERF_VFD_NUM_ATTRIBUTES"/>
-       <value value="15" name="PERF_VFD_INSTRUCTIONS"/>
-       <value value="16" name="PERF_VFD_UPPER_SHADER_FIBERS"/>
-       <value value="17" name="PERF_VFD_LOWER_SHADER_FIBERS"/>
-       <value value="18" name="PERF_VFD_MODE_0_FIBERS"/>
-       <value value="19" name="PERF_VFD_MODE_1_FIBERS"/>
-       <value value="20" name="PERF_VFD_MODE_2_FIBERS"/>
-       <value value="21" name="PERF_VFD_MODE_3_FIBERS"/>
-       <value value="22" name="PERF_VFD_MODE_4_FIBERS"/>
-       <value value="23" name="PERF_VFD_TOTAL_VERTICES"/>
-       <value value="24" name="PERF_VFD_NUM_ATTR_MISS"/>
-       <value value="25" name="PERF_VFD_1_BURST_REQ"/>
-       <value value="26" name="PERF_VFDP_STALL_CYCLES_VFD"/>
-       <value value="27" name="PERF_VFDP_STALL_CYCLES_VFD_INDEX"/>
-       <value value="28" name="PERF_VFDP_STALL_CYCLES_VFD_PROG"/>
-       <value value="29" name="PERF_VFDP_STARVE_CYCLES_PC"/>
-       <value value="30" name="PERF_VFDP_VS_STAGE_32_WAVES"/>
-</enum>
-
-<enum name="a5xx_hlsq_perfcounter_select">
-       <value value="0" name="PERF_HLSQ_BUSY_CYCLES"/>
-       <value value="1" name="PERF_HLSQ_STALL_CYCLES_UCHE"/>
-       <value value="2" name="PERF_HLSQ_STALL_CYCLES_SP_STATE"/>
-       <value value="3" name="PERF_HLSQ_STALL_CYCLES_SP_FS_STAGE"/>
-       <value value="4" name="PERF_HLSQ_UCHE_LATENCY_CYCLES"/>
-       <value value="5" name="PERF_HLSQ_UCHE_LATENCY_COUNT"/>
-       <value value="6" name="PERF_HLSQ_FS_STAGE_32_WAVES"/>
-       <value value="7" name="PERF_HLSQ_FS_STAGE_64_WAVES"/>
-       <value value="8" name="PERF_HLSQ_QUADS"/>
-       <value value="9" name="PERF_HLSQ_SP_STATE_COPY_TRANS_FS_STAGE"/>
-       <value value="10" name="PERF_HLSQ_SP_STATE_COPY_TRANS_VS_STAGE"/>
-       <value value="11" name="PERF_HLSQ_TP_STATE_COPY_TRANS_FS_STAGE"/>
-       <value value="12" name="PERF_HLSQ_TP_STATE_COPY_TRANS_VS_STAGE"/>
-       <value value="13" name="PERF_HLSQ_CS_INVOCATIONS"/>
-       <value value="14" name="PERF_HLSQ_COMPUTE_DRAWCALLS"/>
-</enum>
-
-<enum name="a5xx_vpc_perfcounter_select">
-       <value value="0" name="PERF_VPC_BUSY_CYCLES"/>
-       <value value="1" name="PERF_VPC_WORKING_CYCLES"/>
-       <value value="2" name="PERF_VPC_STALL_CYCLES_UCHE"/>
-       <value value="3" name="PERF_VPC_STALL_CYCLES_VFD_WACK"/>
-       <value value="4" name="PERF_VPC_STALL_CYCLES_HLSQ_PRIM_ALLOC"/>
-       <value value="5" name="PERF_VPC_STALL_CYCLES_PC"/>
-       <value value="6" name="PERF_VPC_STALL_CYCLES_SP_LM"/>
-       <value value="7" name="PERF_VPC_POS_EXPORT_STALL_CYCLES"/>
-       <value value="8" name="PERF_VPC_STARVE_CYCLES_SP"/>
-       <value value="9" name="PERF_VPC_STARVE_CYCLES_LRZ"/>
-       <value value="10" name="PERF_VPC_PC_PRIMITIVES"/>
-       <value value="11" name="PERF_VPC_SP_COMPONENTS"/>
-       <value value="12" name="PERF_VPC_SP_LM_PRIMITIVES"/>
-       <value value="13" name="PERF_VPC_SP_LM_COMPONENTS"/>
-       <value value="14" name="PERF_VPC_SP_LM_DWORDS"/>
-       <value value="15" name="PERF_VPC_STREAMOUT_COMPONENTS"/>
-       <value value="16" name="PERF_VPC_GRANT_PHASES"/>
-</enum>
-
-<enum name="a5xx_tse_perfcounter_select">
-       <value value="0" name="PERF_TSE_BUSY_CYCLES"/>
-       <value value="1" name="PERF_TSE_CLIPPING_CYCLES"/>
-       <value value="2" name="PERF_TSE_STALL_CYCLES_RAS"/>
-       <value value="3" name="PERF_TSE_STALL_CYCLES_LRZ_BARYPLANE"/>
-       <value value="4" name="PERF_TSE_STALL_CYCLES_LRZ_ZPLANE"/>
-       <value value="5" name="PERF_TSE_STARVE_CYCLES_PC"/>
-       <value value="6" name="PERF_TSE_INPUT_PRIM"/>
-       <value value="7" name="PERF_TSE_INPUT_NULL_PRIM"/>
-       <value value="8" name="PERF_TSE_TRIVAL_REJ_PRIM"/>
-       <value value="9" name="PERF_TSE_CLIPPED_PRIM"/>
-       <value value="10" name="PERF_TSE_ZERO_AREA_PRIM"/>
-       <value value="11" name="PERF_TSE_FACENESS_CULLED_PRIM"/>
-       <value value="12" name="PERF_TSE_ZERO_PIXEL_PRIM"/>
-       <value value="13" name="PERF_TSE_OUTPUT_NULL_PRIM"/>
-       <value value="14" name="PERF_TSE_OUTPUT_VISIBLE_PRIM"/>
-       <value value="15" name="PERF_TSE_CINVOCATION"/>
-       <value value="16" name="PERF_TSE_CPRIMITIVES"/>
-       <value value="17" name="PERF_TSE_2D_INPUT_PRIM"/>
-       <value value="18" name="PERF_TSE_2D_ALIVE_CLCLES"/>
-</enum>
-
-<enum name="a5xx_ras_perfcounter_select">
-       <value value="0" name="PERF_RAS_BUSY_CYCLES"/>
-       <value value="1" name="PERF_RAS_SUPERTILE_ACTIVE_CYCLES"/>
-       <value value="2" name="PERF_RAS_STALL_CYCLES_LRZ"/>
-       <value value="3" name="PERF_RAS_STARVE_CYCLES_TSE"/>
-       <value value="4" name="PERF_RAS_SUPER_TILES"/>
-       <value value="5" name="PERF_RAS_8X4_TILES"/>
-       <value value="6" name="PERF_RAS_MASKGEN_ACTIVE"/>
-       <value value="7" name="PERF_RAS_FULLY_COVERED_SUPER_TILES"/>
-       <value value="8" name="PERF_RAS_FULLY_COVERED_8X4_TILES"/>
-       <value value="9" name="PERF_RAS_PRIM_KILLED_INVISILBE"/>
-</enum>
-
-<enum name="a5xx_lrz_perfcounter_select">
-       <value value="0" name="PERF_LRZ_BUSY_CYCLES"/>
-       <value value="1" name="PERF_LRZ_STARVE_CYCLES_RAS"/>
-       <value value="2" name="PERF_LRZ_STALL_CYCLES_RB"/>
-       <value value="3" name="PERF_LRZ_STALL_CYCLES_VSC"/>
-       <value value="4" name="PERF_LRZ_STALL_CYCLES_VPC"/>
-       <value value="5" name="PERF_LRZ_STALL_CYCLES_FLAG_PREFETCH"/>
-       <value value="6" name="PERF_LRZ_STALL_CYCLES_UCHE"/>
-       <value value="7" name="PERF_LRZ_LRZ_READ"/>
-       <value value="8" name="PERF_LRZ_LRZ_WRITE"/>
-       <value value="9" name="PERF_LRZ_READ_LATENCY"/>
-       <value value="10" name="PERF_LRZ_MERGE_CACHE_UPDATING"/>
-       <value value="11" name="PERF_LRZ_PRIM_KILLED_BY_MASKGEN"/>
-       <value value="12" name="PERF_LRZ_PRIM_KILLED_BY_LRZ"/>
-       <value value="13" name="PERF_LRZ_VISIBLE_PRIM_AFTER_LRZ"/>
-       <value value="14" name="PERF_LRZ_FULL_8X8_TILES"/>
-       <value value="15" name="PERF_LRZ_PARTIAL_8X8_TILES"/>
-       <value value="16" name="PERF_LRZ_TILE_KILLED"/>
-       <value value="17" name="PERF_LRZ_TOTAL_PIXEL"/>
-       <value value="18" name="PERF_LRZ_VISIBLE_PIXEL_AFTER_LRZ"/>
-</enum>
-
-<enum name="a5xx_uche_perfcounter_select">
-       <value value="0" name="PERF_UCHE_BUSY_CYCLES"/>
-       <value value="1" name="PERF_UCHE_STALL_CYCLES_VBIF"/>
-       <value value="2" name="PERF_UCHE_VBIF_LATENCY_CYCLES"/>
-       <value value="3" name="PERF_UCHE_VBIF_LATENCY_SAMPLES"/>
-       <value value="4" name="PERF_UCHE_VBIF_READ_BEATS_TP"/>
-       <value value="5" name="PERF_UCHE_VBIF_READ_BEATS_VFD"/>
-       <value value="6" name="PERF_UCHE_VBIF_READ_BEATS_HLSQ"/>
-       <value value="7" name="PERF_UCHE_VBIF_READ_BEATS_LRZ"/>
-       <value value="8" name="PERF_UCHE_VBIF_READ_BEATS_SP"/>
-       <value value="9" name="PERF_UCHE_READ_REQUESTS_TP"/>
-       <value value="10" name="PERF_UCHE_READ_REQUESTS_VFD"/>
-       <value value="11" name="PERF_UCHE_READ_REQUESTS_HLSQ"/>
-       <value value="12" name="PERF_UCHE_READ_REQUESTS_LRZ"/>
-       <value value="13" name="PERF_UCHE_READ_REQUESTS_SP"/>
-       <value value="14" name="PERF_UCHE_WRITE_REQUESTS_LRZ"/>
-       <value value="15" name="PERF_UCHE_WRITE_REQUESTS_SP"/>
-       <value value="16" name="PERF_UCHE_WRITE_REQUESTS_VPC"/>
-       <value value="17" name="PERF_UCHE_WRITE_REQUESTS_VSC"/>
-       <value value="18" name="PERF_UCHE_EVICTS"/>
-       <value value="19" name="PERF_UCHE_BANK_REQ0"/>
-       <value value="20" name="PERF_UCHE_BANK_REQ1"/>
-       <value value="21" name="PERF_UCHE_BANK_REQ2"/>
-       <value value="22" name="PERF_UCHE_BANK_REQ3"/>
-       <value value="23" name="PERF_UCHE_BANK_REQ4"/>
-       <value value="24" name="PERF_UCHE_BANK_REQ5"/>
-       <value value="25" name="PERF_UCHE_BANK_REQ6"/>
-       <value value="26" name="PERF_UCHE_BANK_REQ7"/>
-       <value value="27" name="PERF_UCHE_VBIF_READ_BEATS_CH0"/>
-       <value value="28" name="PERF_UCHE_VBIF_READ_BEATS_CH1"/>
-       <value value="29" name="PERF_UCHE_GMEM_READ_BEATS"/>
-       <value value="30" name="PERF_UCHE_FLAG_COUNT"/>
-</enum>
-
-<enum name="a5xx_tp_perfcounter_select">
-       <value value="0" name="PERF_TP_BUSY_CYCLES"/>
-       <value value="1" name="PERF_TP_STALL_CYCLES_UCHE"/>
-       <value value="2" name="PERF_TP_LATENCY_CYCLES"/>
-       <value value="3" name="PERF_TP_LATENCY_TRANS"/>
-       <value value="4" name="PERF_TP_FLAG_CACHE_REQUEST_SAMPLES"/>
-       <value value="5" name="PERF_TP_FLAG_CACHE_REQUEST_LATENCY"/>
-       <value value="6" name="PERF_TP_L1_CACHELINE_REQUESTS"/>
-       <value value="7" name="PERF_TP_L1_CACHELINE_MISSES"/>
-       <value value="8" name="PERF_TP_SP_TP_TRANS"/>
-       <value value="9" name="PERF_TP_TP_SP_TRANS"/>
-       <value value="10" name="PERF_TP_OUTPUT_PIXELS"/>
-       <value value="11" name="PERF_TP_FILTER_WORKLOAD_16BIT"/>
-       <value value="12" name="PERF_TP_FILTER_WORKLOAD_32BIT"/>
-       <value value="13" name="PERF_TP_QUADS_RECEIVED"/>
-       <value value="14" name="PERF_TP_QUADS_OFFSET"/>
-       <value value="15" name="PERF_TP_QUADS_SHADOW"/>
-       <value value="16" name="PERF_TP_QUADS_ARRAY"/>
-       <value value="17" name="PERF_TP_QUADS_GRADIENT"/>
-       <value value="18" name="PERF_TP_QUADS_1D"/>
-       <value value="19" name="PERF_TP_QUADS_2D"/>
-       <value value="20" name="PERF_TP_QUADS_BUFFER"/>
-       <value value="21" name="PERF_TP_QUADS_3D"/>
-       <value value="22" name="PERF_TP_QUADS_CUBE"/>
-       <value value="23" name="PERF_TP_STATE_CACHE_REQUESTS"/>
-       <value value="24" name="PERF_TP_STATE_CACHE_MISSES"/>
-       <value value="25" name="PERF_TP_DIVERGENT_QUADS_RECEIVED"/>
-       <value value="26" name="PERF_TP_BINDLESS_STATE_CACHE_REQUESTS"/>
-       <value value="27" name="PERF_TP_BINDLESS_STATE_CACHE_MISSES"/>
-       <value value="28" name="PERF_TP_PRT_NON_RESIDENT_EVENTS"/>
-       <value value="29" name="PERF_TP_OUTPUT_PIXELS_POINT"/>
-       <value value="30" name="PERF_TP_OUTPUT_PIXELS_BILINEAR"/>
-       <value value="31" name="PERF_TP_OUTPUT_PIXELS_MIP"/>
-       <value value="32" name="PERF_TP_OUTPUT_PIXELS_ANISO"/>
-       <value value="33" name="PERF_TP_OUTPUT_PIXELS_ZERO_LOD"/>
-       <value value="34" name="PERF_TP_FLAG_CACHE_REQUESTS"/>
-       <value value="35" name="PERF_TP_FLAG_CACHE_MISSES"/>
-       <value value="36" name="PERF_TP_L1_5_L2_REQUESTS"/>
-       <value value="37" name="PERF_TP_2D_OUTPUT_PIXELS"/>
-       <value value="38" name="PERF_TP_2D_OUTPUT_PIXELS_POINT"/>
-       <value value="39" name="PERF_TP_2D_OUTPUT_PIXELS_BILINEAR"/>
-       <value value="40" name="PERF_TP_2D_FILTER_WORKLOAD_16BIT"/>
-       <value value="41" name="PERF_TP_2D_FILTER_WORKLOAD_32BIT"/>
-</enum>
-
-<enum name="a5xx_sp_perfcounter_select">
-       <value value="0" name="PERF_SP_BUSY_CYCLES"/>
-       <value value="1" name="PERF_SP_ALU_WORKING_CYCLES"/>
-       <value value="2" name="PERF_SP_EFU_WORKING_CYCLES"/>
-       <value value="3" name="PERF_SP_STALL_CYCLES_VPC"/>
-       <value value="4" name="PERF_SP_STALL_CYCLES_TP"/>
-       <value value="5" name="PERF_SP_STALL_CYCLES_UCHE"/>
-       <value value="6" name="PERF_SP_STALL_CYCLES_RB"/>
-       <value value="7" name="PERF_SP_SCHEDULER_NON_WORKING"/>
-       <value value="8" name="PERF_SP_WAVE_CONTEXTS"/>
-       <value value="9" name="PERF_SP_WAVE_CONTEXT_CYCLES"/>
-       <value value="10" name="PERF_SP_FS_STAGE_WAVE_CYCLES"/>
-       <value value="11" name="PERF_SP_FS_STAGE_WAVE_SAMPLES"/>
-       <value value="12" name="PERF_SP_VS_STAGE_WAVE_CYCLES"/>
-       <value value="13" name="PERF_SP_VS_STAGE_WAVE_SAMPLES"/>
-       <value value="14" name="PERF_SP_FS_STAGE_DURATION_CYCLES"/>
-       <value value="15" name="PERF_SP_VS_STAGE_DURATION_CYCLES"/>
-       <value value="16" name="PERF_SP_WAVE_CTRL_CYCLES"/>
-       <value value="17" name="PERF_SP_WAVE_LOAD_CYCLES"/>
-       <value value="18" name="PERF_SP_WAVE_EMIT_CYCLES"/>
-       <value value="19" name="PERF_SP_WAVE_NOP_CYCLES"/>
-       <value value="20" name="PERF_SP_WAVE_WAIT_CYCLES"/>
-       <value value="21" name="PERF_SP_WAVE_FETCH_CYCLES"/>
-       <value value="22" name="PERF_SP_WAVE_IDLE_CYCLES"/>
-       <value value="23" name="PERF_SP_WAVE_END_CYCLES"/>
-       <value value="24" name="PERF_SP_WAVE_LONG_SYNC_CYCLES"/>
-       <value value="25" name="PERF_SP_WAVE_SHORT_SYNC_CYCLES"/>
-       <value value="26" name="PERF_SP_WAVE_JOIN_CYCLES"/>
-       <value value="27" name="PERF_SP_LM_LOAD_INSTRUCTIONS"/>
-       <value value="28" name="PERF_SP_LM_STORE_INSTRUCTIONS"/>
-       <value value="29" name="PERF_SP_LM_ATOMICS"/>
-       <value value="30" name="PERF_SP_GM_LOAD_INSTRUCTIONS"/>
-       <value value="31" name="PERF_SP_GM_STORE_INSTRUCTIONS"/>
-       <value value="32" name="PERF_SP_GM_ATOMICS"/>
-       <value value="33" name="PERF_SP_VS_STAGE_TEX_INSTRUCTIONS"/>
-       <value value="34" name="PERF_SP_VS_STAGE_CFLOW_INSTRUCTIONS"/>
-       <value value="35" name="PERF_SP_VS_STAGE_EFU_INSTRUCTIONS"/>
-       <value value="36" name="PERF_SP_VS_STAGE_FULL_ALU_INSTRUCTIONS"/>
-       <value value="37" name="PERF_SP_VS_STAGE_HALF_ALU_INSTRUCTIONS"/>
-       <value value="38" name="PERF_SP_FS_STAGE_TEX_INSTRUCTIONS"/>
-       <value value="39" name="PERF_SP_FS_STAGE_CFLOW_INSTRUCTIONS"/>
-       <value value="40" name="PERF_SP_FS_STAGE_EFU_INSTRUCTIONS"/>
-       <value value="41" name="PERF_SP_FS_STAGE_FULL_ALU_INSTRUCTIONS"/>
-       <value value="42" name="PERF_SP_FS_STAGE_HALF_ALU_INSTRUCTIONS"/>
-       <value value="43" name="PERF_SP_FS_STAGE_BARY_INSTRUCTIONS"/>
-       <value value="44" name="PERF_SP_VS_INSTRUCTIONS"/>
-       <value value="45" name="PERF_SP_FS_INSTRUCTIONS"/>
-       <value value="46" name="PERF_SP_ADDR_LOCK_COUNT"/>
-       <value value="47" name="PERF_SP_UCHE_READ_TRANS"/>
-       <value value="48" name="PERF_SP_UCHE_WRITE_TRANS"/>
-       <value value="49" name="PERF_SP_EXPORT_VPC_TRANS"/>
-       <value value="50" name="PERF_SP_EXPORT_RB_TRANS"/>
-       <value value="51" name="PERF_SP_PIXELS_KILLED"/>
-       <value value="52" name="PERF_SP_ICL1_REQUESTS"/>
-       <value value="53" name="PERF_SP_ICL1_MISSES"/>
-       <value value="54" name="PERF_SP_ICL0_REQUESTS"/>
-       <value value="55" name="PERF_SP_ICL0_MISSES"/>
-       <value value="56" name="PERF_SP_HS_INSTRUCTIONS"/>
-       <value value="57" name="PERF_SP_DS_INSTRUCTIONS"/>
-       <value value="58" name="PERF_SP_GS_INSTRUCTIONS"/>
-       <value value="59" name="PERF_SP_CS_INSTRUCTIONS"/>
-       <value value="60" name="PERF_SP_GPR_READ"/>
-       <value value="61" name="PERF_SP_GPR_WRITE"/>
-       <value value="62" name="PERF_SP_LM_CH0_REQUESTS"/>
-       <value value="63" name="PERF_SP_LM_CH1_REQUESTS"/>
-       <value value="64" name="PERF_SP_LM_BANK_CONFLICTS"/>
-</enum>
-
-<enum name="a5xx_rb_perfcounter_select">
-       <value value="0" name="PERF_RB_BUSY_CYCLES"/>
-       <value value="1" name="PERF_RB_STALL_CYCLES_CCU"/>
-       <value value="2" name="PERF_RB_STALL_CYCLES_HLSQ"/>
-       <value value="3" name="PERF_RB_STALL_CYCLES_FIFO0_FULL"/>
-       <value value="4" name="PERF_RB_STALL_CYCLES_FIFO1_FULL"/>
-       <value value="5" name="PERF_RB_STALL_CYCLES_FIFO2_FULL"/>
-       <value value="6" name="PERF_RB_STARVE_CYCLES_SP"/>
-       <value value="7" name="PERF_RB_STARVE_CYCLES_LRZ_TILE"/>
-       <value value="8" name="PERF_RB_STARVE_CYCLES_CCU"/>
-       <value value="9" name="PERF_RB_STARVE_CYCLES_Z_PLANE"/>
-       <value value="10" name="PERF_RB_STARVE_CYCLES_BARY_PLANE"/>
-       <value value="11" name="PERF_RB_Z_WORKLOAD"/>
-       <value value="12" name="PERF_RB_HLSQ_ACTIVE"/>
-       <value value="13" name="PERF_RB_Z_READ"/>
-       <value value="14" name="PERF_RB_Z_WRITE"/>
-       <value value="15" name="PERF_RB_C_READ"/>
-       <value value="16" name="PERF_RB_C_WRITE"/>
-       <value value="17" name="PERF_RB_TOTAL_PASS"/>
-       <value value="18" name="PERF_RB_Z_PASS"/>
-       <value value="19" name="PERF_RB_Z_FAIL"/>
-       <value value="20" name="PERF_RB_S_FAIL"/>
-       <value value="21" name="PERF_RB_BLENDED_FXP_COMPONENTS"/>
-       <value value="22" name="PERF_RB_BLENDED_FP16_COMPONENTS"/>
-       <value value="23" name="RB_RESERVED"/>
-       <value value="24" name="PERF_RB_2D_ALIVE_CYCLES"/>
-       <value value="25" name="PERF_RB_2D_STALL_CYCLES_A2D"/>
-       <value value="26" name="PERF_RB_2D_STARVE_CYCLES_SRC"/>
-       <value value="27" name="PERF_RB_2D_STARVE_CYCLES_SP"/>
-       <value value="28" name="PERF_RB_2D_STARVE_CYCLES_DST"/>
-       <value value="29" name="PERF_RB_2D_VALID_PIXELS"/>
-</enum>
-
-<enum name="a5xx_rb_samples_perfcounter_select">
-       <value value="0" name="TOTAL_SAMPLES"/>
-       <value value="1" name="ZPASS_SAMPLES"/>
-       <value value="2" name="ZFAIL_SAMPLES"/>
-       <value value="3" name="SFAIL_SAMPLES"/>
-</enum>
-
-<enum name="a5xx_vsc_perfcounter_select">
-       <value value="0" name="PERF_VSC_BUSY_CYCLES"/>
-       <value value="1" name="PERF_VSC_WORKING_CYCLES"/>
-       <value value="2" name="PERF_VSC_STALL_CYCLES_UCHE"/>
-       <value value="3" name="PERF_VSC_EOT_NUM"/>
-</enum>
-
-<enum name="a5xx_ccu_perfcounter_select">
-       <value value="0" name="PERF_CCU_BUSY_CYCLES"/>
-       <value value="1" name="PERF_CCU_STALL_CYCLES_RB_DEPTH_RETURN"/>
-       <value value="2" name="PERF_CCU_STALL_CYCLES_RB_COLOR_RETURN"/>
-       <value value="3" name="PERF_CCU_STARVE_CYCLES_FLAG_RETURN"/>
-       <value value="4" name="PERF_CCU_DEPTH_BLOCKS"/>
-       <value value="5" name="PERF_CCU_COLOR_BLOCKS"/>
-       <value value="6" name="PERF_CCU_DEPTH_BLOCK_HIT"/>
-       <value value="7" name="PERF_CCU_COLOR_BLOCK_HIT"/>
-       <value value="8" name="PERF_CCU_PARTIAL_BLOCK_READ"/>
-       <value value="9" name="PERF_CCU_GMEM_READ"/>
-       <value value="10" name="PERF_CCU_GMEM_WRITE"/>
-       <value value="11" name="PERF_CCU_DEPTH_READ_FLAG0_COUNT"/>
-       <value value="12" name="PERF_CCU_DEPTH_READ_FLAG1_COUNT"/>
-       <value value="13" name="PERF_CCU_DEPTH_READ_FLAG2_COUNT"/>
-       <value value="14" name="PERF_CCU_DEPTH_READ_FLAG3_COUNT"/>
-       <value value="15" name="PERF_CCU_DEPTH_READ_FLAG4_COUNT"/>
-       <value value="16" name="PERF_CCU_COLOR_READ_FLAG0_COUNT"/>
-       <value value="17" name="PERF_CCU_COLOR_READ_FLAG1_COUNT"/>
-       <value value="18" name="PERF_CCU_COLOR_READ_FLAG2_COUNT"/>
-       <value value="19" name="PERF_CCU_COLOR_READ_FLAG3_COUNT"/>
-       <value value="20" name="PERF_CCU_COLOR_READ_FLAG4_COUNT"/>
-       <value value="21" name="PERF_CCU_2D_BUSY_CYCLES"/>
-       <value value="22" name="PERF_CCU_2D_RD_REQ"/>
-       <value value="23" name="PERF_CCU_2D_WR_REQ"/>
-       <value value="24" name="PERF_CCU_2D_REORDER_STARVE_CYCLES"/>
-       <value value="25" name="PERF_CCU_2D_PIXELS"/>
-</enum>
-
-<enum name="a5xx_cmp_perfcounter_select">
-       <value value="0" name="PERF_CMPDECMP_STALL_CYCLES_VBIF"/>
-       <value value="1" name="PERF_CMPDECMP_VBIF_LATENCY_CYCLES"/>
-       <value value="2" name="PERF_CMPDECMP_VBIF_LATENCY_SAMPLES"/>
-       <value value="3" name="PERF_CMPDECMP_VBIF_READ_DATA_CCU"/>
-       <value value="4" name="PERF_CMPDECMP_VBIF_WRITE_DATA_CCU"/>
-       <value value="5" name="PERF_CMPDECMP_VBIF_READ_REQUEST"/>
-       <value value="6" name="PERF_CMPDECMP_VBIF_WRITE_REQUEST"/>
-       <value value="7" name="PERF_CMPDECMP_VBIF_READ_DATA"/>
-       <value value="8" name="PERF_CMPDECMP_VBIF_WRITE_DATA"/>
-       <value value="9" name="PERF_CMPDECMP_FLAG_FETCH_CYCLES"/>
-       <value value="10" name="PERF_CMPDECMP_FLAG_FETCH_SAMPLES"/>
-       <value value="11" name="PERF_CMPDECMP_DEPTH_WRITE_FLAG1_COUNT"/>
-       <value value="12" name="PERF_CMPDECMP_DEPTH_WRITE_FLAG2_COUNT"/>
-       <value value="13" name="PERF_CMPDECMP_DEPTH_WRITE_FLAG3_COUNT"/>
-       <value value="14" name="PERF_CMPDECMP_DEPTH_WRITE_FLAG4_COUNT"/>
-       <value value="15" name="PERF_CMPDECMP_COLOR_WRITE_FLAG1_COUNT"/>
-       <value value="16" name="PERF_CMPDECMP_COLOR_WRITE_FLAG2_COUNT"/>
-       <value value="17" name="PERF_CMPDECMP_COLOR_WRITE_FLAG3_COUNT"/>
-       <value value="18" name="PERF_CMPDECMP_COLOR_WRITE_FLAG4_COUNT"/>
-       <value value="19" name="PERF_CMPDECMP_2D_STALL_CYCLES_VBIF_REQ"/>
-       <value value="20" name="PERF_CMPDECMP_2D_STALL_CYCLES_VBIF_WR"/>
-       <value value="21" name="PERF_CMPDECMP_2D_STALL_CYCLES_VBIF_RETURN"/>
-       <value value="22" name="PERF_CMPDECMP_2D_RD_DATA"/>
-       <value value="23" name="PERF_CMPDECMP_2D_WR_DATA"/>
-</enum>
-
-<enum name="a5xx_vbif_perfcounter_select">
-       <value value="0" name="AXI_READ_REQUESTS_ID_0"/>
-       <value value="1" name="AXI_READ_REQUESTS_ID_1"/>
-       <value value="2" name="AXI_READ_REQUESTS_ID_2"/>
-       <value value="3" name="AXI_READ_REQUESTS_ID_3"/>
-       <value value="4" name="AXI_READ_REQUESTS_ID_4"/>
-       <value value="5" name="AXI_READ_REQUESTS_ID_5"/>
-       <value value="6" name="AXI_READ_REQUESTS_ID_6"/>
-       <value value="7" name="AXI_READ_REQUESTS_ID_7"/>
-       <value value="8" name="AXI_READ_REQUESTS_ID_8"/>
-       <value value="9" name="AXI_READ_REQUESTS_ID_9"/>
-       <value value="10" name="AXI_READ_REQUESTS_ID_10"/>
-       <value value="11" name="AXI_READ_REQUESTS_ID_11"/>
-       <value value="12" name="AXI_READ_REQUESTS_ID_12"/>
-       <value value="13" name="AXI_READ_REQUESTS_ID_13"/>
-       <value value="14" name="AXI_READ_REQUESTS_ID_14"/>
-       <value value="15" name="AXI_READ_REQUESTS_ID_15"/>
-       <value value="16" name="AXI0_READ_REQUESTS_TOTAL"/>
-       <value value="17" name="AXI1_READ_REQUESTS_TOTAL"/>
-       <value value="18" name="AXI2_READ_REQUESTS_TOTAL"/>
-       <value value="19" name="AXI3_READ_REQUESTS_TOTAL"/>
-       <value value="20" name="AXI_READ_REQUESTS_TOTAL"/>
-       <value value="21" name="AXI_WRITE_REQUESTS_ID_0"/>
-       <value value="22" name="AXI_WRITE_REQUESTS_ID_1"/>
-       <value value="23" name="AXI_WRITE_REQUESTS_ID_2"/>
-       <value value="24" name="AXI_WRITE_REQUESTS_ID_3"/>
-       <value value="25" name="AXI_WRITE_REQUESTS_ID_4"/>
-       <value value="26" name="AXI_WRITE_REQUESTS_ID_5"/>
-       <value value="27" name="AXI_WRITE_REQUESTS_ID_6"/>
-       <value value="28" name="AXI_WRITE_REQUESTS_ID_7"/>
-       <value value="29" name="AXI_WRITE_REQUESTS_ID_8"/>
-       <value value="30" name="AXI_WRITE_REQUESTS_ID_9"/>
-       <value value="31" name="AXI_WRITE_REQUESTS_ID_10"/>
-       <value value="32" name="AXI_WRITE_REQUESTS_ID_11"/>
-       <value value="33" name="AXI_WRITE_REQUESTS_ID_12"/>
-       <value value="34" name="AXI_WRITE_REQUESTS_ID_13"/>
-       <value value="35" name="AXI_WRITE_REQUESTS_ID_14"/>
-       <value value="36" name="AXI_WRITE_REQUESTS_ID_15"/>
-       <value value="37" name="AXI0_WRITE_REQUESTS_TOTAL"/>
-       <value value="38" name="AXI1_WRITE_REQUESTS_TOTAL"/>
-       <value value="39" name="AXI2_WRITE_REQUESTS_TOTAL"/>
-       <value value="40" name="AXI3_WRITE_REQUESTS_TOTAL"/>
-       <value value="41" name="AXI_WRITE_REQUESTS_TOTAL"/>
-       <value value="42" name="AXI_TOTAL_REQUESTS"/>
-       <value value="43" name="AXI_READ_DATA_BEATS_ID_0"/>
-       <value value="44" name="AXI_READ_DATA_BEATS_ID_1"/>
-       <value value="45" name="AXI_READ_DATA_BEATS_ID_2"/>
-       <value value="46" name="AXI_READ_DATA_BEATS_ID_3"/>
-       <value value="47" name="AXI_READ_DATA_BEATS_ID_4"/>
-       <value value="48" name="AXI_READ_DATA_BEATS_ID_5"/>
-       <value value="49" name="AXI_READ_DATA_BEATS_ID_6"/>
-       <value value="50" name="AXI_READ_DATA_BEATS_ID_7"/>
-       <value value="51" name="AXI_READ_DATA_BEATS_ID_8"/>
-       <value value="52" name="AXI_READ_DATA_BEATS_ID_9"/>
-       <value value="53" name="AXI_READ_DATA_BEATS_ID_10"/>
-       <value value="54" name="AXI_READ_DATA_BEATS_ID_11"/>
-       <value value="55" name="AXI_READ_DATA_BEATS_ID_12"/>
-       <value value="56" name="AXI_READ_DATA_BEATS_ID_13"/>
-       <value value="57" name="AXI_READ_DATA_BEATS_ID_14"/>
-       <value value="58" name="AXI_READ_DATA_BEATS_ID_15"/>
-       <value value="59" name="AXI0_READ_DATA_BEATS_TOTAL"/>
-       <value value="60" name="AXI1_READ_DATA_BEATS_TOTAL"/>
-       <value value="61" name="AXI2_READ_DATA_BEATS_TOTAL"/>
-       <value value="62" name="AXI3_READ_DATA_BEATS_TOTAL"/>
-       <value value="63" name="AXI_READ_DATA_BEATS_TOTAL"/>
-       <value value="64" name="AXI_WRITE_DATA_BEATS_ID_0"/>
-       <value value="65" name="AXI_WRITE_DATA_BEATS_ID_1"/>
-       <value value="66" name="AXI_WRITE_DATA_BEATS_ID_2"/>
-       <value value="67" name="AXI_WRITE_DATA_BEATS_ID_3"/>
-       <value value="68" name="AXI_WRITE_DATA_BEATS_ID_4"/>
-       <value value="69" name="AXI_WRITE_DATA_BEATS_ID_5"/>
-       <value value="70" name="AXI_WRITE_DATA_BEATS_ID_6"/>
-       <value value="71" name="AXI_WRITE_DATA_BEATS_ID_7"/>
-       <value value="72" name="AXI_WRITE_DATA_BEATS_ID_8"/>
-       <value value="73" name="AXI_WRITE_DATA_BEATS_ID_9"/>
-       <value value="74" name="AXI_WRITE_DATA_BEATS_ID_10"/>
-       <value value="75" name="AXI_WRITE_DATA_BEATS_ID_11"/>
-       <value value="76" name="AXI_WRITE_DATA_BEATS_ID_12"/>
-       <value value="77" name="AXI_WRITE_DATA_BEATS_ID_13"/>
-       <value value="78" name="AXI_WRITE_DATA_BEATS_ID_14"/>
-       <value value="79" name="AXI_WRITE_DATA_BEATS_ID_15"/>
-       <value value="80" name="AXI0_WRITE_DATA_BEATS_TOTAL"/>
-       <value value="81" name="AXI1_WRITE_DATA_BEATS_TOTAL"/>
-       <value value="82" name="AXI2_WRITE_DATA_BEATS_TOTAL"/>
-       <value value="83" name="AXI3_WRITE_DATA_BEATS_TOTAL"/>
-       <value value="84" name="AXI_WRITE_DATA_BEATS_TOTAL"/>
-       <value value="85" name="AXI_DATA_BEATS_TOTAL"/>
-</enum>
-
-<domain name="A5XX" width="32">
-       <bitset name="A5XX_INT0">
-               <bitfield name="RBBM_GPU_IDLE" pos="0" type="boolean"/>
-               <bitfield name="RBBM_AHB_ERROR" pos="1" type="boolean"/>
-               <bitfield name="RBBM_TRANSFER_TIMEOUT" pos="2" type="boolean"/>
-               <bitfield name="RBBM_ME_MS_TIMEOUT" pos="3" type="boolean"/>
-               <bitfield name="RBBM_PFP_MS_TIMEOUT" pos="4" type="boolean"/>
-               <bitfield name="RBBM_ETS_MS_TIMEOUT" pos="5" type="boolean"/>
-               <bitfield name="RBBM_ATB_ASYNC_OVERFLOW" pos="6" type="boolean"/>
-               <bitfield name="RBBM_GPC_ERROR" pos="7" type="boolean"/>
-               <bitfield name="CP_SW" pos="8" type="boolean"/>
-               <bitfield name="CP_HW_ERROR" pos="9" type="boolean"/>
-               <bitfield name="CP_CCU_FLUSH_DEPTH_TS" pos="10" type="boolean"/>
-               <bitfield name="CP_CCU_FLUSH_COLOR_TS" pos="11" type="boolean"/>
-               <bitfield name="CP_CCU_RESOLVE_TS" pos="12" type="boolean"/>
-               <bitfield name="CP_IB2" pos="13" type="boolean"/>
-               <bitfield name="CP_IB1" pos="14" type="boolean"/>
-               <bitfield name="CP_RB" pos="15" type="boolean"/>
-               <bitfield name="CP_UNUSED_1" pos="16" type="boolean"/>
-               <bitfield name="CP_RB_DONE_TS" pos="17" type="boolean"/>
-               <bitfield name="CP_WT_DONE_TS" pos="18" type="boolean"/>
-               <bitfield name="UNKNOWN_1" pos="19" type="boolean"/>
-               <bitfield name="CP_CACHE_FLUSH_TS" pos="20" type="boolean"/>
-               <bitfield name="UNUSED_2" pos="21" type="boolean"/>
-               <bitfield name="RBBM_ATB_BUS_OVERFLOW" pos="22" type="boolean"/>
-               <bitfield name="MISC_HANG_DETECT" pos="23" type="boolean"/>
-               <bitfield name="UCHE_OOB_ACCESS" pos="24" type="boolean"/>
-               <bitfield name="UCHE_TRAP_INTR" pos="25" type="boolean"/>
-               <bitfield name="DEBBUS_INTR_0" pos="26" type="boolean"/>
-               <bitfield name="DEBBUS_INTR_1" pos="27" type="boolean"/>
-               <bitfield name="GPMU_VOLTAGE_DROOP" pos="28" type="boolean"/>
-               <bitfield name="GPMU_FIRMWARE" pos="29" type="boolean"/>
-               <bitfield name="ISDB_CPU_IRQ" pos="30" type="boolean"/>
-               <bitfield name="ISDB_UNDER_DEBUG" pos="31" type="boolean"/>
-       </bitset>
-
-       <!-- CP Interrupt bits -->
-       <bitset name="A5XX_CP_INT">
-               <bitfield name="CP_OPCODE_ERROR" pos="0" type="boolean"/>
-               <bitfield name="CP_RESERVED_BIT_ERROR" pos="1" type="boolean"/>
-               <bitfield name="CP_HW_FAULT_ERROR" pos="2" type="boolean"/>
-               <bitfield name="CP_DMA_ERROR" pos="3" type="boolean"/>
-               <bitfield name="CP_REGISTER_PROTECTION_ERROR" pos="4" type="boolean"/>
-               <bitfield name="CP_AHB_ERROR" pos="5" type="boolean"/>
-       </bitset>
-
-       <!-- CP registers -->
-       <reg32 offset="0x0800" name="CP_RB_BASE"/>
-       <reg32 offset="0x0801" name="CP_RB_BASE_HI"/>
-       <reg32 offset="0x0802" name="CP_RB_CNTL"/>
-       <reg32 offset="0x0804" name="CP_RB_RPTR_ADDR"/>
-       <reg32 offset="0x0805" name="CP_RB_RPTR_ADDR_HI"/>
-       <reg32 offset="0x0806" name="CP_RB_RPTR"/>
-       <reg32 offset="0x0807" name="CP_RB_WPTR"/>
-       <reg32 offset="0x0808" name="CP_PFP_STAT_ADDR"/>
-       <reg32 offset="0x0809" name="CP_PFP_STAT_DATA"/>
-       <reg32 offset="0x080b" name="CP_DRAW_STATE_ADDR"/>
-       <reg32 offset="0x080c" name="CP_DRAW_STATE_DATA"/>
-       <reg32 offset="0x080d" name="CP_ME_NRT_ADDR_LO"/>
-       <reg32 offset="0x080e" name="CP_ME_NRT_ADDR_HI"/>
-       <reg32 offset="0x0810" name="CP_ME_NRT_DATA"/>
-       <reg32 offset="0x0817" name="CP_CRASH_SCRIPT_BASE_LO"/>
-       <reg32 offset="0x0818" name="CP_CRASH_SCRIPT_BASE_HI"/>
-       <reg32 offset="0x0819" name="CP_CRASH_DUMP_CNTL"/>
-       <reg32 offset="0x081a" name="CP_ME_STAT_ADDR"/>
-       <reg32 offset="0x081f" name="CP_ROQ_THRESHOLDS_1"/>
-       <reg32 offset="0x0820" name="CP_ROQ_THRESHOLDS_2"/>
-       <reg32 offset="0x0821" name="CP_ROQ_DBG_ADDR"/>
-       <reg32 offset="0x0822" name="CP_ROQ_DBG_DATA"/>
-       <reg32 offset="0x0823" name="CP_MEQ_DBG_ADDR"/>
-       <reg32 offset="0x0824" name="CP_MEQ_DBG_DATA"/>
-       <reg32 offset="0x0825" name="CP_MEQ_THRESHOLDS"/>
-       <reg32 offset="0x0826" name="CP_MERCIU_SIZE"/>
-       <reg32 offset="0x0827" name="CP_MERCIU_DBG_ADDR"/>
-       <reg32 offset="0x0828" name="CP_MERCIU_DBG_DATA_1"/>
-       <reg32 offset="0x0829" name="CP_MERCIU_DBG_DATA_2"/>
-       <reg32 offset="0x082a" name="CP_PFP_UCODE_DBG_ADDR"/>
-       <reg32 offset="0x082b" name="CP_PFP_UCODE_DBG_DATA"/>
-       <reg32 offset="0x082f" name="CP_ME_UCODE_DBG_ADDR"/>
-       <reg32 offset="0x0830" name="CP_ME_UCODE_DBG_DATA"/>
-       <reg32 offset="0x0831" name="CP_CNTL"/>
-       <reg32 offset="0x0832" name="CP_PFP_ME_CNTL"/>
-       <reg32 offset="0x0833" name="CP_CHICKEN_DBG"/>
-       <reg32 offset="0x0835" name="CP_PFP_INSTR_BASE_LO"/>
-       <reg32 offset="0x0836" name="CP_PFP_INSTR_BASE_HI"/>
-       <reg32 offset="0x0838" name="CP_ME_INSTR_BASE_LO"/>
-       <reg32 offset="0x0839" name="CP_ME_INSTR_BASE_HI"/>
-       <reg32 offset="0x083b" name="CP_CONTEXT_SWITCH_CNTL"/>
-       <reg32 offset="0x083c" name="CP_CONTEXT_SWITCH_RESTORE_ADDR_LO"/>
-       <reg32 offset="0x083d" name="CP_CONTEXT_SWITCH_RESTORE_ADDR_HI"/>
-       <reg32 offset="0x083e" name="CP_CONTEXT_SWITCH_SAVE_ADDR_LO"/>
-       <reg32 offset="0x083f" name="CP_CONTEXT_SWITCH_SAVE_ADDR_HI"/>
-       <reg32 offset="0x0840" name="CP_CONTEXT_SWITCH_SMMU_INFO_LO"/>
-       <reg32 offset="0x0841" name="CP_CONTEXT_SWITCH_SMMU_INFO_HI"/>
-       <reg32 offset="0x0860" name="CP_ADDR_MODE_CNTL" type="a5xx_address_mode"/>
-       <reg32 offset="0x0b14" name="CP_ME_STAT_DATA"/>
-       <reg32 offset="0x0b15" name="CP_WFI_PEND_CTR"/>
-       <reg32 offset="0x0b18" name="CP_INTERRUPT_STATUS"/>
-       <reg32 offset="0x0b1a" name="CP_HW_FAULT"/>
-       <reg32 offset="0x0b1c" name="CP_PROTECT_STATUS"/>
-       <reg32 offset="0x0b1f" name="CP_IB1_BASE"/>
-       <reg32 offset="0x0b20" name="CP_IB1_BASE_HI"/>
-       <reg32 offset="0x0b21" name="CP_IB1_BUFSZ"/>
-       <reg32 offset="0x0b22" name="CP_IB2_BASE"/>
-       <reg32 offset="0x0b23" name="CP_IB2_BASE_HI"/>
-       <reg32 offset="0x0b24" name="CP_IB2_BUFSZ"/>
-       <array offset="0x0b78" name="CP_SCRATCH" stride="1" length="8">
-               <reg32 offset="0x0" name="REG" type="uint"/>
-       </array>
-       <array offset="0x0880" name="CP_PROTECT" stride="1" length="32">
-               <reg32 offset="0x0" name="REG" type="adreno_cp_protect"/>
-       </array>
-       <reg32 offset="0x08a0" name="CP_PROTECT_CNTL"/>
-       <reg32 offset="0x0b1b" name="CP_AHB_FAULT"/>
-       <reg32 offset="0x0bb0" name="CP_PERFCTR_CP_SEL_0" type="a5xx_cp_perfcounter_select"/>
-       <reg32 offset="0x0bb1" name="CP_PERFCTR_CP_SEL_1" type="a5xx_cp_perfcounter_select"/>
-       <reg32 offset="0x0bb2" name="CP_PERFCTR_CP_SEL_2" type="a5xx_cp_perfcounter_select"/>
-       <reg32 offset="0x0bb3" name="CP_PERFCTR_CP_SEL_3" type="a5xx_cp_perfcounter_select"/>
-       <reg32 offset="0x0bb4" name="CP_PERFCTR_CP_SEL_4" type="a5xx_cp_perfcounter_select"/>
-       <reg32 offset="0x0bb5" name="CP_PERFCTR_CP_SEL_5" type="a5xx_cp_perfcounter_select"/>
-       <reg32 offset="0x0bb6" name="CP_PERFCTR_CP_SEL_6" type="a5xx_cp_perfcounter_select"/>
-       <reg32 offset="0x0bb7" name="CP_PERFCTR_CP_SEL_7" type="a5xx_cp_perfcounter_select"/>
-       <reg32 offset="0x0bc1" name="VSC_ADDR_MODE_CNTL" type="a5xx_address_mode"/>
-       <reg32 offset="0x0bba" name="CP_POWERCTR_CP_SEL_0"/>
-       <reg32 offset="0x0bbb" name="CP_POWERCTR_CP_SEL_1"/>
-       <reg32 offset="0x0bbc" name="CP_POWERCTR_CP_SEL_2"/>
-       <reg32 offset="0x0bbd" name="CP_POWERCTR_CP_SEL_3"/>
-
-       <!-- RBBM registers -->
-       <reg32 offset="0x0004" name="RBBM_CFG_DBGBUS_SEL_A"/>
-       <reg32 offset="0x0005" name="RBBM_CFG_DBGBUS_SEL_B"/>
-       <reg32 offset="0x0006" name="RBBM_CFG_DBGBUS_SEL_C"/>
-       <reg32 offset="0x0007" name="RBBM_CFG_DBGBUS_SEL_D"/>
-<!--
-#define A5XX_RBBM_CFG_DBGBUS_SEL_PING_INDEX_SHIFT    0x0
-#define A5XX_RBBM_CFG_DBGBUS_SEL_PING_BLK_SEL_SHIFT  0x8
-#define A5XX_RBBM_CFG_DBGBUS_SEL_PONG_INDEX_SHIFT    0x10
-#define A5XX_RBBM_CFG_DBGBUS_SEL_PONG_BLK_SEL_SHIFT  0x18
- -->
-       <reg32 offset="0x0008" name="RBBM_CFG_DBGBUS_CNTLT"/>
-       <reg32 offset="0x0009" name="RBBM_CFG_DBGBUS_CNTLM"/>
-       <reg32 offset="0x0018" name="RBBM_CFG_DEBBUS_CTLTM_ENABLE_SHIFT"/>
-       <reg32 offset="0x000a" name="RBBM_CFG_DBGBUS_OPL"/>
-       <reg32 offset="0x000b" name="RBBM_CFG_DBGBUS_OPE"/>
-       <reg32 offset="0x000c" name="RBBM_CFG_DBGBUS_IVTL_0"/>
-       <reg32 offset="0x000d" name="RBBM_CFG_DBGBUS_IVTL_1"/>
-       <reg32 offset="0x000e" name="RBBM_CFG_DBGBUS_IVTL_2"/>
-       <reg32 offset="0x000f" name="RBBM_CFG_DBGBUS_IVTL_3"/>
-       <reg32 offset="0x0010" name="RBBM_CFG_DBGBUS_MASKL_0"/>
-       <reg32 offset="0x0011" name="RBBM_CFG_DBGBUS_MASKL_1"/>
-       <reg32 offset="0x0012" name="RBBM_CFG_DBGBUS_MASKL_2"/>
-       <reg32 offset="0x0013" name="RBBM_CFG_DBGBUS_MASKL_3"/>
-       <reg32 offset="0x0014" name="RBBM_CFG_DBGBUS_BYTEL_0"/>
-       <reg32 offset="0x0015" name="RBBM_CFG_DBGBUS_BYTEL_1"/>
-       <reg32 offset="0x0016" name="RBBM_CFG_DBGBUS_IVTE_0"/>
-       <reg32 offset="0x0017" name="RBBM_CFG_DBGBUS_IVTE_1"/>
-       <reg32 offset="0x0018" name="RBBM_CFG_DBGBUS_IVTE_2"/>
-       <reg32 offset="0x0019" name="RBBM_CFG_DBGBUS_IVTE_3"/>
-       <reg32 offset="0x001a" name="RBBM_CFG_DBGBUS_MASKE_0"/>
-       <reg32 offset="0x001b" name="RBBM_CFG_DBGBUS_MASKE_1"/>
-       <reg32 offset="0x001c" name="RBBM_CFG_DBGBUS_MASKE_2"/>
-       <reg32 offset="0x001d" name="RBBM_CFG_DBGBUS_MASKE_3"/>
-       <reg32 offset="0x001e" name="RBBM_CFG_DBGBUS_NIBBLEE"/>
-       <reg32 offset="0x001f" name="RBBM_CFG_DBGBUS_PTRC0"/>
-       <reg32 offset="0x0020" name="RBBM_CFG_DBGBUS_PTRC1"/>
-       <reg32 offset="0x0021" name="RBBM_CFG_DBGBUS_LOADREG"/>
-       <reg32 offset="0x0022" name="RBBM_CFG_DBGBUS_IDX"/>
-       <reg32 offset="0x0023" name="RBBM_CFG_DBGBUS_CLRC"/>
-       <reg32 offset="0x0024" name="RBBM_CFG_DBGBUS_LOADIVT"/>
-       <reg32 offset="0x002f" name="RBBM_INTERFACE_HANG_INT_CNTL"/>
-       <reg32 offset="0x0037" name="RBBM_INT_CLEAR_CMD"/>
-       <reg32 offset="0x0038" name="RBBM_INT_0_MASK">
-               <bitfield name="RBBM_GPU_IDLE" pos="0" type="boolean"/>
-               <bitfield name="RBBM_AHB_ERROR" pos="1" type="boolean"/>
-               <bitfield name="RBBM_TRANSFER_TIMEOUT" pos="2" type="boolean"/>
-               <bitfield name="RBBM_ME_MS_TIMEOUT" pos="3" type="boolean"/>
-               <bitfield name="RBBM_PFP_MS_TIMEOUT" pos="4" type="boolean"/>
-               <bitfield name="RBBM_ETS_MS_TIMEOUT" pos="5" type="boolean"/>
-               <bitfield name="RBBM_ATB_ASYNC_OVERFLOW" pos="6" type="boolean"/>
-               <bitfield name="RBBM_GPC_ERROR" pos="7" type="boolean"/>
-               <bitfield name="CP_SW" pos="8" type="boolean"/>
-               <bitfield name="CP_HW_ERROR" pos="9" type="boolean"/>
-               <bitfield name="CP_CCU_FLUSH_DEPTH_TS" pos="10" type="boolean"/>
-               <bitfield name="CP_CCU_FLUSH_COLOR_TS" pos="11" type="boolean"/>
-               <bitfield name="CP_CCU_RESOLVE_TS" pos="12" type="boolean"/>
-               <bitfield name="CP_IB2" pos="13" type="boolean"/>
-               <bitfield name="CP_IB1" pos="14" type="boolean"/>
-               <bitfield name="CP_RB" pos="15" type="boolean"/>
-               <bitfield name="CP_RB_DONE_TS" pos="17" type="boolean"/>
-               <bitfield name="CP_WT_DONE_TS" pos="18" type="boolean"/>
-               <bitfield name="CP_CACHE_FLUSH_TS" pos="20" type="boolean"/>
-               <bitfield name="RBBM_ATB_BUS_OVERFLOW" pos="22" type="boolean"/>
-               <bitfield name="MISC_HANG_DETECT" pos="23" type="boolean"/>
-               <bitfield name="UCHE_OOB_ACCESS" pos="24" type="boolean"/>
-               <bitfield name="UCHE_TRAP_INTR" pos="25" type="boolean"/>
-               <bitfield name="DEBBUS_INTR_0" pos="26" type="boolean"/>
-               <bitfield name="DEBBUS_INTR_1" pos="27" type="boolean"/>
-               <bitfield name="GPMU_VOLTAGE_DROOP" pos="28" type="boolean"/>
-               <bitfield name="GPMU_FIRMWARE" pos="29" type="boolean"/>
-               <bitfield name="ISDB_CPU_IRQ" pos="30" type="boolean"/>
-               <bitfield name="ISDB_UNDER_DEBUG" pos="31" type="boolean"/>
-       </reg32>
-       <reg32 offset="0x003f" name="RBBM_AHB_DBG_CNTL"/>
-       <reg32 offset="0x0041" name="RBBM_EXT_VBIF_DBG_CNTL"/>
-       <reg32 offset="0x0043" name="RBBM_SW_RESET_CMD"/>
-       <reg32 offset="0x0045" name="RBBM_BLOCK_SW_RESET_CMD"/>
-       <reg32 offset="0x0046" name="RBBM_BLOCK_SW_RESET_CMD2"/>
-       <reg32 offset="0x0048" name="RBBM_DBG_LO_HI_GPIO"/>
-       <reg32 offset="0x0049" name="RBBM_EXT_TRACE_BUS_CNTL"/>
-       <reg32 offset="0x004a" name="RBBM_CLOCK_CNTL_TP0"/>
-       <reg32 offset="0x004b" name="RBBM_CLOCK_CNTL_TP1"/>
-       <reg32 offset="0x004c" name="RBBM_CLOCK_CNTL_TP2"/>
-       <reg32 offset="0x004d" name="RBBM_CLOCK_CNTL_TP3"/>
-       <reg32 offset="0x004e" name="RBBM_CLOCK_CNTL2_TP0"/>
-       <reg32 offset="0x004f" name="RBBM_CLOCK_CNTL2_TP1"/>
-       <reg32 offset="0x0050" name="RBBM_CLOCK_CNTL2_TP2"/>
-       <reg32 offset="0x0051" name="RBBM_CLOCK_CNTL2_TP3"/>
-       <reg32 offset="0x0052" name="RBBM_CLOCK_CNTL3_TP0"/>
-       <reg32 offset="0x0053" name="RBBM_CLOCK_CNTL3_TP1"/>
-       <reg32 offset="0x0054" name="RBBM_CLOCK_CNTL3_TP2"/>
-       <reg32 offset="0x0055" name="RBBM_CLOCK_CNTL3_TP3"/>
-       <reg32 offset="0x0059" name="RBBM_READ_AHB_THROUGH_DBG"/>
-       <reg32 offset="0x005a" name="RBBM_CLOCK_CNTL_UCHE"/>
-       <reg32 offset="0x005b" name="RBBM_CLOCK_CNTL2_UCHE"/>
-       <reg32 offset="0x005c" name="RBBM_CLOCK_CNTL3_UCHE"/>
-       <reg32 offset="0x005d" name="RBBM_CLOCK_CNTL4_UCHE"/>
-       <reg32 offset="0x005e" name="RBBM_CLOCK_HYST_UCHE"/>
-       <reg32 offset="0x005f" name="RBBM_CLOCK_DELAY_UCHE"/>
-       <reg32 offset="0x0060" name="RBBM_CLOCK_MODE_GPC"/>
-       <reg32 offset="0x0061" name="RBBM_CLOCK_DELAY_GPC"/>
-       <reg32 offset="0x0062" name="RBBM_CLOCK_HYST_GPC"/>
-       <reg32 offset="0x0063" name="RBBM_CLOCK_CNTL_TSE_RAS_RBBM"/>
-       <reg32 offset="0x0064" name="RBBM_CLOCK_HYST_TSE_RAS_RBBM"/>
-       <reg32 offset="0x0065" name="RBBM_CLOCK_DELAY_TSE_RAS_RBBM"/>
-       <reg32 offset="0x0066" name="RBBM_CLOCK_DELAY_HLSQ"/>
-       <reg32 offset="0x0067" name="RBBM_CLOCK_CNTL"/>
-       <reg32 offset="0x0068" name="RBBM_CLOCK_CNTL_SP0"/>
-       <reg32 offset="0x0069" name="RBBM_CLOCK_CNTL_SP1"/>
-       <reg32 offset="0x006a" name="RBBM_CLOCK_CNTL_SP2"/>
-       <reg32 offset="0x006b" name="RBBM_CLOCK_CNTL_SP3"/>
-       <reg32 offset="0x006c" name="RBBM_CLOCK_CNTL2_SP0"/>
-       <reg32 offset="0x006d" name="RBBM_CLOCK_CNTL2_SP1"/>
-       <reg32 offset="0x006e" name="RBBM_CLOCK_CNTL2_SP2"/>
-       <reg32 offset="0x006f" name="RBBM_CLOCK_CNTL2_SP3"/>
-       <reg32 offset="0x0070" name="RBBM_CLOCK_HYST_SP0"/>
-       <reg32 offset="0x0071" name="RBBM_CLOCK_HYST_SP1"/>
-       <reg32 offset="0x0072" name="RBBM_CLOCK_HYST_SP2"/>
-       <reg32 offset="0x0073" name="RBBM_CLOCK_HYST_SP3"/>
-       <reg32 offset="0x0074" name="RBBM_CLOCK_DELAY_SP0"/>
-       <reg32 offset="0x0075" name="RBBM_CLOCK_DELAY_SP1"/>
-       <reg32 offset="0x0076" name="RBBM_CLOCK_DELAY_SP2"/>
-       <reg32 offset="0x0077" name="RBBM_CLOCK_DELAY_SP3"/>
-       <reg32 offset="0x0078" name="RBBM_CLOCK_CNTL_RB0"/>
-       <reg32 offset="0x0079" name="RBBM_CLOCK_CNTL_RB1"/>
-       <reg32 offset="0x007a" name="RBBM_CLOCK_CNTL_RB2"/>
-       <reg32 offset="0x007b" name="RBBM_CLOCK_CNTL_RB3"/>
-       <reg32 offset="0x007c" name="RBBM_CLOCK_CNTL2_RB0"/>
-       <reg32 offset="0x007d" name="RBBM_CLOCK_CNTL2_RB1"/>
-       <reg32 offset="0x007e" name="RBBM_CLOCK_CNTL2_RB2"/>
-       <reg32 offset="0x007f" name="RBBM_CLOCK_CNTL2_RB3"/>
-       <reg32 offset="0x0080" name="RBBM_CLOCK_HYST_RAC"/>
-       <reg32 offset="0x0081" name="RBBM_CLOCK_DELAY_RAC"/>
-       <reg32 offset="0x0082" name="RBBM_CLOCK_CNTL_CCU0"/>
-       <reg32 offset="0x0083" name="RBBM_CLOCK_CNTL_CCU1"/>
-       <reg32 offset="0x0084" name="RBBM_CLOCK_CNTL_CCU2"/>
-       <reg32 offset="0x0085" name="RBBM_CLOCK_CNTL_CCU3"/>
-       <reg32 offset="0x0086" name="RBBM_CLOCK_HYST_RB_CCU0"/>
-       <reg32 offset="0x0087" name="RBBM_CLOCK_HYST_RB_CCU1"/>
-       <reg32 offset="0x0088" name="RBBM_CLOCK_HYST_RB_CCU2"/>
-       <reg32 offset="0x0089" name="RBBM_CLOCK_HYST_RB_CCU3"/>
-       <reg32 offset="0x008a" name="RBBM_CLOCK_CNTL_RAC"/>
-       <reg32 offset="0x008b" name="RBBM_CLOCK_CNTL2_RAC"/>
-       <reg32 offset="0x008c" name="RBBM_CLOCK_DELAY_RB_CCU_L1_0"/>
-       <reg32 offset="0x008d" name="RBBM_CLOCK_DELAY_RB_CCU_L1_1"/>
-       <reg32 offset="0x008e" name="RBBM_CLOCK_DELAY_RB_CCU_L1_2"/>
-       <reg32 offset="0x008f" name="RBBM_CLOCK_DELAY_RB_CCU_L1_3"/>
-       <reg32 offset="0x0090" name="RBBM_CLOCK_HYST_VFD"/>
-       <reg32 offset="0x0091" name="RBBM_CLOCK_MODE_VFD"/>
-       <reg32 offset="0x0092" name="RBBM_CLOCK_DELAY_VFD"/>
-       <reg32 offset="0x0093" name="RBBM_AHB_CNTL0"/>
-       <reg32 offset="0x0094" name="RBBM_AHB_CNTL1"/>
-       <reg32 offset="0x0095" name="RBBM_AHB_CNTL2"/>
-       <reg32 offset="0x0096" name="RBBM_AHB_CMD"/>
-       <reg32 offset="0x009c" name="RBBM_INTERFACE_HANG_MASK_CNTL11"/>
-       <reg32 offset="0x009d" name="RBBM_INTERFACE_HANG_MASK_CNTL12"/>
-       <reg32 offset="0x009e" name="RBBM_INTERFACE_HANG_MASK_CNTL13"/>
-       <reg32 offset="0x009f" name="RBBM_INTERFACE_HANG_MASK_CNTL14"/>
-       <reg32 offset="0x00a0" name="RBBM_INTERFACE_HANG_MASK_CNTL15"/>
-       <reg32 offset="0x00a1" name="RBBM_INTERFACE_HANG_MASK_CNTL16"/>
-       <reg32 offset="0x00a2" name="RBBM_INTERFACE_HANG_MASK_CNTL17"/>
-       <reg32 offset="0x00a3" name="RBBM_INTERFACE_HANG_MASK_CNTL18"/>
-       <reg32 offset="0x00a4" name="RBBM_CLOCK_DELAY_TP0"/>
-       <reg32 offset="0x00a5" name="RBBM_CLOCK_DELAY_TP1"/>
-       <reg32 offset="0x00a6" name="RBBM_CLOCK_DELAY_TP2"/>
-       <reg32 offset="0x00a7" name="RBBM_CLOCK_DELAY_TP3"/>
-       <reg32 offset="0x00a8" name="RBBM_CLOCK_DELAY2_TP0"/>
-       <reg32 offset="0x00a9" name="RBBM_CLOCK_DELAY2_TP1"/>
-       <reg32 offset="0x00aa" name="RBBM_CLOCK_DELAY2_TP2"/>
-       <reg32 offset="0x00ab" name="RBBM_CLOCK_DELAY2_TP3"/>
-       <reg32 offset="0x00ac" name="RBBM_CLOCK_DELAY3_TP0"/>
-       <reg32 offset="0x00ad" name="RBBM_CLOCK_DELAY3_TP1"/>
-       <reg32 offset="0x00ae" name="RBBM_CLOCK_DELAY3_TP2"/>
-       <reg32 offset="0x00af" name="RBBM_CLOCK_DELAY3_TP3"/>
-       <reg32 offset="0x00b0" name="RBBM_CLOCK_HYST_TP0"/>
-       <reg32 offset="0x00b1" name="RBBM_CLOCK_HYST_TP1"/>
-       <reg32 offset="0x00b2" name="RBBM_CLOCK_HYST_TP2"/>
-       <reg32 offset="0x00b3" name="RBBM_CLOCK_HYST_TP3"/>
-       <reg32 offset="0x00b4" name="RBBM_CLOCK_HYST2_TP0"/>
-       <reg32 offset="0x00b5" name="RBBM_CLOCK_HYST2_TP1"/>
-       <reg32 offset="0x00b6" name="RBBM_CLOCK_HYST2_TP2"/>
-       <reg32 offset="0x00b7" name="RBBM_CLOCK_HYST2_TP3"/>
-       <reg32 offset="0x00b8" name="RBBM_CLOCK_HYST3_TP0"/>
-       <reg32 offset="0x00b9" name="RBBM_CLOCK_HYST3_TP1"/>
-       <reg32 offset="0x00ba" name="RBBM_CLOCK_HYST3_TP2"/>
-       <reg32 offset="0x00bb" name="RBBM_CLOCK_HYST3_TP3"/>
-       <reg32 offset="0x00c8" name="RBBM_CLOCK_CNTL_GPMU"/>
-       <reg32 offset="0x00c9" name="RBBM_CLOCK_DELAY_GPMU"/>
-       <reg32 offset="0x00ca" name="RBBM_CLOCK_HYST_GPMU"/>
-       <reg32 offset="0x03a0" name="RBBM_PERFCTR_CP_0_LO"/>
-       <reg32 offset="0x03a1" name="RBBM_PERFCTR_CP_0_HI"/>
-       <reg32 offset="0x03a2" name="RBBM_PERFCTR_CP_1_LO"/>
-       <reg32 offset="0x03a3" name="RBBM_PERFCTR_CP_1_HI"/>
-       <reg32 offset="0x03a4" name="RBBM_PERFCTR_CP_2_LO"/>
-       <reg32 offset="0x03a5" name="RBBM_PERFCTR_CP_2_HI"/>
-       <reg32 offset="0x03a6" name="RBBM_PERFCTR_CP_3_LO"/>
-       <reg32 offset="0x03a7" name="RBBM_PERFCTR_CP_3_HI"/>
-       <reg32 offset="0x03a8" name="RBBM_PERFCTR_CP_4_LO"/>
-       <reg32 offset="0x03a9" name="RBBM_PERFCTR_CP_4_HI"/>
-       <reg32 offset="0x03aa" name="RBBM_PERFCTR_CP_5_LO"/>
-       <reg32 offset="0x03ab" name="RBBM_PERFCTR_CP_5_HI"/>
-       <reg32 offset="0x03ac" name="RBBM_PERFCTR_CP_6_LO"/>
-       <reg32 offset="0x03ad" name="RBBM_PERFCTR_CP_6_HI"/>
-       <reg32 offset="0x03ae" name="RBBM_PERFCTR_CP_7_LO"/>
-       <reg32 offset="0x03af" name="RBBM_PERFCTR_CP_7_HI"/>
-       <reg32 offset="0x03b0" name="RBBM_PERFCTR_RBBM_0_LO"/>
-       <reg32 offset="0x03b1" name="RBBM_PERFCTR_RBBM_0_HI"/>
-       <reg32 offset="0x03b2" name="RBBM_PERFCTR_RBBM_1_LO"/>
-       <reg32 offset="0x03b3" name="RBBM_PERFCTR_RBBM_1_HI"/>
-       <reg32 offset="0x03b4" name="RBBM_PERFCTR_RBBM_2_LO"/>
-       <reg32 offset="0x03b5" name="RBBM_PERFCTR_RBBM_2_HI"/>
-       <reg32 offset="0x03b6" name="RBBM_PERFCTR_RBBM_3_LO"/>
-       <reg32 offset="0x03b7" name="RBBM_PERFCTR_RBBM_3_HI"/>
-       <reg32 offset="0x03b8" name="RBBM_PERFCTR_PC_0_LO"/>
-       <reg32 offset="0x03b9" name="RBBM_PERFCTR_PC_0_HI"/>
-       <reg32 offset="0x03ba" name="RBBM_PERFCTR_PC_1_LO"/>
-       <reg32 offset="0x03bb" name="RBBM_PERFCTR_PC_1_HI"/>
-       <reg32 offset="0x03bc" name="RBBM_PERFCTR_PC_2_LO"/>
-       <reg32 offset="0x03bd" name="RBBM_PERFCTR_PC_2_HI"/>
-       <reg32 offset="0x03be" name="RBBM_PERFCTR_PC_3_LO"/>
-       <reg32 offset="0x03bf" name="RBBM_PERFCTR_PC_3_HI"/>
-       <reg32 offset="0x03c0" name="RBBM_PERFCTR_PC_4_LO"/>
-       <reg32 offset="0x03c1" name="RBBM_PERFCTR_PC_4_HI"/>
-       <reg32 offset="0x03c2" name="RBBM_PERFCTR_PC_5_LO"/>
-       <reg32 offset="0x03c3" name="RBBM_PERFCTR_PC_5_HI"/>
-       <reg32 offset="0x03c4" name="RBBM_PERFCTR_PC_6_LO"/>
-       <reg32 offset="0x03c5" name="RBBM_PERFCTR_PC_6_HI"/>
-       <reg32 offset="0x03c6" name="RBBM_PERFCTR_PC_7_LO"/>
-       <reg32 offset="0x03c7" name="RBBM_PERFCTR_PC_7_HI"/>
-       <reg32 offset="0x03c8" name="RBBM_PERFCTR_VFD_0_LO"/>
-       <reg32 offset="0x03c9" name="RBBM_PERFCTR_VFD_0_HI"/>
-       <reg32 offset="0x03ca" name="RBBM_PERFCTR_VFD_1_LO"/>
-       <reg32 offset="0x03cb" name="RBBM_PERFCTR_VFD_1_HI"/>
-       <reg32 offset="0x03cc" name="RBBM_PERFCTR_VFD_2_LO"/>
-       <reg32 offset="0x03cd" name="RBBM_PERFCTR_VFD_2_HI"/>
-       <reg32 offset="0x03ce" name="RBBM_PERFCTR_VFD_3_LO"/>
-       <reg32 offset="0x03cf" name="RBBM_PERFCTR_VFD_3_HI"/>
-       <reg32 offset="0x03d0" name="RBBM_PERFCTR_VFD_4_LO"/>
-       <reg32 offset="0x03d1" name="RBBM_PERFCTR_VFD_4_HI"/>
-       <reg32 offset="0x03d2" name="RBBM_PERFCTR_VFD_5_LO"/>
-       <reg32 offset="0x03d3" name="RBBM_PERFCTR_VFD_5_HI"/>
-       <reg32 offset="0x03d4" name="RBBM_PERFCTR_VFD_6_LO"/>
-       <reg32 offset="0x03d5" name="RBBM_PERFCTR_VFD_6_HI"/>
-       <reg32 offset="0x03d6" name="RBBM_PERFCTR_VFD_7_LO"/>
-       <reg32 offset="0x03d7" name="RBBM_PERFCTR_VFD_7_HI"/>
-       <reg32 offset="0x03d8" name="RBBM_PERFCTR_HLSQ_0_LO"/>
-       <reg32 offset="0x03d9" name="RBBM_PERFCTR_HLSQ_0_HI"/>
-       <reg32 offset="0x03da" name="RBBM_PERFCTR_HLSQ_1_LO"/>
-       <reg32 offset="0x03db" name="RBBM_PERFCTR_HLSQ_1_HI"/>
-       <reg32 offset="0x03dc" name="RBBM_PERFCTR_HLSQ_2_LO"/>
-       <reg32 offset="0x03dd" name="RBBM_PERFCTR_HLSQ_2_HI"/>
-       <reg32 offset="0x03de" name="RBBM_PERFCTR_HLSQ_3_LO"/>
-       <reg32 offset="0x03df" name="RBBM_PERFCTR_HLSQ_3_HI"/>
-       <reg32 offset="0x03e0" name="RBBM_PERFCTR_HLSQ_4_LO"/>
-       <reg32 offset="0x03e1" name="RBBM_PERFCTR_HLSQ_4_HI"/>
-       <reg32 offset="0x03e2" name="RBBM_PERFCTR_HLSQ_5_LO"/>
-       <reg32 offset="0x03e3" name="RBBM_PERFCTR_HLSQ_5_HI"/>
-       <reg32 offset="0x03e4" name="RBBM_PERFCTR_HLSQ_6_LO"/>
-       <reg32 offset="0x03e5" name="RBBM_PERFCTR_HLSQ_6_HI"/>
-       <reg32 offset="0x03e6" name="RBBM_PERFCTR_HLSQ_7_LO"/>
-       <reg32 offset="0x03e7" name="RBBM_PERFCTR_HLSQ_7_HI"/>
-       <reg32 offset="0x03e8" name="RBBM_PERFCTR_VPC_0_LO"/>
-       <reg32 offset="0x03e9" name="RBBM_PERFCTR_VPC_0_HI"/>
-       <reg32 offset="0x03ea" name="RBBM_PERFCTR_VPC_1_LO"/>
-       <reg32 offset="0x03eb" name="RBBM_PERFCTR_VPC_1_HI"/>
-       <reg32 offset="0x03ec" name="RBBM_PERFCTR_VPC_2_LO"/>
-       <reg32 offset="0x03ed" name="RBBM_PERFCTR_VPC_2_HI"/>
-       <reg32 offset="0x03ee" name="RBBM_PERFCTR_VPC_3_LO"/>
-       <reg32 offset="0x03ef" name="RBBM_PERFCTR_VPC_3_HI"/>
-       <reg32 offset="0x03f0" name="RBBM_PERFCTR_CCU_0_LO"/>
-       <reg32 offset="0x03f1" name="RBBM_PERFCTR_CCU_0_HI"/>
-       <reg32 offset="0x03f2" name="RBBM_PERFCTR_CCU_1_LO"/>
-       <reg32 offset="0x03f3" name="RBBM_PERFCTR_CCU_1_HI"/>
-       <reg32 offset="0x03f4" name="RBBM_PERFCTR_CCU_2_LO"/>
-       <reg32 offset="0x03f5" name="RBBM_PERFCTR_CCU_2_HI"/>
-       <reg32 offset="0x03f6" name="RBBM_PERFCTR_CCU_3_LO"/>
-       <reg32 offset="0x03f7" name="RBBM_PERFCTR_CCU_3_HI"/>
-       <reg32 offset="0x03f8" name="RBBM_PERFCTR_TSE_0_LO"/>
-       <reg32 offset="0x03f9" name="RBBM_PERFCTR_TSE_0_HI"/>
-       <reg32 offset="0x03fa" name="RBBM_PERFCTR_TSE_1_LO"/>
-       <reg32 offset="0x03fb" name="RBBM_PERFCTR_TSE_1_HI"/>
-       <reg32 offset="0x03fc" name="RBBM_PERFCTR_TSE_2_LO"/>
-       <reg32 offset="0x03fd" name="RBBM_PERFCTR_TSE_2_HI"/>
-       <reg32 offset="0x03fe" name="RBBM_PERFCTR_TSE_3_LO"/>
-       <reg32 offset="0x03ff" name="RBBM_PERFCTR_TSE_3_HI"/>
-       <reg32 offset="0x0400" name="RBBM_PERFCTR_RAS_0_LO"/>
-       <reg32 offset="0x0401" name="RBBM_PERFCTR_RAS_0_HI"/>
-       <reg32 offset="0x0402" name="RBBM_PERFCTR_RAS_1_LO"/>
-       <reg32 offset="0x0403" name="RBBM_PERFCTR_RAS_1_HI"/>
-       <reg32 offset="0x0404" name="RBBM_PERFCTR_RAS_2_LO"/>
-       <reg32 offset="0x0405" name="RBBM_PERFCTR_RAS_2_HI"/>
-       <reg32 offset="0x0406" name="RBBM_PERFCTR_RAS_3_LO"/>
-       <reg32 offset="0x0407" name="RBBM_PERFCTR_RAS_3_HI"/>
-       <reg32 offset="0x0408" name="RBBM_PERFCTR_UCHE_0_LO"/>
-       <reg32 offset="0x0409" name="RBBM_PERFCTR_UCHE_0_HI"/>
-       <reg32 offset="0x040a" name="RBBM_PERFCTR_UCHE_1_LO"/>
-       <reg32 offset="0x040b" name="RBBM_PERFCTR_UCHE_1_HI"/>
-       <reg32 offset="0x040c" name="RBBM_PERFCTR_UCHE_2_LO"/>
-       <reg32 offset="0x040d" name="RBBM_PERFCTR_UCHE_2_HI"/>
-       <reg32 offset="0x040e" name="RBBM_PERFCTR_UCHE_3_LO"/>
-       <reg32 offset="0x040f" name="RBBM_PERFCTR_UCHE_3_HI"/>
-       <reg32 offset="0x0410" name="RBBM_PERFCTR_UCHE_4_LO"/>
-       <reg32 offset="0x0411" name="RBBM_PERFCTR_UCHE_4_HI"/>
-       <reg32 offset="0x0412" name="RBBM_PERFCTR_UCHE_5_LO"/>
-       <reg32 offset="0x0413" name="RBBM_PERFCTR_UCHE_5_HI"/>
-       <reg32 offset="0x0414" name="RBBM_PERFCTR_UCHE_6_LO"/>
-       <reg32 offset="0x0415" name="RBBM_PERFCTR_UCHE_6_HI"/>
-       <reg32 offset="0x0416" name="RBBM_PERFCTR_UCHE_7_LO"/>
-       <reg32 offset="0x0417" name="RBBM_PERFCTR_UCHE_7_HI"/>
-       <reg32 offset="0x0418" name="RBBM_PERFCTR_TP_0_LO"/>
-       <reg32 offset="0x0419" name="RBBM_PERFCTR_TP_0_HI"/>
-       <reg32 offset="0x041a" name="RBBM_PERFCTR_TP_1_LO"/>
-       <reg32 offset="0x041b" name="RBBM_PERFCTR_TP_1_HI"/>
-       <reg32 offset="0x041c" name="RBBM_PERFCTR_TP_2_LO"/>
-       <reg32 offset="0x041d" name="RBBM_PERFCTR_TP_2_HI"/>
-       <reg32 offset="0x041e" name="RBBM_PERFCTR_TP_3_LO"/>
-       <reg32 offset="0x041f" name="RBBM_PERFCTR_TP_3_HI"/>
-       <reg32 offset="0x0420" name="RBBM_PERFCTR_TP_4_LO"/>
-       <reg32 offset="0x0421" name="RBBM_PERFCTR_TP_4_HI"/>
-       <reg32 offset="0x0422" name="RBBM_PERFCTR_TP_5_LO"/>
-       <reg32 offset="0x0423" name="RBBM_PERFCTR_TP_5_HI"/>
-       <reg32 offset="0x0424" name="RBBM_PERFCTR_TP_6_LO"/>
-       <reg32 offset="0x0425" name="RBBM_PERFCTR_TP_6_HI"/>
-       <reg32 offset="0x0426" name="RBBM_PERFCTR_TP_7_LO"/>
-       <reg32 offset="0x0427" name="RBBM_PERFCTR_TP_7_HI"/>
-       <reg32 offset="0x0428" name="RBBM_PERFCTR_SP_0_LO"/>
-       <reg32 offset="0x0429" name="RBBM_PERFCTR_SP_0_HI"/>
-       <reg32 offset="0x042a" name="RBBM_PERFCTR_SP_1_LO"/>
-       <reg32 offset="0x042b" name="RBBM_PERFCTR_SP_1_HI"/>
-       <reg32 offset="0x042c" name="RBBM_PERFCTR_SP_2_LO"/>
-       <reg32 offset="0x042d" name="RBBM_PERFCTR_SP_2_HI"/>
-       <reg32 offset="0x042e" name="RBBM_PERFCTR_SP_3_LO"/>
-       <reg32 offset="0x042f" name="RBBM_PERFCTR_SP_3_HI"/>
-       <reg32 offset="0x0430" name="RBBM_PERFCTR_SP_4_LO"/>
-       <reg32 offset="0x0431" name="RBBM_PERFCTR_SP_4_HI"/>
-       <reg32 offset="0x0432" name="RBBM_PERFCTR_SP_5_LO"/>
-       <reg32 offset="0x0433" name="RBBM_PERFCTR_SP_5_HI"/>
-       <reg32 offset="0x0434" name="RBBM_PERFCTR_SP_6_LO"/>
-       <reg32 offset="0x0435" name="RBBM_PERFCTR_SP_6_HI"/>
-       <reg32 offset="0x0436" name="RBBM_PERFCTR_SP_7_LO"/>
-       <reg32 offset="0x0437" name="RBBM_PERFCTR_SP_7_HI"/>
-       <reg32 offset="0x0438" name="RBBM_PERFCTR_SP_8_LO"/>
-       <reg32 offset="0x0439" name="RBBM_PERFCTR_SP_8_HI"/>
-       <reg32 offset="0x043a" name="RBBM_PERFCTR_SP_9_LO"/>
-       <reg32 offset="0x043b" name="RBBM_PERFCTR_SP_9_HI"/>
-       <reg32 offset="0x043c" name="RBBM_PERFCTR_SP_10_LO"/>
-       <reg32 offset="0x043d" name="RBBM_PERFCTR_SP_10_HI"/>
-       <reg32 offset="0x043e" name="RBBM_PERFCTR_SP_11_LO"/>
-       <reg32 offset="0x043f" name="RBBM_PERFCTR_SP_11_HI"/>
-       <reg32 offset="0x0440" name="RBBM_PERFCTR_RB_0_LO"/>
-       <reg32 offset="0x0441" name="RBBM_PERFCTR_RB_0_HI"/>
-       <reg32 offset="0x0442" name="RBBM_PERFCTR_RB_1_LO"/>
-       <reg32 offset="0x0443" name="RBBM_PERFCTR_RB_1_HI"/>
-       <reg32 offset="0x0444" name="RBBM_PERFCTR_RB_2_LO"/>
-       <reg32 offset="0x0445" name="RBBM_PERFCTR_RB_2_HI"/>
-       <reg32 offset="0x0446" name="RBBM_PERFCTR_RB_3_LO"/>
-       <reg32 offset="0x0447" name="RBBM_PERFCTR_RB_3_HI"/>
-       <reg32 offset="0x0448" name="RBBM_PERFCTR_RB_4_LO"/>
-       <reg32 offset="0x0449" name="RBBM_PERFCTR_RB_4_HI"/>
-       <reg32 offset="0x044a" name="RBBM_PERFCTR_RB_5_LO"/>
-       <reg32 offset="0x044b" name="RBBM_PERFCTR_RB_5_HI"/>
-       <reg32 offset="0x044c" name="RBBM_PERFCTR_RB_6_LO"/>
-       <reg32 offset="0x044d" name="RBBM_PERFCTR_RB_6_HI"/>
-       <reg32 offset="0x044e" name="RBBM_PERFCTR_RB_7_LO"/>
-       <reg32 offset="0x044f" name="RBBM_PERFCTR_RB_7_HI"/>
-       <reg32 offset="0x0450" name="RBBM_PERFCTR_VSC_0_LO"/>
-       <reg32 offset="0x0451" name="RBBM_PERFCTR_VSC_0_HI"/>
-       <reg32 offset="0x0452" name="RBBM_PERFCTR_VSC_1_LO"/>
-       <reg32 offset="0x0453" name="RBBM_PERFCTR_VSC_1_HI"/>
-       <reg32 offset="0x0454" name="RBBM_PERFCTR_LRZ_0_LO"/>
-       <reg32 offset="0x0455" name="RBBM_PERFCTR_LRZ_0_HI"/>
-       <reg32 offset="0x0456" name="RBBM_PERFCTR_LRZ_1_LO"/>
-       <reg32 offset="0x0457" name="RBBM_PERFCTR_LRZ_1_HI"/>
-       <reg32 offset="0x0458" name="RBBM_PERFCTR_LRZ_2_LO"/>
-       <reg32 offset="0x0459" name="RBBM_PERFCTR_LRZ_2_HI"/>
-       <reg32 offset="0x045a" name="RBBM_PERFCTR_LRZ_3_LO"/>
-       <reg32 offset="0x045b" name="RBBM_PERFCTR_LRZ_3_HI"/>
-       <reg32 offset="0x045c" name="RBBM_PERFCTR_CMP_0_LO"/>
-       <reg32 offset="0x045d" name="RBBM_PERFCTR_CMP_0_HI"/>
-       <reg32 offset="0x045e" name="RBBM_PERFCTR_CMP_1_LO"/>
-       <reg32 offset="0x045f" name="RBBM_PERFCTR_CMP_1_HI"/>
-       <reg32 offset="0x0460" name="RBBM_PERFCTR_CMP_2_LO"/>
-       <reg32 offset="0x0461" name="RBBM_PERFCTR_CMP_2_HI"/>
-       <reg32 offset="0x0462" name="RBBM_PERFCTR_CMP_3_LO"/>
-       <reg32 offset="0x0463" name="RBBM_PERFCTR_CMP_3_HI"/>
-       <reg32 offset="0x046b" name="RBBM_PERFCTR_RBBM_SEL_0" type="a5xx_rbbm_perfcounter_select"/>
-       <reg32 offset="0x046c" name="RBBM_PERFCTR_RBBM_SEL_1" type="a5xx_rbbm_perfcounter_select"/>
-       <reg32 offset="0x046d" name="RBBM_PERFCTR_RBBM_SEL_2" type="a5xx_rbbm_perfcounter_select"/>
-       <reg32 offset="0x046e" name="RBBM_PERFCTR_RBBM_SEL_3" type="a5xx_rbbm_perfcounter_select"/>
-       <reg32 offset="0x04d2" name="RBBM_ALWAYSON_COUNTER_LO"/>
-       <reg32 offset="0x04d3" name="RBBM_ALWAYSON_COUNTER_HI"/>
-       <reg32 offset="0x04f5" name="RBBM_STATUS">
-               <bitfield high="31" low="31" name="GPU_BUSY_IGN_AHB" />
-               <bitfield high="30" low="30" name="GPU_BUSY_IGN_AHB_CP" />
-               <bitfield high="29" low="29" name="HLSQ_BUSY" />
-               <bitfield high="28" low="28" name="VSC_BUSY" />
-               <bitfield high="27" low="27" name="TPL1_BUSY" />
-               <bitfield high="26" low="26" name="SP_BUSY" />
-               <bitfield high="25" low="25" name="UCHE_BUSY" />
-               <bitfield high="24" low="24" name="VPC_BUSY" />
-               <bitfield high="23" low="23" name="VFDP_BUSY" />
-               <bitfield high="22" low="22" name="VFD_BUSY" />
-               <bitfield high="21" low="21" name="TESS_BUSY" />
-               <bitfield high="20" low="20" name="PC_VSD_BUSY" />
-               <bitfield high="19" low="19" name="PC_DCALL_BUSY" />
-               <bitfield high="18" low="18" name="GPMU_SLAVE_BUSY" />
-               <bitfield high="17" low="17" name="DCOM_BUSY" />
-               <bitfield high="16" low="16" name="COM_BUSY" />
-               <bitfield high="15" low="15" name="LRZ_BUZY" />
-               <bitfield high="14" low="14" name="A2D_DSP_BUSY" />
-               <bitfield high="13" low="13" name="CCUFCHE_BUSY" />
-               <bitfield high="12" low="12" name="RB_BUSY" />
-               <bitfield high="11" low="11" name="RAS_BUSY" />
-               <bitfield high="10" low="10" name="TSE_BUSY" />
-               <bitfield high="9" low="9" name="VBIF_BUSY" />
-               <bitfield high="8" low="8" name="GPU_BUSY_IGN_AHB_HYST" />
-               <bitfield high="7" low="7" name="CP_BUSY_IGN_HYST" />
-               <bitfield high="6" low="6" name="CP_BUSY" />
-               <bitfield high="5" low="5" name="GPMU_MASTER_BUSY" />
-               <bitfield high="4" low="4" name="CP_CRASH_BUSY" />
-               <bitfield high="3" low="3" name="CP_ETS_BUSY" />
-               <bitfield high="2" low="2" name="CP_PFP_BUSY" />
-               <bitfield high="1" low="1" name="CP_ME_BUSY" />
-               <bitfield high="0" low="0" name="HI_BUSY" />
-       </reg32>
-       <reg32 offset="0x0530" name="RBBM_STATUS3"/>
-       <reg32 offset="0x04e1" name="RBBM_INT_0_STATUS"/>
-       <reg32 offset="0x04f0" name="RBBM_AHB_ME_SPLIT_STATUS"/>
-       <reg32 offset="0x04f1" name="RBBM_AHB_PFP_SPLIT_STATUS"/>
-       <reg32 offset="0x04f3" name="RBBM_AHB_ETS_SPLIT_STATUS"/>
-       <reg32 offset="0x04f4" name="RBBM_AHB_ERROR_STATUS"/>
-       <reg32 offset="0x0464" name="RBBM_PERFCTR_CNTL"/>
-       <reg32 offset="0x0465" name="RBBM_PERFCTR_LOAD_CMD0"/>
-       <reg32 offset="0x0466" name="RBBM_PERFCTR_LOAD_CMD1"/>
-       <reg32 offset="0x0467" name="RBBM_PERFCTR_LOAD_CMD2"/>
-       <reg32 offset="0x0468" name="RBBM_PERFCTR_LOAD_CMD3"/>
-       <reg32 offset="0x0469" name="RBBM_PERFCTR_LOAD_VALUE_LO"/>
-       <reg32 offset="0x046a" name="RBBM_PERFCTR_LOAD_VALUE_HI"/>
-       <reg32 offset="0x046f" name="RBBM_PERFCTR_GPU_BUSY_MASKED"/>
-       <reg32 offset="0x04ed" name="RBBM_AHB_ERROR"/>
-       <reg32 offset="0x0504" name="RBBM_CFG_DBGBUS_EVENT_LOGIC"/>
-       <reg32 offset="0x0505" name="RBBM_CFG_DBGBUS_OVER"/>
-       <reg32 offset="0x0506" name="RBBM_CFG_DBGBUS_COUNT0"/>
-       <reg32 offset="0x0507" name="RBBM_CFG_DBGBUS_COUNT1"/>
-       <reg32 offset="0x0508" name="RBBM_CFG_DBGBUS_COUNT2"/>
-       <reg32 offset="0x0509" name="RBBM_CFG_DBGBUS_COUNT3"/>
-       <reg32 offset="0x050a" name="RBBM_CFG_DBGBUS_COUNT4"/>
-       <reg32 offset="0x050b" name="RBBM_CFG_DBGBUS_COUNT5"/>
-       <reg32 offset="0x050c" name="RBBM_CFG_DBGBUS_TRACE_ADDR"/>
-       <reg32 offset="0x050d" name="RBBM_CFG_DBGBUS_TRACE_BUF0"/>
-       <reg32 offset="0x050e" name="RBBM_CFG_DBGBUS_TRACE_BUF1"/>
-       <reg32 offset="0x050f" name="RBBM_CFG_DBGBUS_TRACE_BUF2"/>
-       <reg32 offset="0x0510" name="RBBM_CFG_DBGBUS_TRACE_BUF3"/>
-       <reg32 offset="0x0511" name="RBBM_CFG_DBGBUS_TRACE_BUF4"/>
-       <reg32 offset="0x0512" name="RBBM_CFG_DBGBUS_MISR0"/>
-       <reg32 offset="0x0513" name="RBBM_CFG_DBGBUS_MISR1"/>
-       <reg32 offset="0x0533" name="RBBM_ISDB_CNT"/>
-       <reg32 offset="0xf000" name="RBBM_SECVID_TRUST_CONFIG"/>
-       <reg32 offset="0xf400" name="RBBM_SECVID_TRUST_CNTL"/>
-       <reg32 offset="0xf800" name="RBBM_SECVID_TSB_TRUSTED_BASE_LO"/>
-       <reg32 offset="0xf801" name="RBBM_SECVID_TSB_TRUSTED_BASE_HI"/>
-       <reg32 offset="0xf802" name="RBBM_SECVID_TSB_TRUSTED_SIZE"/>
-       <reg32 offset="0xf803" name="RBBM_SECVID_TSB_CNTL"/>
-       <reg32 offset="0xf804" name="RBBM_SECVID_TSB_COMP_STATUS_LO"/>
-       <reg32 offset="0xf805" name="RBBM_SECVID_TSB_COMP_STATUS_HI"/>
-       <reg32 offset="0xf806" name="RBBM_SECVID_TSB_UCHE_STATUS_LO"/>
-       <reg32 offset="0xf807" name="RBBM_SECVID_TSB_UCHE_STATUS_HI"/>
-       <reg32 offset="0xf810" name="RBBM_SECVID_TSB_ADDR_MODE_CNTL" type="a5xx_address_mode"/>
-
-       <!-- VSC registers -->
-       <reg32 offset="0x0bc2" name="VSC_BIN_SIZE">
-               <bitfield name="WIDTH" low="0" high="7" shr="5" type="uint"/>
-               <bitfield name="HEIGHT" low="9" high="16" shr="5" type="uint"/>
-               <!-- b17 maybe BYPASS like RB_CNTL, but reg not written for bypass -->
-       </reg32>
-       <reg32 offset="0x0bc3" name="VSC_SIZE_ADDRESS_LO"/>
-       <reg32 offset="0x0bc4" name="VSC_SIZE_ADDRESS_HI"/>
-       <reg32 offset="0x0bc5" name="UNKNOWN_0BC5"/> <!-- always 00000000? -->
-       <reg32 offset="0x0bc6" name="UNKNOWN_0BC6"/> <!-- always 00000000? -->
-       <array offset="0x0bd0" name="VSC_PIPE_CONFIG" stride="1" length="16">
-               <reg32 offset="0x0" name="REG">
-                       <doc>
-                               Configures the mapping between VSC_PIPE buffer and
-                               bin, X/Y specify the bin index in the horiz/vert
-                               direction (0,0 is upper left, 0,1 is leftmost bin
-                               on second row, and so on).  W/H specify the number
-                               of bins assigned to this VSC_PIPE in the horiz/vert
-                               dimension.
-                       </doc>
-                       <bitfield name="X" low="0" high="9" type="uint"/>
-                       <bitfield name="Y" low="10" high="19" type="uint"/>
-                       <bitfield name="W" low="20" high="23" type="uint"/>
-                       <bitfield name="H" low="24" high="27" type="uint"/>
-               </reg32>
-       </array>
-       <array offset="0x0be0" name="VSC_PIPE_DATA_ADDRESS" stride="2" length="16">
-               <reg32 offset="0x0" name="LO"/>
-               <reg32 offset="0x1" name="HI"/>
-       </array>
-       <array offset="0x0c00" name="VSC_PIPE_DATA_LENGTH" stride="1" length="16">
-               <reg32 offset="0x0" name="REG"/>
-       </array>
-       <reg32 offset="0x0c60" name="VSC_PERFCTR_VSC_SEL_0" type="a5xx_vsc_perfcounter_select"/>
-       <reg32 offset="0x0c61" name="VSC_PERFCTR_VSC_SEL_1" type="a5xx_vsc_perfcounter_select"/>
-
-       <!-- used for some blits?? -->
-       <reg32 offset="0x0cdd" name="VSC_RESOLVE_CNTL" type="adreno_reg_xy"/>
-
-       <!-- GRAS registers -->
-       <reg32 offset="0x0c81" name="GRAS_ADDR_MODE_CNTL" type="a5xx_address_mode"/>
-       <reg32 offset="0x0c90" name="GRAS_PERFCTR_TSE_SEL_0" type="a5xx_tse_perfcounter_select"/>
-       <reg32 offset="0x0c91" name="GRAS_PERFCTR_TSE_SEL_1" type="a5xx_tse_perfcounter_select"/>
-       <reg32 offset="0x0c92" name="GRAS_PERFCTR_TSE_SEL_2" type="a5xx_tse_perfcounter_select"/>
-       <reg32 offset="0x0c93" name="GRAS_PERFCTR_TSE_SEL_3" type="a5xx_tse_perfcounter_select"/>
-       <reg32 offset="0x0c94" name="GRAS_PERFCTR_RAS_SEL_0" type="a5xx_ras_perfcounter_select"/>
-       <reg32 offset="0x0c95" name="GRAS_PERFCTR_RAS_SEL_1" type="a5xx_ras_perfcounter_select"/>
-       <reg32 offset="0x0c96" name="GRAS_PERFCTR_RAS_SEL_2" type="a5xx_ras_perfcounter_select"/>
-       <reg32 offset="0x0c97" name="GRAS_PERFCTR_RAS_SEL_3" type="a5xx_ras_perfcounter_select"/>
-       <reg32 offset="0x0c98" name="GRAS_PERFCTR_LRZ_SEL_0" type="a5xx_lrz_perfcounter_select"/>
-       <reg32 offset="0x0c99" name="GRAS_PERFCTR_LRZ_SEL_1" type="a5xx_lrz_perfcounter_select"/>
-       <reg32 offset="0x0c9a" name="GRAS_PERFCTR_LRZ_SEL_2" type="a5xx_lrz_perfcounter_select"/>
-       <reg32 offset="0x0c9b" name="GRAS_PERFCTR_LRZ_SEL_3" type="a5xx_lrz_perfcounter_select"/>
-
-       <reg32 offset="0x0cc4" name="RB_DBG_ECO_CNTL"/> <!-- always 00100000? -->
-       <reg32 offset="0x0cc5" name="RB_ADDR_MODE_CNTL" type="a5xx_address_mode"/>
-       <reg32 offset="0x0cc6" name="RB_MODE_CNTL"/> <!-- always 00000044? -->
-       <reg32 offset="0x0cc7" name="RB_CCU_CNTL"/> <!-- always b0056080 or 10000000? -->
-       <reg32 offset="0x0cd0" name="RB_PERFCTR_RB_SEL_0" type="a5xx_rb_perfcounter_select"/>
-       <reg32 offset="0x0cd1" name="RB_PERFCTR_RB_SEL_1" type="a5xx_rb_perfcounter_select"/>
-       <reg32 offset="0x0cd2" name="RB_PERFCTR_RB_SEL_2" type="a5xx_rb_perfcounter_select"/>
-       <reg32 offset="0x0cd3" name="RB_PERFCTR_RB_SEL_3" type="a5xx_rb_perfcounter_select"/>
-       <reg32 offset="0x0cd4" name="RB_PERFCTR_RB_SEL_4" type="a5xx_rb_perfcounter_select"/>
-       <reg32 offset="0x0cd5" name="RB_PERFCTR_RB_SEL_5" type="a5xx_rb_perfcounter_select"/>
-       <reg32 offset="0x0cd6" name="RB_PERFCTR_RB_SEL_6" type="a5xx_rb_perfcounter_select"/>
-       <reg32 offset="0x0cd7" name="RB_PERFCTR_RB_SEL_7" type="a5xx_rb_perfcounter_select"/>
-       <reg32 offset="0x0cd8" name="RB_PERFCTR_CCU_SEL_0" type="a5xx_ccu_perfcounter_select"/>
-       <reg32 offset="0x0cd9" name="RB_PERFCTR_CCU_SEL_1" type="a5xx_ccu_perfcounter_select"/>
-       <reg32 offset="0x0cda" name="RB_PERFCTR_CCU_SEL_2" type="a5xx_ccu_perfcounter_select"/>
-       <reg32 offset="0x0cdb" name="RB_PERFCTR_CCU_SEL_3" type="a5xx_ccu_perfcounter_select"/>
-       <reg32 offset="0x0ce0" name="RB_POWERCTR_RB_SEL_0"/>
-       <reg32 offset="0x0ce1" name="RB_POWERCTR_RB_SEL_1"/>
-       <reg32 offset="0x0ce2" name="RB_POWERCTR_RB_SEL_2"/>
-       <reg32 offset="0x0ce3" name="RB_POWERCTR_RB_SEL_3"/>
-       <reg32 offset="0x0ce4" name="RB_POWERCTR_CCU_SEL_0"/>
-       <reg32 offset="0x0ce5" name="RB_POWERCTR_CCU_SEL_1"/>
-       <reg32 offset="0x0cec" name="RB_PERFCTR_CMP_SEL_0" type="a5xx_cmp_perfcounter_select"/>
-       <reg32 offset="0x0ced" name="RB_PERFCTR_CMP_SEL_1" type="a5xx_cmp_perfcounter_select"/>
-       <reg32 offset="0x0cee" name="RB_PERFCTR_CMP_SEL_2" type="a5xx_cmp_perfcounter_select"/>
-       <reg32 offset="0x0cef" name="RB_PERFCTR_CMP_SEL_3" type="a5xx_cmp_perfcounter_select"/>
-
-       <reg32 offset="0x0d00" name="PC_DBG_ECO_CNTL">
-               <bitfield name="TWOPASSUSEWFI" pos="8" type="boolean"/>
-       </reg32>
-       <reg32 offset="0x0d01" name="PC_ADDR_MODE_CNTL" type="a5xx_address_mode"/>
-       <reg32 offset="0x0d02" name="PC_MODE_CNTL"/> <!-- always 0000001f? -->
-       <reg32 offset="0x0d04" name="PC_INDEX_BUF_LO"/>
-       <reg32 offset="0x0d05" name="PC_INDEX_BUF_HI"/>
-       <reg32 offset="0x0d06" name="PC_START_INDEX"/>
-       <reg32 offset="0x0d07" name="PC_MAX_INDEX"/>
-       <reg32 offset="0x0d08" name="PC_TESSFACTOR_ADDR_LO"/>
-       <reg32 offset="0x0d09" name="PC_TESSFACTOR_ADDR_HI"/>
-       <reg32 offset="0x0d10" name="PC_PERFCTR_PC_SEL_0" type="a5xx_pc_perfcounter_select"/>
-       <reg32 offset="0x0d11" name="PC_PERFCTR_PC_SEL_1" type="a5xx_pc_perfcounter_select"/>
-       <reg32 offset="0x0d12" name="PC_PERFCTR_PC_SEL_2" type="a5xx_pc_perfcounter_select"/>
-       <reg32 offset="0x0d13" name="PC_PERFCTR_PC_SEL_3" type="a5xx_pc_perfcounter_select"/>
-       <reg32 offset="0x0d14" name="PC_PERFCTR_PC_SEL_4" type="a5xx_pc_perfcounter_select"/>
-       <reg32 offset="0x0d15" name="PC_PERFCTR_PC_SEL_5" type="a5xx_pc_perfcounter_select"/>
-       <reg32 offset="0x0d16" name="PC_PERFCTR_PC_SEL_6" type="a5xx_pc_perfcounter_select"/>
-       <reg32 offset="0x0d17" name="PC_PERFCTR_PC_SEL_7" type="a5xx_pc_perfcounter_select"/>
-
-       <reg32 offset="0x0e00" name="HLSQ_TIMEOUT_THRESHOLD_0"/>
-       <reg32 offset="0x0e01" name="HLSQ_TIMEOUT_THRESHOLD_1"/>
-       <reg32 offset="0x0e04" name="HLSQ_DBG_ECO_CNTL"/>
-       <reg32 offset="0x0e05" name="HLSQ_ADDR_MODE_CNTL" type="a5xx_address_mode"/>
-       <reg32 offset="0x0e06" name="HLSQ_MODE_CNTL"/> <!-- always 00000001? -->
-       <reg32 offset="0x0e10" name="HLSQ_PERFCTR_HLSQ_SEL_0" type="a5xx_hlsq_perfcounter_select"/>
-       <reg32 offset="0x0e11" name="HLSQ_PERFCTR_HLSQ_SEL_1" type="a5xx_hlsq_perfcounter_select"/>
-       <reg32 offset="0x0e12" name="HLSQ_PERFCTR_HLSQ_SEL_2" type="a5xx_hlsq_perfcounter_select"/>
-       <reg32 offset="0x0e13" name="HLSQ_PERFCTR_HLSQ_SEL_3" type="a5xx_hlsq_perfcounter_select"/>
-       <reg32 offset="0x0e14" name="HLSQ_PERFCTR_HLSQ_SEL_4" type="a5xx_hlsq_perfcounter_select"/>
-       <reg32 offset="0x0e15" name="HLSQ_PERFCTR_HLSQ_SEL_5" type="a5xx_hlsq_perfcounter_select"/>
-       <reg32 offset="0x0e16" name="HLSQ_PERFCTR_HLSQ_SEL_6" type="a5xx_hlsq_perfcounter_select"/>
-       <reg32 offset="0x0e17" name="HLSQ_PERFCTR_HLSQ_SEL_7" type="a5xx_hlsq_perfcounter_select"/>
-       <reg32 offset="0x0f08" name="HLSQ_SPTP_RDSEL"/>
-       <reg32 offset="0xbc00" name="HLSQ_DBG_READ_SEL"/>
-       <reg32 offset="0xa000" name="HLSQ_DBG_AHB_READ_APERTURE"/>
-
-       <reg32 offset="0x0e41" name="VFD_ADDR_MODE_CNTL" type="a5xx_address_mode"/>
-       <reg32 offset="0x0e42" name="VFD_MODE_CNTL"/> <!-- always 00000000? -->
-       <reg32 offset="0x0e50" name="VFD_PERFCTR_VFD_SEL_0" type="a5xx_vfd_perfcounter_select"/>
-       <reg32 offset="0x0e51" name="VFD_PERFCTR_VFD_SEL_1" type="a5xx_vfd_perfcounter_select"/>
-       <reg32 offset="0x0e52" name="VFD_PERFCTR_VFD_SEL_2" type="a5xx_vfd_perfcounter_select"/>
-       <reg32 offset="0x0e53" name="VFD_PERFCTR_VFD_SEL_3" type="a5xx_vfd_perfcounter_select"/>
-       <reg32 offset="0x0e54" name="VFD_PERFCTR_VFD_SEL_4" type="a5xx_vfd_perfcounter_select"/>
-       <reg32 offset="0x0e55" name="VFD_PERFCTR_VFD_SEL_5" type="a5xx_vfd_perfcounter_select"/>
-       <reg32 offset="0x0e56" name="VFD_PERFCTR_VFD_SEL_6" type="a5xx_vfd_perfcounter_select"/>
-       <reg32 offset="0x0e57" name="VFD_PERFCTR_VFD_SEL_7" type="a5xx_vfd_perfcounter_select"/>
-       <reg32 offset="0x0e60" name="VPC_DBG_ECO_CNTL"/> <!-- always 00000400? -->
-       <reg32 offset="0x0e61" name="VPC_ADDR_MODE_CNTL" type="a5xx_address_mode"/>
-       <reg32 offset="0x0e62" name="VPC_MODE_CNTL">
-               <bitfield name="BINNING_PASS" pos="0" type="boolean"/>
-       </reg32>
-       <reg32 offset="0x0e64" name="VPC_PERFCTR_VPC_SEL_0" type="a5xx_vpc_perfcounter_select"/>
-       <reg32 offset="0x0e65" name="VPC_PERFCTR_VPC_SEL_1" type="a5xx_vpc_perfcounter_select"/>
-       <reg32 offset="0x0e66" name="VPC_PERFCTR_VPC_SEL_2" type="a5xx_vpc_perfcounter_select"/>
-       <reg32 offset="0x0e67" name="VPC_PERFCTR_VPC_SEL_3" type="a5xx_vpc_perfcounter_select"/>
-
-       <reg32 offset="0x0e80" name="UCHE_ADDR_MODE_CNTL" type="a5xx_address_mode"/>
-       <reg32 offset="0x0e82" name="UCHE_SVM_CNTL"/>
-       <reg32 offset="0x0e87" name="UCHE_WRITE_THRU_BASE_LO"/>
-       <reg32 offset="0x0e88" name="UCHE_WRITE_THRU_BASE_HI"/>
-       <reg32 offset="0x0e89" name="UCHE_TRAP_BASE_LO"/>
-       <reg32 offset="0x0e8a" name="UCHE_TRAP_BASE_HI"/>
-       <reg32 offset="0x0e8b" name="UCHE_GMEM_RANGE_MIN_LO"/>
-       <reg32 offset="0x0e8c" name="UCHE_GMEM_RANGE_MIN_HI"/>
-       <reg32 offset="0x0e8d" name="UCHE_GMEM_RANGE_MAX_LO"/>
-       <reg32 offset="0x0e8e" name="UCHE_GMEM_RANGE_MAX_HI"/>
-       <reg32 offset="0x0e8f" name="UCHE_DBG_ECO_CNTL_2"/>
-       <reg32 offset="0x0e90" name="UCHE_DBG_ECO_CNTL"/>
-       <reg32 offset="0x0e91" name="UCHE_CACHE_INVALIDATE_MIN_LO"/>
-       <reg32 offset="0x0e92" name="UCHE_CACHE_INVALIDATE_MIN_HI"/>
-       <reg32 offset="0x0e93" name="UCHE_CACHE_INVALIDATE_MAX_LO"/>
-       <reg32 offset="0x0e94" name="UCHE_CACHE_INVALIDATE_MAX_HI"/>
-       <reg32 offset="0x0e95" name="UCHE_CACHE_INVALIDATE"/>
-       <reg32 offset="0x0e96" name="UCHE_CACHE_WAYS"/>
-       <reg32 offset="0x0ea0" name="UCHE_PERFCTR_UCHE_SEL_0" type="a5xx_uche_perfcounter_select"/>
-       <reg32 offset="0x0ea1" name="UCHE_PERFCTR_UCHE_SEL_1" type="a5xx_uche_perfcounter_select"/>
-       <reg32 offset="0x0ea2" name="UCHE_PERFCTR_UCHE_SEL_2" type="a5xx_uche_perfcounter_select"/>
-       <reg32 offset="0x0ea3" name="UCHE_PERFCTR_UCHE_SEL_3" type="a5xx_uche_perfcounter_select"/>
-       <reg32 offset="0x0ea4" name="UCHE_PERFCTR_UCHE_SEL_4" type="a5xx_uche_perfcounter_select"/>
-       <reg32 offset="0x0ea5" name="UCHE_PERFCTR_UCHE_SEL_5" type="a5xx_uche_perfcounter_select"/>
-       <reg32 offset="0x0ea6" name="UCHE_PERFCTR_UCHE_SEL_6" type="a5xx_uche_perfcounter_select"/>
-       <reg32 offset="0x0ea7" name="UCHE_PERFCTR_UCHE_SEL_7" type="a5xx_uche_perfcounter_select"/>
-       <reg32 offset="0x0ea8" name="UCHE_POWERCTR_UCHE_SEL_0"/>
-       <reg32 offset="0x0ea9" name="UCHE_POWERCTR_UCHE_SEL_1"/>
-       <reg32 offset="0x0eaa" name="UCHE_POWERCTR_UCHE_SEL_2"/>
-       <reg32 offset="0x0eab" name="UCHE_POWERCTR_UCHE_SEL_3"/>
-       <reg32 offset="0x0eb1" name="UCHE_TRAP_LOG_LO"/>
-       <reg32 offset="0x0eb2" name="UCHE_TRAP_LOG_HI"/>
-
-       <reg32 offset="0x0ec0" name="SP_DBG_ECO_CNTL"/>
-       <reg32 offset="0x0ec1" name="SP_ADDR_MODE_CNTL" type="a5xx_address_mode"/>
-       <reg32 offset="0x0ec2" name="SP_MODE_CNTL"/> <!-- always 0000001e? -->
-       <reg32 offset="0x0ed0" name="SP_PERFCTR_SP_SEL_0"  type="a5xx_sp_perfcounter_select"/>
-       <reg32 offset="0x0ed1" name="SP_PERFCTR_SP_SEL_1"  type="a5xx_sp_perfcounter_select"/>
-       <reg32 offset="0x0ed2" name="SP_PERFCTR_SP_SEL_2"  type="a5xx_sp_perfcounter_select"/>
-       <reg32 offset="0x0ed3" name="SP_PERFCTR_SP_SEL_3"  type="a5xx_sp_perfcounter_select"/>
-       <reg32 offset="0x0ed4" name="SP_PERFCTR_SP_SEL_4"  type="a5xx_sp_perfcounter_select"/>
-       <reg32 offset="0x0ed5" name="SP_PERFCTR_SP_SEL_5"  type="a5xx_sp_perfcounter_select"/>
-       <reg32 offset="0x0ed6" name="SP_PERFCTR_SP_SEL_6"  type="a5xx_sp_perfcounter_select"/>
-       <reg32 offset="0x0ed7" name="SP_PERFCTR_SP_SEL_7"  type="a5xx_sp_perfcounter_select"/>
-       <reg32 offset="0x0ed8" name="SP_PERFCTR_SP_SEL_8"  type="a5xx_sp_perfcounter_select"/>
-       <reg32 offset="0x0ed9" name="SP_PERFCTR_SP_SEL_9"  type="a5xx_sp_perfcounter_select"/>
-       <reg32 offset="0x0eda" name="SP_PERFCTR_SP_SEL_10" type="a5xx_sp_perfcounter_select"/>
-       <reg32 offset="0x0edb" name="SP_PERFCTR_SP_SEL_11" type="a5xx_sp_perfcounter_select"/>
-       <reg32 offset="0x0edc" name="SP_POWERCTR_SP_SEL_0"/>
-       <reg32 offset="0x0edd" name="SP_POWERCTR_SP_SEL_1"/>
-       <reg32 offset="0x0ede" name="SP_POWERCTR_SP_SEL_2"/>
-       <reg32 offset="0x0edf" name="SP_POWERCTR_SP_SEL_3"/>
-
-       <reg32 offset="0x0f01" name="TPL1_ADDR_MODE_CNTL" type="a5xx_address_mode"/>
-       <reg32 offset="0x0f02" name="TPL1_MODE_CNTL"/> <!-- always 00000544? -->
-       <reg32 offset="0x0f10" name="TPL1_PERFCTR_TP_SEL_0" type="a5xx_tp_perfcounter_select"/>
-       <reg32 offset="0x0f11" name="TPL1_PERFCTR_TP_SEL_1" type="a5xx_tp_perfcounter_select"/>
-       <reg32 offset="0x0f12" name="TPL1_PERFCTR_TP_SEL_2" type="a5xx_tp_perfcounter_select"/>
-       <reg32 offset="0x0f13" name="TPL1_PERFCTR_TP_SEL_3" type="a5xx_tp_perfcounter_select"/>
-       <reg32 offset="0x0f14" name="TPL1_PERFCTR_TP_SEL_4" type="a5xx_tp_perfcounter_select"/>
-       <reg32 offset="0x0f15" name="TPL1_PERFCTR_TP_SEL_5" type="a5xx_tp_perfcounter_select"/>
-       <reg32 offset="0x0f16" name="TPL1_PERFCTR_TP_SEL_6" type="a5xx_tp_perfcounter_select"/>
-       <reg32 offset="0x0f17" name="TPL1_PERFCTR_TP_SEL_7" type="a5xx_tp_perfcounter_select"/>
-       <reg32 offset="0x0f18" name="TPL1_POWERCTR_TP_SEL_0"/>
-       <reg32 offset="0x0f19" name="TPL1_POWERCTR_TP_SEL_1"/>
-       <reg32 offset="0x0f1a" name="TPL1_POWERCTR_TP_SEL_2"/>
-       <reg32 offset="0x0f1b" name="TPL1_POWERCTR_TP_SEL_3"/>
-
-       <reg32 offset="0x3000" name="VBIF_VERSION"/>
-       <reg32 offset="0x3001" name="VBIF_CLKON"/>
-<!--
-#define A5XX_VBIF_CLKON_FORCE_ON_TESTBUS_MASK   0x1
-#define A5XX_VBIF_CLKON_FORCE_ON_TESTBUS_SHIFT  0x1
- -->
-       <reg32 offset="0x3028" name="VBIF_ABIT_SORT"/>
-       <reg32 offset="0x3029" name="VBIF_ABIT_SORT_CONF"/>
-       <reg32 offset="0x3049" name="VBIF_ROUND_ROBIN_QOS_ARB"/>
-       <reg32 offset="0x302a" name="VBIF_GATE_OFF_WRREQ_EN"/>
-       <reg32 offset="0x302c" name="VBIF_IN_RD_LIM_CONF0"/>
-       <reg32 offset="0x302d" name="VBIF_IN_RD_LIM_CONF1"/>
-       <reg32 offset="0x3080" name="VBIF_XIN_HALT_CTRL0"/>
-<!--
-#define A5XX_VBIF_XIN_HALT_CTRL0_MASK     0xF
-#define A510_VBIF_XIN_HALT_CTRL0_MASK     0x7
- -->
-       <reg32 offset="0x3081" name="VBIF_XIN_HALT_CTRL1"/>
-       <reg32 offset="0x3084" name="VBIF_TEST_BUS_OUT_CTRL"/>
-<!--
-#define A5XX_VBIF_TEST_BUS_OUT_CTRL_EN_MASK    0x1
-#define A5XX_VBIF_TEST_BUS_OUT_CTRL_EN_SHIFT   0x0
- -->
-       <reg32 offset="0x3085" name="VBIF_TEST_BUS1_CTRL0"/>
-       <reg32 offset="0x3086" name="VBIF_TEST_BUS1_CTRL1"/>
-<!--
-#define A5XX_VBIF_TEST_BUS1_CTRL1_DATA_SEL_MASK  0xF
-#define A5XX_VBIF_TEST_BUS1_CTRL1_DATA_SEL_SHIFT 0x0
- -->
-       <reg32 offset="0x3087" name="VBIF_TEST_BUS2_CTRL0"/>
-       <reg32 offset="0x3088" name="VBIF_TEST_BUS2_CTRL1"/>
-<!--
-#define A5XX_VBIF_TEST_BUS2_CTRL1_DATA_SEL_MASK     0xF
-#define A5XX_VBIF_TEST_BUS2_CTRL1_DATA_SEL_SHIFT    0x0
- -->
-       <reg32 offset="0x308c" name="VBIF_TEST_BUS_OUT"/>
-       <reg32 offset="0x30c0" name="VBIF_PERF_CNT_EN0"/>
-       <reg32 offset="0x30c1" name="VBIF_PERF_CNT_EN1"/>
-       <reg32 offset="0x30c2" name="VBIF_PERF_CNT_EN2"/>
-       <reg32 offset="0x30c3" name="VBIF_PERF_CNT_EN3"/>
-       <reg32 offset="0x30c8" name="VBIF_PERF_CNT_CLR0"/>
-       <reg32 offset="0x30c9" name="VBIF_PERF_CNT_CLR1"/>
-       <reg32 offset="0x30ca" name="VBIF_PERF_CNT_CLR2"/>
-       <reg32 offset="0x30cb" name="VBIF_PERF_CNT_CLR3"/>
-       <reg32 offset="0x30d0" name="VBIF_PERF_CNT_SEL0" type="a5xx_vbif_perfcounter_select"/>
-       <reg32 offset="0x30d1" name="VBIF_PERF_CNT_SEL1" type="a5xx_vbif_perfcounter_select"/>
-       <reg32 offset="0x30d2" name="VBIF_PERF_CNT_SEL2" type="a5xx_vbif_perfcounter_select"/>
-       <reg32 offset="0x30d3" name="VBIF_PERF_CNT_SEL3" type="a5xx_vbif_perfcounter_select"/>
-       <reg32 offset="0x30d8" name="VBIF_PERF_CNT_LOW0"/>
-       <reg32 offset="0x30d9" name="VBIF_PERF_CNT_LOW1"/>
-       <reg32 offset="0x30da" name="VBIF_PERF_CNT_LOW2"/>
-       <reg32 offset="0x30db" name="VBIF_PERF_CNT_LOW3"/>
-       <reg32 offset="0x30e0" name="VBIF_PERF_CNT_HIGH0"/>
-       <reg32 offset="0x30e1" name="VBIF_PERF_CNT_HIGH1"/>
-       <reg32 offset="0x30e2" name="VBIF_PERF_CNT_HIGH2"/>
-       <reg32 offset="0x30e3" name="VBIF_PERF_CNT_HIGH3"/>
-       <reg32 offset="0x3100" name="VBIF_PERF_PWR_CNT_EN0"/>
-       <reg32 offset="0x3101" name="VBIF_PERF_PWR_CNT_EN1"/>
-       <reg32 offset="0x3102" name="VBIF_PERF_PWR_CNT_EN2"/>
-       <reg32 offset="0x3110" name="VBIF_PERF_PWR_CNT_LOW0"/>
-       <reg32 offset="0x3111" name="VBIF_PERF_PWR_CNT_LOW1"/>
-       <reg32 offset="0x3112" name="VBIF_PERF_PWR_CNT_LOW2"/>
-       <reg32 offset="0x3118" name="VBIF_PERF_PWR_CNT_HIGH0"/>
-       <reg32 offset="0x3119" name="VBIF_PERF_PWR_CNT_HIGH1"/>
-       <reg32 offset="0x311a" name="VBIF_PERF_PWR_CNT_HIGH2"/>
-
-       <reg32 offset="0x8800" name="GPMU_INST_RAM_BASE"/>
-       <reg32 offset="0x9800" name="GPMU_DATA_RAM_BASE"/>
-       <reg32 offset="0xa881" name="GPMU_SP_POWER_CNTL"/>
-       <reg32 offset="0xa886" name="GPMU_RBCCU_CLOCK_CNTL"/>
-       <reg32 offset="0xa887" name="GPMU_RBCCU_POWER_CNTL"/>
-       <reg32 offset="0xa88b" name="GPMU_SP_PWR_CLK_STATUS">
-               <bitfield name="PWR_ON" pos="20" type="boolean"/>
-       </reg32>
-       <reg32 offset="0xa88d" name="GPMU_RBCCU_PWR_CLK_STATUS">
-               <bitfield name="PWR_ON" pos="20" type="boolean"/>
-       </reg32>
-       <reg32 offset="0xa891" name="GPMU_PWR_COL_STAGGER_DELAY"/>
-       <reg32 offset="0xa892" name="GPMU_PWR_COL_INTER_FRAME_CTRL"/>
-       <reg32 offset="0xa893" name="GPMU_PWR_COL_INTER_FRAME_HYST"/>
-       <reg32 offset="0xa894" name="GPMU_PWR_COL_BINNING_CTRL"/>
-       <reg32 offset="0xa8c1" name="GPMU_WFI_CONFIG"/>
-       <reg32 offset="0xa8d6" name="GPMU_RBBM_INTR_INFO"/>
-       <reg32 offset="0xa8d8" name="GPMU_CM3_SYSRESET"/>
-       <reg32 offset="0xa8e0" name="GPMU_GENERAL_0"/>
-       <reg32 offset="0xa8e1" name="GPMU_GENERAL_1"/>
-
-<!--
-/* COUNTABLE FOR SP PERFCOUNTER */
-#define A5XX_SP_ALU_ACTIVE_CYCLES          0x1
-#define A5XX_SP0_ICL1_MISSES               0x35
-#define A5XX_SP_FS_CFLOW_INSTRUCTIONS      0x27
-
-/* COUNTABLE FOR TSE PERFCOUNTER */
-#define A5XX_TSE_INPUT_PRIM_NUM            0x6
- -->
-       <reg32 offset="0xa840" name="SP_POWER_COUNTER_0_LO"/>
-       <reg32 offset="0xa841" name="SP_POWER_COUNTER_0_HI"/>
-       <reg32 offset="0xa842" name="SP_POWER_COUNTER_1_LO"/>
-       <reg32 offset="0xa843" name="SP_POWER_COUNTER_1_HI"/>
-       <reg32 offset="0xa844" name="SP_POWER_COUNTER_2_LO"/>
-       <reg32 offset="0xa845" name="SP_POWER_COUNTER_2_HI"/>
-       <reg32 offset="0xa846" name="SP_POWER_COUNTER_3_LO"/>
-       <reg32 offset="0xa847" name="SP_POWER_COUNTER_3_HI"/>
-       <reg32 offset="0xa848" name="TP_POWER_COUNTER_0_LO"/>
-       <reg32 offset="0xa849" name="TP_POWER_COUNTER_0_HI"/>
-       <reg32 offset="0xa84a" name="TP_POWER_COUNTER_1_LO"/>
-       <reg32 offset="0xa84b" name="TP_POWER_COUNTER_1_HI"/>
-       <reg32 offset="0xa84c" name="TP_POWER_COUNTER_2_LO"/>
-       <reg32 offset="0xa84d" name="TP_POWER_COUNTER_2_HI"/>
-       <reg32 offset="0xa84e" name="TP_POWER_COUNTER_3_LO"/>
-       <reg32 offset="0xa84f" name="TP_POWER_COUNTER_3_HI"/>
-       <reg32 offset="0xa850" name="RB_POWER_COUNTER_0_LO"/>
-       <reg32 offset="0xa851" name="RB_POWER_COUNTER_0_HI"/>
-       <reg32 offset="0xa852" name="RB_POWER_COUNTER_1_LO"/>
-       <reg32 offset="0xa853" name="RB_POWER_COUNTER_1_HI"/>
-       <reg32 offset="0xa854" name="RB_POWER_COUNTER_2_LO"/>
-       <reg32 offset="0xa855" name="RB_POWER_COUNTER_2_HI"/>
-       <reg32 offset="0xa856" name="RB_POWER_COUNTER_3_LO"/>
-       <reg32 offset="0xa857" name="RB_POWER_COUNTER_3_HI"/>
-       <reg32 offset="0xa858" name="CCU_POWER_COUNTER_0_LO"/>
-       <reg32 offset="0xa859" name="CCU_POWER_COUNTER_0_HI"/>
-       <reg32 offset="0xa85a" name="CCU_POWER_COUNTER_1_LO"/>
-       <reg32 offset="0xa85b" name="CCU_POWER_COUNTER_1_HI"/>
-       <reg32 offset="0xa85c" name="UCHE_POWER_COUNTER_0_LO"/>
-       <reg32 offset="0xa85d" name="UCHE_POWER_COUNTER_0_HI"/>
-       <reg32 offset="0xa85e" name="UCHE_POWER_COUNTER_1_LO"/>
-       <reg32 offset="0xa85f" name="UCHE_POWER_COUNTER_1_HI"/>
-       <reg32 offset="0xa860" name="UCHE_POWER_COUNTER_2_LO"/>
-       <reg32 offset="0xa861" name="UCHE_POWER_COUNTER_2_HI"/>
-       <reg32 offset="0xa862" name="UCHE_POWER_COUNTER_3_LO"/>
-       <reg32 offset="0xa863" name="UCHE_POWER_COUNTER_3_HI"/>
-       <reg32 offset="0xa864" name="CP_POWER_COUNTER_0_LO"/>
-       <reg32 offset="0xa865" name="CP_POWER_COUNTER_0_HI"/>
-       <reg32 offset="0xa866" name="CP_POWER_COUNTER_1_LO"/>
-       <reg32 offset="0xa867" name="CP_POWER_COUNTER_1_HI"/>
-       <reg32 offset="0xa868" name="CP_POWER_COUNTER_2_LO"/>
-       <reg32 offset="0xa869" name="CP_POWER_COUNTER_2_HI"/>
-       <reg32 offset="0xa86a" name="CP_POWER_COUNTER_3_LO"/>
-       <reg32 offset="0xa86b" name="CP_POWER_COUNTER_3_HI"/>
-       <reg32 offset="0xa86c" name="GPMU_POWER_COUNTER_0_LO"/>
-       <reg32 offset="0xa86d" name="GPMU_POWER_COUNTER_0_HI"/>
-       <reg32 offset="0xa86e" name="GPMU_POWER_COUNTER_1_LO"/>
-       <reg32 offset="0xa86f" name="GPMU_POWER_COUNTER_1_HI"/>
-       <reg32 offset="0xa870" name="GPMU_POWER_COUNTER_2_LO"/>
-       <reg32 offset="0xa871" name="GPMU_POWER_COUNTER_2_HI"/>
-       <reg32 offset="0xa872" name="GPMU_POWER_COUNTER_3_LO"/>
-       <reg32 offset="0xa873" name="GPMU_POWER_COUNTER_3_HI"/>
-       <reg32 offset="0xa874" name="GPMU_POWER_COUNTER_4_LO"/>
-       <reg32 offset="0xa875" name="GPMU_POWER_COUNTER_4_HI"/>
-       <reg32 offset="0xa876" name="GPMU_POWER_COUNTER_5_LO"/>
-       <reg32 offset="0xa877" name="GPMU_POWER_COUNTER_5_HI"/>
-       <reg32 offset="0xa878" name="GPMU_POWER_COUNTER_ENABLE"/>
-       <reg32 offset="0xa879" name="GPMU_ALWAYS_ON_COUNTER_LO"/>
-       <reg32 offset="0xa87a" name="GPMU_ALWAYS_ON_COUNTER_HI"/>
-       <reg32 offset="0xa87b" name="GPMU_ALWAYS_ON_COUNTER_RESET"/>
-       <reg32 offset="0xa87c" name="GPMU_POWER_COUNTER_SELECT_0"/>
-       <reg32 offset="0xa87d" name="GPMU_POWER_COUNTER_SELECT_1"/>
-       <reg32 offset="0xa8a3" name="GPMU_CLOCK_THROTTLE_CTRL"/>
-       <reg32 offset="0xa8a8" name="GPMU_THROTTLE_UNMASK_FORCE_CTRL"/>
-       <reg32 offset="0xac00" name="GPMU_TEMP_SENSOR_ID"/>
-       <reg32 offset="0xac01" name="GPMU_TEMP_SENSOR_CONFIG"/>
-       <reg32 offset="0xac02" name="GPMU_TEMP_VAL"/>
-       <reg32 offset="0xac03" name="GPMU_DELTA_TEMP_THRESHOLD"/>
-       <reg32 offset="0xac05" name="GPMU_TEMP_THRESHOLD_INTR_STATUS"/>
-       <reg32 offset="0xac06" name="GPMU_TEMP_THRESHOLD_INTR_EN_MASK"/>
-       <reg32 offset="0xac40" name="GPMU_LEAKAGE_TEMP_COEFF_0_1"/>
-       <reg32 offset="0xac41" name="GPMU_LEAKAGE_TEMP_COEFF_2_3"/>
-       <reg32 offset="0xac42" name="GPMU_LEAKAGE_VTG_COEFF_0_1"/>
-       <reg32 offset="0xac43" name="GPMU_LEAKAGE_VTG_COEFF_2_3"/>
-       <reg32 offset="0xac46" name="GPMU_BASE_LEAKAGE"/>
-       <reg32 offset="0xac60" name="GPMU_GPMU_VOLTAGE"/>
-       <reg32 offset="0xac61" name="GPMU_GPMU_VOLTAGE_INTR_STATUS"/>
-       <reg32 offset="0xac62" name="GPMU_GPMU_VOLTAGE_INTR_EN_MASK"/>
-       <reg32 offset="0xac80" name="GPMU_GPMU_PWR_THRESHOLD"/>
-       <reg32 offset="0xacc4" name="GPMU_GPMU_LLM_GLM_SLEEP_CTRL"/>
-       <reg32 offset="0xacc5" name="GPMU_GPMU_LLM_GLM_SLEEP_STATUS"/>
-       <reg32 offset="0xb80c" name="GDPM_CONFIG1"/>
-       <reg32 offset="0xb80d" name="GDPM_CONFIG2"/>
-       <reg32 offset="0xb80f" name="GDPM_INT_EN"/>
-       <reg32 offset="0xb811" name="GDPM_INT_MASK"/>
-       <reg32 offset="0xb9a0" name="GPMU_BEC_ENABLE"/>
-       <reg32 offset="0xc41a" name="GPU_CS_SENSOR_GENERAL_STATUS"/>
-       <reg32 offset="0xc41d" name="GPU_CS_AMP_CALIBRATION_STATUS1_0"/>
-       <reg32 offset="0xc41f" name="GPU_CS_AMP_CALIBRATION_STATUS1_2"/>
-       <reg32 offset="0xc421" name="GPU_CS_AMP_CALIBRATION_STATUS1_4"/>
-       <reg32 offset="0xc520" name="GPU_CS_ENABLE_REG"/>
-       <reg32 offset="0xc557" name="GPU_CS_AMP_CALIBRATION_CONTROL1"/>
-
-
-       <reg32 offset="0xe000" name="GRAS_CL_CNTL">
-               <bitfield name="ZERO_GB_SCALE_Z" pos="6" type="boolean"/>
-       </reg32>
-       <reg32 offset="0xe001" name="UNKNOWN_E001"/> <!-- always 00000000? -->
-       <reg32 offset="0xe004" name="UNKNOWN_E004"/> <!-- always 00000000? -->
-       <reg32 offset="0xe005" name="GRAS_CNTL">
-               <!-- see also RB_RENDER_CONTROL0 -->
-               <bitfield name="IJ_PERSP_PIXEL" pos="0" type="boolean"/>
-               <bitfield name="IJ_PERSP_CENTROID" pos="1" type="boolean"/>
-               <bitfield name="IJ_PERSP_SAMPLE" pos="2" type="boolean"/>
-               <!--
-               bit 3 set when blob turns on WCOORD.. which also corresponds to
-               register being set in in HLSQ_CONTROL_3_REG bits 8..15 (which
-               shader does not use).. possibly providing wcoord in an alternate
-               way??
-               Also, when that happens, VARYING bits are turned on as well.
-                -->
-               <bitfield name="SIZE" pos="3" type="boolean"/>
-               <bitfield name="COORD_MASK" low="6" high="9" type="hex"/>
-       </reg32>
-       <reg32 offset="0xe006" name="GRAS_CL_GUARDBAND_CLIP_ADJ">
-               <bitfield name="HORZ" low="0" high="9" type="uint"/>
-               <bitfield name="VERT" low="10" high="19" type="uint"/>
-       </reg32>
-       <reg32 offset="0xe010" name="GRAS_CL_VPORT_XOFFSET_0" type="float"/>
-       <reg32 offset="0xe011" name="GRAS_CL_VPORT_XSCALE_0" type="float"/>
-       <reg32 offset="0xe012" name="GRAS_CL_VPORT_YOFFSET_0" type="float"/>
-       <reg32 offset="0xe013" name="GRAS_CL_VPORT_YSCALE_0" type="float"/>
-       <reg32 offset="0xe014" name="GRAS_CL_VPORT_ZOFFSET_0" type="float"/>
-       <reg32 offset="0xe015" name="GRAS_CL_VPORT_ZSCALE_0" type="float"/>
-       <reg32 offset="0xe090" name="GRAS_SU_CNTL">
-               <bitfield name="CULL_FRONT" pos="0" type="boolean"/>
-               <bitfield name="CULL_BACK" pos="1" type="boolean"/>
-               <bitfield name="FRONT_CW" pos="2" type="boolean"/>
-               <bitfield name="LINEHALFWIDTH" low="3" high="10" radix="2" type="fixed"/>
-               <bitfield name="POLY_OFFSET" pos="11" type="boolean"/>
-               <bitfield name="MSAA_ENABLE" pos="13" type="boolean"/>
-               <!-- probably LINEHALFWIDTH is the same as a4xx.. -->
-       </reg32>
-       <reg32 offset="0xe091" name="GRAS_SU_POINT_MINMAX">
-               <bitfield name="MIN" low="0" high="15" type="ufixed" radix="4"/>
-               <bitfield name="MAX" low="16" high="31" type="ufixed" radix="4"/>
-       </reg32>
-       <reg32 offset="0xe092" name="GRAS_SU_POINT_SIZE" type="fixed" radix="4"/>
-       <reg32 offset="0xe093" name="GRAS_SU_LAYERED"/>
-       <reg32 offset="0xe094" name="GRAS_SU_DEPTH_PLANE_CNTL">
-               <bitfield name="FRAG_WRITES_Z" pos="0" type="boolean"/>
-               <bitfield name="UNK1" pos="1" type="boolean"/>
-       </reg32>
-       <reg32 offset="0xe095" name="GRAS_SU_POLY_OFFSET_SCALE" type="float"/>
-       <reg32 offset="0xe096" name="GRAS_SU_POLY_OFFSET_OFFSET" type="float"/>
-       <reg32 offset="0xe097" name="GRAS_SU_POLY_OFFSET_OFFSET_CLAMP" type="float"/>
-       <!-- duplicates RB_DEPTH_INFO0: -->
-       <reg32 offset="0xe098" name="GRAS_SU_DEPTH_BUFFER_INFO">
-               <bitfield name="DEPTH_FORMAT" low="0" high="2" type="a5xx_depth_format"/>
-       </reg32>
-       <reg32 offset="0xe099" name="GRAS_SU_CONSERVATIVE_RAS_CNTL"/> <!-- always 00000000? -->
-       <!--
-       guessing about window/screen/extent, I think they can in the end be
-       used interchangeably?
-        -->
-       <reg32 offset="0xe0a0" name="GRAS_SC_CNTL">
-               <bitfield name="BINNING_PASS" pos="0" type="boolean"/>
-               <bitfield name="SAMPLES_PASSED" pos="15" type="boolean"/>
-       </reg32>
-       <!-- note, 0x4 for binning pass when frag writes z?? -->
-       <reg32 offset="0xe0a1" name="GRAS_SC_BIN_CNTL"/> <!-- always 00000000? -->
-       <reg32 offset="0xe0a2" name="GRAS_SC_RAS_MSAA_CNTL">
-               <bitfield name="SAMPLES" low="0" high="1" type="a3xx_msaa_samples"/>
-       </reg32>
-       <reg32 offset="0xe0a3" name="GRAS_SC_DEST_MSAA_CNTL">
-               <bitfield name="SAMPLES" low="0" high="1" type="a3xx_msaa_samples"/>
-               <bitfield name="MSAA_DISABLE" pos="2" type="boolean"/>
-       </reg32>
-       <reg32 offset="0xe0a4" name="GRAS_SC_SCREEN_SCISSOR_CNTL"/> <!-- always 00000000? -->
-       <reg32 offset="0xe0aa" name="GRAS_SC_SCREEN_SCISSOR_TL_0" type="adreno_reg_xy"/>
-       <reg32 offset="0xe0ab" name="GRAS_SC_SCREEN_SCISSOR_BR_0" type="adreno_reg_xy"/>
-       <reg32 offset="0xe0ca" name="GRAS_SC_VIEWPORT_SCISSOR_TL_0" type="adreno_reg_xy"/>
-       <reg32 offset="0xe0cb" name="GRAS_SC_VIEWPORT_SCISSOR_BR_0" type="adreno_reg_xy"/>
-       <reg32 offset="0xe0ea" name="GRAS_SC_WINDOW_SCISSOR_TL" type="adreno_reg_xy"/>
-       <reg32 offset="0xe0eb" name="GRAS_SC_WINDOW_SCISSOR_BR" type="adreno_reg_xy"/>
-
-       <doc>
-               LRZ:  (Low Resolution Z ??)
-               ----
-
-               I think it serves two functions, early discard of primitives in binning
-               pass without needing full resolution depth buffer, and also functions as
-               a depth-prepass, used during the GMEM draws to discard primitives that
-               would not be visible due to later draws.
-
-               The LRZ buffer always seems to be z16 format, regardless of actual
-               depth buffer format.
-
-               Note that LRZ write should be disabled when blend/stencil/etc is enabled,
-               since the occluded primitive can still contribute to final color value
-               of a fragment.
-
-               Only enabled for GL_LESS/GL_LEQUAL/GL_GREATER/GL_GEQUAL?
-       </doc>
-       <reg32 offset="0xe100" name="GRAS_LRZ_CNTL">
-               <bitfield name="ENABLE" pos="0" type="boolean"/>
-               <doc>LRZ write also disabled for blend/etc.</doc>
-               <bitfield name="LRZ_WRITE" pos="1" type="boolean"/>
-               <doc>update MAX instead of MIN value, ie. GL_GREATER/GL_GEQUAL</doc>
-               <bitfield name="GREATER" pos="2" type="boolean"/>
-               <!--
-               b3 set sometimes, when depth buffer isn't cleared.. maybe it
-               invalidates the LRZ buffer?  (Or just the covered positions?
-                -->
-       </reg32>
-       <reg32 offset="0xe101" name="GRAS_LRZ_BUFFER_BASE_LO"/>
-       <reg32 offset="0xe102" name="GRAS_LRZ_BUFFER_BASE_HI"/>
-       <!--
-       lzr pitch is depth pitch (in pixels) / 8 (aligned to 32)..
-        -->
-       <doc>
-               Pitch is depth width (in pixels) / 8 (aligned to 32).  Height
-               is also divided by 8 (ie. covers 8x8 pixels)
-       </doc>
-       <reg32 offset="0xe103" name="GRAS_LRZ_BUFFER_PITCH" shr="5" type="uint"/>
-       <reg32 offset="0xe104" name="GRAS_LRZ_FAST_CLEAR_BUFFER_BASE_LO"/>
-       <reg32 offset="0xe105" name="GRAS_LRZ_FAST_CLEAR_BUFFER_BASE_HI"/>
-
-       <reg32 offset="0xe140" name="RB_CNTL">
-               <bitfield name="WIDTH" low="0" high="7" shr="5" type="uint"/>
-               <bitfield name="HEIGHT" low="9" high="16" shr="5" type="uint"/>
-               <bitfield name="BYPASS" pos="17" type="boolean"/>
-       </reg32>
-       <reg32 offset="0xe141" name="RB_RENDER_CNTL">
-<!--
-bit 3 set for normal draws
-bit 7 for RECTLIST (clear) when z32s8 (used for clear of depth32?  not set
-       for z32 with no stencil, but maybe in that case separate z/s not used?
-       see mrt-fbo-* zs=2)
- -->
-               <bitfield name="BINNING_PASS" pos="0" type="boolean"/>
-               <bitfield name="SAMPLES_PASSED" pos="6" type="boolean"/>
-               <bitfield name="DISABLE_COLOR_PIPE" pos="7" type="boolean"/>
-               <!-- why everything twice?? maybe read vs write? -->
-               <!-- UBWC flag buffer enabled for depth/stencil: -->
-               <bitfield name="FLAG_DEPTH" pos="14" type="boolean"/>
-               <bitfield name="FLAG_DEPTH2" pos="15" type="boolean"/>
-               <!-- bitmask of MRTs using UBWC flag buffer: -->
-               <bitfield name="FLAG_MRTS" low="16" high="23"/>
-               <bitfield name="FLAG_MRTS2" low="24" high="31"/>
-       </reg32>
-       <reg32 offset="0xe142" name="RB_RAS_MSAA_CNTL">
-               <bitfield name="SAMPLES" low="0" high="1" type="a3xx_msaa_samples"/>
-       </reg32>
-       <reg32 offset="0xe143" name="RB_DEST_MSAA_CNTL">
-               <bitfield name="SAMPLES" low="0" high="1" type="a3xx_msaa_samples"/>
-               <bitfield name="MSAA_DISABLE" pos="2" type="boolean"/>
-       </reg32>
-       <!--
-       note: maybe not actually called RB_RENDER_CONTROLn (since RB_RENDER_CNTL
-       name comes from kernel and is probably right)
-        -->
-       <reg32 offset="0xe144" name="RB_RENDER_CONTROL0">
-               <!-- see also GRAS_CNTL -->
-               <bitfield name="IJ_PERSP_PIXEL" pos="0" type="boolean"/>
-               <bitfield name="IJ_PERSP_CENTROID" pos="1" type="boolean"/>
-               <bitfield name="IJ_PERSP_SAMPLE" pos="2" type="boolean"/>
-               <!--
-               bit 3 set when blob turns on WCOORD.. which also corresponds to
-               register being set in in HLSQ_CONTROL_3_REG bits 8..15 (which
-               shader does not use).. possibly providing wcoord in an alternate
-               way??
-               Also, when that happens, VARYING bits are turned on as well.
-                -->
-               <bitfield name="SIZE" pos="3" type="boolean"/>
-               <bitfield name="COORD_MASK" low="6" high="9" type="hex"/>
-       </reg32>
-       <reg32 offset="0xe145" name="RB_RENDER_CONTROL1">
-               <bitfield name="SAMPLEMASK" pos="0" type="boolean"/>
-               <bitfield name="FACENESS" pos="1" type="boolean"/>
-               <bitfield name="SAMPLEID" pos="2" type="boolean"/>
-       </reg32>
-       <reg32 offset="0xe146" name="RB_FS_OUTPUT_CNTL">
-               <!-- bit0 set except for binning pass.. -->
-               <bitfield name="MRT" low="0" high="3" type="uint"/>
-               <bitfield name="FRAG_WRITES_Z" pos="5" type="boolean"/>
-       </reg32>
-       <reg32 offset="0xe147" name="RB_RENDER_COMPONENTS">
-               <bitfield name="RT0" low="0" high="3"/>
-               <bitfield name="RT1" low="4" high="7"/>
-               <bitfield name="RT2" low="8" high="11"/>
-               <bitfield name="RT3" low="12" high="15"/>
-               <bitfield name="RT4" low="16" high="19"/>
-               <bitfield name="RT5" low="20" high="23"/>
-               <bitfield name="RT6" low="24" high="27"/>
-               <bitfield name="RT7" low="28" high="31"/>
-       </reg32>
-       <array offset="0xe150" name="RB_MRT" stride="7" length="8">
-               <reg32 offset="0x0" name="CONTROL">
-                       <bitfield name="BLEND" pos="0" type="boolean"/>
-                       <bitfield name="BLEND2" pos="1" type="boolean"/>
-                       <bitfield name="ROP_ENABLE" pos="2" type="boolean"/>
-                       <bitfield name="ROP_CODE" low="3" high="6" type="a3xx_rop_code"/>
-                       <bitfield name="COMPONENT_ENABLE" low="7" high="10" type="hex"/>
-               </reg32>
-               <reg32 offset="0x1" name="BLEND_CONTROL">
-                       <bitfield name="RGB_SRC_FACTOR" low="0" high="4" type="adreno_rb_blend_factor"/>
-                       <bitfield name="RGB_BLEND_OPCODE" low="5" high="7" type="a3xx_rb_blend_opcode"/>
-                       <bitfield name="RGB_DEST_FACTOR" low="8" high="12" type="adreno_rb_blend_factor"/>
-                       <bitfield name="ALPHA_SRC_FACTOR" low="16" high="20" type="adreno_rb_blend_factor"/>
-                       <bitfield name="ALPHA_BLEND_OPCODE" low="21" high="23" type="a3xx_rb_blend_opcode"/>
-                       <bitfield name="ALPHA_DEST_FACTOR" low="24" high="28" type="adreno_rb_blend_factor"/>
-               </reg32>
-               <reg32 offset="0x2" name="BUF_INFO">
-                       <!--
-                       not sure if there is a separate COLOR_SWAP field like on a3xx/a4xx,
-                       or if it is inherent in the format.  Will have to play with bits
-                       once we get things working and see what happens.  If it is a diff
-                       field, it doesn't seem to have the same encoding as a3xx/a4xx.
-                        -->
-                       <bitfield name="COLOR_FORMAT" low="0" high="7" type="a5xx_color_fmt"/>
-                       <bitfield name="COLOR_TILE_MODE" low="8" high="9" type="a5xx_tile_mode"/>
-                       <bitfield name="DITHER_MODE" low="11" high="12" type="adreno_rb_dither_mode"/>
-                       <bitfield name="COLOR_SWAP" low="13" high="14" type="a3xx_color_swap"/>
-                       <bitfield name="COLOR_SRGB" pos="15" type="boolean"/>
-               </reg32>
-               <!--
-               at least in gmem, things seem to be aligned to pitch of 64..
-               maybe an artifact of tiled format used in gmem?
-                -->
-               <reg32 offset="0x3" name="PITCH" shr="6" type="uint"/>
-               <reg32 offset="0x4" name="ARRAY_PITCH" shr="6" type="uint"/>
-               <reg32 offset="0x5" name="BASE_LO"/>
-               <reg32 offset="0x6" name="BASE_HI"/>
-       </array>
-       <reg32 offset="0xe1a0" name="RB_BLEND_RED">
-               <bitfield name="UINT" low="0" high="7" type="hex"/>
-               <bitfield name="SINT" low="8" high="15" type="hex"/>
-               <bitfield name="FLOAT" low="16" high="31" type="float"/>
-       </reg32>
-       <reg32 offset="0xe1a1" name="RB_BLEND_RED_F32" type="float"/>
-       <reg32 offset="0xe1a2" name="RB_BLEND_GREEN">
-               <bitfield name="UINT" low="0" high="7" type="hex"/>
-               <bitfield name="SINT" low="8" high="15" type="hex"/>
-               <bitfield name="FLOAT" low="16" high="31" type="float"/>
-       </reg32>
-       <reg32 offset="0xe1a3" name="RB_BLEND_GREEN_F32" type="float"/>
-       <reg32 offset="0xe1a4" name="RB_BLEND_BLUE">
-               <bitfield name="UINT" low="0" high="7" type="hex"/>
-               <bitfield name="SINT" low="8" high="15" type="hex"/>
-               <bitfield name="FLOAT" low="16" high="31" type="float"/>
-       </reg32>
-       <reg32 offset="0xe1a5" name="RB_BLEND_BLUE_F32" type="float"/>
-       <reg32 offset="0xe1a6" name="RB_BLEND_ALPHA">
-               <bitfield name="UINT" low="0" high="7" type="hex"/>
-               <bitfield name="SINT" low="8" high="15" type="hex"/>
-               <bitfield name="FLOAT" low="16" high="31" type="float"/>
-       </reg32>
-       <reg32 offset="0xe1a7" name="RB_BLEND_ALPHA_F32" type="float"/>
-       <reg32 offset="0xe1a8" name="RB_ALPHA_CONTROL">
-               <bitfield name="ALPHA_REF" low="0" high="7" type="hex"/>
-               <bitfield name="ALPHA_TEST" pos="8" type="boolean"/>
-               <bitfield name="ALPHA_TEST_FUNC" low="9" high="11" type="adreno_compare_func"/>
-       </reg32>
-       <reg32 offset="0xe1a9" name="RB_BLEND_CNTL">
-               <!-- per-mrt enable bit -->
-               <bitfield name="ENABLE_BLEND" low="0" high="7"/>
-               <bitfield name="INDEPENDENT_BLEND" pos="8" type="boolean"/>
-               <bitfield name="ALPHA_TO_COVERAGE" pos="10" type="boolean"/>
-               <!-- a guess? -->
-               <bitfield name="SAMPLE_MASK" low="16" high="31"/>
-       </reg32>
-       <reg32 offset="0xe1b0" name="RB_DEPTH_PLANE_CNTL">
-               <bitfield name="FRAG_WRITES_Z" pos="0" type="boolean"/>
-               <bitfield name="UNK1" pos="1" type="boolean"/>
-       </reg32>
-       <reg32 offset="0xe1b1" name="RB_DEPTH_CNTL">
-               <bitfield name="Z_ENABLE" pos="0" type="boolean"/>
-               <bitfield name="Z_WRITE_ENABLE" pos="1" type="boolean"/>
-               <bitfield name="ZFUNC" low="2" high="4" type="adreno_compare_func"/>
-               <doc>Z_TEST_ENABLE bit is set for zfunc other than GL_ALWAYS or GL_NEVER</doc>
-               <bitfield name="Z_TEST_ENABLE" pos="6" type="boolean"/>
-       </reg32>
-       <reg32 offset="0xe1b2" name="RB_DEPTH_BUFFER_INFO">
-               <bitfield name="DEPTH_FORMAT" low="0" high="2" type="a5xx_depth_format"/>
-       </reg32>
-       <reg32 offset="0xe1b3" name="RB_DEPTH_BUFFER_BASE_LO"/>
-       <reg32 offset="0xe1b4" name="RB_DEPTH_BUFFER_BASE_HI"/>
-       <reg32 offset="0xe1b5" name="RB_DEPTH_BUFFER_PITCH" shr="6" type="uint">
-               <doc>stride of depth/stencil buffer</doc>
-       </reg32>
-       <reg32 offset="0xe1b6" name="RB_DEPTH_BUFFER_ARRAY_PITCH" shr="6" type="uint">
-               <doc>size of layer</doc>
-       </reg32>
-       <reg32 offset="0xe1c0" name="RB_STENCIL_CONTROL">
-               <bitfield name="STENCIL_ENABLE" pos="0" type="boolean"/>
-               <bitfield name="STENCIL_ENABLE_BF" pos="1" type="boolean"/>
-               <!--
-                       set for stencil operations that require read from stencil
-                       buffer, but not for example for stencil clear (which does
-                       not require read).. so guessing this is analogous to
-                       READ_DEST_ENABLE for color buffer..
-                -->
-               <bitfield name="STENCIL_READ" pos="2" type="boolean"/>
-               <bitfield name="FUNC" low="8" high="10" type="adreno_compare_func"/>
-               <bitfield name="FAIL" low="11" high="13" type="adreno_stencil_op"/>
-               <bitfield name="ZPASS" low="14" high="16" type="adreno_stencil_op"/>
-               <bitfield name="ZFAIL" low="17" high="19" type="adreno_stencil_op"/>
-               <bitfield name="FUNC_BF" low="20" high="22" type="adreno_compare_func"/>
-               <bitfield name="FAIL_BF" low="23" high="25" type="adreno_stencil_op"/>
-               <bitfield name="ZPASS_BF" low="26" high="28" type="adreno_stencil_op"/>
-               <bitfield name="ZFAIL_BF" low="29" high="31" type="adreno_stencil_op"/>
-       </reg32>
-       <reg32 offset="0xe1c1" name="RB_STENCIL_INFO">
-               <bitfield name="SEPARATE_STENCIL" pos="0" type="boolean"/>
-       </reg32>
-       <reg32 offset="0xe1c2" name="RB_STENCIL_BASE_LO"/>
-       <reg32 offset="0xe1c3" name="RB_STENCIL_BASE_HI"/>
-       <reg32 offset="0xe1c4" name="RB_STENCIL_PITCH" shr="6" type="uint"/>
-       <reg32 offset="0xe1c5" name="RB_STENCIL_ARRAY_PITCH" shr="6" type="uint"/>
-       <reg32 offset="0xe1c6" name="RB_STENCILREFMASK" type="adreno_rb_stencilrefmask"/>
-       <reg32 offset="0xe1c7" name="RB_STENCILREFMASK_BF" type="adreno_rb_stencilrefmask"/>
-       <reg32 offset="0xe1d0" name="RB_WINDOW_OFFSET" type="adreno_reg_xy"/>
-       <reg32 offset="0xe1d1" name="RB_SAMPLE_COUNT_CONTROL">
-               <bitfield name="COPY" pos="1" type="boolean"/>
-       </reg32>
-
-       <doc>
-               Blits:
-               ------
-
-               Blits are triggered by CP_EVENT_WRITE:BLIT, compared to previous
-               generations where they shared most of the gl pipeline and were
-               triggered by CP_DRAW_INDX*
-
-               For gmem->mem blob uses RB_BLIT_CNTL.BUF to specify src of
-               blit (ie MRTn, ZS, etc) and RB_BLIT_DST_LO/HI for destination
-               gpuaddr.  The gmem offset is taken from RB_MRT[n].BASE_LO/HI
-
-               For mem->gmem blob uses just MRT0 or ZS and RB_BLIT_DST_LO/HI
-               for the GMEM offset, and gpuaddr from RB_MRT[0].BASE_LO/HI
-               (I suppose this is just to avoid trashing RB_MRT[1..7]??)
-       </doc>
-       <reg32 offset="0xe210" name="RB_BLIT_CNTL">
-               <bitfield name="BUF" low="0" high="3" type="a5xx_blit_buf"/>
-       </reg32>
-       <reg32 offset="0xe211" name="RB_RESOLVE_CNTL_1" type="adreno_reg_xy"/>
-       <reg32 offset="0xe212" name="RB_RESOLVE_CNTL_2" type="adreno_reg_xy"/>
-       <reg32 offset="0xe213" name="RB_RESOLVE_CNTL_3">
-               <!-- if b0 set, output is in TILE5_3 format -->
-               <bitfield name="TILED" pos="0" type="boolean"/>
-       <!--
-               0xe213:
-                       0x0 mem->gmem
-                       0xf gmem->mem with flag buffer (color)
-                       0x4 gmem->mem without flag buffer (color)
-                       0x7 BYPASS mode flag buffer result (ie. on readpix)
-                           also for gmem->mem preserving tiling
-       -->
-       </reg32>
-       <reg32 offset="0xe214" name="RB_BLIT_DST_LO"/>
-       <reg32 offset="0xe215" name="RB_BLIT_DST_HI"/>
-       <reg32 offset="0xe216" name="RB_BLIT_DST_PITCH" shr="6" type="uint"/>
-       <!-- array-pitch is size of layer -->
-       <reg32 offset="0xe217" name="RB_BLIT_DST_ARRAY_PITCH" shr="6" type="uint"/>
-       <reg32 offset="0xe218" name="RB_CLEAR_COLOR_DW0"/>
-       <reg32 offset="0xe219" name="RB_CLEAR_COLOR_DW1"/>
-       <reg32 offset="0xe21a" name="RB_CLEAR_COLOR_DW2"/>
-       <reg32 offset="0xe21b" name="RB_CLEAR_COLOR_DW3"/>
-       <reg32 offset="0xe21c" name="RB_CLEAR_CNTL">
-               <bitfield name="FAST_CLEAR" pos="1" type="boolean"/>
-               <bitfield name="MSAA_RESOLVE" pos="2" type="boolean"/>
-               <doc>
-                       For MASK, if RB_BLIT_CNTL.BUF=BLIT_ZS:
-                               1 - depth
-                               2 - stencil
-                               3 - depth+stencil
-                       if RB_BLIT_CNTL.BUF=BLIT_MRTn
-                               then probably a component mask, I always see 0xf
-               </doc>
-               <bitfield name="MASK" low="4" high="7"/>
-       </reg32>
-
-       <doc>
-               Buffer Metadata (flag buffers):
-               -------------------------------
-
-               Blob seems to stick some metadata at the front of the buffer,
-               both z/s and MRT.  I think this is same as UBWC (bandwidth
-               compression) metadata that mdp 1.7 and later supports.  See
-               1d3fae5698ce5358caab87a15383b690941697e8 in downstream kernel.
-               UBWC seems to stand for "universal bandwidth compression".
-
-               Before glReadPixels() it does a pair of BYPASS blits (at least
-               if metadata is used) presumably to resolve metadata.
-
-               NOTES: see: getUBwcBlockSize(), getUBwcMetaBufferSize() at
-               https://android.googlesource.com/platform/hardware/qcom/display/+/android-6.0.1_r40/msm8994/libgralloc/alloc_controller.cpp
-               (note that bpp in bytes, not bits, so really cpp)
-
-               Example Layout 2d w/ mipmap levels:
-
-                       100x2000, ifmt=GL_RG, fmt=GL_RG16F, type=GL_FLOAT, meta=64x512@0x8000 (7x500)
-                               base=c072e000, offset=16384, size=1703936
-
-                               color           flags
-                       0       c073a000        c0732000        - level 0 flags is address
-                       1       c0838000        c0834000          programmed in texture state
-                       2       c0879000        c0877000
-                       3       c089a000        c0899000
-                       4       c08ab000        c08aa000
-                       5       c08b4000        c08b3000
-                       6       c08b9000        c08b8000
-                       7       c08bc000        c08bb000
-                       8       c08be000        c08bd000
-                       9       c08c0000        c08bf000
-                       10      c08c2000        c08c1000
-
-               ARRAY_PITCH is the combined size of all the levels plus flags,
-               so 0xc08c3000 - 0xc0732000 = 0x00191000 (1642496); each level
-               takes up a minimum of 2 pages (since color and flags parts are
-               each page aligned.
-
-                       { TILE_MODE = TILE5_3 | SWIZ_X = A5XX_TEX_X | SWIZ_Y = A5XX_TEX_Y | SWIZ_Z = A5XX_TEX_ZERO | SWIZ_W = A5XX_TEX_ONE | MIPLVLS = 0 | FMT = TFMT5_16_16_FLOAT | SWAP = WZYX }
-                       { WIDTH = 100 | HEIGHT = 2000 }
-                       { FETCHSIZE = TFETCH5_4_BYTE | PITCH = 512 | TYPE = A5XX_TEX_2D }
-                       { ARRAY_PITCH = 1642496 | 0x18800000 }  - NOTE c2dc always has 0x18800000 but
-                       { BASE_LO = 0xc0732000 }                  this varies for blob gles driver..
-                       { BASE_HI = 0 | DEPTH = 1 }               not sure what it is
-
-
-       </doc>
-       <reg32 offset="0xe240" name="RB_DEPTH_FLAG_BUFFER_BASE_LO"/>
-       <reg32 offset="0xe241" name="RB_DEPTH_FLAG_BUFFER_BASE_HI"/>
-       <reg32 offset="0xe242" name="RB_DEPTH_FLAG_BUFFER_PITCH">
-       </reg32>
-       <array offset="0xe243" name="RB_MRT_FLAG_BUFFER" stride="4" length="8">
-               <reg32 offset="0" name="ADDR_LO"/>
-               <reg32 offset="1" name="ADDR_HI"/>
-               <reg32 offset="2" name="PITCH" shr="6" type="uint"/>
-               <!-- array-pitch is size of layer -->
-               <reg32 offset="3" name="ARRAY_PITCH" shr="6" type="uint"/>
-       </array>
-       <reg32 offset="0xe263" name="RB_BLIT_FLAG_DST_LO"/>
-       <reg32 offset="0xe264" name="RB_BLIT_FLAG_DST_HI"/>
-       <reg32 offset="0xe265" name="RB_BLIT_FLAG_DST_PITCH" shr="6" type="uint"/>
-       <!-- array-pitch is size of layer -->
-       <reg32 offset="0xe266" name="RB_BLIT_FLAG_DST_ARRAY_PITCH" shr="6" type="uint"/>
-
-       <reg32 offset="0xe267" name="RB_SAMPLE_COUNT_ADDR_LO"/>
-       <reg32 offset="0xe268" name="RB_SAMPLE_COUNT_ADDR_HI"/>
-
-       <reg32 offset="0xe280" name="VPC_CNTL_0">
-               <doc>
-                       num of varyings plus four for gl_Position (plus one if gl_PointSize)
-                       plus # of transform-feedback (streamout) varyings if using the
-                       hw streamout (rather than stg instructions in shader)
-               </doc>
-               <bitfield name="STRIDE_IN_VPC" low="0" high="6" type="uint"/>
-               <bitfield name="VARYING" pos="11" type="boolean"/>
-       </reg32>
-       <array offset="0xe282" name="VPC_VARYING_INTERP" stride="1" length="8">
-               <reg32 offset="0x0" name="MODE"/>
-       </array>
-       <array offset="0xe28a" name="VPC_VARYING_PS_REPL" stride="1" length="8">
-               <reg32 offset="0x0" name="MODE"/>
-       </array>
-       <reg32 offset="0xe292" name="UNKNOWN_E292"/>
-       <reg32 offset="0xe293" name="UNKNOWN_E293"/>
-       <array offset="0xe294" name="VPC_VAR" stride="1" length="4">
-               <!-- one bit per varying component: -->
-               <reg32 offset="0" name="DISABLE"/>
-       </array>
-       <reg32 offset="0xe298" name="VPC_GS_SIV_CNTL"/>
-       <reg32 offset="0xe29a" name="UNKNOWN_E29A"/>
-       <reg32 offset="0xe29d" name="VPC_PACK">
-               <bitfield name="NUMNONPOSVAR" low="0" high="7" type="uint"/>
-               <!--
-               This seems to be the OUTLOC for the psize output.  It could possibly
-               be the max-OUTLOC position, but it is only set when VS writes psize
-               (and blob always puts psize at highest OUTLOC)
-                -->
-               <bitfield name="PSIZELOC" low="8" high="15" type="uint"/>
-       </reg32>
-       <reg32 offset="0xe2a0" name="VPC_FS_PRIMITIVEID_CNTL"/>
-
-       <doc>
-               Stream-Out:
-               -----------
-
-               VPC_SO[0..3] registers setup details about streamout buffers, and
-               number of components to write to each.
-
-               VPC_SO_PROG provides the mapping between output varyings and the SO
-               buffers.  It is written multiple times (via a CP_CONTEXT_REG_BUNCH
-               packet, not sure if that matters), each write can handle up to two
-               components of stream-out output.  Order matches up to OUTLOC,
-               including padding.  So, if outputting first 3 varyings:
-
-                       SP_VS_OUT[0].REG: { A_REGID = r0.w | A_COMPMASK = 0xf | B_REGID = r0.x | B_COMPMASK = 0x7 }
-                       SP_VS_OUT[0x1].REG: { A_REGID = r1.w | A_COMPMASK = 0x3 | B_REGID = r2.y | B_COMPMASK = 0xf }
-                       SP_VS_VPC_DST[0].REG: { OUTLOC0 = 0 | OUTLOC1 = 4 | OUTLOC2 = 8 | OUTLOC3 = 12 }
-
-               Then:
-
-                       VPC_SO_PROG: { A_BUF = 0 | A_OFF = 0 | A_EN | A_BUF = 0 | B_OFF = 4 | B_EN }
-                       VPC_SO_PROG: { A_BUF = 0 | A_OFF = 8 | A_EN | A_BUF = 0 | B_OFF = 12 | B_EN }
-                       VPC_SO_PROG: { A_BUF = 2 | A_OFF = 0 | A_EN | A_BUF = 2 | B_OFF = 4 | B_EN }
-                       VPC_SO_PROG: { A_BUF = 2 | A_OFF = 8 | A_EN | A_BUF = 0 | B_OFF = 0 }
-                       VPC_SO_PROG: { A_BUF = 1 | A_OFF = 0 | A_EN | A_BUF = 1 | B_OFF = 4 | B_EN }
-
-               Note that varying order is OUTLOC0, OUTLOC2, OUTLOC1, and note
-               the padding between OUTLOC1 and OUTLOC2.
-
-               The BUF bitfield indicates which of the four streamout buffers
-               to write into at the specified offset.
-
-               The VPC_SO[n].FLUSH_BASE_LO/HI is used for hw to write back next
-               offset which gets loaded back into VPC_SO[n].BUFFER_OFFSET via a
-               CP_MEM_TO_REG.  Probably can be ignored until we have GS/etc, at
-               which point we can't calculate the offset on the CPU.
-       </doc>
-       <reg32 offset="0xe2a1" name="VPC_SO_BUF_CNTL">
-               <bitfield name="BUF0" pos="0" type="boolean"/>
-               <bitfield name="BUF1" pos="3" type="boolean"/>
-               <bitfield name="BUF2" pos="6" type="boolean"/>
-               <bitfield name="BUF3" pos="9" type="boolean"/>
-               <bitfield name="ENABLE" pos="15" type="boolean"/>
-       </reg32>
-       <reg32 offset="0xe2a2" name="VPC_SO_OVERRIDE">
-               <bitfield name="SO_DISABLE" pos="0" type="boolean"/>
-       </reg32>
-       <reg32 offset="0xe2a3" name="VPC_SO_CNTL">
-               <!-- always 0x10000 when SO enabled.. -->
-               <bitfield name="ENABLE" pos="16" type="boolean"/>
-       </reg32>
-       <reg32 offset="0xe2a4" name="VPC_SO_PROG">
-               <bitfield name="A_BUF" low="0" high="1" type="uint"/>
-               <bitfield name="A_OFF" low="2" high="10" shr="2" type="uint"/>
-               <bitfield name="A_EN" pos="11" type="boolean"/>
-               <bitfield name="B_BUF" low="12" high="13" type="uint"/>
-               <bitfield name="B_OFF" low="14" high="22" shr="2" type="uint"/>
-               <bitfield name="B_EN" pos="23" type="boolean"/>
-       </reg32>
-       <array offset="0xe2a7" name="VPC_SO" stride="7" length="4">
-               <reg32 offset="0" name="BUFFER_BASE_LO"/>
-               <reg32 offset="1" name="BUFFER_BASE_HI"/>
-               <reg32 offset="2" name="BUFFER_SIZE"/>
-               <reg32 offset="3" name="NCOMP"/>  <!-- component count -->
-               <reg32 offset="4" name="BUFFER_OFFSET"/>
-               <reg32 offset="5" name="FLUSH_BASE_LO"/>
-               <reg32 offset="6" name="FLUSH_BASE_HI"/>
-       </array>
-
-       <reg32 offset="0xe384" name="PC_PRIMITIVE_CNTL">
-               <!-- # of varyings plus four for gl_Position (plus one if gl_PointSize) -->
-               <bitfield name="STRIDE_IN_VPC" low="0" high="6" type="uint"/>
-               <bitfield name="PRIMITIVE_RESTART" pos="8" type="boolean"/>
-               <bitfield name="COUNT_PRIMITIVES" pos="9" type="boolean"/><!-- enabled when gl_PrimitiveIDIn is used -->
-               <bitfield name="PROVOKING_VTX_LAST" pos="10" type="boolean"/>
-       </reg32>
-       <reg32 offset="0xe385" name="PC_PRIM_VTX_CNTL">
-               <bitfield name="PSIZE" pos="11" type="boolean"/>
-       </reg32>
-       <reg32 offset="0xe388" name="PC_RASTER_CNTL">
-               <bitfield name="POLYMODE_FRONT_PTYPE" low="0" high="2" type="adreno_pa_su_sc_draw"/>
-               <bitfield name="POLYMODE_BACK_PTYPE" low="3" high="5" type="adreno_pa_su_sc_draw"/>
-               <bitfield name="POLYMODE_ENABLE" pos="6" type="boolean"/>
-       </reg32>
-       <reg32 offset="0xe389" name="UNKNOWN_E389"/>
-       <reg32 offset="0xe38c" name="PC_RESTART_INDEX"/>
-       <reg32 offset="0xe38d" name="PC_GS_LAYERED"/>
-       <reg32 offset="0xe38e" name="PC_GS_PARAM">
-               <bitfield name="MAX_VERTICES" low="0" high="9" type="uint"/><!-- vertices - 1 -->
-               <bitfield name="INVOCATIONS" low="11" high="15" type="uint"/><!-- invoc - 1 -->
-               <bitfield name="PRIMTYPE" low="23" high="24" type="adreno_pa_su_sc_draw"/>
-       </reg32>
-       <reg32 offset="0xe38f" name="PC_HS_PARAM">
-               <bitfield name="VERTICES_OUT" low="0" high="5" type="uint"/>
-               <bitfield name="SPACING" low="21" high="22" type="a4xx_tess_spacing"/>
-               <bitfield name="CW" pos="23" type="boolean"/>
-               <bitfield name="CONNECTED" pos="24" type="boolean"/>
-       </reg32>
-       <reg32 offset="0xe3b0" name="PC_POWER_CNTL"/>
-
-       <reg32 offset="0xe400" name="VFD_CONTROL_0">
-               <bitfield name="VTXCNT" low="0" high="5" type="uint"/>
-       </reg32>
-       <reg32 offset="0xe401" name="VFD_CONTROL_1">
-               <bitfield name="REGID4VTX" low="0" high="7" type="a3xx_regid"/>
-               <bitfield name="REGID4INST" low="8" high="15" type="a3xx_regid"/>
-               <bitfield name="REGID4PRIMID" low="16" high="23" type="a3xx_regid"/>
-       </reg32>
-       <reg32 offset="0xe402" name="VFD_CONTROL_2">
-               <bitfield name="REGID_PATCHID" low="0" high="7" type="a3xx_regid"/><!-- same as VFD_CONTROL_3.REGID_PATCHID? -->
-       </reg32>
-       <reg32 offset="0xe403" name="VFD_CONTROL_3">
-               <bitfield name="REGID_PATCHID" low="8" high="15" type="a3xx_regid"/>
-               <bitfield name="REGID_TESSX" low="16" high="23" type="a3xx_regid"/>
-               <bitfield name="REGID_TESSY" low="24" high="31" type="a3xx_regid"/>
-       </reg32>
-       <reg32 offset="0xe404" name="VFD_CONTROL_4">
-       </reg32>
-       <reg32 offset="0xe405" name="VFD_CONTROL_5">
-               <!-- b0 set if gl_PrimitiveID used in fs ?? -->
-       </reg32>
-       <reg32 offset="0xe408" name="VFD_INDEX_OFFSET"/>
-       <reg32 offset="0xe409" name="VFD_INSTANCE_START_OFFSET"/>
-       <array offset="0xe40a" name="VFD_FETCH" stride="4" length="32">
-               <reg32 offset="0x0" name="BASE_LO"/>
-               <reg32 offset="0x1" name="BASE_HI"/>
-               <reg32 offset="0x2" name="SIZE" type="uint"/>
-               <reg32 offset="0x3" name="STRIDE" type="uint"/>
-       </array>
-       <array offset="0xe48a" name="VFD_DECODE" stride="2" length="32">
-               <reg32 offset="0x0" name="INSTR">
-                       <!-- IDX appears to index into VFD_FETCH[] -->
-                       <bitfield name="IDX" low="0" high="4" type="uint"/>
-                       <bitfield name="INSTANCED" pos="17" type="boolean"/>
-                       <bitfield name="FORMAT" low="20" high="27" type="a5xx_vtx_fmt"/>
-                       <bitfield name="SWAP" low="28" high="29" type="a3xx_color_swap"/>
-                       <bitfield name="UNK30" pos="30" type="boolean"/>
-                       <bitfield name="FLOAT" pos="31" type="boolean"/>
-               </reg32>
-               <reg32 offset="0x1" name="STEP_RATE"/> <!-- ??? -->
-       </array>
-       <array offset="0xe4ca" name="VFD_DEST_CNTL" stride="1" length="32">
-               <reg32 offset="0x0" name="INSTR">
-                       <bitfield name="WRITEMASK" low="0" high="3" type="hex"/>
-                       <bitfield name="REGID" low="4" high="11" type="a3xx_regid"/>
-               </reg32>
-       </array>
-       <reg32 offset="0xe4f0" name="VFD_POWER_CNTL"/>
-
-       <!-- 0x0 for compute, 0x10 for 3d? -->
-       <reg32 offset="0xe580" name="SP_SP_CNTL"/>
-
-       <bitset name="a5xx_xs_config" inline="yes">
-               <bitfield name="ENABLED" pos="0" type="boolean"/>
-               <bitfield name="CONSTOBJECTOFFSET" low="1" high="7" type="uint"/>
-               <bitfield name="SHADEROBJOFFSET" low="8" high="14" type="uint"/>
-       </bitset>
-       <bitset name="a5xx_xs_cntl" inline="yes">
-               <bitfield name="SSBO_ENABLE" pos="0" type="boolean"/>
-               <!--
-               no idea high bit.. could be this is amount of on-chip memory used
-               rather than total size?
-                -->
-               <bitfield name="INSTRLEN" low="1" high="31" type="uint"/>
-       </bitset>
-       <bitset name="a5xx_sp_xs_ctrl_reg0" inline="yes">
-               <!-- bit1 + bit2 set for "buffer" mode (ie. shader small enough to fit internally) -->
-               <!-- 24 or more (full size) GPRS and blob uses TWO_QUADS instead of FOUR_QUADS -->
-               <bitfield name="THREADSIZE" pos="3" type="a3xx_threadsize"/>
-               <bitfield name="HALFREGFOOTPRINT" low="4" high="9" type="uint"/>
-               <bitfield name="FULLREGFOOTPRINT" low="10" high="15" type="uint"/>
-               <bitfield name="VARYING" pos="16" type="boolean"/>
-               <bitfield name="PIXLODENABLE" pos="20" type="boolean"/>
-               <!-- seems to be nesting level for flow control:.. -->
-               <bitfield name="BRANCHSTACK" low="25" high="31" type="uint"/>
-       </bitset>
-       <!-- assuming things appear in same relative order as a4xx: -->
-       <!-- duplicated exactly w/ corresponding HLSQ_ regs starting at 0xe78b.. -->
-       <reg32 offset="0xe584" name="SP_VS_CONFIG" type="a5xx_xs_config"/>
-       <reg32 offset="0xe585" name="SP_FS_CONFIG" type="a5xx_xs_config"/>
-       <reg32 offset="0xe586" name="SP_HS_CONFIG" type="a5xx_xs_config"/>
-       <reg32 offset="0xe587" name="SP_DS_CONFIG" type="a5xx_xs_config"/>
-       <reg32 offset="0xe588" name="SP_GS_CONFIG" type="a5xx_xs_config"/>
-       <reg32 offset="0xe589" name="SP_CS_CONFIG" type="a5xx_xs_config"/>
-       <reg32 offset="0xe58a" name="SP_VS_CONFIG_MAX_CONST"/>
-       <reg32 offset="0xe58b" name="SP_FS_CONFIG_MAX_CONST"/>
-       <reg32 offset="0xe590" name="SP_VS_CTRL_REG0" type="a5xx_sp_xs_ctrl_reg0"/>
-       <reg32 offset="0xe592" name="SP_PRIMITIVE_CNTL">
-               <!-- # of VS outputs including pos/psize -->
-               <bitfield name="VSOUT" low="0" high="4" type="uint"/>
-       </reg32>
-       <array offset="0xe593" name="SP_VS_OUT" stride="1" length="16">
-               <reg32 offset="0x0" name="REG">
-                       <bitfield name="A_REGID" low="0" high="7" type="a3xx_regid"/>
-                       <bitfield name="A_COMPMASK" low="8" high="11" type="hex"/>
-                       <bitfield name="B_REGID" low="16" high="23" type="a3xx_regid"/>
-                       <bitfield name="B_COMPMASK" low="24" high="27" type="hex"/>
-               </reg32>
-       </array>
-       <!--
-       Starting with a5xx, position/psize outputs from shader end up in the
-       SP_VS_OUT map, with highest OUTLOCn position.  (Generally they are
-       the last entries too, except when gl_PointCoord is used, blob inserts
-       an extra varying after, but with a lower OUTLOC position.  If present,
-       psize is last, preceded by position.
-        -->
-       <array offset="0xe5a3" name="SP_VS_VPC_DST" stride="1" length="8">
-               <reg32 offset="0x0" name="REG">
-                       <bitfield name="OUTLOC0" low="0" high="7" type="uint"/>
-                       <bitfield name="OUTLOC1" low="8" high="15" type="uint"/>
-                       <bitfield name="OUTLOC2" low="16" high="23" type="uint"/>
-                       <bitfield name="OUTLOC3" low="24" high="31" type="uint"/>
-               </reg32>
-       </array>
-       <reg32 offset="0xe5ab" name="UNKNOWN_E5AB"/>
-       <reg32 offset="0xe5ac" name="SP_VS_OBJ_START_LO"/>
-       <reg32 offset="0xe5ad" name="SP_VS_OBJ_START_HI"/>
-       <reg32 offset="0xe5c0" name="SP_FS_CTRL_REG0" type="a5xx_sp_xs_ctrl_reg0"/>
-       <reg32 offset="0xe5c2" name="UNKNOWN_E5C2"/>
-       <reg32 offset="0xe5c3" name="SP_FS_OBJ_START_LO"/>
-       <reg32 offset="0xe5c4" name="SP_FS_OBJ_START_HI"/>
-       <reg32 offset="0xe5c9" name="SP_BLEND_CNTL">
-               <bitfield name="ENABLED" pos="0" type="boolean"/>
-               <bitfield name="UNK8" pos="8" type="boolean"/>
-               <bitfield name="ALPHA_TO_COVERAGE" pos="10" type="boolean"/>
-       </reg32>
-       <reg32 offset="0xe5ca" name="SP_FS_OUTPUT_CNTL">
-               <bitfield name="MRT" low="0" high="3" type="uint"/>
-               <bitfield name="DEPTH_REGID" low="5" high="12" type="a3xx_regid"/>
-               <bitfield name="SAMPLEMASK_REGID" low="13" high="20" type="a3xx_regid"/>
-       </reg32>
-       <array offset="0xe5cb" name="SP_FS_OUTPUT" stride="1" length="8">
-               <doc>per MRT</doc>
-               <reg32 offset="0x0" name="REG">
-                       <bitfield name="REGID" low="0" high="7" type="a3xx_regid"/>
-                       <bitfield name="HALF_PRECISION" pos="8" type="boolean"/>
-               </reg32>
-       </array>
-       <array offset="0xe5d3" name="SP_FS_MRT" stride="1" length="8">
-               <reg32 offset="0" name="REG">
-                       <bitfield name="COLOR_FORMAT" low="0" high="7" type="a5xx_color_fmt"/>
-                       <bitfield name="COLOR_SINT" pos="8" type="boolean"/>
-                       <bitfield name="COLOR_UINT" pos="9" type="boolean"/>
-                       <bitfield name="COLOR_SRGB" pos="10" type="boolean"/>
-               </reg32>
-       </array>
-       <!--
-       e5db/e5dc seems to look related to some optimization to do sample from
-       texture using varying value directly before shader thread starts?  I
-       guess that could optimize common simple frag shaders..
-        -->
-       <reg32 offset="0xe5db" name="UNKNOWN_E5DB"/>
-       <reg32 offset="0xe5f0" name="SP_CS_CTRL_REG0" type="a5xx_sp_xs_ctrl_reg0"/>
-       <reg32 offset="0xe5f2" name="UNKNOWN_E5F2"/>
-       <reg32 offset="0xe5f3" name="SP_CS_OBJ_START_LO"/>
-       <reg32 offset="0xe5f4" name="SP_CS_OBJ_START_HI"/>
-       <!-- e5f9 something compute related.. seems to change when HLSQ_CS_CNTL_1 changes -->
-
-       <reg32 offset="0xe600" name="SP_HS_CTRL_REG0" type="a5xx_sp_xs_ctrl_reg0"/>
-       <reg32 offset="0xe602" name="UNKNOWN_E602"/>
-       <reg32 offset="0xe603" name="SP_HS_OBJ_START_LO"/>
-       <reg32 offset="0xe604" name="SP_HS_OBJ_START_HI"/>
-       <reg32 offset="0xe610" name="SP_DS_CTRL_REG0" type="a5xx_sp_xs_ctrl_reg0"/>
-       <reg32 offset="0xe62b" name="UNKNOWN_E62B"/>
-       <reg32 offset="0xe62c" name="SP_DS_OBJ_START_LO"/>
-       <reg32 offset="0xe62d" name="SP_DS_OBJ_START_HI"/>
-       <reg32 offset="0xe640" name="SP_GS_CTRL_REG0" type="a5xx_sp_xs_ctrl_reg0"/>
-       <reg32 offset="0xe65b" name="UNKNOWN_E65B"/>
-       <reg32 offset="0xe65c" name="SP_GS_OBJ_START_LO"/>
-       <reg32 offset="0xe65d" name="SP_GS_OBJ_START_HI"/>
-
-       <reg32 offset="0xe704" name="TPL1_TP_RAS_MSAA_CNTL">
-               <bitfield name="SAMPLES" low="0" high="1" type="a3xx_msaa_samples"/>
-       </reg32>
-       <reg32 offset="0xe705" name="TPL1_TP_DEST_MSAA_CNTL">
-               <bitfield name="SAMPLES" low="0" high="1" type="a3xx_msaa_samples"/>
-               <bitfield name="MSAA_DISABLE" pos="2" type="boolean"/>
-       </reg32>
-       <!-- either blob is doing it wrong, or this is not per-stage anymore: -->
-       <reg32 offset="0xe706" name="TPL1_TP_BORDER_COLOR_BASE_ADDR_LO"/>
-       <reg32 offset="0xe707" name="TPL1_TP_BORDER_COLOR_BASE_ADDR_HI"/>
-
-       <!--
-       so these have the same info that is normally in the CP_LOAD_STATE
-       packets.. not sure if they are normally written by pm4/me or if the
-       CP_LOAD_STATE mechanism is deprecated?
-        -->
-       <reg32 offset="0xe700" name="TPL1_VS_TEX_COUNT" type="uint"/>
-       <reg32 offset="0xe701" name="TPL1_HS_TEX_COUNT" type="uint"/>
-       <reg32 offset="0xe702" name="TPL1_DS_TEX_COUNT" type="uint"/>
-       <reg32 offset="0xe703" name="TPL1_GS_TEX_COUNT" type="uint"/>
-
-       <reg32 offset="0xe722" name="TPL1_VS_TEX_SAMP_LO"/>
-       <reg32 offset="0xe723" name="TPL1_VS_TEX_SAMP_HI"/>
-       <reg32 offset="0xe724" name="TPL1_HS_TEX_SAMP_LO"/>
-       <reg32 offset="0xe725" name="TPL1_HS_TEX_SAMP_HI"/>
-       <reg32 offset="0xe726" name="TPL1_DS_TEX_SAMP_LO"/>
-       <reg32 offset="0xe727" name="TPL1_DS_TEX_SAMP_HI"/>
-       <reg32 offset="0xe728" name="TPL1_GS_TEX_SAMP_LO"/>
-       <reg32 offset="0xe729" name="TPL1_GS_TEX_SAMP_HI"/>
-
-       <reg32 offset="0xe72a" name="TPL1_VS_TEX_CONST_LO"/>
-       <reg32 offset="0xe72b" name="TPL1_VS_TEX_CONST_HI"/>
-       <reg32 offset="0xe72c" name="TPL1_HS_TEX_CONST_LO"/>
-       <reg32 offset="0xe72d" name="TPL1_HS_TEX_CONST_HI"/>
-       <reg32 offset="0xe72e" name="TPL1_DS_TEX_CONST_LO"/>
-       <reg32 offset="0xe72f" name="TPL1_DS_TEX_CONST_HI"/>
-       <reg32 offset="0xe730" name="TPL1_GS_TEX_CONST_LO"/>
-       <reg32 offset="0xe731" name="TPL1_GS_TEX_CONST_HI"/>
-
-       <reg32 offset="0xe750" name="TPL1_FS_TEX_COUNT" type="uint"/>
-       <reg32 offset="0xe751" name="TPL1_CS_TEX_COUNT" type="uint"/>
-
-       <reg32 offset="0xe75a" name="TPL1_FS_TEX_SAMP_LO"/>
-       <reg32 offset="0xe75b" name="TPL1_FS_TEX_SAMP_HI"/>
-       <reg32 offset="0xe75c" name="TPL1_CS_TEX_SAMP_LO"/>
-       <reg32 offset="0xe75d" name="TPL1_CS_TEX_SAMP_HI"/>
-       <reg32 offset="0xe75e" name="TPL1_FS_TEX_CONST_LO"/>
-       <reg32 offset="0xe75f" name="TPL1_FS_TEX_CONST_HI"/>
-       <reg32 offset="0xe760" name="TPL1_CS_TEX_CONST_LO"/>
-       <reg32 offset="0xe761" name="TPL1_CS_TEX_CONST_HI"/>
-
-       <reg32 offset="0xe764" name="TPL1_TP_FS_ROTATION_CNTL"/>
-
-       <reg32 offset="0xe784" name="HLSQ_CONTROL_0_REG">
-               <!-- 24 or more (full size) GPRS and blob uses TWO_QUADS instead of FOUR_QUADS -->
-               <bitfield name="FSTHREADSIZE" pos="0" type="a3xx_threadsize"/>
-               <bitfield name="CSTHREADSIZE" pos="2" type="a3xx_threadsize"/>
-       </reg32>
-       <reg32 offset="0xe785" name="HLSQ_CONTROL_1_REG">
-               <!-- I guess.. not set exactly same as a4xx, but similar: -->
-               <bitfield name="PRIMALLOCTHRESHOLD" low="0" high="5" type="uint"/>
-       </reg32>
-       <reg32 offset="0xe786" name="HLSQ_CONTROL_2_REG">
-               <bitfield name="FACEREGID" low="0" high="7" type="a3xx_regid"/>
-               <!-- SAMPLEID is loaded into a half-precision register: -->
-               <bitfield name="SAMPLEID" low="8" high="15" type="a3xx_regid"/>
-               <bitfield name="SAMPLEMASK" low="16" high="23" type="a3xx_regid"/>
-               <bitfield name="SIZE" low="24" high="31" type="a3xx_regid"/>
-       </reg32>
-       <reg32 offset="0xe787" name="HLSQ_CONTROL_3_REG">
-               <!-- register loaded with position (bary.f) -->
-               <bitfield name="IJ_PERSP_PIXEL" low="0" high="7" type="a3xx_regid"/>
-               <bitfield name="IJ_LINEAR_PIXEL" low="8" high="15" type="a3xx_regid"/>
-               <bitfield name="IJ_PERSP_CENTROID" low="16" high="23" type="a3xx_regid"/>
-               <bitfield name="IJ_LINEAR_CENTROID" low="24" high="31" type="a3xx_regid"/>
-       </reg32>
-       <reg32 offset="0xe788" name="HLSQ_CONTROL_4_REG">
-               <bitfield name="IJ_PERSP_SAMPLE" low="0" high="7" type="a3xx_regid"/>
-               <bitfield name="IJ_LINEAR_SAMPLE" low="8" high="15" type="a3xx_regid"/>
-               <bitfield name="XYCOORDREGID" low="16" high="23" type="a3xx_regid"/>
-               <bitfield name="ZWCOORDREGID" low="24" high="31" type="a3xx_regid"/>
-       </reg32>
-       <!--
-       0x020fffff for normal draws, 0x1f00000 for compute.. maybe what state
-       is enabled?  We could probably try disabling different bits and see
-       what breaks to figure out which is what:
-        -->
-       <reg32 offset="0xe78a" name="HLSQ_UPDATE_CNTL"/>
-       <reg32 offset="0xe78b" name="HLSQ_VS_CONFIG" type="a5xx_xs_config"/>
-       <reg32 offset="0xe78c" name="HLSQ_FS_CONFIG" type="a5xx_xs_config"/>
-       <reg32 offset="0xe78d" name="HLSQ_HS_CONFIG" type="a5xx_xs_config"/>
-       <reg32 offset="0xe78e" name="HLSQ_DS_CONFIG" type="a5xx_xs_config"/>
-       <reg32 offset="0xe78f" name="HLSQ_GS_CONFIG" type="a5xx_xs_config"/>
-       <reg32 offset="0xe790" name="HLSQ_CS_CONFIG" type="a5xx_xs_config"/>
-       <reg32 offset="0xe791" name="HLSQ_VS_CNTL" type="a5xx_xs_cntl"/>
-       <reg32 offset="0xe792" name="HLSQ_FS_CNTL" type="a5xx_xs_cntl"/>
-       <reg32 offset="0xe793" name="HLSQ_HS_CNTL" type="a5xx_xs_cntl"/>
-       <reg32 offset="0xe794" name="HLSQ_DS_CNTL" type="a5xx_xs_cntl"/>
-       <reg32 offset="0xe795" name="HLSQ_GS_CNTL" type="a5xx_xs_cntl"/>
-       <reg32 offset="0xe796" name="HLSQ_CS_CNTL" type="a5xx_xs_cntl"/>
-       <reg32 offset="0xe7b9" name="HLSQ_CS_KERNEL_GROUP_X"/>
-       <reg32 offset="0xe7ba" name="HLSQ_CS_KERNEL_GROUP_Y"/>
-       <reg32 offset="0xe7bb" name="HLSQ_CS_KERNEL_GROUP_Z"/>
-       <reg32 offset="0xe7b0" name="HLSQ_CS_NDRANGE_0">
-               <bitfield name="KERNELDIM" low="0" high="1" type="uint"/>
-               <!-- localsize is value minus one: -->
-               <bitfield name="LOCALSIZEX" low="2" high="11" type="uint"/>
-               <bitfield name="LOCALSIZEY" low="12" high="21" type="uint"/>
-               <bitfield name="LOCALSIZEZ" low="22" high="31" type="uint"/>
-       </reg32>
-       <reg32 offset="0xe7b1" name="HLSQ_CS_NDRANGE_1">
-               <bitfield name="GLOBALSIZE_X" low="0" high="31" type="uint"/>
-       </reg32>
-       <reg32 offset="0xe7b2" name="HLSQ_CS_NDRANGE_2">
-               <bitfield name="GLOBALOFF_X" low="0" high="31" type="uint"/>
-       </reg32>
-       <reg32 offset="0xe7b3" name="HLSQ_CS_NDRANGE_3">
-               <bitfield name="GLOBALSIZE_Y" low="0" high="31" type="uint"/>
-       </reg32>
-       <reg32 offset="0xe7b4" name="HLSQ_CS_NDRANGE_4">
-               <bitfield name="GLOBALOFF_Y" low="0" high="31" type="uint"/>
-       </reg32>
-       <reg32 offset="0xe7b5" name="HLSQ_CS_NDRANGE_5">
-               <bitfield name="GLOBALSIZE_Z" low="0" high="31" type="uint"/>
-       </reg32>
-       <reg32 offset="0xe7b6" name="HLSQ_CS_NDRANGE_6">
-               <bitfield name="GLOBALOFF_Z" low="0" high="31" type="uint"/>
-       </reg32>
-       <reg32 offset="0xe7b7" name="HLSQ_CS_CNTL_0">
-               <bitfield name="WGIDCONSTID" low="0" high="7" type="a3xx_regid"/>
-               <!-- possibly one of these is KERNELDIMCONSTID? -->
-               <!--
-               UNK0 appears to be NUMWGCONSTID.. but only works in certain
-               cases?  Blob doesn't appear to use it, but instead emits
-               these via const (uniform).  Which requires some shenanigans
-               for indirect draws when the offset is not strongly aligned
-               enough to use as EXT_SRC_ADDR in CP_LOAD_STATE
-                -->
-               <bitfield name="UNK0" low="8" high="15" type="a3xx_regid"/>
-               <bitfield name="UNK1" low="16" high="23" type="a3xx_regid"/>
-               <bitfield name="LOCALIDREGID" low="24" high="31" type="a3xx_regid"/>
-       </reg32>
-       <reg32 offset="0xe7b8" name="HLSQ_CS_CNTL_1"/>
-       <reg32 offset="0xe7c0" name="UNKNOWN_E7C0"/>
-       <reg32 offset="0xe7c3" name="HLSQ_VS_CONSTLEN" type="uint"/>
-       <reg32 offset="0xe7c4" name="HLSQ_VS_INSTRLEN" type="uint"/>
-       <reg32 offset="0xe7c5" name="UNKNOWN_E7C5"/>
-       <reg32 offset="0xe7c8" name="HLSQ_HS_CONSTLEN" type="uint"/>
-       <reg32 offset="0xe7c9" name="HLSQ_HS_INSTRLEN" type="uint"/>
-       <reg32 offset="0xe7ca" name="UNKNOWN_E7CA"/>
-       <reg32 offset="0xe7cd" name="HLSQ_DS_CONSTLEN" type="uint"/>
-       <reg32 offset="0xe7ce" name="HLSQ_DS_INSTRLEN" type="uint"/>
-       <reg32 offset="0xe7cf" name="UNKNOWN_E7CF"/>
-       <reg32 offset="0xe7d2" name="HLSQ_GS_CONSTLEN" type="uint"/>
-       <reg32 offset="0xe7d3" name="HLSQ_GS_INSTRLEN" type="uint"/>
-       <reg32 offset="0xe7d4" name="UNKNOWN_E7D4"/>
-       <reg32 offset="0xe7d7" name="HLSQ_FS_CONSTLEN" type="uint"/>
-       <reg32 offset="0xe7d8" name="HLSQ_FS_INSTRLEN" type="uint"/>
-       <reg32 offset="0xe7d9" name="UNKNOWN_E7D9"/>
-       <reg32 offset="0xe7dc" name="HLSQ_CS_CONSTLEN" type="uint"/>
-       <reg32 offset="0xe7dd" name="HLSQ_CS_INSTRLEN" type="uint"/>
-
-       <!--
-               Separate blit/2d or dma engine?  Seems to get used sometimes for
-               texture uploads, where a4xx blob would use normal draws.  Used
-               in render-mode 0x5..
-
-               Note seems mostly to be used for small blits, large blits seem
-               to use the CP_EVENT_WRITE:BLIT style of doing things.  See
-               cubemap-0003 (40x40) vs cubemap-0004 (256x256).
-
-               see cube-0000, cubemap-(1..3 but not 4+), quad-textured-10..17
-
-               Other nearby registers are probably color formats, etc.  The
-               blit coords are in CP packet.  Play more w/ glTexSubImage2D()
-               to work it out.
-
-               Separate this into a different domain??  Would that help to
-               restrict which registers we dump based on mode?
-
-               regs 0x2000 to 0x2004 (plus all-zero regs 0x2005-0x2009) look
-               like 2nd source for blending?  Used in mipmap generation.. but
-               maybe layout is a bit different.  (Possibly used for reading
-               src via sampler, to enable scaling??)  0x2040 also used in this
-               case.
-        -->
-       <reg32 offset="0x2100" name="RB_2D_BLIT_CNTL"/>  <!-- same as 0x2180 -->
-       <reg32 offset="0x2101" name="RB_2D_SRC_SOLID_DW0"/>
-       <reg32 offset="0x2102" name="RB_2D_SRC_SOLID_DW1"/>
-       <reg32 offset="0x2103" name="RB_2D_SRC_SOLID_DW2"/>
-       <reg32 offset="0x2104" name="RB_2D_SRC_SOLID_DW3"/>
-       <reg32 offset="0x2107" name="RB_2D_SRC_INFO">
-               <bitfield name="COLOR_FORMAT" low="0" high="7" type="a5xx_color_fmt"/>
-               <bitfield name="TILE_MODE" low="8" high="9" type="a5xx_tile_mode"/>
-               <bitfield name="COLOR_SWAP" low="10" high="11" type="a3xx_color_swap"/>
-               <!-- b12 seems to be set when UBWC "FLAGS" buffer enabled -->
-               <bitfield name="FLAGS" pos="12" type="boolean"/>
-       </reg32>
-       <reg32 offset="0x2108" name="RB_2D_SRC_LO"/>
-       <reg32 offset="0x2109" name="RB_2D_SRC_HI"/>
-       <reg32 offset="0x210a" name="RB_2D_SRC_SIZE">
-               <bitfield name="PITCH" low="0" high="15" shr="6" type="uint"/>
-               <bitfield name="ARRAY_PITCH" low="16" high="31" shr="6" type="uint"/>
-       </reg32>
-       <reg32 offset="0x2110" name="RB_2D_DST_INFO">
-               <bitfield name="COLOR_FORMAT" low="0" high="7" type="a5xx_color_fmt"/>
-               <bitfield name="TILE_MODE" low="8" high="9" type="a5xx_tile_mode"/>
-               <bitfield name="COLOR_SWAP" low="10" high="11" type="a3xx_color_swap"/>
-               <!-- b12 seems to be set when UBWC "FLAGS" buffer enabled -->
-               <bitfield name="FLAGS" pos="12" type="boolean"/>
-       </reg32>
-       <reg32 offset="0x2111" name="RB_2D_DST_LO"/>
-       <reg32 offset="0x2112" name="RB_2D_DST_HI"/>
-       <reg32 offset="0x2113" name="RB_2D_DST_SIZE">
-               <bitfield name="PITCH" low="0" high="15" shr="6" type="uint"/>
-               <bitfield name="ARRAY_PITCH" low="16" high="31" shr="6" type="uint"/>
-       </reg32>
-       <reg32 offset="0x2140" name="RB_2D_SRC_FLAGS_LO"/>
-       <reg32 offset="0x2141" name="RB_2D_SRC_FLAGS_HI"/>
-        <reg32 offset="0x2142" name="RB_2D_SRC_FLAGS_PITCH" shr="6" type="uint"/>
-       <reg32 offset="0x2143" name="RB_2D_DST_FLAGS_LO"/>
-       <reg32 offset="0x2144" name="RB_2D_DST_FLAGS_HI"/>
-        <reg32 offset="0x2145" name="RB_2D_DST_FLAGS_PITCH" shr="6" type="uint"/>
-       <reg32 offset="0x2180" name="GRAS_2D_BLIT_CNTL"/> <!-- same as 0x2100 -->
-       <!-- looks same as 0x2107: -->
-       <reg32 offset="0x2181" name="GRAS_2D_SRC_INFO">
-               <bitfield name="COLOR_FORMAT" low="0" high="7" type="a5xx_color_fmt"/>
-               <bitfield name="TILE_MODE" low="8" high="9" type="a5xx_tile_mode"/>
-               <bitfield name="COLOR_SWAP" low="10" high="11" type="a3xx_color_swap"/>
-               <!-- b12 seems to be set when UBWC "FLAGS" buffer enabled -->
-               <bitfield name="FLAGS" pos="12" type="boolean"/>
-       </reg32>
-       <!-- looks same as 0x2110: -->
-       <reg32 offset="0x2182" name="GRAS_2D_DST_INFO">
-               <bitfield name="COLOR_FORMAT" low="0" high="7" type="a5xx_color_fmt"/>
-               <bitfield name="TILE_MODE" low="8" high="9" type="a5xx_tile_mode"/>
-               <bitfield name="COLOR_SWAP" low="10" high="11" type="a3xx_color_swap"/>
-               <!-- b12 seems to be set when UBWC "FLAGS" buffer enabled -->
-               <bitfield name="FLAGS" pos="12" type="boolean"/>
-       </reg32>
-<!--
-0x2100 and 0x2180 look like same thing (RB and GRAS versions)..
-   0x86000000 for copy, 0x00000000 for fill?
-
-0x2184 0x9 for copy, 0x1 for blit (maybe bitmask of enabled src/dst???)
- -->
-       <reg32 offset="0x2100" name="UNKNOWN_2100"/>
-       <reg32 offset="0x2180" name="UNKNOWN_2180"/>
-       <reg32 offset="0x2184" name="UNKNOWN_2184"/>
-</domain>
-
-<domain name="A5XX_TEX_SAMP" width="32">
-       <doc>Texture sampler dwords</doc>
-       <enum name="a5xx_tex_filter"> <!-- same as a4xx? -->
-               <value name="A5XX_TEX_NEAREST" value="0"/>
-               <value name="A5XX_TEX_LINEAR" value="1"/>
-               <value name="A5XX_TEX_ANISO" value="2"/>
-       </enum>
-       <enum name="a5xx_tex_clamp"> <!-- same as a4xx? -->
-               <value name="A5XX_TEX_REPEAT" value="0"/>
-               <value name="A5XX_TEX_CLAMP_TO_EDGE" value="1"/>
-               <value name="A5XX_TEX_MIRROR_REPEAT" value="2"/>
-               <value name="A5XX_TEX_CLAMP_TO_BORDER" value="3"/>
-               <value name="A5XX_TEX_MIRROR_CLAMP" value="4"/>
-       </enum>
-       <enum name="a5xx_tex_aniso"> <!-- same as a4xx? -->
-               <value name="A5XX_TEX_ANISO_1" value="0"/>
-               <value name="A5XX_TEX_ANISO_2" value="1"/>
-               <value name="A5XX_TEX_ANISO_4" value="2"/>
-               <value name="A5XX_TEX_ANISO_8" value="3"/>
-               <value name="A5XX_TEX_ANISO_16" value="4"/>
-       </enum>
-       <reg32 offset="0" name="0">
-               <bitfield name="MIPFILTER_LINEAR_NEAR" pos="0" type="boolean"/>
-               <bitfield name="XY_MAG" low="1" high="2" type="a5xx_tex_filter"/>
-               <bitfield name="XY_MIN" low="3" high="4" type="a5xx_tex_filter"/>
-               <bitfield name="WRAP_S" low="5" high="7" type="a5xx_tex_clamp"/>
-               <bitfield name="WRAP_T" low="8" high="10" type="a5xx_tex_clamp"/>
-               <bitfield name="WRAP_R" low="11" high="13" type="a5xx_tex_clamp"/>
-               <bitfield name="ANISO" low="14" high="16" type="a5xx_tex_aniso"/>
-               <bitfield name="LOD_BIAS" low="19" high="31" type="fixed" radix="8"/><!-- no idea how many bits for real -->
-       </reg32>
-       <reg32 offset="1" name="1">
-               <bitfield name="COMPARE_FUNC" low="1" high="3" type="adreno_compare_func"/>
-               <bitfield name="CUBEMAPSEAMLESSFILTOFF" pos="4" type="boolean"/>
-               <bitfield name="UNNORM_COORDS" pos="5" type="boolean"/>
-               <bitfield name="MIPFILTER_LINEAR_FAR" pos="6" type="boolean"/>
-               <bitfield name="MAX_LOD" low="8" high="19" type="ufixed" radix="8"/>
-               <bitfield name="MIN_LOD" low="20" high="31" type="ufixed" radix="8"/>
-       </reg32>
-       <reg32 offset="2" name="2">
-               <!--
-               offset into border-color buffer?  Blob always uses 0x80 for FS state
-               if both VS and FS have border-color.
-Seems like when both VS and FS have bcolor, one starts 0x300 after other..
-and 0x80 in TEX_SAMP.2 ..  blob doesn't seem to be able to cope w/ multiple
-different border-color states per texture..  Looks something like:
-0000: 3f000000 00000000 00000000 3f800000 00008000 ffff0000 00004000 7fff0000
-0020: 00003800 3c000000 80100010 0000f008 ff000080 7f000040 c0000200 00800000
-0040: 00003800 3c000000 00000000 00000000 00000000 00000000 00000000 00000000
-*
-0300: 3f800000 3f800000 3f800000 3f800000 ffffffff ffffffff 7fff7fff 7fff7fff
-0320: 3c003c00 3c003c00 ffffffff 0000ffff ffffffff 7f7f7f7f ffffffff 00ffffff
-0340: 3c003c00 3c003c00 00000000 00000000 00000000 00000000 00000000 00000000
-
-                -->
-               <bitfield name="BCOLOR_OFFSET" low="4" high="31"/>
-       </reg32>
-       <reg32 offset="3" name="3"/>
-</domain>
-
-<domain name="A5XX_TEX_CONST" width="32">
-       <doc>Texture constant dwords</doc>
-       <enum name="a5xx_tex_swiz"> <!-- same as a4xx? -->
-               <value name="A5XX_TEX_X" value="0"/>
-               <value name="A5XX_TEX_Y" value="1"/>
-               <value name="A5XX_TEX_Z" value="2"/>
-               <value name="A5XX_TEX_W" value="3"/>
-               <value name="A5XX_TEX_ZERO" value="4"/>
-               <value name="A5XX_TEX_ONE" value="5"/>
-       </enum>
-       <enum name="a5xx_tex_type"> <!-- same as a4xx? -->
-               <value name="A5XX_TEX_1D" value="0"/>
-               <value name="A5XX_TEX_2D" value="1"/>
-               <value name="A5XX_TEX_CUBE" value="2"/>
-               <value name="A5XX_TEX_3D" value="3"/>
-       </enum>
-       <reg32 offset="0" name="0">
-               <bitfield name="TILE_MODE" low="0" high="1" type="a5xx_tile_mode"/>
-               <bitfield name="SRGB" pos="2" type="boolean"/>
-               <bitfield name="SWIZ_X" low="4" high="6" type="a5xx_tex_swiz"/>
-               <bitfield name="SWIZ_Y" low="7" high="9" type="a5xx_tex_swiz"/>
-               <bitfield name="SWIZ_Z" low="10" high="12" type="a5xx_tex_swiz"/>
-               <bitfield name="SWIZ_W" low="13" high="15" type="a5xx_tex_swiz"/>
-               <bitfield name="MIPLVLS" low="16" high="19" type="uint"/>
-               <bitfield name="SAMPLES" low="20" high="21" type="a3xx_msaa_samples"/>
-               <bitfield name="FMT" low="22" high="29" type="a5xx_tex_fmt"/>
-               <bitfield name="SWAP" low="30" high="31" type="a3xx_color_swap"/>
-       </reg32>
-       <reg32 offset="1" name="1">
-               <bitfield name="WIDTH" low="0" high="14" type="uint"/>
-               <bitfield name="HEIGHT" low="15" high="29" type="uint"/>
-       </reg32>
-       <reg32 offset="2" name="2">
-               <!-- minimum pitch (for mipmap levels): log2(pitchalign / 64) -->
-               <bitfield name="PITCHALIGN" low="0" high="3" type="uint"/>
-               <doc>Pitch in bytes (so actually stride)</doc>
-               <bitfield name="PITCH" low="7" high="28" type="uint"/>
-               <bitfield name="TYPE" low="29" high="30" type="a5xx_tex_type"/>
-       </reg32>
-       <reg32 offset="3" name="3">
-               <!--
-               ARRAY_PITCH is basically LAYERSZ for the first mipmap level, and
-               for 3d textures (laid out mipmap level first) MIN_LAYERSZ is the
-               layer size at the point that it stops being reduced moving to
-               higher (smaller) mipmap levels
-                -->
-               <bitfield name="ARRAY_PITCH" low="0" high="13" shr="12" type="uint"/>
-               <bitfield name="MIN_LAYERSZ" low="23" high="26" shr="12"/>
-               <!--
-               by default levels with w < 16 are linear
-               TILE_ALL makes all levels have tiling
-               seems required when using UBWC, since all levels have UBWC (can possibly be disabled?)
-                -->
-               <bitfield name="TILE_ALL" pos="27" type="boolean"/>
-               <bitfield name="FLAG" pos="28" type="boolean"/>
-       </reg32>
-       <reg32 offset="4" name="4">
-               <bitfield name="BASE_LO" low="5" high="31" shr="5"/>
-       </reg32>
-       <reg32 offset="5" name="5">
-               <bitfield name="BASE_HI" low="0" high="16"/>
-               <bitfield name="DEPTH" low="17" high="29" type="uint"/>
-       </reg32>
-       <reg32 offset="6" name="6"/>
-       <reg32 offset="7" name="7"/>
-       <reg32 offset="8" name="8"/>
-       <reg32 offset="9" name="9"/>
-       <reg32 offset="10" name="10"/>
-       <reg32 offset="11" name="11"/>
-</domain>
-
-<!--
-Note the "SSBO" state blocks are actually used for both images and SSBOs,
-naming is just because I r/e'd SSBOs first.  I should probably come up
-with a better name.
--->
-<domain name="A5XX_SSBO_0" width="32">
-       <reg32 offset="0" name="0">
-               <bitfield name="BASE_LO" low="5" high="31" shr="5"/>
-       </reg32>
-       <reg32 offset="1" name="1">
-               <!-- no BASE_HI here?  Maybe this is only used for 32b mode? -->
-               <doc>Pitch in bytes (so actually stride)</doc>
-               <bitfield name="PITCH" low="0" high="21" type="uint"/>
-       </reg32>
-       <reg32 offset="2" name="2">
-               <bitfield name="ARRAY_PITCH" low="12" high="25" shr="12" type="uint"/>
-       </reg32>
-       <reg32 offset="3" name="3">
-               <!-- bytes per pixel: -->
-               <bitfield name="CPP" low="0" high="5" type="uint"/>
-       </reg32>
-</domain>
-
-<domain name="A5XX_SSBO_1" width="32">
-       <reg32 offset="0" name="0">
-               <bitfield name="FMT" low="8" high="15" type="a5xx_tex_fmt"/>
-               <bitfield name="WIDTH" low="16" high="31" type="uint"/>
-       </reg32>
-       <reg32 offset="1" name="1">
-               <bitfield name="HEIGHT" low="0" high="15" type="uint"/>
-               <bitfield name="DEPTH" low="16" high="31" type="uint"/>
-       </reg32>
-</domain>
-
-<domain name="A5XX_SSBO_2" width="32">
-       <reg32 offset="0" name="0">
-               <bitfield name="BASE_LO" low="0" high="31"/>
-       </reg32>
-       <reg32 offset="1" name="1">
-               <bitfield name="BASE_HI" low="0" high="31"/>
-       </reg32>
-</domain>
-
-<domain name="A5XX_UBO" width="32">
-       <reg32 offset="0" name="0">
-               <bitfield name="BASE_LO" low="0" high="31"/>
-       </reg32>
-       <reg32 offset="1" name="1">
-               <bitfield name="BASE_HI" low="0" high="16"/>
-               <!-- size probably in high bits -->
-       </reg32>
-</domain>
-
-</database>
diff --git a/src/freedreno/registers/a6xx.xml b/src/freedreno/registers/a6xx.xml
deleted file mode 100644 (file)
index 1e7eefb..0000000
+++ /dev/null
@@ -1,3944 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<database xmlns="http://nouveau.freedesktop.org/"
-xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-xsi:schemaLocation="http://nouveau.freedesktop.org/ rules-ng.xsd">
-<import file="freedreno_copyright.xml"/>
-<import file="adreno/adreno_common.xml"/>
-<import file="adreno/adreno_pm4.xml"/>
-
-<!-- these might be same as a5xx -->
-<enum name="a6xx_tile_mode">
-       <value name="TILE6_LINEAR" value="0"/>
-       <value name="TILE6_2" value="2"/>
-       <value name="TILE6_3" value="3"/>
-</enum>
-
-<enum name="a6xx_format">
-       <value value="0x02" name="FMT6_A8_UNORM"/>
-       <value value="0x03" name="FMT6_8_UNORM"/>
-       <value value="0x04" name="FMT6_8_SNORM"/>
-       <value value="0x05" name="FMT6_8_UINT"/>
-       <value value="0x06" name="FMT6_8_SINT"/>
-
-       <value value="0x08" name="FMT6_4_4_4_4_UNORM"/>
-       <value value="0x0a" name="FMT6_5_5_5_1_UNORM"/>
-       <value value="0x0c" name="FMT6_1_5_5_5_UNORM"/> <!-- read only -->
-       <value value="0x0e" name="FMT6_5_6_5_UNORM"/>
-
-       <value value="0x0f" name="FMT6_8_8_UNORM"/>
-       <value value="0x10" name="FMT6_8_8_SNORM"/>
-       <value value="0x11" name="FMT6_8_8_UINT"/>
-       <value value="0x12" name="FMT6_8_8_SINT"/>
-       <value value="0x13" name="FMT6_L8_A8_UNORM"/>
-
-       <value value="0x15" name="FMT6_16_UNORM"/>
-       <value value="0x16" name="FMT6_16_SNORM"/>
-       <value value="0x17" name="FMT6_16_FLOAT"/>
-       <value value="0x18" name="FMT6_16_UINT"/>
-       <value value="0x19" name="FMT6_16_SINT"/>
-
-       <value value="0x21" name="FMT6_8_8_8_UNORM"/>
-       <value value="0x22" name="FMT6_8_8_8_SNORM"/>
-       <value value="0x23" name="FMT6_8_8_8_UINT"/>
-       <value value="0x24" name="FMT6_8_8_8_SINT"/>
-
-       <value value="0x30" name="FMT6_8_8_8_8_UNORM"/>
-       <value value="0x31" name="FMT6_8_8_8_X8_UNORM"/> <!-- samples 1 for alpha -->
-       <value value="0x32" name="FMT6_8_8_8_8_SNORM"/>
-       <value value="0x33" name="FMT6_8_8_8_8_UINT"/>
-       <value value="0x34" name="FMT6_8_8_8_8_SINT"/>
-
-       <value value="0x35" name="FMT6_9_9_9_E5_FLOAT"/>
-
-       <value value="0x36" name="FMT6_10_10_10_2_UNORM"/>
-       <value value="0x37" name="FMT6_10_10_10_2_UNORM_DEST"/>
-       <value value="0x39" name="FMT6_10_10_10_2_SNORM"/>
-       <value value="0x3a" name="FMT6_10_10_10_2_UINT"/>
-       <value value="0x3b" name="FMT6_10_10_10_2_SINT"/>
-
-       <value value="0x42" name="FMT6_11_11_10_FLOAT"/>
-
-       <value value="0x43" name="FMT6_16_16_UNORM"/>
-       <value value="0x44" name="FMT6_16_16_SNORM"/>
-       <value value="0x45" name="FMT6_16_16_FLOAT"/>
-       <value value="0x46" name="FMT6_16_16_UINT"/>
-       <value value="0x47" name="FMT6_16_16_SINT"/>
-
-       <value value="0x48" name="FMT6_32_UNORM"/>
-       <value value="0x49" name="FMT6_32_SNORM"/>
-       <value value="0x4a" name="FMT6_32_FLOAT"/>
-       <value value="0x4b" name="FMT6_32_UINT"/>
-       <value value="0x4c" name="FMT6_32_SINT"/>
-       <value value="0x4d" name="FMT6_32_FIXED"/>
-
-       <value value="0x58" name="FMT6_16_16_16_UNORM"/>
-       <value value="0x59" name="FMT6_16_16_16_SNORM"/>
-       <value value="0x5a" name="FMT6_16_16_16_FLOAT"/>
-       <value value="0x5b" name="FMT6_16_16_16_UINT"/>
-       <value value="0x5c" name="FMT6_16_16_16_SINT"/>
-
-       <value value="0x60" name="FMT6_16_16_16_16_UNORM"/>
-       <value value="0x61" name="FMT6_16_16_16_16_SNORM"/>
-       <value value="0x62" name="FMT6_16_16_16_16_FLOAT"/>
-       <value value="0x63" name="FMT6_16_16_16_16_UINT"/>
-       <value value="0x64" name="FMT6_16_16_16_16_SINT"/>
-
-       <value value="0x65" name="FMT6_32_32_UNORM"/>
-       <value value="0x66" name="FMT6_32_32_SNORM"/>
-       <value value="0x67" name="FMT6_32_32_FLOAT"/>
-       <value value="0x68" name="FMT6_32_32_UINT"/>
-       <value value="0x69" name="FMT6_32_32_SINT"/>
-       <value value="0x6a" name="FMT6_32_32_FIXED"/>
-
-       <value value="0x70" name="FMT6_32_32_32_UNORM"/>
-       <value value="0x71" name="FMT6_32_32_32_SNORM"/>
-       <value value="0x72" name="FMT6_32_32_32_UINT"/>
-       <value value="0x73" name="FMT6_32_32_32_SINT"/>
-       <value value="0x74" name="FMT6_32_32_32_FLOAT"/>
-       <value value="0x75" name="FMT6_32_32_32_FIXED"/>
-
-       <value value="0x80" name="FMT6_32_32_32_32_UNORM"/>
-       <value value="0x81" name="FMT6_32_32_32_32_SNORM"/>
-       <value value="0x82" name="FMT6_32_32_32_32_FLOAT"/>
-       <value value="0x83" name="FMT6_32_32_32_32_UINT"/>
-       <value value="0x84" name="FMT6_32_32_32_32_SINT"/>
-       <value value="0x85" name="FMT6_32_32_32_32_FIXED"/>
-
-       <value value="0x8c" name="FMT6_G8R8B8R8_422_UNORM"/>
-       <value value="0x8d" name="FMT6_R8G8R8B8_422_UNORM"/>
-       <value value="0x8e" name="FMT6_R8_G8B8_2PLANE_420_UNORM"/>
-       <value value="0x90" name="FMT6_R8_G8_B8_3PLANE_420_UNORM"/>
-
-       <value value="0x91" name="FMT6_Z24_UNORM_S8_UINT_AS_R8G8B8A8"/>
-
-       <!-- used with the Y plane of FMT6_R8_G8B8_2PLANE_420_UNORM
-            which has different UBWC compression from regular 8_UNORM format -->
-       <value value="0x94" name="FMT6_8_PLANE_UNORM"/>
-
-       <value value="0xa0" name="FMT6_Z24_UNORM_S8_UINT"/>
-
-       <value value="0xab" name="FMT6_ETC2_RG11_UNORM"/>
-       <value value="0xac" name="FMT6_ETC2_RG11_SNORM"/>
-       <value value="0xad" name="FMT6_ETC2_R11_UNORM"/>
-       <value value="0xae" name="FMT6_ETC2_R11_SNORM"/>
-       <value value="0xaf" name="FMT6_ETC1"/>
-       <value value="0xb0" name="FMT6_ETC2_RGB8"/>
-       <value value="0xb1" name="FMT6_ETC2_RGBA8"/>
-       <value value="0xb2" name="FMT6_ETC2_RGB8A1"/>
-       <value value="0xb3" name="FMT6_DXT1"/>
-       <value value="0xb4" name="FMT6_DXT3"/>
-       <value value="0xb5" name="FMT6_DXT5"/>
-       <value value="0xb7" name="FMT6_RGTC1_UNORM"/>
-       <value value="0xb8" name="FMT6_RGTC1_SNORM"/>
-       <value value="0xbb" name="FMT6_RGTC2_UNORM"/>
-       <value value="0xbc" name="FMT6_RGTC2_SNORM"/>
-       <value value="0xbe" name="FMT6_BPTC_UFLOAT"/>
-       <value value="0xbf" name="FMT6_BPTC_FLOAT"/>
-       <value value="0xc0" name="FMT6_BPTC"/>
-       <value value="0xc1" name="FMT6_ASTC_4x4"/>
-       <value value="0xc2" name="FMT6_ASTC_5x4"/>
-       <value value="0xc3" name="FMT6_ASTC_5x5"/>
-       <value value="0xc4" name="FMT6_ASTC_6x5"/>
-       <value value="0xc5" name="FMT6_ASTC_6x6"/>
-       <value value="0xc6" name="FMT6_ASTC_8x5"/>
-       <value value="0xc7" name="FMT6_ASTC_8x6"/>
-       <value value="0xc8" name="FMT6_ASTC_8x8"/>
-       <value value="0xc9" name="FMT6_ASTC_10x5"/>
-       <value value="0xca" name="FMT6_ASTC_10x6"/>
-       <value value="0xcb" name="FMT6_ASTC_10x8"/>
-       <value value="0xcc" name="FMT6_ASTC_10x10"/>
-       <value value="0xcd" name="FMT6_ASTC_12x10"/>
-       <value value="0xce" name="FMT6_ASTC_12x12"/>
-
-       <!-- same as X8Z24_UNORM but for sampling stencil (integer, 2nd channel) -->
-       <value value="0xea" name="FMT6_S8Z24_UINT"/>
-
-       <!-- Not a hw enum, used internally in driver -->
-       <value value="0xff" name="FMT6_NONE"/>
-
-</enum>
-
-<!-- probably same as a5xx -->
-<enum name="a6xx_polygon_mode">
-       <value name="POLYMODE6_POINTS" value="1"/>
-       <value name="POLYMODE6_LINES" value="2"/>
-       <value name="POLYMODE6_TRIANGLES" value="3"/>
-</enum>
-
-<enum name="a6xx_depth_format">
-       <value name="DEPTH6_NONE" value="0"/>
-       <value name="DEPTH6_16" value="1"/>
-       <value name="DEPTH6_24_8" value="2"/>
-       <value name="DEPTH6_32" value="4"/>
-</enum>
-
-<bitset name="a6x_cp_protect" inline="yes">
-       <bitfield name="BASE_ADDR" low="0" high="17"/>
-       <bitfield name="MASK_LEN" low="18" high="30"/>
-       <bitfield name="READ" pos="31" type="boolean"/>
-</bitset>
-
-<enum name="a6xx_shader_id">
-       <value value="0x9" name="A6XX_TP0_TMO_DATA"/>
-       <value value="0xa" name="A6XX_TP0_SMO_DATA"/>
-       <value value="0xb" name="A6XX_TP0_MIPMAP_BASE_DATA"/>
-       <value value="0x19" name="A6XX_TP1_TMO_DATA"/>
-       <value value="0x1a" name="A6XX_TP1_SMO_DATA"/>
-       <value value="0x1b" name="A6XX_TP1_MIPMAP_BASE_DATA"/>
-       <value value="0x29" name="A6XX_SP_INST_DATA"/>
-       <value value="0x2a" name="A6XX_SP_LB_0_DATA"/>
-       <value value="0x2b" name="A6XX_SP_LB_1_DATA"/>
-       <value value="0x2c" name="A6XX_SP_LB_2_DATA"/>
-       <value value="0x2d" name="A6XX_SP_LB_3_DATA"/>
-       <value value="0x2e" name="A6XX_SP_LB_4_DATA"/>
-       <value value="0x2f" name="A6XX_SP_LB_5_DATA"/>
-       <value value="0x30" name="A6XX_SP_CB_BINDLESS_DATA"/>
-       <value value="0x31" name="A6XX_SP_CB_LEGACY_DATA"/>
-       <value value="0x32" name="A6XX_SP_UAV_DATA"/>
-       <value value="0x33" name="A6XX_SP_INST_TAG"/>
-       <value value="0x34" name="A6XX_SP_CB_BINDLESS_TAG"/>
-       <value value="0x35" name="A6XX_SP_TMO_UMO_TAG"/>
-       <value value="0x36" name="A6XX_SP_SMO_TAG"/>
-       <value value="0x37" name="A6XX_SP_STATE_DATA"/>
-       <value value="0x49" name="A6XX_HLSQ_CHUNK_CVS_RAM"/>
-       <value value="0x4a" name="A6XX_HLSQ_CHUNK_CPS_RAM"/>
-       <value value="0x4b" name="A6XX_HLSQ_CHUNK_CVS_RAM_TAG"/>
-       <value value="0x4c" name="A6XX_HLSQ_CHUNK_CPS_RAM_TAG"/>
-       <value value="0x4d" name="A6XX_HLSQ_ICB_CVS_CB_BASE_TAG"/>
-       <value value="0x4e" name="A6XX_HLSQ_ICB_CPS_CB_BASE_TAG"/>
-       <value value="0x50" name="A6XX_HLSQ_CVS_MISC_RAM"/>
-       <value value="0x51" name="A6XX_HLSQ_CPS_MISC_RAM"/>
-       <value value="0x52" name="A6XX_HLSQ_INST_RAM"/>
-       <value value="0x53" name="A6XX_HLSQ_GFX_CVS_CONST_RAM"/>
-       <value value="0x54" name="A6XX_HLSQ_GFX_CPS_CONST_RAM"/>
-       <value value="0x55" name="A6XX_HLSQ_CVS_MISC_RAM_TAG"/>
-       <value value="0x56" name="A6XX_HLSQ_CPS_MISC_RAM_TAG"/>
-       <value value="0x57" name="A6XX_HLSQ_INST_RAM_TAG"/>
-       <value value="0x58" name="A6XX_HLSQ_GFX_CVS_CONST_RAM_TAG"/>
-       <value value="0x59" name="A6XX_HLSQ_GFX_CPS_CONST_RAM_TAG"/>
-       <value value="0x5a" name="A6XX_HLSQ_PWR_REST_RAM"/>
-       <value value="0x5b" name="A6XX_HLSQ_PWR_REST_TAG"/>
-       <value value="0x60" name="A6XX_HLSQ_DATAPATH_META"/>
-       <value value="0x61" name="A6XX_HLSQ_FRONTEND_META"/>
-       <value value="0x62" name="A6XX_HLSQ_INDIRECT_META"/>
-       <value value="0x63" name="A6XX_HLSQ_BACKEND_META"/>
-</enum>
-
-<enum name="a6xx_debugbus_id">
-       <value value="0x1" name="A6XX_DBGBUS_CP"/>
-       <value value="0x2" name="A6XX_DBGBUS_RBBM"/>
-       <value value="0x3" name="A6XX_DBGBUS_VBIF"/>
-       <value value="0x4" name="A6XX_DBGBUS_HLSQ"/>
-       <value value="0x5" name="A6XX_DBGBUS_UCHE"/>
-       <value value="0x6" name="A6XX_DBGBUS_DPM"/>
-       <value value="0x7" name="A6XX_DBGBUS_TESS"/>
-       <value value="0x8" name="A6XX_DBGBUS_PC"/>
-       <value value="0x9" name="A6XX_DBGBUS_VFDP"/>
-       <value value="0xa" name="A6XX_DBGBUS_VPC"/>
-       <value value="0xb" name="A6XX_DBGBUS_TSE"/>
-       <value value="0xc" name="A6XX_DBGBUS_RAS"/>
-       <value value="0xd" name="A6XX_DBGBUS_VSC"/>
-       <value value="0xe" name="A6XX_DBGBUS_COM"/>
-       <value value="0x10" name="A6XX_DBGBUS_LRZ"/>
-       <value value="0x11" name="A6XX_DBGBUS_A2D"/>
-       <value value="0x12" name="A6XX_DBGBUS_CCUFCHE"/>
-       <value value="0x13" name="A6XX_DBGBUS_GMU_CX"/>
-       <value value="0x14" name="A6XX_DBGBUS_RBP"/>
-       <value value="0x15" name="A6XX_DBGBUS_DCS"/>
-       <value value="0x16" name="A6XX_DBGBUS_DBGC"/>
-       <value value="0x17" name="A6XX_DBGBUS_CX"/>
-       <value value="0x18" name="A6XX_DBGBUS_GMU_GX"/>
-       <value value="0x19" name="A6XX_DBGBUS_TPFCHE"/>
-       <value value="0x1a" name="A6XX_DBGBUS_GBIF_GX"/>
-       <value value="0x1d" name="A6XX_DBGBUS_GPC"/>
-       <value value="0x1e" name="A6XX_DBGBUS_LARC"/>
-       <value value="0x1f" name="A6XX_DBGBUS_HLSQ_SPTP"/>
-       <value value="0x20" name="A6XX_DBGBUS_RB_0"/>
-       <value value="0x21" name="A6XX_DBGBUS_RB_1"/>
-       <value value="0x24" name="A6XX_DBGBUS_UCHE_WRAPPER"/>
-       <value value="0x28" name="A6XX_DBGBUS_CCU_0"/>
-       <value value="0x29" name="A6XX_DBGBUS_CCU_1"/>
-       <value value="0x38" name="A6XX_DBGBUS_VFD_0"/>
-       <value value="0x39" name="A6XX_DBGBUS_VFD_1"/>
-       <value value="0x3a" name="A6XX_DBGBUS_VFD_2"/>
-       <value value="0x3b" name="A6XX_DBGBUS_VFD_3"/>
-       <value value="0x40" name="A6XX_DBGBUS_SP_0"/>
-       <value value="0x41" name="A6XX_DBGBUS_SP_1"/>
-       <value value="0x48" name="A6XX_DBGBUS_TPL1_0"/>
-       <value value="0x49" name="A6XX_DBGBUS_TPL1_1"/>
-       <value value="0x4a" name="A6XX_DBGBUS_TPL1_2"/>
-       <value value="0x4b" name="A6XX_DBGBUS_TPL1_3"/>
-</enum>
-
-<enum name="a6xx_cp_perfcounter_select">
-       <value value="0" name="PERF_CP_ALWAYS_COUNT"/>
-       <value value="1" name="PERF_CP_BUSY_GFX_CORE_IDLE"/>
-       <value value="2" name="PERF_CP_BUSY_CYCLES"/>
-       <value value="3" name="PERF_CP_NUM_PREEMPTIONS"/>
-       <value value="4" name="PERF_CP_PREEMPTION_REACTION_DELAY"/>
-       <value value="5" name="PERF_CP_PREEMPTION_SWITCH_OUT_TIME"/>
-       <value value="6" name="PERF_CP_PREEMPTION_SWITCH_IN_TIME"/>
-       <value value="7" name="PERF_CP_DEAD_DRAWS_IN_BIN_RENDER"/>
-       <value value="8" name="PERF_CP_PREDICATED_DRAWS_KILLED"/>
-       <value value="9" name="PERF_CP_MODE_SWITCH"/>
-       <value value="10" name="PERF_CP_ZPASS_DONE"/>
-       <value value="11" name="PERF_CP_CONTEXT_DONE"/>
-       <value value="12" name="PERF_CP_CACHE_FLUSH"/>
-       <value value="13" name="PERF_CP_LONG_PREEMPTIONS"/>
-       <value value="14" name="PERF_CP_SQE_I_CACHE_STARVE"/>
-       <value value="15" name="PERF_CP_SQE_IDLE"/>
-       <value value="16" name="PERF_CP_SQE_PM4_STARVE_RB_IB"/>
-       <value value="17" name="PERF_CP_SQE_PM4_STARVE_SDS"/>
-       <value value="18" name="PERF_CP_SQE_MRB_STARVE"/>
-       <value value="19" name="PERF_CP_SQE_RRB_STARVE"/>
-       <value value="20" name="PERF_CP_SQE_VSD_STARVE"/>
-       <value value="21" name="PERF_CP_VSD_DECODE_STARVE"/>
-       <value value="22" name="PERF_CP_SQE_PIPE_OUT_STALL"/>
-       <value value="23" name="PERF_CP_SQE_SYNC_STALL"/>
-       <value value="24" name="PERF_CP_SQE_PM4_WFI_STALL"/>
-       <value value="25" name="PERF_CP_SQE_SYS_WFI_STALL"/>
-       <value value="26" name="PERF_CP_SQE_T4_EXEC"/>
-       <value value="27" name="PERF_CP_SQE_LOAD_STATE_EXEC"/>
-       <value value="28" name="PERF_CP_SQE_SAVE_SDS_STATE"/>
-       <value value="29" name="PERF_CP_SQE_DRAW_EXEC"/>
-       <value value="30" name="PERF_CP_SQE_CTXT_REG_BUNCH_EXEC"/>
-       <value value="31" name="PERF_CP_SQE_EXEC_PROFILED"/>
-       <value value="32" name="PERF_CP_MEMORY_POOL_EMPTY"/>
-       <value value="33" name="PERF_CP_MEMORY_POOL_SYNC_STALL"/>
-       <value value="34" name="PERF_CP_MEMORY_POOL_ABOVE_THRESH"/>
-       <value value="35" name="PERF_CP_AHB_WR_STALL_PRE_DRAWS"/>
-       <value value="36" name="PERF_CP_AHB_STALL_SQE_GMU"/>
-       <value value="37" name="PERF_CP_AHB_STALL_SQE_WR_OTHER"/>
-       <value value="38" name="PERF_CP_AHB_STALL_SQE_RD_OTHER"/>
-       <value value="39" name="PERF_CP_CLUSTER0_EMPTY"/>
-       <value value="40" name="PERF_CP_CLUSTER1_EMPTY"/>
-       <value value="41" name="PERF_CP_CLUSTER2_EMPTY"/>
-       <value value="42" name="PERF_CP_CLUSTER3_EMPTY"/>
-       <value value="43" name="PERF_CP_CLUSTER4_EMPTY"/>
-       <value value="44" name="PERF_CP_CLUSTER5_EMPTY"/>
-       <value value="45" name="PERF_CP_PM4_DATA"/>
-       <value value="46" name="PERF_CP_PM4_HEADERS"/>
-       <value value="47" name="PERF_CP_VBIF_READ_BEATS"/>
-       <value value="48" name="PERF_CP_VBIF_WRITE_BEATS"/>
-       <value value="49" name="PERF_CP_SQE_INSTR_COUNTER"/>
-</enum>
-
-<enum name="a6xx_rbbm_perfcounter_select">
-       <value value="0" name="PERF_RBBM_ALWAYS_COUNT"/>
-       <value value="1" name="PERF_RBBM_ALWAYS_ON"/>
-       <value value="2" name="PERF_RBBM_TSE_BUSY"/>
-       <value value="3" name="PERF_RBBM_RAS_BUSY"/>
-       <value value="4" name="PERF_RBBM_PC_DCALL_BUSY"/>
-       <value value="5" name="PERF_RBBM_PC_VSD_BUSY"/>
-       <value value="6" name="PERF_RBBM_STATUS_MASKED"/>
-       <value value="7" name="PERF_RBBM_COM_BUSY"/>
-       <value value="8" name="PERF_RBBM_DCOM_BUSY"/>
-       <value value="9" name="PERF_RBBM_VBIF_BUSY"/>
-       <value value="10" name="PERF_RBBM_VSC_BUSY"/>
-       <value value="11" name="PERF_RBBM_TESS_BUSY"/>
-       <value value="12" name="PERF_RBBM_UCHE_BUSY"/>
-       <value value="13" name="PERF_RBBM_HLSQ_BUSY"/>
-</enum>
-
-<enum name="a6xx_pc_perfcounter_select">
-       <value value="0" name="PERF_PC_BUSY_CYCLES"/>
-       <value value="1" name="PERF_PC_WORKING_CYCLES"/>
-       <value value="2" name="PERF_PC_STALL_CYCLES_VFD"/>
-       <value value="3" name="PERF_PC_STALL_CYCLES_TSE"/>
-       <value value="4" name="PERF_PC_STALL_CYCLES_VPC"/>
-       <value value="5" name="PERF_PC_STALL_CYCLES_UCHE"/>
-       <value value="6" name="PERF_PC_STALL_CYCLES_TESS"/>
-       <value value="7" name="PERF_PC_STALL_CYCLES_TSE_ONLY"/>
-       <value value="8" name="PERF_PC_STALL_CYCLES_VPC_ONLY"/>
-       <value value="9" name="PERF_PC_PASS1_TF_STALL_CYCLES"/>
-       <value value="10" name="PERF_PC_STARVE_CYCLES_FOR_INDEX"/>
-       <value value="11" name="PERF_PC_STARVE_CYCLES_FOR_TESS_FACTOR"/>
-       <value value="12" name="PERF_PC_STARVE_CYCLES_FOR_VIZ_STREAM"/>
-       <value value="13" name="PERF_PC_STARVE_CYCLES_FOR_POSITION"/>
-       <value value="14" name="PERF_PC_STARVE_CYCLES_DI"/>
-       <value value="15" name="PERF_PC_VIS_STREAMS_LOADED"/>
-       <value value="16" name="PERF_PC_INSTANCES"/>
-       <value value="17" name="PERF_PC_VPC_PRIMITIVES"/>
-       <value value="18" name="PERF_PC_DEAD_PRIM"/>
-       <value value="19" name="PERF_PC_LIVE_PRIM"/>
-       <value value="20" name="PERF_PC_VERTEX_HITS"/>
-       <value value="21" name="PERF_PC_IA_VERTICES"/>
-       <value value="22" name="PERF_PC_IA_PRIMITIVES"/>
-       <value value="23" name="PERF_PC_GS_PRIMITIVES"/>
-       <value value="24" name="PERF_PC_HS_INVOCATIONS"/>
-       <value value="25" name="PERF_PC_DS_INVOCATIONS"/>
-       <value value="26" name="PERF_PC_VS_INVOCATIONS"/>
-       <value value="27" name="PERF_PC_GS_INVOCATIONS"/>
-       <value value="28" name="PERF_PC_DS_PRIMITIVES"/>
-       <value value="29" name="PERF_PC_VPC_POS_DATA_TRANSACTION"/>
-       <value value="30" name="PERF_PC_3D_DRAWCALLS"/>
-       <value value="31" name="PERF_PC_2D_DRAWCALLS"/>
-       <value value="32" name="PERF_PC_NON_DRAWCALL_GLOBAL_EVENTS"/>
-       <value value="33" name="PERF_TESS_BUSY_CYCLES"/>
-       <value value="34" name="PERF_TESS_WORKING_CYCLES"/>
-       <value value="35" name="PERF_TESS_STALL_CYCLES_PC"/>
-       <value value="36" name="PERF_TESS_STARVE_CYCLES_PC"/>
-       <value value="37" name="PERF_PC_TSE_TRANSACTION"/>
-       <value value="38" name="PERF_PC_TSE_VERTEX"/>
-       <value value="39" name="PERF_PC_TESS_PC_UV_TRANS"/>
-       <value value="40" name="PERF_PC_TESS_PC_UV_PATCHES"/>
-       <value value="41" name="PERF_PC_TESS_FACTOR_TRANS"/>
-</enum>
-
-<enum name="a6xx_vfd_perfcounter_select">
-       <value value="0" name="PERF_VFD_BUSY_CYCLES"/>
-       <value value="1" name="PERF_VFD_STALL_CYCLES_UCHE"/>
-       <value value="2" name="PERF_VFD_STALL_CYCLES_VPC_ALLOC"/>
-       <value value="3" name="PERF_VFD_STALL_CYCLES_SP_INFO"/>
-       <value value="4" name="PERF_VFD_STALL_CYCLES_SP_ATTR"/>
-       <value value="5" name="PERF_VFD_STARVE_CYCLES_UCHE"/>
-       <value value="6" name="PERF_VFD_RBUFFER_FULL"/>
-       <value value="7" name="PERF_VFD_ATTR_INFO_FIFO_FULL"/>
-       <value value="8" name="PERF_VFD_DECODED_ATTRIBUTE_BYTES"/>
-       <value value="9" name="PERF_VFD_NUM_ATTRIBUTES"/>
-       <value value="10" name="PERF_VFD_UPPER_SHADER_FIBERS"/>
-       <value value="11" name="PERF_VFD_LOWER_SHADER_FIBERS"/>
-       <value value="12" name="PERF_VFD_MODE_0_FIBERS"/>
-       <value value="13" name="PERF_VFD_MODE_1_FIBERS"/>
-       <value value="14" name="PERF_VFD_MODE_2_FIBERS"/>
-       <value value="15" name="PERF_VFD_MODE_3_FIBERS"/>
-       <value value="16" name="PERF_VFD_MODE_4_FIBERS"/>
-       <value value="17" name="PERF_VFD_TOTAL_VERTICES"/>
-       <value value="18" name="PERF_VFDP_STALL_CYCLES_VFD"/>
-       <value value="19" name="PERF_VFDP_STALL_CYCLES_VFD_INDEX"/>
-       <value value="20" name="PERF_VFDP_STALL_CYCLES_VFD_PROG"/>
-       <value value="21" name="PERF_VFDP_STARVE_CYCLES_PC"/>
-       <value value="22" name="PERF_VFDP_VS_STAGE_WAVES"/>
-</enum>
-
-<enum name="a6xx_hlsq_perfcounter_select">
-       <value value="0" name="PERF_HLSQ_BUSY_CYCLES"/>
-       <value value="1" name="PERF_HLSQ_STALL_CYCLES_UCHE"/>
-       <value value="2" name="PERF_HLSQ_STALL_CYCLES_SP_STATE"/>
-       <value value="3" name="PERF_HLSQ_STALL_CYCLES_SP_FS_STAGE"/>
-       <value value="4" name="PERF_HLSQ_UCHE_LATENCY_CYCLES"/>
-       <value value="5" name="PERF_HLSQ_UCHE_LATENCY_COUNT"/>
-       <value value="6" name="PERF_HLSQ_FS_STAGE_1X_WAVES"/>
-       <value value="7" name="PERF_HLSQ_FS_STAGE_2X_WAVES"/>
-       <value value="8" name="PERF_HLSQ_QUADS"/>
-       <value value="9" name="PERF_HLSQ_CS_INVOCATIONS"/>
-       <value value="10" name="PERF_HLSQ_COMPUTE_DRAWCALLS"/>
-       <value value="11" name="PERF_HLSQ_FS_DATA_WAIT_PROGRAMMING"/>
-       <value value="12" name="PERF_HLSQ_DUAL_FS_PROG_ACTIVE"/>
-       <value value="13" name="PERF_HLSQ_DUAL_VS_PROG_ACTIVE"/>
-       <value value="14" name="PERF_HLSQ_FS_BATCH_COUNT_ZERO"/>
-       <value value="15" name="PERF_HLSQ_VS_BATCH_COUNT_ZERO"/>
-       <value value="16" name="PERF_HLSQ_WAVE_PENDING_NO_QUAD"/>
-       <value value="17" name="PERF_HLSQ_WAVE_PENDING_NO_PRIM_BASE"/>
-       <value value="18" name="PERF_HLSQ_STALL_CYCLES_VPC"/>
-       <value value="19" name="PERF_HLSQ_PIXELS"/>
-       <value value="20" name="PERF_HLSQ_DRAW_MODE_SWITCH_VSFS_SYNC"/>
-</enum>
-
-<enum name="a6xx_vpc_perfcounter_select">
-       <value value="0" name="PERF_VPC_BUSY_CYCLES"/>
-       <value value="1" name="PERF_VPC_WORKING_CYCLES"/>
-       <value value="2" name="PERF_VPC_STALL_CYCLES_UCHE"/>
-       <value value="3" name="PERF_VPC_STALL_CYCLES_VFD_WACK"/>
-       <value value="4" name="PERF_VPC_STALL_CYCLES_HLSQ_PRIM_ALLOC"/>
-       <value value="5" name="PERF_VPC_STALL_CYCLES_PC"/>
-       <value value="6" name="PERF_VPC_STALL_CYCLES_SP_LM"/>
-       <value value="7" name="PERF_VPC_STARVE_CYCLES_SP"/>
-       <value value="8" name="PERF_VPC_STARVE_CYCLES_LRZ"/>
-       <value value="9" name="PERF_VPC_PC_PRIMITIVES"/>
-       <value value="10" name="PERF_VPC_SP_COMPONENTS"/>
-       <value value="11" name="PERF_VPC_STALL_CYCLES_VPCRAM_POS"/>
-       <value value="12" name="PERF_VPC_LRZ_ASSIGN_PRIMITIVES"/>
-       <value value="13" name="PERF_VPC_RB_VISIBLE_PRIMITIVES"/>
-       <value value="14" name="PERF_VPC_LM_TRANSACTION"/>
-       <value value="15" name="PERF_VPC_STREAMOUT_TRANSACTION"/>
-       <value value="16" name="PERF_VPC_VS_BUSY_CYCLES"/>
-       <value value="17" name="PERF_VPC_PS_BUSY_CYCLES"/>
-       <value value="18" name="PERF_VPC_VS_WORKING_CYCLES"/>
-       <value value="19" name="PERF_VPC_PS_WORKING_CYCLES"/>
-       <value value="20" name="PERF_VPC_STARVE_CYCLES_RB"/>
-       <value value="21" name="PERF_VPC_NUM_VPCRAM_READ_POS"/>
-       <value value="22" name="PERF_VPC_WIT_FULL_CYCLES"/>
-       <value value="23" name="PERF_VPC_VPCRAM_FULL_CYCLES"/>
-       <value value="24" name="PERF_VPC_LM_FULL_WAIT_FOR_INTP_END"/>
-       <value value="25" name="PERF_VPC_NUM_VPCRAM_WRITE"/>
-       <value value="26" name="PERF_VPC_NUM_VPCRAM_READ_SO"/>
-       <value value="27" name="PERF_VPC_NUM_ATTR_REQ_LM"/>
-</enum>
-
-<enum name="a6xx_tse_perfcounter_select">
-       <value value="0" name="PERF_TSE_BUSY_CYCLES"/>
-       <value value="1" name="PERF_TSE_CLIPPING_CYCLES"/>
-       <value value="2" name="PERF_TSE_STALL_CYCLES_RAS"/>
-       <value value="3" name="PERF_TSE_STALL_CYCLES_LRZ_BARYPLANE"/>
-       <value value="4" name="PERF_TSE_STALL_CYCLES_LRZ_ZPLANE"/>
-       <value value="5" name="PERF_TSE_STARVE_CYCLES_PC"/>
-       <value value="6" name="PERF_TSE_INPUT_PRIM"/>
-       <value value="7" name="PERF_TSE_INPUT_NULL_PRIM"/>
-       <value value="8" name="PERF_TSE_TRIVAL_REJ_PRIM"/>
-       <value value="9" name="PERF_TSE_CLIPPED_PRIM"/>
-       <value value="10" name="PERF_TSE_ZERO_AREA_PRIM"/>
-       <value value="11" name="PERF_TSE_FACENESS_CULLED_PRIM"/>
-       <value value="12" name="PERF_TSE_ZERO_PIXEL_PRIM"/>
-       <value value="13" name="PERF_TSE_OUTPUT_NULL_PRIM"/>
-       <value value="14" name="PERF_TSE_OUTPUT_VISIBLE_PRIM"/>
-       <value value="15" name="PERF_TSE_CINVOCATION"/>
-       <value value="16" name="PERF_TSE_CPRIMITIVES"/>
-       <value value="17" name="PERF_TSE_2D_INPUT_PRIM"/>
-       <value value="18" name="PERF_TSE_2D_ALIVE_CYCLES"/>
-       <value value="19" name="PERF_TSE_CLIP_PLANES"/>
-</enum>
-
-<enum name="a6xx_ras_perfcounter_select">
-       <value value="0" name="PERF_RAS_BUSY_CYCLES"/>
-       <value value="1" name="PERF_RAS_SUPERTILE_ACTIVE_CYCLES"/>
-       <value value="2" name="PERF_RAS_STALL_CYCLES_LRZ"/>
-       <value value="3" name="PERF_RAS_STARVE_CYCLES_TSE"/>
-       <value value="4" name="PERF_RAS_SUPER_TILES"/>
-       <value value="5" name="PERF_RAS_8X4_TILES"/>
-       <value value="6" name="PERF_RAS_MASKGEN_ACTIVE"/>
-       <value value="7" name="PERF_RAS_FULLY_COVERED_SUPER_TILES"/>
-       <value value="8" name="PERF_RAS_FULLY_COVERED_8X4_TILES"/>
-       <value value="9" name="PERF_RAS_PRIM_KILLED_INVISILBE"/>
-       <value value="10" name="PERF_RAS_SUPERTILE_GEN_ACTIVE_CYCLES"/>
-       <value value="11" name="PERF_RAS_LRZ_INTF_WORKING_CYCLES"/>
-       <value value="12" name="PERF_RAS_BLOCKS"/>
-</enum>
-
-<enum name="a6xx_uche_perfcounter_select">
-       <value value="0" name="PERF_UCHE_BUSY_CYCLES"/>
-       <value value="1" name="PERF_UCHE_STALL_CYCLES_ARBITER"/>
-       <value value="2" name="PERF_UCHE_VBIF_LATENCY_CYCLES"/>
-       <value value="3" name="PERF_UCHE_VBIF_LATENCY_SAMPLES"/>
-       <value value="4" name="PERF_UCHE_VBIF_READ_BEATS_TP"/>
-       <value value="5" name="PERF_UCHE_VBIF_READ_BEATS_VFD"/>
-       <value value="6" name="PERF_UCHE_VBIF_READ_BEATS_HLSQ"/>
-       <value value="7" name="PERF_UCHE_VBIF_READ_BEATS_LRZ"/>
-       <value value="8" name="PERF_UCHE_VBIF_READ_BEATS_SP"/>
-       <value value="9" name="PERF_UCHE_READ_REQUESTS_TP"/>
-       <value value="10" name="PERF_UCHE_READ_REQUESTS_VFD"/>
-       <value value="11" name="PERF_UCHE_READ_REQUESTS_HLSQ"/>
-       <value value="12" name="PERF_UCHE_READ_REQUESTS_LRZ"/>
-       <value value="13" name="PERF_UCHE_READ_REQUESTS_SP"/>
-       <value value="14" name="PERF_UCHE_WRITE_REQUESTS_LRZ"/>
-       <value value="15" name="PERF_UCHE_WRITE_REQUESTS_SP"/>
-       <value value="16" name="PERF_UCHE_WRITE_REQUESTS_VPC"/>
-       <value value="17" name="PERF_UCHE_WRITE_REQUESTS_VSC"/>
-       <value value="18" name="PERF_UCHE_EVICTS"/>
-       <value value="19" name="PERF_UCHE_BANK_REQ0"/>
-       <value value="20" name="PERF_UCHE_BANK_REQ1"/>
-       <value value="21" name="PERF_UCHE_BANK_REQ2"/>
-       <value value="22" name="PERF_UCHE_BANK_REQ3"/>
-       <value value="23" name="PERF_UCHE_BANK_REQ4"/>
-       <value value="24" name="PERF_UCHE_BANK_REQ5"/>
-       <value value="25" name="PERF_UCHE_BANK_REQ6"/>
-       <value value="26" name="PERF_UCHE_BANK_REQ7"/>
-       <value value="27" name="PERF_UCHE_VBIF_READ_BEATS_CH0"/>
-       <value value="28" name="PERF_UCHE_VBIF_READ_BEATS_CH1"/>
-       <value value="29" name="PERF_UCHE_GMEM_READ_BEATS"/>
-       <value value="30" name="PERF_UCHE_TPH_REF_FULL"/>
-       <value value="31" name="PERF_UCHE_TPH_VICTIM_FULL"/>
-       <value value="32" name="PERF_UCHE_TPH_EXT_FULL"/>
-       <value value="33" name="PERF_UCHE_VBIF_STALL_WRITE_DATA"/>
-       <value value="34" name="PERF_UCHE_DCMP_LATENCY_SAMPLES"/>
-       <value value="35" name="PERF_UCHE_DCMP_LATENCY_CYCLES"/>
-       <value value="36" name="PERF_UCHE_VBIF_READ_BEATS_PC"/>
-       <value value="37" name="PERF_UCHE_READ_REQUESTS_PC"/>
-       <value value="38" name="PERF_UCHE_RAM_READ_REQ"/>
-       <value value="39" name="PERF_UCHE_RAM_WRITE_REQ"/>
-</enum>
-
-<enum name="a6xx_tp_perfcounter_select">
-       <value value="0" name="PERF_TP_BUSY_CYCLES"/>
-       <value value="1" name="PERF_TP_STALL_CYCLES_UCHE"/>
-       <value value="2" name="PERF_TP_LATENCY_CYCLES"/>
-       <value value="3" name="PERF_TP_LATENCY_TRANS"/>
-       <value value="4" name="PERF_TP_FLAG_CACHE_REQUEST_SAMPLES"/>
-       <value value="5" name="PERF_TP_FLAG_CACHE_REQUEST_LATENCY"/>
-       <value value="6" name="PERF_TP_L1_CACHELINE_REQUESTS"/>
-       <value value="7" name="PERF_TP_L1_CACHELINE_MISSES"/>
-       <value value="8" name="PERF_TP_SP_TP_TRANS"/>
-       <value value="9" name="PERF_TP_TP_SP_TRANS"/>
-       <value value="10" name="PERF_TP_OUTPUT_PIXELS"/>
-       <value value="11" name="PERF_TP_FILTER_WORKLOAD_16BIT"/>
-       <value value="12" name="PERF_TP_FILTER_WORKLOAD_32BIT"/>
-       <value value="13" name="PERF_TP_QUADS_RECEIVED"/>
-       <value value="14" name="PERF_TP_QUADS_OFFSET"/>
-       <value value="15" name="PERF_TP_QUADS_SHADOW"/>
-       <value value="16" name="PERF_TP_QUADS_ARRAY"/>
-       <value value="17" name="PERF_TP_QUADS_GRADIENT"/>
-       <value value="18" name="PERF_TP_QUADS_1D"/>
-       <value value="19" name="PERF_TP_QUADS_2D"/>
-       <value value="20" name="PERF_TP_QUADS_BUFFER"/>
-       <value value="21" name="PERF_TP_QUADS_3D"/>
-       <value value="22" name="PERF_TP_QUADS_CUBE"/>
-       <value value="23" name="PERF_TP_DIVERGENT_QUADS_RECEIVED"/>
-       <value value="24" name="PERF_TP_PRT_NON_RESIDENT_EVENTS"/>
-       <value value="25" name="PERF_TP_OUTPUT_PIXELS_POINT"/>
-       <value value="26" name="PERF_TP_OUTPUT_PIXELS_BILINEAR"/>
-       <value value="27" name="PERF_TP_OUTPUT_PIXELS_MIP"/>
-       <value value="28" name="PERF_TP_OUTPUT_PIXELS_ANISO"/>
-       <value value="29" name="PERF_TP_OUTPUT_PIXELS_ZERO_LOD"/>
-       <value value="30" name="PERF_TP_FLAG_CACHE_REQUESTS"/>
-       <value value="31" name="PERF_TP_FLAG_CACHE_MISSES"/>
-       <value value="32" name="PERF_TP_L1_5_L2_REQUESTS"/>
-       <value value="33" name="PERF_TP_2D_OUTPUT_PIXELS"/>
-       <value value="34" name="PERF_TP_2D_OUTPUT_PIXELS_POINT"/>
-       <value value="35" name="PERF_TP_2D_OUTPUT_PIXELS_BILINEAR"/>
-       <value value="36" name="PERF_TP_2D_FILTER_WORKLOAD_16BIT"/>
-       <value value="37" name="PERF_TP_2D_FILTER_WORKLOAD_32BIT"/>
-       <value value="38" name="PERF_TP_TPA2TPC_TRANS"/>
-       <value value="39" name="PERF_TP_L1_MISSES_ASTC_1TILE"/>
-       <value value="40" name="PERF_TP_L1_MISSES_ASTC_2TILE"/>
-       <value value="41" name="PERF_TP_L1_MISSES_ASTC_4TILE"/>
-       <value value="42" name="PERF_TP_L1_5_L2_COMPRESS_REQS"/>
-       <value value="43" name="PERF_TP_L1_5_L2_COMPRESS_MISS"/>
-       <value value="44" name="PERF_TP_L1_BANK_CONFLICT"/>
-       <value value="45" name="PERF_TP_L1_5_MISS_LATENCY_CYCLES"/>
-       <value value="46" name="PERF_TP_L1_5_MISS_LATENCY_TRANS"/>
-       <value value="47" name="PERF_TP_QUADS_CONSTANT_MULTIPLIED"/>
-       <value value="48" name="PERF_TP_FRONTEND_WORKING_CYCLES"/>
-       <value value="49" name="PERF_TP_L1_TAG_WORKING_CYCLES"/>
-       <value value="50" name="PERF_TP_L1_DATA_WRITE_WORKING_CYCLES"/>
-       <value value="51" name="PERF_TP_PRE_L1_DECOM_WORKING_CYCLES"/>
-       <value value="52" name="PERF_TP_BACKEND_WORKING_CYCLES"/>
-       <value value="53" name="PERF_TP_FLAG_CACHE_WORKING_CYCLES"/>
-       <value value="54" name="PERF_TP_L1_5_CACHE_WORKING_CYCLES"/>
-       <value value="55" name="PERF_TP_STARVE_CYCLES_SP"/>
-       <value value="56" name="PERF_TP_STARVE_CYCLES_UCHE"/>
-</enum>
-
-<enum name="a6xx_sp_perfcounter_select">
-       <value value="0" name="PERF_SP_BUSY_CYCLES"/>
-       <value value="1" name="PERF_SP_ALU_WORKING_CYCLES"/>
-       <value value="2" name="PERF_SP_EFU_WORKING_CYCLES"/>
-       <value value="3" name="PERF_SP_STALL_CYCLES_VPC"/>
-       <value value="4" name="PERF_SP_STALL_CYCLES_TP"/>
-       <value value="5" name="PERF_SP_STALL_CYCLES_UCHE"/>
-       <value value="6" name="PERF_SP_STALL_CYCLES_RB"/>
-       <value value="7" name="PERF_SP_NON_EXECUTION_CYCLES"/>
-       <value value="8" name="PERF_SP_WAVE_CONTEXTS"/>
-       <value value="9" name="PERF_SP_WAVE_CONTEXT_CYCLES"/>
-       <value value="10" name="PERF_SP_FS_STAGE_WAVE_CYCLES"/>
-       <value value="11" name="PERF_SP_FS_STAGE_WAVE_SAMPLES"/>
-       <value value="12" name="PERF_SP_VS_STAGE_WAVE_CYCLES"/>
-       <value value="13" name="PERF_SP_VS_STAGE_WAVE_SAMPLES"/>
-       <value value="14" name="PERF_SP_FS_STAGE_DURATION_CYCLES"/>
-       <value value="15" name="PERF_SP_VS_STAGE_DURATION_CYCLES"/>
-       <value value="16" name="PERF_SP_WAVE_CTRL_CYCLES"/>
-       <value value="17" name="PERF_SP_WAVE_LOAD_CYCLES"/>
-       <value value="18" name="PERF_SP_WAVE_EMIT_CYCLES"/>
-       <value value="19" name="PERF_SP_WAVE_NOP_CYCLES"/>
-       <value value="20" name="PERF_SP_WAVE_WAIT_CYCLES"/>
-       <value value="21" name="PERF_SP_WAVE_FETCH_CYCLES"/>
-       <value value="22" name="PERF_SP_WAVE_IDLE_CYCLES"/>
-       <value value="23" name="PERF_SP_WAVE_END_CYCLES"/>
-       <value value="24" name="PERF_SP_WAVE_LONG_SYNC_CYCLES"/>
-       <value value="25" name="PERF_SP_WAVE_SHORT_SYNC_CYCLES"/>
-       <value value="26" name="PERF_SP_WAVE_JOIN_CYCLES"/>
-       <value value="27" name="PERF_SP_LM_LOAD_INSTRUCTIONS"/>
-       <value value="28" name="PERF_SP_LM_STORE_INSTRUCTIONS"/>
-       <value value="29" name="PERF_SP_LM_ATOMICS"/>
-       <value value="30" name="PERF_SP_GM_LOAD_INSTRUCTIONS"/>
-       <value value="31" name="PERF_SP_GM_STORE_INSTRUCTIONS"/>
-       <value value="32" name="PERF_SP_GM_ATOMICS"/>
-       <value value="33" name="PERF_SP_VS_STAGE_TEX_INSTRUCTIONS"/>
-       <value value="34" name="PERF_SP_VS_STAGE_EFU_INSTRUCTIONS"/>
-       <value value="35" name="PERF_SP_VS_STAGE_FULL_ALU_INSTRUCTIONS"/>
-       <value value="36" name="PERF_SP_VS_STAGE_HALF_ALU_INSTRUCTIONS"/>
-       <value value="37" name="PERF_SP_FS_STAGE_TEX_INSTRUCTIONS"/>
-       <value value="38" name="PERF_SP_FS_STAGE_CFLOW_INSTRUCTIONS"/>
-       <value value="39" name="PERF_SP_FS_STAGE_EFU_INSTRUCTIONS"/>
-       <value value="40" name="PERF_SP_FS_STAGE_FULL_ALU_INSTRUCTIONS"/>
-       <value value="41" name="PERF_SP_FS_STAGE_HALF_ALU_INSTRUCTIONS"/>
-       <value value="42" name="PERF_SP_FS_STAGE_BARY_INSTRUCTIONS"/>
-       <value value="43" name="PERF_SP_VS_INSTRUCTIONS"/>
-       <value value="44" name="PERF_SP_FS_INSTRUCTIONS"/>
-       <value value="45" name="PERF_SP_ADDR_LOCK_COUNT"/>
-       <value value="46" name="PERF_SP_UCHE_READ_TRANS"/>
-       <value value="47" name="PERF_SP_UCHE_WRITE_TRANS"/>
-       <value value="48" name="PERF_SP_EXPORT_VPC_TRANS"/>
-       <value value="49" name="PERF_SP_EXPORT_RB_TRANS"/>
-       <value value="50" name="PERF_SP_PIXELS_KILLED"/>
-       <value value="51" name="PERF_SP_ICL1_REQUESTS"/>
-       <value value="52" name="PERF_SP_ICL1_MISSES"/>
-       <value value="53" name="PERF_SP_HS_INSTRUCTIONS"/>
-       <value value="54" name="PERF_SP_DS_INSTRUCTIONS"/>
-       <value value="55" name="PERF_SP_GS_INSTRUCTIONS"/>
-       <value value="56" name="PERF_SP_CS_INSTRUCTIONS"/>
-       <value value="57" name="PERF_SP_GPR_READ"/>
-       <value value="58" name="PERF_SP_GPR_WRITE"/>
-       <value value="59" name="PERF_SP_FS_STAGE_HALF_EFU_INSTRUCTIONS"/>
-       <value value="60" name="PERF_SP_VS_STAGE_HALF_EFU_INSTRUCTIONS"/>
-       <value value="61" name="PERF_SP_LM_BANK_CONFLICTS"/>
-       <value value="62" name="PERF_SP_TEX_CONTROL_WORKING_CYCLES"/>
-       <value value="63" name="PERF_SP_LOAD_CONTROL_WORKING_CYCLES"/>
-       <value value="64" name="PERF_SP_FLOW_CONTROL_WORKING_CYCLES"/>
-       <value value="65" name="PERF_SP_LM_WORKING_CYCLES"/>
-       <value value="66" name="PERF_SP_DISPATCHER_WORKING_CYCLES"/>
-       <value value="67" name="PERF_SP_SEQUENCER_WORKING_CYCLES"/>
-       <value value="68" name="PERF_SP_LOW_EFFICIENCY_STARVED_BY_TP"/>
-       <value value="69" name="PERF_SP_STARVE_CYCLES_HLSQ"/>
-       <value value="70" name="PERF_SP_NON_EXECUTION_LS_CYCLES"/>
-       <value value="71" name="PERF_SP_WORKING_EU"/>
-       <value value="72" name="PERF_SP_ANY_EU_WORKING"/>
-       <value value="73" name="PERF_SP_WORKING_EU_FS_STAGE"/>
-       <value value="74" name="PERF_SP_ANY_EU_WORKING_FS_STAGE"/>
-       <value value="75" name="PERF_SP_WORKING_EU_VS_STAGE"/>
-       <value value="76" name="PERF_SP_ANY_EU_WORKING_VS_STAGE"/>
-       <value value="77" name="PERF_SP_WORKING_EU_CS_STAGE"/>
-       <value value="78" name="PERF_SP_ANY_EU_WORKING_CS_STAGE"/>
-       <value value="79" name="PERF_SP_GPR_READ_PREFETCH"/>
-       <value value="80" name="PERF_SP_GPR_READ_CONFLICT"/>
-       <value value="81" name="PERF_SP_GPR_WRITE_CONFLICT"/>
-       <value value="82" name="PERF_SP_GM_LOAD_LATENCY_CYCLES"/>
-       <value value="83" name="PERF_SP_GM_LOAD_LATENCY_SAMPLES"/>
-       <value value="84" name="PERF_SP_EXECUTABLE_WAVES"/>
-</enum>
-
-<enum name="a6xx_rb_perfcounter_select">
-       <value value="0" name="PERF_RB_BUSY_CYCLES"/>
-       <value value="1" name="PERF_RB_STALL_CYCLES_HLSQ"/>
-       <value value="2" name="PERF_RB_STALL_CYCLES_FIFO0_FULL"/>
-       <value value="3" name="PERF_RB_STALL_CYCLES_FIFO1_FULL"/>
-       <value value="4" name="PERF_RB_STALL_CYCLES_FIFO2_FULL"/>
-       <value value="5" name="PERF_RB_STARVE_CYCLES_SP"/>
-       <value value="6" name="PERF_RB_STARVE_CYCLES_LRZ_TILE"/>
-       <value value="7" name="PERF_RB_STARVE_CYCLES_CCU"/>
-       <value value="8" name="PERF_RB_STARVE_CYCLES_Z_PLANE"/>
-       <value value="9" name="PERF_RB_STARVE_CYCLES_BARY_PLANE"/>
-       <value value="10" name="PERF_RB_Z_WORKLOAD"/>
-       <value value="11" name="PERF_RB_HLSQ_ACTIVE"/>
-       <value value="12" name="PERF_RB_Z_READ"/>
-       <value value="13" name="PERF_RB_Z_WRITE"/>
-       <value value="14" name="PERF_RB_C_READ"/>
-       <value value="15" name="PERF_RB_C_WRITE"/>
-       <value value="16" name="PERF_RB_TOTAL_PASS"/>
-       <value value="17" name="PERF_RB_Z_PASS"/>
-       <value value="18" name="PERF_RB_Z_FAIL"/>
-       <value value="19" name="PERF_RB_S_FAIL"/>
-       <value value="20" name="PERF_RB_BLENDED_FXP_COMPONENTS"/>
-       <value value="21" name="PERF_RB_BLENDED_FP16_COMPONENTS"/>
-       <value value="22" name="PERF_RB_PS_INVOCATIONS"/>
-       <value value="23" name="PERF_RB_2D_ALIVE_CYCLES"/>
-       <value value="24" name="PERF_RB_2D_STALL_CYCLES_A2D"/>
-       <value value="25" name="PERF_RB_2D_STARVE_CYCLES_SRC"/>
-       <value value="26" name="PERF_RB_2D_STARVE_CYCLES_SP"/>
-       <value value="27" name="PERF_RB_2D_STARVE_CYCLES_DST"/>
-       <value value="28" name="PERF_RB_2D_VALID_PIXELS"/>
-       <value value="29" name="PERF_RB_3D_PIXELS"/>
-       <value value="30" name="PERF_RB_BLENDER_WORKING_CYCLES"/>
-       <value value="31" name="PERF_RB_ZPROC_WORKING_CYCLES"/>
-       <value value="32" name="PERF_RB_CPROC_WORKING_CYCLES"/>
-       <value value="33" name="PERF_RB_SAMPLER_WORKING_CYCLES"/>
-       <value value="34" name="PERF_RB_STALL_CYCLES_CCU_COLOR_READ"/>
-       <value value="35" name="PERF_RB_STALL_CYCLES_CCU_COLOR_WRITE"/>
-       <value value="36" name="PERF_RB_STALL_CYCLES_CCU_DEPTH_READ"/>
-       <value value="37" name="PERF_RB_STALL_CYCLES_CCU_DEPTH_WRITE"/>
-       <value value="38" name="PERF_RB_STALL_CYCLES_VPC"/>
-       <value value="39" name="PERF_RB_2D_INPUT_TRANS"/>
-       <value value="40" name="PERF_RB_2D_OUTPUT_RB_DST_TRANS"/>
-       <value value="41" name="PERF_RB_2D_OUTPUT_RB_SRC_TRANS"/>
-       <value value="42" name="PERF_RB_BLENDED_FP32_COMPONENTS"/>
-       <value value="43" name="PERF_RB_COLOR_PIX_TILES"/>
-       <value value="44" name="PERF_RB_STALL_CYCLES_CCU"/>
-       <value value="45" name="PERF_RB_EARLY_Z_ARB3_GRANT"/>
-       <value value="46" name="PERF_RB_LATE_Z_ARB3_GRANT"/>
-       <value value="47" name="PERF_RB_EARLY_Z_SKIP_GRANT"/>
-</enum>
-
-<enum name="a6xx_vsc_perfcounter_select">
-       <value value="0" name="PERF_VSC_BUSY_CYCLES"/>
-       <value value="1" name="PERF_VSC_WORKING_CYCLES"/>
-       <value value="2" name="PERF_VSC_STALL_CYCLES_UCHE"/>
-       <value value="3" name="PERF_VSC_EOT_NUM"/>
-       <value value="4" name="PERF_VSC_INPUT_TILES"/>
-</enum>
-
-<enum name="a6xx_ccu_perfcounter_select">
-       <value value="0" name="PERF_CCU_BUSY_CYCLES"/>
-       <value value="1" name="PERF_CCU_STALL_CYCLES_RB_DEPTH_RETURN"/>
-       <value value="2" name="PERF_CCU_STALL_CYCLES_RB_COLOR_RETURN"/>
-       <value value="3" name="PERF_CCU_STARVE_CYCLES_FLAG_RETURN"/>
-       <value value="4" name="PERF_CCU_DEPTH_BLOCKS"/>
-       <value value="5" name="PERF_CCU_COLOR_BLOCKS"/>
-       <value value="6" name="PERF_CCU_DEPTH_BLOCK_HIT"/>
-       <value value="7" name="PERF_CCU_COLOR_BLOCK_HIT"/>
-       <value value="8" name="PERF_CCU_PARTIAL_BLOCK_READ"/>
-       <value value="9" name="PERF_CCU_GMEM_READ"/>
-       <value value="10" name="PERF_CCU_GMEM_WRITE"/>
-       <value value="11" name="PERF_CCU_DEPTH_READ_FLAG0_COUNT"/>
-       <value value="12" name="PERF_CCU_DEPTH_READ_FLAG1_COUNT"/>
-       <value value="13" name="PERF_CCU_DEPTH_READ_FLAG2_COUNT"/>
-       <value value="14" name="PERF_CCU_DEPTH_READ_FLAG3_COUNT"/>
-       <value value="15" name="PERF_CCU_DEPTH_READ_FLAG4_COUNT"/>
-       <value value="16" name="PERF_CCU_DEPTH_READ_FLAG5_COUNT"/>
-       <value value="17" name="PERF_CCU_DEPTH_READ_FLAG6_COUNT"/>
-       <value value="18" name="PERF_CCU_DEPTH_READ_FLAG8_COUNT"/>
-       <value value="19" name="PERF_CCU_COLOR_READ_FLAG0_COUNT"/>
-       <value value="20" name="PERF_CCU_COLOR_READ_FLAG1_COUNT"/>
-       <value value="21" name="PERF_CCU_COLOR_READ_FLAG2_COUNT"/>
-       <value value="22" name="PERF_CCU_COLOR_READ_FLAG3_COUNT"/>
-       <value value="23" name="PERF_CCU_COLOR_READ_FLAG4_COUNT"/>
-       <value value="24" name="PERF_CCU_COLOR_READ_FLAG5_COUNT"/>
-       <value value="25" name="PERF_CCU_COLOR_READ_FLAG6_COUNT"/>
-       <value value="26" name="PERF_CCU_COLOR_READ_FLAG8_COUNT"/>
-       <value value="27" name="PERF_CCU_2D_RD_REQ"/>
-       <value value="28" name="PERF_CCU_2D_WR_REQ"/>
-</enum>
-
-<enum name="a6xx_lrz_perfcounter_select">
-       <value value="0" name="PERF_LRZ_BUSY_CYCLES"/>
-       <value value="1" name="PERF_LRZ_STARVE_CYCLES_RAS"/>
-       <value value="2" name="PERF_LRZ_STALL_CYCLES_RB"/>
-       <value value="3" name="PERF_LRZ_STALL_CYCLES_VSC"/>
-       <value value="4" name="PERF_LRZ_STALL_CYCLES_VPC"/>
-       <value value="5" name="PERF_LRZ_STALL_CYCLES_FLAG_PREFETCH"/>
-       <value value="6" name="PERF_LRZ_STALL_CYCLES_UCHE"/>
-       <value value="7" name="PERF_LRZ_LRZ_READ"/>
-       <value value="8" name="PERF_LRZ_LRZ_WRITE"/>
-       <value value="9" name="PERF_LRZ_READ_LATENCY"/>
-       <value value="10" name="PERF_LRZ_MERGE_CACHE_UPDATING"/>
-       <value value="11" name="PERF_LRZ_PRIM_KILLED_BY_MASKGEN"/>
-       <value value="12" name="PERF_LRZ_PRIM_KILLED_BY_LRZ"/>
-       <value value="13" name="PERF_LRZ_VISIBLE_PRIM_AFTER_LRZ"/>
-       <value value="14" name="PERF_LRZ_FULL_8X8_TILES"/>
-       <value value="15" name="PERF_LRZ_PARTIAL_8X8_TILES"/>
-       <value value="16" name="PERF_LRZ_TILE_KILLED"/>
-       <value value="17" name="PERF_LRZ_TOTAL_PIXEL"/>
-       <value value="18" name="PERF_LRZ_VISIBLE_PIXEL_AFTER_LRZ"/>
-       <value value="19" name="PERF_LRZ_FULLY_COVERED_TILES"/>
-       <value value="20" name="PERF_LRZ_PARTIAL_COVERED_TILES"/>
-       <value value="21" name="PERF_LRZ_FEEDBACK_ACCEPT"/>
-       <value value="22" name="PERF_LRZ_FEEDBACK_DISCARD"/>
-       <value value="23" name="PERF_LRZ_FEEDBACK_STALL"/>
-       <value value="24" name="PERF_LRZ_STALL_CYCLES_RB_ZPLANE"/>
-       <value value="25" name="PERF_LRZ_STALL_CYCLES_RB_BPLANE"/>
-       <value value="26" name="PERF_LRZ_STALL_CYCLES_VC"/>
-       <value value="27" name="PERF_LRZ_RAS_MASK_TRANS"/>
-</enum>
-
-<enum name="a6xx_cmp_perfcounter_select">
-       <value value="0" name="PERF_CMPDECMP_STALL_CYCLES_ARB"/>
-       <value value="1" name="PERF_CMPDECMP_VBIF_LATENCY_CYCLES"/>
-       <value value="2" name="PERF_CMPDECMP_VBIF_LATENCY_SAMPLES"/>
-       <value value="3" name="PERF_CMPDECMP_VBIF_READ_DATA_CCU"/>
-       <value value="4" name="PERF_CMPDECMP_VBIF_WRITE_DATA_CCU"/>
-       <value value="5" name="PERF_CMPDECMP_VBIF_READ_REQUEST"/>
-       <value value="6" name="PERF_CMPDECMP_VBIF_WRITE_REQUEST"/>
-       <value value="7" name="PERF_CMPDECMP_VBIF_READ_DATA"/>
-       <value value="8" name="PERF_CMPDECMP_VBIF_WRITE_DATA"/>
-       <value value="9" name="PERF_CMPDECMP_FLAG_FETCH_CYCLES"/>
-       <value value="10" name="PERF_CMPDECMP_FLAG_FETCH_SAMPLES"/>
-       <value value="11" name="PERF_CMPDECMP_DEPTH_WRITE_FLAG1_COUNT"/>
-       <value value="12" name="PERF_CMPDECMP_DEPTH_WRITE_FLAG2_COUNT"/>
-       <value value="13" name="PERF_CMPDECMP_DEPTH_WRITE_FLAG3_COUNT"/>
-       <value value="14" name="PERF_CMPDECMP_DEPTH_WRITE_FLAG4_COUNT"/>
-       <value value="15" name="PERF_CMPDECMP_DEPTH_WRITE_FLAG5_COUNT"/>
-       <value value="16" name="PERF_CMPDECMP_DEPTH_WRITE_FLAG6_COUNT"/>
-       <value value="17" name="PERF_CMPDECMP_DEPTH_WRITE_FLAG8_COUNT"/>
-       <value value="18" name="PERF_CMPDECMP_COLOR_WRITE_FLAG1_COUNT"/>
-       <value value="19" name="PERF_CMPDECMP_COLOR_WRITE_FLAG2_COUNT"/>
-       <value value="20" name="PERF_CMPDECMP_COLOR_WRITE_FLAG3_COUNT"/>
-       <value value="21" name="PERF_CMPDECMP_COLOR_WRITE_FLAG4_COUNT"/>
-       <value value="22" name="PERF_CMPDECMP_COLOR_WRITE_FLAG5_COUNT"/>
-       <value value="23" name="PERF_CMPDECMP_COLOR_WRITE_FLAG6_COUNT"/>
-       <value value="24" name="PERF_CMPDECMP_COLOR_WRITE_FLAG8_COUNT"/>
-       <value value="25" name="PERF_CMPDECMP_2D_STALL_CYCLES_VBIF_REQ"/>
-       <value value="26" name="PERF_CMPDECMP_2D_STALL_CYCLES_VBIF_WR"/>
-       <value value="27" name="PERF_CMPDECMP_2D_STALL_CYCLES_VBIF_RETURN"/>
-       <value value="28" name="PERF_CMPDECMP_2D_RD_DATA"/>
-       <value value="29" name="PERF_CMPDECMP_2D_WR_DATA"/>
-       <value value="30" name="PERF_CMPDECMP_VBIF_READ_DATA_UCHE_CH0"/>
-       <value value="31" name="PERF_CMPDECMP_VBIF_READ_DATA_UCHE_CH1"/>
-       <value value="32" name="PERF_CMPDECMP_2D_OUTPUT_TRANS"/>
-       <value value="33" name="PERF_CMPDECMP_VBIF_WRITE_DATA_UCHE"/>
-       <value value="34" name="PERF_CMPDECMP_DEPTH_WRITE_FLAG0_COUNT"/>
-       <value value="35" name="PERF_CMPDECMP_COLOR_WRITE_FLAG0_COUNT"/>
-       <value value="36" name="PERF_CMPDECMP_COLOR_WRITE_FLAGALPHA_COUNT"/>
-       <value value="37" name="PERF_CMPDECMP_2D_BUSY_CYCLES"/>
-       <value value="38" name="PERF_CMPDECMP_2D_REORDER_STARVE_CYCLES"/>
-       <value value="39" name="PERF_CMPDECMP_2D_PIXELS"/>
-</enum>
-
-<!--
-Used in a6xx_2d_blit_cntl.. the value mostly seems to correlate to the
-component type/size, so I think it relates to internal format used for
-blending?  The one exception is that 16b unorm and 32b float use the
-same value... maybe 16b unorm is uncommon enough that it was just easier
-to upconvert to 32b float internally?
-
- 8b unorm:  10 (sometimes 0, is the high bit part of something else?)
-16b unorm:   4
-
-32b int:     7
-16b int:     6
- 8b int:     5
-
-32b float:   4
-16b float:   3
- -->
-<enum name="a6xx_2d_ifmt">
-       <value value="0x10" name="R2D_UNORM8"/>
-       <value value="0x7"  name="R2D_INT32"/>
-       <value value="0x6"  name="R2D_INT16"/>
-       <value value="0x5"  name="R2D_INT8"/>
-       <value value="0x4"  name="R2D_FLOAT32"/>
-       <value value="0x3"  name="R2D_FLOAT16"/>
-       <value value="0x1"  name="R2D_UNORM8_SRGB"/>
-       <value value="0x0"  name="R2D_RAW"/>
-</enum>
-
-<enum name="a6xx_ztest_mode">
-       <doc>Allow early z-test and early-lrz (if applicable)</doc>
-       <value value="0x0" name="A6XX_EARLY_Z"/>
-       <doc>Disable early z-test and early-lrz test (if applicable)</doc>
-       <value value="0x1" name="A6XX_LATE_Z"/>
-       <doc>
-               A special mode that allows early-lrz test but disables
-               early-z test.  Which might sound a bit funny, since
-               lrz-test happens before z-test.  But as long as a couple
-               conditions are maintained this allows using lrz-test in
-               cases where fragment shader has kill/discard:
-
-               1) Disable lrz-write in cases where it is uncertain during
-                  binning pass that a fragment will pass.  Ie.  if frag
-                  shader has-kill, writes-z, or alpha/stencil test is
-                  enabled.  (For correctness, lrz-write must be disabled
-                  when blend is enabled.)  This is analogous to how a
-                  z-prepass works.
-
-               2) Disable lrz-write and test if a depth-test direction
-                  reversal is detected.  Due to condition (1), the contents
-                  of the lrz buffer are a conservative estimation of the
-                  depth buffer during the draw pass.  Meaning that geometry
-                  that we know for certain will not be visible will not pass
-                  lrz-test.  But geometry which may be (or contributes to
-                  blend) will pass the lrz-test.
-
-               This allows us to keep early-lrz-test in cases where the frag
-               shader does not write-z (ie. we know the z-value before FS)
-               and does not have side-effects (image/ssbo writes, etc), but
-               does have kill/discard.  Which turns out to be a common
-               enough case that it is useful to keep early-lrz test against
-               the conservative lrz buffer to discard fragments that we
-               know will definitely not be visible.
-       </doc>
-       <value value="0x2" name="A6XX_EARLY_LRZ_LATE_Z"/>
-</enum>
-
-<domain name="A6XX" width="32">
-       <bitset name="A6XX_RBBM_INT_0_MASK" inline="no">
-               <bitfield name="RBBM_GPU_IDLE" pos="0" type="boolean"/>
-               <bitfield name="CP_AHB_ERROR" pos="1" type="boolean"/>
-               <bitfield name="RBBM_ATB_ASYNCFIFO_OVERFLOW" pos="6" type="boolean"/>
-               <bitfield name="RBBM_GPC_ERROR" pos="7" type="boolean"/>
-               <bitfield name="CP_SW" pos="8" type="boolean"/>
-               <bitfield name="CP_HW_ERROR" pos="9" type="boolean"/>
-               <bitfield name="CP_CCU_FLUSH_DEPTH_TS" pos="10" type="boolean"/>
-               <bitfield name="CP_CCU_FLUSH_COLOR_TS" pos="11" type="boolean"/>
-               <bitfield name="CP_CCU_RESOLVE_TS" pos="12" type="boolean"/>
-               <bitfield name="CP_IB2" pos="13" type="boolean"/>
-               <bitfield name="CP_IB1" pos="14" type="boolean"/>
-               <bitfield name="CP_RB" pos="15" type="boolean"/>
-               <bitfield name="CP_RB_DONE_TS" pos="17" type="boolean"/>
-               <bitfield name="CP_WT_DONE_TS" pos="18" type="boolean"/>
-               <bitfield name="CP_CACHE_FLUSH_TS" pos="20" type="boolean"/>
-               <bitfield name="RBBM_ATB_BUS_OVERFLOW" pos="22" type="boolean"/>
-               <bitfield name="RBBM_HANG_DETECT" pos="23" type="boolean"/>
-               <bitfield name="UCHE_OOB_ACCESS" pos="24" type="boolean"/>
-               <bitfield name="UCHE_TRAP_INTR" pos="25" type="boolean"/>
-               <bitfield name="DEBBUS_INTR_0" pos="26" type="boolean"/>
-               <bitfield name="DEBBUS_INTR_1" pos="27" type="boolean"/>
-               <bitfield name="ISDB_CPU_IRQ" pos="30" type="boolean"/>
-               <bitfield name="ISDB_UNDER_DEBUG" pos="31" type="boolean"/>
-       </bitset>
-
-       <bitset name="A6XX_CP_INT">
-               <bitfield name="CP_OPCODE_ERROR" pos="0" type="boolean"/>
-               <bitfield name="CP_UCODE_ERROR" pos="1" type="boolean"/>
-               <bitfield name="CP_HW_FAULT_ERROR" pos="2" type="boolean"/>
-               <bitfield name="CP_REGISTER_PROTECTION_ERROR" pos="4" type="boolean"/>
-               <bitfield name="CP_AHB_ERROR" pos="5" type="boolean"/>
-               <bitfield name="CP_VSD_PARITY_ERROR" pos="6" type="boolean"/>
-               <bitfield name="CP_ILLEGAL_INSTR_ERROR" pos="7" type="boolean"/>
-       </bitset>
-
-       <reg32 offset="0x0800" name="CP_RB_BASE"/>
-       <reg32 offset="0x0801" name="CP_RB_BASE_HI"/>
-       <reg32 offset="0x0802" name="CP_RB_CNTL"/>
-       <reg32 offset="0x0804" name="CP_RB_RPTR_ADDR_LO"/>
-       <reg32 offset="0x0805" name="CP_RB_RPTR_ADDR_HI"/>
-       <reg32 offset="0x0806" name="CP_RB_RPTR"/>
-       <reg32 offset="0x0807" name="CP_RB_WPTR"/>
-       <reg32 offset="0x0808" name="CP_SQE_CNTL"/>
-       <reg32 offset="0x0812" name="CP_CP2GMU_STATUS">
-               <bitfield name="IFPC" pos="0" type="boolean"/>
-       </reg32>
-       <reg32 offset="0x0821" name="CP_HW_FAULT"/>
-       <reg32 offset="0x0823" name="CP_INTERRUPT_STATUS"/>
-       <reg32 offset="0x0824" name="CP_PROTECT_STATUS"/>
-       <reg32 offset="0x0830" name="CP_SQE_INSTR_BASE_LO"/>
-       <reg32 offset="0x0831" name="CP_SQE_INSTR_BASE_HI"/>
-       <reg32 offset="0x0840" name="CP_MISC_CNTL"/>
-       <reg32 offset="0x0844" name="CP_APRIV_CNTL"/>
-       <!-- all the threshold values seem to be in units of quad-dwords: -->
-       <reg32 offset="0x08C1" name="CP_ROQ_THRESHOLDS_1">
-               <doc>
-                       b0..7 seems to contain the size of buffered by not yet processed
-                       RB level cmdstream.. it's possible that it is a low threshold
-                       and b8..15 is a high threshold?
-
-                       b16..23 identifies where IB1 data starts (and RB data ends?)
-
-                       b24..31 identifies where IB2 data starts (and IB1 data ends)
-               </doc>
-               <bitfield name="RB_LO" low="0" high="7" shr="2"/>
-               <bitfield name="RB_HI" low="8" high="15" shr="2"/>
-               <bitfield name="IB1_START" low="16" high="23" shr="2"/>
-               <bitfield name="IB2_START" low="24" high="31" shr="2"/>
-       </reg32>
-       <reg32 offset="0x08C2" name="CP_ROQ_THRESHOLDS_2">
-               <doc>
-                       low bits identify where CP_SET_DRAW_STATE stateobj
-                       processing starts (and IB2 data ends). I'm guessing
-                       b8 is part of this since (from downstream kgsl):
-
-                               /* ROQ sizes are twice as big on a640/a680 than on a630 */
-                               if (adreno_is_a640(adreno_dev) || adreno_is_a680(adreno_dev)) {
-                                       kgsl_regwrite(device, A6XX_CP_ROQ_THRESHOLDS_2, 0x02000140);
-                                       kgsl_regwrite(device, A6XX_CP_ROQ_THRESHOLDS_1, 0x8040362C);
-                               } ...
-               </doc>
-               <bitfield name="SDS_START" low="0" high="8" shr="2"/>
-               <!-- total ROQ size: -->
-               <bitfield name="ROQ_SIZE" low="16" high="31" shr="2"/>
-       </reg32>
-       <reg32 offset="0x08C3" name="CP_MEM_POOL_SIZE"/>
-       <reg32 offset="0x0841" name="CP_CHICKEN_DBG"/>
-       <reg32 offset="0x0842" name="CP_ADDR_MODE_CNTL" type="a5xx_address_mode"/>
-       <reg32 offset="0x0843" name="CP_DBG_ECO_CNTL"/>
-       <reg32 offset="0x084F" name="CP_PROTECT_CNTL"/>
-
-       <array offset="0x0883" name="CP_SCRATCH" stride="1" length="8">
-               <reg32 offset="0x0" name="REG" type="uint"/>
-       </array>
-       <array offset="0x0850" name="CP_PROTECT" stride="1" length="32">
-               <reg32 offset="0x0" name="REG" type="a6x_cp_protect"/>
-       </array>
-
-       <reg32 offset="0x08A0" name="CP_CONTEXT_SWITCH_CNTL"/>
-       <reg32 offset="0x08A1" name="CP_CONTEXT_SWITCH_SMMU_INFO_LO"/>
-       <reg32 offset="0x08A2" name="CP_CONTEXT_SWITCH_SMMU_INFO_HI"/>
-       <reg32 offset="0x08A3" name="CP_CONTEXT_SWITCH_PRIV_NON_SECURE_RESTORE_ADDR_LO"/>
-       <reg32 offset="0x08A4" name="CP_CONTEXT_SWITCH_PRIV_NON_SECURE_RESTORE_ADDR_HI"/>
-       <reg32 offset="0x08A5" name="CP_CONTEXT_SWITCH_PRIV_SECURE_RESTORE_ADDR_LO"/>
-       <reg32 offset="0x08A6" name="CP_CONTEXT_SWITCH_PRIV_SECURE_RESTORE_ADDR_HI"/>
-       <reg32 offset="0x08A7" name="CP_CONTEXT_SWITCH_NON_PRIV_RESTORE_ADDR_LO"/>
-       <reg32 offset="0x08A8" name="CP_CONTEXT_SWITCH_NON_PRIV_RESTORE_ADDR_HI"/>
-       <reg32 offset="0x08D0" name="CP_PERFCTR_CP_SEL_0"/>
-       <reg32 offset="0x08D1" name="CP_PERFCTR_CP_SEL_1"/>
-       <reg32 offset="0x08D2" name="CP_PERFCTR_CP_SEL_2"/>
-       <reg32 offset="0x08D3" name="CP_PERFCTR_CP_SEL_3"/>
-       <reg32 offset="0x08D4" name="CP_PERFCTR_CP_SEL_4"/>
-       <reg32 offset="0x08D5" name="CP_PERFCTR_CP_SEL_5"/>
-       <reg32 offset="0x08D6" name="CP_PERFCTR_CP_SEL_6"/>
-       <reg32 offset="0x08D7" name="CP_PERFCTR_CP_SEL_7"/>
-       <reg32 offset="0x08D8" name="CP_PERFCTR_CP_SEL_8"/>
-       <reg32 offset="0x08D9" name="CP_PERFCTR_CP_SEL_9"/>
-       <reg32 offset="0x08DA" name="CP_PERFCTR_CP_SEL_10"/>
-       <reg32 offset="0x08DB" name="CP_PERFCTR_CP_SEL_11"/>
-       <reg32 offset="0x08DC" name="CP_PERFCTR_CP_SEL_12"/>
-       <reg32 offset="0x08DD" name="CP_PERFCTR_CP_SEL_13"/>
-       <reg32 offset="0x0900" name="CP_CRASH_SCRIPT_BASE_LO"/>
-       <reg32 offset="0x0901" name="CP_CRASH_SCRIPT_BASE_HI"/>
-       <reg32 offset="0x0902" name="CP_CRASH_DUMP_CNTL"/>
-       <reg32 offset="0x0903" name="CP_CRASH_DUMP_STATUS"/>
-       <reg32 offset="0x0908" name="CP_SQE_STAT_ADDR"/>
-       <reg32 offset="0x0909" name="CP_SQE_STAT_DATA"/>
-       <reg32 offset="0x090A" name="CP_DRAW_STATE_ADDR"/>
-       <reg32 offset="0x090B" name="CP_DRAW_STATE_DATA"/>
-       <reg32 offset="0x090C" name="CP_ROQ_DBG_ADDR"/>
-       <reg32 offset="0x090D" name="CP_ROQ_DBG_DATA"/>
-       <reg32 offset="0x090E" name="CP_MEM_POOL_DBG_ADDR"/>
-       <reg32 offset="0x090F" name="CP_MEM_POOL_DBG_DATA"/>
-       <reg32 offset="0x0910" name="CP_SQE_UCODE_DBG_ADDR"/>
-       <reg32 offset="0x0911" name="CP_SQE_UCODE_DBG_DATA"/>
-       <reg32 offset="0x0928" name="CP_IB1_BASE"/>
-       <reg32 offset="0x0929" name="CP_IB1_BASE_HI"/>
-       <reg32 offset="0x092A" name="CP_IB1_REM_SIZE"/>
-       <reg32 offset="0x092B" name="CP_IB2_BASE"/>
-       <reg32 offset="0x092C" name="CP_IB2_BASE_HI"/>
-       <reg32 offset="0x092D" name="CP_IB2_REM_SIZE"/>
-       <!-- SDS == CP_SET_DRAW_STATE: -->
-       <reg32 offset="0x092e" name="CP_SDS_BASE"/>
-       <reg32 offset="0x092f" name="CP_SDS_BASE_HI"/>
-       <reg32 offset="0x092e" name="CP_SDS_REM_SIZE"/>
-       <reg32 offset="0x0931" name="CP_BIN_SIZE_ADDRESS"/>
-       <reg32 offset="0x0932" name="CP_BIN_SIZE_ADDRESS_HI"/>
-       <reg32 offset="0x0934" name="CP_BIN_DATA_ADDR"/>
-       <reg32 offset="0x0935" name="CP_BIN_DATA_ADDR_HI"/>
-       <!--
-       There are probably similar registers for RB and SDS, teasing out SDS will
-       take a slightly better test case..
-        -->
-       <reg32 offset="0x0949" name="CP_CSQ_IB1_STAT">
-               <doc>number of remaining dwords incl current dword being consumed?</doc>
-               <bitfield name="REM" low="16" high="31"/>
-       </reg32>
-       <reg32 offset="0x094a" name="CP_CSQ_IB2_STAT">
-               <doc>number of remaining dwords incl current dword being consumed?</doc>
-               <bitfield name="REM" low="16" high="31"/>
-       </reg32>
-       <reg32 offset="0x0980" name="CP_ALWAYS_ON_COUNTER_LO"/>
-       <reg32 offset="0x0981" name="CP_ALWAYS_ON_COUNTER_HI"/>
-       <reg32 offset="0x098D" name="CP_AHB_CNTL"/>
-       <reg32 offset="0x0A00" name="CP_APERTURE_CNTL_HOST"/>
-       <reg32 offset="0x0A03" name="CP_APERTURE_CNTL_CD"/>
-       <reg32 offset="0x0C01" name="VSC_ADDR_MODE_CNTL" type="a5xx_address_mode"/>
-       <reg32 offset="0x0201" name="RBBM_INT_0_STATUS" type="A6XX_RBBM_INT_0_MASK"/>
-       <reg32 offset="0x0210" name="RBBM_STATUS">
-               <bitfield pos="23" name="GPU_BUSY_IGN_AHB" type="boolean"/>
-               <bitfield pos="22" name="GPU_BUSY_IGN_AHB_CP" type="boolean"/>
-               <bitfield pos="21" name="HLSQ_BUSY" type="boolean"/>
-               <bitfield pos="20" name="VSC_BUSY" type="boolean"/>
-               <bitfield pos="19" name="TPL1_BUSY" type="boolean"/>
-               <bitfield pos="18" name="SP_BUSY" type="boolean"/>
-               <bitfield pos="17" name="UCHE_BUSY" type="boolean"/>
-               <bitfield pos="16" name="VPC_BUSY" type="boolean"/>
-               <bitfield pos="15" name="VFD_BUSY" type="boolean"/>
-               <bitfield pos="14" name="TESS_BUSY" type="boolean"/>
-               <bitfield pos="13" name="PC_VSD_BUSY" type="boolean"/>
-               <bitfield pos="12" name="PC_DCALL_BUSY" type="boolean"/>
-               <bitfield pos="11" name="COM_DCOM_BUSY" type="boolean"/>
-               <bitfield pos="10" name="LRZ_BUSY" type="boolean"/>
-               <bitfield pos="9"  name="A2D_BUSY" type="boolean"/>
-               <bitfield pos="8"  name="CCU_BUSY" type="boolean"/>
-               <bitfield pos="7"  name="RB_BUSY" type="boolean"/>
-               <bitfield pos="6"  name="RAS_BUSY" type="boolean"/>
-               <bitfield pos="5"  name="TSE_BUSY" type="boolean"/>
-               <bitfield pos="4"  name="VBIF_BUSY" type="boolean"/>
-               <bitfield pos="3"  name="GFX_DBGC_BUSY" type="boolean"/>
-               <bitfield pos="2"  name="CP_BUSY" type="boolean"/>
-               <bitfield pos="1"  name="CP_AHB_BUSY_CP_MASTER" type="boolean"/>
-               <bitfield pos="0"  name="CP_AHB_BUSY_CX_MASTER" type="boolean"/>
-       </reg32>
-       <reg32 offset="0x0213" name="RBBM_STATUS3">
-               <bitfield pos="24" name="SMMU_STALLED_ON_FAULT" type="boolean"/>
-       </reg32>
-       <reg32 offset="0x0215" name="RBBM_VBIF_GX_RESET_STATUS"/>
-       <reg32 offset="0x0400" name="RBBM_PERFCTR_CP_0_LO"/>
-       <reg32 offset="0x0401" name="RBBM_PERFCTR_CP_0_HI"/>
-       <reg32 offset="0x0402" name="RBBM_PERFCTR_CP_1_LO"/>
-       <reg32 offset="0x0403" name="RBBM_PERFCTR_CP_1_HI"/>
-       <reg32 offset="0x0404" name="RBBM_PERFCTR_CP_2_LO"/>
-       <reg32 offset="0x0405" name="RBBM_PERFCTR_CP_2_HI"/>
-       <reg32 offset="0x0406" name="RBBM_PERFCTR_CP_3_LO"/>
-       <reg32 offset="0x0407" name="RBBM_PERFCTR_CP_3_HI"/>
-       <reg32 offset="0x0408" name="RBBM_PERFCTR_CP_4_LO"/>
-       <reg32 offset="0x0409" name="RBBM_PERFCTR_CP_4_HI"/>
-       <reg32 offset="0x040a" name="RBBM_PERFCTR_CP_5_LO"/>
-       <reg32 offset="0x040b" name="RBBM_PERFCTR_CP_5_HI"/>
-       <reg32 offset="0x040c" name="RBBM_PERFCTR_CP_6_LO"/>
-       <reg32 offset="0x040d" name="RBBM_PERFCTR_CP_6_HI"/>
-       <reg32 offset="0x040e" name="RBBM_PERFCTR_CP_7_LO"/>
-       <reg32 offset="0x040f" name="RBBM_PERFCTR_CP_7_HI"/>
-       <reg32 offset="0x0410" name="RBBM_PERFCTR_CP_8_LO"/>
-       <reg32 offset="0x0411" name="RBBM_PERFCTR_CP_8_HI"/>
-       <reg32 offset="0x0412" name="RBBM_PERFCTR_CP_9_LO"/>
-       <reg32 offset="0x0413" name="RBBM_PERFCTR_CP_9_HI"/>
-       <reg32 offset="0x0414" name="RBBM_PERFCTR_CP_10_LO"/>
-       <reg32 offset="0x0415" name="RBBM_PERFCTR_CP_10_HI"/>
-       <reg32 offset="0x0416" name="RBBM_PERFCTR_CP_11_LO"/>
-       <reg32 offset="0x0417" name="RBBM_PERFCTR_CP_11_HI"/>
-       <reg32 offset="0x0418" name="RBBM_PERFCTR_CP_12_LO"/>
-       <reg32 offset="0x0419" name="RBBM_PERFCTR_CP_12_HI"/>
-       <reg32 offset="0x041a" name="RBBM_PERFCTR_CP_13_LO"/>
-       <reg32 offset="0x041b" name="RBBM_PERFCTR_CP_13_HI"/>
-       <reg32 offset="0x041c" name="RBBM_PERFCTR_RBBM_0_LO"/>
-       <reg32 offset="0x041d" name="RBBM_PERFCTR_RBBM_0_HI"/>
-       <reg32 offset="0x041e" name="RBBM_PERFCTR_RBBM_1_LO"/>
-       <reg32 offset="0x041f" name="RBBM_PERFCTR_RBBM_1_HI"/>
-       <reg32 offset="0x0420" name="RBBM_PERFCTR_RBBM_2_LO"/>
-       <reg32 offset="0x0421" name="RBBM_PERFCTR_RBBM_2_HI"/>
-       <reg32 offset="0x0422" name="RBBM_PERFCTR_RBBM_3_LO"/>
-       <reg32 offset="0x0423" name="RBBM_PERFCTR_RBBM_3_HI"/>
-       <reg32 offset="0x0424" name="RBBM_PERFCTR_PC_0_LO"/>
-       <reg32 offset="0x0425" name="RBBM_PERFCTR_PC_0_HI"/>
-       <reg32 offset="0x0426" name="RBBM_PERFCTR_PC_1_LO"/>
-       <reg32 offset="0x0427" name="RBBM_PERFCTR_PC_1_HI"/>
-       <reg32 offset="0x0428" name="RBBM_PERFCTR_PC_2_LO"/>
-       <reg32 offset="0x0429" name="RBBM_PERFCTR_PC_2_HI"/>
-       <reg32 offset="0x042a" name="RBBM_PERFCTR_PC_3_LO"/>
-       <reg32 offset="0x042b" name="RBBM_PERFCTR_PC_3_HI"/>
-       <reg32 offset="0x042c" name="RBBM_PERFCTR_PC_4_LO"/>
-       <reg32 offset="0x042d" name="RBBM_PERFCTR_PC_4_HI"/>
-       <reg32 offset="0x042e" name="RBBM_PERFCTR_PC_5_LO"/>
-       <reg32 offset="0x042f" name="RBBM_PERFCTR_PC_5_HI"/>
-       <reg32 offset="0x0430" name="RBBM_PERFCTR_PC_6_LO"/>
-       <reg32 offset="0x0431" name="RBBM_PERFCTR_PC_6_HI"/>
-       <reg32 offset="0x0432" name="RBBM_PERFCTR_PC_7_LO"/>
-       <reg32 offset="0x0433" name="RBBM_PERFCTR_PC_7_HI"/>
-       <reg32 offset="0x0434" name="RBBM_PERFCTR_VFD_0_LO"/>
-       <reg32 offset="0x0435" name="RBBM_PERFCTR_VFD_0_HI"/>
-       <reg32 offset="0x0436" name="RBBM_PERFCTR_VFD_1_LO"/>
-       <reg32 offset="0x0437" name="RBBM_PERFCTR_VFD_1_HI"/>
-       <reg32 offset="0x0438" name="RBBM_PERFCTR_VFD_2_LO"/>
-       <reg32 offset="0x0439" name="RBBM_PERFCTR_VFD_2_HI"/>
-       <reg32 offset="0x043a" name="RBBM_PERFCTR_VFD_3_LO"/>
-       <reg32 offset="0x043b" name="RBBM_PERFCTR_VFD_3_HI"/>
-       <reg32 offset="0x043c" name="RBBM_PERFCTR_VFD_4_LO"/>
-       <reg32 offset="0x043d" name="RBBM_PERFCTR_VFD_4_HI"/>
-       <reg32 offset="0x043e" name="RBBM_PERFCTR_VFD_5_LO"/>
-       <reg32 offset="0x043f" name="RBBM_PERFCTR_VFD_5_HI"/>
-       <reg32 offset="0x0440" name="RBBM_PERFCTR_VFD_6_LO"/>
-       <reg32 offset="0x0441" name="RBBM_PERFCTR_VFD_6_HI"/>
-       <reg32 offset="0x0442" name="RBBM_PERFCTR_VFD_7_LO"/>
-       <reg32 offset="0x0443" name="RBBM_PERFCTR_VFD_7_HI"/>
-       <reg32 offset="0x0444" name="RBBM_PERFCTR_HLSQ_0_LO"/>
-       <reg32 offset="0x0445" name="RBBM_PERFCTR_HLSQ_0_HI"/>
-       <reg32 offset="0x0446" name="RBBM_PERFCTR_HLSQ_1_LO"/>
-       <reg32 offset="0x0447" name="RBBM_PERFCTR_HLSQ_1_HI"/>
-       <reg32 offset="0x0448" name="RBBM_PERFCTR_HLSQ_2_LO"/>
-       <reg32 offset="0x0449" name="RBBM_PERFCTR_HLSQ_2_HI"/>
-       <reg32 offset="0x044a" name="RBBM_PERFCTR_HLSQ_3_LO"/>
-       <reg32 offset="0x044b" name="RBBM_PERFCTR_HLSQ_3_HI"/>
-       <reg32 offset="0x044c" name="RBBM_PERFCTR_HLSQ_4_LO"/>
-       <reg32 offset="0x044d" name="RBBM_PERFCTR_HLSQ_4_HI"/>
-       <reg32 offset="0x044e" name="RBBM_PERFCTR_HLSQ_5_LO"/>
-       <reg32 offset="0x044f" name="RBBM_PERFCTR_HLSQ_5_HI"/>
-       <reg32 offset="0x0450" name="RBBM_PERFCTR_VPC_0_LO"/>
-       <reg32 offset="0x0451" name="RBBM_PERFCTR_VPC_0_HI"/>
-       <reg32 offset="0x0452" name="RBBM_PERFCTR_VPC_1_LO"/>
-       <reg32 offset="0x0453" name="RBBM_PERFCTR_VPC_1_HI"/>
-       <reg32 offset="0x0454" name="RBBM_PERFCTR_VPC_2_LO"/>
-       <reg32 offset="0x0455" name="RBBM_PERFCTR_VPC_2_HI"/>
-       <reg32 offset="0x0456" name="RBBM_PERFCTR_VPC_3_LO"/>
-       <reg32 offset="0x0457" name="RBBM_PERFCTR_VPC_3_HI"/>
-       <reg32 offset="0x0458" name="RBBM_PERFCTR_VPC_4_LO"/>
-       <reg32 offset="0x0459" name="RBBM_PERFCTR_VPC_4_HI"/>
-       <reg32 offset="0x045a" name="RBBM_PERFCTR_VPC_5_LO"/>
-       <reg32 offset="0x045b" name="RBBM_PERFCTR_VPC_5_HI"/>
-       <reg32 offset="0x045c" name="RBBM_PERFCTR_CCU_0_LO"/>
-       <reg32 offset="0x045d" name="RBBM_PERFCTR_CCU_0_HI"/>
-       <reg32 offset="0x045e" name="RBBM_PERFCTR_CCU_1_LO"/>
-       <reg32 offset="0x045f" name="RBBM_PERFCTR_CCU_1_HI"/>
-       <reg32 offset="0x0460" name="RBBM_PERFCTR_CCU_2_LO"/>
-       <reg32 offset="0x0461" name="RBBM_PERFCTR_CCU_2_HI"/>
-       <reg32 offset="0x0462" name="RBBM_PERFCTR_CCU_3_LO"/>
-       <reg32 offset="0x0463" name="RBBM_PERFCTR_CCU_3_HI"/>
-       <reg32 offset="0x0464" name="RBBM_PERFCTR_CCU_4_LO"/>
-       <reg32 offset="0x0465" name="RBBM_PERFCTR_CCU_4_HI"/>
-       <reg32 offset="0x0466" name="RBBM_PERFCTR_TSE_0_LO"/>
-       <reg32 offset="0x0467" name="RBBM_PERFCTR_TSE_0_HI"/>
-       <reg32 offset="0x0468" name="RBBM_PERFCTR_TSE_1_LO"/>
-       <reg32 offset="0x0469" name="RBBM_PERFCTR_TSE_1_HI"/>
-       <reg32 offset="0x046a" name="RBBM_PERFCTR_TSE_2_LO"/>
-       <reg32 offset="0x046b" name="RBBM_PERFCTR_TSE_2_HI"/>
-       <reg32 offset="0x046c" name="RBBM_PERFCTR_TSE_3_LO"/>
-       <reg32 offset="0x046d" name="RBBM_PERFCTR_TSE_3_HI"/>
-       <reg32 offset="0x046e" name="RBBM_PERFCTR_RAS_0_LO"/>
-       <reg32 offset="0x046f" name="RBBM_PERFCTR_RAS_0_HI"/>
-       <reg32 offset="0x0470" name="RBBM_PERFCTR_RAS_1_LO"/>
-       <reg32 offset="0x0471" name="RBBM_PERFCTR_RAS_1_HI"/>
-       <reg32 offset="0x0472" name="RBBM_PERFCTR_RAS_2_LO"/>
-       <reg32 offset="0x0473" name="RBBM_PERFCTR_RAS_2_HI"/>
-       <reg32 offset="0x0474" name="RBBM_PERFCTR_RAS_3_LO"/>
-       <reg32 offset="0x0475" name="RBBM_PERFCTR_RAS_3_HI"/>
-       <reg32 offset="0x0476" name="RBBM_PERFCTR_UCHE_0_LO"/>
-       <reg32 offset="0x0477" name="RBBM_PERFCTR_UCHE_0_HI"/>
-       <reg32 offset="0x0478" name="RBBM_PERFCTR_UCHE_1_LO"/>
-       <reg32 offset="0x0479" name="RBBM_PERFCTR_UCHE_1_HI"/>
-       <reg32 offset="0x047a" name="RBBM_PERFCTR_UCHE_2_LO"/>
-       <reg32 offset="0x047b" name="RBBM_PERFCTR_UCHE_2_HI"/>
-       <reg32 offset="0x047c" name="RBBM_PERFCTR_UCHE_3_LO"/>
-       <reg32 offset="0x047d" name="RBBM_PERFCTR_UCHE_3_HI"/>
-       <reg32 offset="0x047e" name="RBBM_PERFCTR_UCHE_4_LO"/>
-       <reg32 offset="0x047f" name="RBBM_PERFCTR_UCHE_4_HI"/>
-       <reg32 offset="0x0480" name="RBBM_PERFCTR_UCHE_5_LO"/>
-       <reg32 offset="0x0481" name="RBBM_PERFCTR_UCHE_5_HI"/>
-       <reg32 offset="0x0482" name="RBBM_PERFCTR_UCHE_6_LO"/>
-       <reg32 offset="0x0483" name="RBBM_PERFCTR_UCHE_6_HI"/>
-       <reg32 offset="0x0484" name="RBBM_PERFCTR_UCHE_7_LO"/>
-       <reg32 offset="0x0485" name="RBBM_PERFCTR_UCHE_7_HI"/>
-       <reg32 offset="0x0486" name="RBBM_PERFCTR_UCHE_8_LO"/>
-       <reg32 offset="0x0487" name="RBBM_PERFCTR_UCHE_8_HI"/>
-       <reg32 offset="0x0488" name="RBBM_PERFCTR_UCHE_9_LO"/>
-       <reg32 offset="0x0489" name="RBBM_PERFCTR_UCHE_9_HI"/>
-       <reg32 offset="0x048a" name="RBBM_PERFCTR_UCHE_10_LO"/>
-       <reg32 offset="0x048b" name="RBBM_PERFCTR_UCHE_10_HI"/>
-       <reg32 offset="0x048c" name="RBBM_PERFCTR_UCHE_11_LO"/>
-       <reg32 offset="0x048d" name="RBBM_PERFCTR_UCHE_11_HI"/>
-       <reg32 offset="0x048e" name="RBBM_PERFCTR_TP_0_LO"/>
-       <reg32 offset="0x048f" name="RBBM_PERFCTR_TP_0_HI"/>
-       <reg32 offset="0x0490" name="RBBM_PERFCTR_TP_1_LO"/>
-       <reg32 offset="0x0491" name="RBBM_PERFCTR_TP_1_HI"/>
-       <reg32 offset="0x0492" name="RBBM_PERFCTR_TP_2_LO"/>
-       <reg32 offset="0x0493" name="RBBM_PERFCTR_TP_2_HI"/>
-       <reg32 offset="0x0494" name="RBBM_PERFCTR_TP_3_LO"/>
-       <reg32 offset="0x0495" name="RBBM_PERFCTR_TP_3_HI"/>
-       <reg32 offset="0x0496" name="RBBM_PERFCTR_TP_4_LO"/>
-       <reg32 offset="0x0497" name="RBBM_PERFCTR_TP_4_HI"/>
-       <reg32 offset="0x0498" name="RBBM_PERFCTR_TP_5_LO"/>
-       <reg32 offset="0x0499" name="RBBM_PERFCTR_TP_5_HI"/>
-       <reg32 offset="0x049a" name="RBBM_PERFCTR_TP_6_LO"/>
-       <reg32 offset="0x049b" name="RBBM_PERFCTR_TP_6_HI"/>
-       <reg32 offset="0x049c" name="RBBM_PERFCTR_TP_7_LO"/>
-       <reg32 offset="0x049d" name="RBBM_PERFCTR_TP_7_HI"/>
-       <reg32 offset="0x049e" name="RBBM_PERFCTR_TP_8_LO"/>
-       <reg32 offset="0x049f" name="RBBM_PERFCTR_TP_8_HI"/>
-       <reg32 offset="0x04a0" name="RBBM_PERFCTR_TP_9_LO"/>
-       <reg32 offset="0x04a1" name="RBBM_PERFCTR_TP_9_HI"/>
-       <reg32 offset="0x04a2" name="RBBM_PERFCTR_TP_10_LO"/>
-       <reg32 offset="0x04a3" name="RBBM_PERFCTR_TP_10_HI"/>
-       <reg32 offset="0x04a4" name="RBBM_PERFCTR_TP_11_LO"/>
-       <reg32 offset="0x04a5" name="RBBM_PERFCTR_TP_11_HI"/>
-       <reg32 offset="0x04a6" name="RBBM_PERFCTR_SP_0_LO"/>
-       <reg32 offset="0x04a7" name="RBBM_PERFCTR_SP_0_HI"/>
-       <reg32 offset="0x04a8" name="RBBM_PERFCTR_SP_1_LO"/>
-       <reg32 offset="0x04a9" name="RBBM_PERFCTR_SP_1_HI"/>
-       <reg32 offset="0x04aa" name="RBBM_PERFCTR_SP_2_LO"/>
-       <reg32 offset="0x04ab" name="RBBM_PERFCTR_SP_2_HI"/>
-       <reg32 offset="0x04ac" name="RBBM_PERFCTR_SP_3_LO"/>
-       <reg32 offset="0x04ad" name="RBBM_PERFCTR_SP_3_HI"/>
-       <reg32 offset="0x04ae" name="RBBM_PERFCTR_SP_4_LO"/>
-       <reg32 offset="0x04af" name="RBBM_PERFCTR_SP_4_HI"/>
-       <reg32 offset="0x04b0" name="RBBM_PERFCTR_SP_5_LO"/>
-       <reg32 offset="0x04b1" name="RBBM_PERFCTR_SP_5_HI"/>
-       <reg32 offset="0x04b2" name="RBBM_PERFCTR_SP_6_LO"/>
-       <reg32 offset="0x04b3" name="RBBM_PERFCTR_SP_6_HI"/>
-       <reg32 offset="0x04b4" name="RBBM_PERFCTR_SP_7_LO"/>
-       <reg32 offset="0x04b5" name="RBBM_PERFCTR_SP_7_HI"/>
-       <reg32 offset="0x04b6" name="RBBM_PERFCTR_SP_8_LO"/>
-       <reg32 offset="0x04b7" name="RBBM_PERFCTR_SP_8_HI"/>
-       <reg32 offset="0x04b8" name="RBBM_PERFCTR_SP_9_LO"/>
-       <reg32 offset="0x04b9" name="RBBM_PERFCTR_SP_9_HI"/>
-       <reg32 offset="0x04ba" name="RBBM_PERFCTR_SP_10_LO"/>
-       <reg32 offset="0x04bb" name="RBBM_PERFCTR_SP_10_HI"/>
-       <reg32 offset="0x04bc" name="RBBM_PERFCTR_SP_11_LO"/>
-       <reg32 offset="0x04bd" name="RBBM_PERFCTR_SP_11_HI"/>
-       <reg32 offset="0x04be" name="RBBM_PERFCTR_SP_12_LO"/>
-       <reg32 offset="0x04bf" name="RBBM_PERFCTR_SP_12_HI"/>
-       <reg32 offset="0x04c0" name="RBBM_PERFCTR_SP_13_LO"/>
-       <reg32 offset="0x04c1" name="RBBM_PERFCTR_SP_13_HI"/>
-       <reg32 offset="0x04c2" name="RBBM_PERFCTR_SP_14_LO"/>
-       <reg32 offset="0x04c3" name="RBBM_PERFCTR_SP_14_HI"/>
-       <reg32 offset="0x04c4" name="RBBM_PERFCTR_SP_15_LO"/>
-       <reg32 offset="0x04c5" name="RBBM_PERFCTR_SP_15_HI"/>
-       <reg32 offset="0x04c6" name="RBBM_PERFCTR_SP_16_LO"/>
-       <reg32 offset="0x04c7" name="RBBM_PERFCTR_SP_16_HI"/>
-       <reg32 offset="0x04c8" name="RBBM_PERFCTR_SP_17_LO"/>
-       <reg32 offset="0x04c9" name="RBBM_PERFCTR_SP_17_HI"/>
-       <reg32 offset="0x04ca" name="RBBM_PERFCTR_SP_18_LO"/>
-       <reg32 offset="0x04cb" name="RBBM_PERFCTR_SP_18_HI"/>
-       <reg32 offset="0x04cc" name="RBBM_PERFCTR_SP_19_LO"/>
-       <reg32 offset="0x04cd" name="RBBM_PERFCTR_SP_19_HI"/>
-       <reg32 offset="0x04ce" name="RBBM_PERFCTR_SP_20_LO"/>
-       <reg32 offset="0x04cf" name="RBBM_PERFCTR_SP_20_HI"/>
-       <reg32 offset="0x04d0" name="RBBM_PERFCTR_SP_21_LO"/>
-       <reg32 offset="0x04d1" name="RBBM_PERFCTR_SP_21_HI"/>
-       <reg32 offset="0x04d2" name="RBBM_PERFCTR_SP_22_LO"/>
-       <reg32 offset="0x04d3" name="RBBM_PERFCTR_SP_22_HI"/>
-       <reg32 offset="0x04d4" name="RBBM_PERFCTR_SP_23_LO"/>
-       <reg32 offset="0x04d5" name="RBBM_PERFCTR_SP_23_HI"/>
-       <reg32 offset="0x04d6" name="RBBM_PERFCTR_RB_0_LO"/>
-       <reg32 offset="0x04d7" name="RBBM_PERFCTR_RB_0_HI"/>
-       <reg32 offset="0x04d8" name="RBBM_PERFCTR_RB_1_LO"/>
-       <reg32 offset="0x04d9" name="RBBM_PERFCTR_RB_1_HI"/>
-       <reg32 offset="0x04da" name="RBBM_PERFCTR_RB_2_LO"/>
-       <reg32 offset="0x04db" name="RBBM_PERFCTR_RB_2_HI"/>
-       <reg32 offset="0x04dc" name="RBBM_PERFCTR_RB_3_LO"/>
-       <reg32 offset="0x04dd" name="RBBM_PERFCTR_RB_3_HI"/>
-       <reg32 offset="0x04de" name="RBBM_PERFCTR_RB_4_LO"/>
-       <reg32 offset="0x04df" name="RBBM_PERFCTR_RB_4_HI"/>
-       <reg32 offset="0x04e0" name="RBBM_PERFCTR_RB_5_LO"/>
-       <reg32 offset="0x04e1" name="RBBM_PERFCTR_RB_5_HI"/>
-       <reg32 offset="0x04e2" name="RBBM_PERFCTR_RB_6_LO"/>
-       <reg32 offset="0x04e3" name="RBBM_PERFCTR_RB_6_HI"/>
-       <reg32 offset="0x04e4" name="RBBM_PERFCTR_RB_7_LO"/>
-       <reg32 offset="0x04e5" name="RBBM_PERFCTR_RB_7_HI"/>
-       <reg32 offset="0x04e6" name="RBBM_PERFCTR_VSC_0_LO"/>
-       <reg32 offset="0x04e7" name="RBBM_PERFCTR_VSC_0_HI"/>
-       <reg32 offset="0x04e8" name="RBBM_PERFCTR_VSC_1_LO"/>
-       <reg32 offset="0x04e9" name="RBBM_PERFCTR_VSC_1_HI"/>
-       <reg32 offset="0x04ea" name="RBBM_PERFCTR_LRZ_0_LO"/>
-       <reg32 offset="0x04eb" name="RBBM_PERFCTR_LRZ_0_HI"/>
-       <reg32 offset="0x04ec" name="RBBM_PERFCTR_LRZ_1_LO"/>
-       <reg32 offset="0x04ed" name="RBBM_PERFCTR_LRZ_1_HI"/>
-       <reg32 offset="0x04ee" name="RBBM_PERFCTR_LRZ_2_LO"/>
-       <reg32 offset="0x04ef" name="RBBM_PERFCTR_LRZ_2_HI"/>
-       <reg32 offset="0x04f0" name="RBBM_PERFCTR_LRZ_3_LO"/>
-       <reg32 offset="0x04f1" name="RBBM_PERFCTR_LRZ_3_HI"/>
-       <reg32 offset="0x04f2" name="RBBM_PERFCTR_CMP_0_LO"/>
-       <reg32 offset="0x04f3" name="RBBM_PERFCTR_CMP_0_HI"/>
-       <reg32 offset="0x04f4" name="RBBM_PERFCTR_CMP_1_LO"/>
-       <reg32 offset="0x04f5" name="RBBM_PERFCTR_CMP_1_HI"/>
-       <reg32 offset="0x04f6" name="RBBM_PERFCTR_CMP_2_LO"/>
-       <reg32 offset="0x04f7" name="RBBM_PERFCTR_CMP_2_HI"/>
-       <reg32 offset="0x04f8" name="RBBM_PERFCTR_CMP_3_LO"/>
-       <reg32 offset="0x04f9" name="RBBM_PERFCTR_CMP_3_HI"/>
-       <reg32 offset="0x0500" name="RBBM_PERFCTR_CNTL"/>
-       <reg32 offset="0x0501" name="RBBM_PERFCTR_LOAD_CMD0"/>
-       <reg32 offset="0x0502" name="RBBM_PERFCTR_LOAD_CMD1"/>
-       <reg32 offset="0x0503" name="RBBM_PERFCTR_LOAD_CMD2"/>
-       <reg32 offset="0x0504" name="RBBM_PERFCTR_LOAD_CMD3"/>
-       <reg32 offset="0x0505" name="RBBM_PERFCTR_LOAD_VALUE_LO"/>
-       <reg32 offset="0x0506" name="RBBM_PERFCTR_LOAD_VALUE_HI"/>
-       <reg32 offset="0x0507" name="RBBM_PERFCTR_RBBM_SEL_0"/>
-       <reg32 offset="0x0508" name="RBBM_PERFCTR_RBBM_SEL_1"/>
-       <reg32 offset="0x0509" name="RBBM_PERFCTR_RBBM_SEL_2"/>
-       <reg32 offset="0x050A" name="RBBM_PERFCTR_RBBM_SEL_3"/>
-       <reg32 offset="0x050B" name="RBBM_PERFCTR_GPU_BUSY_MASKED"/>
-       <reg32 offset="0x0533" name="RBBM_ISDB_CNT"/>
-
-       <!---
-           This block of registers aren't tied to perf counters. They
-           count various geometry stats, for example number of
-           vertices in, number of primnitives assembled etc.
-       -->
-
-       <reg32 offset="0x0540" name="RBBM_PRIMCTR_0_LO"/>  <!-- vs vertices in -->
-       <reg32 offset="0x0541" name="RBBM_PRIMCTR_0_HI"/>
-       <reg32 offset="0x0542" name="RBBM_PRIMCTR_1_LO"/>  <!-- vs primitives out -->
-       <reg32 offset="0x0543" name="RBBM_PRIMCTR_1_HI"/>
-       <reg32 offset="0x0544" name="RBBM_PRIMCTR_2_LO"/>  <!-- hs vertices in -->
-       <reg32 offset="0x0545" name="RBBM_PRIMCTR_2_HI"/>
-       <reg32 offset="0x0546" name="RBBM_PRIMCTR_3_LO"/>  <!-- hs patches out -->
-       <reg32 offset="0x0547" name="RBBM_PRIMCTR_3_HI"/>
-       <reg32 offset="0x0548" name="RBBM_PRIMCTR_4_LO"/>  <!-- dss vertices in -->
-       <reg32 offset="0x0549" name="RBBM_PRIMCTR_4_HI"/>
-       <reg32 offset="0x054a" name="RBBM_PRIMCTR_5_LO"/>  <!-- ds primitives out -->
-       <reg32 offset="0x054b" name="RBBM_PRIMCTR_5_HI"/>
-       <reg32 offset="0x054c" name="RBBM_PRIMCTR_6_LO"/>  <!-- gs primitives in -->
-       <reg32 offset="0x054d" name="RBBM_PRIMCTR_6_HI"/>
-       <reg32 offset="0x054e" name="RBBM_PRIMCTR_7_LO"/>  <!-- gs primitives out -->
-       <reg32 offset="0x054f" name="RBBM_PRIMCTR_7_HI"/>
-       <reg32 offset="0x0550" name="RBBM_PRIMCTR_8_LO"/>  <!-- gs primitives out -->
-       <reg32 offset="0x0551" name="RBBM_PRIMCTR_8_HI"/>
-       <reg32 offset="0x0552" name="RBBM_PRIMCTR_9_LO"/>  <!-- raster primitives in -->
-       <reg32 offset="0x0553" name="RBBM_PRIMCTR_9_HI"/>
-       <reg32 offset="0x0554" name="RBBM_PRIMCTR_10_LO"/>
-       <reg32 offset="0x0555" name="RBBM_PRIMCTR_10_HI"/>
-
-       <reg32 offset="0xF400" name="RBBM_SECVID_TRUST_CNTL"/>
-       <reg32 offset="0xF800" name="RBBM_SECVID_TSB_TRUSTED_BASE_LO"/>
-       <reg32 offset="0xF801" name="RBBM_SECVID_TSB_TRUSTED_BASE_HI"/>
-       <reg32 offset="0xF802" name="RBBM_SECVID_TSB_TRUSTED_SIZE"/>
-       <reg32 offset="0xF803" name="RBBM_SECVID_TSB_CNTL"/>
-       <reg32 offset="0xF810" name="RBBM_SECVID_TSB_ADDR_MODE_CNTL" type="a5xx_address_mode"/>
-       <reg32 offset="0x00010" name="RBBM_VBIF_CLIENT_QOS_CNTL"/>
-       <reg32 offset="0x00011" name="RBBM_GBIF_CLIENT_QOS_CNTL"/>
-       <reg32 offset="0x0001c" name="RBBM_WAIT_FOR_GPU_IDLE_CMD">
-               <bitfield pos="0" name="WAIT_GPU_IDLE" type="boolean"/>
-       </reg32>
-       <reg32 offset="0x0001f" name="RBBM_INTERFACE_HANG_INT_CNTL"/>
-       <reg32 offset="0x00037" name="RBBM_INT_CLEAR_CMD" type="A6XX_RBBM_INT_0_MASK"/>
-       <reg32 offset="0x00038" name="RBBM_INT_0_MASK"/>
-       <reg32 offset="0x00042" name="RBBM_SP_HYST_CNT"/>
-       <reg32 offset="0x00043" name="RBBM_SW_RESET_CMD"/>
-       <reg32 offset="0x00044" name="RBBM_RAC_THRESHOLD_CNT"/>
-       <reg32 offset="0x00045" name="RBBM_BLOCK_SW_RESET_CMD"/>
-       <reg32 offset="0x00046" name="RBBM_BLOCK_SW_RESET_CMD2"/>
-       <reg32 offset="0x000ae" name="RBBM_CLOCK_CNTL"/>
-       <reg32 offset="0x000b0" name="RBBM_CLOCK_CNTL_SP0"/>
-       <reg32 offset="0x000b1" name="RBBM_CLOCK_CNTL_SP1"/>
-       <reg32 offset="0x000b2" name="RBBM_CLOCK_CNTL_SP2"/>
-       <reg32 offset="0x000b3" name="RBBM_CLOCK_CNTL_SP3"/>
-       <reg32 offset="0x000b4" name="RBBM_CLOCK_CNTL2_SP0"/>
-       <reg32 offset="0x000b5" name="RBBM_CLOCK_CNTL2_SP1"/>
-       <reg32 offset="0x000b6" name="RBBM_CLOCK_CNTL2_SP2"/>
-       <reg32 offset="0x000b7" name="RBBM_CLOCK_CNTL2_SP3"/>
-       <reg32 offset="0x000b8" name="RBBM_CLOCK_DELAY_SP0"/>
-       <reg32 offset="0x000b9" name="RBBM_CLOCK_DELAY_SP1"/>
-       <reg32 offset="0x000ba" name="RBBM_CLOCK_DELAY_SP2"/>
-       <reg32 offset="0x000bb" name="RBBM_CLOCK_DELAY_SP3"/>
-       <reg32 offset="0x000bc" name="RBBM_CLOCK_HYST_SP0"/>
-       <reg32 offset="0x000bd" name="RBBM_CLOCK_HYST_SP1"/>
-       <reg32 offset="0x000be" name="RBBM_CLOCK_HYST_SP2"/>
-       <reg32 offset="0x000bf" name="RBBM_CLOCK_HYST_SP3"/>
-       <reg32 offset="0x000c0" name="RBBM_CLOCK_CNTL_TP0"/>
-       <reg32 offset="0x000c1" name="RBBM_CLOCK_CNTL_TP1"/>
-       <reg32 offset="0x000c2" name="RBBM_CLOCK_CNTL_TP2"/>
-       <reg32 offset="0x000c3" name="RBBM_CLOCK_CNTL_TP3"/>
-       <reg32 offset="0x000c4" name="RBBM_CLOCK_CNTL2_TP0"/>
-       <reg32 offset="0x000c5" name="RBBM_CLOCK_CNTL2_TP1"/>
-       <reg32 offset="0x000c6" name="RBBM_CLOCK_CNTL2_TP2"/>
-       <reg32 offset="0x000c7" name="RBBM_CLOCK_CNTL2_TP3"/>
-       <reg32 offset="0x000c8" name="RBBM_CLOCK_CNTL3_TP0"/>
-       <reg32 offset="0x000c9" name="RBBM_CLOCK_CNTL3_TP1"/>
-       <reg32 offset="0x000ca" name="RBBM_CLOCK_CNTL3_TP2"/>
-       <reg32 offset="0x000cb" name="RBBM_CLOCK_CNTL3_TP3"/>
-       <reg32 offset="0x000cc" name="RBBM_CLOCK_CNTL4_TP0"/>
-       <reg32 offset="0x000cd" name="RBBM_CLOCK_CNTL4_TP1"/>
-       <reg32 offset="0x000ce" name="RBBM_CLOCK_CNTL4_TP2"/>
-       <reg32 offset="0x000cf" name="RBBM_CLOCK_CNTL4_TP3"/>
-       <reg32 offset="0x000d0" name="RBBM_CLOCK_DELAY_TP0"/>
-       <reg32 offset="0x000d1" name="RBBM_CLOCK_DELAY_TP1"/>
-       <reg32 offset="0x000d2" name="RBBM_CLOCK_DELAY_TP2"/>
-       <reg32 offset="0x000d3" name="RBBM_CLOCK_DELAY_TP3"/>
-       <reg32 offset="0x000d4" name="RBBM_CLOCK_DELAY2_TP0"/>
-       <reg32 offset="0x000d5" name="RBBM_CLOCK_DELAY2_TP1"/>
-       <reg32 offset="0x000d6" name="RBBM_CLOCK_DELAY2_TP2"/>
-       <reg32 offset="0x000d7" name="RBBM_CLOCK_DELAY2_TP3"/>
-       <reg32 offset="0x000d8" name="RBBM_CLOCK_DELAY3_TP0"/>
-       <reg32 offset="0x000d9" name="RBBM_CLOCK_DELAY3_TP1"/>
-       <reg32 offset="0x000da" name="RBBM_CLOCK_DELAY3_TP2"/>
-       <reg32 offset="0x000db" name="RBBM_CLOCK_DELAY3_TP3"/>
-       <reg32 offset="0x000dc" name="RBBM_CLOCK_DELAY4_TP0"/>
-       <reg32 offset="0x000dd" name="RBBM_CLOCK_DELAY4_TP1"/>
-       <reg32 offset="0x000de" name="RBBM_CLOCK_DELAY4_TP2"/>
-       <reg32 offset="0x000df" name="RBBM_CLOCK_DELAY4_TP3"/>
-       <reg32 offset="0x000e0" name="RBBM_CLOCK_HYST_TP0"/>
-       <reg32 offset="0x000e1" name="RBBM_CLOCK_HYST_TP1"/>
-       <reg32 offset="0x000e2" name="RBBM_CLOCK_HYST_TP2"/>
-       <reg32 offset="0x000e3" name="RBBM_CLOCK_HYST_TP3"/>
-       <reg32 offset="0x000e4" name="RBBM_CLOCK_HYST2_TP0"/>
-       <reg32 offset="0x000e5" name="RBBM_CLOCK_HYST2_TP1"/>
-       <reg32 offset="0x000e6" name="RBBM_CLOCK_HYST2_TP2"/>
-       <reg32 offset="0x000e7" name="RBBM_CLOCK_HYST2_TP3"/>
-       <reg32 offset="0x000e8" name="RBBM_CLOCK_HYST3_TP0"/>
-       <reg32 offset="0x000e9" name="RBBM_CLOCK_HYST3_TP1"/>
-       <reg32 offset="0x000ea" name="RBBM_CLOCK_HYST3_TP2"/>
-       <reg32 offset="0x000eb" name="RBBM_CLOCK_HYST3_TP3"/>
-       <reg32 offset="0x000ec" name="RBBM_CLOCK_HYST4_TP0"/>
-       <reg32 offset="0x000ed" name="RBBM_CLOCK_HYST4_TP1"/>
-       <reg32 offset="0x000ee" name="RBBM_CLOCK_HYST4_TP2"/>
-       <reg32 offset="0x000ef" name="RBBM_CLOCK_HYST4_TP3"/>
-       <reg32 offset="0x000f0" name="RBBM_CLOCK_CNTL_RB0"/>
-       <reg32 offset="0x000f1" name="RBBM_CLOCK_CNTL_RB1"/>
-       <reg32 offset="0x000f2" name="RBBM_CLOCK_CNTL_RB2"/>
-       <reg32 offset="0x000f3" name="RBBM_CLOCK_CNTL_RB3"/>
-       <reg32 offset="0x000f4" name="RBBM_CLOCK_CNTL2_RB0"/>
-       <reg32 offset="0x000f5" name="RBBM_CLOCK_CNTL2_RB1"/>
-       <reg32 offset="0x000f6" name="RBBM_CLOCK_CNTL2_RB2"/>
-       <reg32 offset="0x000f7" name="RBBM_CLOCK_CNTL2_RB3"/>
-       <reg32 offset="0x000f8" name="RBBM_CLOCK_CNTL_CCU0"/>
-       <reg32 offset="0x000f9" name="RBBM_CLOCK_CNTL_CCU1"/>
-       <reg32 offset="0x000fa" name="RBBM_CLOCK_CNTL_CCU2"/>
-       <reg32 offset="0x000fb" name="RBBM_CLOCK_CNTL_CCU3"/>
-       <reg32 offset="0x00100" name="RBBM_CLOCK_HYST_RB_CCU0"/>
-       <reg32 offset="0x00101" name="RBBM_CLOCK_HYST_RB_CCU1"/>
-       <reg32 offset="0x00102" name="RBBM_CLOCK_HYST_RB_CCU2"/>
-       <reg32 offset="0x00103" name="RBBM_CLOCK_HYST_RB_CCU3"/>
-       <reg32 offset="0x00104" name="RBBM_CLOCK_CNTL_RAC"/>
-       <reg32 offset="0x00105" name="RBBM_CLOCK_CNTL2_RAC"/>
-       <reg32 offset="0x00106" name="RBBM_CLOCK_DELAY_RAC"/>
-       <reg32 offset="0x00107" name="RBBM_CLOCK_HYST_RAC"/>
-       <reg32 offset="0x00108" name="RBBM_CLOCK_CNTL_TSE_RAS_RBBM"/>
-       <reg32 offset="0x00109" name="RBBM_CLOCK_DELAY_TSE_RAS_RBBM"/>
-       <reg32 offset="0x0010a" name="RBBM_CLOCK_HYST_TSE_RAS_RBBM"/>
-       <reg32 offset="0x0010b" name="RBBM_CLOCK_CNTL_UCHE"/>
-       <reg32 offset="0x0010c" name="RBBM_CLOCK_CNTL2_UCHE"/>
-       <reg32 offset="0x0010d" name="RBBM_CLOCK_CNTL3_UCHE"/>
-       <reg32 offset="0x0010e" name="RBBM_CLOCK_CNTL4_UCHE"/>
-       <reg32 offset="0x0010f" name="RBBM_CLOCK_DELAY_UCHE"/>
-       <reg32 offset="0x00110" name="RBBM_CLOCK_HYST_UCHE"/>
-       <reg32 offset="0x00111" name="RBBM_CLOCK_MODE_VFD"/>
-       <reg32 offset="0x00112" name="RBBM_CLOCK_DELAY_VFD"/>
-       <reg32 offset="0x00113" name="RBBM_CLOCK_HYST_VFD"/>
-       <reg32 offset="0x00114" name="RBBM_CLOCK_MODE_GPC"/>
-       <reg32 offset="0x00115" name="RBBM_CLOCK_DELAY_GPC"/>
-       <reg32 offset="0x00116" name="RBBM_CLOCK_HYST_GPC"/>
-       <reg32 offset="0x00117" name="RBBM_CLOCK_DELAY_HLSQ_2"/>
-       <reg32 offset="0x00118" name="RBBM_CLOCK_CNTL_GMU_GX"/>
-       <reg32 offset="0x00119" name="RBBM_CLOCK_DELAY_GMU_GX"/>
-       <reg32 offset="0x0011a" name="RBBM_CLOCK_HYST_GMU_GX"/>
-       <reg32 offset="0x0011b" name="RBBM_CLOCK_MODE_HLSQ"/>
-       <reg32 offset="0x0011c" name="RBBM_CLOCK_DELAY_HLSQ"/>
-       <reg32 offset="0x0011d" name="RBBM_CLOCK_HYST_HLSQ"/>
-       <reg32 offset="0x00120" name="RBBM_CLOCK_CNTL_TEX_FCHE"/>
-       <reg32 offset="0x00121" name="RBBM_CLOCK_DELAY_TEX_FCHE"/>
-       <reg32 offset="0x00122" name="RBBM_CLOCK_HYST_TEX_FCHE"/>
-
-       <reg32 offset="0x0600" name="DBGC_CFG_DBGBUS_SEL_A"/>
-       <reg32 offset="0x0601" name="DBGC_CFG_DBGBUS_SEL_B"/>
-       <reg32 offset="0x0602" name="DBGC_CFG_DBGBUS_SEL_C"/>
-       <reg32 offset="0x0603" name="DBGC_CFG_DBGBUS_SEL_D">
-               <bitfield high="7" low="0" name="PING_INDEX"/>
-               <bitfield high="15" low="8" name="PING_BLK_SEL"/>
-       </reg32>
-       <reg32 offset="0x0604" name="DBGC_CFG_DBGBUS_CNTLT">
-               <bitfield high="5" low="0" name="TRACEEN"/>
-               <bitfield high="14" low="12" name="GRANU"/>
-               <bitfield high="31" low="28" name="SEGT"/>
-       </reg32>
-       <reg32 offset="0x0605" name="DBGC_CFG_DBGBUS_CNTLM">
-               <bitfield high="27" low="24" name="ENABLE"/>
-       </reg32>
-       <reg32 offset="0x0608" name="DBGC_CFG_DBGBUS_IVTL_0"/>
-       <reg32 offset="0x0609" name="DBGC_CFG_DBGBUS_IVTL_1"/>
-       <reg32 offset="0x060a" name="DBGC_CFG_DBGBUS_IVTL_2"/>
-       <reg32 offset="0x060b" name="DBGC_CFG_DBGBUS_IVTL_3"/>
-       <reg32 offset="0x060c" name="DBGC_CFG_DBGBUS_MASKL_0"/>
-       <reg32 offset="0x060d" name="DBGC_CFG_DBGBUS_MASKL_1"/>
-       <reg32 offset="0x060e" name="DBGC_CFG_DBGBUS_MASKL_2"/>
-       <reg32 offset="0x060f" name="DBGC_CFG_DBGBUS_MASKL_3"/>
-       <reg32 offset="0x0610" name="DBGC_CFG_DBGBUS_BYTEL_0">
-               <bitfield high="3" low="0" name="BYTEL0"/>
-               <bitfield high="7" low="4" name="BYTEL1"/>
-               <bitfield high="11" low="8" name="BYTEL2"/>
-               <bitfield high="15" low="12" name="BYTEL3"/>
-               <bitfield high="19" low="16" name="BYTEL4"/>
-               <bitfield high="23" low="20" name="BYTEL5"/>
-               <bitfield high="27" low="24" name="BYTEL6"/>
-               <bitfield high="31" low="28" name="BYTEL7"/>
-       </reg32>
-       <reg32 offset="0x0611" name="DBGC_CFG_DBGBUS_BYTEL_1">
-               <bitfield high="3" low="0" name="BYTEL8"/>
-               <bitfield high="7" low="4" name="BYTEL9"/>
-               <bitfield high="11" low="8" name="BYTEL10"/>
-               <bitfield high="15" low="12" name="BYTEL11"/>
-               <bitfield high="19" low="16" name="BYTEL12"/>
-               <bitfield high="23" low="20" name="BYTEL13"/>
-               <bitfield high="27" low="24" name="BYTEL14"/>
-               <bitfield high="31" low="28" name="BYTEL15"/>
-       </reg32>
-       <reg32 offset="0x062f" name="DBGC_CFG_DBGBUS_TRACE_BUF1"/>
-       <reg32 offset="0x0630" name="DBGC_CFG_DBGBUS_TRACE_BUF2"/>
-       <reg32 offset="0x0CD8" name="VSC_PERFCTR_VSC_SEL_0"/>
-       <reg32 offset="0x0CD9" name="VSC_PERFCTR_VSC_SEL_1"/>
-       <reg32 offset="0xBE05" name="HLSQ_ADDR_MODE_CNTL" type="a5xx_address_mode"/>
-       <reg32 offset="0xBE10" name="HLSQ_PERFCTR_HLSQ_SEL_0"/>
-       <reg32 offset="0xBE11" name="HLSQ_PERFCTR_HLSQ_SEL_1"/>
-       <reg32 offset="0xBE12" name="HLSQ_PERFCTR_HLSQ_SEL_2"/>
-       <reg32 offset="0xBE13" name="HLSQ_PERFCTR_HLSQ_SEL_3"/>
-       <reg32 offset="0xBE14" name="HLSQ_PERFCTR_HLSQ_SEL_4"/>
-       <reg32 offset="0xBE15" name="HLSQ_PERFCTR_HLSQ_SEL_5"/>
-       <reg32 offset="0xC800" name="HLSQ_DBG_AHB_READ_APERTURE"/>
-       <reg32 offset="0xD000" name="HLSQ_DBG_READ_SEL"/>
-       <reg32 offset="0xA601" name="VFD_ADDR_MODE_CNTL" type="a5xx_address_mode"/>
-       <reg32 offset="0xA610" name="VFD_PERFCTR_VFD_SEL_0"/>
-       <reg32 offset="0xA611" name="VFD_PERFCTR_VFD_SEL_1"/>
-       <reg32 offset="0xA612" name="VFD_PERFCTR_VFD_SEL_2"/>
-       <reg32 offset="0xA613" name="VFD_PERFCTR_VFD_SEL_3"/>
-       <reg32 offset="0xA614" name="VFD_PERFCTR_VFD_SEL_4"/>
-       <reg32 offset="0xA615" name="VFD_PERFCTR_VFD_SEL_5"/>
-       <reg32 offset="0xA616" name="VFD_PERFCTR_VFD_SEL_6"/>
-       <reg32 offset="0xA617" name="VFD_PERFCTR_VFD_SEL_7"/>
-       <reg32 offset="0x0E00" name="UCHE_ADDR_MODE_CNTL" type="a5xx_address_mode"/>
-       <reg32 offset="0x0E01" name="UCHE_MODE_CNTL"/>
-       <reg32 offset="0x0E05" name="UCHE_WRITE_RANGE_MAX_LO"/>
-       <reg32 offset="0x0E06" name="UCHE_WRITE_RANGE_MAX_HI"/>
-       <reg32 offset="0x0E07" name="UCHE_WRITE_THRU_BASE_LO"/>
-       <reg32 offset="0x0E08" name="UCHE_WRITE_THRU_BASE_HI"/>
-       <reg32 offset="0x0E09" name="UCHE_TRAP_BASE_LO"/>
-       <reg32 offset="0x0E0A" name="UCHE_TRAP_BASE_HI"/>
-       <reg32 offset="0x0E0B" name="UCHE_GMEM_RANGE_MIN_LO"/>
-       <reg32 offset="0x0E0C" name="UCHE_GMEM_RANGE_MIN_HI"/>
-       <reg32 offset="0x0E0D" name="UCHE_GMEM_RANGE_MAX_LO"/>
-       <reg32 offset="0x0E0E" name="UCHE_GMEM_RANGE_MAX_HI"/>
-       <reg32 offset="0x0E17" name="UCHE_CACHE_WAYS"/>
-       <reg32 offset="0x0E18" name="UCHE_FILTER_CNTL"/>
-       <reg32 offset="0x0E19" name="UCHE_CLIENT_PF">
-               <bitfield high="7" low="0" name="PERFSEL"/>
-       </reg32>
-       <reg32 offset="0x0E1C" name="UCHE_PERFCTR_UCHE_SEL_0"/>
-       <reg32 offset="0x0E1D" name="UCHE_PERFCTR_UCHE_SEL_1"/>
-       <reg32 offset="0x0E1E" name="UCHE_PERFCTR_UCHE_SEL_2"/>
-       <reg32 offset="0x0E1F" name="UCHE_PERFCTR_UCHE_SEL_3"/>
-       <reg32 offset="0x0E20" name="UCHE_PERFCTR_UCHE_SEL_4"/>
-       <reg32 offset="0x0E21" name="UCHE_PERFCTR_UCHE_SEL_5"/>
-       <reg32 offset="0x0E22" name="UCHE_PERFCTR_UCHE_SEL_6"/>
-       <reg32 offset="0x0E23" name="UCHE_PERFCTR_UCHE_SEL_7"/>
-       <reg32 offset="0x0E24" name="UCHE_PERFCTR_UCHE_SEL_8"/>
-       <reg32 offset="0x0E25" name="UCHE_PERFCTR_UCHE_SEL_9"/>
-       <reg32 offset="0x0E26" name="UCHE_PERFCTR_UCHE_SEL_10"/>
-       <reg32 offset="0x0E27" name="UCHE_PERFCTR_UCHE_SEL_11"/>
-       <reg32 offset="0xAE01" name="SP_ADDR_MODE_CNTL" type="a5xx_address_mode"/>
-       <reg32 offset="0xAE02" name="SP_NC_MODE_CNTL"/>
-       <reg32 offset="0xAE10" name="SP_PERFCTR_SP_SEL_0"/>
-       <reg32 offset="0xAE11" name="SP_PERFCTR_SP_SEL_1"/>
-       <reg32 offset="0xAE12" name="SP_PERFCTR_SP_SEL_2"/>
-       <reg32 offset="0xAE13" name="SP_PERFCTR_SP_SEL_3"/>
-       <reg32 offset="0xAE14" name="SP_PERFCTR_SP_SEL_4"/>
-       <reg32 offset="0xAE15" name="SP_PERFCTR_SP_SEL_5"/>
-       <reg32 offset="0xAE16" name="SP_PERFCTR_SP_SEL_6"/>
-       <reg32 offset="0xAE17" name="SP_PERFCTR_SP_SEL_7"/>
-       <reg32 offset="0xAE18" name="SP_PERFCTR_SP_SEL_8"/>
-       <reg32 offset="0xAE19" name="SP_PERFCTR_SP_SEL_9"/>
-       <reg32 offset="0xAE1A" name="SP_PERFCTR_SP_SEL_10"/>
-       <reg32 offset="0xAE1B" name="SP_PERFCTR_SP_SEL_11"/>
-       <reg32 offset="0xAE1C" name="SP_PERFCTR_SP_SEL_12"/>
-       <reg32 offset="0xAE1D" name="SP_PERFCTR_SP_SEL_13"/>
-       <reg32 offset="0xAE1E" name="SP_PERFCTR_SP_SEL_14"/>
-       <reg32 offset="0xAE1F" name="SP_PERFCTR_SP_SEL_15"/>
-       <reg32 offset="0xAE20" name="SP_PERFCTR_SP_SEL_16"/>
-       <reg32 offset="0xAE21" name="SP_PERFCTR_SP_SEL_17"/>
-       <reg32 offset="0xAE22" name="SP_PERFCTR_SP_SEL_18"/>
-       <reg32 offset="0xAE23" name="SP_PERFCTR_SP_SEL_19"/>
-       <reg32 offset="0xAE24" name="SP_PERFCTR_SP_SEL_20"/>
-       <reg32 offset="0xAE25" name="SP_PERFCTR_SP_SEL_21"/>
-       <reg32 offset="0xAE26" name="SP_PERFCTR_SP_SEL_22"/>
-       <reg32 offset="0xAE27" name="SP_PERFCTR_SP_SEL_23"/>
-       <reg32 offset="0xB601" name="TPL1_ADDR_MODE_CNTL" type="a5xx_address_mode"/>
-       <reg32 offset="0xB604" name="TPL1_NC_MODE_CNTL"/>
-       <reg32 offset="0xB608" name="TPL1_BICUBIC_WEIGHTS_TABLE_0"/>
-       <reg32 offset="0xB609" name="TPL1_BICUBIC_WEIGHTS_TABLE_1"/>
-       <reg32 offset="0xB60A" name="TPL1_BICUBIC_WEIGHTS_TABLE_2"/>
-       <reg32 offset="0xB60B" name="TPL1_BICUBIC_WEIGHTS_TABLE_3"/>
-       <reg32 offset="0xB60C" name="TPL1_BICUBIC_WEIGHTS_TABLE_4"/>
-       <reg32 offset="0xB610" name="TPL1_PERFCTR_TP_SEL_0"/>
-       <reg32 offset="0xB611" name="TPL1_PERFCTR_TP_SEL_1"/>
-       <reg32 offset="0xB612" name="TPL1_PERFCTR_TP_SEL_2"/>
-       <reg32 offset="0xB613" name="TPL1_PERFCTR_TP_SEL_3"/>
-       <reg32 offset="0xB614" name="TPL1_PERFCTR_TP_SEL_4"/>
-       <reg32 offset="0xB615" name="TPL1_PERFCTR_TP_SEL_5"/>
-       <reg32 offset="0xB616" name="TPL1_PERFCTR_TP_SEL_6"/>
-       <reg32 offset="0xB617" name="TPL1_PERFCTR_TP_SEL_7"/>
-       <reg32 offset="0xB618" name="TPL1_PERFCTR_TP_SEL_8"/>
-       <reg32 offset="0xB619" name="TPL1_PERFCTR_TP_SEL_9"/>
-       <reg32 offset="0xB61A" name="TPL1_PERFCTR_TP_SEL_10"/>
-       <reg32 offset="0xB61B" name="TPL1_PERFCTR_TP_SEL_11"/>
-       <reg32 offset="0x3000" name="VBIF_VERSION"/>
-       <reg32 offset="0x3001" name="VBIF_CLKON">
-               <bitfield pos="1" name="FORCE_ON_TESTBUS" type="boolean"/>
-       </reg32>
-       <reg32 offset="0x302A" name="VBIF_GATE_OFF_WRREQ_EN"/>
-       <reg32 offset="0x3080" name="VBIF_XIN_HALT_CTRL0"/>
-       <reg32 offset="0x3081" name="VBIF_XIN_HALT_CTRL1"/>
-       <reg32 offset="0x3084" name="VBIF_TEST_BUS_OUT_CTRL"/>
-       <reg32 offset="0x3085" name="VBIF_TEST_BUS1_CTRL0"/>
-       <reg32 offset="0x3086" name="VBIF_TEST_BUS1_CTRL1">
-               <bitfield low="0" high="3" name="DATA_SEL"/>
-       </reg32>
-       <reg32 offset="0x3087" name="VBIF_TEST_BUS2_CTRL0"/>
-       <reg32 offset="0x3088" name="VBIF_TEST_BUS2_CTRL1">
-               <bitfield low="0" high="8" name="DATA_SEL"/>
-       </reg32>
-       <reg32 offset="0x308c" name="VBIF_TEST_BUS_OUT"/>
-       <reg32 offset="0x30d0" name="VBIF_PERF_CNT_SEL0"/>
-       <reg32 offset="0x30d1" name="VBIF_PERF_CNT_SEL1"/>
-       <reg32 offset="0x30d2" name="VBIF_PERF_CNT_SEL2"/>
-       <reg32 offset="0x30d3" name="VBIF_PERF_CNT_SEL3"/>
-       <reg32 offset="0x30d8" name="VBIF_PERF_CNT_LOW0"/>
-       <reg32 offset="0x30d9" name="VBIF_PERF_CNT_LOW1"/>
-       <reg32 offset="0x30da" name="VBIF_PERF_CNT_LOW2"/>
-       <reg32 offset="0x30db" name="VBIF_PERF_CNT_LOW3"/>
-       <reg32 offset="0x30e0" name="VBIF_PERF_CNT_HIGH0"/>
-       <reg32 offset="0x30e1" name="VBIF_PERF_CNT_HIGH1"/>
-       <reg32 offset="0x30e2" name="VBIF_PERF_CNT_HIGH2"/>
-       <reg32 offset="0x30e3" name="VBIF_PERF_CNT_HIGH3"/>
-       <reg32 offset="0x3100" name="VBIF_PERF_PWR_CNT_EN0"/>
-       <reg32 offset="0x3101" name="VBIF_PERF_PWR_CNT_EN1"/>
-       <reg32 offset="0x3102" name="VBIF_PERF_PWR_CNT_EN2"/>
-       <reg32 offset="0x3110" name="VBIF_PERF_PWR_CNT_LOW0"/>
-       <reg32 offset="0x3111" name="VBIF_PERF_PWR_CNT_LOW1"/>
-       <reg32 offset="0x3112" name="VBIF_PERF_PWR_CNT_LOW2"/>
-       <reg32 offset="0x3118" name="VBIF_PERF_PWR_CNT_HIGH0"/>
-       <reg32 offset="0x3119" name="VBIF_PERF_PWR_CNT_HIGH1"/>
-       <reg32 offset="0x311a" name="VBIF_PERF_PWR_CNT_HIGH2"/>
-
-       <reg32 offset="0x3c02" name="GBIF_SCACHE_CNTL1"/>
-       <reg32 offset="0x3c03" name="GBIF_QSB_SIDE0"/>
-       <reg32 offset="0x3c04" name="GBIF_QSB_SIDE1"/>
-       <reg32 offset="0x3c05" name="GBIF_QSB_SIDE2"/>
-       <reg32 offset="0x3c06" name="GBIF_QSB_SIDE3"/>
-       <reg32 offset="0x3c45" name="GBIF_HALT"/>
-       <reg32 offset="0x3c46" name="GBIF_HALT_ACK"/>
-       <reg32 offset="0x3cc0" name="GBIF_PERF_PWR_CNT_EN"/>
-       <reg32 offset="0x3cc2" name="GBIF_PERF_CNT_SEL"/>
-       <reg32 offset="0x3cc3" name="GBIF_PERF_PWR_CNT_SEL"/>
-       <reg32 offset="0x3cc4" name="GBIF_PERF_CNT_LOW0"/>
-       <reg32 offset="0x3cc5" name="GBIF_PERF_CNT_LOW1"/>
-       <reg32 offset="0x3cc6" name="GBIF_PERF_CNT_LOW2"/>
-       <reg32 offset="0x3cc7" name="GBIF_PERF_CNT_LOW3"/>
-       <reg32 offset="0x3cc8" name="GBIF_PERF_CNT_HIGH0"/>
-       <reg32 offset="0x3cc9" name="GBIF_PERF_CNT_HIGH1"/>
-       <reg32 offset="0x3cca" name="GBIF_PERF_CNT_HIGH2"/>
-       <reg32 offset="0x3ccb" name="GBIF_PERF_CNT_HIGH3"/>
-       <reg32 offset="0x3ccc" name="GBIF_PWR_CNT_LOW0"/>
-       <reg32 offset="0x3ccd" name="GBIF_PWR_CNT_LOW1"/>
-       <reg32 offset="0x3cce" name="GBIF_PWR_CNT_LOW2"/>
-       <reg32 offset="0x3ccf" name="GBIF_PWR_CNT_HIGH0"/>
-       <reg32 offset="0x3cd0" name="GBIF_PWR_CNT_HIGH1"/>
-       <reg32 offset="0x3cd1" name="GBIF_PWR_CNT_HIGH2"/>
-
-       <!-- move/rename these.. -->
-
-       <reg32 offset="0xb4d1" name="SP_WINDOW_OFFSET" type="adreno_reg_xy"/>
-       <reg32 offset="0xb307" name="SP_TP_WINDOW_OFFSET" type="adreno_reg_xy"/>
-
-       <reg32 offset="0x0c02" name="VSC_BIN_SIZE">
-               <bitfield name="WIDTH" low="0" high="7" shr="5" type="uint"/>
-               <bitfield name="HEIGHT" low="8" high="16" shr="4" type="uint"/>
-       </reg32>
-       <reg32 offset="0x0c03" name="VSC_DRAW_STRM_SIZE_ADDRESS_LO"/>
-       <reg32 offset="0x0c04" name="VSC_DRAW_STRM_SIZE_ADDRESS_HI"/>
-       <reg64 offset="0x0c03" name="VSC_DRAW_STRM_SIZE_ADDRESS" type="waddress"/>
-       <reg32 offset="0x0c06" name="VSC_BIN_COUNT">
-               <bitfield name="NX" low="1" high="10" type="uint"/>
-               <bitfield name="NY" low="11" high="20" type="uint"/>
-       </reg32>
-       <array offset="0x0c10" name="VSC_PIPE_CONFIG" stride="1" length="32">
-               <reg32 offset="0x0" name="REG">
-                       <doc>
-                               Configures the mapping between VSC_PIPE buffer and
-                               bin, X/Y specify the bin index in the horiz/vert
-                               direction (0,0 is upper left, 0,1 is leftmost bin
-                               on second row, and so on).  W/H specify the number
-                               of bins assigned to this VSC_PIPE in the horiz/vert
-                               dimension.
-                       </doc>
-                       <bitfield name="X" low="0" high="9" type="uint"/>
-                       <bitfield name="Y" low="10" high="19" type="uint"/>
-                       <bitfield name="W" low="20" high="25" type="uint"/>
-                       <bitfield name="H" low="26" high="31" type="uint"/>
-               </reg32>
-       </array>
-       <!--
-       HW binning primitive & draw streams, which enable draws and primitives
-       within a draw to be skipped in the main tile pass.  See:
-       https://github.com/freedreno/freedreno/wiki/Visibility-Stream-Format
-
-       Compared to a5xx and earlier, we just program the address of the first
-       stream and hw adds (pipe_num * VSC_*_STRM_PITCH)
-
-       LIMIT is set to PITCH - 64, to make room for a bit of overflow
-        -->
-       <reg32 offset="0x0c30" name="VSC_PRIM_STRM_ADDRESS_LO"/>
-       <reg32 offset="0x0c31" name="VSC_PRIM_STRM_ADDRESS_HI"/>
-       <reg64 offset="0x0c30" name="VSC_PRIM_STRM_ADDRESS" type="waddress"/>
-       <reg32 offset="0x0c32" name="VSC_PRIM_STRM_PITCH"/>
-       <reg32 offset="0x0c33" name="VSC_PRIM_STRM_LIMIT"/>
-       <reg32 offset="0x0c34" name="VSC_DRAW_STRM_ADDRESS_LO"/>
-       <reg32 offset="0x0c35" name="VSC_DRAW_STRM_ADDRESS_HI"/>
-       <reg64 offset="0x0c34" name="VSC_DRAW_STRM_ADDRESS" type="waddress"/>
-       <reg32 offset="0x0c36" name="VSC_DRAW_STRM_PITCH"/>
-       <reg32 offset="0x0c37" name="VSC_DRAW_STRM_LIMIT"/>
-
-       <array offset="0x0c38" name="VSC_STATE" stride="1" length="32">
-               <doc>
-                       Seems to be a bitmap of which tiles mapped to the VSC
-                       pipe contain geometry.
-
-                       I suppose we can connect a maximum of 32 tiles to a
-                       single VSC pipe.
-               </doc>
-               <reg32 offset="0x0" name="REG"/>
-       </array>
-
-       <array offset="0x0c58" name="VSC_PRIM_STRM_SIZE" stride="1" length="32">
-               <doc>
-                       Has the size of data written to corresponding VSC_PRIM_STRM
-                       buffer.
-               </doc>
-               <reg32 offset="0x0" name="REG"/>
-       </array>
-
-       <array offset="0x0c78" name="VSC_DRAW_STRM_SIZE" stride="1" length="32">
-               <doc>
-                       Has the size of data written to corresponding VSC pipe, ie.
-                       same thing that is written out to VSC_DRAW_STRM_SIZE_ADDRESS_LO/HI
-               </doc>
-               <reg32 offset="0x0" name="REG"/>
-       </array>
-
-       <!-- always 0x03200000 ? -->
-       <reg32 offset="0x0e12" name="UCHE_UNKNOWN_0E12"/>
-
-       <!-- adreno_reg_xy has 15 bits per coordinate, but a6xx registers only have 14 -->
-       <bitset name="a6xx_reg_xy" inline="yes">
-               <bitfield name="X" low="0" high="13" type="uint"/>
-               <bitfield name="Y" low="16" high="29" type="uint"/>
-       </bitset>
-
-       <reg32 offset="0x8000" name="GRAS_CL_CNTL">
-               <bitfield name="CLIP_DISABLE" pos="0" type="boolean"/>
-               <bitfield name="ZNEAR_CLIP_DISABLE" pos="1" type="boolean"/>
-               <bitfield name="ZFAR_CLIP_DISABLE" pos="2" type="boolean"/>
-               <!-- set with depthClampEnable, not clear what it does -->
-               <bitfield name="UNK5" pos="5" type="boolean"/>
-               <!-- controls near z clip behavior (set for vulkan) -->
-               <bitfield name="ZERO_GB_SCALE_Z" pos="6" type="boolean"/>
-               <!-- guess based on a3xx and meaning of bits 8 and 9
-                    if the guess is right then this is related to point sprite clipping -->
-               <bitfield name="VP_CLIP_CODE_IGNORE" pos="7" type="boolean"/>
-               <bitfield name="VP_XFORM_DISABLE" pos="8" type="boolean"/>
-               <bitfield name="PERSP_DIVISION_DISABLE" pos="9" type="boolean"/>
-       </reg32>
-
-       <bitset name="a6xx_gras_xs_cl_cntl" inline="yes">
-               <bitfield name="CLIP_MASK" low="0" high="7"/>
-               <bitfield name="CULL_MASK" low="8" high="15"/>
-       </bitset>
-       <reg32 offset="0x8001" name="GRAS_VS_CL_CNTL" type="a6xx_gras_xs_cl_cntl"/>
-       <reg32 offset="0x8002" name="GRAS_DS_CL_CNTL" type="a6xx_gras_xs_cl_cntl"/>
-       <reg32 offset="0x8003" name="GRAS_GS_CL_CNTL" type="a6xx_gras_xs_cl_cntl"/>
-       <reg32 offset="0x8004" name="GRAS_MAX_LAYER_INDEX" low="0" high="10" type="uint"/>
-
-       <reg32 offset="0x8005" name="GRAS_CNTL">
-               <!-- see also RB_RENDER_CONTROL0 -->
-               <bitfield name="IJ_PERSP_PIXEL" pos="0" type="boolean"/>
-               <!-- b1 set for interpolateAtCentroid() -->
-               <bitfield name="IJ_PERSP_CENTROID" pos="1" type="boolean"/>
-               <!-- b2 set instead of b0 when running in per-sample mode -->
-               <bitfield name="IJ_PERSP_SAMPLE" pos="2" type="boolean"/>
-               <!--
-               b3 set for interpolateAt{Offset,Sample}() if not in per-sample
-               mode, and frag_face
-                -->
-               <bitfield name="SIZE" pos="3" type="boolean"/>
-               <bitfield name="UNK4" pos="4" type="boolean"/>
-               <!-- b5 set ofr interpolateAt{Offset,Sample}() if in per-sample mode -->
-               <bitfield name="SIZE_PERSAMP" pos="5" type="boolean"/>
-               <bitfield name="COORD_MASK" low="6" high="9" type="hex"/>
-       </reg32>
-       <reg32 offset="0x8006" name="GRAS_CL_GUARDBAND_CLIP_ADJ">
-               <bitfield name="HORZ" low="0" high="8" type="uint"/>
-               <bitfield name="VERT" low="10" high="18" type="uint"/>
-       </reg32>
-       <!-- 0x8006-0x800f invalid -->
-       <array offset="0x8010" name="GRAS_CL_VPORT" stride="6" length="16">
-               <reg32 offset="0" name="XOFFSET" type="float"/>
-               <reg32 offset="1" name="XSCALE" type="float"/>
-               <reg32 offset="2" name="YOFFSET" type="float"/>
-               <reg32 offset="3" name="YSCALE" type="float"/>
-               <reg32 offset="4" name="ZOFFSET" type="float"/>
-               <reg32 offset="5" name="ZSCALE" type="float"/>
-       </array>
-       <array offset="0x8070" name="GRAS_CL_Z_CLAMP" stride="2" length="16">
-               <reg32 offset="0" name="MIN" type="float"/>
-               <reg32 offset="1" name="MAX" type="float"/>
-       </array>
-
-       <reg32 offset="0x8090" name="GRAS_SU_CNTL">
-               <bitfield name="CULL_FRONT" pos="0" type="boolean"/>
-               <bitfield name="CULL_BACK" pos="1" type="boolean"/>
-               <bitfield name="FRONT_CW" pos="2" type="boolean"/>
-               <bitfield name="LINEHALFWIDTH" low="3" high="10" radix="2" type="fixed"/>
-               <bitfield name="POLY_OFFSET" pos="11" type="boolean"/>
-               <bitfield name="UNK12" pos="12"/>
-               <bitfield name="MSAA_ENABLE" pos="13" type="boolean"/>
-               <bitfield name="UNK15" low="15" high="22"/>
-       </reg32>
-       <reg32 offset="0x8091" name="GRAS_SU_POINT_MINMAX">
-               <bitfield name="MIN" low="0" high="15" type="ufixed" radix="4"/>
-               <bitfield name="MAX" low="16" high="31" type="ufixed" radix="4"/>
-       </reg32>
-       <reg32 offset="0x8092" name="GRAS_SU_POINT_SIZE" low="0" high="15" type="fixed" radix="4"/>
-       <!-- 0x8093 invalid -->
-       <reg32 offset="0x8094" name="GRAS_SU_DEPTH_PLANE_CNTL">
-               <bitfield name="Z_MODE" low="0" high="1" type="a6xx_ztest_mode"/>
-       </reg32>
-       <reg32 offset="0x8095" name="GRAS_SU_POLY_OFFSET_SCALE" type="float"/>
-       <reg32 offset="0x8096" name="GRAS_SU_POLY_OFFSET_OFFSET" type="float"/>
-       <reg32 offset="0x8097" name="GRAS_SU_POLY_OFFSET_OFFSET_CLAMP" type="float"/>
-       <!-- duplicates RB_DEPTH_BUFFER_INFO: -->
-       <reg32 offset="0x8098" name="GRAS_SU_DEPTH_BUFFER_INFO">
-               <bitfield name="DEPTH_FORMAT" low="0" high="2" type="a6xx_depth_format"/>
-               <bitfield name="UNK3" pos="3"/>
-       </reg32>
-
-       <reg32 offset="0x8099" name="GRAS_UNKNOWN_8099" low="0" high="5"/>
-       <reg32 offset="0x809a" name="GRAS_UNKNOWN_809A" low="0" high="1"/>
-
-       <bitset name="a6xx_gras_layer_cntl" inline="yes">
-               <bitfield name="WRITES_LAYER" pos="0" type="boolean"/>
-               <bitfield name="WRITES_VIEW" pos="1" type="boolean"/>
-       </bitset>
-       <reg32 offset="0x809b" name="GRAS_VS_LAYER_CNTL" type="a6xx_gras_layer_cntl"/>
-       <reg32 offset="0x809c" name="GRAS_GS_LAYER_CNTL" type="a6xx_gras_layer_cntl"/>
-       <reg32 offset="0x809d" name="GRAS_DS_LAYER_CNTL" type="a6xx_gras_layer_cntl"/>
-       <!-- 0x809e/0x809f invalid -->
-       <reg32 offset="0x80a0" name="GRAS_UNKNOWN_80A0" low="0" high="12"/>
-       <reg32 offset="0x80a1" name="GRAS_BIN_CONTROL">
-               <bitfield name="BINW" low="0" high="5" shr="5" type="uint"/>
-               <bitfield name="BINH" low="8" high="14" shr="4" type="uint"/>
-               <bitfield name="BINNING_PASS" pos="18" type="boolean"/>
-               <bitfield name="UNK19" pos="19"/>
-               <bitfield name="UNK20" pos="20"/>
-               <bitfield name="USE_VIZ" pos="21" type="boolean"/>
-               <bitfield name="UNK22" low="22" high="27"/>
-       </reg32>
-
-       <reg32 offset="0x80a2" name="GRAS_RAS_MSAA_CNTL">
-               <bitfield name="SAMPLES" low="0" high="1" type="a3xx_msaa_samples"/>
-               <bitfield name="UNK2" pos="2"/>
-               <bitfield name="UNK3" pos="3"/>
-       </reg32>
-       <reg32 offset="0x80a3" name="GRAS_DEST_MSAA_CNTL">
-               <bitfield name="SAMPLES" low="0" high="1" type="a3xx_msaa_samples"/>
-               <bitfield name="MSAA_DISABLE" pos="2" type="boolean"/>
-       </reg32>
-
-       <bitset name="a6xx_sample_config" inline="yes">
-               <bitfield name="UNK0" pos="0"/>
-               <bitfield name="LOCATION_ENABLE" pos="1" type="boolean"/>
-       </bitset>
-
-       <bitset name="a6xx_sample_locations" inline="yes">
-               <bitfield name="SAMPLE_0_X" low="0" high="3" radix="4" type="fixed"/>
-               <bitfield name="SAMPLE_0_Y" low="4" high="7" radix="4" type="fixed"/>
-               <bitfield name="SAMPLE_1_X" low="8" high="11" radix="4" type="fixed"/>
-               <bitfield name="SAMPLE_1_Y" low="12" high="15" radix="4" type="fixed"/>
-               <bitfield name="SAMPLE_2_X" low="16" high="19" radix="4" type="fixed"/>
-               <bitfield name="SAMPLE_2_Y" low="20" high="23" radix="4" type="fixed"/>
-               <bitfield name="SAMPLE_3_X" low="24" high="27" radix="4" type="fixed"/>
-               <bitfield name="SAMPLE_3_Y" low="28" high="31" radix="4" type="fixed"/>
-       </bitset>
-
-       <reg32 offset="0x80a4" name="GRAS_SAMPLE_CONFIG" type="a6xx_sample_config"/>
-       <reg32 offset="0x80a5" name="GRAS_SAMPLE_LOCATION_0" type="a6xx_sample_locations"/>
-       <reg32 offset="0x80a6" name="GRAS_SAMPLE_LOCATION_1" type="a6xx_sample_locations"/>
-       <!-- 0x80a7-0x80ae invalid -->
-       <reg32 offset="0x80af" name="GRAS_UNKNOWN_80AF" pos="0"/>
-
-       <bitset name="a6xx_scissor_xy" inline="yes">
-               <bitfield name="X" low="0" high="15" type="uint"/>
-               <bitfield name="Y" low="16" high="31" type="uint"/>
-       </bitset>
-       <array offset="0x80b0" name="GRAS_SC_SCREEN_SCISSOR" stride="2" length="16">
-               <reg32 offset="0" name="TL" type="a6xx_scissor_xy"/>
-               <reg32 offset="1" name="BR" type="a6xx_scissor_xy"/>
-       </array>
-       <array offset="0x80d0" name="GRAS_SC_VIEWPORT_SCISSOR" stride="2" length="16">
-               <reg32 offset="0" name="TL" type="a6xx_scissor_xy"/>
-               <reg32 offset="1" name="BR" type="a6xx_scissor_xy"/>
-       </array>
-
-       <reg32 offset="0x80f0" name="GRAS_SC_WINDOW_SCISSOR_TL" type="a6xx_reg_xy"/>
-       <reg32 offset="0x80f1" name="GRAS_SC_WINDOW_SCISSOR_BR" type="a6xx_reg_xy"/>
-       <!-- 0x80f2-0x80ff invalid -->
-
-       <reg32 offset="0x8100" name="GRAS_LRZ_CNTL">
-               <!--
-               These bits seems to mostly fit.. but wouldn't hurt to have a 2nd
-               look when we get around to enabling lrz
-                -->
-               <bitfield name="ENABLE" pos="0" type="boolean"/>
-               <doc>LRZ write also disabled for blend/etc.</doc>
-               <bitfield name="LRZ_WRITE" pos="1" type="boolean"/>
-               <doc>update MAX instead of MIN value, ie. GL_GREATER/GL_GEQUAL</doc>
-               <bitfield name="GREATER" pos="2" type="boolean"/>
-               <bitfield name="FC_ENABLE" pos="3" type="boolean"/>
-               <!-- set when depth-test + depth-write enabled -->
-               <bitfield name="Z_TEST_ENABLE" pos="4" type="boolean"/>
-               <bitfield name="UNK5" low="5" high="9"/>
-       </reg32>
-       <reg32 offset="0x8101" name="GRAS_UNKNOWN_8101" low="0" high="2"/>
-       <reg32 offset="0x8102" name="GRAS_2D_BLIT_INFO">
-               <bitfield name="COLOR_FORMAT" low="0" high="7" type="a6xx_format"/>
-       </reg32>
-       <reg32 offset="0x8103" name="GRAS_LRZ_BUFFER_BASE_LO"/>
-       <reg32 offset="0x8104" name="GRAS_LRZ_BUFFER_BASE_HI"/>
-       <reg64 offset="0x8103" name="GRAS_LRZ_BUFFER_BASE" align="256" type="waddress"/>
-       <reg32 offset="0x8105" name="GRAS_LRZ_BUFFER_PITCH">
-               <!-- TODO: fix the shr fields -->
-               <bitfield name="PITCH" low="0" high="7" shr="5" type="uint"/>
-               <bitfield name="ARRAY_PITCH" low="10" high="28" shr="4" type="uint"/>
-       </reg32>
-
-       <!--
-       The LRZ "fast clear" buffer is initialized to zero's by blob, and
-       read/written when GRAS_LRZ_CNTL.FC_ENABLE (b3) is set.  It appears
-       to store 1b/block.  It appears that '0' means block has original
-       depth clear value, and '1' means that the corresponding block in
-       LRZ has been modified.  Ignoring alignment/padding, the size is
-       given by the formula:
-
-               // calculate LRZ size from depth size:
-               if (nr_samples == 4) {
-                       width *= 2;
-                       height *= 2;
-               } else if (nr_samples == 2) {
-                       height *= 2;
-               }
-
-               lrz_width = div_round_up(width, 8);
-               lrz_heigh = div_round_up(height, 8);
-
-               // calculate # of blocks:
-               nblocksx = div_round_up(lrz_width, 16);
-               nblocksy = div_round_up(lrz_height, 4);
-
-               // fast-clear buffer is 1bit/block:
-               fc_sz = div_round_up(nblocksx * nblocksy, 8);
-
-       In practice the blob seems to switch off FC_ENABLE once the size
-       increases beyond 1 page.  Not sure if that is an actual limit or
-       not.
-        -->
-       <reg32 offset="0x8106" name="GRAS_LRZ_FAST_CLEAR_BUFFER_BASE_LO"/>
-       <reg32 offset="0x8107" name="GRAS_LRZ_FAST_CLEAR_BUFFER_BASE_HI"/>
-       <reg32 offset="0x8106" name="GRAS_LRZ_FAST_CLEAR_BUFFER_BASE" align="64" type="waddress"/>
-       <!-- 0x8108 invalid -->
-       <reg32 offset="0x8109" name="GRAS_SAMPLE_CNTL">
-               <bitfield name="PER_SAMP_MODE" pos="0" type="boolean"/>
-       </reg32>
-       <reg32 offset="0x810a" name="GRAS_UNKNOWN_810A">
-               <bitfield name="UNK0" low="0" high="10" type="uint"/>
-               <bitfield name="UNK16" low="16" high="26" type="uint"/>
-               <bitfield name="UNK28" low="28" high="31" type="uint"/>
-       </reg32>
-
-       <!-- 0x810b-0x810f invalid -->
-
-       <reg32 offset="0x8110" name="GRAS_UNKNOWN_8110" low="0" high="1"/>
-
-       <!-- 0x8111-0x83ff invalid -->
-
-       <enum name="a6xx_rotation">
-               <value value="0x0" name="ROTATE_0"/>
-               <value value="0x1" name="ROTATE_90"/>
-               <value value="0x2" name="ROTATE_180"/>
-               <value value="0x3" name="ROTATE_270"/>
-               <value value="0x4" name="ROTATE_HFLIP"/>
-               <value value="0x5" name="ROTATE_VFLIP"/>
-       </enum>
-
-       <bitset name="a6xx_2d_blit_cntl" inline="yes">
-               <bitfield name="ROTATE" low="0" high="2" type="a6xx_rotation"/>
-               <bitfield name="UNK3" low="3" high="6"/>
-               <bitfield name="SOLID_COLOR" pos="7" type="boolean"/>
-               <bitfield name="COLOR_FORMAT" low="8" high="15" type="a6xx_format"/>
-               <bitfield name="SCISSOR" pos="16" type="boolean"/>
-               <bitfield name="UNK17" low="17" high="18"/>
-               <!-- required when blitting D24S8/D24X8 -->
-               <bitfield name="D24S8" pos="19" type="boolean"/>
-               <!-- some sort of channel mask, disabled channels are set to zero ? -->
-               <bitfield name="MASK" low="20" high="23"/>
-               <bitfield name="IFMT" low="24" high="28" type="a6xx_2d_ifmt"/>
-               <bitfield name="UNK29" pos="29"/>
-       </bitset>
-
-       <reg32 offset="0x8400" name="GRAS_2D_BLIT_CNTL" type="a6xx_2d_blit_cntl"/>
-       <!-- note: the low 8 bits for src coords are valid, probably fixed point
-            it would be a bit weird though, since we subtract 1 from BR coords
-            apparently signed, gallium driver uses negative coords and it works?
-        -->
-       <reg32 offset="0x8401" name="GRAS_2D_SRC_TL_X" low="8" high="24" type="int"/>
-       <reg32 offset="0x8402" name="GRAS_2D_SRC_BR_X" low="8" high="24" type="int"/>
-       <reg32 offset="0x8403" name="GRAS_2D_SRC_TL_Y" low="8" high="24" type="int"/>
-       <reg32 offset="0x8404" name="GRAS_2D_SRC_BR_Y" low="8" high="24" type="int"/>
-       <reg32 offset="0x8405" name="GRAS_2D_DST_TL" type="a6xx_reg_xy"/>
-       <reg32 offset="0x8406" name="GRAS_2D_DST_BR" type="a6xx_reg_xy"/>
-       <reg32 offset="0x8407" name="GRAS_2D_UNKNOWN_8407" low="0" high="31"/>
-       <reg32 offset="0x8408" name="GRAS_2D_UNKNOWN_8408" low="0" high="31"/>
-       <reg32 offset="0x8409" name="GRAS_2D_UNKNOWN_8409" low="0" high="31"/>
-       <reg32 offset="0x840a" name="GRAS_2D_RESOLVE_CNTL_1" type="a6xx_reg_xy"/>
-       <reg32 offset="0x840b" name="GRAS_2D_RESOLVE_CNTL_2" type="a6xx_reg_xy"/>
-       <!-- 0x840c-0x85ff invalid -->
-
-       <!-- always 0x880 ? (and 0 in a640/a650 traces?) -->
-       <reg32 offset="0x8600" name="GRAS_UNKNOWN_8600" low="0" high="12" />
-       <reg32 offset="0x8601" name="GRAS_ADDR_MODE_CNTL" pos="0" type="a5xx_address_mode"/>
-       <reg32 offset="0x8610" name="GRAS_PERFCTR_TSE_SEL_0"/>
-       <reg32 offset="0x8611" name="GRAS_PERFCTR_TSE_SEL_1"/>
-       <reg32 offset="0x8612" name="GRAS_PERFCTR_TSE_SEL_2"/>
-       <reg32 offset="0x8613" name="GRAS_PERFCTR_TSE_SEL_3"/>
-       <reg32 offset="0x8614" name="GRAS_PERFCTR_RAS_SEL_0"/>
-       <reg32 offset="0x8615" name="GRAS_PERFCTR_RAS_SEL_1"/>
-       <reg32 offset="0x8616" name="GRAS_PERFCTR_RAS_SEL_2"/>
-       <reg32 offset="0x8617" name="GRAS_PERFCTR_RAS_SEL_3"/>
-       <reg32 offset="0x8618" name="GRAS_PERFCTR_LRZ_SEL_0"/>
-       <reg32 offset="0x8619" name="GRAS_PERFCTR_LRZ_SEL_1"/>
-       <reg32 offset="0x861A" name="GRAS_PERFCTR_LRZ_SEL_2"/>
-       <reg32 offset="0x861B" name="GRAS_PERFCTR_LRZ_SEL_3"/>
-
-       <!-- note 0x8620-0x87ff are not all invalid
-       (in particular, 0x8631/0x8632 have 0x3fff3fff mask and would be xy coords)
-       -->
-
-       <!-- same as GRAS_BIN_CONTROL, but without bit 27: -->
-       <reg32 offset="0x8800" name="RB_BIN_CONTROL">
-               <bitfield name="BINW" low="0" high="5" shr="5" type="uint"/>
-               <bitfield name="BINH" low="8" high="14" shr="4" type="uint"/>
-               <bitfield name="BINNING_PASS" pos="18" type="boolean"/>
-               <bitfield name="UNK19" pos="19"/>
-               <bitfield name="UNK20" pos="20"/>
-               <bitfield name="USE_VIZ" pos="21" type="boolean"/>
-               <bitfield name="UNK22" low="22" high="26"/>
-       </reg32>
-       <reg32 offset="0x8801" name="RB_RENDER_CNTL">
-               <bitfield name="UNK3" pos="3" type="boolean"/>
-               <!-- always set: ?? -->
-               <bitfield name="UNK4" pos="4" type="boolean"/>
-               <bitfield name="UNK5" low="5" high="6"/>
-               <!-- set during binning pass: -->
-               <bitfield name="BINNING" pos="7" type="boolean"/>
-               <bitfield name="UNK8" low="8" high="12"/>
-               <!-- bit seems to be set whenever depth buffer enabled: -->
-               <bitfield name="FLAG_DEPTH" pos="14" type="boolean"/>
-               <!-- bitmask of MRTs using UBWC flag buffer: -->
-               <bitfield name="FLAG_MRTS" low="16" high="23"/>
-       </reg32>
-       <reg32 offset="0x8802" name="RB_RAS_MSAA_CNTL">
-               <bitfield name="SAMPLES" low="0" high="1" type="a3xx_msaa_samples"/>
-               <bitfield name="UNK2" pos="2"/>
-               <bitfield name="UNK3" pos="3"/>
-       </reg32>
-       <reg32 offset="0x8803" name="RB_DEST_MSAA_CNTL">
-               <bitfield name="SAMPLES" low="0" high="1" type="a3xx_msaa_samples"/>
-               <bitfield name="MSAA_DISABLE" pos="2" type="boolean"/>
-       </reg32>
-
-       <reg32 offset="0x8804" name="RB_SAMPLE_CONFIG" type="a6xx_sample_config"/>
-       <reg32 offset="0x8805" name="RB_SAMPLE_LOCATION_0" type="a6xx_sample_locations"/>
-       <reg32 offset="0x8806" name="RB_SAMPLE_LOCATION_1" type="a6xx_sample_locations"/>
-       <!-- 0x8807-0x8808 invalid -->
-       <!--
-       note: maybe not actually called RB_RENDER_CONTROLn (since RB_RENDER_CNTL
-       name comes from kernel and is probably right)
-        -->
-       <reg32 offset="0x8809" name="RB_RENDER_CONTROL0">
-               <!-- see also GRAS_CNTL -->
-               <bitfield name="IJ_PERSP_PIXEL" pos="0" type="boolean"/>
-               <!-- b1 set for interpolateAtCentroid() -->
-               <bitfield name="IJ_PERSP_CENTROID" pos="1" type="boolean"/>
-               <!-- b2 set instead of b0 when running in per-sample mode -->
-               <bitfield name="IJ_PERSP_SAMPLE" pos="2" type="boolean"/>
-               <!--
-               b3 set for interpolateAt{Offset,Sample}() if not in per-sample
-               mode, and frag_face
-                -->
-               <bitfield name="SIZE" pos="3" type="boolean"/>
-               <bitfield name="UNK4" pos="4" type="boolean"/>
-               <!-- b5 set ofr interpolateAt{Offset,Sample}() if in per-sample mode -->
-               <bitfield name="SIZE_PERSAMP" pos="5" type="boolean"/>
-               <bitfield name="COORD_MASK" low="6" high="9" type="hex"/>
-               <bitfield name="UNK10" pos="10" type="boolean"/>
-       </reg32>
-       <reg32 offset="0x880a" name="RB_RENDER_CONTROL1">
-               <!-- enable bits for various FS sysvalue regs: -->
-               <bitfield name="SAMPLEMASK" pos="0" type="boolean"/>
-               <bitfield name="UNK1" pos="1" type="boolean"/>
-               <bitfield name="FACENESS" pos="2" type="boolean"/>
-               <bitfield name="SAMPLEID" pos="3" type="boolean"/>
-               <!-- b4 and b5 set in per-sample mode: -->
-               <bitfield name="UNK4" pos="4" type="boolean"/>
-               <bitfield name="UNK5" pos="5" type="boolean"/>
-               <bitfield name="SIZE" pos="6" type="boolean"/>
-               <bitfield name="UNK7" pos="7" type="boolean"/>
-               <bitfield name="UNK8" pos="8" type="boolean"/>
-       </reg32>
-
-       <reg32 offset="0x880b" name="RB_FS_OUTPUT_CNTL0">
-               <bitfield name="DUAL_COLOR_IN_ENABLE" pos="0" type="boolean"/>
-               <bitfield name="FRAG_WRITES_Z" pos="1" type="boolean"/>
-               <bitfield name="FRAG_WRITES_SAMPMASK" pos="2" type="boolean"/>
-               <bitfield name="FRAG_WRITES_STENCILREF" pos="3" type="boolean"/>
-       </reg32>
-       <reg32 offset="0x880c" name="RB_FS_OUTPUT_CNTL1">
-               <bitfield name="MRT" low="0" high="3" type="uint"/>
-       </reg32>
-       <reg32 offset="0x880d" name="RB_RENDER_COMPONENTS">
-               <bitfield name="RT0" low="0" high="3"/>
-               <bitfield name="RT1" low="4" high="7"/>
-               <bitfield name="RT2" low="8" high="11"/>
-               <bitfield name="RT3" low="12" high="15"/>
-               <bitfield name="RT4" low="16" high="19"/>
-               <bitfield name="RT5" low="20" high="23"/>
-               <bitfield name="RT6" low="24" high="27"/>
-               <bitfield name="RT7" low="28" high="31"/>
-       </reg32>
-       <reg32 offset="0x880e" name="RB_DITHER_CNTL">
-               <bitfield name="DITHER_MODE_MRT0" low="0"  high="1"  type="adreno_rb_dither_mode"/>
-               <bitfield name="DITHER_MODE_MRT1" low="2"  high="3"  type="adreno_rb_dither_mode"/>
-               <bitfield name="DITHER_MODE_MRT2" low="4"  high="5"  type="adreno_rb_dither_mode"/>
-               <bitfield name="DITHER_MODE_MRT3" low="6"  high="7"  type="adreno_rb_dither_mode"/>
-               <bitfield name="DITHER_MODE_MRT4" low="8"  high="9"  type="adreno_rb_dither_mode"/>
-               <bitfield name="DITHER_MODE_MRT5" low="10" high="11" type="adreno_rb_dither_mode"/>
-               <bitfield name="DITHER_MODE_MRT6" low="12" high="12" type="adreno_rb_dither_mode"/>
-               <bitfield name="DITHER_MODE_MRT7" low="14" high="15" type="adreno_rb_dither_mode"/>
-       </reg32>
-       <reg32 offset="0x880f" name="RB_SRGB_CNTL">
-               <!-- Same as SP_SRGB_CNTL -->
-               <bitfield name="SRGB_MRT0" pos="0" type="boolean"/>
-               <bitfield name="SRGB_MRT1" pos="1" type="boolean"/>
-               <bitfield name="SRGB_MRT2" pos="2" type="boolean"/>
-               <bitfield name="SRGB_MRT3" pos="3" type="boolean"/>
-               <bitfield name="SRGB_MRT4" pos="4" type="boolean"/>
-               <bitfield name="SRGB_MRT5" pos="5" type="boolean"/>
-               <bitfield name="SRGB_MRT6" pos="6" type="boolean"/>
-               <bitfield name="SRGB_MRT7" pos="7" type="boolean"/>
-       </reg32>
-
-       <reg32 offset="0x8810" name="RB_SAMPLE_CNTL">
-               <bitfield name="PER_SAMP_MODE" pos="0" type="boolean"/>
-       </reg32>
-       <reg32 offset="0x8811" name="RB_UNKNOWN_8811" low="4" high="6"/>
-       <!-- 0x8812-0x8817 invalid -->
-       <!-- always 0x0 ? -->
-       <reg32 offset="0x8818" name="RB_UNKNOWN_8818" low="0" high="6"/>
-       <!-- 0x8819-0x881e all 32 bits -->
-       <reg32 offset="0x8819" name="RB_UNKNOWN_8819"/>
-       <reg32 offset="0x881a" name="RB_UNKNOWN_881A"/>
-       <reg32 offset="0x881b" name="RB_UNKNOWN_881B"/>
-       <reg32 offset="0x881c" name="RB_UNKNOWN_881C"/>
-       <reg32 offset="0x881d" name="RB_UNKNOWN_881D"/>
-       <reg32 offset="0x881e" name="RB_UNKNOWN_881E"/>
-       <!-- 0x881f invalid -->
-       <array offset="0x8820" name="RB_MRT" stride="8" length="8">
-               <reg32 offset="0x0" name="CONTROL">
-                       <bitfield name="BLEND" pos="0" type="boolean"/>
-                       <bitfield name="BLEND2" pos="1" type="boolean"/>
-                       <bitfield name="ROP_ENABLE" pos="2" type="boolean"/>
-                       <bitfield name="ROP_CODE" low="3" high="6" type="a3xx_rop_code"/>
-                       <bitfield name="COMPONENT_ENABLE" low="7" high="10" type="hex"/>
-               </reg32>
-               <reg32 offset="0x1" name="BLEND_CONTROL">
-                       <bitfield name="RGB_SRC_FACTOR" low="0" high="4" type="adreno_rb_blend_factor"/>
-                       <bitfield name="RGB_BLEND_OPCODE" low="5" high="7" type="a3xx_rb_blend_opcode"/>
-                       <bitfield name="RGB_DEST_FACTOR" low="8" high="12" type="adreno_rb_blend_factor"/>
-                       <bitfield name="ALPHA_SRC_FACTOR" low="16" high="20" type="adreno_rb_blend_factor"/>
-                       <bitfield name="ALPHA_BLEND_OPCODE" low="21" high="23" type="a3xx_rb_blend_opcode"/>
-                       <bitfield name="ALPHA_DEST_FACTOR" low="24" high="28" type="adreno_rb_blend_factor"/>
-               </reg32>
-               <reg32 offset="0x2" name="BUF_INFO">
-                       <bitfield name="COLOR_FORMAT" low="0" high="7" type="a6xx_format"/>
-                       <bitfield name="COLOR_TILE_MODE" low="8" high="9" type="a6xx_tile_mode"/>
-                       <bitfield name="UNK10" pos="10"/>
-                       <bitfield name="COLOR_SWAP" low="13" high="14" type="a3xx_color_swap"/>
-               </reg32>
-               <!--
-               at least in gmem, things seem to be aligned to pitch of 64..
-               maybe an artifact of tiled format used in gmem?
-                -->
-               <reg32 offset="0x3" name="PITCH" shr="6" high="15" type="uint"/>
-               <reg32 offset="0x4" name="ARRAY_PITCH" shr="6" high="28" type="uint"/>
-               <!--
-               Compared to a5xx and before, we configure both a GMEM base and
-               external base.  Not sure if this is to facilitate GMEM save/
-               restore for context switch, or just to simplify state setup to
-               not have to care about GMEM vs BYPASS mode.
-                -->
-               <reg32 offset="0x5" name="BASE_LO"/>
-               <reg32 offset="0x6" name="BASE_HI"/>
-
-               <!-- maybe something in low bits since alignment of 1 doesn't make sense? -->
-               <reg64 offset="0x5" name="BASE" type="waddress" align="1"/>
-
-               <reg32 offset="0x7" name="BASE_GMEM" low="12" high="31" shr="12"/>
-       </array>
-
-       <reg32 offset="0x8860" name="RB_BLEND_RED_F32" type="float"/>
-       <reg32 offset="0x8861" name="RB_BLEND_GREEN_F32" type="float"/>
-       <reg32 offset="0x8862" name="RB_BLEND_BLUE_F32" type="float"/>
-       <reg32 offset="0x8863" name="RB_BLEND_ALPHA_F32" type="float"/>
-       <reg32 offset="0x8864" name="RB_ALPHA_CONTROL">
-               <bitfield name="ALPHA_REF" low="0" high="7" type="hex"/>
-               <bitfield name="ALPHA_TEST" pos="8" type="boolean"/>
-               <bitfield name="ALPHA_TEST_FUNC" low="9" high="11" type="adreno_compare_func"/>
-       </reg32>
-       <reg32 offset="0x8865" name="RB_BLEND_CNTL">
-               <!-- per-mrt enable bit -->
-               <bitfield name="ENABLE_BLEND" low="0" high="7"/>
-               <bitfield name="INDEPENDENT_BLEND" pos="8" type="boolean"/>
-               <bitfield name="DUAL_COLOR_IN_ENABLE" pos="9" type="boolean"/>
-               <bitfield name="ALPHA_TO_COVERAGE" pos="10" type="boolean"/>
-               <bitfield name="ALPHA_TO_ONE" pos="11" type="boolean"/>
-               <bitfield name="SAMPLE_MASK" low="16" high="31"/>
-       </reg32>
-       <!-- 0x8866-0x886f invalid -->
-       <reg32 offset="0x8870" name="RB_DEPTH_PLANE_CNTL">
-               <bitfield name="Z_MODE" low="0" high="1" type="a6xx_ztest_mode"/>
-       </reg32>
-
-       <reg32 offset="0x8871" name="RB_DEPTH_CNTL">
-               <bitfield name="Z_ENABLE" pos="0" type="boolean"/>
-               <bitfield name="Z_WRITE_ENABLE" pos="1" type="boolean"/>
-               <bitfield name="ZFUNC" low="2" high="4" type="adreno_compare_func"/>
-               <bitfield name="Z_CLAMP_ENABLE" pos="5" type="boolean"/>
-               <doc>
-               Z_TEST_ENABLE bit is set for zfunc other than GL_ALWAYS or GL_NEVER
-               also set when Z_BOUNDS_ENABLE is set
-               </doc>
-               <bitfield name="Z_TEST_ENABLE" pos="6" type="boolean"/>
-               <bitfield name="Z_BOUNDS_ENABLE" pos="7" type="boolean"/>
-       </reg32>
-       <!-- duplicates GRAS_SU_DEPTH_BUFFER_INFO: -->
-       <reg32 offset="0x8872" name="RB_DEPTH_BUFFER_INFO">
-               <bitfield name="DEPTH_FORMAT" low="0" high="2" type="a6xx_depth_format"/>
-               <bitfield name="UNK3" low="3" high="4"/>
-       </reg32>
-       <reg32 offset="0x8873" name="RB_DEPTH_BUFFER_PITCH" low="0" high="13" shr="6" type="uint"/>
-       <reg32 offset="0x8874" name="RB_DEPTH_BUFFER_ARRAY_PITCH" low="0" high="27" shr="6" type="uint"/>
-       <reg32 offset="0x8875" name="RB_DEPTH_BUFFER_BASE_LO"/>
-       <reg32 offset="0x8876" name="RB_DEPTH_BUFFER_BASE_HI"/>
-       <reg64 offset="0x8875" name="RB_DEPTH_BUFFER_BASE" type="waddress" align="64"/>
-       <reg32 offset="0x8877" name="RB_DEPTH_BUFFER_BASE_GMEM" low="12" high="31" shr="12"/>
-
-       <reg32 offset="0x8878" name="RB_Z_BOUNDS_MIN" type="float"/>
-       <reg32 offset="0x8879" name="RB_Z_BOUNDS_MAX" type="float"/>
-       <!-- 0x887a-0x887f invalid -->
-       <reg32 offset="0x8880" name="RB_STENCIL_CONTROL">
-               <bitfield name="STENCIL_ENABLE" pos="0" type="boolean"/>
-               <bitfield name="STENCIL_ENABLE_BF" pos="1" type="boolean"/>
-               <!--
-                       set for stencil operations that require read from stencil
-                       buffer, but not for example for stencil clear (which does
-                       not require read).. so guessing this is analogous to
-                       READ_DEST_ENABLE for color buffer..
-                -->
-               <bitfield name="STENCIL_READ" pos="2" type="boolean"/>
-               <bitfield name="FUNC" low="8" high="10" type="adreno_compare_func"/>
-               <bitfield name="FAIL" low="11" high="13" type="adreno_stencil_op"/>
-               <bitfield name="ZPASS" low="14" high="16" type="adreno_stencil_op"/>
-               <bitfield name="ZFAIL" low="17" high="19" type="adreno_stencil_op"/>
-               <bitfield name="FUNC_BF" low="20" high="22" type="adreno_compare_func"/>
-               <bitfield name="FAIL_BF" low="23" high="25" type="adreno_stencil_op"/>
-               <bitfield name="ZPASS_BF" low="26" high="28" type="adreno_stencil_op"/>
-               <bitfield name="ZFAIL_BF" low="29" high="31" type="adreno_stencil_op"/>
-       </reg32>
-       <reg32 offset="0x8881" name="RB_STENCIL_INFO">
-               <bitfield name="SEPARATE_STENCIL" pos="0" type="boolean"/>
-               <bitfield name="UNK1" pos="1" type="boolean"/>
-       </reg32>
-       <reg32 offset="0x8882" name="RB_STENCIL_BUFFER_PITCH" low="0" high="11" shr="6" type="uint"/>
-       <reg32 offset="0x8883" name="RB_STENCIL_BUFFER_ARRAY_PITCH" low="0" high="23" shr="6" type="uint"/>
-       <reg32 offset="0x8884" name="RB_STENCIL_BUFFER_BASE_LO"/>
-       <reg32 offset="0x8885" name="RB_STENCIL_BUFFER_BASE_HI"/>
-       <reg64 offset="0x8884" name="RB_STENCIL_BUFFER_BASE" type="waddress" align="64"/>
-       <reg32 offset="0x8886" name="RB_STENCIL_BUFFER_BASE_GMEM" low="12" high="31" shr="12"/>
-       <reg32 offset="0x8887" name="RB_STENCILREF">
-               <bitfield name="REF" low="0" high="7"/>
-               <bitfield name="BFREF" low="8" high="15"/>
-       </reg32>
-       <reg32 offset="0x8888" name="RB_STENCILMASK">
-               <bitfield name="MASK" low="0" high="7"/>
-               <bitfield name="BFMASK" low="8" high="15"/>
-       </reg32>
-       <reg32 offset="0x8889" name="RB_STENCILWRMASK">
-               <bitfield name="WRMASK" low="0" high="7"/>
-               <bitfield name="BFWRMASK" low="8" high="15"/>
-       </reg32>
-       <!-- 0x888a-0x888f invalid -->
-       <reg32 offset="0x8890" name="RB_WINDOW_OFFSET" type="a6xx_reg_xy"/>
-       <reg32 offset="0x8891" name="RB_SAMPLE_COUNT_CONTROL">
-               <bitfield name="UNK0" pos="0" type="boolean"/>
-               <bitfield name="COPY" pos="1" type="boolean"/>
-       </reg32>
-       <!-- 0x8892-0x8897 invalid -->
-       <reg32 offset="0x8898" name="RB_LRZ_CNTL">
-               <bitfield name="ENABLE" pos="0" type="boolean"/>
-       </reg32>
-       <!-- 0x8899-0x88bf invalid -->
-       <!-- clamps depth value for depth test/write -->
-       <reg32 offset="0x88c0" name="RB_Z_CLAMP_MIN" type="float"/>
-       <reg32 offset="0x88c1" name="RB_Z_CLAMP_MAX" type="float"/>
-       <!-- 0x88c2-0x88cf invalid-->
-       <reg32 offset="0x88d0" name="RB_UNKNOWN_88D0">
-               <bitfield name="UNK0" low="0" high="12"/>
-               <bitfield name="UNK16" low="16" high="26"/>
-       </reg32>
-       <reg32 offset="0x88d1" name="RB_BLIT_SCISSOR_TL" type="a6xx_reg_xy"/>
-       <reg32 offset="0x88d2" name="RB_BLIT_SCISSOR_BR" type="a6xx_reg_xy"/>
-       <!-- weird to duplicate other regs from same block?? -->
-       <reg32 offset="0x88d3" name="RB_BIN_CONTROL2">
-               <bitfield name="BINW" low="0" high="5" shr="5" type="uint"/>
-               <bitfield name="BINH" low="8" high="14" shr="4" type="uint"/>
-       </reg32>
-       <reg32 offset="0x88d4" name="RB_WINDOW_OFFSET2" type="a6xx_reg_xy"/>
-       <reg32 offset="0x88d5" name="RB_MSAA_CNTL">
-               <bitfield name="SAMPLES" low="3" high="4" type="a3xx_msaa_samples"/>
-       </reg32>
-       <reg32 offset="0x88d6" name="RB_BLIT_BASE_GMEM" low="12" high="31" shr="12"/>
-       <!-- s/DST_FORMAT/DST_INFO/ probably: -->
-       <reg32 offset="0x88d7" name="RB_BLIT_DST_INFO">
-               <bitfield name="TILE_MODE" low="0" high="1" type="a6xx_tile_mode"/>
-               <bitfield name="FLAGS" pos="2" type="boolean"/>
-               <bitfield name="SAMPLES" low="3" high="4" type="a3xx_msaa_samples"/>
-               <bitfield name="COLOR_SWAP" low="5" high="6" type="a3xx_color_swap"/>
-               <bitfield name="COLOR_FORMAT" low="7" high="14" type="a6xx_format"/>
-               <bitfield name="UNK15" pos="15" type="boolean"/>
-       </reg32>
-       <reg64 offset="0x88d8" name="RB_BLIT_DST" type="waddress" align="64"/>
-       <reg32 offset="0x88d8" name="RB_BLIT_DST_LO"/>
-       <reg32 offset="0x88d9" name="RB_BLIT_DST_HI"/>
-       <reg32 offset="0x88da" name="RB_BLIT_DST_PITCH" low="0" high="15" shr="6" type="uint"/>
-       <!-- array-pitch is size of layer -->
-       <reg32 offset="0x88db" name="RB_BLIT_DST_ARRAY_PITCH" low="0" high="28" shr="6" type="uint"/>
-       <reg64 offset="0x88dc" name="RB_BLIT_FLAG_DST" type="waddress" align="64"/>
-       <reg32 offset="0x88dc" name="RB_BLIT_FLAG_DST_LO"/>
-       <reg32 offset="0x88dd" name="RB_BLIT_FLAG_DST_HI"/>
-       <reg32 offset="0x88de" name="RB_BLIT_FLAG_DST_PITCH">
-               <bitfield name="PITCH" low="0" high="10" shr="6" type="uint"/>
-               <bitfield name="ARRAY_PITCH" low="11" high="27" shr="7" type="uint"/>
-       </reg32>
-
-       <reg32 offset="0x88df" name="RB_BLIT_CLEAR_COLOR_DW0"/>
-       <reg32 offset="0x88e0" name="RB_BLIT_CLEAR_COLOR_DW1"/>
-       <reg32 offset="0x88e1" name="RB_BLIT_CLEAR_COLOR_DW2"/>
-       <reg32 offset="0x88e2" name="RB_BLIT_CLEAR_COLOR_DW3"/>
-
-       <!-- seems somewhat similar to what we called RB_CLEAR_CNTL on a5xx: -->
-       <reg32 offset="0x88e3" name="RB_BLIT_INFO">
-               <bitfield name="UNK0" pos="0" type="boolean"/> <!-- s8 stencil restore/clear?  But also color restore? -->
-               <bitfield name="GMEM" pos="1" type="boolean"/> <!-- set for restore and clear to gmem? -->
-               <bitfield name="INTEGER" pos="2" type="boolean"/> <!-- probably -->
-               <bitfield name="DEPTH" pos="3" type="boolean"/> <!-- z16/z32/z24s8/x24x8 clear or resolve? -->
-               <doc>
-                       For clearing depth/stencil
-                               1 - depth
-                               2 - stencil
-                               3 - depth+stencil
-                       For clearing color buffer:
-                               then probably a component mask, I always see 0xf
-               </doc>
-               <bitfield name="CLEAR_MASK" low="4" high="7"/>
-               <bitfield name="UNK8" low="8" high="9"/>
-               <bitfield name="UNK12" low="12" high="15"/>
-       </reg32>
-       <!-- 0x88e4-0x88ef invalid -->
-       <!-- always 0x0 ? -->
-       <reg32 offset="0x88f0" name="RB_UNKNOWN_88F0" low="0" high="11"/>
-       <!-- could be for separate stencil? (or may not be a flag buffer at all) -->
-       <reg64 offset="0x88f1" name="RB_UNK_FLAG_BUFFER_BASE" type="waddress" align="64"/>
-       <reg32 offset="0x88f3" name="RB_UNK_FLAG_BUFFER_PITCH">
-               <bitfield name="PITCH" low="0" high="10" shr="6" type="uint"/>
-               <bitfield name="ARRAY_PITCH" low="11" high="23" shr="7" type="uint"/>
-       </reg32>
-       <reg32 offset="0x88f4" name="RB_UNKNOWN_88F4" low="0" high="2"/>
-       <!-- 0x88f5-0x88ff invalid -->
-       <reg32 offset="0x8900" name="RB_DEPTH_FLAG_BUFFER_BASE_LO"/>
-       <reg32 offset="0x8901" name="RB_DEPTH_FLAG_BUFFER_BASE_HI"/>
-       <reg64 offset="0x8900" name="RB_DEPTH_FLAG_BUFFER_BASE" type="waddress" align="64"/>
-       <reg32 offset="0x8902" name="RB_DEPTH_FLAG_BUFFER_PITCH">
-               <bitfield name="PITCH" low="0" high="6" shr="6" type="uint"/>
-               <!-- TODO: actually part of array pitch -->
-               <bitfield name="UNK8" low="8" high="10"/>
-               <bitfield name="ARRAY_PITCH" low="11" high="27" shr="7" type="uint"/>
-       </reg32>
-       <array offset="0x8903" name="RB_MRT_FLAG_BUFFER" stride="3" length="8">
-               <reg32 offset="0" name="ADDR_LO"/>
-               <reg32 offset="1" name="ADDR_HI"/>
-               <reg64 offset="0" name="ADDR" type="waddress" align="64"/>
-               <reg32 offset="2" name="PITCH">
-                       <bitfield name="PITCH" low="0" high="10" shr="6" type="uint"/>
-                       <bitfield name="ARRAY_PITCH" low="11" high="28" shr="7" type="uint"/>
-               </reg32>
-       </array>
-       <!-- 0x891b-0x8926 invalid -->
-       <reg32 offset="0x8927" name="RB_SAMPLE_COUNT_ADDR_LO"/>
-       <reg32 offset="0x8928" name="RB_SAMPLE_COUNT_ADDR_HI"/>
-       <reg64 offset="0x8927" name="RB_SAMPLE_COUNT_ADDR" type="waddress" align="16"/>
-       <!-- 0x8929-0x89ff invalid -->
-
-       <!-- TODO: there are some registers in the 0x8a00-0x8bff range -->
-
-       <reg32 offset="0x8c00" name="RB_2D_BLIT_CNTL" type="a6xx_2d_blit_cntl"/>
-       <reg32 offset="0x8c01" name="RB_2D_UNKNOWN_8C01" low="0" high="31"/>
-
-       <bitset name="a6xx_2d_surf_info" inline="yes">
-               <bitfield name="COLOR_FORMAT" low="0" high="7" type="a6xx_format"/>
-               <bitfield name="TILE_MODE" low="8" high="9" type="a6xx_tile_mode"/>
-               <bitfield name="COLOR_SWAP" low="10" high="11" type="a3xx_color_swap"/>
-               <bitfield name="FLAGS" pos="12" type="boolean"/>
-               <bitfield name="SRGB" pos="13" type="boolean"/>
-               <!-- the rest is only for src -->
-               <bitfield name="SAMPLES" low="14" high="15" type="a3xx_msaa_samples"/>
-               <bitfield name="FILTER" pos="16" type="boolean"/>
-               <bitfield name="SAMPLES_AVERAGE" pos="18" type="boolean"/>
-               <bitfield name="UNK20" pos="20" type="boolean"/>
-               <bitfield name="UNK22" pos="22" type="boolean"/>
-       </bitset>
-
-       <!-- 0x8c02-0x8c16 invalid -->
-       <!-- TODO: RB_2D_DST_INFO has 17 valid bits (doesn't match a6xx_2d_surf_info) -->
-       <reg32 offset="0x8c17" name="RB_2D_DST_INFO" type="a6xx_2d_surf_info"/>
-       <reg32 offset="0x8c18" name="RB_2D_DST_LO"/>
-       <reg32 offset="0x8c19" name="RB_2D_DST_HI"/>
-       <reg64 offset="0x8c18" name="RB_2D_DST" type="waddress" align="64"/>
-       <reg32 offset="0x8c1a" name="RB_2D_DST_PITCH" low="0" high="15" shr="6" type="uint"/>
-       <!-- this is a guess but seems likely (for NV12/IYUV): -->
-       <reg64 offset="0x8c1b" name="RB_2D_DST_PLANE1" type="waddress" align="64"/>
-       <reg32 offset="0x8c1d" name="RB_2D_DST_PLANE_PITCH" low="0" high="15" shr="6" type="uint"/>
-       <reg64 offset="0x8c1e" name="RB_2D_DST_PLANE2" type="waddress" align="64"/>
-
-       <reg32 offset="0x8c20" name="RB_2D_DST_FLAGS_LO"/>
-       <reg32 offset="0x8c21" name="RB_2D_DST_FLAGS_HI"/>
-       <reg64 offset="0x8c20" name="RB_2D_DST_FLAGS" type="waddress" align="64"/>
-       <reg32 offset="0x8c22" name="RB_2D_DST_FLAGS_PITCH" low="0" high="7" shr="6" type="uint"/>
-       <!-- this is a guess but seems likely (for NV12 with UBWC): -->
-       <reg64 offset="0x8c23" name="RB_2D_DST_FLAGS_PLANE" type="waddress" align="64"/>
-       <reg32 offset="0x8c25" name="RB_2D_DST_FLAGS_PLANE_PITCH" low="0" high="7" shr="6" type="uint"/>
-
-       <!-- TODO: 0x8c26-0x8c33 are all full 32-bit registers -->
-       <!-- unlike a5xx, these are per channel values rather than packed -->
-       <reg32 offset="0x8c2c" name="RB_2D_SRC_SOLID_C0"/>
-       <reg32 offset="0x8c2d" name="RB_2D_SRC_SOLID_C1"/>
-       <reg32 offset="0x8c2e" name="RB_2D_SRC_SOLID_C2"/>
-       <reg32 offset="0x8c2f" name="RB_2D_SRC_SOLID_C3"/>
-       <!-- 0x8c34-0x8dff invalid -->
-
-       <!-- always 0x1 ? either doesn't exist for a650 or write-only: -->
-       <reg32 offset="0x8e01" name="RB_UNKNOWN_8E01"/>
-       <!-- 0x8e00-0x8e03 invalid -->
-       <reg32 offset="0x8e04" name="RB_UNKNOWN_8E04"/> <!-- TODO: valid mask 0xfffffeff -->
-       <reg32 offset="0x8e05" name="RB_ADDR_MODE_CNTL" pos="0" type="a5xx_address_mode"/>
-       <!-- 0x8e06 invalid -->
-       <reg32 offset="0x8e07" name="RB_CCU_CNTL">
-               <!-- offset into GMEM for something.
-                       important for sysmem path
-                       BLIT_OP_SCALE also writes to GMEM at this offset for GMEM store
-                       blob values for GMEM path (note: close to GMEM size):
-                       a618: 0x7c000 a630/a640: 0xf8000 a650: 0x114000
-                       SYSMEM path values:
-                       a618: 0x10000 a630/a640: 0x20000 a650: 0x30000
-                       TODO: valid mask 0xfffffc1f
-               -->
-               <bitfield name="OFFSET" low="23" high="31" shr="12" type="hex"/>
-               <bitfield name="GMEM" pos="22" type="boolean"/> <!-- set for GMEM path -->
-               <bitfield name="UNK2" pos="2" type="boolean"/> <!-- sometimes set with GMEM? -->
-       </reg32>
-       <reg32 offset="0x8e08" name="RB_NC_MODE_CNTL">
-               <bitfield name="MODE" pos="0" type="boolean"/>
-               <bitfield name="LOWER_BIT" low="1" high="2" type="uint"/>
-               <bitfield name="MIN_ACCESS_LENGTH" pos="3" type="boolean"/> <!-- true=64b false=32b -->
-               <bitfield name="AMSBC" pos="4" type="boolean"/>
-               <bitfield name="UPPER_BIT" pos="10" type="uint"/>
-               <bitfield name="RGB565_PREDICATOR" pos="11" type="boolean"/>
-               <bitfield name="UNK12" low="12" high="13"/>
-       </reg32>
-       <!-- 0x8e09-0x8e0f invalid -->
-       <reg32 offset="0x8e10" name="RB_PERFCTR_RB_SEL_0"/>
-       <reg32 offset="0x8e11" name="RB_PERFCTR_RB_SEL_1"/>
-       <reg32 offset="0x8e12" name="RB_PERFCTR_RB_SEL_2"/>
-       <reg32 offset="0x8e13" name="RB_PERFCTR_RB_SEL_3"/>
-       <reg32 offset="0x8e14" name="RB_PERFCTR_RB_SEL_4"/>
-       <reg32 offset="0x8e15" name="RB_PERFCTR_RB_SEL_5"/>
-       <reg32 offset="0x8e16" name="RB_PERFCTR_RB_SEL_6"/>
-       <reg32 offset="0x8e17" name="RB_PERFCTR_RB_SEL_7"/>
-       <reg32 offset="0x8e18" name="RB_PERFCTR_CCU_SEL_0"/>
-       <reg32 offset="0x8e19" name="RB_PERFCTR_CCU_SEL_1"/>
-       <reg32 offset="0x8e1a" name="RB_PERFCTR_CCU_SEL_2"/>
-       <reg32 offset="0x8e1b" name="RB_PERFCTR_CCU_SEL_3"/>
-       <reg32 offset="0x8e1c" name="RB_PERFCTR_CCU_SEL_4"/>
-       <!-- 0x8e1d-0x8e1f invalid -->
-       <!-- 0x8e20-0x8e25 more perfcntr sel? -->
-       <!-- 0x8e26-0x8e27 invalid -->
-       <reg32 offset="0x8e28" name="RB_UNKNOWN_8E28" low="0" high="10"/>
-       <!-- 0x8e29-0x8e2b invalid -->
-       <reg32 offset="0x8e2c" name="RB_PERFCTR_CMP_SEL_0"/>
-       <reg32 offset="0x8e2d" name="RB_PERFCTR_CMP_SEL_1"/>
-       <reg32 offset="0x8e2e" name="RB_PERFCTR_CMP_SEL_2"/>
-       <reg32 offset="0x8e2f" name="RB_PERFCTR_CMP_SEL_3"/>
-       <reg32 offset="0x8e3b" name="RB_RB_SUB_BLOCK_SEL_CNTL_HOST"/>
-       <reg32 offset="0x8e3d" name="RB_RB_SUB_BLOCK_SEL_CNTL_CD"/>
-       <!-- 0x8e3e-0x8e4f invalid -->
-       <!-- GMEM save/restore for preemption: -->
-       <reg32 offset="0x8e50" name="RB_CONTEXT_SWITCH_GMEM_SAVE_RESTORE" pos="0" type="boolean"/>
-       <!-- address for GMEM save/restore? -->
-       <reg32 offset="0x8e51" name="RB_UNKNOWN_8E51" type="waddress" align="1"/>
-       <!-- 0x8e53-0x8e7f invalid -->
-       <!-- 0x8e80-0x8e83 are valid -->
-       <!-- 0x8e84-0x90ff invalid -->
-
-       <!-- 0x9000-0x90ff invalid -->
-
-       <!-- something to do with geometry shader: -->
-       <reg32 offset="0x9100" name="VPC_UNKNOWN_9100" low="0" high="7"/>
-
-       <bitset name="a6xx_vpc_xs_clip_cntl" inline="yes">
-               <bitfield name="CLIP_MASK" low="0" high="7" type="uint"/>
-               <!-- there can be up to 8 total clip/cull distance outputs,
-                    but apparenly VPC can only deal with vec4, so when there are
-                    more than 4 outputs a second location needs to be programmed
-               -->
-               <bitfield name="CLIP_DIST_03_LOC" low="8" high="15" type="uint"/>
-               <bitfield name="CLIP_DIST_47_LOC" low="16" high="23" type="uint"/>
-       </bitset>
-       <reg32 offset="0x9101" name="VPC_VS_CLIP_CNTL" type="a6xx_vpc_xs_clip_cntl"/>
-       <reg32 offset="0x9102" name="VPC_GS_CLIP_CNTL" type="a6xx_vpc_xs_clip_cntl"/>
-       <reg32 offset="0x9103" name="VPC_DS_CLIP_CNTL" type="a6xx_vpc_xs_clip_cntl"/>
-
-       <bitset name="a6xx_vpc_xs_layer_cntl" inline="yes">
-               <bitfield name="LAYERLOC" low="0" high="7" type="uint"/>
-               <bitfield name="VIEWLOC" low="8" high="15" type="uint"/>
-       </bitset>
-
-       <reg32 offset="0x9104" name="VPC_VS_LAYER_CNTL" type="a6xx_vpc_xs_layer_cntl"/>
-       <reg32 offset="0x9105" name="VPC_GS_LAYER_CNTL" type="a6xx_vpc_xs_layer_cntl"/>
-       <reg32 offset="0x9106" name="VPC_DS_LAYER_CNTL" type="a6xx_vpc_xs_layer_cntl"/>
-
-       <reg32 offset="0x9107" name="VPC_UNKNOWN_9107" pos="2"/>
-       <reg32 offset="0x9108" name="VPC_POLYGON_MODE">
-               <bitfield name="MODE" low="0" high="1" type="a6xx_polygon_mode"/>
-       </reg32>
-       <!-- 0x9109-0x91ff invalid -->
-       <array offset="0x9200" name="VPC_VARYING_INTERP" stride="1" length="8">
-               <reg32 offset="0x0" name="MODE"/>
-       </array>
-       <array offset="0x9208" name="VPC_VARYING_PS_REPL" stride="1" length="8">
-               <reg32 offset="0x0" name="MODE"/>
-       </array>
-
-       <!-- always 0x0 -->
-       <reg32 offset="0x9210" name="VPC_UNKNOWN_9210" low="0" high="31"/>
-       <reg32 offset="0x9211" name="VPC_UNKNOWN_9211" low="0" high="31"/>
-
-       <array offset="0x9212" name="VPC_VAR" stride="1" length="4">
-               <!-- one bit per varying component: -->
-               <reg32 offset="0" name="DISABLE"/>
-       </array>
-
-       <reg32 offset="0x9216" name="VPC_SO_CNTL">
-               <bitfield name="UNK0" low="0" high="7"/>
-               <!-- always 0x10000 when SO enabled.. -->
-               <bitfield name="ENABLE" pos="16" type="boolean"/>
-       </reg32>
-       <!-- special register, write multiple times to load SO program (not readable) -->
-       <reg32 offset="0x9217" name="VPC_SO_PROG">
-               <bitfield name="A_BUF" low="0" high="1" type="uint"/>
-               <bitfield name="A_OFF" low="2" high="10" shr="2" type="uint"/>
-               <bitfield name="A_EN" pos="11" type="boolean"/>
-               <bitfield name="B_BUF" low="12" high="13" type="uint"/>
-               <bitfield name="B_OFF" low="14" high="22" shr="2" type="uint"/>
-               <bitfield name="B_EN" pos="23" type="boolean"/>
-       </reg32>
-
-       <reg32 offset="0x9218" name="VPC_SO_STREAM_COUNTS_LO"/>
-       <reg32 offset="0x9219" name="VPC_SO_STREAM_COUNTS_HI"/>
-       <reg32 offset="0x9218" name="VPC_SO_STREAM_COUNTS" type="waddress" align="32"/>
-
-       <array offset="0x921a" name="VPC_SO" stride="7" length="4">
-               <reg64 offset="0" name="BUFFER_BASE" type="waddress" align="32"/>
-               <reg32 offset="0" name="BUFFER_BASE_LO"/>
-               <reg32 offset="1" name="BUFFER_BASE_HI"/>
-               <reg32 offset="2" name="BUFFER_SIZE" low="2" high="31" shr="2"/>
-               <reg32 offset="3" name="NCOMP" low="0" high="9"/>  <!-- component count -->
-               <reg32 offset="4" name="BUFFER_OFFSET" low="2" high="31" shr="2"/>
-               <reg64 offset="5" name="FLUSH_BASE" type="waddress" align="32"/>
-               <reg32 offset="5" name="FLUSH_BASE_LO"/>
-               <reg32 offset="6" name="FLUSH_BASE_HI"/>
-       </array>
-
-       <reg32 offset="0x9236" name="VPC_POINT_COORD_INVERT">
-               <bitfield name="INVERT" pos="0" type="boolean"/>
-       </reg32>
-       <!-- 0x9237-0x92ff invalid -->
-       <!-- always 0x0 ? -->
-       <reg32 offset="0x9300" name="VPC_UNKNOWN_9300" low="0" high="2"/>
-
-       <bitset name="a6xx_vpc_xs_pack" inline="yes">
-               <doc>
-                       num of varyings plus four for gl_Position (plus one if gl_PointSize)
-                       plus # of transform-feedback (streamout) varyings if using the
-                       hw streamout (rather than stg instructions in shader)
-               </doc>
-               <bitfield name="STRIDE_IN_VPC" low="0" high="7" type="uint"/>
-               <bitfield name="POSITIONLOC" low="8" high="15" type="uint"/>
-               <bitfield name="PSIZELOC" low="16" high="23" type="uint"/>
-               <bitfield name="UNK24" low="24" high="27"/>
-       </bitset>
-       <reg32 offset="0x9301" name="VPC_VS_PACK" type="a6xx_vpc_xs_pack"/>
-       <reg32 offset="0x9302" name="VPC_GS_PACK" type="a6xx_vpc_xs_pack"/>
-       <reg32 offset="0x9303" name="VPC_DS_PACK" type="a6xx_vpc_xs_pack"/>
-
-       <reg32 offset="0x9304" name="VPC_CNTL_0">
-               <bitfield name="NUMNONPOSVAR" low="0" high="7" type="uint"/>
-               <!-- for fixed-function (i.e. no GS) gl_PrimitiveID in FS -->
-               <bitfield name="PRIMIDLOC" low="8" high="15" type="uint"/>
-               <bitfield name="VARYING" pos="16" type="boolean"/>
-               <bitfield name="UNKLOC" low="24" high="31" type="uint"/>
-       </reg32>
-
-       <reg32 offset="0x9305" name="VPC_SO_BUF_CNTL">
-               <!-- TODO: the first 12 bits are valid, likely 3-bit enum instead of bools -->
-               <bitfield name="BUF0" pos="0" type="boolean"/>
-               <bitfield name="BUF1" pos="3" type="boolean"/>
-               <bitfield name="BUF2" pos="6" type="boolean"/>
-               <bitfield name="BUF3" pos="9" type="boolean"/>
-               <bitfield name="ENABLE" pos="15" type="boolean"/>
-               <bitfield name="UNK16" low="16" high="19"/>
-       </reg32>
-       <reg32 offset="0x9306" name="VPC_SO_DISABLE">
-               <bitfield name="DISABLE" pos="0" type="boolean"/>
-       </reg32>
-       <!-- 0x9307-0x95ff invalid -->
-
-       <!-- TODO: 0x9600-0x97ff range -->
-       <reg32 offset="0x9600" name="VPC_UNKNOWN_9600"/> <!-- always 0x0 ? TODO: 0x1fbf37ff valid mask -->
-       <reg32 offset="0x9601" name="VPC_ADDR_MODE_CNTL" pos="0" type="a5xx_address_mode"/>
-       <reg32 offset="0x9602" name="VPC_UNKNOWN_9602" pos="0"/> <!-- always 0x0 ? -->
-       <reg32 offset="0x9603" name="VPC_UNKNOWN_9603" low="0" high="26"/>
-       <reg32 offset="0x9604" name="VPC_PERFCTR_VPC_SEL_0"/>
-       <reg32 offset="0x9605" name="VPC_PERFCTR_VPC_SEL_1"/>
-       <reg32 offset="0x9606" name="VPC_PERFCTR_VPC_SEL_2"/>
-       <reg32 offset="0x9607" name="VPC_PERFCTR_VPC_SEL_3"/>
-       <reg32 offset="0x9608" name="VPC_PERFCTR_VPC_SEL_4"/>
-       <reg32 offset="0x9609" name="VPC_PERFCTR_VPC_SEL_5"/>
-       <!-- 0x960a-0x9623 invalid -->
-       <!-- TODO: regs from 0x9624-0x963a -->
-       <!-- 0x963b-0x97ff invalid -->
-
-       <reg32 offset="0x9800" name="PC_TESS_NUM_VERTEX" low="0" high="5" type="uint"/>
-
-       <!-- always 0x0 ? -->
-       <reg32 offset="0x9801" name="PC_HS_INPUT_SIZE">
-               <bitfield name="SIZE" low="0" high="10"/>
-               <bitfield name="UNK13" pos="13"/>
-       </reg32>
-
-       <enum name="a6xx_tess_spacing">
-               <value value="0x0" name="TESS_EQUAL"/>
-               <value value="0x2" name="TESS_FRACTIONAL_ODD"/>
-               <value value="0x3" name="TESS_FRACTIONAL_EVEN"/>
-       </enum>
-       <enum name="a6xx_tess_output">
-               <value value="0x0" name="TESS_POINTS"/>
-               <value value="0x1" name="TESS_LINES"/>
-               <value value="0x2" name="TESS_CW_TRIS"/>
-               <value value="0x3" name="TESS_CCW_TRIS"/>
-       </enum>
-       <reg32 offset="0x9802" name="PC_TESS_CNTL">
-               <bitfield name="SPACING" low="0" high="1" type="a6xx_tess_spacing"/>
-               <bitfield name="OUTPUT" low="2" high="3" type="a6xx_tess_output"/>
-       </reg32>
-
-       <reg32 offset="0x9803" name="PC_RESTART_INDEX" low="0" high="31" type="uint"/>
-       <reg32 offset="0x9804" name="PC_MODE_CNTL" low="0" high="7"/>
-
-       <!-- always 0x1 ? -->
-       <reg32 offset="0x9805" name="PC_UNKNOWN_9805" low="0" high="2"/>
-
-       <!-- probably a mirror of VFD_CONTROL_6 -->
-       <reg32 offset="0x9806" name="PC_PRIMID_PASSTHRU" pos="0" type="boolean"/>
-       <!-- 0x980b-0x983f invalid -->
-
-       <!-- 0x9840 - 0x9842 are not readable -->
-       <reg32 offset="0x9840" name="PC_DRAW_CMD">
-               <bitfield name="STATE_ID" low="0" high="7"/>
-       </reg32>
-
-       <reg32 offset="0x9841" name="PC_DISPATCH_CMD">
-               <bitfield name="STATE_ID" low="0" high="7"/>
-       </reg32>
-
-       <reg32 offset="0x9842" name="PC_EVENT_CMD">
-               <!-- I think only the low bit is actually used? -->
-               <bitfield name="STATE_ID" low="16" high="23"/>
-               <bitfield name="EVENT" low="0" high="6" type="vgt_event_type"/>
-       </reg32>
-
-       <!-- 0x9843-0x997f invalid -->
-
-       <reg32 offset="0x9981" name="PC_POLYGON_MODE">
-               <bitfield name="MODE" low="0" high="1" type="a6xx_polygon_mode"/>
-       </reg32>
-       <reg32 offset="0x9980" name="PC_UNKNOWN_9980" low="0" high="2"/>
-
-       <!-- 0x9982-0x9aff invalid -->
-
-       <reg32 offset="0x9b00" name="PC_PRIMITIVE_CNTL_0">
-               <bitfield name="PRIMITIVE_RESTART" pos="0" type="boolean"/>
-               <!-- maybe?  b1 seems always set, so just assume it is for now: -->
-               <bitfield name="PROVOKING_VTX_LAST" pos="1" type="boolean"/>
-               <bitfield name="TESS_UPPER_LEFT_DOMAIN_ORIGIN" pos="2" type="boolean"/>
-               <bitfield name="UNK3" pos="3" type="boolean"/>
-       </reg32>
-
-       <bitset name="a6xx_xs_out_cntl" inline="yes">
-               <doc>
-                       num of varyings plus four for gl_Position (plus one if gl_PointSize)
-                       plus # of transform-feedback (streamout) varyings if using the
-                       hw streamout (rather than stg instructions in shader)
-               </doc>
-               <bitfield name="STRIDE_IN_VPC" low="0" high="7" type="uint"/>
-               <bitfield name="PSIZE" pos="8" type="boolean"/>
-               <bitfield name="LAYER" pos="9" type="boolean"/>
-               <bitfield name="VIEW" pos="10" type="boolean"/>
-               <!-- note: PC_VS_OUT_CNTL doesn't have the PRIMITIVE_ID bit -->
-               <bitfield name="PRIMITIVE_ID" pos="11" type="boolean"/>
-               <bitfield name="CLIP_MASK" low="16" high="23" type="uint"/>
-       </bitset>
-
-       <reg32 offset="0x9b01" name="PC_VS_OUT_CNTL" type="a6xx_xs_out_cntl"/>
-       <reg32 offset="0x9b02" name="PC_GS_OUT_CNTL" type="a6xx_xs_out_cntl"/>
-       <reg32 offset="0x9b03" name="PC_PRIMITIVE_CNTL_3" pos="11"/>
-       <reg32 offset="0x9b04" name="PC_DS_OUT_CNTL" type="a6xx_xs_out_cntl"/>
-
-       <reg32 offset="0x9b05" name="PC_PRIMITIVE_CNTL_5">
-               <doc>
-                 geometry shader
-               </doc>
-               <!-- TODO: first 16 bits are valid so something is wrong or missing here -->
-               <bitfield name="GS_VERTICES_OUT" low="0" high="7" type="uint"/>
-               <bitfield name="GS_INVOCATIONS" low="10" high="14" type="uint"/>
-               <bitfield name="GS_OUTPUT" low="16" high="17" type="a6xx_tess_output"/>
-               <bitfield name="UNK18" pos="18"/>
-       </reg32>
-
-       <reg32 offset="0x9b06" name="PC_PRIMITIVE_CNTL_6">
-               <doc>
-                 size in vec4s of per-primitive storage for gs. TODO: not actually in VPC
-               </doc>
-               <bitfield name="STRIDE_IN_VPC" low="0" high="10" type="uint"/>
-       </reg32>
-       <!-- something gs related: -->
-       <reg32 offset="0x9b07" name="PC_UNKNOWN_9B07" low="0" high="6"/>
-
-       <reg32 offset="0x9b08" name="PC_UNKNOWN_9B08" low="0" high="15"/>
-       <!-- 0x9b09-0x9bff invalid -->
-       <reg32 offset="0x9c00" name="PC_2D_EVENT_CMD">
-               <!-- special register (but note first 8 bits can be written/read) -->
-               <bitfield name="EVENT" low="0" high="6" type="vgt_event_type"/>
-               <bitfield name="STATE_ID" low="8" high="15"/>
-       </reg32>
-       <!-- 0x9c01-0x9dff invalid -->
-       <!-- TODO: 0x9e00-0xa000 range incomplete -->
-       <reg32 offset="0x9e00" name="PC_DBG_ECO_CNTL"/>
-       <reg32 offset="0x9e01" name="PC_ADDR_MODE_CNTL" type="a5xx_address_mode"/>
-       <reg32 offset="0x9e08" name="PC_TESSFACTOR_ADDR_LO"/>
-       <reg32 offset="0x9e09" name="PC_TESSFACTOR_ADDR_HI"/>
-       <reg32 offset="0x9e08" name="PC_TESSFACTOR_ADDR" type="waddress" align="32"/>
-
-       <!-- These match the contents of CP_SET_BIN_DATA (not written directly) -->
-       <reg32 offset="0x9e11" name="PC_VSTREAM_CONTROL">
-               <bitfield name="UNK0" low="0" high="15"/>
-               <bitfield name="VSC_SIZE" low="16" high="21" type="uint"/>
-               <bitfield name="VSC_N" low="22" high="26" type="uint"/>
-       </reg32>
-       <reg64 offset="0x9e12" name="PC_BIN_PRIM_STRM" type="waddress" align="32"/>
-       <reg64 offset="0x9e14" name="PC_BIN_DRAW_STRM" type="waddress" align="32"/>
-
-       <reg32 offset="0x9e34" name="PC_PERFCTR_PC_SEL_0"/>
-       <reg32 offset="0x9e35" name="PC_PERFCTR_PC_SEL_1"/>
-       <reg32 offset="0x9e36" name="PC_PERFCTR_PC_SEL_2"/>
-       <reg32 offset="0x9e37" name="PC_PERFCTR_PC_SEL_3"/>
-       <reg32 offset="0x9e38" name="PC_PERFCTR_PC_SEL_4"/>
-       <reg32 offset="0x9e39" name="PC_PERFCTR_PC_SEL_5"/>
-       <reg32 offset="0x9e3a" name="PC_PERFCTR_PC_SEL_6"/>
-       <reg32 offset="0x9e3b" name="PC_PERFCTR_PC_SEL_7"/>
-
-       <!-- always 0x0 -->
-       <reg32 offset="0x9e72" name="PC_UNKNOWN_9E72"/>
-
-       <reg32 offset="0xa000" name="VFD_CONTROL_0">
-               <bitfield name="FETCH_CNT" low="0" high="5" type="uint"/>
-               <bitfield name="DECODE_CNT" low="8" high="13" type="uint"/>
-       </reg32>
-       <reg32 offset="0xa001" name="VFD_CONTROL_1">
-               <bitfield name="REGID4VTX" low="0" high="7" type="a3xx_regid"/>
-               <bitfield name="REGID4INST" low="8" high="15" type="a3xx_regid"/>
-               <bitfield name="REGID4PRIMID" low="16" high="23" type="a3xx_regid"/>
-       </reg32>
-       <reg32 offset="0xa002" name="VFD_CONTROL_2">
-               <bitfield name="REGID_HSPATCHID" low="0" high="7" type="a3xx_regid"/>
-               <bitfield name="REGID_INVOCATIONID" low="8" high="15" type="a3xx_regid"/>
-       </reg32>
-       <reg32 offset="0xa003" name="VFD_CONTROL_3">
-               <bitfield name="REGID_DSPATCHID" low="8" high="15" type="a3xx_regid"/>
-               <bitfield name="REGID_TESSX" low="16" high="23" type="a3xx_regid"/>
-               <bitfield name="REGID_TESSY" low="24" high="31" type="a3xx_regid"/>
-       </reg32>
-       <reg32 offset="0xa004" name="VFD_CONTROL_4">
-       </reg32>
-       <reg32 offset="0xa005" name="VFD_CONTROL_5">
-               <bitfield name="REGID_GSHEADER" low="0" high="7" type="a3xx_regid"/>
-       </reg32>
-       <reg32 offset="0xa006" name="VFD_CONTROL_6">
-               <!--
-                       True if gl_PrimitiveID is read via the FS and there is
-                       no matching write from the GS, and therefore it needs to
-                       be passed through via fixed-function logic.
-               -->
-               <bitfield name="PRIMID_PASSTHRU" pos="0" type="boolean"/>
-       </reg32>
-
-       <reg32 offset="0xa007" name="VFD_MODE_CNTL">
-               <bitfield name="BINNING_PASS" pos="0" type="boolean"/>
-       </reg32>
-
-       <!-- always 0x0 ? -->
-       <reg32 offset="0xa008" name="VFD_UNKNOWN_A008"/>
-       <reg32 offset="0xa009" name="VFD_ADD_OFFSET">
-               <!-- add VFD_INDEX_OFFSET to REGID4VTX -->
-               <bitfield name="VERTEX" pos="0" type="boolean"/>
-               <!-- add VFD_INSTANCE_START_OFFSET to REGID4INST -->
-               <bitfield name="INSTANCE" pos="1" type="boolean"/>
-       </reg32>
-
-       <reg32 offset="0xa00e" name="VFD_INDEX_OFFSET"/>
-       <reg32 offset="0xa00f" name="VFD_INSTANCE_START_OFFSET"/>
-       <array offset="0xa010" name="VFD_FETCH" stride="4" length="32">
-               <reg64 offset="0x0" name="BASE" type="address"/>
-               <reg32 offset="0x0" name="BASE_LO"/>
-               <reg32 offset="0x1" name="BASE_HI"/>
-               <reg32 offset="0x2" name="SIZE" type="uint"/>
-               <reg32 offset="0x3" name="STRIDE" type="uint"/>
-       </array>
-       <array offset="0xa090" name="VFD_DECODE" stride="2" length="32">
-               <reg32 offset="0x0" name="INSTR">
-                       <!-- IDX and byte OFFSET into VFD_FETCH -->
-                       <bitfield name="IDX" low="0" high="4" type="uint"/>
-                       <bitfield name="OFFSET" low="5" high="16"/>
-                       <bitfield name="INSTANCED" pos="17" type="boolean"/>
-                       <bitfield name="FORMAT" low="20" high="27" type="a6xx_format"/>
-                       <bitfield name="SWAP" low="28" high="29" type="a3xx_color_swap"/>
-                       <bitfield name="UNK30" pos="30" type="boolean"/>
-                       <bitfield name="FLOAT" pos="31" type="boolean"/>
-               </reg32>
-               <reg32 offset="0x1" name="STEP_RATE"/>
-       </array>
-       <array offset="0xa0d0" name="VFD_DEST_CNTL" stride="1" length="32">
-               <reg32 offset="0x0" name="INSTR">
-                       <bitfield name="WRITEMASK" low="0" high="3" type="hex"/>
-                       <bitfield name="REGID" low="4" high="11" type="a3xx_regid"/>
-               </reg32>
-       </array>
-
-       <!-- always 0x1 ? -->
-       <reg32 offset="0xa0f8" name="SP_UNKNOWN_A0F8"/>
-
-       <bitset name="a6xx_sp_xs_ctrl_reg0" inline="yes">
-               <!--
-               When b31 set we just see FULLREGFOOTPRINT set.  The pattern of
-               used registers is a bit odd too:
-                       - used (half): 0-15 68-179 (cnt=128, max=179)
-                       - used (full): 0-33 50-69 71 73 75 77 79 81 83 85 87 89-105 107 109 111 113 115 117 119 121 123 125 127>
-               whereas we usually see a (mostly) contiguous range of regs used.  But if
-               I merge the full and half ranges (ie. rN counts as hr(N*2) and hr(N*2+1)),
-               then:
-                       - used (merged): 0-191 (cnt=192, max=191)
-               So I think if b31 is set, then the half precision registers overlap
-               the full precision registers.  (Which seems like a pretty sensible
-               feature, actually I'm not sure when you *wouldn't* want to use that,
-               since it gives register allocation more flexibility)
-                -->
-               <bitfield name="HALFREGFOOTPRINT" low="1" high="6" type="uint"/>
-               <bitfield name="FULLREGFOOTPRINT" low="7" high="12" type="uint"/>
-               <!-- seems to be nesting level for flow control:.. -->
-               <bitfield name="BRANCHSTACK" low="14" high="19" type="uint"/>
-               <bitfield name="THREADSIZE" pos="20" type="a3xx_threadsize"/>
-               <bitfield name="VARYING" pos="22" type="boolean"/>
-               <!-- set when dFdxFine/dFdyFine is used -->
-               <bitfield name="DIFF_FINE" pos="23" type="boolean"/>
-               <bitfield name="PIXLODENABLE" pos="26" type="boolean"/>
-               <bitfield name="MERGEDREGS" pos="31" type="boolean"/>
-       </bitset>
-
-       <bitset name="a6xx_sp_xs_config" inline="yes">
-               <!--
-               Each of these are set if the given resource type is used
-               with the Vulkan/bindless binding model.
-               -->
-               <bitfield name="BINDLESS_TEX" pos="0" type="boolean"/>
-               <bitfield name="BINDLESS_SAMP" pos="1" type="boolean"/>
-               <bitfield name="BINDLESS_IBO" pos="2" type="boolean"/>
-               <bitfield name="BINDLESS_UBO" pos="3" type="boolean"/>
-
-               <bitfield name="ENABLED" pos="8" type="boolean"/>
-               <!--
-               number of textures and samplers.. these might be swapped, with GL I
-               always see the same value for both.
-                -->
-               <bitfield name="NTEX" low="9" high="16" type="uint"/>
-               <bitfield name="NSAMP" low="17" high="21" type="uint"/>
-               <bitfield name="NIBO" low="22" high="29" type="uint"/>
-       </bitset>
-
-       <reg32 offset="0xa800" name="SP_VS_CTRL_REG0" type="a6xx_sp_xs_ctrl_reg0"/>
-       <reg32 offset="0xa801" name="SP_VS_BRANCH_COND" type="hex">
-               <!--
-               bitmask of true/false conditions for VS brac.N instructions,
-               bit N corresponds to brac.N
-                -->
-       </reg32>
-       <reg32 offset="0xa802" name="SP_VS_PRIMITIVE_CNTL">
-               <!-- # of VS outputs including pos/psize -->
-               <bitfield name="OUT" low="0" high="5" type="uint"/>
-       </reg32>
-       <array offset="0xa803" name="SP_VS_OUT" stride="1" length="16">
-               <reg32 offset="0x0" name="REG">
-                       <bitfield name="A_REGID" low="0" high="7" type="a3xx_regid"/>
-                       <bitfield name="A_COMPMASK" low="8" high="11" type="hex"/>
-                       <bitfield name="B_REGID" low="16" high="23" type="a3xx_regid"/>
-                       <bitfield name="B_COMPMASK" low="24" high="27" type="hex"/>
-               </reg32>
-       </array>
-       <!--
-       Starting with a5xx, position/psize outputs from shader end up in the
-       SP_VS_OUT map, with highest OUTLOCn position.  (Generally they are
-       the last entries too, except when gl_PointCoord is used, blob inserts
-       an extra varying after, but with a lower OUTLOC position.  If present,
-       psize is last, preceded by position.
-        -->
-       <array offset="0xa813" name="SP_VS_VPC_DST" stride="1" length="8">
-               <reg32 offset="0x0" name="REG">
-                       <bitfield name="OUTLOC0" low="0" high="7" type="uint"/>
-                       <bitfield name="OUTLOC1" low="8" high="15" type="uint"/>
-                       <bitfield name="OUTLOC2" low="16" high="23" type="uint"/>
-                       <bitfield name="OUTLOC3" low="24" high="31" type="uint"/>
-               </reg32>
-       </array>
-
-       <reg32 offset="0xa81b" name="SP_UNKNOWN_A81B"/>
-       <reg32 offset="0xa81c" name="SP_VS_OBJ_START_LO"/>
-       <reg32 offset="0xa81d" name="SP_VS_OBJ_START_HI"/>
-       <reg32 offset="0xa822" name="SP_VS_TEX_COUNT" type="uint"/>
-       <reg32 offset="0xa823" name="SP_VS_CONFIG" type="a6xx_sp_xs_config"/>
-       <reg32 offset="0xa824" name="SP_VS_INSTRLEN" type="uint"/>
-
-       <reg32 offset="0xa830" name="SP_HS_CTRL_REG0" type="a6xx_sp_xs_ctrl_reg0"/>
-       <reg32 offset="0xa831" name="SP_HS_UNKNOWN_A831"/>
-       <reg32 offset="0xa833" name="SP_HS_UNKNOWN_A833"/>
-       <reg32 offset="0xa834" name="SP_HS_OBJ_START_LO"/>
-       <reg32 offset="0xa835" name="SP_HS_OBJ_START_HI"/>
-       <reg32 offset="0xa83a" name="SP_HS_TEX_COUNT" type="uint"/>
-       <reg32 offset="0xa83b" name="SP_HS_CONFIG" type="a6xx_sp_xs_config"/>
-       <reg32 offset="0xa83c" name="SP_HS_INSTRLEN" type="uint"/>
-
-       <reg32 offset="0xa840" name="SP_DS_CTRL_REG0" type="a6xx_sp_xs_ctrl_reg0"/>
-       <reg32 offset="0xa842" name="SP_DS_PRIMITIVE_CNTL">
-               <!-- # of DS outputs including pos/psize -->
-               <bitfield name="OUT" low="0" high="5" type="uint"/>
-       </reg32>
-       <array offset="0xa843" name="SP_DS_OUT" stride="1" length="16">
-               <reg32 offset="0x0" name="REG">
-                       <bitfield name="A_REGID" low="0" high="7" type="a3xx_regid"/>
-                       <bitfield name="A_COMPMASK" low="8" high="11" type="hex"/>
-                       <bitfield name="B_REGID" low="16" high="23" type="a3xx_regid"/>
-                       <bitfield name="B_COMPMASK" low="24" high="27" type="hex"/>
-               </reg32>
-       </array>
-       <array offset="0xa853" name="SP_DS_VPC_DST" stride="1" length="8">
-               <reg32 offset="0x0" name="REG">
-                       <bitfield name="OUTLOC0" low="0" high="7" type="uint"/>
-                       <bitfield name="OUTLOC1" low="8" high="15" type="uint"/>
-                       <bitfield name="OUTLOC2" low="16" high="23" type="uint"/>
-                       <bitfield name="OUTLOC3" low="24" high="31" type="uint"/>
-               </reg32>
-       </array>
-
-       <reg32 offset="0xa85b" name="SP_DS_UNKNOWN_A85B"/>
-       <reg32 offset="0xa85c" name="SP_DS_OBJ_START_LO"/>
-       <reg32 offset="0xa85d" name="SP_DS_OBJ_START_HI"/>
-       <reg32 offset="0xa862" name="SP_DS_TEX_COUNT" type="uint"/>
-       <reg32 offset="0xa863" name="SP_DS_CONFIG" type="a6xx_sp_xs_config"/>
-       <reg32 offset="0xa864" name="SP_DS_INSTRLEN" type="uint"/>
-
-       <reg32 offset="0xa870" name="SP_GS_CTRL_REG0" type="a6xx_sp_xs_ctrl_reg0"/>
-       <reg32 offset="0xa871" name="SP_GS_PRIM_SIZE">
-               <!-- size of output of previous stage -->
-       </reg32>
-       <reg32 offset="0xa872" name="SP_GS_BRANCH_COND" type="hex">
-               <!--
-               bitmask of true/false conditions for FS brac.N instructions,
-               bit N corresponds to brac.N
-                -->
-       </reg32>
-
-       <reg32 offset="0xa873" name="SP_GS_PRIMITIVE_CNTL">
-               <!-- # of VS outputs including pos/psize -->
-               <bitfield name="OUT" low="0" high="5" type="uint"/>
-               <bitfield name="FLAGS_REGID" low="6" high="13" type="a3xx_regid"/>
-       </reg32>
-
-       <array offset="0xa874" name="SP_GS_OUT" stride="1" length="16">
-               <reg32 offset="0x0" name="REG">
-                       <bitfield name="A_REGID" low="0" high="7" type="a3xx_regid"/>
-                       <bitfield name="A_COMPMASK" low="8" high="11" type="hex"/>
-                       <bitfield name="B_REGID" low="16" high="23" type="a3xx_regid"/>
-                       <bitfield name="B_COMPMASK" low="24" high="27" type="hex"/>
-               </reg32>
-       </array>
-
-       <array offset="0xa884" name="SP_GS_VPC_DST" stride="1" length="8">
-               <reg32 offset="0x0" name="REG">
-                       <bitfield name="OUTLOC0" low="0" high="7" type="uint"/>
-                       <bitfield name="OUTLOC1" low="8" high="15" type="uint"/>
-                       <bitfield name="OUTLOC2" low="16" high="23" type="uint"/>
-                       <bitfield name="OUTLOC3" low="24" high="31" type="uint"/>
-               </reg32>
-       </array>
-
-       <reg32 offset="0xa88d" name="SP_GS_OBJ_START_LO"/>
-       <reg32 offset="0xa88e" name="SP_GS_OBJ_START_HI"/>
-       <reg32 offset="0xa893" name="SP_GS_TEX_COUNT" type="uint"/>
-       <reg32 offset="0xa894" name="SP_GS_CONFIG" type="a6xx_sp_xs_config"/>
-       <reg32 offset="0xa895" name="SP_GS_INSTRLEN" type="uint"/>
-
-       <reg32 offset="0xa8a0" name="SP_VS_TEX_SAMP_LO"/>
-       <reg32 offset="0xa8a1" name="SP_VS_TEX_SAMP_HI"/>
-       <reg32 offset="0xa8a2" name="SP_HS_TEX_SAMP_LO"/>
-       <reg32 offset="0xa8a3" name="SP_HS_TEX_SAMP_HI"/>
-       <reg32 offset="0xa8a4" name="SP_DS_TEX_SAMP_LO"/>
-       <reg32 offset="0xa8a5" name="SP_DS_TEX_SAMP_HI"/>
-       <reg32 offset="0xa8a6" name="SP_GS_TEX_SAMP_LO"/>
-       <reg32 offset="0xa8a7" name="SP_GS_TEX_SAMP_HI"/>
-       <reg32 offset="0xa8a8" name="SP_VS_TEX_CONST_LO"/>
-       <reg32 offset="0xa8a9" name="SP_VS_TEX_CONST_HI"/>
-       <reg32 offset="0xa8aa" name="SP_HS_TEX_CONST_LO"/>
-       <reg32 offset="0xa8ab" name="SP_HS_TEX_CONST_HI"/>
-       <reg32 offset="0xa8ac" name="SP_DS_TEX_CONST_LO"/>
-       <reg32 offset="0xa8ad" name="SP_DS_TEX_CONST_HI"/>
-       <reg32 offset="0xa8ae" name="SP_GS_TEX_CONST_LO"/>
-       <reg32 offset="0xa8af" name="SP_GS_TEX_CONST_HI"/>
-
-       <reg32 offset="0xa980" name="SP_FS_CTRL_REG0" type="a6xx_sp_xs_ctrl_reg0"/>
-       <reg32 offset="0xa981" name="SP_FS_BRANCH_COND" type="hex">
-               <!--
-               bitmask of true/false conditions for FS brac.N instructions,
-               bit N corresponds to brac.N
-                -->
-       </reg32>
-       <reg32 offset="0xa982" name="SP_UNKNOWN_A982"/>
-       <reg32 offset="0xa983" name="SP_FS_OBJ_START_LO"/>
-       <reg32 offset="0xa984" name="SP_FS_OBJ_START_HI"/>
-
-       <reg32 offset="0xa989" name="SP_BLEND_CNTL">
-               <bitfield name="ENABLED" pos="0" type="boolean"/>
-               <bitfield name="UNK8" pos="8" type="boolean"/>
-               <bitfield name="DUAL_COLOR_IN_ENABLE" pos="9" type="boolean"/>
-               <bitfield name="ALPHA_TO_COVERAGE" pos="10" type="boolean"/>
-       </reg32>
-       <reg32 offset="0xa98a" name="SP_SRGB_CNTL">
-               <!-- Same as RB_SRGB_CNTL -->
-               <bitfield name="SRGB_MRT0" pos="0" type="boolean"/>
-               <bitfield name="SRGB_MRT1" pos="1" type="boolean"/>
-               <bitfield name="SRGB_MRT2" pos="2" type="boolean"/>
-               <bitfield name="SRGB_MRT3" pos="3" type="boolean"/>
-               <bitfield name="SRGB_MRT4" pos="4" type="boolean"/>
-               <bitfield name="SRGB_MRT5" pos="5" type="boolean"/>
-               <bitfield name="SRGB_MRT6" pos="6" type="boolean"/>
-               <bitfield name="SRGB_MRT7" pos="7" type="boolean"/>
-       </reg32>
-       <reg32 offset="0xa98b" name="SP_FS_RENDER_COMPONENTS">
-               <bitfield name="RT0" low="0" high="3"/>
-               <bitfield name="RT1" low="4" high="7"/>
-               <bitfield name="RT2" low="8" high="11"/>
-               <bitfield name="RT3" low="12" high="15"/>
-               <bitfield name="RT4" low="16" high="19"/>
-               <bitfield name="RT5" low="20" high="23"/>
-               <bitfield name="RT6" low="24" high="27"/>
-               <bitfield name="RT7" low="28" high="31"/>
-       </reg32>
-       <reg32 offset="0xa98c" name="SP_FS_OUTPUT_CNTL0">
-               <bitfield name="DUAL_COLOR_IN_ENABLE" pos="0" type="boolean"/>
-               <bitfield name="DEPTH_REGID" low="8" high="15" type="a3xx_regid"/>
-               <bitfield name="SAMPMASK_REGID" low="16" high="23" type="a3xx_regid"/>
-               <bitfield name="STENCILREF_REGID" low="24" high="31" type="a3xx_regid"/>
-       </reg32>
-       <reg32 offset="0xa98d" name="SP_FS_OUTPUT_CNTL1">
-               <bitfield name="MRT" low="0" high="3" type="uint"/>
-       </reg32>
-
-       <array offset="0xa996" name="SP_FS_MRT" stride="1" length="8">
-               <reg32 offset="0" name="REG">
-                       <bitfield name="COLOR_FORMAT" low="0" high="7" type="a6xx_format"/>
-                       <bitfield name="COLOR_SINT" pos="8" type="boolean"/>
-                       <bitfield name="COLOR_UINT" pos="9" type="boolean"/>
-               </reg32>
-       </array>
-
-       <reg32 offset="0xa99e" name="SP_FS_PREFETCH_CNTL">
-               <!-- unknown bits 0x7fc0 always set -->
-               <bitfield name="COUNT" low="0" high="2" type="uint"/>
-               <!-- b3 set if no other use of varyings in the shader itself.. maybe alternative to dummy bary.f? -->
-               <bitfield name="UNK3" pos="3" type="boolean"/>
-               <bitfield name="UNK4" low="4" high="11" type="a3xx_regid"/>
-       </reg32>
-       <array offset="0xa99f" name="SP_FS_PREFETCH" stride="1" length="4">
-               <reg32 offset="0" name="CMD">
-                       <bitfield name="SRC" low="0" high="6" type="uint"/>
-                       <bitfield name="SAMP_ID" low="7" high="10" type="uint"/>
-                       <bitfield name="TEX_ID" low="11" high="15" type="uint"/>
-                       <bitfield name="DST" low="16" high="21" type="a3xx_regid"/>
-                       <bitfield name="WRMASK" low="22" high="25" type="hex"/>
-                       <bitfield name="HALF" pos="26" type="boolean"/>
-                       <!--
-                       CMD seems always 0x4??  3d, textureProj, textureLod seem to
-                       skip pre-fetch.. TODO test texelFetch
-                        CMD is 0x6 when the Vulkan mode is enabled, and
-                        TEX_ID/SAMP_ID refer to the descriptor sets while the
-                        indices come from SP_FS_BINDLESS_PREFETCH[n]
-                        -->
-                       <bitfield name="CMD" low="27" high="31"/>
-               </reg32>
-       </array>
-
-       <!-- TODO confirm that this is actually an array -->
-       <array offset="0xa9a3" name="SP_FS_BINDLESS_PREFETCH" stride="1" length="4">
-               <reg32 offset="0" name="CMD">
-                       <bitfield name="SAMP_ID" low="0" high="7" type="uint"/>
-                       <bitfield name="TEX_ID" low="16" high="23" type="uint"/>
-               </reg32>
-       </array>
-
-       <reg32 offset="0xa9a7" name="SP_FS_TEX_COUNT" type="uint"/>
-
-       <!-- always 0x0 ? -->
-       <reg32 offset="0xa9a8" name="SP_UNKNOWN_A9A8"/>
-
-       <!-- set for compute shaders, always 0x41 -->
-       <reg32 offset="0xa9b1" name="SP_CS_UNKNOWN_A9B1" type="uint">
-               <doc>
-                       bit 0 seems to toggle between 2k and 32k of shared storage
-                       the ldl/stl offset seems to be rewritten to 0 when it is beyond
-                       this limit. This is different from ldlw/stlw, which wraps at
-                       64k (and has 36k of storage on A640 - reads between 36k-64k
-                       always return 0)
-               </doc>
-               <bitfield name="SHARED_SIZE_2K" pos="0" type="uint"/>
-       </reg32>
-
-       <!-- set for compute shaders, always 0x0 -->
-       <reg32 offset="0xa9b3" name="SP_CS_UNKNOWN_A9B3" type="uint"/>
-
-       <reg32 offset="0xa9ba" name="SP_CS_TEX_COUNT" type="uint"/>
-
-       <reg32 offset="0xa9e0" name="SP_FS_TEX_SAMP_LO"/>
-       <reg32 offset="0xa9e1" name="SP_FS_TEX_SAMP_HI"/>
-       <reg32 offset="0xa9e2" name="SP_CS_TEX_SAMP_LO"/>
-       <reg32 offset="0xa9e3" name="SP_CS_TEX_SAMP_HI"/>
-       <reg32 offset="0xa9e4" name="SP_FS_TEX_CONST_LO"/>
-       <reg32 offset="0xa9e5" name="SP_FS_TEX_CONST_HI"/>
-       <reg32 offset="0xa9e6" name="SP_CS_TEX_CONST_LO"/>
-       <reg32 offset="0xa9e7" name="SP_CS_TEX_CONST_HI"/>
-
-       <array offset="0xa9e8" name="SP_CS_BINDLESS_BASE" stride="2" length="5">
-               <reg64 offset="0" name="ADDR" type="waddress"/>
-       </array>
-
-       <array offset="0xa98e" name="SP_FS_OUTPUT" stride="1" length="8">
-               <doc>per MRT</doc>
-               <reg32 offset="0x0" name="REG">
-                       <bitfield name="REGID" low="0" high="7" type="a3xx_regid"/>
-                       <bitfield name="HALF_PRECISION" pos="8" type="boolean"/>
-               </reg32>
-       </array>
-
-       <reg32 offset="0xa9b0" name="SP_CS_CTRL_REG0" type="a6xx_sp_xs_ctrl_reg0"/>
-       <reg32 offset="0xa9b4" name="SP_CS_OBJ_START_LO"/>
-       <reg32 offset="0xa9b5" name="SP_CS_OBJ_START_HI"/>
-       <reg32 offset="0xa9bb" name="SP_CS_CONFIG" type="a6xx_sp_xs_config"/>
-       <reg32 offset="0xa9bc" name="SP_CS_INSTRLEN" type="uint"/>
-
-       <!--
-       IBO state for compute shader:
-        -->
-       <reg32 offset="0xa9f2" name="SP_CS_IBO_LO"/>
-       <reg32 offset="0xa9f3" name="SP_CS_IBO_HI"/>
-       <reg32 offset="0xaa00" name="SP_CS_IBO_COUNT" type="uint"/>
-
-       <!-- always 0x5 ? -->
-       <reg32 offset="0xab00" name="SP_UNKNOWN_AB00"/>
-
-       <reg32 offset="0xab04" name="SP_FS_CONFIG" type="a6xx_sp_xs_config"/>
-       <reg32 offset="0xab05" name="SP_FS_INSTRLEN" type="uint"/>
-
-       <array offset="0xab10" name="SP_BINDLESS_BASE" stride="2" length="5">
-               <reg64 offset="0" name="ADDR" type="waddress"/>
-       </array>
-
-       <!--
-       Combined IBO state for 3d pipe, used for Image and SSBO write/atomic
-       instructions VS/HS/DS/GS/FS.  See SP_CS_IBO_* for compute shaders.
-        -->
-       <reg32 offset="0xab1a" name="SP_IBO_LO"/>
-       <reg32 offset="0xab1b" name="SP_IBO_HI"/>
-       <reg32 offset="0xab20" name="SP_IBO_COUNT" type="uint"/>
-
-       <reg32 offset="0xacc0" name="SP_2D_DST_FORMAT">
-               <bitfield name="NORM" pos="0" type="boolean"/>
-               <bitfield name="SINT" pos="1" type="boolean"/>
-               <bitfield name="UINT" pos="2" type="boolean"/>
-               <!-- looks like HW only cares about the base type of this format,
-                    which matches the ifmt? -->
-               <bitfield name="COLOR_FORMAT" low="3" high="10" type="a6xx_format"/>
-               <!-- set when ifmt is R2D_UNORM8_SRGB -->
-               <bitfield name="SRGB" pos="11" type="boolean"/>
-               <!-- some sort of channel mask, not sure what it is for -->
-               <bitfield name="MASK" low="12" high="15"/>
-       </reg32>
-
-       <!-- always 0x0 -->
-       <reg32 offset="0xae00" name="SP_UNKNOWN_AE00"/>
-
-       <reg32 offset="0xae03" name="SP_UNKNOWN_AE03"/>
-       <reg32 offset="0xae04" name="SP_UNKNOWN_AE04"/>
-
-       <!-- always 0x3f ? -->
-       <reg32 offset="0xae0f" name="SP_UNKNOWN_AE0F"/>
-
-       <!--
-       The downstream kernel calls the debug cluster of registers
-       "a6xx_sp_ps_tp_cluster" but this actually specifies the border
-       color base for compute shaders.
-       -->
-       <reg64 offset="0xb180" name="SP_PS_TP_BORDER_COLOR_BASE_ADDR" type="address"/>
-       <!-- always 0x0 ? -->
-       <reg32 offset="0xb182" name="SP_UNKNOWN_B182"/>
-       <reg32 offset="0xb183" name="SP_UNKNOWN_B183"/>
-
-       <!-- could be all the stuff below here is actually TPL1?? -->
-
-       <reg32 offset="0xb300" name="SP_TP_RAS_MSAA_CNTL">
-               <bitfield name="SAMPLES" low="0" high="1" type="a3xx_msaa_samples"/>
-       </reg32>
-       <reg32 offset="0xb301" name="SP_TP_DEST_MSAA_CNTL">
-               <bitfield name="SAMPLES" low="0" high="1" type="a3xx_msaa_samples"/>
-               <bitfield name="MSAA_DISABLE" pos="2" type="boolean"/>
-       </reg32>
-
-       <!-- looks to work in the same way as a5xx: -->
-       <reg64 offset="0xb302" name="SP_TP_BORDER_COLOR_BASE_ADDR" type="address"/>
-       <reg32 offset="0xb302" name="SP_TP_BORDER_COLOR_BASE_ADDR_LO"/>
-       <reg32 offset="0xb303" name="SP_TP_BORDER_COLOR_BASE_ADDR_HI"/>
-       <reg32 offset="0xb304" name="SP_TP_SAMPLE_CONFIG" type="a6xx_sample_config"/>
-       <reg32 offset="0xb305" name="SP_TP_SAMPLE_LOCATION_0" type="a6xx_sample_locations"/>
-       <reg32 offset="0xb306" name="SP_TP_SAMPLE_LOCATION_1" type="a6xx_sample_locations"/>
-
-       <reg32 offset="0xb309" name="SP_TP_UNKNOWN_B309"/>
-
-       <!--
-       Equiv to corresponding RB_2D_SRC_* regs on a5xx.. which were either
-       badly named or the functionality moved in a6xx.  But downstream kernel
-       calls this "a6xx_sp_ps_tp_2d_cluster"
-        -->
-       <reg32 offset="0xb4c0" name="SP_PS_2D_SRC_INFO" type="a6xx_2d_surf_info"/>
-       <reg32 offset="0xb4c1" name="SP_PS_2D_SRC_SIZE">
-               <bitfield name="WIDTH" low="0" high="14" type="uint"/>
-               <bitfield name="HEIGHT" low="15" high="29" type="uint"/>
-       </reg32>
-       <reg32 offset="0xb4c2" name="SP_PS_2D_SRC_LO"/>
-       <reg32 offset="0xb4c3" name="SP_PS_2D_SRC_HI"/>
-       <reg64 offset="0xb4c2" name="SP_PS_2D_SRC" type="waddress"/>
-       <reg32 offset="0xb4c4" name="SP_PS_2D_SRC_PITCH">
-          <bitfield name="PITCH" low="9" high="24" shr="6" type="uint"/>
-       </reg32>
-
-       <reg32 offset="0xb4ca" name="SP_PS_2D_SRC_FLAGS_LO"/>
-       <reg32 offset="0xb4cb" name="SP_PS_2D_SRC_FLAGS_HI"/>
-       <reg64 offset="0xb4ca" name="SP_PS_2D_SRC_FLAGS" type="waddress"/>
-       <reg32 offset="0xb4cc" name="SP_PS_2D_SRC_FLAGS_PITCH">
-               <bitfield name="PITCH" low="0" high="10" shr="6" type="uint"/>
-               <bitfield name="ARRAY_PITCH" low="11" high="21" shr="7" type="uint"/>
-       </reg32>
-
-       <!-- always 0x00100000 ? -->
-       <reg32 offset="0xb600" name="SP_UNKNOWN_B600"/>
-
-       <!-- always 0x44 ? -->
-       <reg32 offset="0xb605" name="SP_UNKNOWN_B605"/>
-
-       <bitset name="a6xx_hlsq_xs_cntl" inline="yes">
-               <bitfield name="CONSTLEN" low="0" high="7" shr="2" type="uint"/>
-               <bitfield name="ENABLED" pos="8" type="boolean"/>
-       </bitset>
-
-       <reg32 offset="0xb800" name="HLSQ_VS_CNTL" type="a6xx_hlsq_xs_cntl"/>
-       <reg32 offset="0xb801" name="HLSQ_HS_CNTL" type="a6xx_hlsq_xs_cntl"/>
-       <reg32 offset="0xb802" name="HLSQ_DS_CNTL" type="a6xx_hlsq_xs_cntl"/>
-       <reg32 offset="0xb803" name="HLSQ_GS_CNTL" type="a6xx_hlsq_xs_cntl"/>
-
-       <reg32 offset="0xb820" name="HLSQ_LOAD_STATE_GEOM_CMD"/>
-       <reg64 offset="0xb821" name="HLSQ_LOAD_STATE_GEOM_EXT_SRC_ADDR"/>
-       <reg32 offset="0xb823" name="HLSQ_LOAD_STATE_GEOM_DATA"/>
-
-       <reg32 offset="0xb980" name="HLSQ_UNKNOWN_B980"/>
-
-       <reg32 offset="0xb982" name="HLSQ_CONTROL_1_REG">
-               <!-- always 0x7 ? -->
-       </reg32>
-       <reg32 offset="0xb983" name="HLSQ_CONTROL_2_REG">
-               <bitfield name="FACEREGID" low="0" high="7" type="a3xx_regid"/>
-               <!-- SAMPLEID is loaded into a half-precision register: -->
-               <bitfield name="SAMPLEID" low="8" high="15" type="a3xx_regid"/>
-               <bitfield name="SAMPLEMASK" low="16" high="23" type="a3xx_regid"/>
-               <!--
-               SIZE is the "size" of the primitive, ie. what the i/j coords need
-               to be divided by to scale to a single fragment.  It is probably
-               the longer of the two lines that form the tri (ie v0v1 and v0v2)?
-                -->
-               <bitfield name="SIZE" low="24" high="31" type="a3xx_regid"/>
-       </reg32>
-       <reg32 offset="0xb984" name="HLSQ_CONTROL_3_REG">
-               <!-- register loaded with position (bary.f) -->
-               <bitfield name="IJ_PERSP_PIXEL" low="0" high="7" type="a3xx_regid"/>
-               <bitfield name="IJ_LINEAR_PIXEL" low="8" high="15" type="a3xx_regid"/>
-               <bitfield name="IJ_PERSP_CENTROID" low="16" high="23" type="a3xx_regid"/>
-               <bitfield name="IJ_LINEAR_CENTROID" low="24" high="31" type="a3xx_regid"/>
-       </reg32>
-       <reg32 offset="0xb985" name="HLSQ_CONTROL_4_REG">
-               <bitfield name="IJ_PERSP_SAMPLE" low="0" high="7" type="a3xx_regid"/>
-               <bitfield name="IJ_LINEAR_SAMPLE" low="8" high="15" type="a3xx_regid"/>
-               <bitfield name="XYCOORDREGID" low="16" high="23" type="a3xx_regid"/>
-               <bitfield name="ZWCOORDREGID" low="24" high="31" type="a3xx_regid"/>
-       </reg32>
-       <reg32 offset="0xb986" name="HLSQ_CONTROL_5_REG">
-               <!-- unknown regid in low 8b -->
-       </reg32>
-       <reg32 offset="0xb987" name="HLSQ_CS_CNTL" type="a6xx_hlsq_xs_cntl"/>
-
-       <reg32 offset="0xb990" name="HLSQ_CS_NDRANGE_0">
-               <bitfield name="KERNELDIM" low="0" high="1" type="uint"/>
-               <!-- localsize is value minus one: -->
-               <bitfield name="LOCALSIZEX" low="2" high="11" type="uint"/>
-               <bitfield name="LOCALSIZEY" low="12" high="21" type="uint"/>
-               <bitfield name="LOCALSIZEZ" low="22" high="31" type="uint"/>
-       </reg32>
-       <reg32 offset="0xb991" name="HLSQ_CS_NDRANGE_1">
-               <bitfield name="GLOBALSIZE_X" low="0" high="31" type="uint"/>
-       </reg32>
-       <reg32 offset="0xb992" name="HLSQ_CS_NDRANGE_2">
-               <bitfield name="GLOBALOFF_X" low="0" high="31" type="uint"/>
-       </reg32>
-       <reg32 offset="0xb993" name="HLSQ_CS_NDRANGE_3">
-               <bitfield name="GLOBALSIZE_Y" low="0" high="31" type="uint"/>
-       </reg32>
-       <reg32 offset="0xb994" name="HLSQ_CS_NDRANGE_4">
-               <bitfield name="GLOBALOFF_Y" low="0" high="31" type="uint"/>
-       </reg32>
-       <reg32 offset="0xb995" name="HLSQ_CS_NDRANGE_5">
-               <bitfield name="GLOBALSIZE_Z" low="0" high="31" type="uint"/>
-       </reg32>
-       <reg32 offset="0xb996" name="HLSQ_CS_NDRANGE_6">
-               <bitfield name="GLOBALOFF_Z" low="0" high="31" type="uint"/>
-       </reg32>
-       <reg32 offset="0xb997" name="HLSQ_CS_CNTL_0">
-               <bitfield name="WGIDCONSTID" low="0" high="7" type="a3xx_regid"/>
-               <bitfield name="UNK0" low="8" high="15" type="a3xx_regid"/>
-               <bitfield name="UNK1" low="16" high="23" type="a3xx_regid"/>
-               <bitfield name="LOCALIDREGID" low="24" high="31" type="a3xx_regid"/>
-       </reg32>
-       <reg32 offset="0xb998" name="HLSQ_CS_UNKNOWN_B998"/> <!-- always 0x2fc -->
-       <reg32 offset="0xb999" name="HLSQ_CS_KERNEL_GROUP_X"/>
-       <reg32 offset="0xb99a" name="HLSQ_CS_KERNEL_GROUP_Y"/>
-       <reg32 offset="0xb99b" name="HLSQ_CS_KERNEL_GROUP_Z"/>
-
-       <reg32 offset="0xb9a0" name="HLSQ_LOAD_STATE_FRAG_CMD"/>
-       <reg64 offset="0xb9a1" name="HLSQ_LOAD_STATE_FRAG_EXT_SRC_ADDR"/>
-       <reg32 offset="0xb9a3" name="HLSQ_LOAD_STATE_FRAG_DATA"/>
-
-       <!-- mirror of SP_CS_BINDLESS_BASE -->
-       <array offset="0xb9c0" name="HLSQ_CS_BINDLESS_BASE" stride="2" length="5">
-               <reg64 offset="0" name="ADDR" type="waddress"/>
-       </array>
-
-       <reg32 offset="0xbb00" name="HLSQ_DRAW_CMD">
-               <bitfield name="STATE_ID" low="0" high="7"/>
-       </reg32>
-
-       <reg32 offset="0xbb01" name="HLSQ_DISPATCH_CMD">
-               <bitfield name="STATE_ID" low="0" high="7"/>
-       </reg32>
-
-       <reg32 offset="0xbb02" name="HLSQ_EVENT_CMD">
-               <!-- I think only the low bit is actually used? -->
-               <bitfield name="STATE_ID" low="16" high="23"/>
-               <bitfield name="EVENT" low="0" high="6" type="vgt_event_type"/>
-       </reg32>
-
-       <reg32 offset="0xbb08" name="HLSQ_INVALIDATE_CMD">
-               <doc>
-                       This register clears pending loads queued up by
-                       CP_LOAD_STATE6. Each bit resets a particular kind(s) of
-                       CP_LOAD_STATE6.
-               </doc>
-
-               <!-- per-stage state: shader, non-bindless UBO, textures, and samplers -->
-               <bitfield name="VS_STATE" pos="0" type="boolean"/>
-               <bitfield name="HS_STATE" pos="1" type="boolean"/>
-               <bitfield name="DS_STATE" pos="2" type="boolean"/>
-               <bitfield name="GS_STATE" pos="3" type="boolean"/>
-               <bitfield name="FS_STATE" pos="4" type="boolean"/>
-               <bitfield name="CS_STATE" pos="5" type="boolean"/>
-
-               <bitfield name="CS_IBO" pos="6" type="boolean"/>
-               <bitfield name="GFX_IBO" pos="7" type="boolean"/>
-
-               <!-- Note: these only do something when HLSQ_SHARED_CONSTS is set to 1 -->
-               <bitfield name="CS_SHARED_CONST" pos="19" type="boolean"/>
-               <bitfield name="GFX_SHARED_CONST" pos="8" type="boolean"/>
-
-               <!-- SS6_BINDLESS: one bit per bindless base -->
-               <bitfield name="CS_BINDLESS" low="9" high="13" type="hex"/>
-               <bitfield name="GFX_BINDLESS" low="14" high="18" type="hex"/>
-       </reg32>
-
-       <reg32 offset="0xbb10" name="HLSQ_FS_CNTL" type="a6xx_hlsq_xs_cntl"/>
-
-       <reg32 offset="0xbb11" name="HLSQ_SHARED_CONSTS">
-               <doc>
-                       Shared constants are intended to be used for Vulkan push
-                       constants. When enabled, 8 vec4's are reserved in the FS
-                       const pool and 16 in the geometry const pool although
-                       only 8 are actually used (why?) and they are mapped to
-                       c504-c511 in each stage. Both VS and FS shared consts
-                       are written using ST6_CONSTANTS/SB6_IBO, so that both
-                       the geometry and FS shared consts can be written at once
-                       by using CP_LOAD_STATE6 rather than
-                       CP_LOAD_STATE6_FRAG/CP_LOAD_STATE6_GEOM. In addition
-                       DST_OFF and NUM_UNIT are in units of dwords instead of
-                       vec4's.
-
-                       There is also a separate shared constant pool for CS,
-                       which is loaded through CP_LOAD_STATE6_FRAG with
-                       ST6_UBO/ST6_IBO. However the only real difference for CS
-                       is the dword units.
-               </doc>
-               <bitfield name="ENABLE" pos="0" type="boolean"/>
-       </reg32>
-
-       <!-- mirror of SP_BINDLESS_BASE -->
-       <array offset="0xbb20" name="HLSQ_BINDLESS_BASE" stride="2" length="5">
-               <reg64 offset="0" name="ADDR" type="waddress"/>
-       </array>
-
-       <reg32 offset="0xbd80" name="HLSQ_2D_EVENT_CMD">
-               <bitfield name="STATE_ID" low="8" high="15"/>
-               <bitfield name="EVENT" low="0" high="6" type="vgt_event_type"/>
-       </reg32>
-
-       <!-- always 0x80 ? -->
-       <reg32 offset="0xbe00" name="HLSQ_UNKNOWN_BE00"/>
-       <!-- always 0x0 ? -->
-       <reg32 offset="0xbe01" name="HLSQ_UNKNOWN_BE01"/>
-       <!-- always 0x0 ? -->
-       <reg32 offset="0xbe04" name="HLSQ_UNKNOWN_BE04"/>
-
-       <!--
-               These special registers signal the beginning/end of an event
-               sequence. The sequence used internally for an event looks like:
-               - write EVENT_CMD pipe register
-               - write CP_EVENT_START
-               - write HLSQ_EVENT_CMD with event or HLSQ_DRAW_CMD
-               - write PC_EVENT_CMD with event or PC_DRAW_CMD
-               - write HLSQ_EVENT_CMD(CONTEXT_DONE)
-               - write PC_EVENT_CMD(CONTEXT_DONE)
-               - write CP_EVENT_END
-               Writing to CP_EVENT_END seems to actually trigger the context roll
-       -->
-       <reg32 offset="0xd600" name="CP_EVENT_START">
-               <bitfield name="STATE_ID" low="0" high="7"/>
-       </reg32>
-       <reg32 offset="0xd601" name="CP_EVENT_END">
-               <bitfield name="STATE_ID" low="0" high="7"/>
-       </reg32>
-       <reg32 offset="0xd700" name="CP_2D_EVENT_START">
-               <bitfield name="STATE_ID" low="0" high="7"/>
-       </reg32>
-       <reg32 offset="0xd701" name="CP_2D_EVENT_END">
-               <bitfield name="STATE_ID" low="0" high="7"/>
-       </reg32>
-</domain>
-
-<!-- Seems basically the same as a5xx, maybe move to common.xml.. -->
-<domain name="A6XX_TEX_SAMP" width="32">
-       <doc>Texture sampler dwords</doc>
-       <enum name="a6xx_tex_filter"> <!-- same as a4xx? -->
-               <value name="A6XX_TEX_NEAREST" value="0"/>
-               <value name="A6XX_TEX_LINEAR" value="1"/>
-               <value name="A6XX_TEX_ANISO" value="2"/>
-               <value name="A6XX_TEX_CUBIC" value="3"/> <!-- a650 only -->
-       </enum>
-       <enum name="a6xx_tex_clamp"> <!-- same as a4xx? -->
-               <value name="A6XX_TEX_REPEAT" value="0"/>
-               <value name="A6XX_TEX_CLAMP_TO_EDGE" value="1"/>
-               <value name="A6XX_TEX_MIRROR_REPEAT" value="2"/>
-               <value name="A6XX_TEX_CLAMP_TO_BORDER" value="3"/>
-               <value name="A6XX_TEX_MIRROR_CLAMP" value="4"/>
-       </enum>
-       <enum name="a6xx_tex_aniso"> <!-- same as a4xx? -->
-               <value name="A6XX_TEX_ANISO_1" value="0"/>
-               <value name="A6XX_TEX_ANISO_2" value="1"/>
-               <value name="A6XX_TEX_ANISO_4" value="2"/>
-               <value name="A6XX_TEX_ANISO_8" value="3"/>
-               <value name="A6XX_TEX_ANISO_16" value="4"/>
-       </enum>
-       <enum name="a6xx_reduction_mode">
-               <value name="A6XX_REDUCTION_MODE_AVERAGE" value="0"/>
-               <value name="A6XX_REDUCTION_MODE_MIN" value="1"/>
-               <value name="A6XX_REDUCTION_MODE_MAX" value="2"/>
-       </enum>
-
-       <reg32 offset="0" name="0">
-               <bitfield name="MIPFILTER_LINEAR_NEAR" pos="0" type="boolean"/>
-               <bitfield name="XY_MAG" low="1" high="2" type="a6xx_tex_filter"/>
-               <bitfield name="XY_MIN" low="3" high="4" type="a6xx_tex_filter"/>
-               <bitfield name="WRAP_S" low="5" high="7" type="a6xx_tex_clamp"/>
-               <bitfield name="WRAP_T" low="8" high="10" type="a6xx_tex_clamp"/>
-               <bitfield name="WRAP_R" low="11" high="13" type="a6xx_tex_clamp"/>
-               <bitfield name="ANISO" low="14" high="16" type="a6xx_tex_aniso"/>
-               <bitfield name="LOD_BIAS" low="19" high="31" type="fixed" radix="8"/><!-- no idea how many bits for real -->
-       </reg32>
-       <reg32 offset="1" name="1">
-               <!-- bit 0 always set with vulkan? -->
-               <bitfield name="UNK0" pos="0" type="boolean"/>
-               <bitfield name="COMPARE_FUNC" low="1" high="3" type="adreno_compare_func"/>
-               <bitfield name="CUBEMAPSEAMLESSFILTOFF" pos="4" type="boolean"/>
-               <bitfield name="UNNORM_COORDS" pos="5" type="boolean"/>
-               <bitfield name="MIPFILTER_LINEAR_FAR" pos="6" type="boolean"/>
-               <bitfield name="MAX_LOD" low="8" high="19" type="ufixed" radix="8"/>
-               <bitfield name="MIN_LOD" low="20" high="31" type="ufixed" radix="8"/>
-       </reg32>
-       <reg32 offset="2" name="2">
-               <bitfield name="REDUCTION_MODE" low="0" high="1" type="a6xx_reduction_mode"/>
-               <bitfield name="CHROMA_LINEAR" pos="5" type="boolean"/>
-               <bitfield name="BCOLOR_OFFSET" low="7" high="31" shr="7"/>
-       </reg32>
-       <reg32 offset="3" name="3"/>
-</domain>
-
-<domain name="A6XX_TEX_CONST" width="32">
-       <doc>Texture constant dwords</doc>
-       <enum name="a6xx_tex_swiz"> <!-- same as a4xx? -->
-               <value name="A6XX_TEX_X" value="0"/>
-               <value name="A6XX_TEX_Y" value="1"/>
-               <value name="A6XX_TEX_Z" value="2"/>
-               <value name="A6XX_TEX_W" value="3"/>
-               <value name="A6XX_TEX_ZERO" value="4"/>
-               <value name="A6XX_TEX_ONE" value="5"/>
-       </enum>
-       <enum name="a6xx_tex_type"> <!-- same as a4xx? -->
-               <value name="A6XX_TEX_1D" value="0"/>
-               <value name="A6XX_TEX_2D" value="1"/>
-               <value name="A6XX_TEX_CUBE" value="2"/>
-               <value name="A6XX_TEX_3D" value="3"/>
-       </enum>
-       <reg32 offset="0" name="0">
-               <bitfield name="TILE_MODE" low="0" high="1" type="a6xx_tile_mode"/>
-               <bitfield name="SRGB" pos="2" type="boolean"/>
-               <bitfield name="SWIZ_X" low="4" high="6" type="a6xx_tex_swiz"/>
-               <bitfield name="SWIZ_Y" low="7" high="9" type="a6xx_tex_swiz"/>
-               <bitfield name="SWIZ_Z" low="10" high="12" type="a6xx_tex_swiz"/>
-               <bitfield name="SWIZ_W" low="13" high="15" type="a6xx_tex_swiz"/>
-               <bitfield name="MIPLVLS" low="16" high="19" type="uint"/>
-               <!-- overlaps with MIPLVLS -->
-               <bitfield name="CHROMA_MIDPOINT_X" pos="16" type="boolean"/>
-               <bitfield name="CHROMA_MIDPOINT_Y" pos="18" type="boolean"/>
-               <bitfield name="SAMPLES" low="20" high="21" type="a3xx_msaa_samples"/>
-               <bitfield name="FMT" low="22" high="29" type="a6xx_format"/>
-               <bitfield name="SWAP" low="30" high="31" type="a3xx_color_swap"/>
-       </reg32>
-       <reg32 offset="1" name="1">
-               <bitfield name="WIDTH" low="0" high="14" type="uint"/>
-               <bitfield name="HEIGHT" low="15" high="29" type="uint"/>
-       </reg32>
-       <reg32 offset="2" name="2">
-               <!--
-               b4 and b31 set for buffer/ssbo case, in which case low 15 bits
-               of size encoded in WIDTH, and high 15 bits encoded in HEIGHT
-
-               b31 is probably the 'BUFFER' bit.. it is the one that changes
-               behavior of texture in dEQP-GLES31.functional.texture.texture_buffer.render.as_fragment_texture.buffer_size_131071
-                -->
-               <bitfield name="UNK4" pos="4" type="boolean"/>
-                <!-- minimum pitch (for mipmap levels): log2(pitchalign / 64) -->
-               <bitfield name="PITCHALIGN" low="0" high="3" type="uint"/>
-               <doc>Pitch in bytes (so actually stride)</doc>
-               <bitfield name="PITCH" low="7" high="28" type="uint"/>
-               <bitfield name="TYPE" low="29" high="30" type="a6xx_tex_type"/>
-               <bitfield name="UNK31" pos="31" type="boolean"/>
-       </reg32>
-       <reg32 offset="3" name="3">
-               <!--
-               ARRAY_PITCH is basically LAYERSZ for the first mipmap level, and
-               for 3d textures (laid out mipmap level first) MIN_LAYERSZ is the
-               layer size at the point that it stops being reduced moving to
-               higher (smaller) mipmap levels
-                -->
-               <bitfield name="ARRAY_PITCH" low="0" high="13" shr="12" type="uint"/>
-               <bitfield name="MIN_LAYERSZ" low="23" high="26" shr="12"/>
-               <!--
-               by default levels with w < 16 are linear
-               TILE_ALL makes all levels have tiling
-               seems required when using UBWC, since all levels have UBWC (can possibly be disabled?)
-                -->
-               <bitfield name="TILE_ALL" pos="27" type="boolean"/>
-               <bitfield name="FLAG" pos="28" type="boolean"/>
-       </reg32>
-       <!-- for 2-3 plane format, BASE is flag buffer address (if enabled)
-            the address of the non-flag base buffer is determined automatically,
-            and must follow the flag buffer
-        -->
-       <reg32 offset="4" name="4">
-               <bitfield name="BASE_LO" low="5" high="31" shr="5"/>
-       </reg32>
-       <reg32 offset="5" name="5">
-               <bitfield name="BASE_HI" low="0" high="16"/>
-               <bitfield name="DEPTH" low="17" high="29" type="uint"/>
-       </reg32>
-       <reg32 offset="6" name="6">
-               <!-- pitch for plane 2 / plane 3 -->
-               <bitfield name="PLANE_PITCH" low="8" high="31" type="uint"/>
-       </reg32>
-       <!-- 7/8 is plane 2 address for planar formats -->
-       <reg32 offset="7" name="7">
-               <bitfield name="FLAG_LO" low="5" high="31" shr="5"/>
-       </reg32>
-       <reg32 offset="8" name="8">
-               <bitfield name="FLAG_HI" low="0" high="16"/>
-       </reg32>
-       <!-- 9/10 is plane 3 address for planar formats -->
-       <reg32 offset="9" name="9">
-               <bitfield name="FLAG_BUFFER_ARRAY_PITCH" low="0" high="16" shr="4" type="uint"/>
-       </reg32>
-       <reg32 offset="10" name="10">
-               <bitfield name="FLAG_BUFFER_PITCH" low="0" high="6" shr="6" type="uint"/>
-               <!-- log2 size of the first level, required for mipmapping -->
-               <bitfield name="FLAG_BUFFER_LOGW" low="8" high="11" type="uint"/>
-               <bitfield name="FLAG_BUFFER_LOGH" low="12" high="15" type="uint"/>
-       </reg32>
-       <reg32 offset="11" name="11"/>
-       <reg32 offset="12" name="12"/>
-       <reg32 offset="13" name="13"/>
-       <reg32 offset="14" name="14"/>
-       <reg32 offset="15" name="15"/>
-</domain>
-
-<!--
-Note the "SSBO" state blocks are actually used for both images and SSBOs,
-naming is just because I r/e'd SSBOs first.  I should probably come up
-with a better name.
--->
-<domain name="A6XX_IBO" width="32">
-       <reg32 offset="0" name="0">
-               <!--
-               NOTE: same position as in TEX_CONST state.. I don't see other bits
-               used but if they are good chance position is same as TEX_CONST
-                -->
-               <bitfield name="TILE_MODE" low="0" high="1" type="a6xx_tile_mode"/>
-               <bitfield name="FMT" low="22" high="29" type="a6xx_format"/>
-       </reg32>
-       <reg32 offset="1" name="1">
-               <bitfield name="WIDTH" low="0" high="14" type="uint"/>
-               <bitfield name="HEIGHT" low="15" high="29" type="uint"/>
-       </reg32>
-       <reg32 offset="2" name="2">
-               <!--
-               b4 and b31 set for buffer/ssbo case, in which case low 15 bits
-               of size encoded in WIDTH, and high 15 bits encoded in HEIGHT
-                -->
-               <bitfield name="UNK4" pos="4" type="boolean"/>
-               <doc>Pitch in bytes (so actually stride)</doc>
-               <bitfield name="PITCH" low="7" high="28" type="uint"/>
-               <bitfield name="TYPE" low="29" high="30" type="a6xx_tex_type"/>
-               <bitfield name="UNK31" pos="31" type="boolean"/>
-       </reg32>
-       <reg32 offset="3" name="3">
-               <!--
-               ARRAY_PITCH is basically LAYERSZ for the first mipmap level, and
-               for 3d textures (laid out mipmap level first) MIN_LAYERSZ is the
-               layer size at the point that it stops being reduced moving to
-               higher (smaller) mipmap levels
-                -->
-               <bitfield name="ARRAY_PITCH" low="0" high="13" shr="12" type="uint"/>
-               <bitfield name="UNK27" pos="27" type="boolean"/>
-               <bitfield name="FLAG" pos="28" type="boolean"/>
-       </reg32>
-       <reg32 offset="4" name="4">
-               <bitfield name="BASE_LO" low="0" high="31"/>
-       </reg32>
-       <reg32 offset="5" name="5">
-               <bitfield name="BASE_HI" low="0" high="16"/>
-               <bitfield name="DEPTH" low="17" high="29" type="uint"/>
-       </reg32>
-       <reg32 offset="6" name="6">
-       </reg32>
-       <reg32 offset="7" name="7">
-       </reg32>
-       <reg32 offset="8" name="8">
-       </reg32>
-       <reg32 offset="9" name="9">
-               <bitfield name="FLAG_BUFFER_ARRAY_PITCH" low="0" high="16" shr="4" type="uint"/>
-       </reg32>
-       <reg32 offset="10" name="10">
-               <!--
-               I see some other bits set by blob above FLAG_BUFFER_PITCH, but they
-               don't seem to be particularly sensible... or needed for UBWC to work
-                -->
-               <bitfield name="FLAG_BUFFER_PITCH" low="0" high="6" shr="6" type="uint"/>
-       </reg32>
-</domain>
-
-<domain name="A6XX_UBO" width="32">
-       <reg32 offset="0" name="0">
-               <bitfield name="BASE_LO" low="0" high="31"/>
-       </reg32>
-       <reg32 offset="1" name="1">
-               <bitfield name="BASE_HI" low="0" high="16"/>
-               <bitfield name="SIZE" low="17" high="31"/> <!-- size in vec4 (4xDWORD) units -->
-       </reg32>
-</domain>
-
-<domain name="A6XX_PDC" width="32">
-       <reg32 offset="0x1140" name="GPU_ENABLE_PDC"/>
-       <reg32 offset="0x1148" name="GPU_SEQ_START_ADDR"/>
-       <reg32 offset="0x1540" name="GPU_TCS0_CONTROL"/>
-       <reg32 offset="0x1541" name="GPU_TCS0_CMD_ENABLE_BANK"/>
-       <reg32 offset="0x1542" name="GPU_TCS0_CMD_WAIT_FOR_CMPL_BANK"/>
-       <reg32 offset="0x1543" name="GPU_TCS0_CMD0_MSGID"/>
-       <reg32 offset="0x1544" name="GPU_TCS0_CMD0_ADDR"/>
-       <reg32 offset="0x1545" name="GPU_TCS0_CMD0_DATA"/>
-       <reg32 offset="0x1572" name="GPU_TCS1_CONTROL"/>
-       <reg32 offset="0x1573" name="GPU_TCS1_CMD_ENABLE_BANK"/>
-       <reg32 offset="0x1574" name="GPU_TCS1_CMD_WAIT_FOR_CMPL_BANK"/>
-       <reg32 offset="0x1575" name="GPU_TCS1_CMD0_MSGID"/>
-       <reg32 offset="0x1576" name="GPU_TCS1_CMD0_ADDR"/>
-       <reg32 offset="0x1577" name="GPU_TCS1_CMD0_DATA"/>
-       <reg32 offset="0x15A4" name="GPU_TCS2_CONTROL"/>
-       <reg32 offset="0x15A5" name="GPU_TCS2_CMD_ENABLE_BANK"/>
-       <reg32 offset="0x15A6" name="GPU_TCS2_CMD_WAIT_FOR_CMPL_BANK"/>
-       <reg32 offset="0x15A7" name="GPU_TCS2_CMD0_MSGID"/>
-       <reg32 offset="0x15A8" name="GPU_TCS2_CMD0_ADDR"/>
-       <reg32 offset="0x15A9" name="GPU_TCS2_CMD0_DATA"/>
-       <reg32 offset="0x15D6" name="GPU_TCS3_CONTROL"/>
-       <reg32 offset="0x15D7" name="GPU_TCS3_CMD_ENABLE_BANK"/>
-       <reg32 offset="0x15D8" name="GPU_TCS3_CMD_WAIT_FOR_CMPL_BANK"/>
-       <reg32 offset="0x15D9" name="GPU_TCS3_CMD0_MSGID"/>
-       <reg32 offset="0x15DA" name="GPU_TCS3_CMD0_ADDR"/>
-       <reg32 offset="0x15DB" name="GPU_TCS3_CMD0_DATA"/>
-</domain>
-
-<domain name="A6XX_PDC_GPU_SEQ" width="32">
-       <reg32 offset="0x0" name="MEM_0"/>
-</domain>
-
-<domain name="A6XX_CX_DBGC" width="32">
-       <reg32 offset="0x0000" name="CFG_DBGBUS_SEL_A">
-               <bitfield high="7" low="0" name="PING_INDEX"/>
-               <bitfield high="15" low="8" name="PING_BLK_SEL"/>
-       </reg32>
-       <reg32 offset="0x0001" name="CFG_DBGBUS_SEL_B"/>
-       <reg32 offset="0x0002" name="CFG_DBGBUS_SEL_C"/>
-       <reg32 offset="0x0003" name="CFG_DBGBUS_SEL_D"/>
-       <reg32 offset="0x0004" name="CFG_DBGBUS_CNTLT">
-               <bitfield high="5" low="0" name="TRACEEN"/>
-               <bitfield high="14" low="12" name="GRANU"/>
-               <bitfield high="31" low="28" name="SEGT"/>
-       </reg32>
-       <reg32 offset="0x0005" name="CFG_DBGBUS_CNTLM">
-               <bitfield high="27" low="24" name="ENABLE"/>
-       </reg32>
-       <reg32 offset="0x0008" name="CFG_DBGBUS_IVTL_0"/>
-       <reg32 offset="0x0009" name="CFG_DBGBUS_IVTL_1"/>
-       <reg32 offset="0x000a" name="CFG_DBGBUS_IVTL_2"/>
-       <reg32 offset="0x000b" name="CFG_DBGBUS_IVTL_3"/>
-       <reg32 offset="0x000c" name="CFG_DBGBUS_MASKL_0"/>
-       <reg32 offset="0x000d" name="CFG_DBGBUS_MASKL_1"/>
-       <reg32 offset="0x000e" name="CFG_DBGBUS_MASKL_2"/>
-       <reg32 offset="0x000f" name="CFG_DBGBUS_MASKL_3"/>
-       <reg32 offset="0x0010" name="CFG_DBGBUS_BYTEL_0">
-               <bitfield high="3" low="0" name="BYTEL0"/>
-               <bitfield high="7" low="4" name="BYTEL1"/>
-               <bitfield high="11" low="8" name="BYTEL2"/>
-               <bitfield high="15" low="12" name="BYTEL3"/>
-               <bitfield high="19" low="16" name="BYTEL4"/>
-               <bitfield high="23" low="20" name="BYTEL5"/>
-               <bitfield high="27" low="24" name="BYTEL6"/>
-               <bitfield high="31" low="28" name="BYTEL7"/>
-       </reg32>
-       <reg32 offset="0x0011" name="CFG_DBGBUS_BYTEL_1">
-               <bitfield high="3" low="0" name="BYTEL8"/>
-               <bitfield high="7" low="4" name="BYTEL9"/>
-               <bitfield high="11" low="8" name="BYTEL10"/>
-               <bitfield high="15" low="12" name="BYTEL11"/>
-               <bitfield high="19" low="16" name="BYTEL12"/>
-               <bitfield high="23" low="20" name="BYTEL13"/>
-               <bitfield high="27" low="24" name="BYTEL14"/>
-               <bitfield high="31" low="28" name="BYTEL15"/>
-       </reg32>
-
-       <reg32 offset="0x002f" name="CFG_DBGBUS_TRACE_BUF1"/>
-       <reg32 offset="0x0030" name="CFG_DBGBUS_TRACE_BUF2"/>
-</domain>
-
-<domain name="A6XX_CX_MISC" width="32">
-       <reg32 offset="0x0001" name="SYSTEM_CACHE_CNTL_0"/>
-       <reg32 offset="0x0002" name="SYSTEM_CACHE_CNTL_1"/>
-</domain>
-
-</database>
diff --git a/src/freedreno/registers/adreno.xml b/src/freedreno/registers/adreno.xml
new file mode 100644 (file)
index 0000000..92b7f37
--- /dev/null
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<database xmlns="http://nouveau.freedesktop.org/"
+xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+xsi:schemaLocation="http://nouveau.freedesktop.org/ rules-ng.xsd">
+<import file="freedreno_copyright.xml"/>
+
+<import file="adreno/a2xx.xml"/>
+<import file="adreno/a3xx.xml"/>
+<import file="adreno/a4xx.xml"/>
+<import file="adreno/a5xx.xml"/>
+<import file="adreno/a6xx.xml"/>
+<import file="adreno/a6xx_gmu.xml"/>
+<import file="adreno/ocmem.xml"/>
+<import file="adreno/adreno_control_regs.xml"/>
+<import file="adreno/adreno_pipe_regs.xml"/>
+
+</database>
diff --git a/src/freedreno/registers/adreno/a2xx.xml b/src/freedreno/registers/adreno/a2xx.xml
new file mode 100644 (file)
index 0000000..549ce1e
--- /dev/null
@@ -0,0 +1,1831 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<database xmlns="http://nouveau.freedesktop.org/"
+xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+xsi:schemaLocation="http://nouveau.freedesktop.org/ rules-ng.xsd">
+<import file="freedreno_copyright.xml"/>
+<import file="adreno/adreno_common.xml"/>
+<import file="adreno/adreno_pm4.xml"/>
+
+
+<enum name="a2xx_rb_dither_type">
+       <value name="DITHER_PIXEL" value="0"/>
+       <value name="DITHER_SUBPIXEL" value="1"/>
+</enum>
+
+<enum name="a2xx_colorformatx">
+       <value name="COLORX_4_4_4_4" value="0"/>
+       <value name="COLORX_1_5_5_5" value="1"/>
+       <value name="COLORX_5_6_5" value="2"/>
+       <value name="COLORX_8" value="3"/>
+       <value name="COLORX_8_8" value="4"/>
+       <value name="COLORX_8_8_8_8" value="5"/>
+       <value name="COLORX_S8_8_8_8" value="6"/>
+       <value name="COLORX_16_FLOAT" value="7"/>
+       <value name="COLORX_16_16_FLOAT" value="8"/>
+       <value name="COLORX_16_16_16_16_FLOAT" value="9"/>
+       <value name="COLORX_32_FLOAT" value="10"/>
+       <value name="COLORX_32_32_FLOAT" value="11"/>
+       <value name="COLORX_32_32_32_32_FLOAT" value="12"/>
+       <value name="COLORX_2_3_3" value="13"/>
+       <value name="COLORX_8_8_8" value="14"/>
+</enum>
+
+<enum name="a2xx_sq_surfaceformat">
+       <value name="FMT_1_REVERSE" value="0"/>
+       <value name="FMT_1" value="1"/>
+       <value name="FMT_8" value="2"/>
+       <value name="FMT_1_5_5_5" value="3"/>
+       <value name="FMT_5_6_5" value="4"/>
+       <value name="FMT_6_5_5" value="5"/>
+       <value name="FMT_8_8_8_8" value="6"/>
+       <value name="FMT_2_10_10_10" value="7"/>
+       <value name="FMT_8_A" value="8"/>
+       <value name="FMT_8_B" value="9"/>
+       <value name="FMT_8_8" value="10"/>
+       <value name="FMT_Cr_Y1_Cb_Y0" value="11"/>
+       <value name="FMT_Y1_Cr_Y0_Cb" value="12"/>
+       <value name="FMT_5_5_5_1" value="13"/>
+       <value name="FMT_8_8_8_8_A" value="14"/>
+       <value name="FMT_4_4_4_4" value="15"/>
+       <value name="FMT_8_8_8" value="16"/>
+       <value name="FMT_DXT1" value="18"/>
+       <value name="FMT_DXT2_3" value="19"/>
+       <value name="FMT_DXT4_5" value="20"/>
+       <value name="FMT_10_10_10_2" value="21"/>
+       <value name="FMT_24_8" value="22"/>
+       <value name="FMT_16" value="24"/>
+       <value name="FMT_16_16" value="25"/>
+       <value name="FMT_16_16_16_16" value="26"/>
+       <value name="FMT_16_EXPAND" value="27"/>
+       <value name="FMT_16_16_EXPAND" value="28"/>
+       <value name="FMT_16_16_16_16_EXPAND" value="29"/>
+       <value name="FMT_16_FLOAT" value="30"/>
+       <value name="FMT_16_16_FLOAT" value="31"/>
+       <value name="FMT_16_16_16_16_FLOAT" value="32"/>
+       <value name="FMT_32" value="33"/>
+       <value name="FMT_32_32" value="34"/>
+       <value name="FMT_32_32_32_32" value="35"/>
+       <value name="FMT_32_FLOAT" value="36"/>
+       <value name="FMT_32_32_FLOAT" value="37"/>
+       <value name="FMT_32_32_32_32_FLOAT" value="38"/>
+       <value name="FMT_ATI_TC_RGB" value="39"/>
+       <value name="FMT_ATI_TC_RGBA" value="40"/>
+       <value name="FMT_ATI_TC_555_565_RGB" value="41"/>
+       <value name="FMT_ATI_TC_555_565_RGBA" value="42"/>
+       <value name="FMT_ATI_TC_RGBA_INTERP" value="43"/>
+       <value name="FMT_ATI_TC_555_565_RGBA_INTERP" value="44"/>
+       <value name="FMT_ETC1_RGBA_INTERP" value="46"/>
+       <value name="FMT_ETC1_RGB" value="47"/>
+       <value name="FMT_ETC1_RGBA" value="48"/>
+       <value name="FMT_DXN" value="49"/>
+       <value name="FMT_2_3_3" value="51"/>
+       <value name="FMT_2_10_10_10_AS_16_16_16_16" value="54"/>
+       <value name="FMT_10_10_10_2_AS_16_16_16_16" value="55"/>
+       <value name="FMT_32_32_32_FLOAT" value="57"/>
+       <value name="FMT_DXT3A" value="58"/>
+       <value name="FMT_DXT5A" value="59"/>
+       <value name="FMT_CTX1" value="60"/>
+</enum>
+
+<enum name="a2xx_sq_ps_vtx_mode">
+       <value name="POSITION_1_VECTOR" value="0"/>
+       <value name="POSITION_2_VECTORS_UNUSED" value="1"/>
+       <value name="POSITION_2_VECTORS_SPRITE" value="2"/>
+       <value name="POSITION_2_VECTORS_EDGE" value="3"/>
+       <value name="POSITION_2_VECTORS_KILL" value="4"/>
+       <value name="POSITION_2_VECTORS_SPRITE_KILL" value="5"/>
+       <value name="POSITION_2_VECTORS_EDGE_KILL" value="6"/>
+       <value name="MULTIPASS" value="7"/>
+</enum>
+
+<enum name="a2xx_sq_sample_cntl">
+       <value name="CENTROIDS_ONLY" value="0"/>
+       <value name="CENTERS_ONLY" value="1"/>
+       <value name="CENTROIDS_AND_CENTERS" value="2"/>
+</enum>
+
+<enum name="a2xx_dx_clip_space">
+       <value name="DXCLIP_OPENGL" value="0"/>
+       <value name="DXCLIP_DIRECTX" value="1"/>
+</enum>
+
+<enum name="a2xx_pa_su_sc_polymode">
+       <value name="POLY_DISABLED" value="0"/>
+       <value name="POLY_DUALMODE" value="1"/>
+</enum>
+
+<enum name="a2xx_rb_edram_mode">
+       <value name="EDRAM_NOP" value="0"/>
+       <value name="COLOR_DEPTH" value="4"/>
+       <value name="DEPTH_ONLY" value="5"/>
+       <value name="EDRAM_COPY" value="6"/>
+</enum>
+
+<enum name="a2xx_pa_sc_pattern_bit_order">
+       <value name="LITTLE" value="0"/>
+       <value name="BIG" value="1"/>
+</enum>
+
+<enum name="a2xx_pa_sc_auto_reset_cntl">
+       <value name="NEVER" value="0"/>
+       <value name="EACH_PRIMITIVE" value="1"/>
+       <value name="EACH_PACKET" value="2"/>
+</enum>
+
+<enum name="a2xx_pa_pixcenter">
+       <value name="PIXCENTER_D3D" value="0"/>
+       <value name="PIXCENTER_OGL" value="1"/>
+</enum>
+
+<enum name="a2xx_pa_roundmode">
+       <value name="TRUNCATE" value="0"/>
+       <value name="ROUND" value="1"/>
+       <value name="ROUNDTOEVEN" value="2"/>
+       <value name="ROUNDTOODD" value="3"/>
+</enum>
+
+<enum name="a2xx_pa_quantmode">
+       <value name="ONE_SIXTEENTH" value="0"/>
+       <value name="ONE_EIGTH" value="1"/>
+       <value name="ONE_QUARTER" value="2"/>
+       <value name="ONE_HALF" value="3"/>
+       <value name="ONE" value="4"/>
+</enum>
+
+<enum name="a2xx_rb_copy_sample_select">
+       <value name="SAMPLE_0" value="0"/>
+       <value name="SAMPLE_1" value="1"/>
+       <value name="SAMPLE_2" value="2"/>
+       <value name="SAMPLE_3" value="3"/>
+       <value name="SAMPLE_01" value="4"/>
+       <value name="SAMPLE_23" value="5"/>
+       <value name="SAMPLE_0123" value="6"/>
+</enum>
+
+<enum name="a2xx_rb_blend_opcode">
+       <value name="BLEND2_DST_PLUS_SRC" value="0"/>
+       <value name="BLEND2_SRC_MINUS_DST" value="1"/>
+       <value name="BLEND2_MIN_DST_SRC" value="2"/>
+       <value name="BLEND2_MAX_DST_SRC" value="3"/>
+       <value name="BLEND2_DST_MINUS_SRC" value="4"/>
+       <value name="BLEND2_DST_PLUS_SRC_BIAS" value="5"/>
+</enum>
+
+<enum name="a2xx_su_perfcnt_select">
+       <value value="0" name="PERF_PAPC_PASX_REQ"/>
+       <value value="2" name="PERF_PAPC_PASX_FIRST_VECTOR"/>
+       <value value="3" name="PERF_PAPC_PASX_SECOND_VECTOR"/>
+       <value value="4" name="PERF_PAPC_PASX_FIRST_DEAD"/>
+       <value value="5" name="PERF_PAPC_PASX_SECOND_DEAD"/>
+       <value value="6" name="PERF_PAPC_PASX_VTX_KILL_DISCARD"/>
+       <value value="7" name="PERF_PAPC_PASX_VTX_NAN_DISCARD"/>
+       <value value="8" name="PERF_PAPC_PA_INPUT_PRIM"/>
+       <value value="9" name="PERF_PAPC_PA_INPUT_NULL_PRIM"/>
+       <value value="10" name="PERF_PAPC_PA_INPUT_EVENT_FLAG"/>
+       <value value="11" name="PERF_PAPC_PA_INPUT_FIRST_PRIM_SLOT"/>
+       <value value="12" name="PERF_PAPC_PA_INPUT_END_OF_PACKET"/>
+       <value value="13" name="PERF_PAPC_CLPR_CULL_PRIM"/>
+       <value value="15" name="PERF_PAPC_CLPR_VV_CULL_PRIM"/>
+       <value value="17" name="PERF_PAPC_CLPR_VTX_KILL_CULL_PRIM"/>
+       <value value="18" name="PERF_PAPC_CLPR_VTX_NAN_CULL_PRIM"/>
+       <value value="19" name="PERF_PAPC_CLPR_CULL_TO_NULL_PRIM"/>
+       <value value="21" name="PERF_PAPC_CLPR_VV_CLIP_PRIM"/>
+       <value value="23" name="PERF_PAPC_CLPR_POINT_CLIP_CANDIDATE"/>
+       <value value="24" name="PERF_PAPC_CLPR_CLIP_PLANE_CNT_1"/>
+       <value value="25" name="PERF_PAPC_CLPR_CLIP_PLANE_CNT_2"/>
+       <value value="26" name="PERF_PAPC_CLPR_CLIP_PLANE_CNT_3"/>
+       <value value="27" name="PERF_PAPC_CLPR_CLIP_PLANE_CNT_4"/>
+       <value value="28" name="PERF_PAPC_CLPR_CLIP_PLANE_CNT_5"/>
+       <value value="29" name="PERF_PAPC_CLPR_CLIP_PLANE_CNT_6"/>
+       <value value="30" name="PERF_PAPC_CLPR_CLIP_PLANE_NEAR"/>
+       <value value="31" name="PERF_PAPC_CLPR_CLIP_PLANE_FAR"/>
+       <value value="32" name="PERF_PAPC_CLPR_CLIP_PLANE_LEFT"/>
+       <value value="33" name="PERF_PAPC_CLPR_CLIP_PLANE_RIGHT"/>
+       <value value="34" name="PERF_PAPC_CLPR_CLIP_PLANE_TOP"/>
+       <value value="35" name="PERF_PAPC_CLPR_CLIP_PLANE_BOTTOM"/>
+       <value value="36" name="PERF_PAPC_CLSM_NULL_PRIM"/>
+       <value value="37" name="PERF_PAPC_CLSM_TOTALLY_VISIBLE_PRIM"/>
+       <value value="38" name="PERF_PAPC_CLSM_CLIP_PRIM"/>
+       <value value="39" name="PERF_PAPC_CLSM_CULL_TO_NULL_PRIM"/>
+       <value value="40" name="PERF_PAPC_CLSM_OUT_PRIM_CNT_1"/>
+       <value value="41" name="PERF_PAPC_CLSM_OUT_PRIM_CNT_2"/>
+       <value value="42" name="PERF_PAPC_CLSM_OUT_PRIM_CNT_3"/>
+       <value value="43" name="PERF_PAPC_CLSM_OUT_PRIM_CNT_4"/>
+       <value value="44" name="PERF_PAPC_CLSM_OUT_PRIM_CNT_5"/>
+       <value value="45" name="PERF_PAPC_CLSM_OUT_PRIM_CNT_6_7"/>
+       <value value="46" name="PERF_PAPC_CLSM_NON_TRIVIAL_CULL"/>
+       <value value="47" name="PERF_PAPC_SU_INPUT_PRIM"/>
+       <value value="48" name="PERF_PAPC_SU_INPUT_CLIP_PRIM"/>
+       <value value="49" name="PERF_PAPC_SU_INPUT_NULL_PRIM"/>
+       <value value="50" name="PERF_PAPC_SU_ZERO_AREA_CULL_PRIM"/>
+       <value value="51" name="PERF_PAPC_SU_BACK_FACE_CULL_PRIM"/>
+       <value value="52" name="PERF_PAPC_SU_FRONT_FACE_CULL_PRIM"/>
+       <value value="53" name="PERF_PAPC_SU_POLYMODE_FACE_CULL"/>
+       <value value="54" name="PERF_PAPC_SU_POLYMODE_BACK_CULL"/>
+       <value value="55" name="PERF_PAPC_SU_POLYMODE_FRONT_CULL"/>
+       <value value="56" name="PERF_PAPC_SU_POLYMODE_INVALID_FILL"/>
+       <value value="57" name="PERF_PAPC_SU_OUTPUT_PRIM"/>
+       <value value="58" name="PERF_PAPC_SU_OUTPUT_CLIP_PRIM"/>
+       <value value="59" name="PERF_PAPC_SU_OUTPUT_NULL_PRIM"/>
+       <value value="60" name="PERF_PAPC_SU_OUTPUT_EVENT_FLAG"/>
+       <value value="61" name="PERF_PAPC_SU_OUTPUT_FIRST_PRIM_SLOT"/>
+       <value value="62" name="PERF_PAPC_SU_OUTPUT_END_OF_PACKET"/>
+       <value value="63" name="PERF_PAPC_SU_OUTPUT_POLYMODE_FACE"/>
+       <value value="64" name="PERF_PAPC_SU_OUTPUT_POLYMODE_BACK"/>
+       <value value="65" name="PERF_PAPC_SU_OUTPUT_POLYMODE_FRONT"/>
+       <value value="66" name="PERF_PAPC_SU_OUT_CLIP_POLYMODE_FACE"/>
+       <value value="67" name="PERF_PAPC_SU_OUT_CLIP_POLYMODE_BACK"/>
+       <value value="68" name="PERF_PAPC_SU_OUT_CLIP_POLYMODE_FRONT"/>
+       <value value="69" name="PERF_PAPC_PASX_REQ_IDLE"/>
+       <value value="70" name="PERF_PAPC_PASX_REQ_BUSY"/>
+       <value value="71" name="PERF_PAPC_PASX_REQ_STALLED"/>
+       <value value="72" name="PERF_PAPC_PASX_REC_IDLE"/>
+       <value value="73" name="PERF_PAPC_PASX_REC_BUSY"/>
+       <value value="74" name="PERF_PAPC_PASX_REC_STARVED_SX"/>
+       <value value="75" name="PERF_PAPC_PASX_REC_STALLED"/>
+       <value value="76" name="PERF_PAPC_PASX_REC_STALLED_POS_MEM"/>
+       <value value="77" name="PERF_PAPC_PASX_REC_STALLED_CCGSM_IN"/>
+       <value value="78" name="PERF_PAPC_CCGSM_IDLE"/>
+       <value value="79" name="PERF_PAPC_CCGSM_BUSY"/>
+       <value value="80" name="PERF_PAPC_CCGSM_STALLED"/>
+       <value value="81" name="PERF_PAPC_CLPRIM_IDLE"/>
+       <value value="82" name="PERF_PAPC_CLPRIM_BUSY"/>
+       <value value="83" name="PERF_PAPC_CLPRIM_STALLED"/>
+       <value value="84" name="PERF_PAPC_CLPRIM_STARVED_CCGSM"/>
+       <value value="85" name="PERF_PAPC_CLIPSM_IDLE"/>
+       <value value="86" name="PERF_PAPC_CLIPSM_BUSY"/>
+       <value value="87" name="PERF_PAPC_CLIPSM_WAIT_CLIP_VERT_ENGH"/>
+       <value value="88" name="PERF_PAPC_CLIPSM_WAIT_HIGH_PRI_SEQ"/>
+       <value value="89" name="PERF_PAPC_CLIPSM_WAIT_CLIPGA"/>
+       <value value="90" name="PERF_PAPC_CLIPSM_WAIT_AVAIL_VTE_CLIP"/>
+       <value value="91" name="PERF_PAPC_CLIPSM_WAIT_CLIP_OUTSM"/>
+       <value value="92" name="PERF_PAPC_CLIPGA_IDLE"/>
+       <value value="93" name="PERF_PAPC_CLIPGA_BUSY"/>
+       <value value="94" name="PERF_PAPC_CLIPGA_STARVED_VTE_CLIP"/>
+       <value value="95" name="PERF_PAPC_CLIPGA_STALLED"/>
+       <value value="96" name="PERF_PAPC_CLIP_IDLE"/>
+       <value value="97" name="PERF_PAPC_CLIP_BUSY"/>
+       <value value="98" name="PERF_PAPC_SU_IDLE"/>
+       <value value="99" name="PERF_PAPC_SU_BUSY"/>
+       <value value="100" name="PERF_PAPC_SU_STARVED_CLIP"/>
+       <value value="101" name="PERF_PAPC_SU_STALLED_SC"/>
+       <value value="102" name="PERF_PAPC_SU_FACENESS_CULL"/>
+</enum>
+
+<enum name="a2xx_sc_perfcnt_select">
+       <value value="0" name="SC_SR_WINDOW_VALID"/>
+       <value value="1" name="SC_CW_WINDOW_VALID"/>
+       <value value="2" name="SC_QM_WINDOW_VALID"/>
+       <value value="3" name="SC_FW_WINDOW_VALID"/>
+       <value value="4" name="SC_EZ_WINDOW_VALID"/>
+       <value value="5" name="SC_IT_WINDOW_VALID"/>
+       <value value="6" name="SC_STARVED_BY_PA"/>
+       <value value="7" name="SC_STALLED_BY_RB_TILE"/>
+       <value value="8" name="SC_STALLED_BY_RB_SAMP"/>
+       <value value="9" name="SC_STARVED_BY_RB_EZ"/>
+       <value value="10" name="SC_STALLED_BY_SAMPLE_FF"/>
+       <value value="11" name="SC_STALLED_BY_SQ"/>
+       <value value="12" name="SC_STALLED_BY_SP"/>
+       <value value="13" name="SC_TOTAL_NO_PRIMS"/>
+       <value value="14" name="SC_NON_EMPTY_PRIMS"/>
+       <value value="15" name="SC_NO_TILES_PASSING_QM"/>
+       <value value="16" name="SC_NO_PIXELS_PRE_EZ"/>
+       <value value="17" name="SC_NO_PIXELS_POST_EZ"/>
+</enum>
+
+<enum name="a2xx_vgt_perfcount_select">
+       <value value="0" name="VGT_SQ_EVENT_WINDOW_ACTIVE"/>
+       <value value="1" name="VGT_SQ_SEND"/>
+       <value value="2" name="VGT_SQ_STALLED"/>
+       <value value="3" name="VGT_SQ_STARVED_BUSY"/>
+       <value value="4" name="VGT_SQ_STARVED_IDLE"/>
+       <value value="5" name="VGT_SQ_STATIC"/>
+       <value value="6" name="VGT_PA_EVENT_WINDOW_ACTIVE"/>
+       <value value="7" name="VGT_PA_CLIP_V_SEND"/>
+       <value value="8" name="VGT_PA_CLIP_V_STALLED"/>
+       <value value="9" name="VGT_PA_CLIP_V_STARVED_BUSY"/>
+       <value value="10" name="VGT_PA_CLIP_V_STARVED_IDLE"/>
+       <value value="11" name="VGT_PA_CLIP_V_STATIC"/>
+       <value value="12" name="VGT_PA_CLIP_P_SEND"/>
+       <value value="13" name="VGT_PA_CLIP_P_STALLED"/>
+       <value value="14" name="VGT_PA_CLIP_P_STARVED_BUSY"/>
+       <value value="15" name="VGT_PA_CLIP_P_STARVED_IDLE"/>
+       <value value="16" name="VGT_PA_CLIP_P_STATIC"/>
+       <value value="17" name="VGT_PA_CLIP_S_SEND"/>
+       <value value="18" name="VGT_PA_CLIP_S_STALLED"/>
+       <value value="19" name="VGT_PA_CLIP_S_STARVED_BUSY"/>
+       <value value="20" name="VGT_PA_CLIP_S_STARVED_IDLE"/>
+       <value value="21" name="VGT_PA_CLIP_S_STATIC"/>
+       <value value="22" name="RBIU_FIFOS_EVENT_WINDOW_ACTIVE"/>
+       <value value="23" name="RBIU_IMMED_DATA_FIFO_STARVED"/>
+       <value value="24" name="RBIU_IMMED_DATA_FIFO_STALLED"/>
+       <value value="25" name="RBIU_DMA_REQUEST_FIFO_STARVED"/>
+       <value value="26" name="RBIU_DMA_REQUEST_FIFO_STALLED"/>
+       <value value="27" name="RBIU_DRAW_INITIATOR_FIFO_STARVED"/>
+       <value value="28" name="RBIU_DRAW_INITIATOR_FIFO_STALLED"/>
+       <value value="29" name="BIN_PRIM_NEAR_CULL"/>
+       <value value="30" name="BIN_PRIM_ZERO_CULL"/>
+       <value value="31" name="BIN_PRIM_FAR_CULL"/>
+       <value value="32" name="BIN_PRIM_BIN_CULL"/>
+       <value value="33" name="BIN_PRIM_FACE_CULL"/>
+       <value value="34" name="SPARE34"/>
+       <value value="35" name="SPARE35"/>
+       <value value="36" name="SPARE36"/>
+       <value value="37" name="SPARE37"/>
+       <value value="38" name="SPARE38"/>
+       <value value="39" name="SPARE39"/>
+       <value value="40" name="TE_SU_IN_VALID"/>
+       <value value="41" name="TE_SU_IN_READ"/>
+       <value value="42" name="TE_SU_IN_PRIM"/>
+       <value value="43" name="TE_SU_IN_EOP"/>
+       <value value="44" name="TE_SU_IN_NULL_PRIM"/>
+       <value value="45" name="TE_WK_IN_VALID"/>
+       <value value="46" name="TE_WK_IN_READ"/>
+       <value value="47" name="TE_OUT_PRIM_VALID"/>
+       <value value="48" name="TE_OUT_PRIM_READ"/>
+</enum>
+
+<enum name="a2xx_tcr_perfcount_select">
+       <value value="0" name="DGMMPD_IPMUX0_STALL"/>
+       <value value="4" name="DGMMPD_IPMUX_ALL_STALL"/>
+       <value value="5" name="OPMUX0_L2_WRITES"/>
+</enum>
+
+<enum name="a2xx_tp_perfcount_select">
+       <value value="0" name="POINT_QUADS"/>
+       <value value="1" name="BILIN_QUADS"/>
+       <value value="2" name="ANISO_QUADS"/>
+       <value value="3" name="MIP_QUADS"/>
+       <value value="4" name="VOL_QUADS"/>
+       <value value="5" name="MIP_VOL_QUADS"/>
+       <value value="6" name="MIP_ANISO_QUADS"/>
+       <value value="7" name="VOL_ANISO_QUADS"/>
+       <value value="8" name="ANISO_2_1_QUADS"/>
+       <value value="9" name="ANISO_4_1_QUADS"/>
+       <value value="10" name="ANISO_6_1_QUADS"/>
+       <value value="11" name="ANISO_8_1_QUADS"/>
+       <value value="12" name="ANISO_10_1_QUADS"/>
+       <value value="13" name="ANISO_12_1_QUADS"/>
+       <value value="14" name="ANISO_14_1_QUADS"/>
+       <value value="15" name="ANISO_16_1_QUADS"/>
+       <value value="16" name="MIP_VOL_ANISO_QUADS"/>
+       <value value="17" name="ALIGN_2_QUADS"/>
+       <value value="18" name="ALIGN_4_QUADS"/>
+       <value value="19" name="PIX_0_QUAD"/>
+       <value value="20" name="PIX_1_QUAD"/>
+       <value value="21" name="PIX_2_QUAD"/>
+       <value value="22" name="PIX_3_QUAD"/>
+       <value value="23" name="PIX_4_QUAD"/>
+       <value value="24" name="TP_MIPMAP_LOD0"/>
+       <value value="25" name="TP_MIPMAP_LOD1"/>
+       <value value="26" name="TP_MIPMAP_LOD2"/>
+       <value value="27" name="TP_MIPMAP_LOD3"/>
+       <value value="28" name="TP_MIPMAP_LOD4"/>
+       <value value="29" name="TP_MIPMAP_LOD5"/>
+       <value value="30" name="TP_MIPMAP_LOD6"/>
+       <value value="31" name="TP_MIPMAP_LOD7"/>
+       <value value="32" name="TP_MIPMAP_LOD8"/>
+       <value value="33" name="TP_MIPMAP_LOD9"/>
+       <value value="34" name="TP_MIPMAP_LOD10"/>
+       <value value="35" name="TP_MIPMAP_LOD11"/>
+       <value value="36" name="TP_MIPMAP_LOD12"/>
+       <value value="37" name="TP_MIPMAP_LOD13"/>
+       <value value="38" name="TP_MIPMAP_LOD14"/>
+</enum>
+
+<enum name="a2xx_tcm_perfcount_select">
+       <value value="0" name="QUAD0_RD_LAT_FIFO_EMPTY"/>
+       <value value="3" name="QUAD0_RD_LAT_FIFO_4TH_FULL"/>
+       <value value="4" name="QUAD0_RD_LAT_FIFO_HALF_FULL"/>
+       <value value="5" name="QUAD0_RD_LAT_FIFO_FULL"/>
+       <value value="6" name="QUAD0_RD_LAT_FIFO_LT_4TH_FULL"/>
+       <value value="28" name="READ_STARVED_QUAD0"/>
+       <value value="32" name="READ_STARVED"/>
+       <value value="33" name="READ_STALLED_QUAD0"/>
+       <value value="37" name="READ_STALLED"/>
+       <value value="38" name="VALID_READ_QUAD0"/>
+       <value value="42" name="TC_TP_STARVED_QUAD0"/>
+       <value value="46" name="TC_TP_STARVED"/>
+</enum>
+
+<enum name="a2xx_tcf_perfcount_select">
+       <value value="0" name="VALID_CYCLES"/>
+       <value value="1" name="SINGLE_PHASES"/>
+       <value value="2" name="ANISO_PHASES"/>
+       <value value="3" name="MIP_PHASES"/>
+       <value value="4" name="VOL_PHASES"/>
+       <value value="5" name="MIP_VOL_PHASES"/>
+       <value value="6" name="MIP_ANISO_PHASES"/>
+       <value value="7" name="VOL_ANISO_PHASES"/>
+       <value value="8" name="ANISO_2_1_PHASES"/>
+       <value value="9" name="ANISO_4_1_PHASES"/>
+       <value value="10" name="ANISO_6_1_PHASES"/>
+       <value value="11" name="ANISO_8_1_PHASES"/>
+       <value value="12" name="ANISO_10_1_PHASES"/>
+       <value value="13" name="ANISO_12_1_PHASES"/>
+       <value value="14" name="ANISO_14_1_PHASES"/>
+       <value value="15" name="ANISO_16_1_PHASES"/>
+       <value value="16" name="MIP_VOL_ANISO_PHASES"/>
+       <value value="17" name="ALIGN_2_PHASES"/>
+       <value value="18" name="ALIGN_4_PHASES"/>
+       <value value="19" name="TPC_BUSY"/>
+       <value value="20" name="TPC_STALLED"/>
+       <value value="21" name="TPC_STARVED"/>
+       <value value="22" name="TPC_WORKING"/>
+       <value value="23" name="TPC_WALKER_BUSY"/>
+       <value value="24" name="TPC_WALKER_STALLED"/>
+       <value value="25" name="TPC_WALKER_WORKING"/>
+       <value value="26" name="TPC_ALIGNER_BUSY"/>
+       <value value="27" name="TPC_ALIGNER_STALLED"/>
+       <value value="28" name="TPC_ALIGNER_STALLED_BY_BLEND"/>
+       <value value="29" name="TPC_ALIGNER_STALLED_BY_CACHE"/>
+       <value value="30" name="TPC_ALIGNER_WORKING"/>
+       <value value="31" name="TPC_BLEND_BUSY"/>
+       <value value="32" name="TPC_BLEND_SYNC"/>
+       <value value="33" name="TPC_BLEND_STARVED"/>
+       <value value="34" name="TPC_BLEND_WORKING"/>
+       <value value="35" name="OPCODE_0x00"/>
+       <value value="36" name="OPCODE_0x01"/>
+       <value value="37" name="OPCODE_0x04"/>
+       <value value="38" name="OPCODE_0x10"/>
+       <value value="39" name="OPCODE_0x11"/>
+       <value value="40" name="OPCODE_0x12"/>
+       <value value="41" name="OPCODE_0x13"/>
+       <value value="42" name="OPCODE_0x18"/>
+       <value value="43" name="OPCODE_0x19"/>
+       <value value="44" name="OPCODE_0x1A"/>
+       <value value="45" name="OPCODE_OTHER"/>
+       <value value="56" name="IN_FIFO_0_EMPTY"/>
+       <value value="57" name="IN_FIFO_0_LT_HALF_FULL"/>
+       <value value="58" name="IN_FIFO_0_HALF_FULL"/>
+       <value value="59" name="IN_FIFO_0_FULL"/>
+       <value value="72" name="IN_FIFO_TPC_EMPTY"/>
+       <value value="73" name="IN_FIFO_TPC_LT_HALF_FULL"/>
+       <value value="74" name="IN_FIFO_TPC_HALF_FULL"/>
+       <value value="75" name="IN_FIFO_TPC_FULL"/>
+       <value value="76" name="TPC_TC_XFC"/>
+       <value value="77" name="TPC_TC_STATE"/>
+       <value value="78" name="TC_STALL"/>
+       <value value="79" name="QUAD0_TAPS"/>
+       <value value="83" name="QUADS"/>
+       <value value="84" name="TCA_SYNC_STALL"/>
+       <value value="85" name="TAG_STALL"/>
+       <value value="88" name="TCB_SYNC_STALL"/>
+       <value value="89" name="TCA_VALID"/>
+       <value value="90" name="PROBES_VALID"/>
+       <value value="91" name="MISS_STALL"/>
+       <value value="92" name="FETCH_FIFO_STALL"/>
+       <value value="93" name="TCO_STALL"/>
+       <value value="94" name="ANY_STALL"/>
+       <value value="95" name="TAG_MISSES"/>
+       <value value="96" name="TAG_HITS"/>
+       <value value="97" name="SUB_TAG_MISSES"/>
+       <value value="98" name="SET0_INVALIDATES"/>
+       <value value="99" name="SET1_INVALIDATES"/>
+       <value value="100" name="SET2_INVALIDATES"/>
+       <value value="101" name="SET3_INVALIDATES"/>
+       <value value="102" name="SET0_TAG_MISSES"/>
+       <value value="103" name="SET1_TAG_MISSES"/>
+       <value value="104" name="SET2_TAG_MISSES"/>
+       <value value="105" name="SET3_TAG_MISSES"/>
+       <value value="106" name="SET0_TAG_HITS"/>
+       <value value="107" name="SET1_TAG_HITS"/>
+       <value value="108" name="SET2_TAG_HITS"/>
+       <value value="109" name="SET3_TAG_HITS"/>
+       <value value="110" name="SET0_SUB_TAG_MISSES"/>
+       <value value="111" name="SET1_SUB_TAG_MISSES"/>
+       <value value="112" name="SET2_SUB_TAG_MISSES"/>
+       <value value="113" name="SET3_SUB_TAG_MISSES"/>
+       <value value="114" name="SET0_EVICT1"/>
+       <value value="115" name="SET0_EVICT2"/>
+       <value value="116" name="SET0_EVICT3"/>
+       <value value="117" name="SET0_EVICT4"/>
+       <value value="118" name="SET0_EVICT5"/>
+       <value value="119" name="SET0_EVICT6"/>
+       <value value="120" name="SET0_EVICT7"/>
+       <value value="121" name="SET0_EVICT8"/>
+       <value value="130" name="SET1_EVICT1"/>
+       <value value="131" name="SET1_EVICT2"/>
+       <value value="132" name="SET1_EVICT3"/>
+       <value value="133" name="SET1_EVICT4"/>
+       <value value="134" name="SET1_EVICT5"/>
+       <value value="135" name="SET1_EVICT6"/>
+       <value value="136" name="SET1_EVICT7"/>
+       <value value="137" name="SET1_EVICT8"/>
+       <value value="146" name="SET2_EVICT1"/>
+       <value value="147" name="SET2_EVICT2"/>
+       <value value="148" name="SET2_EVICT3"/>
+       <value value="149" name="SET2_EVICT4"/>
+       <value value="150" name="SET2_EVICT5"/>
+       <value value="151" name="SET2_EVICT6"/>
+       <value value="152" name="SET2_EVICT7"/>
+       <value value="153" name="SET2_EVICT8"/>
+       <value value="162" name="SET3_EVICT1"/>
+       <value value="163" name="SET3_EVICT2"/>
+       <value value="164" name="SET3_EVICT3"/>
+       <value value="165" name="SET3_EVICT4"/>
+       <value value="166" name="SET3_EVICT5"/>
+       <value value="167" name="SET3_EVICT6"/>
+       <value value="168" name="SET3_EVICT7"/>
+       <value value="169" name="SET3_EVICT8"/>
+       <value value="178" name="FF_EMPTY"/>
+       <value value="179" name="FF_LT_HALF_FULL"/>
+       <value value="180" name="FF_HALF_FULL"/>
+       <value value="181" name="FF_FULL"/>
+       <value value="182" name="FF_XFC"/>
+       <value value="183" name="FF_STALLED"/>
+       <value value="184" name="FG_MASKS"/>
+       <value value="185" name="FG_LEFT_MASKS"/>
+       <value value="186" name="FG_LEFT_MASK_STALLED"/>
+       <value value="187" name="FG_LEFT_NOT_DONE_STALL"/>
+       <value value="188" name="FG_LEFT_FG_STALL"/>
+       <value value="189" name="FG_LEFT_SECTORS"/>
+       <value value="195" name="FG0_REQUESTS"/>
+       <value value="196" name="FG0_STALLED"/>
+       <value value="199" name="MEM_REQ512"/>
+       <value value="200" name="MEM_REQ_SENT"/>
+       <value value="202" name="MEM_LOCAL_READ_REQ"/>
+       <value value="203" name="TC0_MH_STALLED"/>
+</enum>
+
+<enum name="a2xx_sq_perfcnt_select">
+       <value value="0" name="SQ_PIXEL_VECTORS_SUB"/>
+       <value value="1" name="SQ_VERTEX_VECTORS_SUB"/>
+       <value value="2" name="SQ_ALU0_ACTIVE_VTX_SIMD0"/>
+       <value value="3" name="SQ_ALU1_ACTIVE_VTX_SIMD0"/>
+       <value value="4" name="SQ_ALU0_ACTIVE_PIX_SIMD0"/>
+       <value value="5" name="SQ_ALU1_ACTIVE_PIX_SIMD0"/>
+       <value value="6" name="SQ_ALU0_ACTIVE_VTX_SIMD1"/>
+       <value value="7" name="SQ_ALU1_ACTIVE_VTX_SIMD1"/>
+       <value value="8" name="SQ_ALU0_ACTIVE_PIX_SIMD1"/>
+       <value value="9" name="SQ_ALU1_ACTIVE_PIX_SIMD1"/>
+       <value value="10" name="SQ_EXPORT_CYCLES"/>
+       <value value="11" name="SQ_ALU_CST_WRITTEN"/>
+       <value value="12" name="SQ_TEX_CST_WRITTEN"/>
+       <value value="13" name="SQ_ALU_CST_STALL"/>
+       <value value="14" name="SQ_ALU_TEX_STALL"/>
+       <value value="15" name="SQ_INST_WRITTEN"/>
+       <value value="16" name="SQ_BOOLEAN_WRITTEN"/>
+       <value value="17" name="SQ_LOOPS_WRITTEN"/>
+       <value value="18" name="SQ_PIXEL_SWAP_IN"/>
+       <value value="19" name="SQ_PIXEL_SWAP_OUT"/>
+       <value value="20" name="SQ_VERTEX_SWAP_IN"/>
+       <value value="21" name="SQ_VERTEX_SWAP_OUT"/>
+       <value value="22" name="SQ_ALU_VTX_INST_ISSUED"/>
+       <value value="23" name="SQ_TEX_VTX_INST_ISSUED"/>
+       <value value="24" name="SQ_VC_VTX_INST_ISSUED"/>
+       <value value="25" name="SQ_CF_VTX_INST_ISSUED"/>
+       <value value="26" name="SQ_ALU_PIX_INST_ISSUED"/>
+       <value value="27" name="SQ_TEX_PIX_INST_ISSUED"/>
+       <value value="28" name="SQ_VC_PIX_INST_ISSUED"/>
+       <value value="29" name="SQ_CF_PIX_INST_ISSUED"/>
+       <value value="30" name="SQ_ALU0_FIFO_EMPTY_SIMD0"/>
+       <value value="31" name="SQ_ALU1_FIFO_EMPTY_SIMD0"/>
+       <value value="32" name="SQ_ALU0_FIFO_EMPTY_SIMD1"/>
+       <value value="33" name="SQ_ALU1_FIFO_EMPTY_SIMD1"/>
+       <value value="34" name="SQ_ALU_NOPS"/>
+       <value value="35" name="SQ_PRED_SKIP"/>
+       <value value="36" name="SQ_SYNC_ALU_STALL_SIMD0_VTX"/>
+       <value value="37" name="SQ_SYNC_ALU_STALL_SIMD1_VTX"/>
+       <value value="38" name="SQ_SYNC_TEX_STALL_VTX"/>
+       <value value="39" name="SQ_SYNC_VC_STALL_VTX"/>
+       <value value="40" name="SQ_CONSTANTS_USED_SIMD0"/>
+       <value value="41" name="SQ_CONSTANTS_SENT_SP_SIMD0"/>
+       <value value="42" name="SQ_GPR_STALL_VTX"/>
+       <value value="43" name="SQ_GPR_STALL_PIX"/>
+       <value value="44" name="SQ_VTX_RS_STALL"/>
+       <value value="45" name="SQ_PIX_RS_STALL"/>
+       <value value="46" name="SQ_SX_PC_FULL"/>
+       <value value="47" name="SQ_SX_EXP_BUFF_FULL"/>
+       <value value="48" name="SQ_SX_POS_BUFF_FULL"/>
+       <value value="49" name="SQ_INTERP_QUADS"/>
+       <value value="50" name="SQ_INTERP_ACTIVE"/>
+       <value value="51" name="SQ_IN_PIXEL_STALL"/>
+       <value value="52" name="SQ_IN_VTX_STALL"/>
+       <value value="53" name="SQ_VTX_CNT"/>
+       <value value="54" name="SQ_VTX_VECTOR2"/>
+       <value value="55" name="SQ_VTX_VECTOR3"/>
+       <value value="56" name="SQ_VTX_VECTOR4"/>
+       <value value="57" name="SQ_PIXEL_VECTOR1"/>
+       <value value="58" name="SQ_PIXEL_VECTOR23"/>
+       <value value="59" name="SQ_PIXEL_VECTOR4"/>
+       <value value="60" name="SQ_CONSTANTS_USED_SIMD1"/>
+       <value value="61" name="SQ_CONSTANTS_SENT_SP_SIMD1"/>
+       <value value="62" name="SQ_SX_MEM_EXP_FULL"/>
+       <value value="63" name="SQ_ALU0_ACTIVE_VTX_SIMD2"/>
+       <value value="64" name="SQ_ALU1_ACTIVE_VTX_SIMD2"/>
+       <value value="65" name="SQ_ALU0_ACTIVE_PIX_SIMD2"/>
+       <value value="66" name="SQ_ALU1_ACTIVE_PIX_SIMD2"/>
+       <value value="67" name="SQ_ALU0_ACTIVE_VTX_SIMD3"/>
+       <value value="68" name="SQ_PERFCOUNT_VTX_QUAL_TP_DONE"/>
+       <value value="69" name="SQ_ALU0_ACTIVE_PIX_SIMD3"/>
+       <value value="70" name="SQ_PERFCOUNT_PIX_QUAL_TP_DONE"/>
+       <value value="71" name="SQ_ALU0_FIFO_EMPTY_SIMD2"/>
+       <value value="72" name="SQ_ALU1_FIFO_EMPTY_SIMD2"/>
+       <value value="73" name="SQ_ALU0_FIFO_EMPTY_SIMD3"/>
+       <value value="74" name="SQ_ALU1_FIFO_EMPTY_SIMD3"/>
+       <value value="75" name="SQ_SYNC_ALU_STALL_SIMD2_VTX"/>
+       <value value="76" name="SQ_PERFCOUNT_VTX_POP_THREAD"/>
+       <value value="77" name="SQ_SYNC_ALU_STALL_SIMD0_PIX"/>
+       <value value="78" name="SQ_SYNC_ALU_STALL_SIMD1_PIX"/>
+       <value value="79" name="SQ_SYNC_ALU_STALL_SIMD2_PIX"/>
+       <value value="80" name="SQ_PERFCOUNT_PIX_POP_THREAD"/>
+       <value value="81" name="SQ_SYNC_TEX_STALL_PIX"/>
+       <value value="82" name="SQ_SYNC_VC_STALL_PIX"/>
+       <value value="83" name="SQ_CONSTANTS_USED_SIMD2"/>
+       <value value="84" name="SQ_CONSTANTS_SENT_SP_SIMD2"/>
+       <value value="85" name="SQ_PERFCOUNT_VTX_DEALLOC_ACK"/>
+       <value value="86" name="SQ_PERFCOUNT_PIX_DEALLOC_ACK"/>
+       <value value="87" name="SQ_ALU0_FIFO_FULL_SIMD0"/>
+       <value value="88" name="SQ_ALU1_FIFO_FULL_SIMD0"/>
+       <value value="89" name="SQ_ALU0_FIFO_FULL_SIMD1"/>
+       <value value="90" name="SQ_ALU1_FIFO_FULL_SIMD1"/>
+       <value value="91" name="SQ_ALU0_FIFO_FULL_SIMD2"/>
+       <value value="92" name="SQ_ALU1_FIFO_FULL_SIMD2"/>
+       <value value="93" name="SQ_ALU0_FIFO_FULL_SIMD3"/>
+       <value value="94" name="SQ_ALU1_FIFO_FULL_SIMD3"/>
+       <value value="95" name="VC_PERF_STATIC"/>
+       <value value="96" name="VC_PERF_STALLED"/>
+       <value value="97" name="VC_PERF_STARVED"/>
+       <value value="98" name="VC_PERF_SEND"/>
+       <value value="99" name="VC_PERF_ACTUAL_STARVED"/>
+       <value value="100" name="PIXEL_THREAD_0_ACTIVE"/>
+       <value value="101" name="VERTEX_THREAD_0_ACTIVE"/>
+       <value value="102" name="PIXEL_THREAD_0_NUMBER"/>
+       <value value="103" name="VERTEX_THREAD_0_NUMBER"/>
+       <value value="104" name="VERTEX_EVENT_NUMBER"/>
+       <value value="105" name="PIXEL_EVENT_NUMBER"/>
+       <value value="106" name="PTRBUFF_EF_PUSH"/>
+       <value value="107" name="PTRBUFF_EF_POP_EVENT"/>
+       <value value="108" name="PTRBUFF_EF_POP_NEW_VTX"/>
+       <value value="109" name="PTRBUFF_EF_POP_DEALLOC"/>
+       <value value="110" name="PTRBUFF_EF_POP_PVECTOR"/>
+       <value value="111" name="PTRBUFF_EF_POP_PVECTOR_X"/>
+       <value value="112" name="PTRBUFF_EF_POP_PVECTOR_VNZ"/>
+       <value value="113" name="PTRBUFF_PB_DEALLOC"/>
+       <value value="114" name="PTRBUFF_PI_STATE_PPB_POP"/>
+       <value value="115" name="PTRBUFF_PI_RTR"/>
+       <value value="116" name="PTRBUFF_PI_READ_EN"/>
+       <value value="117" name="PTRBUFF_PI_BUFF_SWAP"/>
+       <value value="118" name="PTRBUFF_SQ_FREE_BUFF"/>
+       <value value="119" name="PTRBUFF_SQ_DEC"/>
+       <value value="120" name="PTRBUFF_SC_VALID_CNTL_EVENT"/>
+       <value value="121" name="PTRBUFF_SC_VALID_IJ_XFER"/>
+       <value value="122" name="PTRBUFF_SC_NEW_VECTOR_1_Q"/>
+       <value value="123" name="PTRBUFF_QUAL_NEW_VECTOR"/>
+       <value value="124" name="PTRBUFF_QUAL_EVENT"/>
+       <value value="125" name="PTRBUFF_END_BUFFER"/>
+       <value value="126" name="PTRBUFF_FILL_QUAD"/>
+       <value value="127" name="VERTS_WRITTEN_SPI"/>
+       <value value="128" name="TP_FETCH_INSTR_EXEC"/>
+       <value value="129" name="TP_FETCH_INSTR_REQ"/>
+       <value value="130" name="TP_DATA_RETURN"/>
+       <value value="131" name="SPI_WRITE_CYCLES_SP"/>
+       <value value="132" name="SPI_WRITES_SP"/>
+       <value value="133" name="SP_ALU_INSTR_EXEC"/>
+       <value value="134" name="SP_CONST_ADDR_TO_SQ"/>
+       <value value="135" name="SP_PRED_KILLS_TO_SQ"/>
+       <value value="136" name="SP_EXPORT_CYCLES_TO_SX"/>
+       <value value="137" name="SP_EXPORTS_TO_SX"/>
+       <value value="138" name="SQ_CYCLES_ELAPSED"/>
+       <value value="139" name="SQ_TCFS_OPT_ALLOC_EXEC"/>
+       <value value="140" name="SQ_TCFS_NO_OPT_ALLOC"/>
+       <value value="141" name="SQ_ALU0_NO_OPT_ALLOC"/>
+       <value value="142" name="SQ_ALU1_NO_OPT_ALLOC"/>
+       <value value="143" name="SQ_TCFS_ARB_XFC_CNT"/>
+       <value value="144" name="SQ_ALU0_ARB_XFC_CNT"/>
+       <value value="145" name="SQ_ALU1_ARB_XFC_CNT"/>
+       <value value="146" name="SQ_TCFS_CFS_UPDATE_CNT"/>
+       <value value="147" name="SQ_ALU0_CFS_UPDATE_CNT"/>
+       <value value="148" name="SQ_ALU1_CFS_UPDATE_CNT"/>
+       <value value="149" name="SQ_VTX_PUSH_THREAD_CNT"/>
+       <value value="150" name="SQ_VTX_POP_THREAD_CNT"/>
+       <value value="151" name="SQ_PIX_PUSH_THREAD_CNT"/>
+       <value value="152" name="SQ_PIX_POP_THREAD_CNT"/>
+       <value value="153" name="SQ_PIX_TOTAL"/>
+       <value value="154" name="SQ_PIX_KILLED"/>
+</enum>
+
+<enum name="a2xx_sx_perfcnt_select">
+       <value value="0" name="SX_EXPORT_VECTORS"/>
+       <value value="1" name="SX_DUMMY_QUADS"/>
+       <value value="2" name="SX_ALPHA_FAIL"/>
+       <value value="3" name="SX_RB_QUAD_BUSY"/>
+       <value value="4" name="SX_RB_COLOR_BUSY"/>
+       <value value="5" name="SX_RB_QUAD_STALL"/>
+       <value value="6" name="SX_RB_COLOR_STALL"/>
+</enum>
+
+<enum name="a2xx_rbbm_perfcount1_sel">
+       <value value="0" name="RBBM1_COUNT"/>
+       <value value="1" name="RBBM1_NRT_BUSY"/>
+       <value value="2" name="RBBM1_RB_BUSY"/>
+       <value value="3" name="RBBM1_SQ_CNTX0_BUSY"/>
+       <value value="4" name="RBBM1_SQ_CNTX17_BUSY"/>
+       <value value="5" name="RBBM1_VGT_BUSY"/>
+       <value value="6" name="RBBM1_VGT_NODMA_BUSY"/>
+       <value value="7" name="RBBM1_PA_BUSY"/>
+       <value value="8" name="RBBM1_SC_CNTX_BUSY"/>
+       <value value="9" name="RBBM1_TPC_BUSY"/>
+       <value value="10" name="RBBM1_TC_BUSY"/>
+       <value value="11" name="RBBM1_SX_BUSY"/>
+       <value value="12" name="RBBM1_CP_COHER_BUSY"/>
+       <value value="13" name="RBBM1_CP_NRT_BUSY"/>
+       <value value="14" name="RBBM1_GFX_IDLE_STALL"/>
+       <value value="15" name="RBBM1_INTERRUPT"/>
+</enum>
+
+<enum name="a2xx_cp_perfcount_sel">
+       <value value="0" name="ALWAYS_COUNT"/>
+       <value value="1" name="TRANS_FIFO_FULL"/>
+       <value value="2" name="TRANS_FIFO_AF"/>
+       <value value="3" name="RCIU_PFPTRANS_WAIT"/>
+       <value value="6" name="RCIU_NRTTRANS_WAIT"/>
+       <value value="8" name="CSF_NRT_READ_WAIT"/>
+       <value value="9" name="CSF_I1_FIFO_FULL"/>
+       <value value="10" name="CSF_I2_FIFO_FULL"/>
+       <value value="11" name="CSF_ST_FIFO_FULL"/>
+       <value value="13" name="CSF_RING_ROQ_FULL"/>
+       <value value="14" name="CSF_I1_ROQ_FULL"/>
+       <value value="15" name="CSF_I2_ROQ_FULL"/>
+       <value value="16" name="CSF_ST_ROQ_FULL"/>
+       <value value="18" name="MIU_TAG_MEM_FULL"/>
+       <value value="19" name="MIU_WRITECLEAN"/>
+       <value value="22" name="MIU_NRT_WRITE_STALLED"/>
+       <value value="23" name="MIU_NRT_READ_STALLED"/>
+       <value value="24" name="ME_WRITE_CONFIRM_FIFO_FULL"/>
+       <value value="25" name="ME_VS_DEALLOC_FIFO_FULL"/>
+       <value value="26" name="ME_PS_DEALLOC_FIFO_FULL"/>
+       <value value="27" name="ME_REGS_VS_EVENT_FIFO_FULL"/>
+       <value value="28" name="ME_REGS_PS_EVENT_FIFO_FULL"/>
+       <value value="29" name="ME_REGS_CF_EVENT_FIFO_FULL"/>
+       <value value="30" name="ME_MICRO_RB_STARVED"/>
+       <value value="31" name="ME_MICRO_I1_STARVED"/>
+       <value value="32" name="ME_MICRO_I2_STARVED"/>
+       <value value="33" name="ME_MICRO_ST_STARVED"/>
+       <value value="40" name="RCIU_RBBM_DWORD_SENT"/>
+       <value value="41" name="ME_BUSY_CLOCKS"/>
+       <value value="42" name="ME_WAIT_CONTEXT_AVAIL"/>
+       <value value="43" name="PFP_TYPE0_PACKET"/>
+       <value value="44" name="PFP_TYPE3_PACKET"/>
+       <value value="45" name="CSF_RB_WPTR_NEQ_RPTR"/>
+       <value value="46" name="CSF_I1_SIZE_NEQ_ZERO"/>
+       <value value="47" name="CSF_I2_SIZE_NEQ_ZERO"/>
+       <value value="48" name="CSF_RBI1I2_FETCHING"/>
+</enum>
+
+<enum name="a2xx_rb_perfcnt_select">
+       <value value="0" name="RBPERF_CNTX_BUSY"/>
+       <value value="1" name="RBPERF_CNTX_BUSY_MAX"/>
+       <value value="2" name="RBPERF_SX_QUAD_STARVED"/>
+       <value value="3" name="RBPERF_SX_QUAD_STARVED_MAX"/>
+       <value value="4" name="RBPERF_GA_GC_CH0_SYS_REQ"/>
+       <value value="5" name="RBPERF_GA_GC_CH0_SYS_REQ_MAX"/>
+       <value value="6" name="RBPERF_GA_GC_CH1_SYS_REQ"/>
+       <value value="7" name="RBPERF_GA_GC_CH1_SYS_REQ_MAX"/>
+       <value value="8" name="RBPERF_MH_STARVED"/>
+       <value value="9" name="RBPERF_MH_STARVED_MAX"/>
+       <value value="10" name="RBPERF_AZ_BC_COLOR_BUSY"/>
+       <value value="11" name="RBPERF_AZ_BC_COLOR_BUSY_MAX"/>
+       <value value="12" name="RBPERF_AZ_BC_Z_BUSY"/>
+       <value value="13" name="RBPERF_AZ_BC_Z_BUSY_MAX"/>
+       <value value="14" name="RBPERF_RB_SC_TILE_RTR_N"/>
+       <value value="15" name="RBPERF_RB_SC_TILE_RTR_N_MAX"/>
+       <value value="16" name="RBPERF_RB_SC_SAMP_RTR_N"/>
+       <value value="17" name="RBPERF_RB_SC_SAMP_RTR_N_MAX"/>
+       <value value="18" name="RBPERF_RB_SX_QUAD_RTR_N"/>
+       <value value="19" name="RBPERF_RB_SX_QUAD_RTR_N_MAX"/>
+       <value value="20" name="RBPERF_RB_SX_COLOR_RTR_N"/>
+       <value value="21" name="RBPERF_RB_SX_COLOR_RTR_N_MAX"/>
+       <value value="22" name="RBPERF_RB_SC_SAMP_LZ_BUSY"/>
+       <value value="23" name="RBPERF_RB_SC_SAMP_LZ_BUSY_MAX"/>
+       <value value="24" name="RBPERF_ZXP_STALL"/>
+       <value value="25" name="RBPERF_ZXP_STALL_MAX"/>
+       <value value="26" name="RBPERF_EVENT_PENDING"/>
+       <value value="27" name="RBPERF_EVENT_PENDING_MAX"/>
+       <value value="28" name="RBPERF_RB_MH_VALID"/>
+       <value value="29" name="RBPERF_RB_MH_VALID_MAX"/>
+       <value value="30" name="RBPERF_SX_RB_QUAD_SEND"/>
+       <value value="31" name="RBPERF_SX_RB_COLOR_SEND"/>
+       <value value="32" name="RBPERF_SC_RB_TILE_SEND"/>
+       <value value="33" name="RBPERF_SC_RB_SAMPLE_SEND"/>
+       <value value="34" name="RBPERF_SX_RB_MEM_EXPORT"/>
+       <value value="35" name="RBPERF_SX_RB_QUAD_EVENT"/>
+       <value value="36" name="RBPERF_SC_RB_TILE_EVENT_FILTERED"/>
+       <value value="37" name="RBPERF_SC_RB_TILE_EVENT_ALL"/>
+       <value value="38" name="RBPERF_RB_SC_EZ_SEND"/>
+       <value value="39" name="RBPERF_RB_SX_INDEX_SEND"/>
+       <value value="40" name="RBPERF_GMEM_INTFO_RD"/>
+       <value value="41" name="RBPERF_GMEM_INTF1_RD"/>
+       <value value="42" name="RBPERF_GMEM_INTFO_WR"/>
+       <value value="43" name="RBPERF_GMEM_INTF1_WR"/>
+       <value value="44" name="RBPERF_RB_CP_CONTEXT_DONE"/>
+       <value value="45" name="RBPERF_RB_CP_CACHE_FLUSH"/>
+       <value value="46" name="RBPERF_ZPASS_DONE"/>
+       <value value="47" name="RBPERF_ZCMD_VALID"/>
+       <value value="48" name="RBPERF_CCMD_VALID"/>
+       <value value="49" name="RBPERF_ACCUM_GRANT"/>
+       <value value="50" name="RBPERF_ACCUM_C0_GRANT"/>
+       <value value="51" name="RBPERF_ACCUM_C1_GRANT"/>
+       <value value="52" name="RBPERF_ACCUM_FULL_BE_WR"/>
+       <value value="53" name="RBPERF_ACCUM_REQUEST_NO_GRANT"/>
+       <value value="54" name="RBPERF_ACCUM_TIMEOUT_PULSE"/>
+       <value value="55" name="RBPERF_ACCUM_LIN_TIMEOUT_PULSE"/>
+       <value value="56" name="RBPERF_ACCUM_CAM_HIT_FLUSHING"/>
+</enum>
+
+<enum name="a2xx_mh_perfcnt_select">
+       <value value="0" name="CP_R0_REQUESTS"/>
+       <value value="1" name="CP_R1_REQUESTS"/>
+       <value value="2" name="CP_R2_REQUESTS"/>
+       <value value="3" name="CP_R3_REQUESTS"/>
+       <value value="4" name="CP_R4_REQUESTS"/>
+       <value value="5" name="CP_TOTAL_READ_REQUESTS"/>
+       <value value="6" name="CP_TOTAL_WRITE_REQUESTS"/>
+       <value value="7" name="CP_TOTAL_REQUESTS"/>
+       <value value="8" name="CP_DATA_BYTES_WRITTEN"/>
+       <value value="9" name="CP_WRITE_CLEAN_RESPONSES"/>
+       <value value="10" name="CP_R0_READ_BURSTS_RECEIVED"/>
+       <value value="11" name="CP_R1_READ_BURSTS_RECEIVED"/>
+       <value value="12" name="CP_R2_READ_BURSTS_RECEIVED"/>
+       <value value="13" name="CP_R3_READ_BURSTS_RECEIVED"/>
+       <value value="14" name="CP_R4_READ_BURSTS_RECEIVED"/>
+       <value value="15" name="CP_TOTAL_READ_BURSTS_RECEIVED"/>
+       <value value="16" name="CP_R0_DATA_BEATS_READ"/>
+       <value value="17" name="CP_R1_DATA_BEATS_READ"/>
+       <value value="18" name="CP_R2_DATA_BEATS_READ"/>
+       <value value="19" name="CP_R3_DATA_BEATS_READ"/>
+       <value value="20" name="CP_R4_DATA_BEATS_READ"/>
+       <value value="21" name="CP_TOTAL_DATA_BEATS_READ"/>
+       <value value="22" name="VGT_R0_REQUESTS"/>
+       <value value="23" name="VGT_R1_REQUESTS"/>
+       <value value="24" name="VGT_TOTAL_REQUESTS"/>
+       <value value="25" name="VGT_R0_READ_BURSTS_RECEIVED"/>
+       <value value="26" name="VGT_R1_READ_BURSTS_RECEIVED"/>
+       <value value="27" name="VGT_TOTAL_READ_BURSTS_RECEIVED"/>
+       <value value="28" name="VGT_R0_DATA_BEATS_READ"/>
+       <value value="29" name="VGT_R1_DATA_BEATS_READ"/>
+       <value value="30" name="VGT_TOTAL_DATA_BEATS_READ"/>
+       <value value="31" name="TC_TOTAL_REQUESTS"/>
+       <value value="32" name="TC_ROQ_REQUESTS"/>
+       <value value="33" name="TC_INFO_SENT"/>
+       <value value="34" name="TC_READ_BURSTS_RECEIVED"/>
+       <value value="35" name="TC_DATA_BEATS_READ"/>
+       <value value="36" name="TCD_BURSTS_READ"/>
+       <value value="37" name="RB_REQUESTS"/>
+       <value value="38" name="RB_DATA_BYTES_WRITTEN"/>
+       <value value="39" name="RB_WRITE_CLEAN_RESPONSES"/>
+       <value value="40" name="AXI_READ_REQUESTS_ID_0"/>
+       <value value="41" name="AXI_READ_REQUESTS_ID_1"/>
+       <value value="42" name="AXI_READ_REQUESTS_ID_2"/>
+       <value value="43" name="AXI_READ_REQUESTS_ID_3"/>
+       <value value="44" name="AXI_READ_REQUESTS_ID_4"/>
+       <value value="45" name="AXI_READ_REQUESTS_ID_5"/>
+       <value value="46" name="AXI_READ_REQUESTS_ID_6"/>
+       <value value="47" name="AXI_READ_REQUESTS_ID_7"/>
+       <value value="48" name="AXI_TOTAL_READ_REQUESTS"/>
+       <value value="49" name="AXI_WRITE_REQUESTS_ID_0"/>
+       <value value="50" name="AXI_WRITE_REQUESTS_ID_1"/>
+       <value value="51" name="AXI_WRITE_REQUESTS_ID_2"/>
+       <value value="52" name="AXI_WRITE_REQUESTS_ID_3"/>
+       <value value="53" name="AXI_WRITE_REQUESTS_ID_4"/>
+       <value value="54" name="AXI_WRITE_REQUESTS_ID_5"/>
+       <value value="55" name="AXI_WRITE_REQUESTS_ID_6"/>
+       <value value="56" name="AXI_WRITE_REQUESTS_ID_7"/>
+       <value value="57" name="AXI_TOTAL_WRITE_REQUESTS"/>
+       <value value="58" name="AXI_TOTAL_REQUESTS_ID_0"/>
+       <value value="59" name="AXI_TOTAL_REQUESTS_ID_1"/>
+       <value value="60" name="AXI_TOTAL_REQUESTS_ID_2"/>
+       <value value="61" name="AXI_TOTAL_REQUESTS_ID_3"/>
+       <value value="62" name="AXI_TOTAL_REQUESTS_ID_4"/>
+       <value value="63" name="AXI_TOTAL_REQUESTS_ID_5"/>
+       <value value="64" name="AXI_TOTAL_REQUESTS_ID_6"/>
+       <value value="65" name="AXI_TOTAL_REQUESTS_ID_7"/>
+       <value value="66" name="AXI_TOTAL_REQUESTS"/>
+       <value value="67" name="AXI_READ_CHANNEL_BURSTS_ID_0"/>
+       <value value="68" name="AXI_READ_CHANNEL_BURSTS_ID_1"/>
+       <value value="69" name="AXI_READ_CHANNEL_BURSTS_ID_2"/>
+       <value value="70" name="AXI_READ_CHANNEL_BURSTS_ID_3"/>
+       <value value="71" name="AXI_READ_CHANNEL_BURSTS_ID_4"/>
+       <value value="72" name="AXI_READ_CHANNEL_BURSTS_ID_5"/>
+       <value value="73" name="AXI_READ_CHANNEL_BURSTS_ID_6"/>
+       <value value="74" name="AXI_READ_CHANNEL_BURSTS_ID_7"/>
+       <value value="75" name="AXI_READ_CHANNEL_TOTAL_BURSTS"/>
+       <value value="76" name="AXI_READ_CHANNEL_DATA_BEATS_READ_ID_0"/>
+       <value value="77" name="AXI_READ_CHANNEL_DATA_BEATS_READ_ID_1"/>
+       <value value="78" name="AXI_READ_CHANNEL_DATA_BEATS_READ_ID_2"/>
+       <value value="79" name="AXI_READ_CHANNEL_DATA_BEATS_READ_ID_3"/>
+       <value value="80" name="AXI_READ_CHANNEL_DATA_BEATS_READ_ID_4"/>
+       <value value="81" name="AXI_READ_CHANNEL_DATA_BEATS_READ_ID_5"/>
+       <value value="82" name="AXI_READ_CHANNEL_DATA_BEATS_READ_ID_6"/>
+       <value value="83" name="AXI_READ_CHANNEL_DATA_BEATS_READ_ID_7"/>
+       <value value="84" name="AXI_READ_CHANNEL_TOTAL_DATA_BEATS_READ"/>
+       <value value="85" name="AXI_WRITE_CHANNEL_BURSTS_ID_0"/>
+       <value value="86" name="AXI_WRITE_CHANNEL_BURSTS_ID_1"/>
+       <value value="87" name="AXI_WRITE_CHANNEL_BURSTS_ID_2"/>
+       <value value="88" name="AXI_WRITE_CHANNEL_BURSTS_ID_3"/>
+       <value value="89" name="AXI_WRITE_CHANNEL_BURSTS_ID_4"/>
+       <value value="90" name="AXI_WRITE_CHANNEL_BURSTS_ID_5"/>
+       <value value="91" name="AXI_WRITE_CHANNEL_BURSTS_ID_6"/>
+       <value value="92" name="AXI_WRITE_CHANNEL_BURSTS_ID_7"/>
+       <value value="93" name="AXI_WRITE_CHANNEL_TOTAL_BURSTS"/>
+       <value value="94" name="AXI_WRITE_CHANNEL_DATA_BYTES_WRITTEN_ID_0"/>
+       <value value="95" name="AXI_WRITE_CHANNEL_DATA_BYTES_WRITTEN_ID_1"/>
+       <value value="96" name="AXI_WRITE_CHANNEL_DATA_BYTES_WRITTEN_ID_2"/>
+       <value value="97" name="AXI_WRITE_CHANNEL_DATA_BYTES_WRITTEN_ID_3"/>
+       <value value="98" name="AXI_WRITE_CHANNEL_DATA_BYTES_WRITTEN_ID_4"/>
+       <value value="99" name="AXI_WRITE_CHANNEL_DATA_BYTES_WRITTEN_ID_5"/>
+       <value value="100" name="AXI_WRITE_CHANNEL_DATA_BYTES_WRITTEN_ID_6"/>
+       <value value="101" name="AXI_WRITE_CHANNEL_DATA_BYTES_WRITTEN_ID_7"/>
+       <value value="102" name="AXI_WRITE_CHANNEL_TOTAL_DATA_BYTES_WRITTEN"/>
+       <value value="103" name="AXI_WRITE_RESPONSE_CHANNEL_RESPONSES_ID_0"/>
+       <value value="104" name="AXI_WRITE_RESPONSE_CHANNEL_RESPONSES_ID_1"/>
+       <value value="105" name="AXI_WRITE_RESPONSE_CHANNEL_RESPONSES_ID_2"/>
+       <value value="106" name="AXI_WRITE_RESPONSE_CHANNEL_RESPONSES_ID_3"/>
+       <value value="107" name="AXI_WRITE_RESPONSE_CHANNEL_RESPONSES_ID_4"/>
+       <value value="108" name="AXI_WRITE_RESPONSE_CHANNEL_RESPONSES_ID_5"/>
+       <value value="109" name="AXI_WRITE_RESPONSE_CHANNEL_RESPONSES_ID_6"/>
+       <value value="110" name="AXI_WRITE_RESPONSE_CHANNEL_RESPONSES_ID_7"/>
+       <value value="111" name="AXI_WRITE_RESPONSE_CHANNEL_TOTAL_RESPONSES"/>
+       <value value="112" name="TOTAL_MMU_MISSES"/>
+       <value value="113" name="MMU_READ_MISSES"/>
+       <value value="114" name="MMU_WRITE_MISSES"/>
+       <value value="115" name="TOTAL_MMU_HITS"/>
+       <value value="116" name="MMU_READ_HITS"/>
+       <value value="117" name="MMU_WRITE_HITS"/>
+       <value value="118" name="SPLIT_MODE_TC_HITS"/>
+       <value value="119" name="SPLIT_MODE_TC_MISSES"/>
+       <value value="120" name="SPLIT_MODE_NON_TC_HITS"/>
+       <value value="121" name="SPLIT_MODE_NON_TC_MISSES"/>
+       <value value="122" name="STALL_AWAITING_TLB_MISS_FETCH"/>
+       <value value="123" name="MMU_TLB_MISS_READ_BURSTS_RECEIVED"/>
+       <value value="124" name="MMU_TLB_MISS_DATA_BEATS_READ"/>
+       <value value="125" name="CP_CYCLES_HELD_OFF"/>
+       <value value="126" name="VGT_CYCLES_HELD_OFF"/>
+       <value value="127" name="TC_CYCLES_HELD_OFF"/>
+       <value value="128" name="TC_ROQ_CYCLES_HELD_OFF"/>
+       <value value="129" name="TC_CYCLES_HELD_OFF_TCD_FULL"/>
+       <value value="130" name="RB_CYCLES_HELD_OFF"/>
+       <value value="131" name="TOTAL_CYCLES_ANY_CLNT_HELD_OFF"/>
+       <value value="132" name="TLB_MISS_CYCLES_HELD_OFF"/>
+       <value value="133" name="AXI_READ_REQUEST_HELD_OFF"/>
+       <value value="134" name="AXI_WRITE_REQUEST_HELD_OFF"/>
+       <value value="135" name="AXI_REQUEST_HELD_OFF"/>
+       <value value="136" name="AXI_REQUEST_HELD_OFF_INFLIGHT_LIMIT"/>
+       <value value="137" name="AXI_WRITE_DATA_HELD_OFF"/>
+       <value value="138" name="CP_SAME_PAGE_BANK_REQUESTS"/>
+       <value value="139" name="VGT_SAME_PAGE_BANK_REQUESTS"/>
+       <value value="140" name="TC_SAME_PAGE_BANK_REQUESTS"/>
+       <value value="141" name="TC_ARB_HOLD_SAME_PAGE_BANK_REQUESTS"/>
+       <value value="142" name="RB_SAME_PAGE_BANK_REQUESTS"/>
+       <value value="143" name="TOTAL_SAME_PAGE_BANK_REQUESTS"/>
+       <value value="144" name="CP_SAME_PAGE_BANK_REQUESTS_KILLED_FAIRNESS_LIMIT"/>
+       <value value="145" name="VGT_SAME_PAGE_BANK_REQUESTS_KILLED_FAIRNESS_LIMIT"/>
+       <value value="146" name="TC_SAME_PAGE_BANK_REQUESTS_KILLED_FAIRNESS_LIMIT"/>
+       <value value="147" name="RB_SAME_PAGE_BANK_REQUESTS_KILLED_FAIRNESS_LIMIT"/>
+       <value value="148" name="TOTAL_SAME_PAGE_BANK_KILLED_FAIRNESS_LIMIT"/>
+       <value value="149" name="TOTAL_MH_READ_REQUESTS"/>
+       <value value="150" name="TOTAL_MH_WRITE_REQUESTS"/>
+       <value value="151" name="TOTAL_MH_REQUESTS"/>
+       <value value="152" name="MH_BUSY"/>
+       <value value="153" name="CP_NTH_ACCESS_SAME_PAGE_BANK_SEQUENCE"/>
+       <value value="154" name="VGT_NTH_ACCESS_SAME_PAGE_BANK_SEQUENCE"/>
+       <value value="155" name="TC_NTH_ACCESS_SAME_PAGE_BANK_SEQUENCE"/>
+       <value value="156" name="RB_NTH_ACCESS_SAME_PAGE_BANK_SEQUENCE"/>
+       <value value="157" name="TC_ROQ_N_VALID_ENTRIES"/>
+       <value value="158" name="ARQ_N_ENTRIES"/>
+       <value value="159" name="WDB_N_ENTRIES"/>
+       <value value="160" name="MH_READ_LATENCY_OUTST_REQ_SUM"/>
+       <value value="161" name="MC_READ_LATENCY_OUTST_REQ_SUM"/>
+       <value value="162" name="MC_TOTAL_READ_REQUESTS"/>
+       <value value="163" name="ELAPSED_CYCLES_MH_GATED_CLK"/>
+       <value value="164" name="ELAPSED_CLK_CYCLES"/>
+       <value value="165" name="CP_W_16B_REQUESTS"/>
+       <value value="166" name="CP_W_32B_REQUESTS"/>
+       <value value="167" name="TC_16B_REQUESTS"/>
+       <value value="168" name="TC_32B_REQUESTS"/>
+       <value value="169" name="PA_REQUESTS"/>
+       <value value="170" name="PA_DATA_BYTES_WRITTEN"/>
+       <value value="171" name="PA_WRITE_CLEAN_RESPONSES"/>
+       <value value="172" name="PA_CYCLES_HELD_OFF"/>
+       <value value="173" name="AXI_READ_REQUEST_DATA_BEATS_ID_0"/>
+       <value value="174" name="AXI_READ_REQUEST_DATA_BEATS_ID_1"/>
+       <value value="175" name="AXI_READ_REQUEST_DATA_BEATS_ID_2"/>
+       <value value="176" name="AXI_READ_REQUEST_DATA_BEATS_ID_3"/>
+       <value value="177" name="AXI_READ_REQUEST_DATA_BEATS_ID_4"/>
+       <value value="178" name="AXI_READ_REQUEST_DATA_BEATS_ID_5"/>
+       <value value="179" name="AXI_READ_REQUEST_DATA_BEATS_ID_6"/>
+       <value value="180" name="AXI_READ_REQUEST_DATA_BEATS_ID_7"/>
+       <value value="181" name="AXI_TOTAL_READ_REQUEST_DATA_BEATS"/>
+</enum>
+
+<domain name="A2XX" width="32">
+
+       <bitset name="a2xx_vgt_current_bin_id_min_max" inline="yes">
+               <bitfield name="COLUMN" low="0" high="2" type="uint"/>
+               <bitfield name="ROW" low="3" high="5" type="uint"/>
+               <bitfield name="GUARD_BAND_MASK" low="6" high="8" type="uint"/>
+       </bitset>
+
+       <reg32 offset="0x0001" name="RBBM_PATCH_RELEASE"/>
+       <reg32 offset="0x003b" name="RBBM_CNTL"/>
+       <reg32 offset="0x003c" name="RBBM_SOFT_RESET"/>
+       <reg32 offset="0x00c0" name="CP_PFP_UCODE_ADDR"/>
+       <reg32 offset="0x00c1" name="CP_PFP_UCODE_DATA"/>
+
+       <enum name="adreno_mmu_clnt_beh">
+               <value name="BEH_NEVR" value="0"/>
+               <value name="BEH_TRAN_RNG" value="1"/>
+               <value name="BEH_TRAN_FLT" value="2"/>
+       </enum>
+
+       <!--
+               Note: these seem applicable only for a2xx devices with gpummu?  At
+               any rate, MH_MMU_CONFIG shows up in places in a3xx firmware where
+               it doesn't make sense, so I think offset 0x40 must be a different
+               register on a3xx.. so moving this back into A2XX domain:
+        -->
+       <reg32 offset="0x0040" name="MH_MMU_CONFIG">
+               <bitfield name="MMU_ENABLE" pos="0" type="boolean"/>
+               <bitfield name="SPLIT_MODE_ENABLE" pos="1" type="boolean"/>
+               <bitfield name="RB_W_CLNT_BEHAVIOR" low="4" high="5" type="adreno_mmu_clnt_beh"/>
+               <bitfield name="CP_W_CLNT_BEHAVIOR" low="6" high="7" type="adreno_mmu_clnt_beh"/>
+               <bitfield name="CP_R0_CLNT_BEHAVIOR" low="8" high="9" type="adreno_mmu_clnt_beh"/>
+               <bitfield name="CP_R1_CLNT_BEHAVIOR" low="10" high="11" type="adreno_mmu_clnt_beh"/>
+               <bitfield name="CP_R2_CLNT_BEHAVIOR" low="12" high="13" type="adreno_mmu_clnt_beh"/>
+               <bitfield name="CP_R3_CLNT_BEHAVIOR" low="14" high="15" type="adreno_mmu_clnt_beh"/>
+               <bitfield name="CP_R4_CLNT_BEHAVIOR" low="16" high="17" type="adreno_mmu_clnt_beh"/>
+               <bitfield name="VGT_R0_CLNT_BEHAVIOR" low="18" high="19" type="adreno_mmu_clnt_beh"/>
+               <bitfield name="VGT_R1_CLNT_BEHAVIOR" low="20" high="21" type="adreno_mmu_clnt_beh"/>
+               <bitfield name="TC_R_CLNT_BEHAVIOR" low="22" high="23" type="adreno_mmu_clnt_beh"/>
+               <bitfield name="PA_W_CLNT_BEHAVIOR" low="24" high="25" type="adreno_mmu_clnt_beh"/>
+       </reg32>
+       <reg32 offset="0x0041" name="MH_MMU_VA_RANGE">
+               <bitfield name="NUM_64KB_REGIONS" low="0" high="11" type="uint"/>
+               <bitfield name="VA_BASE" low="12" high="31" type="uint"/>
+       </reg32>
+       <reg32 offset="0x0042" name="MH_MMU_PT_BASE"/>
+       <reg32 offset="0x0043" name="MH_MMU_PAGE_FAULT"/>
+       <reg32 offset="0x0044" name="MH_MMU_TRAN_ERROR"/>
+       <reg32 offset="0x0045" name="MH_MMU_INVALIDATE">
+               <bitfield name="INVALIDATE_ALL" pos="0" type="boolean"/>
+               <bitfield name="INVALIDATE_TC" pos="1" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x0046" name="MH_MMU_MPU_BASE"/>
+       <reg32 offset="0x0047" name="MH_MMU_MPU_END"/>
+
+       <reg32 offset="0x0394" name="NQWAIT_UNTIL"/>
+       <reg32 offset="0x0395" name="RBBM_PERFCOUNTER1_SELECT"/>
+       <reg32 offset="0x0397" name="RBBM_PERFCOUNTER1_LO"/>
+       <reg32 offset="0x0398" name="RBBM_PERFCOUNTER1_HI"/>
+       <reg32 offset="0x039b" name="RBBM_DEBUG"/>
+       <reg32 offset="0x039c" name="RBBM_PM_OVERRIDE1">
+               <bitfield name="RBBM_AHBCLK_PM_OVERRIDE" pos="0" type="boolean"/>
+               <bitfield name="SC_REG_SCLK_PM_OVERRIDE" pos="1" type="boolean"/>
+               <bitfield name="SC_SCLK_PM_OVERRIDE" pos="2" type="boolean"/>
+               <bitfield name="SP_TOP_SCLK_PM_OVERRIDE" pos="3" type="boolean"/>
+               <bitfield name="SP_V0_SCLK_PM_OVERRIDE" pos="4" type="boolean"/>
+               <bitfield name="SQ_REG_SCLK_PM_OVERRIDE" pos="5" type="boolean"/>
+               <bitfield name="SQ_REG_FIFOS_SCLK_PM_OVERRIDE" pos="6" type="boolean"/>
+               <bitfield name="SQ_CONST_MEM_SCLK_PM_OVERRIDE" pos="7" type="boolean"/>
+               <bitfield name="SQ_SQ_SCLK_PM_OVERRIDE" pos="8" type="boolean"/>
+               <bitfield name="SX_SCLK_PM_OVERRIDE" pos="9" type="boolean"/>
+               <bitfield name="SX_REG_SCLK_PM_OVERRIDE" pos="10" type="boolean"/>
+               <bitfield name="TCM_TCO_SCLK_PM_OVERRIDE" pos="11" type="boolean"/>
+               <bitfield name="TCM_TCM_SCLK_PM_OVERRIDE" pos="12" type="boolean"/>
+               <bitfield name="TCM_TCD_SCLK_PM_OVERRIDE" pos="13" type="boolean"/>
+               <bitfield name="TCM_REG_SCLK_PM_OVERRIDE" pos="14" type="boolean"/>
+               <bitfield name="TPC_TPC_SCLK_PM_OVERRIDE" pos="15" type="boolean"/>
+               <bitfield name="TPC_REG_SCLK_PM_OVERRIDE" pos="16" type="boolean"/>
+               <bitfield name="TCF_TCA_SCLK_PM_OVERRIDE" pos="17" type="boolean"/>
+               <bitfield name="TCF_TCB_SCLK_PM_OVERRIDE" pos="18" type="boolean"/>
+               <bitfield name="TCF_TCB_READ_SCLK_PM_OVERRIDE" pos="19" type="boolean"/>
+               <bitfield name="TP_TP_SCLK_PM_OVERRIDE" pos="20" type="boolean"/>
+               <bitfield name="TP_REG_SCLK_PM_OVERRIDE" pos="21" type="boolean"/>
+               <bitfield name="CP_G_SCLK_PM_OVERRIDE" pos="22" type="boolean"/>
+               <bitfield name="CP_REG_SCLK_PM_OVERRIDE" pos="23" type="boolean"/>
+               <bitfield name="CP_G_REG_SCLK_PM_OVERRIDE" pos="24" type="boolean"/>
+               <bitfield name="SPI_SCLK_PM_OVERRIDE" pos="25" type="boolean"/>
+               <bitfield name="RB_REG_SCLK_PM_OVERRIDE" pos="26" type="boolean"/>
+               <bitfield name="RB_SCLK_PM_OVERRIDE" pos="27" type="boolean"/>
+               <bitfield name="MH_MH_SCLK_PM_OVERRIDE" pos="28" type="boolean"/>
+               <bitfield name="MH_REG_SCLK_PM_OVERRIDE" pos="29" type="boolean"/>
+               <bitfield name="MH_MMU_SCLK_PM_OVERRIDE" pos="30" type="boolean"/>
+               <bitfield name="MH_TCROQ_SCLK_PM_OVERRIDE" pos="31" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x039d" name="RBBM_PM_OVERRIDE2"/>
+       <reg32 offset="0x03a0" name="RBBM_DEBUG_OUT"/>
+       <reg32 offset="0x03a1" name="RBBM_DEBUG_CNTL"/>
+       <reg32 offset="0x03b3" name="RBBM_READ_ERROR"/>
+       <reg32 offset="0x03b4" name="RBBM_INT_CNTL">
+               <bitfield name="RDERR_INT_MASK" pos="0" type="boolean"/>
+               <bitfield name="DISPLAY_UPDATE_INT_MASK" pos="1" type="boolean"/>
+               <bitfield name="GUI_IDLE_INT_MASK" pos="19" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x03b5" name="RBBM_INT_STATUS"/>
+       <reg32 offset="0x03b6" name="RBBM_INT_ACK"/>
+       <reg32 offset="0x03b7" name="MASTER_INT_SIGNAL">
+               <bitfield name="MH_INT_STAT" pos="5" type="boolean"/>
+               <bitfield name="SQ_INT_STAT" pos="26" type="boolean"/>
+               <bitfield name="CP_INT_STAT" pos="30" type="boolean"/>
+               <bitfield name="RBBM_INT_STAT" pos="31" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x03f9" name="RBBM_PERIPHID1"/>
+       <reg32 offset="0x03fa" name="RBBM_PERIPHID2"/>
+       <reg32 offset="0x0444" name="CP_PERFMON_CNTL"/>
+       <reg32 offset="0x0445" name="CP_PERFCOUNTER_SELECT"/>
+       <reg32 offset="0x0446" name="CP_PERFCOUNTER_LO"/>
+       <reg32 offset="0x0447" name="CP_PERFCOUNTER_HI"/>
+       <reg32 offset="0x05d0" name="RBBM_STATUS">
+               <bitfield name="CMDFIFO_AVAIL" low="0" high="4" type="uint"/>
+               <bitfield name="TC_BUSY" pos="5" type="boolean"/>
+               <bitfield name="HIRQ_PENDING" pos="8" type="boolean"/>
+               <bitfield name="CPRQ_PENDING" pos="9" type="boolean"/>
+               <bitfield name="CFRQ_PENDING" pos="10" type="boolean"/>
+               <bitfield name="PFRQ_PENDING" pos="11" type="boolean"/>
+               <bitfield name="VGT_BUSY_NO_DMA" pos="12" type="boolean"/>
+               <bitfield name="RBBM_WU_BUSY" pos="14" type="boolean"/>
+               <bitfield name="CP_NRT_BUSY" pos="16" type="boolean"/>
+               <bitfield name="MH_BUSY" pos="18" type="boolean"/>
+               <bitfield name="MH_COHERENCY_BUSY" pos="19" type="boolean"/>
+               <bitfield name="SX_BUSY" pos="21" type="boolean"/>
+               <bitfield name="TPC_BUSY" pos="22" type="boolean"/>
+               <bitfield name="SC_CNTX_BUSY" pos="24" type="boolean"/>
+               <bitfield name="PA_BUSY" pos="25" type="boolean"/>
+               <bitfield name="VGT_BUSY" pos="26" type="boolean"/>
+               <bitfield name="SQ_CNTX17_BUSY" pos="27" type="boolean"/>
+               <bitfield name="SQ_CNTX0_BUSY" pos="28" type="boolean"/>
+               <bitfield name="RB_CNTX_BUSY" pos="30" type="boolean"/>
+               <bitfield name="GUI_ACTIVE" pos="31" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x0a40" name="MH_ARBITER_CONFIG">
+               <bitfield name="SAME_PAGE_LIMIT" low="0" high="5" type="uint"/>
+               <bitfield name="SAME_PAGE_GRANULARITY" pos="6" type="boolean"/>
+               <bitfield name="L1_ARB_ENABLE" pos="7" type="boolean"/>
+               <bitfield name="L1_ARB_HOLD_ENABLE" pos="8" type="boolean"/>
+               <bitfield name="L2_ARB_CONTROL" pos="9" type="boolean"/>
+               <bitfield name="PAGE_SIZE" low="10" high="12" type="uint"/>
+               <bitfield name="TC_REORDER_ENABLE" pos="13" type="boolean"/>
+               <bitfield name="TC_ARB_HOLD_ENABLE" pos="14" type="boolean"/>
+               <bitfield name="IN_FLIGHT_LIMIT_ENABLE" pos="15" type="boolean"/>
+               <bitfield name="IN_FLIGHT_LIMIT" low="16" high="21" type="uint"/>
+               <bitfield name="CP_CLNT_ENABLE" pos="22" type="boolean"/>
+               <bitfield name="VGT_CLNT_ENABLE" pos="23" type="boolean"/>
+               <bitfield name="TC_CLNT_ENABLE" pos="24" type="boolean"/>
+               <bitfield name="RB_CLNT_ENABLE" pos="25" type="boolean"/>
+               <bitfield name="PA_CLNT_ENABLE" pos="26" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x0a42" name="MH_INTERRUPT_MASK">
+               <bitfield name="AXI_READ_ERROR" pos="0" type="boolean"/>
+               <bitfield name="AXI_WRITE_ERROR" pos="1" type="boolean"/>
+               <bitfield name="MMU_PAGE_FAULT" pos="2" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x0a43" name="MH_INTERRUPT_STATUS"/>
+       <reg32 offset="0x0a44" name="MH_INTERRUPT_CLEAR"/>
+       <reg32 offset="0x0a54" name="MH_CLNT_INTF_CTRL_CONFIG1"/>
+       <reg32 offset="0x0a55" name="MH_CLNT_INTF_CTRL_CONFIG2"/>
+       <reg32 offset="0x0c01" name="A220_VSC_BIN_SIZE">
+               <bitfield name="WIDTH" low="0" high="4" shr="5" type="uint"/>
+               <bitfield name="HEIGHT" low="5" high="9" shr="5" type="uint"/>
+       </reg32>
+       <array offset="0x0c06" name="VSC_PIPE" stride="3" length="8">
+               <reg32 offset="0x0" name="CONFIG"/>
+               <reg32 offset="0x1" name="DATA_ADDRESS"/>
+               <reg32 offset="0x2" name="DATA_LENGTH"/>
+       </array>
+       <reg32 offset="0x0c38" name="PC_DEBUG_CNTL"/>
+       <reg32 offset="0x0c39" name="PC_DEBUG_DATA"/>
+       <reg32 offset="0x0c44" name="PA_SC_VIZ_QUERY_STATUS"/>
+       <reg32 offset="0x0c80" name="GRAS_DEBUG_CNTL"/>
+       <reg32 offset="0x0c80" name="PA_SU_DEBUG_CNTL"/>
+       <reg32 offset="0x0c81" name="GRAS_DEBUG_DATA"/>
+       <reg32 offset="0x0c81" name="PA_SU_DEBUG_DATA"/>
+       <reg32 offset="0x0c86" name="PA_SU_FACE_DATA">
+               <bitfield name="BASE_ADDR" low="5" high="31" type="uint"/>
+       </reg32>
+       <reg32 offset="0x0d00" name="SQ_GPR_MANAGEMENT">
+               <bitfield name="REG_DYNAMIC" pos="0" type="boolean"/>
+               <bitfield name="REG_SIZE_PIX" low="4" high="11" type="uint"/>
+               <bitfield name="REG_SIZE_VTX" low="12" high="19" type="uint"/>
+       </reg32>
+       <reg32 offset="0x0d01" name="SQ_FLOW_CONTROL"/>
+       <reg32 offset="0x0d02" name="SQ_INST_STORE_MANAGMENT">
+               <bitfield name="INST_BASE_PIX" low="0" high="11" type="uint"/>
+               <bitfield name="INST_BASE_VTX" low="16" high="27" type="uint"/>
+       </reg32>
+       <reg32 offset="0x0d05" name="SQ_DEBUG_MISC"/>
+       <reg32 offset="0x0d34" name="SQ_INT_CNTL"/>
+       <reg32 offset="0x0d35" name="SQ_INT_STATUS"/>
+       <reg32 offset="0x0d36" name="SQ_INT_ACK"/>
+       <reg32 offset="0x0dae" name="SQ_DEBUG_INPUT_FSM"/>
+       <reg32 offset="0x0daf" name="SQ_DEBUG_CONST_MGR_FSM"/>
+       <reg32 offset="0x0db0" name="SQ_DEBUG_TP_FSM"/>
+       <reg32 offset="0x0db1" name="SQ_DEBUG_FSM_ALU_0"/>
+       <reg32 offset="0x0db2" name="SQ_DEBUG_FSM_ALU_1"/>
+       <reg32 offset="0x0db3" name="SQ_DEBUG_EXP_ALLOC"/>
+       <reg32 offset="0x0db4" name="SQ_DEBUG_PTR_BUFF"/>
+       <reg32 offset="0x0db5" name="SQ_DEBUG_GPR_VTX"/>
+       <reg32 offset="0x0db6" name="SQ_DEBUG_GPR_PIX"/>
+       <reg32 offset="0x0db7" name="SQ_DEBUG_TB_STATUS_SEL"/>
+       <reg32 offset="0x0db8" name="SQ_DEBUG_VTX_TB_0"/>
+       <reg32 offset="0x0db9" name="SQ_DEBUG_VTX_TB_1"/>
+       <reg32 offset="0x0dba" name="SQ_DEBUG_VTX_TB_STATUS_REG"/>
+       <reg32 offset="0x0dbb" name="SQ_DEBUG_VTX_TB_STATE_MEM"/>
+       <reg32 offset="0x0dbc" name="SQ_DEBUG_PIX_TB_0"/>
+       <reg32 offset="0x0dbd" name="SQ_DEBUG_PIX_TB_STATUS_REG_0"/>
+       <reg32 offset="0x0dbe" name="SQ_DEBUG_PIX_TB_STATUS_REG_1"/>
+       <reg32 offset="0x0dbf" name="SQ_DEBUG_PIX_TB_STATUS_REG_2"/>
+       <reg32 offset="0x0dc0" name="SQ_DEBUG_PIX_TB_STATUS_REG_3"/>
+       <reg32 offset="0x0dc1" name="SQ_DEBUG_PIX_TB_STATE_MEM"/>
+       <reg32 offset="0x0e00" name="TC_CNTL_STATUS">
+               <bitfield name="L2_INVALIDATE" pos="0" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x0e1e" name="TP0_CHICKEN"/>
+       <reg32 offset="0x0f01" name="RB_BC_CONTROL">
+               <bitfield name="ACCUM_LINEAR_MODE_ENABLE" pos="0" type="boolean"/>
+               <bitfield name="ACCUM_TIMEOUT_SELECT" low="1" high="2" type="uint"/>
+               <bitfield name="DISABLE_EDRAM_CAM" pos="3" type="boolean"/>
+               <bitfield name="DISABLE_EZ_FAST_CONTEXT_SWITCH" pos="4" type="boolean"/>
+               <bitfield name="DISABLE_EZ_NULL_ZCMD_DROP" pos="5" type="boolean"/>
+               <bitfield name="DISABLE_LZ_NULL_ZCMD_DROP" pos="6" type="boolean"/>
+               <bitfield name="ENABLE_AZ_THROTTLE" pos="7" type="boolean"/>
+               <bitfield name="AZ_THROTTLE_COUNT" low="8" high="12" type="uint"/>
+               <bitfield name="ENABLE_CRC_UPDATE" pos="14" type="boolean"/>
+               <bitfield name="CRC_MODE" pos="15" type="boolean"/>
+               <bitfield name="DISABLE_SAMPLE_COUNTERS" pos="16" type="boolean"/>
+               <bitfield name="DISABLE_ACCUM" pos="17" type="boolean"/>
+               <bitfield name="ACCUM_ALLOC_MASK" low="18" high="21" type="uint"/>
+               <bitfield name="LINEAR_PERFORMANCE_ENABLE" pos="22" type="boolean"/>
+               <bitfield name="ACCUM_DATA_FIFO_LIMIT" low="23" high="26" type="uint"/>
+               <bitfield name="MEM_EXPORT_TIMEOUT_SELECT" low="27" high="28" type="uint"/>
+               <bitfield name="MEM_EXPORT_LINEAR_MODE_ENABLE" pos="29" type="boolean"/>
+               <bitfield name="CRC_SYSTEM" pos="30" type="boolean"/>
+               <bitfield name="RESERVED6" pos="31" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x0f02" name="RB_EDRAM_INFO"/>
+       <reg32 offset="0x0f26" name="RB_DEBUG_CNTL"/>
+       <reg32 offset="0x0f27" name="RB_DEBUG_DATA"/>
+       <reg32 offset="0x2000" name="RB_SURFACE_INFO">
+               <bitfield name="SURFACE_PITCH" low="0" high="13" type="uint"/>
+               <bitfield name="MSAA_SAMPLES" low="14" high="15" type="uint"/>
+       </reg32>
+       <reg32 offset="0x2001" name="RB_COLOR_INFO">
+               <bitfield name="FORMAT" low="0" high="3" type="a2xx_colorformatx"/>
+               <bitfield name="ROUND_MODE" low="4" high="5" type="uint"/>
+               <bitfield name="LINEAR" pos="6" type="boolean"/>
+               <bitfield name="ENDIAN" low="7" high="8" type="uint"/>
+               <bitfield name="SWAP" low="9" high="10" type="uint"/>
+               <bitfield name="BASE" low="12" high="31" shr="12"/>
+       </reg32>
+       <reg32 offset="0x2002" name="RB_DEPTH_INFO">
+               <bitfield name="DEPTH_FORMAT" pos="0" type="adreno_rb_depth_format"/>
+               <bitfield name="DEPTH_BASE" low="12" high="31" type="uint" shr="12"/>
+       </reg32>
+       <reg32 offset="0x2005" name="A225_RB_COLOR_INFO3"/>
+       <reg32 offset="0x2006" name="COHER_DEST_BASE_0"/>
+       <reg32 offset="0x200e" name="PA_SC_SCREEN_SCISSOR_TL" type="adreno_reg_xy"/>
+       <reg32 offset="0x200f" name="PA_SC_SCREEN_SCISSOR_BR" type="adreno_reg_xy"/>
+       <reg32 offset="0x2080" name="PA_SC_WINDOW_OFFSET">
+               <bitfield name="X" low="0" high="14" type="int"/>
+               <bitfield name="Y" low="16" high="30" type="int"/>
+               <bitfield name="DISABLE" pos="31" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x2081" name="PA_SC_WINDOW_SCISSOR_TL" type="adreno_reg_xy"/>
+       <reg32 offset="0x2082" name="PA_SC_WINDOW_SCISSOR_BR" type="adreno_reg_xy"/>
+       <reg32 offset="0x2010" name="UNKNOWN_2010"/>
+       <reg32 offset="0x2100" name="VGT_MAX_VTX_INDX"/>
+       <reg32 offset="0x2101" name="VGT_MIN_VTX_INDX"/>
+       <reg32 offset="0x2102" name="VGT_INDX_OFFSET"/>
+       <reg32 offset="0x2103" name="A225_PC_MULTI_PRIM_IB_RESET_INDX"/>
+       <reg32 offset="0x2104" name="RB_COLOR_MASK">
+               <bitfield name="WRITE_RED" pos="0" type="boolean"/>
+               <bitfield name="WRITE_GREEN" pos="1" type="boolean"/>
+               <bitfield name="WRITE_BLUE" pos="2" type="boolean"/>
+               <bitfield name="WRITE_ALPHA" pos="3" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x2105" name="RB_BLEND_RED"/>
+       <reg32 offset="0x2106" name="RB_BLEND_GREEN"/>
+       <reg32 offset="0x2107" name="RB_BLEND_BLUE"/>
+       <reg32 offset="0x2108" name="RB_BLEND_ALPHA"/>
+       <reg32 offset="0x2109" name="RB_FOG_COLOR">
+               <bitfield name="FOG_RED" low="0" high="7" type="uint"/>
+               <bitfield name="FOG_GREEN" low="8" high="15" type="uint"/>
+               <bitfield name="FOG_BLUE" low="16" high="23" type="uint"/>
+       </reg32>
+       <reg32 offset="0x210c" name="RB_STENCILREFMASK_BF" type="adreno_rb_stencilrefmask"/>
+       <reg32 offset="0x210d" name="RB_STENCILREFMASK" type="adreno_rb_stencilrefmask"/>
+       <reg32 offset="0x210e" name="RB_ALPHA_REF"/>
+       <reg32 offset="0x210f" name="PA_CL_VPORT_XSCALE" type="float"/>
+       <reg32 offset="0x2110" name="PA_CL_VPORT_XOFFSET" type="float"/>
+       <reg32 offset="0x2111" name="PA_CL_VPORT_YSCALE" type="float"/>
+       <reg32 offset="0x2112" name="PA_CL_VPORT_YOFFSET" type="float"/>
+       <reg32 offset="0x2113" name="PA_CL_VPORT_ZSCALE" type="float"/>
+       <reg32 offset="0x2114" name="PA_CL_VPORT_ZOFFSET" type="float"/>
+       <reg32 offset="0x2180" name="SQ_PROGRAM_CNTL">
+               <doc>
+                       note: only 0x3f worth of valid register values for VS_REGS and
+                       PS_REGS, but high bit is set to indicate '0 registers used':
+               </doc>
+               <bitfield name="VS_REGS" low="0" high="7" type="uint"/>
+               <bitfield name="PS_REGS" low="8" high="15" type="uint"/>
+               <bitfield name="VS_RESOURCE" pos="16" type="boolean"/>
+               <bitfield name="PS_RESOURCE" pos="17" type="boolean"/>
+               <bitfield name="PARAM_GEN" pos="18" type="boolean"/>
+               <bitfield name="GEN_INDEX_PIX" pos="19" type="boolean"/>
+               <bitfield name="VS_EXPORT_COUNT" low="20" high="23" type="uint"/>
+               <bitfield name="VS_EXPORT_MODE" low="24" high="26" type="a2xx_sq_ps_vtx_mode"/>
+               <bitfield name="PS_EXPORT_MODE" low="27" high="30" type="uint"/>
+               <bitfield name="GEN_INDEX_VTX" pos="31" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x2181" name="SQ_CONTEXT_MISC">
+               <bitfield name="INST_PRED_OPTIMIZE" pos="0" type="boolean"/>
+               <bitfield name="SC_OUTPUT_SCREEN_XY" pos="1" type="boolean"/>
+               <bitfield name="SC_SAMPLE_CNTL" low="2" high="3" type="a2xx_sq_sample_cntl"/>
+               <bitfield name="PARAM_GEN_POS" low="8" high="15" type="uint"/>
+               <bitfield name="PERFCOUNTER_REF" pos="16" type="boolean"/>
+               <bitfield name="YEILD_OPTIMIZE" pos="17" type="boolean"/>
+               <bitfield name="TX_CACHE_SEL" pos="18" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x2182" name="SQ_INTERPOLATOR_CNTL">
+               <bitfield name="PARAM_SHADE" low="0" high="15" type="uint"/>
+               <bitfield name="SAMPLING_PATTERN" low="16" high="31" type="uint"/>
+       </reg32>
+       <reg32 offset="0x2183" name="SQ_WRAPPING_0">
+               <bitfield name="PARAM_WRAP_0" low="0" high="3" type="uint"/>
+               <bitfield name="PARAM_WRAP_1" low="4" high="7" type="uint"/>
+               <bitfield name="PARAM_WRAP_2" low="8" high="11" type="uint"/>
+               <bitfield name="PARAM_WRAP_3" low="12" high="15" type="uint"/>
+               <bitfield name="PARAM_WRAP_4" low="16" high="19" type="uint"/>
+               <bitfield name="PARAM_WRAP_5" low="20" high="23" type="uint"/>
+               <bitfield name="PARAM_WRAP_6" low="24" high="27" type="uint"/>
+               <bitfield name="PARAM_WRAP_7" low="28" high="31" type="uint"/>
+       </reg32>
+       <reg32 offset="0x2184" name="SQ_WRAPPING_1">
+               <bitfield name="PARAM_WRAP_8" low="0" high="3" type="uint"/>
+               <bitfield name="PARAM_WRAP_9" low="4" high="7" type="uint"/>
+               <bitfield name="PARAM_WRAP_10" low="8" high="11" type="uint"/>
+               <bitfield name="PARAM_WRAP_11" low="12" high="15" type="uint"/>
+               <bitfield name="PARAM_WRAP_12" low="16" high="19" type="uint"/>
+               <bitfield name="PARAM_WRAP_13" low="20" high="23" type="uint"/>
+               <bitfield name="PARAM_WRAP_14" low="24" high="27" type="uint"/>
+               <bitfield name="PARAM_WRAP_15" low="28" high="31" type="uint"/>
+       </reg32>
+       <reg32 offset="0x21f6" name="SQ_PS_PROGRAM">
+               <bitfield name="BASE" low="0" high="11" type="uint"/>
+               <bitfield name="SIZE" low="12" high="23" type="uint"/>
+       </reg32>
+       <reg32 offset="0x21f7" name="SQ_VS_PROGRAM">
+               <bitfield name="BASE" low="0" high="11" type="uint"/>
+               <bitfield name="SIZE" low="12" high="23" type="uint"/>
+       </reg32>
+       <reg32 offset="0x21f9" name="VGT_EVENT_INITIATOR"/>
+       <reg32 offset="0x21fc" name="VGT_DRAW_INITIATOR" type="vgt_draw_initiator"/>
+       <reg32 offset="0x21fd" name="VGT_IMMED_DATA"/>
+       <reg32 offset="0x2200" name="RB_DEPTHCONTROL">
+               <bitfield name="STENCIL_ENABLE" pos="0" type="boolean"/>
+               <bitfield name="Z_ENABLE" pos="1" type="boolean"/>
+               <bitfield name="Z_WRITE_ENABLE" pos="2" type="boolean"/>
+               <bitfield name="EARLY_Z_ENABLE" pos="3" type="boolean"/>
+               <bitfield name="ZFUNC" low="4" high="6" type="adreno_compare_func"/>
+               <bitfield name="BACKFACE_ENABLE" pos="7" type="boolean"/>
+               <bitfield name="STENCILFUNC" low="8" high="10" type="adreno_compare_func"/>
+               <bitfield name="STENCILFAIL" low="11" high="13" type="adreno_stencil_op"/>
+               <bitfield name="STENCILZPASS" low="14" high="16" type="adreno_stencil_op"/>
+               <bitfield name="STENCILZFAIL" low="17" high="19" type="adreno_stencil_op"/>
+               <bitfield name="STENCILFUNC_BF" low="20" high="22" type="adreno_compare_func"/>
+               <bitfield name="STENCILFAIL_BF" low="23" high="25" type="adreno_stencil_op"/>
+               <bitfield name="STENCILZPASS_BF" low="26" high="28" type="adreno_stencil_op"/>
+               <bitfield name="STENCILZFAIL_BF" low="29" high="31" type="adreno_stencil_op"/>
+       </reg32>
+       <reg32 offset="0x2201" name="RB_BLEND_CONTROL">
+               <bitfield name="COLOR_SRCBLEND" low="0" high="4" type="adreno_rb_blend_factor"/>
+               <bitfield name="COLOR_COMB_FCN" low="5" high="7" type="a2xx_rb_blend_opcode"/>
+               <bitfield name="COLOR_DESTBLEND" low="8" high="12" type="adreno_rb_blend_factor"/>
+               <bitfield name="ALPHA_SRCBLEND" low="16" high="20" type="adreno_rb_blend_factor"/>
+               <bitfield name="ALPHA_COMB_FCN" low="21" high="23" type="a2xx_rb_blend_opcode"/>
+               <bitfield name="ALPHA_DESTBLEND" low="24" high="28" type="adreno_rb_blend_factor"/>
+               <bitfield name="BLEND_FORCE_ENABLE" pos="29" type="boolean"/>
+               <bitfield name="BLEND_FORCE" pos="30" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x2202" name="RB_COLORCONTROL">
+               <bitfield name="ALPHA_FUNC" low="0" high="2" type="adreno_compare_func"/>
+               <bitfield name="ALPHA_TEST_ENABLE" pos="3" type="boolean"/>
+               <bitfield name="ALPHA_TO_MASK_ENABLE" pos="4" type="boolean"/>
+               <bitfield name="BLEND_DISABLE" pos="5" type="boolean"/>
+               <bitfield name="VOB_ENABLE" pos="6" type="boolean"/>
+               <bitfield name="VS_EXPORTS_FOG" pos="7" type="boolean"/>
+               <bitfield name="ROP_CODE" low="8" high="11" type="uint"/>
+               <bitfield name="DITHER_MODE" low="12" high="13" type="adreno_rb_dither_mode"/>
+               <bitfield name="DITHER_TYPE" low="14" high="15" type="a2xx_rb_dither_type"/>
+               <bitfield name="PIXEL_FOG" pos="16" type="boolean"/>
+               <bitfield name="ALPHA_TO_MASK_OFFSET0" low="24" high="25" type="uint"/>
+               <bitfield name="ALPHA_TO_MASK_OFFSET1" low="26" high="27" type="uint"/>
+               <bitfield name="ALPHA_TO_MASK_OFFSET2" low="28" high="29" type="uint"/>
+               <bitfield name="ALPHA_TO_MASK_OFFSET3" low="30" high="31" type="uint"/>
+       </reg32>
+       <reg32 offset="0x2203" name="VGT_CURRENT_BIN_ID_MAX" type="a2xx_vgt_current_bin_id_min_max"/>
+       <reg32 offset="0x2204" name="PA_CL_CLIP_CNTL">
+               <bitfield name="CLIP_DISABLE" pos="16" type="boolean"/>
+               <bitfield name="BOUNDARY_EDGE_FLAG_ENA" pos="18" type="boolean"/>
+               <bitfield name="DX_CLIP_SPACE_DEF" pos="19" type="a2xx_dx_clip_space"/>
+               <bitfield name="DIS_CLIP_ERR_DETECT" pos="20" type="boolean"/>
+               <bitfield name="VTX_KILL_OR" pos="21" type="boolean"/>
+               <bitfield name="XY_NAN_RETAIN" pos="22" type="boolean"/>
+               <bitfield name="Z_NAN_RETAIN" pos="23" type="boolean"/>
+               <bitfield name="W_NAN_RETAIN" pos="24" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x2205" name="PA_SU_SC_MODE_CNTL">
+               <bitfield name="CULL_FRONT" pos="0" type="boolean"/>
+               <bitfield name="CULL_BACK" pos="1" type="boolean"/>
+               <bitfield name="FACE" pos="2" type="boolean"/>
+               <bitfield name="POLYMODE" low="3" high="4" type="a2xx_pa_su_sc_polymode"/>
+               <bitfield name="FRONT_PTYPE" low="5" high="7" type="adreno_pa_su_sc_draw"/>
+               <bitfield name="BACK_PTYPE" low="8" high="10" type="adreno_pa_su_sc_draw"/>
+               <bitfield name="POLY_OFFSET_FRONT_ENABLE" pos="11" type="boolean"/>
+               <bitfield name="POLY_OFFSET_BACK_ENABLE" pos="12" type="boolean"/>
+               <bitfield name="POLY_OFFSET_PARA_ENABLE" pos="13" type="boolean"/>
+               <bitfield name="MSAA_ENABLE" pos="15" type="boolean"/>
+               <bitfield name="VTX_WINDOW_OFFSET_ENABLE" pos="16" type="boolean"/>
+               <bitfield name="LINE_STIPPLE_ENABLE" pos="18" type="boolean"/>
+               <bitfield name="PROVOKING_VTX_LAST" pos="19" type="boolean"/>
+               <bitfield name="PERSP_CORR_DIS" pos="20" type="boolean"/>
+               <bitfield name="MULTI_PRIM_IB_ENA" pos="21" type="boolean"/>
+               <bitfield name="QUAD_ORDER_ENABLE" pos="23" type="boolean"/>
+               <bitfield name="WAIT_RB_IDLE_ALL_TRI" pos="25" type="boolean"/>
+               <bitfield name="WAIT_RB_IDLE_FIRST_TRI_NEW_STATE" pos="26" type="boolean"/>
+               <bitfield name="CLAMPED_FACENESS" pos="28" type="boolean"/>
+               <bitfield name="ZERO_AREA_FACENESS" pos="29" type="boolean"/>
+               <bitfield name="FACE_KILL_ENABLE" pos="30" type="boolean"/>
+               <bitfield name="FACE_WRITE_ENABLE" pos="31" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x2206" name="PA_CL_VTE_CNTL">
+               <bitfield name="VPORT_X_SCALE_ENA" pos="0" type="boolean"/>
+               <bitfield name="VPORT_X_OFFSET_ENA" pos="1" type="boolean"/>
+               <bitfield name="VPORT_Y_SCALE_ENA" pos="2" type="boolean"/>
+               <bitfield name="VPORT_Y_OFFSET_ENA" pos="3" type="boolean"/>
+               <bitfield name="VPORT_Z_SCALE_ENA" pos="4" type="boolean"/>
+               <bitfield name="VPORT_Z_OFFSET_ENA" pos="5" type="boolean"/>
+               <bitfield name="VTX_XY_FMT" pos="8" type="boolean"/>
+               <bitfield name="VTX_Z_FMT" pos="9" type="boolean"/>
+               <bitfield name="VTX_W0_FMT" pos="10" type="boolean"/>
+               <bitfield name="PERFCOUNTER_REF" pos="11" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x2207" name="VGT_CURRENT_BIN_ID_MIN" type="a2xx_vgt_current_bin_id_min_max"/>
+       <reg32 offset="0x2208" name="RB_MODECONTROL">
+               <bitfield name="EDRAM_MODE" low="0" high="2" type="a2xx_rb_edram_mode"/>
+       </reg32>
+       <reg32 offset="0x2209" name="A220_RB_LRZ_VSC_CONTROL"/>
+       <reg32 offset="0x220a" name="RB_SAMPLE_POS"/>
+       <reg32 offset="0x220b" name="CLEAR_COLOR">
+               <bitfield name="RED" low="0" high="7"/>
+               <bitfield name="GREEN" low="8" high="15"/>
+               <bitfield name="BLUE" low="16" high="23"/>
+               <bitfield name="ALPHA" low="24" high="31"/>
+       </reg32>
+       <reg32 offset="0x2210" name="A220_GRAS_CONTROL"/>
+       <reg32 offset="0x2280" name="PA_SU_POINT_SIZE">
+               <bitfield name="HEIGHT" low="0" high="15" type="ufixed" radix="4"/>
+               <bitfield name="WIDTH" low="16" high="31" type="ufixed" radix="4"/>
+       </reg32>
+       <reg32 offset="0x2281" name="PA_SU_POINT_MINMAX">
+               <bitfield name="MIN" low="0" high="15" type="ufixed" radix="4"/>
+               <bitfield name="MAX" low="16" high="31" type="ufixed" radix="4"/>
+       </reg32>
+       <reg32 offset="0x2282" name="PA_SU_LINE_CNTL">
+               <bitfield name="WIDTH" low="0" high="15" type="ufixed" radix="4"/>
+       </reg32>
+       <reg32 offset="0x2283" name="PA_SC_LINE_STIPPLE">
+               <bitfield name="LINE_PATTERN" low="0" high="15" type="hex"/>
+               <bitfield name="REPEAT_COUNT" low="16" high="23" type="uint"/>
+               <bitfield name="PATTERN_BIT_ORDER" pos="28" type="a2xx_pa_sc_pattern_bit_order"/>
+               <bitfield name="AUTO_RESET_CNTL" low="29" high="30" type="a2xx_pa_sc_auto_reset_cntl"/>
+       </reg32>
+       <reg32 offset="0x2293" name="PA_SC_VIZ_QUERY">
+               <bitfield name="VIZ_QUERY_ENA" pos="0" type="boolean"/>
+               <bitfield name="VIZ_QUERY_ID" low="1" high="6" type="uint"/>
+               <bitfield name="KILL_PIX_POST_EARLY_Z" pos="8" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x2294" name="VGT_ENHANCE"/>
+       <reg32 offset="0x2300" name="PA_SC_LINE_CNTL">
+               <bitfield name="BRES_CNTL" low="0" high="15" type="uint"/>
+               <bitfield name="USE_BRES_CNTL" pos="8" type="boolean"/>
+               <bitfield name="EXPAND_LINE_WIDTH" pos="9" type="boolean"/>
+               <bitfield name="LAST_PIXEL" pos="10" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x2301" name="PA_SC_AA_CONFIG">
+               <bitfield name="MSAA_NUM_SAMPLES" low="0" high="2" type="uint"/>
+               <bitfield name="MAX_SAMPLE_DIST" low="13" high="16" type="uint"/>
+       </reg32>
+       <reg32 offset="0x2302" name="PA_SU_VTX_CNTL">
+               <bitfield name="PIX_CENTER" pos="0" type="a2xx_pa_pixcenter"/>
+               <bitfield name="ROUND_MODE" low="1" high="2" type="a2xx_pa_roundmode"/>
+               <bitfield name="QUANT_MODE" low="7" high="9" type="a2xx_pa_quantmode"/>
+       </reg32>
+       <reg32 offset="0x2303" name="PA_CL_GB_VERT_CLIP_ADJ" type="float"/>
+       <reg32 offset="0x2304" name="PA_CL_GB_VERT_DISC_ADJ" type="float"/>
+       <reg32 offset="0x2305" name="PA_CL_GB_HORZ_CLIP_ADJ" type="float"/>
+       <reg32 offset="0x2306" name="PA_CL_GB_HORZ_DISC_ADJ" type="float"/>
+       <reg32 offset="0x2307" name="SQ_VS_CONST">
+               <bitfield name="BASE" low="0" high="8" type="uint"/>
+               <bitfield name="SIZE" low="12" high="20" type="uint"/>
+       </reg32>
+       <reg32 offset="0x2308" name="SQ_PS_CONST">
+               <bitfield name="BASE" low="0" high="8" type="uint"/>
+               <bitfield name="SIZE" low="12" high="20" type="uint"/>
+       </reg32>
+       <reg32 offset="0x2309" name="SQ_DEBUG_MISC_0"/>
+       <reg32 offset="0x230a" name="SQ_DEBUG_MISC_1"/>
+       <reg32 offset="0x2312" name="PA_SC_AA_MASK"/>
+       <reg32 offset="0x2316" name="VGT_VERTEX_REUSE_BLOCK_CNTL">
+               <bitfield name="VTX_REUSE_DEPTH" low="0" high="2" type="uint"/>
+       </reg32>
+       <reg32 offset="0x2317" name="VGT_OUT_DEALLOC_CNTL">
+               <bitfield name="DEALLOC_DIST" low="0" high="1" type="uint"/>
+       </reg32>
+       <reg32 offset="0x2318" name="RB_COPY_CONTROL">
+               <bitfield name="COPY_SAMPLE_SELECT" low="0" high="2" type="a2xx_rb_copy_sample_select"/>
+               <bitfield name="DEPTH_CLEAR_ENABLE" pos="3" type="boolean"/>
+               <bitfield name="CLEAR_MASK" low="4" high="7" type="hex"/>
+       </reg32>
+       <reg32 offset="0x2319" name="RB_COPY_DEST_BASE"/>
+       <reg32 offset="0x231a" name="RB_COPY_DEST_PITCH" shr="5" type="uint"/>
+       <reg32 offset="0x231b" name="RB_COPY_DEST_INFO">
+               <bitfield name="DEST_ENDIAN" low="0" high="2" type="adreno_rb_surface_endian"/>
+               <bitfield name="LINEAR" pos="3" type="boolean"/>
+               <bitfield name="FORMAT" low="4" high="7" type="a2xx_colorformatx"/>
+               <bitfield name="SWAP" low="8" high="9" type="uint"/>
+               <bitfield name="DITHER_MODE" low="10" high="11" type="adreno_rb_dither_mode"/>
+               <bitfield name="DITHER_TYPE" low="12" high="13" type="a2xx_rb_dither_type"/>
+               <bitfield name="WRITE_RED" pos="14" type="boolean"/>
+               <bitfield name="WRITE_GREEN" pos="15" type="boolean"/>
+               <bitfield name="WRITE_BLUE" pos="16" type="boolean"/>
+               <bitfield name="WRITE_ALPHA" pos="17" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x231c" name="RB_COPY_DEST_OFFSET">
+               <bitfield name="X" low="0" high="12" type="uint"/>
+               <bitfield name="Y" low="13" high="25" type="uint"/>
+       </reg32>
+       <reg32 offset="0x231d" name="RB_DEPTH_CLEAR"/>
+       <reg32 offset="0x2324" name="RB_SAMPLE_COUNT_CTL"/>
+       <reg32 offset="0x2326" name="RB_COLOR_DEST_MASK"/>
+       <reg32 offset="0x2340" name="A225_GRAS_UCP0X"/>
+       <reg32 offset="0x2357" name="A225_GRAS_UCP5W"/>
+       <reg32 offset="0x2360" name="A225_GRAS_UCP_ENABLED"/>
+       <reg32 offset="0x2380" name="PA_SU_POLY_OFFSET_FRONT_SCALE"/>
+       <reg32 offset="0x2381" name="PA_SU_POLY_OFFSET_FRONT_OFFSET"/>
+       <reg32 offset="0x2382" name="PA_SU_POLY_OFFSET_BACK_SCALE"/>
+       <reg32 offset="0x2383" name="PA_SU_POLY_OFFSET_BACK_OFFSET"/>
+       <reg32 offset="0x4000" name="SQ_CONSTANT_0"/>
+       <reg32 offset="0x4800" name="SQ_FETCH_0"/>
+       <reg32 offset="0x4900" name="SQ_CF_BOOLEANS"/>
+       <reg32 offset="0x4908" name="SQ_CF_LOOP"/>
+       <reg32 offset="0xa29" name="COHER_SIZE_PM4"/>
+       <reg32 offset="0xa2a" name="COHER_BASE_PM4"/>
+       <reg32 offset="0xa2b" name="COHER_STATUS_PM4"/>
+
+       <reg32 offset="0x0c88" name="PA_SU_PERFCOUNTER0_SELECT"/>
+       <reg32 offset="0x0c89" name="PA_SU_PERFCOUNTER1_SELECT"/>
+       <reg32 offset="0x0c8a" name="PA_SU_PERFCOUNTER2_SELECT"/>
+       <reg32 offset="0x0c8b" name="PA_SU_PERFCOUNTER3_SELECT"/>
+       <reg32 offset="0x0c8c" name="PA_SU_PERFCOUNTER0_LOW"/>
+       <reg32 offset="0x0c8d" name="PA_SU_PERFCOUNTER0_HI"/>
+       <reg32 offset="0x0c8e" name="PA_SU_PERFCOUNTER1_LOW"/>
+       <reg32 offset="0x0c8f" name="PA_SU_PERFCOUNTER1_HI"/>
+       <reg32 offset="0x0c90" name="PA_SU_PERFCOUNTER2_LOW"/>
+       <reg32 offset="0x0c91" name="PA_SU_PERFCOUNTER2_HI"/>
+       <reg32 offset="0x0c92" name="PA_SU_PERFCOUNTER3_LOW"/>
+       <reg32 offset="0x0c93" name="PA_SU_PERFCOUNTER3_HI"/>
+       <reg32 offset="0x0c98" name="PA_SC_PERFCOUNTER0_SELECT"/>
+       <reg32 offset="0x0c99" name="PA_SC_PERFCOUNTER0_LOW"/>
+       <reg32 offset="0x0c9a" name="PA_SC_PERFCOUNTER0_HI"/>
+       <reg32 offset="0x0c48" name="VGT_PERFCOUNTER0_SELECT"/>
+       <reg32 offset="0x0c49" name="VGT_PERFCOUNTER1_SELECT"/>
+       <reg32 offset="0x0c4a" name="VGT_PERFCOUNTER2_SELECT"/>
+       <reg32 offset="0x0c4b" name="VGT_PERFCOUNTER3_SELECT"/>
+       <reg32 offset="0x0c4c" name="VGT_PERFCOUNTER0_LOW"/>
+       <reg32 offset="0x0c4e" name="VGT_PERFCOUNTER1_LOW"/>
+       <reg32 offset="0x0c50" name="VGT_PERFCOUNTER2_LOW"/>
+       <reg32 offset="0x0c52" name="VGT_PERFCOUNTER3_LOW"/>
+       <reg32 offset="0x0c4d" name="VGT_PERFCOUNTER0_HI"/>
+       <reg32 offset="0x0c4f" name="VGT_PERFCOUNTER1_HI"/>
+       <reg32 offset="0x0c51" name="VGT_PERFCOUNTER2_HI"/>
+       <reg32 offset="0x0c53" name="VGT_PERFCOUNTER3_HI"/>
+       <reg32 offset="0x0e05" name="TCR_PERFCOUNTER0_SELECT"/>
+       <reg32 offset="0x0e08" name="TCR_PERFCOUNTER1_SELECT"/>
+       <reg32 offset="0x0e06" name="TCR_PERFCOUNTER0_HI"/>
+       <reg32 offset="0x0e09" name="TCR_PERFCOUNTER1_HI"/>
+       <reg32 offset="0x0e07" name="TCR_PERFCOUNTER0_LOW"/>
+       <reg32 offset="0x0e0a" name="TCR_PERFCOUNTER1_LOW"/>
+       <reg32 offset="0x0e1f" name="TP0_PERFCOUNTER0_SELECT"/>
+       <reg32 offset="0x0e20" name="TP0_PERFCOUNTER0_HI"/>
+       <reg32 offset="0x0e21" name="TP0_PERFCOUNTER0_LOW"/>
+       <reg32 offset="0x0e22" name="TP0_PERFCOUNTER1_SELECT"/>
+       <reg32 offset="0x0e23" name="TP0_PERFCOUNTER1_HI"/>
+       <reg32 offset="0x0e24" name="TP0_PERFCOUNTER1_LOW"/>
+       <reg32 offset="0x0e54" name="TCM_PERFCOUNTER0_SELECT"/>
+       <reg32 offset="0x0e57" name="TCM_PERFCOUNTER1_SELECT"/>
+       <reg32 offset="0x0e55" name="TCM_PERFCOUNTER0_HI"/>
+       <reg32 offset="0x0e58" name="TCM_PERFCOUNTER1_HI"/>
+       <reg32 offset="0x0e56" name="TCM_PERFCOUNTER0_LOW"/>
+       <reg32 offset="0x0e59" name="TCM_PERFCOUNTER1_LOW"/>
+       <reg32 offset="0x0e5a" name="TCF_PERFCOUNTER0_SELECT"/>
+       <reg32 offset="0x0e5d" name="TCF_PERFCOUNTER1_SELECT"/>
+       <reg32 offset="0x0e60" name="TCF_PERFCOUNTER2_SELECT"/>
+       <reg32 offset="0x0e63" name="TCF_PERFCOUNTER3_SELECT"/>
+       <reg32 offset="0x0e66" name="TCF_PERFCOUNTER4_SELECT"/>
+       <reg32 offset="0x0e69" name="TCF_PERFCOUNTER5_SELECT"/>
+       <reg32 offset="0x0e6c" name="TCF_PERFCOUNTER6_SELECT"/>
+       <reg32 offset="0x0e6f" name="TCF_PERFCOUNTER7_SELECT"/>
+       <reg32 offset="0x0e72" name="TCF_PERFCOUNTER8_SELECT"/>
+       <reg32 offset="0x0e75" name="TCF_PERFCOUNTER9_SELECT"/>
+       <reg32 offset="0x0e78" name="TCF_PERFCOUNTER10_SELECT"/>
+       <reg32 offset="0x0e7b" name="TCF_PERFCOUNTER11_SELECT"/>
+       <reg32 offset="0x0e5b" name="TCF_PERFCOUNTER0_HI"/>
+       <reg32 offset="0x0e5e" name="TCF_PERFCOUNTER1_HI"/>
+       <reg32 offset="0x0e61" name="TCF_PERFCOUNTER2_HI"/>
+       <reg32 offset="0x0e64" name="TCF_PERFCOUNTER3_HI"/>
+       <reg32 offset="0x0e67" name="TCF_PERFCOUNTER4_HI"/>
+       <reg32 offset="0x0e6a" name="TCF_PERFCOUNTER5_HI"/>
+       <reg32 offset="0x0e6d" name="TCF_PERFCOUNTER6_HI"/>
+       <reg32 offset="0x0e70" name="TCF_PERFCOUNTER7_HI"/>
+       <reg32 offset="0x0e73" name="TCF_PERFCOUNTER8_HI"/>
+       <reg32 offset="0x0e76" name="TCF_PERFCOUNTER9_HI"/>
+       <reg32 offset="0x0e79" name="TCF_PERFCOUNTER10_HI"/>
+       <reg32 offset="0x0e7c" name="TCF_PERFCOUNTER11_HI"/>
+       <reg32 offset="0x0e5c" name="TCF_PERFCOUNTER0_LOW"/>
+       <reg32 offset="0x0e5f" name="TCF_PERFCOUNTER1_LOW"/>
+       <reg32 offset="0x0e62" name="TCF_PERFCOUNTER2_LOW"/>
+       <reg32 offset="0x0e65" name="TCF_PERFCOUNTER3_LOW"/>
+       <reg32 offset="0x0e68" name="TCF_PERFCOUNTER4_LOW"/>
+       <reg32 offset="0x0e6b" name="TCF_PERFCOUNTER5_LOW"/>
+       <reg32 offset="0x0e6e" name="TCF_PERFCOUNTER6_LOW"/>
+       <reg32 offset="0x0e71" name="TCF_PERFCOUNTER7_LOW"/>
+       <reg32 offset="0x0e74" name="TCF_PERFCOUNTER8_LOW"/>
+       <reg32 offset="0x0e77" name="TCF_PERFCOUNTER9_LOW"/>
+       <reg32 offset="0x0e7a" name="TCF_PERFCOUNTER10_LOW"/>
+       <reg32 offset="0x0e7d" name="TCF_PERFCOUNTER11_LOW"/>
+       <reg32 offset="0x0dc8" name="SQ_PERFCOUNTER0_SELECT"/>
+       <reg32 offset="0x0dc9" name="SQ_PERFCOUNTER1_SELECT"/>
+       <reg32 offset="0x0dca" name="SQ_PERFCOUNTER2_SELECT"/>
+       <reg32 offset="0x0dcb" name="SQ_PERFCOUNTER3_SELECT"/>
+       <reg32 offset="0x0dcc" name="SQ_PERFCOUNTER0_LOW"/>
+       <reg32 offset="0x0dcd" name="SQ_PERFCOUNTER0_HI"/>
+       <reg32 offset="0x0dce" name="SQ_PERFCOUNTER1_LOW"/>
+       <reg32 offset="0x0dcf" name="SQ_PERFCOUNTER1_HI"/>
+       <reg32 offset="0x0dd0" name="SQ_PERFCOUNTER2_LOW"/>
+       <reg32 offset="0x0dd1" name="SQ_PERFCOUNTER2_HI"/>
+       <reg32 offset="0x0dd2" name="SQ_PERFCOUNTER3_LOW"/>
+       <reg32 offset="0x0dd3" name="SQ_PERFCOUNTER3_HI"/>
+       <reg32 offset="0x0dd4" name="SX_PERFCOUNTER0_SELECT"/>
+       <reg32 offset="0x0dd8" name="SX_PERFCOUNTER0_LOW"/>
+       <reg32 offset="0x0dd9" name="SX_PERFCOUNTER0_HI"/>
+       <reg32 offset="0x0a46" name="MH_PERFCOUNTER0_SELECT"/>
+       <reg32 offset="0x0a4a" name="MH_PERFCOUNTER1_SELECT"/>
+       <reg32 offset="0x0a47" name="MH_PERFCOUNTER0_CONFIG"/>
+       <reg32 offset="0x0a4b" name="MH_PERFCOUNTER1_CONFIG"/>
+       <reg32 offset="0x0a48" name="MH_PERFCOUNTER0_LOW"/>
+       <reg32 offset="0x0a4c" name="MH_PERFCOUNTER1_LOW"/>
+       <reg32 offset="0x0a49" name="MH_PERFCOUNTER0_HI"/>
+       <reg32 offset="0x0a4d" name="MH_PERFCOUNTER1_HI"/>
+       <reg32 offset="0x0f04" name="RB_PERFCOUNTER0_SELECT"/>
+       <reg32 offset="0x0f08" name="RB_PERFCOUNTER0_LOW"/>
+       <reg32 offset="0x0f09" name="RB_PERFCOUNTER0_HI"/>
+</domain>
+
+<domain name="A2XX_SQ_TEX" width="32">
+       <doc>Texture state dwords</doc>
+       <enum name="sq_tex_clamp">
+               <value name="SQ_TEX_WRAP" value="0"/>
+               <value name="SQ_TEX_MIRROR" value="1"/>
+               <value name="SQ_TEX_CLAMP_LAST_TEXEL" value="2"/>
+               <value name="SQ_TEX_MIRROR_ONCE_LAST_TEXEL" value="3"/>
+               <value name="SQ_TEX_CLAMP_HALF_BORDER" value="4"/>
+               <value name="SQ_TEX_MIRROR_ONCE_HALF_BORDER" value="5"/>
+               <value name="SQ_TEX_CLAMP_BORDER" value="6"/>
+               <value name="SQ_TEX_MIRROR_ONCE_BORDER" value="7"/>
+       </enum>
+       <enum name="sq_tex_swiz">
+               <value name="SQ_TEX_X" value="0"/>
+               <value name="SQ_TEX_Y" value="1"/>
+               <value name="SQ_TEX_Z" value="2"/>
+               <value name="SQ_TEX_W" value="3"/>
+               <value name="SQ_TEX_ZERO" value="4"/>
+               <value name="SQ_TEX_ONE" value="5"/>
+       </enum>
+       <enum name="sq_tex_filter">
+               <value name="SQ_TEX_FILTER_POINT" value="0"/>
+               <value name="SQ_TEX_FILTER_BILINEAR" value="1"/>
+               <value name="SQ_TEX_FILTER_BASEMAP" value="2"/>
+               <value name="SQ_TEX_FILTER_USE_FETCH_CONST" value="3"/>
+       </enum>
+       <enum name="sq_tex_aniso_filter">
+               <value name="SQ_TEX_ANISO_FILTER_DISABLED" value="0"/>
+               <value name="SQ_TEX_ANISO_FILTER_MAX_1_1" value="1"/>
+               <value name="SQ_TEX_ANISO_FILTER_MAX_2_1" value="2"/>
+               <value name="SQ_TEX_ANISO_FILTER_MAX_4_1" value="3"/>
+               <value name="SQ_TEX_ANISO_FILTER_MAX_8_1" value="4"/>
+               <value name="SQ_TEX_ANISO_FILTER_MAX_16_1" value="5"/>
+               <value name="SQ_TEX_ANISO_FILTER_USE_FETCH_CONST" value="7"/>
+       </enum>
+       <enum name="sq_tex_dimension">
+               <value name="SQ_TEX_DIMENSION_1D" value="0"/>
+               <value name="SQ_TEX_DIMENSION_2D" value="1"/>
+               <value name="SQ_TEX_DIMENSION_3D" value="2"/>
+               <value name="SQ_TEX_DIMENSION_CUBE" value="3"/>
+       </enum>
+       <enum name="sq_tex_border_color">
+               <value name="SQ_TEX_BORDER_COLOR_BLACK" value="0"/>
+               <value name="SQ_TEX_BORDER_COLOR_WHITE" value="1"/>
+               <value name="SQ_TEX_BORDER_COLOR_ACBYCR_BLACK" value="2"/>
+               <value name="SQ_TEX_BORDER_COLOR_ACBCRY_BLACK" value="3"/>
+       </enum>
+       <enum name="sq_tex_sign">
+               <value name="SQ_TEX_SIGN_UNSIGNED" value="0"/>
+               <value name="SQ_TEX_SIGN_SIGNED" value="1"/>
+               <!-- biased: 2*color-1 (range -1,1 when sampling) -->
+               <value name="SQ_TEX_SIGN_UNSIGNED_BIASED" value="2"/>
+               <!-- gamma: sRGB to linear - doesn't seem to work on adreno? -->
+               <value name="SQ_TEX_SIGN_GAMMA" value="3"/>
+       </enum>
+       <enum name="sq_tex_endian">
+               <value name="SQ_TEX_ENDIAN_NONE" value="0"/>
+               <value name="SQ_TEX_ENDIAN_8IN16" value="1"/>
+               <value name="SQ_TEX_ENDIAN_8IN32" value="2"/>
+               <value name="SQ_TEX_ENDIAN_16IN32" value="3"/>
+       </enum>
+       <enum name="sq_tex_clamp_policy">
+               <value name="SQ_TEX_CLAMP_POLICY_D3D" value="0"/>
+               <value name="SQ_TEX_CLAMP_POLICY_OGL" value="1"/>
+       </enum>
+       <enum name="sq_tex_num_format">
+               <value name="SQ_TEX_NUM_FORMAT_FRAC" value="0"/>
+               <value name="SQ_TEX_NUM_FORMAT_INT" value="1"/>
+       </enum>
+       <enum name="sq_tex_type">
+       <value name="SQ_TEX_TYPE_0" value="0"/>
+       <value name="SQ_TEX_TYPE_1" value="1"/>
+       <value name="SQ_TEX_TYPE_2" value="2"/>
+       <value name="SQ_TEX_TYPE_3" value="3"/>
+       </enum>
+       <reg32 offset="0" name="0">
+               <bitfield name="TYPE" low="0" high="1" type="sq_tex_type"/>
+               <bitfield name="SIGN_X" low="2" high="3" type="sq_tex_sign"/>
+               <bitfield name="SIGN_Y" low="4" high="5" type="sq_tex_sign"/>
+               <bitfield name="SIGN_Z" low="6" high="7" type="sq_tex_sign"/>
+               <bitfield name="SIGN_W" low="8" high="9" type="sq_tex_sign"/>
+               <bitfield name="CLAMP_X" low="10" high="12" type="sq_tex_clamp"/>
+               <bitfield name="CLAMP_Y" low="13" high="15" type="sq_tex_clamp"/>"
+               <bitfield name="CLAMP_Z" low="16" high="18" type="sq_tex_clamp"/>"
+               <bitfield name="PITCH" low="22" high="30" shr="5" type="uint"/>
+               <bitfield name="TILED" pos="31" type="boolean"/>
+       </reg32>
+       <reg32 offset="1" name="1">
+               <bitfield name="FORMAT" low="0" high="5" type="a2xx_sq_surfaceformat"/>
+               <bitfield name="ENDIANNESS" low="6" high="7" type="sq_tex_endian"/>
+               <bitfield name="REQUEST_SIZE" low="8" high="9" type="uint"/>
+               <bitfield name="STACKED" pos="10" type="boolean"/>
+               <bitfield name="CLAMP_POLICY" pos="11" type="sq_tex_clamp_policy"/>
+               <bitfield name="BASE_ADDRESS" low="12" high="31" type="uint" shr="12"/>
+       </reg32>
+       <reg32 offset="2" name="2">
+               <bitfield name="WIDTH" low="0" high="12" type="uint"/>
+               <bitfield name="HEIGHT" low="13" high="25" type="uint"/>
+               <bitfield name="DEPTH" low="26" high="31" type="uint"/>
+               <!-- 1d/3d have different bit configurations -->
+       </reg32>
+       <reg32 offset="3" name="3">
+               <bitfield name="NUM_FORMAT" pos="0" type="sq_tex_num_format"/>
+               <bitfield name="SWIZ_X" low="1" high="3" type="sq_tex_swiz"/>
+               <bitfield name="SWIZ_Y" low="4" high="6" type="sq_tex_swiz"/>
+               <bitfield name="SWIZ_Z" low="7" high="9" type="sq_tex_swiz"/>
+               <bitfield name="SWIZ_W" low="10" high="12" type="sq_tex_swiz"/>
+               <bitfield name="EXP_ADJUST" low="13" high="18" type="int"/>
+               <bitfield name="XY_MAG_FILTER" low="19" high="20" type="sq_tex_filter"/>
+               <bitfield name="XY_MIN_FILTER" low="21" high="22" type="sq_tex_filter"/>
+               <bitfield name="MIP_FILTER" low="23" high="24" type="sq_tex_filter"/>
+               <bitfield name="ANISO_FILTER" low="25" high="27" type="sq_tex_aniso_filter"/>
+               <bitfield name="BORDER_SIZE" pos="31" type="uint"/>
+       </reg32>
+       <reg32 offset="4" name="4">
+               <bitfield name="VOL_MAG_FILTER" pos="0" type="sq_tex_filter"/>
+               <bitfield name="VOL_MIN_FILTER" pos="1" type="sq_tex_filter"/>
+               <bitfield name="MIP_MIN_LEVEL" low="2" high="5" type="uint"/>
+               <bitfield name="MIP_MAX_LEVEL" low="6" high="9" type="uint"/>
+               <bitfield name="MAX_ANISO_WALK" pos="10" type="boolean"/>
+               <bitfield name="MIN_ANISO_WALK" pos="11" type="boolean"/>
+               <bitfield name="LOD_BIAS" low="12" high="21" type="fixed" radix="5"/>
+               <bitfield name="GRAD_EXP_ADJUST_H" low="22" high="26" type="uint"/>
+               <bitfield name="GRAD_EXP_ADJUST_V" low="27" high="31" type="uint"/>
+       </reg32>
+       <reg32 offset="5" name="5">
+               <bitfield name="BORDER_COLOR" low="0" high="1" type="sq_tex_border_color"/>
+               <bitfield name="FORCE_BCW_MAX" pos="2" type="boolean"/>
+               <bitfield name="TRI_CLAMP" low="3" high="4" type="uint"/>
+               <bitfield name="ANISO_BIAS" low="5" high="8" type="fixed" radix="0"/> <!-- radix unknown -->
+               <bitfield name="DIMENSION" low="9" high="10" type="sq_tex_dimension"/>
+               <bitfield name="PACKED_MIPS" pos="11" type="boolean"/>
+               <bitfield name="MIP_ADDRESS" low="12" high="31" type="uint" shr="12"/>
+       </reg32>
+</domain>
+
+</database>
diff --git a/src/freedreno/registers/adreno/a3xx.xml b/src/freedreno/registers/adreno/a3xx.xml
new file mode 100644 (file)
index 0000000..0819dc4
--- /dev/null
@@ -0,0 +1,1749 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<database xmlns="http://nouveau.freedesktop.org/"
+xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+xsi:schemaLocation="http://nouveau.freedesktop.org/ rules-ng.xsd">
+<import file="freedreno_copyright.xml"/>
+<import file="adreno/adreno_common.xml"/>
+<import file="adreno/adreno_pm4.xml"/>
+
+<enum name="a3xx_tile_mode">
+       <value name="LINEAR" value="0"/>
+       <value name="TILE_4X4" value="1"/>    <!-- "normal" case for textures -->
+       <value name="TILE_32X32" value="2"/>  <!-- only used in GMEM -->
+       <value name="TILE_4X2" value="3"/>    <!-- only used for CrCb -->
+</enum>
+
+<enum name="a3xx_state_block_id">
+       <value name="HLSQ_BLOCK_ID_TP_TEX" value="2"/>
+       <value name="HLSQ_BLOCK_ID_TP_MIPMAP" value="3"/>
+       <value name="HLSQ_BLOCK_ID_SP_VS" value="4"/>
+       <value name="HLSQ_BLOCK_ID_SP_FS" value="6"/>
+</enum>
+
+<enum name="a3xx_cache_opcode">
+       <value name="INVALIDATE" value="1"/>
+</enum>
+
+<enum name="a3xx_vtx_fmt">
+       <value name="VFMT_32_FLOAT" value="0x0"/>
+       <value name="VFMT_32_32_FLOAT" value="0x1"/>
+       <value name="VFMT_32_32_32_FLOAT" value="0x2"/>
+       <value name="VFMT_32_32_32_32_FLOAT" value="0x3"/>
+
+       <value name="VFMT_16_FLOAT" value="0x4"/>
+       <value name="VFMT_16_16_FLOAT" value="0x5"/>
+       <value name="VFMT_16_16_16_FLOAT" value="0x6"/>
+       <value name="VFMT_16_16_16_16_FLOAT" value="0x7"/>
+
+       <value name="VFMT_32_FIXED" value="0x8"/>
+       <value name="VFMT_32_32_FIXED" value="0x9"/>
+       <value name="VFMT_32_32_32_FIXED" value="0xa"/>
+       <value name="VFMT_32_32_32_32_FIXED" value="0xb"/>
+
+       <value name="VFMT_16_SINT" value="0x10"/>
+       <value name="VFMT_16_16_SINT" value="0x11"/>
+       <value name="VFMT_16_16_16_SINT" value="0x12"/>
+       <value name="VFMT_16_16_16_16_SINT" value="0x13"/>
+       <value name="VFMT_16_UINT" value="0x14"/>
+       <value name="VFMT_16_16_UINT" value="0x15"/>
+       <value name="VFMT_16_16_16_UINT" value="0x16"/>
+       <value name="VFMT_16_16_16_16_UINT" value="0x17"/>
+       <value name="VFMT_16_SNORM" value="0x18"/>
+       <value name="VFMT_16_16_SNORM" value="0x19"/>
+       <value name="VFMT_16_16_16_SNORM" value="0x1a"/>
+       <value name="VFMT_16_16_16_16_SNORM" value="0x1b"/>
+       <value name="VFMT_16_UNORM" value="0x1c"/>
+       <value name="VFMT_16_16_UNORM" value="0x1d"/>
+       <value name="VFMT_16_16_16_UNORM" value="0x1e"/>
+       <value name="VFMT_16_16_16_16_UNORM" value="0x1f"/>
+
+       <!-- seems to be no NORM variants for 32bit.. -->
+       <value name="VFMT_32_UINT" value="0x20"/>
+       <value name="VFMT_32_32_UINT" value="0x21"/>
+       <value name="VFMT_32_32_32_UINT" value="0x22"/>
+       <value name="VFMT_32_32_32_32_UINT" value="0x23"/>
+       <value name="VFMT_32_SINT" value="0x24"/>
+       <value name="VFMT_32_32_SINT" value="0x25"/>
+       <value name="VFMT_32_32_32_SINT" value="0x26"/>
+       <value name="VFMT_32_32_32_32_SINT" value="0x27"/>
+
+       <value name="VFMT_8_UINT" value="0x28"/>
+       <value name="VFMT_8_8_UINT" value="0x29"/>
+       <value name="VFMT_8_8_8_UINT" value="0x2a"/>
+       <value name="VFMT_8_8_8_8_UINT" value="0x2b"/>
+       <value name="VFMT_8_UNORM" value="0x2c"/>
+       <value name="VFMT_8_8_UNORM" value="0x2d"/>
+       <value name="VFMT_8_8_8_UNORM" value="0x2e"/>
+       <value name="VFMT_8_8_8_8_UNORM" value="0x2f"/>
+       <value name="VFMT_8_SINT" value="0x30"/>
+       <value name="VFMT_8_8_SINT" value="0x31"/>
+       <value name="VFMT_8_8_8_SINT" value="0x32"/>
+       <value name="VFMT_8_8_8_8_SINT" value="0x33"/>
+       <value name="VFMT_8_SNORM" value="0x34"/>
+       <value name="VFMT_8_8_SNORM" value="0x35"/>
+       <value name="VFMT_8_8_8_SNORM" value="0x36"/>
+       <value name="VFMT_8_8_8_8_SNORM" value="0x37"/>
+       <value name="VFMT_10_10_10_2_UINT" value="0x38"/>
+       <value name="VFMT_10_10_10_2_UNORM" value="0x39"/>
+       <value name="VFMT_10_10_10_2_SINT" value="0x3a"/>
+       <value name="VFMT_10_10_10_2_SNORM" value="0x3b"/>
+       <value name="VFMT_2_10_10_10_UINT" value="0x3c"/>
+       <value name="VFMT_2_10_10_10_UNORM" value="0x3d"/>
+       <value name="VFMT_2_10_10_10_SINT" value="0x3e"/>
+       <value name="VFMT_2_10_10_10_SNORM" value="0x3f"/>
+
+       <value name="VFMT_NONE" value="0xff"/>
+</enum>
+
+<enum name="a3xx_tex_fmt">
+       <value name="TFMT_5_6_5_UNORM" value="0x4"/>
+       <value name="TFMT_5_5_5_1_UNORM" value="0x5"/>
+       <value name="TFMT_4_4_4_4_UNORM" value="0x7"/>
+       <value name="TFMT_Z16_UNORM" value="0x9"/>
+       <value name="TFMT_X8Z24_UNORM" value="0xa"/>
+       <value name="TFMT_Z32_FLOAT" value="0xb"/>
+
+       <!--
+               The NV12 tiled/linear formats seem to require gang'd sampler
+               slots (ie. sampler state N plus N+1) for Y and UV planes.
+               They fetch yuv in single sam instruction, but still require
+               colorspace conversion in the shader.
+        -->
+       <value name="TFMT_UV_64X32" value="0x10"/>
+       <value name="TFMT_VU_64X32" value="0x11"/>
+       <value name="TFMT_Y_64X32" value="0x12"/>
+       <value name="TFMT_NV12_64X32" value="0x13"/>
+       <value name="TFMT_UV_LINEAR" value="0x14"/>
+       <value name="TFMT_VU_LINEAR" value="0x15"/>
+       <value name="TFMT_Y_LINEAR" value="0x16"/>
+       <value name="TFMT_NV12_LINEAR" value="0x17"/>
+       <value name="TFMT_I420_Y" value="0x18"/>
+       <value name="TFMT_I420_U" value="0x1a"/>
+       <value name="TFMT_I420_V" value="0x1b"/>
+
+       <value name="TFMT_ATC_RGB" value="0x20"/>
+       <value name="TFMT_ATC_RGBA_EXPLICIT" value="0x21"/>
+       <value name="TFMT_ETC1" value="0x22"/>
+       <value name="TFMT_ATC_RGBA_INTERPOLATED" value="0x23"/>
+
+       <value name="TFMT_DXT1" value="0x24"/>
+       <value name="TFMT_DXT3" value="0x25"/>
+       <value name="TFMT_DXT5" value="0x26"/>
+
+       <value name="TFMT_2_10_10_10_UNORM" value="0x28"/>
+       <value name="TFMT_10_10_10_2_UNORM" value="0x29"/>
+       <value name="TFMT_9_9_9_E5_FLOAT" value="0x2a"/>
+       <value name="TFMT_11_11_10_FLOAT" value="0x2b"/>
+       <value name="TFMT_A8_UNORM" value="0x2c"/>    <!-- GL_ALPHA -->
+       <value name="TFMT_L8_UNORM" value="0x2d"/>
+       <value name="TFMT_L8_A8_UNORM" value="0x2f"/> <!-- GL_LUMINANCE_ALPHA -->
+
+       <!--
+               NOTE: GL_ALPHA and GL_LUMINANCE_ALPHA aren't handled in a similar way
+               to float16, float32.. but they seem to use non-standard swizzle too..
+               perhaps we can ditch that if the pattern follows of 0xn0, 0xn1, 0xn2,
+               0xn3 for 1, 2, 3, 4 components respectively..
+
+               Only formats filled in below are the ones that have been observed by
+               the blob or tested.. you can guess what the missing ones are..
+        -->
+
+       <value name="TFMT_8_UNORM" value="0x30"/>     <!-- GL_LUMINANCE -->
+       <value name="TFMT_8_8_UNORM" value="0x31"/>
+       <value name="TFMT_8_8_8_UNORM" value="0x32"/>
+       <value name="TFMT_8_8_8_8_UNORM" value="0x33"/>
+
+       <value name="TFMT_8_SNORM" value="0x34"/>
+       <value name="TFMT_8_8_SNORM" value="0x35"/>
+       <value name="TFMT_8_8_8_SNORM" value="0x36"/>
+       <value name="TFMT_8_8_8_8_SNORM" value="0x37"/>
+
+       <value name="TFMT_8_UINT" value="0x38"/>
+       <value name="TFMT_8_8_UINT" value="0x39"/>
+       <value name="TFMT_8_8_8_UINT" value="0x3a"/>
+       <value name="TFMT_8_8_8_8_UINT" value="0x3b"/>
+
+       <value name="TFMT_8_SINT" value="0x3c"/>
+       <value name="TFMT_8_8_SINT" value="0x3d"/>
+       <value name="TFMT_8_8_8_SINT" value="0x3e"/>
+       <value name="TFMT_8_8_8_8_SINT" value="0x3f"/>
+
+       <value name="TFMT_16_FLOAT" value="0x40"/>
+       <value name="TFMT_16_16_FLOAT" value="0x41"/>
+       <!-- TFMT_FLOAT_16_16_16 -->
+       <value name="TFMT_16_16_16_16_FLOAT" value="0x43"/>
+
+       <value name="TFMT_16_UINT" value="0x44"/>
+       <value name="TFMT_16_16_UINT" value="0x45"/>
+       <value name="TFMT_16_16_16_16_UINT" value="0x47"/>
+
+       <value name="TFMT_16_SINT" value="0x48"/>
+       <value name="TFMT_16_16_SINT" value="0x49"/>
+       <value name="TFMT_16_16_16_16_SINT" value="0x4b"/>
+
+       <value name="TFMT_16_UNORM" value="0x4c"/>
+       <value name="TFMT_16_16_UNORM" value="0x4d"/>
+       <value name="TFMT_16_16_16_16_UNORM" value="0x4f"/>
+
+       <value name="TFMT_16_SNORM" value="0x50"/>
+       <value name="TFMT_16_16_SNORM" value="0x51"/>
+       <value name="TFMT_16_16_16_16_SNORM" value="0x53"/>
+
+       <value name="TFMT_32_FLOAT" value="0x54"/>
+       <value name="TFMT_32_32_FLOAT" value="0x55"/>
+       <!-- TFMT_32_32_32_FLOAT -->
+       <value name="TFMT_32_32_32_32_FLOAT" value="0x57"/>
+
+       <value name="TFMT_32_UINT" value="0x58"/>
+       <value name="TFMT_32_32_UINT" value="0x59"/>
+       <value name="TFMT_32_32_32_32_UINT" value="0x5b"/>
+
+       <value name="TFMT_32_SINT" value="0x5c"/>
+       <value name="TFMT_32_32_SINT" value="0x5d"/>
+       <value name="TFMT_32_32_32_32_SINT" value="0x5f"/>
+
+       <value name="TFMT_2_10_10_10_UINT" value="0x60"/>
+       <value name="TFMT_10_10_10_2_UINT" value="0x61"/>
+
+       <value name="TFMT_ETC2_RG11_SNORM" value="0x70"/>
+       <value name="TFMT_ETC2_RG11_UNORM" value="0x71"/>
+       <value name="TFMT_ETC2_R11_SNORM" value="0x72"/>
+       <value name="TFMT_ETC2_R11_UNORM" value="0x73"/>
+       <value name="TFMT_ETC2_RGBA8" value="0x74"/>
+       <value name="TFMT_ETC2_RGB8A1" value="0x75"/>
+       <value name="TFMT_ETC2_RGB8" value="0x76"/>
+
+       <value name="TFMT_NONE" value="0xff"/>
+</enum>
+
+<enum name="a3xx_color_fmt">
+       <value name="RB_R5G6B5_UNORM"       value="0x00"/>
+       <value name="RB_R5G5B5A1_UNORM"     value="0x01"/>
+       <value name="RB_R4G4B4A4_UNORM"     value="0x03"/>
+       <value name="RB_R8G8B8_UNORM"       value="0x04"/>
+       <value name="RB_R8G8B8A8_UNORM"     value="0x08"/>
+       <value name="RB_R8G8B8A8_SNORM"     value="0x09"/>
+       <value name="RB_R8G8B8A8_UINT"      value="0x0a"/>
+       <value name="RB_R8G8B8A8_SINT"      value="0x0b"/>
+       <value name="RB_R8G8_UNORM"         value="0x0c"/>
+       <value name="RB_R8G8_SNORM"         value="0x0d"/>
+       <value name="RB_R8G8_UINT"          value="0x0e"/>
+       <value name="RB_R8G8_SINT"          value="0x0f"/>
+       <value name="RB_R10G10B10A2_UNORM"  value="0x10"/>
+       <value name="RB_A2R10G10B10_UNORM"  value="0x11"/>
+       <value name="RB_R10G10B10A2_UINT"   value="0x12"/>
+       <value name="RB_A2R10G10B10_UINT"   value="0x13"/>
+
+       <value name="RB_A8_UNORM"           value="0x14"/>
+       <value name="RB_R8_UNORM"           value="0x15"/>
+
+       <value name="RB_R16_FLOAT"          value="0x18"/>
+       <value name="RB_R16G16_FLOAT"       value="0x19"/>
+       <value name="RB_R16G16B16A16_FLOAT" value="0x1b"/> <!-- GL_HALF_FLOAT_OES -->
+       <value name="RB_R11G11B10_FLOAT"    value="0x1c"/>
+
+       <value name="RB_R16_SNORM"          value="0x20"/>
+       <value name="RB_R16G16_SNORM"       value="0x21"/>
+       <value name="RB_R16G16B16A16_SNORM" value="0x23"/>
+
+       <value name="RB_R16_UNORM"          value="0x24"/>
+       <value name="RB_R16G16_UNORM"       value="0x25"/>
+       <value name="RB_R16G16B16A16_UNORM" value="0x27"/>
+
+       <value name="RB_R16_SINT"           value="0x28"/>
+       <value name="RB_R16G16_SINT"        value="0x29"/>
+       <value name="RB_R16G16B16A16_SINT"  value="0x2b"/>
+
+       <value name="RB_R16_UINT"           value="0x2c"/>
+       <value name="RB_R16G16_UINT"        value="0x2d"/>
+       <value name="RB_R16G16B16A16_UINT"  value="0x2f"/>
+
+       <value name="RB_R32_FLOAT"          value="0x30"/>
+       <value name="RB_R32G32_FLOAT"       value="0x31"/>
+       <value name="RB_R32G32B32A32_FLOAT" value="0x33"/> <!-- GL_FLOAT -->
+
+       <value name="RB_R32_SINT"           value="0x34"/>
+       <value name="RB_R32G32_SINT"        value="0x35"/>
+       <value name="RB_R32G32B32A32_SINT"  value="0x37"/>
+
+       <value name="RB_R32_UINT"           value="0x38"/>
+       <value name="RB_R32G32_UINT"        value="0x39"/>
+       <value name="RB_R32G32B32A32_UINT"  value="0x3b"/>
+
+       <value name="RB_NONE"               value="0xff"/>
+</enum>
+
+<enum name="a3xx_cp_perfcounter_select">
+       <value value="0x00" name="CP_ALWAYS_COUNT"/>
+       <value value="0x03" name="CP_AHB_PFPTRANS_WAIT"/>
+       <value value="0x06" name="CP_AHB_NRTTRANS_WAIT"/>
+       <value value="0x08" name="CP_CSF_NRT_READ_WAIT"/>
+       <value value="0x09" name="CP_CSF_I1_FIFO_FULL"/>
+       <value value="0x0a" name="CP_CSF_I2_FIFO_FULL"/>
+       <value value="0x0b" name="CP_CSF_ST_FIFO_FULL"/>
+       <value value="0x0c" name="CP_RESERVED_12"/>
+       <value value="0x0d" name="CP_CSF_RING_ROQ_FULL"/>
+       <value value="0x0e" name="CP_CSF_I1_ROQ_FULL"/>
+       <value value="0x0f" name="CP_CSF_I2_ROQ_FULL"/>
+       <value value="0x10" name="CP_CSF_ST_ROQ_FULL"/>
+       <value value="0x11" name="CP_RESERVED_17"/>
+       <value value="0x12" name="CP_MIU_TAG_MEM_FULL"/>
+       <value value="0x16" name="CP_MIU_NRT_WRITE_STALLED"/>
+       <value value="0x17" name="CP_MIU_NRT_READ_STALLED"/>
+       <value value="0x1a" name="CP_ME_REGS_RB_DONE_FIFO_FULL"/>
+       <value value="0x1b" name="CP_ME_REGS_VS_EVENT_FIFO_FULL"/>
+       <value value="0x1c" name="CP_ME_REGS_PS_EVENT_FIFO_FULL"/>
+       <value value="0x1d" name="CP_ME_REGS_CF_EVENT_FIFO_FULL"/>
+       <value value="0x1e" name="CP_ME_MICRO_RB_STARVED"/>
+       <value value="0x28" name="CP_AHB_RBBM_DWORD_SENT"/>
+       <value value="0x29" name="CP_ME_BUSY_CLOCKS"/>
+       <value value="0x2a" name="CP_ME_WAIT_CONTEXT_AVAIL"/>
+       <value value="0x2b" name="CP_PFP_TYPE0_PACKET"/>
+       <value value="0x2c" name="CP_PFP_TYPE3_PACKET"/>
+       <value value="0x2d" name="CP_CSF_RB_WPTR_NEQ_RPTR"/>
+       <value value="0x2e" name="CP_CSF_I1_SIZE_NEQ_ZERO"/>
+       <value value="0x2f" name="CP_CSF_I2_SIZE_NEQ_ZERO"/>
+       <value value="0x30" name="CP_CSF_RBI1I2_FETCHING"/>
+</enum>
+
+<enum name="a3xx_gras_tse_perfcounter_select">
+       <value value="0x00" name="GRAS_TSEPERF_INPUT_PRIM"/>
+       <value value="0x01" name="GRAS_TSEPERF_INPUT_NULL_PRIM"/>
+       <value value="0x02" name="GRAS_TSEPERF_TRIVAL_REJ_PRIM"/>
+       <value value="0x03" name="GRAS_TSEPERF_CLIPPED_PRIM"/>
+       <value value="0x04" name="GRAS_TSEPERF_NEW_PRIM"/>
+       <value value="0x05" name="GRAS_TSEPERF_ZERO_AREA_PRIM"/>
+       <value value="0x06" name="GRAS_TSEPERF_FACENESS_CULLED_PRIM"/>
+       <value value="0x07" name="GRAS_TSEPERF_ZERO_PIXEL_PRIM"/>
+       <value value="0x08" name="GRAS_TSEPERF_OUTPUT_NULL_PRIM"/>
+       <value value="0x09" name="GRAS_TSEPERF_OUTPUT_VISIBLE_PRIM"/>
+       <value value="0x0a" name="GRAS_TSEPERF_PRE_CLIP_PRIM"/>
+       <value value="0x0b" name="GRAS_TSEPERF_POST_CLIP_PRIM"/>
+       <value value="0x0c" name="GRAS_TSEPERF_WORKING_CYCLES"/>
+       <value value="0x0d" name="GRAS_TSEPERF_PC_STARVE"/>
+       <value value="0x0e" name="GRAS_TSERASPERF_STALL"/>
+</enum>
+
+<enum name="a3xx_gras_ras_perfcounter_select">
+       <value value="0x00" name="GRAS_RASPERF_16X16_TILES"/>
+       <value value="0x01" name="GRAS_RASPERF_8X8_TILES"/>
+       <value value="0x02" name="GRAS_RASPERF_4X4_TILES"/>
+       <value value="0x03" name="GRAS_RASPERF_WORKING_CYCLES"/>
+       <value value="0x04" name="GRAS_RASPERF_STALL_CYCLES_BY_RB"/>
+       <value value="0x05" name="GRAS_RASPERF_STALL_CYCLES_BY_VSC"/>
+       <value value="0x06" name="GRAS_RASPERF_STARVE_CYCLES_BY_TSE"/>
+</enum>
+
+<enum name="a3xx_hlsq_perfcounter_select">
+       <value value="0x00" name="HLSQ_PERF_SP_VS_CONSTANT"/>
+       <value value="0x01" name="HLSQ_PERF_SP_VS_INSTRUCTIONS"/>
+       <value value="0x02" name="HLSQ_PERF_SP_FS_CONSTANT"/>
+       <value value="0x03" name="HLSQ_PERF_SP_FS_INSTRUCTIONS"/>
+       <value value="0x04" name="HLSQ_PERF_TP_STATE"/>
+       <value value="0x05" name="HLSQ_PERF_QUADS"/>
+       <value value="0x06" name="HLSQ_PERF_PIXELS"/>
+       <value value="0x07" name="HLSQ_PERF_VERTICES"/>
+       <value value="0x08" name="HLSQ_PERF_FS8_THREADS"/>
+       <value value="0x09" name="HLSQ_PERF_FS16_THREADS"/>
+       <value value="0x0a" name="HLSQ_PERF_FS32_THREADS"/>
+       <value value="0x0b" name="HLSQ_PERF_VS8_THREADS"/>
+       <value value="0x0c" name="HLSQ_PERF_VS16_THREADS"/>
+       <value value="0x0d" name="HLSQ_PERF_SP_VS_DATA_BYTES"/>
+       <value value="0x0e" name="HLSQ_PERF_SP_FS_DATA_BYTES"/>
+       <value value="0x0f" name="HLSQ_PERF_ACTIVE_CYCLES"/>
+       <value value="0x10" name="HLSQ_PERF_STALL_CYCLES_SP_STATE"/>
+       <value value="0x11" name="HLSQ_PERF_STALL_CYCLES_SP_VS"/>
+       <value value="0x12" name="HLSQ_PERF_STALL_CYCLES_SP_FS"/>
+       <value value="0x13" name="HLSQ_PERF_STALL_CYCLES_UCHE"/>
+       <value value="0x14" name="HLSQ_PERF_RBBM_LOAD_CYCLES"/>
+       <value value="0x15" name="HLSQ_PERF_DI_TO_VS_START_SP0"/>
+       <value value="0x16" name="HLSQ_PERF_DI_TO_FS_START_SP0"/>
+       <value value="0x17" name="HLSQ_PERF_VS_START_TO_DONE_SP0"/>
+       <value value="0x18" name="HLSQ_PERF_FS_START_TO_DONE_SP0"/>
+       <value value="0x19" name="HLSQ_PERF_SP_STATE_COPY_CYCLES_VS"/>
+       <value value="0x1a" name="HLSQ_PERF_SP_STATE_COPY_CYCLES_FS"/>
+       <value value="0x1b" name="HLSQ_PERF_UCHE_LATENCY_CYCLES"/>
+       <value value="0x1c" name="HLSQ_PERF_UCHE_LATENCY_COUNT"/>
+</enum>
+
+<enum name="a3xx_pc_perfcounter_select">
+       <value value="0x00" name="PC_PCPERF_VISIBILITY_STREAMS"/>
+       <value value="0x01" name="PC_PCPERF_TOTAL_INSTANCES"/>
+       <value value="0x02" name="PC_PCPERF_PRIMITIVES_PC_VPC"/>
+       <value value="0x03" name="PC_PCPERF_PRIMITIVES_KILLED_BY_VS"/>
+       <value value="0x04" name="PC_PCPERF_PRIMITIVES_VISIBLE_BY_VS"/>
+       <value value="0x05" name="PC_PCPERF_DRAWCALLS_KILLED_BY_VS"/>
+       <value value="0x06" name="PC_PCPERF_DRAWCALLS_VISIBLE_BY_VS"/>
+       <value value="0x07" name="PC_PCPERF_VERTICES_TO_VFD"/>
+       <value value="0x08" name="PC_PCPERF_REUSED_VERTICES"/>
+       <value value="0x09" name="PC_PCPERF_CYCLES_STALLED_BY_VFD"/>
+       <value value="0x0a" name="PC_PCPERF_CYCLES_STALLED_BY_TSE"/>
+       <value value="0x0b" name="PC_PCPERF_CYCLES_STALLED_BY_VBIF"/>
+       <value value="0x0c" name="PC_PCPERF_CYCLES_IS_WORKING"/>
+</enum>
+
+<enum name="a3xx_rb_perfcounter_select">
+       <value value="0x00" name="RB_RBPERF_ACTIVE_CYCLES_ANY"/>
+       <value value="0x01" name="RB_RBPERF_ACTIVE_CYCLES_ALL"/>
+       <value value="0x02" name="RB_RBPERF_STARVE_CYCLES_BY_SP"/>
+       <value value="0x03" name="RB_RBPERF_STARVE_CYCLES_BY_RAS"/>
+       <value value="0x04" name="RB_RBPERF_STARVE_CYCLES_BY_MARB"/>
+       <value value="0x05" name="RB_RBPERF_STALL_CYCLES_BY_MARB"/>
+       <value value="0x06" name="RB_RBPERF_STALL_CYCLES_BY_HLSQ"/>
+       <value value="0x07" name="RB_RBPERF_RB_MARB_DATA"/>
+       <value value="0x08" name="RB_RBPERF_SP_RB_QUAD"/>
+       <value value="0x09" name="RB_RBPERF_RAS_EARLY_Z_QUADS"/>
+       <value value="0x0a" name="RB_RBPERF_GMEM_CH0_READ"/>
+       <value value="0x0b" name="RB_RBPERF_GMEM_CH1_READ"/>
+       <value value="0x0c" name="RB_RBPERF_GMEM_CH0_WRITE"/>
+       <value value="0x0d" name="RB_RBPERF_GMEM_CH1_WRITE"/>
+       <value value="0x0e" name="RB_RBPERF_CP_CONTEXT_DONE"/>
+       <value value="0x0f" name="RB_RBPERF_CP_CACHE_FLUSH"/>
+       <value value="0x10" name="RB_RBPERF_CP_ZPASS_DONE"/>
+</enum>
+
+<enum name="a3xx_rbbm_perfcounter_select">
+       <value value="0" name="RBBM_ALAWYS_ON"/>
+       <value value="1" name="RBBM_VBIF_BUSY"/>
+       <value value="2" name="RBBM_TSE_BUSY"/>
+       <value value="3" name="RBBM_RAS_BUSY"/>
+       <value value="4" name="RBBM_PC_DCALL_BUSY"/>
+       <value value="5" name="RBBM_PC_VSD_BUSY"/>
+       <value value="6" name="RBBM_VFD_BUSY"/>
+       <value value="7" name="RBBM_VPC_BUSY"/>
+       <value value="8" name="RBBM_UCHE_BUSY"/>
+       <value value="9" name="RBBM_VSC_BUSY"/>
+       <value value="10" name="RBBM_HLSQ_BUSY"/>
+       <value value="11" name="RBBM_ANY_RB_BUSY"/>
+       <value value="12" name="RBBM_ANY_TEX_BUSY"/>
+       <value value="13" name="RBBM_ANY_USP_BUSY"/>
+       <value value="14" name="RBBM_ANY_MARB_BUSY"/>
+       <value value="15" name="RBBM_ANY_ARB_BUSY"/>
+       <value value="16" name="RBBM_AHB_STATUS_BUSY"/>
+       <value value="17" name="RBBM_AHB_STATUS_STALLED"/>
+       <value value="18" name="RBBM_AHB_STATUS_TXFR"/>
+       <value value="19" name="RBBM_AHB_STATUS_TXFR_SPLIT"/>
+       <value value="20" name="RBBM_AHB_STATUS_TXFR_ERROR"/>
+       <value value="21" name="RBBM_AHB_STATUS_LONG_STALL"/>
+       <value value="22" name="RBBM_RBBM_STATUS_MASKED"/>
+</enum>
+
+<enum name="a3xx_sp_perfcounter_select">
+       <value value="0x00" name="SP_LM_LOAD_INSTRUCTIONS"/>
+       <value value="0x01" name="SP_LM_STORE_INSTRUCTIONS"/>
+       <value value="0x02" name="SP_LM_ATOMICS"/>
+       <value value="0x03" name="SP_UCHE_LOAD_INSTRUCTIONS"/>
+       <value value="0x04" name="SP_UCHE_STORE_INSTRUCTIONS"/>
+       <value value="0x05" name="SP_UCHE_ATOMICS"/>
+       <value value="0x06" name="SP_VS_TEX_INSTRUCTIONS"/>
+       <value value="0x07" name="SP_VS_CFLOW_INSTRUCTIONS"/>
+       <value value="0x08" name="SP_VS_EFU_INSTRUCTIONS"/>
+       <value value="0x09" name="SP_VS_FULL_ALU_INSTRUCTIONS"/>
+       <value value="0x0a" name="SP_VS_HALF_ALU_INSTRUCTIONS"/>
+       <value value="0x0b" name="SP_FS_TEX_INSTRUCTIONS"/>
+       <value value="0x0c" name="SP_FS_CFLOW_INSTRUCTIONS"/>
+       <value value="0x0d" name="SP_FS_EFU_INSTRUCTIONS"/>
+       <value value="0x0e" name="SP_FS_FULL_ALU_INSTRUCTIONS"/>
+       <value value="0x0f" name="SP_FS_HALF_ALU_INSTRUCTIONS"/>
+       <value value="0x10" name="SP_FS_BARY_INSTRUCTIONS"/>
+       <value value="0x11" name="SP_VS_INSTRUCTIONS"/>
+       <value value="0x12" name="SP_FS_INSTRUCTIONS"/>
+       <value value="0x13" name="SP_ADDR_LOCK_COUNT"/>
+       <value value="0x14" name="SP_UCHE_READ_TRANS"/>
+       <value value="0x15" name="SP_UCHE_WRITE_TRANS"/>
+       <value value="0x16" name="SP_EXPORT_VPC_TRANS"/>
+       <value value="0x17" name="SP_EXPORT_RB_TRANS"/>
+       <value value="0x18" name="SP_PIXELS_KILLED"/>
+       <value value="0x19" name="SP_ICL1_REQUESTS"/>
+       <value value="0x1a" name="SP_ICL1_MISSES"/>
+       <value value="0x1b" name="SP_ICL0_REQUESTS"/>
+       <value value="0x1c" name="SP_ICL0_MISSES"/>
+       <value value="0x1d" name="SP_ALU_ACTIVE_CYCLES"/>
+       <value value="0x1e" name="SP_EFU_ACTIVE_CYCLES"/>
+       <value value="0x1f" name="SP_STALL_CYCLES_BY_VPC"/>
+       <value value="0x20" name="SP_STALL_CYCLES_BY_TP"/>
+       <value value="0x21" name="SP_STALL_CYCLES_BY_UCHE"/>
+       <value value="0x22" name="SP_STALL_CYCLES_BY_RB"/>
+       <value value="0x23" name="SP_ACTIVE_CYCLES_ANY"/>
+       <value value="0x24" name="SP_ACTIVE_CYCLES_ALL"/>
+</enum>
+
+<enum name="a3xx_tp_perfcounter_select">
+       <value value="0x00" name="TPL1_TPPERF_L1_REQUESTS"/>
+       <value value="0x01" name="TPL1_TPPERF_TP0_L1_REQUESTS"/>
+       <value value="0x02" name="TPL1_TPPERF_TP0_L1_MISSES"/>
+       <value value="0x03" name="TPL1_TPPERF_TP1_L1_REQUESTS"/>
+       <value value="0x04" name="TPL1_TPPERF_TP1_L1_MISSES"/>
+       <value value="0x05" name="TPL1_TPPERF_TP2_L1_REQUESTS"/>
+       <value value="0x06" name="TPL1_TPPERF_TP2_L1_MISSES"/>
+       <value value="0x07" name="TPL1_TPPERF_TP3_L1_REQUESTS"/>
+       <value value="0x08" name="TPL1_TPPERF_TP3_L1_MISSES"/>
+       <value value="0x09" name="TPL1_TPPERF_OUTPUT_TEXELS_POINT"/>
+       <value value="0x0a" name="TPL1_TPPERF_OUTPUT_TEXELS_BILINEAR"/>
+       <value value="0x0b" name="TPL1_TPPERF_OUTPUT_TEXELS_MIP"/>
+       <value value="0x0c" name="TPL1_TPPERF_OUTPUT_TEXELS_ANISO"/>
+       <value value="0x0d" name="TPL1_TPPERF_BILINEAR_OPS"/>
+       <value value="0x0e" name="TPL1_TPPERF_QUADSQUADS_OFFSET"/>
+       <value value="0x0f" name="TPL1_TPPERF_QUADQUADS_SHADOW"/>
+       <value value="0x10" name="TPL1_TPPERF_QUADS_ARRAY"/>
+       <value value="0x11" name="TPL1_TPPERF_QUADS_PROJECTION"/>
+       <value value="0x12" name="TPL1_TPPERF_QUADS_GRADIENT"/>
+       <value value="0x13" name="TPL1_TPPERF_QUADS_1D2D"/>
+       <value value="0x14" name="TPL1_TPPERF_QUADS_3DCUBE"/>
+       <value value="0x15" name="TPL1_TPPERF_ZERO_LOD"/>
+       <value value="0x16" name="TPL1_TPPERF_OUTPUT_TEXELS"/>
+       <value value="0x17" name="TPL1_TPPERF_ACTIVE_CYCLES_ANY"/>
+       <value value="0x18" name="TPL1_TPPERF_ACTIVE_CYCLES_ALL"/>
+       <value value="0x19" name="TPL1_TPPERF_STALL_CYCLES_BY_ARB"/>
+       <value value="0x1a" name="TPL1_TPPERF_LATENCY"/>
+       <value value="0x1b" name="TPL1_TPPERF_LATENCY_TRANS"/>
+</enum>
+
+<enum name="a3xx_vfd_perfcounter_select">
+       <value value="0" name="VFD_PERF_UCHE_BYTE_FETCHED"/>
+       <value value="1" name="VFD_PERF_UCHE_TRANS"/>
+       <value value="2" name="VFD_PERF_VPC_BYPASS_COMPONENTS"/>
+       <value value="3" name="VFD_PERF_FETCH_INSTRUCTIONS"/>
+       <value value="4" name="VFD_PERF_DECODE_INSTRUCTIONS"/>
+       <value value="5" name="VFD_PERF_ACTIVE_CYCLES"/>
+       <value value="6" name="VFD_PERF_STALL_CYCLES_UCHE"/>
+       <value value="7" name="VFD_PERF_STALL_CYCLES_HLSQ"/>
+       <value value="8" name="VFD_PERF_STALL_CYCLES_VPC_BYPASS"/>
+       <value value="9" name="VFD_PERF_STALL_CYCLES_VPC_ALLOC"/>
+</enum>
+
+<enum name="a3xx_vpc_perfcounter_select">
+       <value value="0" name="VPC_PERF_SP_LM_PRIMITIVES"/>
+       <value value="1" name="VPC_PERF_COMPONENTS_FROM_SP"/>
+       <value value="2" name="VPC_PERF_SP_LM_COMPONENTS"/>
+       <value value="3" name="VPC_PERF_ACTIVE_CYCLES"/>
+       <value value="4" name="VPC_PERF_STALL_CYCLES_LM"/>
+       <value value="5" name="VPC_PERF_STALL_CYCLES_RAS"/>
+</enum>
+
+<enum name="a3xx_uche_perfcounter_select">
+       <value value="0x00" name="UCHE_UCHEPERF_VBIF_READ_BEATS_TP"/>
+       <value value="0x01" name="UCHE_UCHEPERF_VBIF_READ_BEATS_VFD"/>
+       <value value="0x02" name="UCHE_UCHEPERF_VBIF_READ_BEATS_HLSQ"/>
+       <value value="0x03" name="UCHE_UCHEPERF_VBIF_READ_BEATS_MARB"/>
+       <value value="0x04" name="UCHE_UCHEPERF_VBIF_READ_BEATS_SP"/>
+       <value value="0x08" name="UCHE_UCHEPERF_READ_REQUESTS_TP"/>
+       <value value="0x09" name="UCHE_UCHEPERF_READ_REQUESTS_VFD"/>
+       <value value="0x0a" name="UCHE_UCHEPERF_READ_REQUESTS_HLSQ"/>
+       <value value="0x0b" name="UCHE_UCHEPERF_READ_REQUESTS_MARB"/>
+       <value value="0x0c" name="UCHE_UCHEPERF_READ_REQUESTS_SP"/>
+       <value value="0x0d" name="UCHE_UCHEPERF_WRITE_REQUESTS_MARB"/>
+       <value value="0x0e" name="UCHE_UCHEPERF_WRITE_REQUESTS_SP"/>
+       <value value="0x0f" name="UCHE_UCHEPERF_TAG_CHECK_FAILS"/>
+       <value value="0x10" name="UCHE_UCHEPERF_EVICTS"/>
+       <value value="0x11" name="UCHE_UCHEPERF_FLUSHES"/>
+       <value value="0x12" name="UCHE_UCHEPERF_VBIF_LATENCY_CYCLES"/>
+       <value value="0x13" name="UCHE_UCHEPERF_VBIF_LATENCY_SAMPLES"/>
+       <value value="0x14" name="UCHE_UCHEPERF_ACTIVE_CYCLES"/>
+</enum>
+
+<enum name="a3xx_intp_mode">
+       <value name="SMOOTH" value="0"/>
+       <value name="FLAT" value="1"/>
+       <value name="ZERO" value="2"/>
+       <value name="ONE" value="3"/>
+</enum>
+
+<enum name="a3xx_repl_mode">
+       <value name="S" value="1"/>
+       <value name="T" value="2"/>
+       <value name="ONE_T" value="3"/>
+</enum>
+
+<domain name="A3XX" width="32">
+       <!-- RBBM registers -->
+       <reg32 offset="0x0000" name="RBBM_HW_VERSION"/>
+       <reg32 offset="0x0001" name="RBBM_HW_RELEASE"/>
+       <reg32 offset="0x0002" name="RBBM_HW_CONFIGURATION"/>
+       <reg32 offset="0x0010" name="RBBM_CLOCK_CTL"/>
+       <reg32 offset="0x0012" name="RBBM_SP_HYST_CNT"/>
+       <reg32 offset="0x0018" name="RBBM_SW_RESET_CMD"/>
+       <reg32 offset="0x0020" name="RBBM_AHB_CTL0"/>
+       <reg32 offset="0x0021" name="RBBM_AHB_CTL1"/>
+       <reg32 offset="0x0022" name="RBBM_AHB_CMD"/>
+       <reg32 offset="0x0027" name="RBBM_AHB_ERROR_STATUS"/>
+       <reg32 offset="0x002e" name="RBBM_GPR0_CTL"/>
+       <reg32 offset="0x0030" name="RBBM_STATUS">
+               <bitfield name="HI_BUSY" pos="0" type="boolean"/>
+               <bitfield name="CP_ME_BUSY" pos="1" type="boolean"/>
+               <bitfield name="CP_PFP_BUSY" pos="2" type="boolean"/>
+               <bitfield name="CP_NRT_BUSY" pos="14" type="boolean"/>
+               <bitfield name="VBIF_BUSY" pos="15" type="boolean"/>
+               <bitfield name="TSE_BUSY" pos="16" type="boolean"/>
+               <bitfield name="RAS_BUSY" pos="17" type="boolean"/>
+               <bitfield name="RB_BUSY" pos="18" type="boolean"/>
+               <bitfield name="PC_DCALL_BUSY" pos="19" type="boolean"/>
+               <bitfield name="PC_VSD_BUSY" pos="20" type="boolean"/>
+               <bitfield name="VFD_BUSY" pos="21" type="boolean"/>
+               <bitfield name="VPC_BUSY" pos="22" type="boolean"/>
+               <bitfield name="UCHE_BUSY" pos="23" type="boolean"/>
+               <bitfield name="SP_BUSY" pos="24" type="boolean"/>
+               <bitfield name="TPL1_BUSY" pos="25" type="boolean"/>
+               <bitfield name="MARB_BUSY" pos="26" type="boolean"/>
+               <bitfield name="VSC_BUSY" pos="27" type="boolean"/>
+               <bitfield name="ARB_BUSY" pos="28" type="boolean"/>
+               <bitfield name="HLSQ_BUSY" pos="29" type="boolean"/>
+               <bitfield name="GPU_BUSY_NOHC" pos="30" type="boolean"/>
+               <bitfield name="GPU_BUSY" pos="31" type="boolean"/>
+       </reg32>
+       <!-- used in fw CP_WAIT_FOR_IDLE, similar to NQWAIT_UNTIL on a2xx: -->
+       <reg32 offset="0x0040" name="RBBM_NQWAIT_UNTIL"/>
+       <reg32 offset="0x0033" name="RBBM_WAIT_IDLE_CLOCKS_CTL"/>
+       <reg32 offset="0x0050" name="RBBM_INTERFACE_HANG_INT_CTL"/>
+       <reg32 offset="0x0051" name="RBBM_INTERFACE_HANG_MASK_CTL0"/>
+       <reg32 offset="0x0054" name="RBBM_INTERFACE_HANG_MASK_CTL1"/>
+       <reg32 offset="0x0057" name="RBBM_INTERFACE_HANG_MASK_CTL2"/>
+       <reg32 offset="0x005a" name="RBBM_INTERFACE_HANG_MASK_CTL3"/>
+
+       <bitset name="A3XX_INT0">
+               <bitfield name="RBBM_GPU_IDLE" pos="0" type="boolean"/>
+               <bitfield name="RBBM_AHB_ERROR" pos="1" type="boolean"/>
+               <bitfield name="RBBM_REG_TIMEOUT" pos="2" type="boolean"/>
+               <bitfield name="RBBM_ME_MS_TIMEOUT" pos="3" type="boolean"/>
+               <bitfield name="RBBM_PFP_MS_TIMEOUT" pos="4" type="boolean"/>
+               <bitfield name="RBBM_ATB_BUS_OVERFLOW" pos="5" type="boolean"/>
+               <bitfield name="VFD_ERROR" pos="6" type="boolean"/>
+               <bitfield name="CP_SW_INT" pos="7" type="boolean"/>
+               <bitfield name="CP_T0_PACKET_IN_IB" pos="8" type="boolean"/>
+               <bitfield name="CP_OPCODE_ERROR" pos="9" type="boolean"/>
+               <bitfield name="CP_RESERVED_BIT_ERROR" pos="10" type="boolean"/>
+               <bitfield name="CP_HW_FAULT" pos="11" type="boolean"/>
+               <bitfield name="CP_DMA" pos="12" type="boolean"/>
+               <bitfield name="CP_IB2_INT" pos="13" type="boolean"/>
+               <bitfield name="CP_IB1_INT" pos="14" type="boolean"/>
+               <bitfield name="CP_RB_INT" pos="15" type="boolean"/>
+               <bitfield name="CP_REG_PROTECT_FAULT" pos="16" type="boolean"/>
+               <bitfield name="CP_RB_DONE_TS" pos="17" type="boolean"/>
+               <bitfield name="CP_VS_DONE_TS" pos="18" type="boolean"/>
+               <bitfield name="CP_PS_DONE_TS" pos="19" type="boolean"/>
+               <bitfield name="CACHE_FLUSH_TS" pos="20" type="boolean"/>
+               <bitfield name="CP_AHB_ERROR_HALT" pos="21" type="boolean"/>
+               <bitfield name="MISC_HANG_DETECT" pos="24" type="boolean"/>
+               <bitfield name="UCHE_OOB_ACCESS" pos="25" type="boolean"/>
+       </bitset>
+
+
+       <!--
+               set in pm4 fw INVALID_JUMP_TABLE_ENTRY and CP_INTERRUPT (compare
+               to CP_INT_STATUS in a2xx firmware), so this seems to be the a3xx
+               way for fw to raise and irq:
+        -->
+       <reg32 offset="0x0060" name="RBBM_INT_SET_CMD" type="A3XX_INT0"/>
+       <reg32 offset="0x0061" name="RBBM_INT_CLEAR_CMD" type="A3XX_INT0"/>
+       <reg32 offset="0x0063" name="RBBM_INT_0_MASK" type="A3XX_INT0"/>
+       <reg32 offset="0x0064" name="RBBM_INT_0_STATUS" type="A3XX_INT0"/>
+       <reg32 offset="0x0080" name="RBBM_PERFCTR_CTL">
+               <bitfield name="ENABLE" pos="0" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x0081" name="RBBM_PERFCTR_LOAD_CMD0"/>
+       <reg32 offset="0x0082" name="RBBM_PERFCTR_LOAD_CMD1"/>
+       <reg32 offset="0x0084" name="RBBM_PERFCTR_LOAD_VALUE_LO"/>
+       <reg32 offset="0x0085" name="RBBM_PERFCTR_LOAD_VALUE_HI"/>
+       <reg32 offset="0x0086" name="RBBM_PERFCOUNTER0_SELECT" type="a3xx_rbbm_perfcounter_select"/>
+       <reg32 offset="0x0087" name="RBBM_PERFCOUNTER1_SELECT" type="a3xx_rbbm_perfcounter_select"/>
+       <reg32 offset="0x0088" name="RBBM_GPU_BUSY_MASKED"/>
+       <reg32 offset="0x0090" name="RBBM_PERFCTR_CP_0_LO"/>
+       <reg32 offset="0x0091" name="RBBM_PERFCTR_CP_0_HI"/>
+       <reg32 offset="0x0092" name="RBBM_PERFCTR_RBBM_0_LO"/>
+       <reg32 offset="0x0093" name="RBBM_PERFCTR_RBBM_0_HI"/>
+       <reg32 offset="0x0094" name="RBBM_PERFCTR_RBBM_1_LO"/>
+       <reg32 offset="0x0095" name="RBBM_PERFCTR_RBBM_1_HI"/>
+       <reg32 offset="0x0096" name="RBBM_PERFCTR_PC_0_LO"/>
+       <reg32 offset="0x0097" name="RBBM_PERFCTR_PC_0_HI"/>
+       <reg32 offset="0x0098" name="RBBM_PERFCTR_PC_1_LO"/>
+       <reg32 offset="0x0099" name="RBBM_PERFCTR_PC_1_HI"/>
+       <reg32 offset="0x009a" name="RBBM_PERFCTR_PC_2_LO"/>
+       <reg32 offset="0x009b" name="RBBM_PERFCTR_PC_2_HI"/>
+       <reg32 offset="0x009c" name="RBBM_PERFCTR_PC_3_LO"/>
+       <reg32 offset="0x009d" name="RBBM_PERFCTR_PC_3_HI"/>
+       <reg32 offset="0x009e" name="RBBM_PERFCTR_VFD_0_LO"/>
+       <reg32 offset="0x009f" name="RBBM_PERFCTR_VFD_0_HI"/>
+       <reg32 offset="0x00a0" name="RBBM_PERFCTR_VFD_1_LO"/>
+       <reg32 offset="0x00a1" name="RBBM_PERFCTR_VFD_1_HI"/>
+       <reg32 offset="0x00a2" name="RBBM_PERFCTR_HLSQ_0_LO"/>
+       <reg32 offset="0x00a3" name="RBBM_PERFCTR_HLSQ_0_HI"/>
+       <reg32 offset="0x00a4" name="RBBM_PERFCTR_HLSQ_1_LO"/>
+       <reg32 offset="0x00a5" name="RBBM_PERFCTR_HLSQ_1_HI"/>
+       <reg32 offset="0x00a6" name="RBBM_PERFCTR_HLSQ_2_LO"/>
+       <reg32 offset="0x00a7" name="RBBM_PERFCTR_HLSQ_2_HI"/>
+       <reg32 offset="0x00a8" name="RBBM_PERFCTR_HLSQ_3_LO"/>
+       <reg32 offset="0x00a9" name="RBBM_PERFCTR_HLSQ_3_HI"/>
+       <reg32 offset="0x00aa" name="RBBM_PERFCTR_HLSQ_4_LO"/>
+       <reg32 offset="0x00ab" name="RBBM_PERFCTR_HLSQ_4_HI"/>
+       <reg32 offset="0x00ac" name="RBBM_PERFCTR_HLSQ_5_LO"/>
+       <reg32 offset="0x00ad" name="RBBM_PERFCTR_HLSQ_5_HI"/>
+       <reg32 offset="0x00ae" name="RBBM_PERFCTR_VPC_0_LO"/>
+       <reg32 offset="0x00af" name="RBBM_PERFCTR_VPC_0_HI"/>
+       <reg32 offset="0x00b0" name="RBBM_PERFCTR_VPC_1_LO"/>
+       <reg32 offset="0x00b1" name="RBBM_PERFCTR_VPC_1_HI"/>
+       <reg32 offset="0x00b2" name="RBBM_PERFCTR_TSE_0_LO"/>
+       <reg32 offset="0x00b3" name="RBBM_PERFCTR_TSE_0_HI"/>
+       <reg32 offset="0x00b4" name="RBBM_PERFCTR_TSE_1_LO"/>
+       <reg32 offset="0x00b5" name="RBBM_PERFCTR_TSE_1_HI"/>
+       <reg32 offset="0x00b6" name="RBBM_PERFCTR_RAS_0_LO"/>
+       <reg32 offset="0x00b7" name="RBBM_PERFCTR_RAS_0_HI"/>
+       <reg32 offset="0x00b8" name="RBBM_PERFCTR_RAS_1_LO"/>
+       <reg32 offset="0x00b9" name="RBBM_PERFCTR_RAS_1_HI"/>
+       <reg32 offset="0x00ba" name="RBBM_PERFCTR_UCHE_0_LO"/>
+       <reg32 offset="0x00bb" name="RBBM_PERFCTR_UCHE_0_HI"/>
+       <reg32 offset="0x00bc" name="RBBM_PERFCTR_UCHE_1_LO"/>
+       <reg32 offset="0x00bd" name="RBBM_PERFCTR_UCHE_1_HI"/>
+       <reg32 offset="0x00be" name="RBBM_PERFCTR_UCHE_2_LO"/>
+       <reg32 offset="0x00bf" name="RBBM_PERFCTR_UCHE_2_HI"/>
+       <reg32 offset="0x00c0" name="RBBM_PERFCTR_UCHE_3_LO"/>
+       <reg32 offset="0x00c1" name="RBBM_PERFCTR_UCHE_3_HI"/>
+       <reg32 offset="0x00c2" name="RBBM_PERFCTR_UCHE_4_LO"/>
+       <reg32 offset="0x00c3" name="RBBM_PERFCTR_UCHE_4_HI"/>
+       <reg32 offset="0x00c4" name="RBBM_PERFCTR_UCHE_5_LO"/>
+       <reg32 offset="0x00c5" name="RBBM_PERFCTR_UCHE_5_HI"/>
+       <reg32 offset="0x00c6" name="RBBM_PERFCTR_TP_0_LO"/>
+       <reg32 offset="0x00c7" name="RBBM_PERFCTR_TP_0_HI"/>
+       <reg32 offset="0x00c8" name="RBBM_PERFCTR_TP_1_LO"/>
+       <reg32 offset="0x00c9" name="RBBM_PERFCTR_TP_1_HI"/>
+       <reg32 offset="0x00ca" name="RBBM_PERFCTR_TP_2_LO"/>
+       <reg32 offset="0x00cb" name="RBBM_PERFCTR_TP_2_HI"/>
+       <reg32 offset="0x00cc" name="RBBM_PERFCTR_TP_3_LO"/>
+       <reg32 offset="0x00cd" name="RBBM_PERFCTR_TP_3_HI"/>
+       <reg32 offset="0x00ce" name="RBBM_PERFCTR_TP_4_LO"/>
+       <reg32 offset="0x00cf" name="RBBM_PERFCTR_TP_4_HI"/>
+       <reg32 offset="0x00d0" name="RBBM_PERFCTR_TP_5_LO"/>
+       <reg32 offset="0x00d1" name="RBBM_PERFCTR_TP_5_HI"/>
+       <reg32 offset="0x00d2" name="RBBM_PERFCTR_SP_0_LO"/>
+       <reg32 offset="0x00d3" name="RBBM_PERFCTR_SP_0_HI"/>
+       <reg32 offset="0x00d4" name="RBBM_PERFCTR_SP_1_LO"/>
+       <reg32 offset="0x00d5" name="RBBM_PERFCTR_SP_1_HI"/>
+       <reg32 offset="0x00d6" name="RBBM_PERFCTR_SP_2_LO"/>
+       <reg32 offset="0x00d7" name="RBBM_PERFCTR_SP_2_HI"/>
+       <reg32 offset="0x00d8" name="RBBM_PERFCTR_SP_3_LO"/>
+       <reg32 offset="0x00d9" name="RBBM_PERFCTR_SP_3_HI"/>
+       <reg32 offset="0x00da" name="RBBM_PERFCTR_SP_4_LO"/>
+       <reg32 offset="0x00db" name="RBBM_PERFCTR_SP_4_HI"/>
+       <reg32 offset="0x00dc" name="RBBM_PERFCTR_SP_5_LO"/>
+       <reg32 offset="0x00dd" name="RBBM_PERFCTR_SP_5_HI"/>
+       <reg32 offset="0x00de" name="RBBM_PERFCTR_SP_6_LO"/>
+       <reg32 offset="0x00df" name="RBBM_PERFCTR_SP_6_HI"/>
+       <reg32 offset="0x00e0" name="RBBM_PERFCTR_SP_7_LO"/>
+       <reg32 offset="0x00e1" name="RBBM_PERFCTR_SP_7_HI"/>
+       <reg32 offset="0x00e2" name="RBBM_PERFCTR_RB_0_LO"/>
+       <reg32 offset="0x00e3" name="RBBM_PERFCTR_RB_0_HI"/>
+       <reg32 offset="0x00e4" name="RBBM_PERFCTR_RB_1_LO"/>
+       <reg32 offset="0x00e5" name="RBBM_PERFCTR_RB_1_HI"/>
+       <reg32 offset="0x00ea" name="RBBM_PERFCTR_PWR_0_LO"/>
+       <reg32 offset="0x00eb" name="RBBM_PERFCTR_PWR_0_HI"/>
+       <reg32 offset="0x00ec" name="RBBM_PERFCTR_PWR_1_LO"/>
+       <reg32 offset="0x00ed" name="RBBM_PERFCTR_PWR_1_HI"/>
+       <reg32 offset="0x0100" name="RBBM_RBBM_CTL"/>
+       <reg32 offset="0x0111" name="RBBM_DEBUG_BUS_CTL"/>
+       <reg32 offset="0x0112" name="RBBM_DEBUG_BUS_DATA_STATUS"/>
+
+       <!-- CP registers -->
+       <reg32 offset="0x01c9" name="CP_PFP_UCODE_ADDR"/>
+       <reg32 offset="0x01ca" name="CP_PFP_UCODE_DATA"/>
+       <reg32 offset="0x01cc" name="CP_ROQ_ADDR"/>
+       <reg32 offset="0x01cd" name="CP_ROQ_DATA"/>
+       <reg32 offset="0x01d1" name="CP_MERCIU_ADDR"/>
+       <reg32 offset="0x01d2" name="CP_MERCIU_DATA"/>
+       <reg32 offset="0x01d3" name="CP_MERCIU_DATA2"/>
+       <!-- see a3xx_snapshot_cp_meq().. looks like the way to dump queue between pfp and pm4 -->
+       <reg32 offset="0x01da" name="CP_MEQ_ADDR"/>
+       <reg32 offset="0x01db" name="CP_MEQ_DATA"/>
+       <reg32 offset="0x01f5" name="CP_WFI_PEND_CTR"/>
+       <reg32 offset="0x039d" name="RBBM_PM_OVERRIDE2"/>
+
+       <reg32 offset="0x0445" name="CP_PERFCOUNTER_SELECT" type="a3xx_cp_perfcounter_select"/>
+       <reg32 offset="0x045c" name="CP_HW_FAULT"/>
+       <reg32 offset="0x045e" name="CP_PROTECT_CTRL"/>
+       <reg32 offset="0x045f" name="CP_PROTECT_STATUS"/>
+       <array offset="0x0460" name="CP_PROTECT" stride="1" length="16">
+               <reg32 offset="0x0" name="REG"/>
+       </array>
+       <reg32 offset="0x054d" name="CP_AHB_FAULT"/>
+
+       <reg32 offset="0x0d00" name="SQ_GPR_MANAGEMENT"/>
+       <reg32 offset="0x0d02" name="SQ_INST_STORE_MANAGMENT"/>
+       <reg32 offset="0x0e1e" name="TP0_CHICKEN"/>
+
+       <!-- these I guess or either SP or HLSQ since related to shader core setup: -->
+       <reg32 offset="0x0e22" name="SP_GLOBAL_MEM_SIZE" type="uint">
+               <doc>
+                       The pair of MEM_SIZE/ADDR registers get programmed
+                       in sequence with the size/addr of each buffer.
+               </doc>
+       </reg32>
+       <reg32 offset="0x0e23" name="SP_GLOBAL_MEM_ADDR"/>
+
+       <!-- GRAS registers -->
+       <reg32 offset="0x2040" name="GRAS_CL_CLIP_CNTL">
+               <bitfield name="IJ_PERSP_CENTER" pos="12" type="boolean"/>
+               <bitfield name="IJ_NON_PERSP_CENTER" pos="13" type="boolean"/>
+               <bitfield name="IJ_PERSP_CENTROID" pos="14" type="boolean"/>
+               <bitfield name="IJ_NON_PERSP_CENTROID" pos="15" type="boolean"/>
+               <bitfield name="CLIP_DISABLE" pos="16" type="boolean"/>
+               <bitfield name="ZFAR_CLIP_DISABLE" pos="17" type="boolean"/>
+               <bitfield name="VP_CLIP_CODE_IGNORE" pos="19" type="boolean"/>
+               <bitfield name="VP_XFORM_DISABLE" pos="20" type="boolean"/>
+               <bitfield name="PERSP_DIVISION_DISABLE" pos="21" type="boolean"/>
+               <bitfield name="ZERO_GB_SCALE_Z" pos="22" type="boolean">
+                       <doc>aka clip_halfz</doc>
+               </bitfield>
+               <!-- set when gl_FragCoord.z is enabled in frag shader: -->
+               <bitfield name="ZCOORD" pos="23" type="boolean"/>
+               <bitfield name="WCOORD" pos="24" type="boolean"/>
+               <!-- set when frag shader writes z (so early z test disabled: -->
+               <bitfield name="ZCLIP_DISABLE" pos="25" type="boolean"/>
+               <bitfield name="NUM_USER_CLIP_PLANES" low="26" high="28" type="uint"/>
+       </reg32>
+       <reg32 offset="0x2044" name="GRAS_CL_GB_CLIP_ADJ">
+               <bitfield name="HORZ" low="0" high="9" type="uint"/>
+               <bitfield name="VERT" low="10" high="19" type="uint"/>
+       </reg32>
+       <reg32 offset="0x2048" name="GRAS_CL_VPORT_XOFFSET" type="float"/>
+       <reg32 offset="0x2049" name="GRAS_CL_VPORT_XSCALE" type="float"/>
+       <reg32 offset="0x204a" name="GRAS_CL_VPORT_YOFFSET" type="float"/>
+       <reg32 offset="0x204b" name="GRAS_CL_VPORT_YSCALE" type="float"/>
+       <reg32 offset="0x204c" name="GRAS_CL_VPORT_ZOFFSET" type="float"/>
+       <reg32 offset="0x204d" name="GRAS_CL_VPORT_ZSCALE" type="float"/>
+       <reg32 offset="0x2068" name="GRAS_SU_POINT_MINMAX">
+               <bitfield name="MIN" low="0" high="15" type="ufixed" radix="4"/>
+               <bitfield name="MAX" low="16" high="31" type="ufixed" radix="4"/>
+       </reg32>
+       <reg32 offset="0x2069" name="GRAS_SU_POINT_SIZE" type="fixed" radix="4"/>
+       <reg32 offset="0x206c" name="GRAS_SU_POLY_OFFSET_SCALE">
+               <bitfield name="VAL" low="0" high="23" type="fixed" radix="20"/>
+               <doc>range of -8.0 to 8.0</doc>
+       </reg32>
+       <reg32 offset="0x206d" name="GRAS_SU_POLY_OFFSET_OFFSET" radix="6" type="fixed">
+               <doc>range of -512.0 to 512.0</doc>
+       </reg32>
+       <reg32 offset="0x2070" name="GRAS_SU_MODE_CONTROL">
+               <bitfield name="CULL_FRONT" pos="0" type="boolean"/>
+               <bitfield name="CULL_BACK" pos="1" type="boolean"/>
+               <bitfield name="FRONT_CW" pos="2" type="boolean"/>
+               <bitfield name="LINEHALFWIDTH" low="3" high="10" radix="2" type="fixed"/>
+               <bitfield name="POLY_OFFSET" pos="11" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x2072" name="GRAS_SC_CONTROL">
+               <!-- complete wild-ass-guess for sizes of these bitfields.. -->
+               <bitfield name="RENDER_MODE" low="4" high="7" type="a3xx_render_mode"/>
+               <bitfield name="MSAA_SAMPLES" low="8" high="11" type="a3xx_msaa_samples"/>
+               <bitfield name="RASTER_MODE" low="12" high="15"/>
+       </reg32>
+
+       <reg32 offset="0x2074" name="GRAS_SC_SCREEN_SCISSOR_TL" type="adreno_reg_xy"/>
+       <reg32 offset="0x2075" name="GRAS_SC_SCREEN_SCISSOR_BR" type="adreno_reg_xy"/>
+       <reg32 offset="0x2079" name="GRAS_SC_WINDOW_SCISSOR_TL" type="adreno_reg_xy"/>
+       <reg32 offset="0x207a" name="GRAS_SC_WINDOW_SCISSOR_BR" type="adreno_reg_xy"/>
+
+       <!-- RB registers -->
+       <reg32 offset="0x20c0" name="RB_MODE_CONTROL">
+               <!-- guess on the # of bits here.. -->
+               <bitfield name="GMEM_BYPASS" pos="7" type="boolean"/>
+               <doc>
+                       RENDER_MODE is RB_RESOLVE_PASS for gmem->mem, otherwise RB_RENDER_PASS
+               </doc>
+               <bitfield name="RENDER_MODE" low="8" high="10" type="a3xx_render_mode"/>
+               <bitfield name="MRT" low="12" high="13" type="uint">
+                       <doc>render targets - 1</doc>
+               </bitfield>
+               <bitfield name="MARB_CACHE_SPLIT_MODE" pos="15" type="boolean"/>
+               <bitfield name="PACKER_TIMER_ENABLE" pos="16" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x20c1" name="RB_RENDER_CONTROL">
+               <bitfield name="DUAL_COLOR_IN_ENABLE" pos="0" type="boolean"/>
+               <bitfield name="YUV_IN_ENABLE" pos="1" type="boolean"/>
+               <bitfield name="COV_VALUE_INPUT_ENABLE" pos="2" type="boolean"/>
+               <!-- set when gl_FrontFacing is accessed in frag shader: -->
+               <bitfield name="FACENESS" pos="3" type="boolean"/>
+               <bitfield name="BIN_WIDTH" low="4" high="11" shr="5" type="uint"/>
+               <bitfield name="DISABLE_COLOR_PIPE" pos="12" type="boolean"/>
+               <!--
+                       ENABLE_GMEM not set on mem2gmem..  so possibly it is actually
+                       controlling blend or readback from GMEM??
+                -->
+               <bitfield name="ENABLE_GMEM" pos="13" type="boolean"/>
+               <bitfield name="COORD_MASK" low="14" high="17" type="hex"/>
+               <bitfield name="I_CLAMP_ENABLE" pos="19" type="boolean"/>
+               <bitfield name="COV_VALUE_OUTPUT_ENABLE" pos="20" type="boolean"/>
+               <bitfield name="ALPHA_TEST" pos="22" type="boolean"/>
+               <bitfield name="ALPHA_TEST_FUNC" low="24" high="26" type="adreno_compare_func"/>
+               <bitfield name="ALPHA_TO_COVERAGE" pos="30" type="boolean"/>
+               <bitfield name="ALPHA_TO_ONE" pos="31" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x20c2" name="RB_MSAA_CONTROL">
+               <bitfield name="DISABLE" pos="10" type="boolean"/>
+               <bitfield name="SAMPLES" low="12" high="15" type="a3xx_msaa_samples"/>
+               <bitfield name="SAMPLE_MASK" low="16" high="31" type="hex"/>
+       </reg32>
+       <reg32 offset="0x20c3" name="RB_ALPHA_REF">
+               <bitfield name="UINT" low="8" high="15" type="hex"/>
+               <bitfield name="FLOAT" low="16" high="31" type="float"/>
+       </reg32>
+       <array offset="0x20c4" name="RB_MRT" stride="4" length="4">
+               <reg32 offset="0x0" name="CONTROL">
+                       <bitfield name="READ_DEST_ENABLE" pos="3" type="boolean"/>
+                       <!-- both these bits seem to get set when enabling GL_BLEND.. -->
+                       <bitfield name="BLEND" pos="4" type="boolean"/>
+                       <bitfield name="BLEND2" pos="5" type="boolean"/>
+                       <bitfield name="ROP_CODE" low="8" high="11" type="a3xx_rop_code"/>
+                       <bitfield name="DITHER_MODE" low="12" high="13" type="adreno_rb_dither_mode"/>
+                       <bitfield name="COMPONENT_ENABLE" low="24" high="27" type="hex"/>
+               </reg32>
+               <reg32 offset="0x1" name="BUF_INFO">
+                       <bitfield name="COLOR_FORMAT" low="0" high="5" type="a3xx_color_fmt"/>
+                       <bitfield name="COLOR_TILE_MODE" low="6" high="7" type="a3xx_tile_mode"/>
+                       <bitfield name="COLOR_SWAP" low="10" high="11" type="a3xx_color_swap"/>
+                       <bitfield name="COLOR_SRGB" pos="14" type="boolean"/>
+                       <doc>
+                               Pitch (actually, appears to be pitch in bytes, so really is a stride)
+                               in GMEM, so pitch of the current tile.
+                       </doc>
+                       <bitfield name="COLOR_BUF_PITCH" low="17" high="31" shr="5" type="uint"/>
+               </reg32>
+               <reg32 offset="0x2" name="BUF_BASE">
+                       <doc>offset into GMEM (or system memory address in bypass mode)</doc>
+                       <bitfield name="COLOR_BUF_BASE" low="4" high="31" shr="5" type="hex"/>
+               </reg32>
+               <reg32 offset="0x3" name="BLEND_CONTROL">
+                       <bitfield name="RGB_SRC_FACTOR" low="0" high="4" type="adreno_rb_blend_factor"/>
+                       <bitfield name="RGB_BLEND_OPCODE" low="5" high="7" type="a3xx_rb_blend_opcode"/>
+                       <bitfield name="RGB_DEST_FACTOR" low="8" high="12" type="adreno_rb_blend_factor"/>
+                       <bitfield name="ALPHA_SRC_FACTOR" low="16" high="20" type="adreno_rb_blend_factor"/>
+                       <bitfield name="ALPHA_BLEND_OPCODE" low="21" high="23" type="a3xx_rb_blend_opcode"/>
+                       <bitfield name="ALPHA_DEST_FACTOR" low="24" high="28" type="adreno_rb_blend_factor"/>
+                       <bitfield name="CLAMP_ENABLE" pos="29" type="boolean"/>
+               </reg32>
+       </array>
+
+       <reg32 offset="0x20e4" name="RB_BLEND_RED">
+               <bitfield name="UINT" low="0" high="7" type="hex"/>
+               <bitfield name="FLOAT" low="16" high="31" type="float"/>
+       </reg32>
+       <reg32 offset="0x20e5" name="RB_BLEND_GREEN">
+               <bitfield name="UINT" low="0" high="7" type="hex"/>
+               <bitfield name="FLOAT" low="16" high="31" type="float"/>
+       </reg32>
+       <reg32 offset="0x20e6" name="RB_BLEND_BLUE">
+               <bitfield name="UINT" low="0" high="7" type="hex"/>
+               <bitfield name="FLOAT" low="16" high="31" type="float"/>
+       </reg32>
+       <reg32 offset="0x20e7" name="RB_BLEND_ALPHA">
+               <bitfield name="UINT" low="0" high="7" type="hex"/>
+               <bitfield name="FLOAT" low="16" high="31" type="float"/>
+       </reg32>
+
+       <reg32 offset="0x20e8" name="RB_CLEAR_COLOR_DW0"/>
+       <reg32 offset="0x20e9" name="RB_CLEAR_COLOR_DW1"/>
+       <reg32 offset="0x20ea" name="RB_CLEAR_COLOR_DW2"/>
+       <reg32 offset="0x20eb" name="RB_CLEAR_COLOR_DW3"/>
+       <reg32 offset="0x20ec" name="RB_COPY_CONTROL">
+               <!-- not sure # of bits -->
+               <bitfield name="MSAA_RESOLVE" low="0" high="1" type="a3xx_msaa_samples"/>
+               <bitfield name="DEPTHCLEAR" pos="3" type="boolean"/>
+               <bitfield name="MODE" low="4" high="6" type="adreno_rb_copy_control_mode"/>
+               <bitfield name="MSAA_SRGB_DOWNSAMPLE" pos="7" type="boolean"/>
+               <bitfield name="FASTCLEAR" low="8" high="11" type="hex"/>
+               <bitfield name="DEPTH32_RESOLVE" pos="12" type="boolean"/> <!-- enabled on a Z32F copy -->
+               <bitfield name="GMEM_BASE" low="14" high="31" shr="14" type="hex"/>
+       </reg32>
+       <reg32 offset="0x20ed" name="RB_COPY_DEST_BASE">
+               <bitfield name="BASE" low="4" high="31" shr="5" type="hex"/>
+       </reg32>
+       <reg32 offset="0x20ee" name="RB_COPY_DEST_PITCH">
+               <doc>actually, appears to be pitch in bytes, so really is a stride</doc>
+               <!-- not actually sure about max pitch... -->
+               <bitfield name="PITCH" low="0" high="31" shr="5" type="uint"/>
+       </reg32>
+       <reg32 offset="0x20ef" name="RB_COPY_DEST_INFO">
+               <bitfield name="TILE" low="0" high="1" type="a3xx_tile_mode"/>
+               <bitfield name="FORMAT" low="2" high="7" type="a3xx_color_fmt"/>
+               <bitfield name="SWAP" low="8" high="9" type="a3xx_color_swap"/>
+               <bitfield name="DITHER_MODE" low="10" high="11" type="adreno_rb_dither_mode"/>
+               <bitfield name="COMPONENT_ENABLE" low="14" high="17" type="hex"/>
+               <bitfield name="ENDIAN" low="18" high="20" type="adreno_rb_surface_endian"/>
+       </reg32>
+       <reg32 offset="0x2100" name="RB_DEPTH_CONTROL">
+               <!--
+                       guessing that this matches a2xx with the stencil fields
+                       moved out into RB_STENCIL_CONTROL?
+                -->
+               <bitfield name="FRAG_WRITES_Z" pos="0" type="boolean"/>
+               <bitfield name="Z_ENABLE" pos="1" type="boolean"/>
+               <bitfield name="Z_WRITE_ENABLE" pos="2" type="boolean"/>
+               <bitfield name="EARLY_Z_DISABLE" pos="3" type="boolean"/>
+               <bitfield name="ZFUNC" low="4" high="6" type="adreno_compare_func"/>
+               <bitfield name="Z_CLAMP_ENABLE" pos="7" type="boolean"/>
+               <doc>Z_TEST_ENABLE bit is set for zfunc other than GL_ALWAYS or GL_NEVER</doc>
+               <bitfield name="Z_TEST_ENABLE" pos="31" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x2101" name="RB_DEPTH_CLEAR">
+               <doc>seems to be always set to 0x00000000</doc>
+       </reg32>
+       <reg32 offset="0x2102" name="RB_DEPTH_INFO">
+               <bitfield name="DEPTH_FORMAT" low="0" high="1" type="adreno_rb_depth_format"/>
+               <doc>
+                       DEPTH_BASE is offset in GMEM to depth/stencil buffer, ie
+                       bin_w * bin_h / 1024 (possible rounded up to multiple of
+                       something??  ie. 39 becomes 40, 78 becomes 80.. 75 becomes
+                       80.. so maybe it needs to be multiple of 8??
+               </doc>
+               <bitfield name="DEPTH_BASE" low="11" high="31" shr="12" type="hex"/>
+       </reg32>
+       <reg32 offset="0x2103" name="RB_DEPTH_PITCH" shr="3" type="uint">
+               <doc>
+                       Pitch of depth buffer or combined depth+stencil buffer
+                       in z24s8 cases.
+               </doc>
+       </reg32>
+       <reg32 offset="0x2104" name="RB_STENCIL_CONTROL">
+               <bitfield name="STENCIL_ENABLE" pos="0" type="boolean"/>
+               <bitfield name="STENCIL_ENABLE_BF" pos="1" type="boolean"/>
+               <!--
+                       set for stencil operations that require read from stencil
+                       buffer, but not for example for stencil clear (which does
+                       not require read).. so guessing this is analogous to
+                       READ_DEST_ENABLE for color buffer..
+                -->
+               <bitfield name="STENCIL_READ" pos="2" type="boolean"/>
+               <bitfield name="FUNC" low="8" high="10" type="adreno_compare_func"/>
+               <bitfield name="FAIL" low="11" high="13" type="adreno_stencil_op"/>
+               <bitfield name="ZPASS" low="14" high="16" type="adreno_stencil_op"/>
+               <bitfield name="ZFAIL" low="17" high="19" type="adreno_stencil_op"/>
+               <bitfield name="FUNC_BF" low="20" high="22" type="adreno_compare_func"/>
+               <bitfield name="FAIL_BF" low="23" high="25" type="adreno_stencil_op"/>
+               <bitfield name="ZPASS_BF" low="26" high="28" type="adreno_stencil_op"/>
+               <bitfield name="ZFAIL_BF" low="29" high="31" type="adreno_stencil_op"/>
+       </reg32>
+       <reg32 offset="0x2105" name="RB_STENCIL_CLEAR">
+               <doc>seems to be always set to 0x00000000</doc>
+       </reg32>
+       <reg32 offset="0x2106" name="RB_STENCIL_INFO">
+               <doc>Base address for stencil when not using interleaved depth/stencil</doc>
+               <bitfield name="STENCIL_BASE" low="11" high="31" shr="12" type="hex"/>
+       </reg32>
+       <reg32 offset="0x2107" name="RB_STENCIL_PITCH" shr="3" type="uint">
+               <doc>pitch of stencil buffer when not using interleaved depth/stencil</doc>
+       </reg32>
+       <reg32 offset="0x2108" name="RB_STENCILREFMASK" type="adreno_rb_stencilrefmask"/>
+       <reg32 offset="0x2109" name="RB_STENCILREFMASK_BF" type="adreno_rb_stencilrefmask"/>
+       <!-- VSC == visibility stream c?? -->
+       <reg32 offset="0x210c" name="RB_LRZ_VSC_CONTROL">
+               <doc>seems to be set to 0x00000002 during binning pass</doc>
+               <bitfield name="BINNING_ENABLE" pos="1" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x210e" name="RB_WINDOW_OFFSET">
+               <doc>X/Y offset of current bin</doc>
+               <bitfield name="X" low="0" high="15" type="uint"/>
+               <bitfield name="Y" low="16" high="31" type="uint"/>
+       </reg32>
+       <reg32 offset="0x2110" name="RB_SAMPLE_COUNT_CONTROL">
+               <bitfield name="RESET" pos="0" type="boolean"/>
+               <bitfield name="COPY" pos="1" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x2111" name="RB_SAMPLE_COUNT_ADDR"/>
+       <reg32 offset="0x2114" name="RB_Z_CLAMP_MIN"/>
+       <reg32 offset="0x2115" name="RB_Z_CLAMP_MAX"/>
+
+       <!-- PC registers -->
+       <reg32 offset="0x21e1" name="VGT_BIN_BASE">
+               <doc>
+                       seems to be where firmware writes BIN_DATA_ADDR from
+                       CP_SET_BIN_DATA packet..  probably should be called
+                       PC_BIN_BASE (just using name from yamato for now)
+               </doc>
+       </reg32>
+       <reg32 offset="0x21e2" name="VGT_BIN_SIZE">
+               <doc>probably should be PC_BIN_SIZE</doc>
+       </reg32>
+       <reg32 offset="0x21e4" name="PC_VSTREAM_CONTROL">
+               <doc>SIZE is current pipe width * height (in tiles)</doc>
+               <bitfield name="SIZE" low="16" high="21" type="uint"/>
+               <doc>
+                       N is some sort of slot # between 0..(SIZE-1).  In case
+                       multiple tiles use same pipe, each tile gets unique slot #
+               </doc>
+               <bitfield name="N" low="22" high="26" type="uint"/>
+       </reg32>
+       <reg32 offset="0x21ea" name="PC_VERTEX_REUSE_BLOCK_CNTL"/>
+       <reg32 offset="0x21ec" name="PC_PRIM_VTX_CNTL">
+               <doc>
+                       STRIDE_IN_VPC: ALIGN(next_outloc - 8, 4) / 4
+                       (but, in cases where you'd expect 1, the blob driver uses
+                       2, so possibly 0 (no varying) or minimum of 2)
+               </doc>
+               <bitfield name="STRIDE_IN_VPC" low="0" high="4" type="uint"/>
+               <bitfield name="POLYMODE_FRONT_PTYPE" low="5" high="7" type="adreno_pa_su_sc_draw"/>
+               <bitfield name="POLYMODE_BACK_PTYPE" low="8" high="10" type="adreno_pa_su_sc_draw"/>
+               <bitfield name="POLYMODE_ENABLE" pos="12" type="boolean"/>
+               <bitfield name="PRIMITIVE_RESTART" pos="20" type="boolean"/>
+               <bitfield name="PROVOKING_VTX_LAST" pos="25" type="boolean"/>
+               <!-- PSIZE bit set if gl_PointSize written: -->
+               <bitfield name="PSIZE" pos="26" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x21ed" name="PC_RESTART_INDEX"/>
+
+       <!-- HLSQ registers -->
+       <bitset name="a3xx_hlsq_vs_fs_control_reg" inline="yes">
+               <bitfield name="CONSTLENGTH" low="0" high="9" type="uint"/>
+               <bitfield name="CONSTSTARTOFFSET" low="12" high="20" type="uint"/>
+               <bitfield name="INSTRLENGTH" low="24" high="31" type="uint"/>
+       </bitset>
+       <bitset name="a3xx_hlsq_const_vs_fs_presv_range_reg" inline="yes">
+               <!-- are these a3xx_regid?? -->
+               <bitfield name="STARTENTRY" low="0" high="8"/>
+               <bitfield name="ENDENTRY" low="16" high="24"/>
+       </bitset>
+
+       <reg32 offset="0x2200" name="HLSQ_CONTROL_0_REG">
+               <bitfield name="FSTHREADSIZE" low="4" high="5" type="a3xx_threadsize"/>
+               <bitfield name="FSSUPERTHREADENABLE" pos="6" type="boolean"/>
+               <bitfield name="COMPUTEMODE" pos="8" type="boolean"/>
+               <bitfield name="SPSHADERRESTART" pos="9" type="boolean"/>
+               <bitfield name="RESERVED2" pos="10" type="boolean"/>
+               <bitfield name="CYCLETIMEOUTLIMITVPC" low="12" high="23" type="uint"/>
+               <bitfield name="FSONLYTEX" pos="25" type="boolean"/>
+               <bitfield name="CHUNKDISABLE" pos="26" type="boolean"/>
+               <bitfield name="CONSTMODE" pos="27" type="uint"/>
+               <bitfield name="LAZYUPDATEDISABLE" pos="28" type="boolean"/>
+               <bitfield name="SPCONSTFULLUPDATE" pos="29" type="boolean"/>
+               <bitfield name="TPFULLUPDATE" pos="30" type="boolean"/>
+               <bitfield name="SINGLECONTEXT" pos="31" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x2201" name="HLSQ_CONTROL_1_REG">
+               <bitfield name="VSTHREADSIZE" low="6" high="7" type="a3xx_threadsize"/>
+               <bitfield name="VSSUPERTHREADENABLE" pos="8" type="boolean"/>
+               <bitfield name="FRAGCOORDXYREGID" low="16" high="23" type="a3xx_regid"/>
+               <bitfield name="FRAGCOORDZWREGID" low="24" high="31" type="a3xx_regid"/>
+       </reg32>
+       <reg32 offset="0x2202" name="HLSQ_CONTROL_2_REG">
+               <bitfield name="FACENESSREGID" low="2" high="9" type="a3xx_regid"/>
+               <bitfield name="COVVALUEREGID" low="18" high="25" type="a3xx_regid"/>
+               <bitfield name="PRIMALLOCTHRESHOLD" low="26" high="31" type="uint"/>
+       </reg32>
+       <reg32 offset="0x2203" name="HLSQ_CONTROL_3_REG">
+               <bitfield name="IJPERSPCENTERREGID" low="0" high="7" type="a3xx_regid"/>
+               <bitfield name="IJNONPERSPCENTERREGID" low="8" high="15" type="a3xx_regid"/>
+               <bitfield name="IJPERSPCENTROIDREGID" low="16" high="23" type="a3xx_regid"/>
+               <bitfield name="IJNONPERSPCENTROIDREGID" low="24" high="31" type="a3xx_regid"/>
+       </reg32>
+       <reg32 offset="0x2204" name="HLSQ_VS_CONTROL_REG" type="a3xx_hlsq_vs_fs_control_reg"/>
+       <reg32 offset="0x2205" name="HLSQ_FS_CONTROL_REG" type="a3xx_hlsq_vs_fs_control_reg"/>
+       <reg32 offset="0x2206" name="HLSQ_CONST_VSPRESV_RANGE_REG" type="a3xx_hlsq_const_vs_fs_presv_range_reg"/>
+       <reg32 offset="0x2207" name="HLSQ_CONST_FSPRESV_RANGE_REG" type="a3xx_hlsq_const_vs_fs_presv_range_reg"/>
+       <reg32 offset="0x220a" name="HLSQ_CL_NDRANGE_0_REG">
+               <bitfield name="WORKDIM" low="0" high="1" type="uint"/>
+               <bitfield name="LOCALSIZE0" low="2" high="11" type="uint"/>
+               <bitfield name="LOCALSIZE1" low="12" high="21" type="uint"/>
+               <bitfield name="LOCALSIZE2" low="22" high="31" type="uint"/>
+       </reg32>
+       <array offset="0x220b" name="HLSQ_CL_GLOBAL_WORK" stride="2" length="3">
+               <doc>indexed by dimension</doc>
+               <reg32 offset="0" name="SIZE" type="uint"/>
+               <reg32 offset="1" name="OFFSET" type="uint"/>
+       </array>
+       <reg32 offset="0x2211" name="HLSQ_CL_CONTROL_0_REG"/>
+       <reg32 offset="0x2212" name="HLSQ_CL_CONTROL_1_REG"/>
+       <reg32 offset="0x2214" name="HLSQ_CL_KERNEL_CONST_REG"/>
+       <array offset="0x2215" name="HLSQ_CL_KERNEL_GROUP" stride="1" length="3">
+               <doc>indexed by dimension, global_size / local_size</doc>
+               <reg32 offset="0" name="RATIO" type="uint"/>
+       </array>
+       <reg32 offset="0x2216" name="HLSQ_CL_KERNEL_GROUP_Y_REG" type="uint"/>
+       <reg32 offset="0x2217" name="HLSQ_CL_KERNEL_GROUP_Z_REG" type="uint"/>
+       <reg32 offset="0x221a" name="HLSQ_CL_WG_OFFSET_REG"/>
+
+       <!-- VFD registers -->
+       <reg32 offset="0x2240" name="VFD_CONTROL_0">
+               <doc>
+                       TOTALATTRTOVS is # of attributes to vertex shader, in register
+                       slots (ie. vec4+vec3 -> 7)
+               </doc>
+               <bitfield name="TOTALATTRTOVS" low="0" high="17" type="uint"/>
+               <bitfield name="PACKETSIZE" low="18" high="21" type="uint"/>
+               <doc>STRMDECINSTRCNT is # of VFD_DECODE_INSTR registers valid</doc>
+               <bitfield name="STRMDECINSTRCNT" low="22" high="26" type="uint"/>
+               <doc>STRMFETCHINSTRCNT is # of VFD_FETCH_INSTR registers valid</doc>
+               <bitfield name="STRMFETCHINSTRCNT" low="27" high="31" type="uint"/>
+       </reg32>
+       <reg32 offset="0x2241" name="VFD_CONTROL_1">
+               <doc>MAXSTORAGE could be # of attributes/vbo's</doc>
+               <bitfield name="MAXSTORAGE" low="0" high="3" type="uint"/>
+               <bitfield name="MAXTHRESHOLD" low="4" high="7" type="uint"/>
+               <bitfield name="MINTHRESHOLD" low="8" high="11" type="uint"/>
+               <bitfield name="REGID4VTX" low="16" high="23" type="a3xx_regid"/>
+               <bitfield name="REGID4INST" low="24" high="31" type="a3xx_regid"/>
+       </reg32>
+       <reg32 offset="0x2242" name="VFD_INDEX_MIN" type="uint"/>
+       <reg32 offset="0x2243" name="VFD_INDEX_MAX" type="uint"/>
+       <reg32 offset="0x2244" name="VFD_INSTANCEID_OFFSET" type="uint"/>
+       <reg32 offset="0x2245" name="VFD_INDEX_OFFSET" type="uint"/>
+       <array offset="0x2246" name="VFD_FETCH" stride="2" length="16">
+               <reg32 offset="0x0" name="INSTR_0">
+                       <bitfield name="FETCHSIZE" low="0" high="6" type="uint"/>
+                       <bitfield name="BUFSTRIDE" low="7" high="15" type="uint"/>
+                       <bitfield name="INSTANCED" pos="16" type="boolean"/>
+                       <bitfield name="SWITCHNEXT" pos="17" type="boolean"/>
+                       <bitfield name="INDEXCODE" low="18" high="23" type="uint"/>
+                       <bitfield name="STEPRATE" low="24" high="31" type="uint"/>
+               </reg32>
+               <reg32 offset="0x1" name="INSTR_1"/>
+       </array>
+       <array offset="0x2266" name="VFD_DECODE" stride="1" length="16">
+               <reg32 offset="0x0" name="INSTR">
+                       <bitfield name="WRITEMASK" low="0" high="3" type="hex"/>
+                       <!-- not sure if this is a bit flag and another flag above it, or?? -->
+                       <bitfield name="CONSTFILL" pos="4" type="boolean"/>
+                       <bitfield name="FORMAT" low="6" high="11" type="a3xx_vtx_fmt"/>
+                       <bitfield name="REGID" low="12" high="19" type="a3xx_regid"/>
+                       <bitfield name="INT" pos="20" type="boolean"/>
+                       <doc>SHIFTCNT appears to be size, ie. FLOAT_32_32_32 is 12, and BYTE_8 is 1</doc>
+                       <bitfield name="SWAP" low="22" high="23" type="a3xx_color_swap"/>
+                       <bitfield name="SHIFTCNT" low="24" high="28" type="uint"/>
+                       <bitfield name="LASTCOMPVALID" pos="29" type="boolean"/>
+                       <bitfield name="SWITCHNEXT" pos="30" type="boolean"/>
+               </reg32>
+       </array>
+       <reg32 offset="0x227e" name="VFD_VS_THREADING_THRESHOLD">
+               <bitfield name="REGID_THRESHOLD" low="0" high="3" type="uint"/>
+               <!-- <bitfield name="RESERVED6" low="4" high="7" type="uint"/> -->
+               <bitfield name="REGID_VTXCNT" low="8" high="15" type="a3xx_regid"/>
+       </reg32>
+
+       <!-- VPC registers -->
+       <reg32 offset="0x2280" name="VPC_ATTR">
+               <bitfield name="TOTALATTR" low="0" high="8" type="uint"/>
+               <!-- PSIZE bit set if gl_PointSize written: -->
+               <bitfield name="PSIZE" pos="9" type="boolean"/>
+               <bitfield name="THRDASSIGN" low="12" high="27" type="uint"/>
+               <bitfield name="LMSIZE" low="28" high="31" type="uint"/>
+       </reg32>
+       <reg32 offset="0x2281" name="VPC_PACK">
+               <!-- these are always seem to be set to same as TOTALATTR -->
+               <bitfield name="NUMFPNONPOSVAR" low="8" high="15" type="uint"/>
+               <bitfield name="NUMNONPOSVSVAR" low="16" high="23" type="uint"/>
+       </reg32>
+       <!--
+               varying interpolate mode.  One field per scalar/component
+               (since varying slots are scalar, so things don't have to
+               be aligned to vec4).
+               4 regs * 16 scalar components each => 16 vec4
+        -->
+       <array offset="0x2282" name="VPC_VARYING_INTERP" stride="1" length="4">
+               <reg32 offset="0x0" name="MODE">
+                       <bitfield name="C0" low="0"  high="1"  type="a3xx_intp_mode"/>
+                       <bitfield name="C1" low="2"  high="3"  type="a3xx_intp_mode"/>
+                       <bitfield name="C2" low="4"  high="5"  type="a3xx_intp_mode"/>
+                       <bitfield name="C3" low="6"  high="7"  type="a3xx_intp_mode"/>
+                       <bitfield name="C4" low="8"  high="9"  type="a3xx_intp_mode"/>
+                       <bitfield name="C5" low="10" high="11" type="a3xx_intp_mode"/>
+                       <bitfield name="C6" low="12" high="13" type="a3xx_intp_mode"/>
+                       <bitfield name="C7" low="14" high="15" type="a3xx_intp_mode"/>
+                       <bitfield name="C8" low="16" high="17" type="a3xx_intp_mode"/>
+                       <bitfield name="C9" low="18" high="19" type="a3xx_intp_mode"/>
+                       <bitfield name="CA" low="20" high="21" type="a3xx_intp_mode"/>
+                       <bitfield name="CB" low="22" high="23" type="a3xx_intp_mode"/>
+                       <bitfield name="CC" low="24" high="25" type="a3xx_intp_mode"/>
+                       <bitfield name="CD" low="26" high="27" type="a3xx_intp_mode"/>
+                       <bitfield name="CE" low="28" high="29" type="a3xx_intp_mode"/>
+                       <bitfield name="CF" low="30" high="31" type="a3xx_intp_mode"/>
+               </reg32>
+       </array>
+       <array offset="0x2286" name="VPC_VARYING_PS_REPL" stride="1" length="4">
+               <reg32 offset="0x0" name="MODE">
+                       <bitfield name="C0" low="0"  high="1"  type="a3xx_repl_mode"/>
+                       <bitfield name="C1" low="2"  high="3"  type="a3xx_repl_mode"/>
+                       <bitfield name="C2" low="4"  high="5"  type="a3xx_repl_mode"/>
+                       <bitfield name="C3" low="6"  high="7"  type="a3xx_repl_mode"/>
+                       <bitfield name="C4" low="8"  high="9"  type="a3xx_repl_mode"/>
+                       <bitfield name="C5" low="10" high="11" type="a3xx_repl_mode"/>
+                       <bitfield name="C6" low="12" high="13" type="a3xx_repl_mode"/>
+                       <bitfield name="C7" low="14" high="15" type="a3xx_repl_mode"/>
+                       <bitfield name="C8" low="16" high="17" type="a3xx_repl_mode"/>
+                       <bitfield name="C9" low="18" high="19" type="a3xx_repl_mode"/>
+                       <bitfield name="CA" low="20" high="21" type="a3xx_repl_mode"/>
+                       <bitfield name="CB" low="22" high="23" type="a3xx_repl_mode"/>
+                       <bitfield name="CC" low="24" high="25" type="a3xx_repl_mode"/>
+                       <bitfield name="CD" low="26" high="27" type="a3xx_repl_mode"/>
+                       <bitfield name="CE" low="28" high="29" type="a3xx_repl_mode"/>
+                       <bitfield name="CF" low="30" high="31" type="a3xx_repl_mode"/>
+               </reg32>
+       </array>
+       <reg32 offset="0x228a" name="VPC_VARY_CYLWRAP_ENABLE_0"/>
+       <reg32 offset="0x228b" name="VPC_VARY_CYLWRAP_ENABLE_1"/>
+
+       <!-- SP registers -->
+       <bitset name="a3xx_vs_fs_length_reg" inline="yes">
+               <bitfield name="SHADERLENGTH" low="0" high="31" type="uint"/>
+       </bitset>
+
+       <bitset name="sp_vs_fs_obj_offset_reg" inline="yes">
+               <bitfield name="FIRSTEXECINSTROFFSET" low="0" high="15" type="uint"/>
+               <doc>
+                       From register spec:
+                       SP_FS_OBJ_OFFSET_REG.CONSTOBJECTSTARTOFFSET [16:24]: Constant object
+                       start offset in on chip RAM,
+                       128bit aligned
+               </doc>
+               <bitfield name="CONSTOBJECTOFFSET" low="16" high="24" type="uint"/>
+               <bitfield name="SHADEROBJOFFSET" low="25" high="31" type="uint"/>
+       </bitset>
+
+       <reg32 offset="0x22c0" name="SP_SP_CTRL_REG">
+               <!-- this bit is set during resolve pass: -->
+               <bitfield name="RESOLVE" pos="16" type="boolean"/>
+               <bitfield name="CONSTMODE" pos="18" type="uint"/>
+               <bitfield name="BINNING" pos="19" type="boolean"/>
+               <bitfield name="SLEEPMODE" low="20" high="21" type="uint"/>
+               <!-- L0MODE==1 when oxiliForceSpL0ModeBuffer=1 -->
+               <bitfield name="L0MODE" low="22" high="23" type="uint"/>
+       </reg32>
+       <reg32 offset="0x22c4" name="SP_VS_CTRL_REG0">
+               <bitfield name="THREADMODE" pos="0" type="a3xx_threadmode"/>
+               <bitfield name="INSTRBUFFERMODE" pos="1" type="a3xx_instrbuffermode"/>
+               <!-- maybe CACHEINVALID is two bits?? -->
+               <bitfield name="CACHEINVALID" pos="2" type="boolean"/>
+               <bitfield name="ALUSCHMODE" pos="3" type="boolean"/>
+               <doc>
+                       The full/half register footprint is in units of four components,
+                       so if r0.x is used, that counts as all of r0.[xyzw] as used.
+                       There are separate full/half register footprint values as the
+                       full and half registers are independent (not overlapping).
+                       Presumably the thread scheduler hardware allocates the full/half
+                       register names from the actual physical register file and
+                       handles the register renaming.
+               </doc>
+               <bitfield name="HALFREGFOOTPRINT" low="4" high="9" type="uint"/>
+               <bitfield name="FULLREGFOOTPRINT" low="10" high="15" type="uint"/>
+               <bitfield name="THREADSIZE" pos="20" type="a3xx_threadsize"/>
+               <bitfield name="SUPERTHREADMODE" pos="21" type="boolean"/>
+               <doc>
+                       From regspec:
+                       SP_FS_CTRL_REG0.FS_LENGTH [31:24]: FS length, unit = 256bits.
+                       If bit31 is 1, it means overflow
+                       or any long shader.
+               </doc>
+               <bitfield name="LENGTH" low="24" high="31" type="uint"/>
+       </reg32>
+       <reg32 offset="0x22c5" name="SP_VS_CTRL_REG1">
+               <bitfield name="CONSTLENGTH" low="0" high="9" type="uint"/>
+               <!--
+                       not sure about full vs half const.. I can't get blob generate
+                       something with a mediump/lowp uniform.
+                -->
+               <bitfield name="CONSTFOOTPRINT" low="10" high="19" type="uint"/>
+               <bitfield name="INITIALOUTSTANDING" low="24" high="30" type="uint"/>
+       </reg32>
+       <reg32 offset="0x22c6" name="SP_VS_PARAM_REG">
+               <bitfield name="POSREGID" low="0" high="7" type="a3xx_regid"/>
+               <bitfield name="PSIZEREGID" low="8" high="15" type="a3xx_regid"/>
+               <bitfield name="POS2DMODE" pos="16" type="boolean"/>
+               <bitfield name="TOTALVSOUTVAR" low="20" high="24" type="uint"/>
+       </reg32>
+       <array offset="0x22c7" name="SP_VS_OUT" stride="1" length="8">
+               <reg32 offset="0x0" name="REG">
+                       <bitfield name="A_REGID" low="0" high="7" type="a3xx_regid"/>
+                       <bitfield name="A_HALF" pos="8" type="boolean"/>
+                       <bitfield name="A_COMPMASK" low="9" high="12" type="hex"/>
+                       <bitfield name="B_REGID" low="16" high="23" type="a3xx_regid"/>
+                       <bitfield name="B_HALF" pos="24" type="boolean"/>
+                       <bitfield name="B_COMPMASK" low="25" high="28" type="hex"/>
+               </reg32>
+       </array>
+       <array offset="0x22d0" name="SP_VS_VPC_DST" stride="1" length="4">
+               <reg32 offset="0x0" name="REG">
+                       <doc>
+                               These seem to be offsets for storage of the varyings.
+                               Always seems to start from 8, possibly loc 0 and 4
+                               are for gl_Position and gl_PointSize?
+                       </doc>
+                       <bitfield name="OUTLOC0" low="0" high="6" type="uint"/>
+                       <bitfield name="OUTLOC1" low="8" high="14" type="uint"/>
+                       <bitfield name="OUTLOC2" low="16" high="22" type="uint"/>
+                       <bitfield name="OUTLOC3" low="24" high="30" type="uint"/>
+               </reg32>
+       </array>
+       <reg32 offset="0x22d4" name="SP_VS_OBJ_OFFSET_REG" type="sp_vs_fs_obj_offset_reg"/>
+       <doc>
+               SP_VS_OBJ_START_REG contains pointer to the vertex shader program,
+               immediately followed by the binning shader program (although I
+               guess that is probably just re-using the same gpu buffer)
+       </doc>
+       <reg32 offset="0x22d5" name="SP_VS_OBJ_START_REG"/>
+       <reg32 offset="0x22d6" name="SP_VS_PVT_MEM_PARAM_REG">
+               <bitfield name="MEMSIZEPERITEM" low="0" high="7" type="uint"/>
+               <bitfield name="HWSTACKOFFSET" low="8" high="23" type="uint"/>
+               <bitfield name="HWSTACKSIZEPERTHREAD" low="24" high="31" type="uint"/>
+       </reg32>
+       <reg32 offset="0x22d7" name="SP_VS_PVT_MEM_ADDR_REG">
+               <bitfield name="BURSTLEN" low="0" high="4"/>
+               <bitfield name="SHADERSTARTADDRESS" shr="5" low="5" high="31"/>
+       </reg32>
+       <reg32 offset="0x22d8" name="SP_VS_PVT_MEM_SIZE_REG"/>
+       <reg32 offset="0x22df" name="SP_VS_LENGTH_REG" type="a3xx_vs_fs_length_reg"/>
+       <reg32 offset="0x22e0" name="SP_FS_CTRL_REG0">
+               <bitfield name="THREADMODE" pos="0" type="a3xx_threadmode"/>
+               <bitfield name="INSTRBUFFERMODE" pos="1" type="a3xx_instrbuffermode"/>
+               <!-- maybe CACHEINVALID is two bits?? -->
+               <bitfield name="CACHEINVALID" pos="2" type="boolean"/>
+               <bitfield name="ALUSCHMODE" pos="3" type="boolean"/>
+               <doc>
+                       The full/half register footprint is in units of four components,
+                       so if r0.x is used, that counts as all of r0.[xyzw] as used.
+                       There are separate full/half register footprint values as the
+                       full and half registers are independent (not overlapping).
+                       Presumably the thread scheduler hardware allocates the full/half
+                       register names from the actual physical register file and
+                       handles the register renaming.
+               </doc>
+               <bitfield name="HALFREGFOOTPRINT" low="4" high="9" type="uint"/>
+               <bitfield name="FULLREGFOOTPRINT" low="10" high="15" type="uint"/>
+               <bitfield name="FSBYPASSENABLE" pos="17" type="boolean"/>
+               <bitfield name="INOUTREGOVERLAP" pos="18" type="boolean"/>
+               <bitfield name="OUTORDERED" pos="19" type="boolean"/>
+               <bitfield name="THREADSIZE" pos="20" type="a3xx_threadsize"/>
+               <bitfield name="SUPERTHREADMODE" pos="21" type="boolean"/>
+               <bitfield name="PIXLODENABLE" pos="22" type="boolean"/>
+               <bitfield name="COMPUTEMODE" pos="23" type="boolean"/>
+               <doc>
+                       From regspec:
+                       SP_FS_CTRL_REG0.FS_LENGTH [31:24]: FS length, unit = 256bits.
+                       If bit31 is 1, it means overflow
+                       or any long shader.
+               </doc>
+               <bitfield name="LENGTH" low="24" high="31" type="uint"/>
+       </reg32>
+       <reg32 offset="0x22e1" name="SP_FS_CTRL_REG1">
+               <bitfield name="CONSTLENGTH" low="0" high="9" type="uint"/>
+               <bitfield name="CONSTFOOTPRINT" low="10" high="19" type="uint"/>
+               <bitfield name="INITIALOUTSTANDING" low="20" high="23" type="uint"/>
+               <bitfield name="HALFPRECVAROFFSET" low="24" high="30" type="uint"/>
+       </reg32>
+       <reg32 offset="0x22e2" name="SP_FS_OBJ_OFFSET_REG" type="sp_vs_fs_obj_offset_reg"/>
+       <doc>SP_FS_OBJ_START_REG contains pointer to fragment shader program</doc>
+       <reg32 offset="0x22e3" name="SP_FS_OBJ_START_REG"/>
+       <reg32 offset="0x22e4" name="SP_FS_PVT_MEM_PARAM_REG">
+               <bitfield name="MEMSIZEPERITEM" low="0" high="7" type="uint"/>
+               <bitfield name="HWSTACKOFFSET" low="8" high="23" type="uint"/>
+               <bitfield name="HWSTACKSIZEPERTHREAD" low="24" high="31" type="uint"/>
+       </reg32>
+       <reg32 offset="0x22e5" name="SP_FS_PVT_MEM_ADDR_REG">
+               <bitfield name="BURSTLEN" low="0" high="4"/>
+               <bitfield name="SHADERSTARTADDRESS" shr="5" low="5" high="31"/>
+       </reg32>
+       <reg32 offset="0x22e6" name="SP_FS_PVT_MEM_SIZE_REG"/>
+       <reg32 offset="0x22e8" name="SP_FS_FLAT_SHAD_MODE_REG_0">
+               <doc>seems to be one bit per scalar, '1' for flat, '0' for smooth</doc>
+       </reg32>
+       <reg32 offset="0x22e9" name="SP_FS_FLAT_SHAD_MODE_REG_1">
+               <doc>seems to be one bit per scalar, '1' for flat, '0' for smooth</doc>
+       </reg32>
+       <reg32 offset="0x22ec" name="SP_FS_OUTPUT_REG">
+               <bitfield name="MRT" low="0" high="1" type="uint">
+                       <doc>render targets - 1</doc>
+               </bitfield>
+               <bitfield name="DEPTH_ENABLE" pos="7" type="boolean"/>
+               <bitfield name="DEPTH_REGID" low="8" high="15" type="a3xx_regid"/>
+       </reg32>
+       <array offset="0x22f0" name="SP_FS_MRT" stride="1" length="4">
+               <reg32 offset="0x0" name="REG">
+                       <bitfield name="REGID" low="0" high="7" type="a3xx_regid"/>
+                       <bitfield name="HALF_PRECISION" pos="8" type="boolean"/>
+                       <bitfield name="SINT" pos="10" type="boolean"/>
+                       <bitfield name="UINT" pos="11" type="boolean"/>
+               </reg32>
+       </array>
+       <array offset="0x22f4" name="SP_FS_IMAGE_OUTPUT" stride="1" length="4">
+               <reg32 offset="0x0" name="REG">
+                       <bitfield name="MRTFORMAT" low="0" high="5" type="a3xx_color_fmt"/>
+               </reg32>
+       </array>
+       <reg32 offset="0x22ff" name="SP_FS_LENGTH_REG" type="a3xx_vs_fs_length_reg"/>
+
+       <reg32 offset="0x2301" name="PA_SC_AA_CONFIG"/>
+       <!-- TPL1 registers -->
+       <!-- assume VS/FS_TEX_OFFSET is same -->
+       <bitset name="a3xx_tpl1_tp_vs_fs_tex_offset" inline="yes">
+               <bitfield name="SAMPLEROFFSET" low="0" high="7" type="uint"/>
+               <bitfield name="MEMOBJOFFSET" low="8" high="15" type="uint"/>
+               <!-- not sure the size of this: -->
+               <bitfield name="BASETABLEPTR" low="16" high="31" type="uint"/>
+       </bitset>
+       <reg32 offset="0x2340" name="TPL1_TP_VS_TEX_OFFSET" type="a3xx_tpl1_tp_vs_fs_tex_offset"/>
+       <reg32 offset="0x2341" name="TPL1_TP_VS_BORDER_COLOR_BASE_ADDR"/>
+       <reg32 offset="0x2342" name="TPL1_TP_FS_TEX_OFFSET" type="a3xx_tpl1_tp_vs_fs_tex_offset"/>
+       <reg32 offset="0x2343" name="TPL1_TP_FS_BORDER_COLOR_BASE_ADDR"/>
+
+       <!-- VBIF registers -->
+       <reg32 offset="0x3001" name="VBIF_CLKON"/>
+       <reg32 offset="0x300c" name="VBIF_FIXED_SORT_EN"/>
+       <reg32 offset="0x300d" name="VBIF_FIXED_SORT_SEL0"/>
+       <reg32 offset="0x300e" name="VBIF_FIXED_SORT_SEL1"/>
+       <reg32 offset="0x301c" name="VBIF_ABIT_SORT"/>
+       <reg32 offset="0x301d" name="VBIF_ABIT_SORT_CONF"/>
+       <reg32 offset="0x302a" name="VBIF_GATE_OFF_WRREQ_EN"/>
+       <reg32 offset="0x302c" name="VBIF_IN_RD_LIM_CONF0"/>
+       <reg32 offset="0x302d" name="VBIF_IN_RD_LIM_CONF1"/>
+       <reg32 offset="0x3030" name="VBIF_IN_WR_LIM_CONF0"/>
+       <reg32 offset="0x3031" name="VBIF_IN_WR_LIM_CONF1"/>
+       <reg32 offset="0x3034" name="VBIF_OUT_RD_LIM_CONF0"/>
+       <reg32 offset="0x3035" name="VBIF_OUT_WR_LIM_CONF0"/>
+       <reg32 offset="0x3036" name="VBIF_DDR_OUT_MAX_BURST"/>
+       <reg32 offset="0x303c" name="VBIF_ARB_CTL"/>
+       <reg32 offset="0x3049" name="VBIF_ROUND_ROBIN_QOS_ARB"/>
+       <reg32 offset="0x3058" name="VBIF_OUT_AXI_AMEMTYPE_CONF0"/>
+       <reg32 offset="0x305e" name="VBIF_OUT_AXI_AOOO_EN"/>
+       <reg32 offset="0x305f" name="VBIF_OUT_AXI_AOOO"/>
+
+       <bitset name="a3xx_vbif_perf_cnt" inline="yes">
+               <bitfield name="CNT0" pos="0" type="boolean"/>
+               <bitfield name="CNT1" pos="1" type="boolean"/>
+               <bitfield name="PWRCNT0" pos="2" type="boolean"/>
+               <bitfield name="PWRCNT1" pos="3" type="boolean"/>
+               <bitfield name="PWRCNT2" pos="4" type="boolean"/>
+       </bitset>
+
+       <reg32 offset="0x3070" name="VBIF_PERF_CNT_EN" type="a3xx_vbif_perf_cnt"/>
+       <reg32 offset="0x3071" name="VBIF_PERF_CNT_CLR" type="a3xx_vbif_perf_cnt"/>
+       <reg32 offset="0x3072" name="VBIF_PERF_CNT_SEL"/>
+       <reg32 offset="0x3073" name="VBIF_PERF_CNT0_LO"/>
+       <reg32 offset="0x3074" name="VBIF_PERF_CNT0_HI"/>
+       <reg32 offset="0x3075" name="VBIF_PERF_CNT1_LO"/>
+       <reg32 offset="0x3076" name="VBIF_PERF_CNT1_HI"/>
+       <reg32 offset="0x3077" name="VBIF_PERF_PWR_CNT0_LO"/>
+       <reg32 offset="0x3078" name="VBIF_PERF_PWR_CNT0_HI"/>
+       <reg32 offset="0x3079" name="VBIF_PERF_PWR_CNT1_LO"/>
+       <reg32 offset="0x307a" name="VBIF_PERF_PWR_CNT1_HI"/>
+       <reg32 offset="0x307b" name="VBIF_PERF_PWR_CNT2_LO"/>
+       <reg32 offset="0x307c" name="VBIF_PERF_PWR_CNT2_HI"/>
+
+
+       <reg32 offset="0x0c01" name="VSC_BIN_SIZE">
+               <bitfield name="WIDTH" low="0" high="4" shr="5" type="uint"/>
+               <bitfield name="HEIGHT" low="5" high="9" shr="5" type="uint"/>
+       </reg32>
+
+       <reg32 offset="0x0c02" name="VSC_SIZE_ADDRESS"/>
+       <array offset="0x0c06" name="VSC_PIPE" stride="3" length="8">
+               <reg32 offset="0x0" name="CONFIG">
+                       <doc>
+                               Configures the mapping between VSC_PIPE buffer and
+                               bin, X/Y specify the bin index in the horiz/vert
+                               direction (0,0 is upper left, 0,1 is leftmost bin
+                               on second row, and so on).  W/H specify the number
+                               of bins assigned to this VSC_PIPE in the horiz/vert
+                               dimension.
+                       </doc>
+                       <bitfield name="X" low="0" high="9" type="uint"/>
+                       <bitfield name="Y" low="10" high="19" type="uint"/>
+                       <bitfield name="W" low="20" high="23" type="uint"/>
+                       <bitfield name="H" low="24" high="27" type="uint"/>
+               </reg32>
+               <reg32 offset="0x1" name="DATA_ADDRESS"/>
+               <reg32 offset="0x2" name="DATA_LENGTH"/>
+       </array>
+       <reg32 offset="0x0c3c" name="VSC_BIN_CONTROL">
+               <doc>seems to be set to 0x00000001 during binning pass</doc>
+               <bitfield name="BINNING_ENABLE" pos="0" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x0c3d" name="UNKNOWN_0C3D">
+               <doc>seems to be always set to 0x00000001</doc>
+       </reg32>
+       <reg32 offset="0x0c48" name="PC_PERFCOUNTER0_SELECT" type="a3xx_pc_perfcounter_select"/>
+       <reg32 offset="0x0c49" name="PC_PERFCOUNTER1_SELECT" type="a3xx_pc_perfcounter_select"/>
+       <reg32 offset="0x0c4a" name="PC_PERFCOUNTER2_SELECT" type="a3xx_pc_perfcounter_select"/>
+       <reg32 offset="0x0c4b" name="PC_PERFCOUNTER3_SELECT" type="a3xx_pc_perfcounter_select"/>
+       <reg32 offset="0x0c81" name="GRAS_TSE_DEBUG_ECO">
+               <doc>seems to be always set to 0x00000001</doc>
+       </reg32>
+
+       <reg32 offset="0x0c88" name="GRAS_PERFCOUNTER0_SELECT" type="a3xx_gras_tse_perfcounter_select"/>
+       <reg32 offset="0x0c89" name="GRAS_PERFCOUNTER1_SELECT" type="a3xx_gras_tse_perfcounter_select"/>
+       <reg32 offset="0x0c8a" name="GRAS_PERFCOUNTER2_SELECT" type="a3xx_gras_ras_perfcounter_select"/>
+       <reg32 offset="0x0c8b" name="GRAS_PERFCOUNTER3_SELECT" type="a3xx_gras_ras_perfcounter_select"/>
+       <array offset="0x0ca0" name="GRAS_CL_USER_PLANE" stride="4" length="6">
+               <reg32 offset="0x0" name="X"/>
+               <reg32 offset="0x1" name="Y"/>
+               <reg32 offset="0x2" name="Z"/>
+               <reg32 offset="0x3" name="W"/>
+       </array>
+       <reg32 offset="0x0cc0" name="RB_GMEM_BASE_ADDR"/>
+       <reg32 offset="0x0cc1" name="RB_DEBUG_ECO_CONTROLS_ADDR"/>
+       <reg32 offset="0x0cc6" name="RB_PERFCOUNTER0_SELECT" type="a3xx_rb_perfcounter_select"/>
+       <reg32 offset="0x0cc7" name="RB_PERFCOUNTER1_SELECT" type="a3xx_rb_perfcounter_select"/>
+       <reg32 offset="0x0ce0" name="RB_FRAME_BUFFER_DIMENSION">
+               <bitfield name="WIDTH" low="0" high="13" type="uint"/>
+               <bitfield name="HEIGHT" low="14" high="27" type="uint"/>
+       </reg32>
+       <reg32 offset="0x0e00" name="HLSQ_PERFCOUNTER0_SELECT" type="a3xx_hlsq_perfcounter_select"/>
+       <reg32 offset="0x0e01" name="HLSQ_PERFCOUNTER1_SELECT" type="a3xx_hlsq_perfcounter_select"/>
+       <reg32 offset="0x0e02" name="HLSQ_PERFCOUNTER2_SELECT" type="a3xx_hlsq_perfcounter_select"/>
+       <reg32 offset="0x0e03" name="HLSQ_PERFCOUNTER3_SELECT" type="a3xx_hlsq_perfcounter_select"/>
+       <reg32 offset="0x0e04" name="HLSQ_PERFCOUNTER4_SELECT" type="a3xx_hlsq_perfcounter_select"/>
+       <reg32 offset="0x0e05" name="HLSQ_PERFCOUNTER5_SELECT" type="a3xx_hlsq_perfcounter_select"/>
+       <reg32 offset="0x0e43" name="UNKNOWN_0E43">
+               <doc>seems to be always set to 0x00000001</doc>
+       </reg32>
+       <reg32 offset="0x0e44" name="VFD_PERFCOUNTER0_SELECT" type="a3xx_vfd_perfcounter_select"/>
+       <reg32 offset="0x0e45" name="VFD_PERFCOUNTER1_SELECT" type="a3xx_vfd_perfcounter_select"/>
+       <reg32 offset="0x0e61" name="VPC_VPC_DEBUG_RAM_SEL"/>
+       <reg32 offset="0x0e62" name="VPC_VPC_DEBUG_RAM_READ"/>
+       <reg32 offset="0x0e64" name="VPC_PERFCOUNTER0_SELECT" type="a3xx_vpc_perfcounter_select"/>
+       <reg32 offset="0x0e65" name="VPC_PERFCOUNTER1_SELECT" type="a3xx_vpc_perfcounter_select"/>
+       <reg32 offset="0x0e82" name="UCHE_CACHE_MODE_CONTROL_REG"/>
+       <reg32 offset="0x0e84" name="UCHE_PERFCOUNTER0_SELECT" type="a3xx_uche_perfcounter_select"/>
+       <reg32 offset="0x0e85" name="UCHE_PERFCOUNTER1_SELECT" type="a3xx_uche_perfcounter_select"/>
+       <reg32 offset="0x0e86" name="UCHE_PERFCOUNTER2_SELECT" type="a3xx_uche_perfcounter_select"/>
+       <reg32 offset="0x0e87" name="UCHE_PERFCOUNTER3_SELECT" type="a3xx_uche_perfcounter_select"/>
+       <reg32 offset="0x0e88" name="UCHE_PERFCOUNTER4_SELECT" type="a3xx_uche_perfcounter_select"/>
+       <reg32 offset="0x0e89" name="UCHE_PERFCOUNTER5_SELECT" type="a3xx_uche_perfcounter_select"/>
+       <reg32 offset="0x0ea0" name="UCHE_CACHE_INVALIDATE0_REG">
+               <!-- might be shifted right by 5, assuming 32byte cache line size.. -->
+               <bitfield name="ADDR" low="0" high="27" type="hex"/>
+       </reg32>
+       <reg32 offset="0x0ea1" name="UCHE_CACHE_INVALIDATE1_REG">
+               <!-- might be shifted right by 5, assuming 32byte cache line size.. -->
+               <bitfield name="ADDR" low="0" high="27" type="hex"/>
+               <!-- I'd assume 2 bits, for FLUSH/INVALIDATE/CLEAN? -->
+               <bitfield name="OPCODE" low="28" high="29" type="a3xx_cache_opcode"/>
+               <bitfield name="ENTIRE_CACHE" pos="31" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x0ea6" name="UNKNOWN_0EA6"/>
+       <reg32 offset="0x0ec4" name="SP_PERFCOUNTER0_SELECT" type="a3xx_sp_perfcounter_select"/>
+       <reg32 offset="0x0ec5" name="SP_PERFCOUNTER1_SELECT" type="a3xx_sp_perfcounter_select"/>
+       <reg32 offset="0x0ec6" name="SP_PERFCOUNTER2_SELECT" type="a3xx_sp_perfcounter_select"/>
+       <reg32 offset="0x0ec7" name="SP_PERFCOUNTER3_SELECT" type="a3xx_sp_perfcounter_select"/>
+       <reg32 offset="0x0ec8" name="SP_PERFCOUNTER4_SELECT" type="a3xx_sp_perfcounter_select"/>
+       <reg32 offset="0x0ec9" name="SP_PERFCOUNTER5_SELECT" type="a3xx_sp_perfcounter_select"/>
+       <reg32 offset="0x0eca" name="SP_PERFCOUNTER6_SELECT" type="a3xx_sp_perfcounter_select"/>
+       <reg32 offset="0x0ecb" name="SP_PERFCOUNTER7_SELECT" type="a3xx_sp_perfcounter_select"/>
+       <reg32 offset="0x0ee0" name="UNKNOWN_0EE0">
+               <doc>seems to be always set to 0x00000003</doc>
+       </reg32>
+       <reg32 offset="0x0f03" name="UNKNOWN_0F03">
+               <doc>seems to be always set to 0x00000001</doc>
+       </reg32>
+       <reg32 offset="0x0f04" name="TP_PERFCOUNTER0_SELECT" type="a3xx_tp_perfcounter_select"/>
+       <reg32 offset="0x0f05" name="TP_PERFCOUNTER1_SELECT" type="a3xx_tp_perfcounter_select"/>
+       <reg32 offset="0x0f06" name="TP_PERFCOUNTER2_SELECT" type="a3xx_tp_perfcounter_select"/>
+       <reg32 offset="0x0f07" name="TP_PERFCOUNTER3_SELECT" type="a3xx_tp_perfcounter_select"/>
+       <reg32 offset="0x0f08" name="TP_PERFCOUNTER4_SELECT" type="a3xx_tp_perfcounter_select"/>
+       <reg32 offset="0x0f09" name="TP_PERFCOUNTER5_SELECT" type="a3xx_tp_perfcounter_select"/>
+
+       <!-- this seems to be the register that CP_RUN_OPENCL writes: -->
+       <reg32 offset="0x21f0" name="VGT_CL_INITIATOR"/>
+
+       <!-- seems to be same as a2xx according to fwdump.. -->
+       <reg32 offset="0x21f9" name="VGT_EVENT_INITIATOR"/>
+       <reg32 offset="0x21fc" name="VGT_DRAW_INITIATOR" type="vgt_draw_initiator"/>
+       <reg32 offset="0x21fd" name="VGT_IMMED_DATA"/>
+</domain>
+
+<domain name="A3XX_TEX_SAMP" width="32">
+       <doc>Texture sampler dwords</doc>
+       <enum name="a3xx_tex_filter">
+               <value name="A3XX_TEX_NEAREST" value="0"/>
+               <value name="A3XX_TEX_LINEAR" value="1"/>
+               <value name="A3XX_TEX_ANISO" value="2"/>
+       </enum>
+       <enum name="a3xx_tex_clamp">
+               <value name="A3XX_TEX_REPEAT" value="0"/>
+               <value name="A3XX_TEX_CLAMP_TO_EDGE" value="1"/>
+               <value name="A3XX_TEX_MIRROR_REPEAT" value="2"/>
+               <value name="A3XX_TEX_CLAMP_TO_BORDER" value="3"/>
+               <value name="A3XX_TEX_MIRROR_CLAMP" value="4"/>
+       </enum>
+       <enum name="a3xx_tex_aniso">
+               <value name="A3XX_TEX_ANISO_1" value="0"/>
+               <value name="A3XX_TEX_ANISO_2" value="1"/>
+               <value name="A3XX_TEX_ANISO_4" value="2"/>
+               <value name="A3XX_TEX_ANISO_8" value="3"/>
+               <value name="A3XX_TEX_ANISO_16" value="4"/>
+       </enum>
+       <reg32 offset="0" name="0">
+               <bitfield name="CLAMPENABLE" pos="0" type="boolean"/>
+               <bitfield name="MIPFILTER_LINEAR" pos="1" type="boolean"/>
+               <bitfield name="XY_MAG" low="2" high="3" type="a3xx_tex_filter"/>
+               <bitfield name="XY_MIN" low="4" high="5" type="a3xx_tex_filter"/>
+               <bitfield name="WRAP_S" low="6" high="8" type="a3xx_tex_clamp"/>
+               <bitfield name="WRAP_T" low="9" high="11" type="a3xx_tex_clamp"/>
+               <bitfield name="WRAP_R" low="12" high="14" type="a3xx_tex_clamp"/>
+               <bitfield name="ANISO" low="15" high="17" type="a3xx_tex_aniso"/>
+               <bitfield name="COMPARE_FUNC" low="20" high="22" type="adreno_compare_func"/>
+               <bitfield name="CUBEMAPSEAMLESSFILTOFF" pos="24" type="boolean"/>
+               <!-- UNNORM_COORDS == CLK_NORMALIZED_COORDS_FALSE -->
+               <bitfield name="UNNORM_COORDS" pos="31" type="boolean"/>
+       </reg32>
+       <reg32 offset="1" name="1">
+               <bitfield name="LOD_BIAS" low="0" high="10" type="fixed" radix="6"/>
+               <bitfield name="MAX_LOD" low="12" high="21" type="ufixed" radix="6"/>
+               <bitfield name="MIN_LOD" low="22" high="31" type="ufixed" radix="6"/>
+       </reg32>
+</domain>
+
+<domain name="A3XX_TEX_CONST" width="32">
+       <doc>Texture constant dwords</doc>
+       <enum name="a3xx_tex_swiz">
+               <!-- same as a2xx? -->
+               <value name="A3XX_TEX_X" value="0"/>
+               <value name="A3XX_TEX_Y" value="1"/>
+               <value name="A3XX_TEX_Z" value="2"/>
+               <value name="A3XX_TEX_W" value="3"/>
+               <value name="A3XX_TEX_ZERO" value="4"/>
+               <value name="A3XX_TEX_ONE" value="5"/>
+       </enum>
+       <enum name="a3xx_tex_type">
+               <value name="A3XX_TEX_1D" value="0"/>
+               <value name="A3XX_TEX_2D" value="1"/>
+               <value name="A3XX_TEX_CUBE" value="2"/>
+               <value name="A3XX_TEX_3D" value="3"/>
+       </enum>
+       <enum name="a3xx_tex_msaa">
+               <value name="A3XX_TPL1_MSAA1X" value="0"/>
+               <value name="A3XX_TPL1_MSAA2X" value="1"/>
+               <value name="A3XX_TPL1_MSAA4X" value="2"/>
+               <value name="A3XX_TPL1_MSAA8X" value="3"/>
+       </enum>
+       <reg32 offset="0" name="0">
+               <bitfield name="TILE_MODE" low="0" high="1" type="a3xx_tile_mode"/>
+               <bitfield name="SRGB" pos="2" type="boolean"/>
+               <bitfield name="SWIZ_X" low="4" high="6" type="a3xx_tex_swiz"/>
+               <bitfield name="SWIZ_Y" low="7" high="9" type="a3xx_tex_swiz"/>
+               <bitfield name="SWIZ_Z" low="10" high="12" type="a3xx_tex_swiz"/>
+               <bitfield name="SWIZ_W" low="13" high="15" type="a3xx_tex_swiz"/>
+               <bitfield name="MIPLVLS" low="16" high="19" type="uint"/>
+               <bitfield name="MSAATEX" low="20" high="21" type="a3xx_tex_msaa"/>
+               <bitfield name="FMT" low="22" high="28" type="a3xx_tex_fmt"/>
+               <bitfield name="NOCONVERT" pos="29" type="boolean"/>
+               <bitfield name="TYPE" low="30" high="31" type="a3xx_tex_type"/>
+       </reg32>
+       <reg32 offset="1" name="1">
+               <bitfield name="HEIGHT" low="0" high="13" type="uint"/>
+               <bitfield name="WIDTH" low="14" high="27" type="uint"/>
+               <!-- minimum pitch (for mipmap levels): log2(pitchalign / 16) -->
+               <bitfield name="PITCHALIGN" low="28" high="31" type="uint"/>
+       </reg32>
+       <reg32 offset="2" name="2">
+               <doc>INDX is index of texture address(es) in MIPMAP state block</doc>
+               <bitfield name="INDX" low="0" high="8" type="uint"/>
+               <doc>Pitch in bytes (so actually stride)</doc>
+               <bitfield name="PITCH" low="12" high="29" type="uint"/>
+               <doc>SWAP bit is set for BGRA instead of RGBA</doc>
+               <bitfield name="SWAP" low="30" high="31" type="a3xx_color_swap"/>
+       </reg32>
+       <reg32 offset="3" name="3">
+               <!--
+               Update: the two LAYERSZn seem not to be the same thing.
+               According to Ilia's experimentation the first one goes up
+               to at *least* bit 14..
+                -->
+               <bitfield name="LAYERSZ1" low="0" high="16" shr="12" type="uint"/>
+               <bitfield name="DEPTH" low="17" high="27" type="uint"/>
+               <bitfield name="LAYERSZ2" low="28" high="31" shr="12" type="uint"/>
+       </reg32>
+</domain>
+
+</database>
diff --git a/src/freedreno/registers/adreno/a4xx.xml b/src/freedreno/registers/adreno/a4xx.xml
new file mode 100644 (file)
index 0000000..b4c4253
--- /dev/null
@@ -0,0 +1,2390 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<database xmlns="http://nouveau.freedesktop.org/"
+xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+xsi:schemaLocation="http://nouveau.freedesktop.org/ rules-ng.xsd">
+<import file="freedreno_copyright.xml"/>
+<import file="adreno/adreno_common.xml"/>
+<import file="adreno/adreno_pm4.xml"/>
+
+<enum name="a4xx_color_fmt">
+       <value name="RB4_A8_UNORM" value="0x01"/>
+       <value name="RB4_R8_UNORM" value="0x02"/>
+       <value name="RB4_R8_SNORM" value="0x03"/>
+       <value name="RB4_R8_UINT" value="0x04"/>
+       <value name="RB4_R8_SINT" value="0x05"/>
+
+       <value name="RB4_R4G4B4A4_UNORM" value="0x08"/>
+       <value name="RB4_R5G5B5A1_UNORM" value="0x0a"/>
+       <value name="RB4_R5G6B5_UNORM" value="0x0e"/>
+       <value name="RB4_R8G8_UNORM" value="0x0f"/>
+       <value name="RB4_R8G8_SNORM" value="0x10"/>
+       <value name="RB4_R8G8_UINT" value="0x11"/>
+       <value name="RB4_R8G8_SINT" value="0x12"/>
+       <value name="RB4_R16_UNORM" value="0x13"/>
+       <value name="RB4_R16_SNORM" value="0x14"/>
+       <value name="RB4_R16_FLOAT" value="0x15"/>
+       <value name="RB4_R16_UINT" value="0x16"/>
+       <value name="RB4_R16_SINT" value="0x17"/>
+
+       <value name="RB4_R8G8B8_UNORM" value="0x19"/>
+
+       <value name="RB4_R8G8B8A8_UNORM" value="0x1a"/>
+       <value name="RB4_R8G8B8A8_SNORM" value="0x1c"/>
+       <value name="RB4_R8G8B8A8_UINT" value="0x1d"/>
+       <value name="RB4_R8G8B8A8_SINT" value="0x1e"/>
+       <value name="RB4_R10G10B10A2_UNORM" value="0x1f"/>
+       <value name="RB4_R10G10B10A2_UINT" value="0x22"/>
+       <value name="RB4_R11G11B10_FLOAT" value="0x27"/>
+       <value name="RB4_R16G16_UNORM" value="0x28"/>
+       <value name="RB4_R16G16_SNORM" value="0x29"/>
+       <value name="RB4_R16G16_FLOAT" value="0x2a"/>
+       <value name="RB4_R16G16_UINT" value="0x2b"/>
+       <value name="RB4_R16G16_SINT" value="0x2c"/>
+       <value name="RB4_R32_FLOAT" value="0x2d"/>
+       <value name="RB4_R32_UINT" value="0x2e"/>
+       <value name="RB4_R32_SINT" value="0x2f"/>
+
+       <value name="RB4_R16G16B16A16_UNORM" value="0x34"/>
+       <value name="RB4_R16G16B16A16_SNORM" value="0x35"/>
+       <value name="RB4_R16G16B16A16_FLOAT" value="0x36"/>
+       <value name="RB4_R16G16B16A16_UINT" value="0x37"/>
+       <value name="RB4_R16G16B16A16_SINT" value="0x38"/>
+       <value name="RB4_R32G32_FLOAT" value="0x39"/>
+       <value name="RB4_R32G32_UINT" value="0x3a"/>
+       <value name="RB4_R32G32_SINT" value="0x3b"/>
+
+       <value name="RB4_R32G32B32A32_FLOAT" value="0x3c"/>
+       <value name="RB4_R32G32B32A32_UINT" value="0x3d"/>
+       <value name="RB4_R32G32B32A32_SINT" value="0x3e"/>
+
+       <value name="RB4_NONE" value="0xff"/>
+</enum>
+
+<enum name="a4xx_tile_mode">
+       <value name="TILE4_LINEAR" value="0"/>
+       <value name="TILE4_2" value="2"/>
+       <value name="TILE4_3" value="3"/>
+</enum>
+
+<enum name="a4xx_vtx_fmt" prefix="chipset">
+       <!-- hmm, shifted one compared to a3xx?!?  -->
+       <value name="VFMT4_32_FLOAT" value="0x1"/>
+       <value name="VFMT4_32_32_FLOAT" value="0x2"/>
+       <value name="VFMT4_32_32_32_FLOAT" value="0x3"/>
+       <value name="VFMT4_32_32_32_32_FLOAT" value="0x4"/>
+
+       <value name="VFMT4_16_FLOAT" value="0x5"/>
+       <value name="VFMT4_16_16_FLOAT" value="0x6"/>
+       <value name="VFMT4_16_16_16_FLOAT" value="0x7"/>
+       <value name="VFMT4_16_16_16_16_FLOAT" value="0x8"/>
+
+       <value name="VFMT4_32_FIXED" value="0x9"/>
+       <value name="VFMT4_32_32_FIXED" value="0xa"/>
+       <value name="VFMT4_32_32_32_FIXED" value="0xb"/>
+       <value name="VFMT4_32_32_32_32_FIXED" value="0xc"/>
+
+       <value name="VFMT4_11_11_10_FLOAT" value="0xd"/>
+
+       <!-- beyond here it does not appear to be shifted -->
+       <value name="VFMT4_16_SINT" value="0x10"/>
+       <value name="VFMT4_16_16_SINT" value="0x11"/>
+       <value name="VFMT4_16_16_16_SINT" value="0x12"/>
+       <value name="VFMT4_16_16_16_16_SINT" value="0x13"/>
+       <value name="VFMT4_16_UINT" value="0x14"/>
+       <value name="VFMT4_16_16_UINT" value="0x15"/>
+       <value name="VFMT4_16_16_16_UINT" value="0x16"/>
+       <value name="VFMT4_16_16_16_16_UINT" value="0x17"/>
+       <value name="VFMT4_16_SNORM" value="0x18"/>
+       <value name="VFMT4_16_16_SNORM" value="0x19"/>
+       <value name="VFMT4_16_16_16_SNORM" value="0x1a"/>
+       <value name="VFMT4_16_16_16_16_SNORM" value="0x1b"/>
+       <value name="VFMT4_16_UNORM" value="0x1c"/>
+       <value name="VFMT4_16_16_UNORM" value="0x1d"/>
+       <value name="VFMT4_16_16_16_UNORM" value="0x1e"/>
+       <value name="VFMT4_16_16_16_16_UNORM" value="0x1f"/>
+
+       <value name="VFMT4_32_UINT" value="0x20"/>
+       <value name="VFMT4_32_32_UINT" value="0x21"/>
+       <value name="VFMT4_32_32_32_UINT" value="0x22"/>
+       <value name="VFMT4_32_32_32_32_UINT" value="0x23"/>
+       <value name="VFMT4_32_SINT" value="0x24"/>
+       <value name="VFMT4_32_32_SINT" value="0x25"/>
+       <value name="VFMT4_32_32_32_SINT" value="0x26"/>
+       <value name="VFMT4_32_32_32_32_SINT" value="0x27"/>
+
+       <value name="VFMT4_8_UINT" value="0x28"/>
+       <value name="VFMT4_8_8_UINT" value="0x29"/>
+       <value name="VFMT4_8_8_8_UINT" value="0x2a"/>
+       <value name="VFMT4_8_8_8_8_UINT" value="0x2b"/>
+       <value name="VFMT4_8_UNORM" value="0x2c"/>
+       <value name="VFMT4_8_8_UNORM" value="0x2d"/>
+       <value name="VFMT4_8_8_8_UNORM" value="0x2e"/>
+       <value name="VFMT4_8_8_8_8_UNORM" value="0x2f"/>
+       <value name="VFMT4_8_SINT" value="0x30"/>
+       <value name="VFMT4_8_8_SINT" value="0x31"/>
+       <value name="VFMT4_8_8_8_SINT" value="0x32"/>
+       <value name="VFMT4_8_8_8_8_SINT" value="0x33"/>
+       <value name="VFMT4_8_SNORM" value="0x34"/>
+       <value name="VFMT4_8_8_SNORM" value="0x35"/>
+       <value name="VFMT4_8_8_8_SNORM" value="0x36"/>
+       <value name="VFMT4_8_8_8_8_SNORM" value="0x37"/>
+
+       <value name="VFMT4_10_10_10_2_UINT" value="0x38"/>
+       <value name="VFMT4_10_10_10_2_UNORM" value="0x39"/>
+       <value name="VFMT4_10_10_10_2_SINT" value="0x3a"/>
+       <value name="VFMT4_10_10_10_2_SNORM" value="0x3b"/>
+       <value name="VFMT4_2_10_10_10_UINT" value="0x3c"/>
+       <value name="VFMT4_2_10_10_10_UNORM" value="0x3d"/>
+       <value name="VFMT4_2_10_10_10_SINT" value="0x3e"/>
+       <value name="VFMT4_2_10_10_10_SNORM" value="0x3f"/>
+
+       <value name="VFMT4_NONE" value="0xff"/>
+</enum>
+
+<enum name="a4xx_tex_fmt">
+       <!-- 0x00 .. 0x02 -->
+
+       <!-- 8-bit formats -->
+       <value name="TFMT4_A8_UNORM" value="0x03"/>
+       <value name="TFMT4_8_UNORM"  value="0x04"/>
+       <value name="TFMT4_8_SNORM"  value="0x05"/>
+       <value name="TFMT4_8_UINT"   value="0x06"/>
+       <value name="TFMT4_8_SINT"   value="0x07"/>
+
+       <!-- 16-bit formats -->
+       <value name="TFMT4_4_4_4_4_UNORM" value="0x08"/>
+       <value name="TFMT4_5_5_5_1_UNORM" value="0x09"/>
+       <!-- 0x0a -->
+       <value name="TFMT4_5_6_5_UNORM"   value="0x0b"/>
+
+       <!-- 0x0c -->
+
+       <value name="TFMT4_L8_A8_UNORM" value="0x0d"/>
+       <value name="TFMT4_8_8_UNORM"   value="0x0e"/>
+       <value name="TFMT4_8_8_SNORM"   value="0x0f"/>
+       <value name="TFMT4_8_8_UINT"    value="0x10"/>
+       <value name="TFMT4_8_8_SINT"    value="0x11"/>
+
+       <value name="TFMT4_16_UNORM" value="0x12"/>
+       <value name="TFMT4_16_SNORM" value="0x13"/>
+       <value name="TFMT4_16_FLOAT" value="0x14"/>
+       <value name="TFMT4_16_UINT"  value="0x15"/>
+       <value name="TFMT4_16_SINT"  value="0x16"/>
+
+       <!-- 0x17 .. 0x1b -->
+
+       <!-- 32-bit formats -->
+       <value name="TFMT4_8_8_8_8_UNORM" value="0x1c"/>
+       <value name="TFMT4_8_8_8_8_SNORM" value="0x1d"/>
+       <value name="TFMT4_8_8_8_8_UINT"  value="0x1e"/>
+       <value name="TFMT4_8_8_8_8_SINT"  value="0x1f"/>
+
+       <value name="TFMT4_9_9_9_E5_FLOAT"   value="0x20"/>
+       <value name="TFMT4_10_10_10_2_UNORM" value="0x21"/>
+       <value name="TFMT4_10_10_10_2_UINT"  value="0x22"/>
+       <!-- 0x23 .. 0x24 -->
+       <value name="TFMT4_11_11_10_FLOAT"   value="0x25"/>
+
+       <value name="TFMT4_16_16_UNORM" value="0x26"/>
+       <value name="TFMT4_16_16_SNORM" value="0x27"/>
+       <value name="TFMT4_16_16_FLOAT" value="0x28"/>
+       <value name="TFMT4_16_16_UINT"  value="0x29"/>
+       <value name="TFMT4_16_16_SINT"  value="0x2a"/>
+
+       <value name="TFMT4_32_FLOAT" value="0x2b"/>
+       <value name="TFMT4_32_UINT"  value="0x2c"/>
+       <value name="TFMT4_32_SINT"  value="0x2d"/>
+
+       <!-- 0x2e .. 0x32 -->
+
+       <!-- 64-bit formats -->
+       <value name="TFMT4_16_16_16_16_UNORM" value="0x33"/>
+       <value name="TFMT4_16_16_16_16_SNORM" value="0x34"/>
+       <value name="TFMT4_16_16_16_16_FLOAT" value="0x35"/>
+       <value name="TFMT4_16_16_16_16_UINT"  value="0x36"/>
+       <value name="TFMT4_16_16_16_16_SINT"  value="0x37"/>
+
+       <value name="TFMT4_32_32_FLOAT" value="0x38"/>
+       <value name="TFMT4_32_32_UINT"  value="0x39"/>
+       <value name="TFMT4_32_32_SINT"  value="0x3a"/>
+
+       <!-- 96-bit formats -->
+       <value name="TFMT4_32_32_32_FLOAT" value="0x3b"/>
+       <value name="TFMT4_32_32_32_UINT"  value="0x3c"/>
+       <value name="TFMT4_32_32_32_SINT"  value="0x3d"/>
+
+       <!-- 0x3e -->
+
+       <!-- 128-bit formats -->
+       <value name="TFMT4_32_32_32_32_FLOAT" value="0x3f"/>
+       <value name="TFMT4_32_32_32_32_UINT"  value="0x40"/>
+       <value name="TFMT4_32_32_32_32_SINT"  value="0x41"/>
+
+       <!-- 0x42 .. 0x46 -->
+       <value name="TFMT4_X8Z24_UNORM" value="0x47"/>
+       <!-- 0x48 .. 0x55 -->
+
+       <!-- compressed formats -->
+       <value name="TFMT4_DXT1"                  value="0x56"/>
+       <value name="TFMT4_DXT3"                  value="0x57"/>
+       <value name="TFMT4_DXT5"                  value="0x58"/>
+       <!-- 0x59 -->
+       <value name="TFMT4_RGTC1_UNORM"           value="0x5a"/>
+       <value name="TFMT4_RGTC1_SNORM"           value="0x5b"/>
+       <!-- 0x5c .. 0x5d -->
+       <value name="TFMT4_RGTC2_UNORM"           value="0x5e"/>
+       <value name="TFMT4_RGTC2_SNORM"           value="0x5f"/>
+       <!-- 0x60 -->
+       <value name="TFMT4_BPTC_UFLOAT"           value="0x61"/>
+       <value name="TFMT4_BPTC_FLOAT"            value="0x62"/>
+       <value name="TFMT4_BPTC"                  value="0x63"/>
+       <value name="TFMT4_ATC_RGB"               value="0x64"/>
+       <value name="TFMT4_ATC_RGBA_EXPLICIT"     value="0x65"/>
+       <value name="TFMT4_ATC_RGBA_INTERPOLATED" value="0x66"/>
+       <value name="TFMT4_ETC2_RG11_UNORM"       value="0x67"/>
+       <value name="TFMT4_ETC2_RG11_SNORM"       value="0x68"/>
+       <value name="TFMT4_ETC2_R11_UNORM"        value="0x69"/>
+       <value name="TFMT4_ETC2_R11_SNORM"        value="0x6a"/>
+       <value name="TFMT4_ETC1"                  value="0x6b"/>
+       <value name="TFMT4_ETC2_RGB8"             value="0x6c"/>
+       <value name="TFMT4_ETC2_RGBA8"            value="0x6d"/>
+       <value name="TFMT4_ETC2_RGB8A1"           value="0x6e"/>
+       <value name="TFMT4_ASTC_4x4"              value="0x6f"/>
+       <value name="TFMT4_ASTC_5x4"              value="0x70"/>
+       <value name="TFMT4_ASTC_5x5"              value="0x71"/>
+       <value name="TFMT4_ASTC_6x5"              value="0x72"/>
+       <value name="TFMT4_ASTC_6x6"              value="0x73"/>
+       <value name="TFMT4_ASTC_8x5"              value="0x74"/>
+       <value name="TFMT4_ASTC_8x6"              value="0x75"/>
+       <value name="TFMT4_ASTC_8x8"              value="0x76"/>
+       <value name="TFMT4_ASTC_10x5"             value="0x77"/>
+       <value name="TFMT4_ASTC_10x6"             value="0x78"/>
+       <value name="TFMT4_ASTC_10x8"             value="0x79"/>
+       <value name="TFMT4_ASTC_10x10"            value="0x7a"/>
+       <value name="TFMT4_ASTC_12x10"            value="0x7b"/>
+       <value name="TFMT4_ASTC_12x12"            value="0x7c"/>
+       <!-- 0x7d .. 0x7f -->
+
+       <value name="TFMT4_NONE"                  value="0xff"/>
+</enum>
+
+<enum name="a4xx_depth_format">
+       <value name="DEPTH4_NONE" value="0"/>
+       <value name="DEPTH4_16" value="1"/>
+       <value name="DEPTH4_24_8" value="2"/>
+       <value name="DEPTH4_32" value="3"/>
+</enum>
+
+<!--
+NOTE counters extracted from test-perf log with the following awful
+script:
+##################
+#!/bin/bash
+
+log=$1
+
+grep -F "counter
+countable
+group" $log | grep -v gl > shortlist.txt
+
+countable=""
+IFS=$'\n'; for line in $(cat shortlist.txt); do
+       # parse ######### group[$n]: $name
+       l=${line########### group}
+       if [ $l != $line ];  then
+               group=`echo $line | awk '{print $3}'`
+               echo "Group: $group"
+               continue
+       fi
+       # parse #########   counter[$n]: $name
+       l=${line###########   counter}
+       if [ $l != $line ]; then
+               countable=`echo $line | awk '{print $3}'`
+               #echo "  Countable: $countable"
+               continue
+       fi
+       # parse                 countable:
+       l=${line##              countable:}
+       if [ $l != $line ]; then
+               val=`echo $line | awk '{print $2}'`
+               echo "<value value=\"$val\" name=\"$countable\"/>"
+       fi
+
+done
+##################
+ -->
+<enum name="a4xx_ccu_perfcounter_select">
+       <value value="0" name="CCU_BUSY_CYCLES"/>
+       <value value="2" name="CCU_RB_DEPTH_RETURN_STALL"/>
+       <value value="3" name="CCU_RB_COLOR_RETURN_STALL"/>
+       <value value="6" name="CCU_DEPTH_BLOCKS"/>
+       <value value="7" name="CCU_COLOR_BLOCKS"/>
+       <value value="8" name="CCU_DEPTH_BLOCK_HIT"/>
+       <value value="9" name="CCU_COLOR_BLOCK_HIT"/>
+       <value value="10" name="CCU_DEPTH_FLAG1_COUNT"/>
+       <value value="11" name="CCU_DEPTH_FLAG2_COUNT"/>
+       <value value="12" name="CCU_DEPTH_FLAG3_COUNT"/>
+       <value value="13" name="CCU_DEPTH_FLAG4_COUNT"/>
+       <value value="14" name="CCU_COLOR_FLAG1_COUNT"/>
+       <value value="15" name="CCU_COLOR_FLAG2_COUNT"/>
+       <value value="16" name="CCU_COLOR_FLAG3_COUNT"/>
+       <value value="17" name="CCU_COLOR_FLAG4_COUNT"/>
+       <value value="18" name="CCU_PARTIAL_BLOCK_READ"/>
+</enum>
+
+<!--
+NOTE other than CP_ALWAYS_COUNT (which is the only one we use so far),
+on a3xx the countable #'s from AMD_performance_monitor disagreed with
+TRM.  All these #'s for a4xx come from AMD_performance_monitor, so
+perhaps they should be taken with a grain of salt
+-->
+<enum name="a4xx_cp_perfcounter_select">
+       <!-- first ctr at least seems same as a3xx, so we can measure freq -->
+       <value value="0" name="CP_ALWAYS_COUNT"/>
+       <value value="1" name="CP_BUSY"/>
+       <value value="2" name="CP_PFP_IDLE"/>
+       <value value="3" name="CP_PFP_BUSY_WORKING"/>
+       <value value="4" name="CP_PFP_STALL_CYCLES_ANY"/>
+       <value value="5" name="CP_PFP_STARVE_CYCLES_ANY"/>
+       <value value="6" name="CP_PFP_STARVED_PER_LOAD_ADDR"/>
+       <value value="7" name="CP_PFP_STALLED_PER_STORE_ADDR"/>
+       <value value="8" name="CP_PFP_PC_PROFILE"/>
+       <value value="9" name="CP_PFP_MATCH_PM4_PKT_PROFILE"/>
+       <value value="10" name="CP_PFP_COND_INDIRECT_DISCARDED"/>
+       <value value="11" name="CP_LONG_RESUMPTIONS"/>
+       <value value="12" name="CP_RESUME_CYCLES"/>
+       <value value="13" name="CP_RESUME_TO_BOUNDARY_CYCLES"/>
+       <value value="14" name="CP_LONG_PREEMPTIONS"/>
+       <value value="15" name="CP_PREEMPT_CYCLES"/>
+       <value value="16" name="CP_PREEMPT_TO_BOUNDARY_CYCLES"/>
+       <value value="17" name="CP_ME_FIFO_EMPTY_PFP_IDLE"/>
+       <value value="18" name="CP_ME_FIFO_EMPTY_PFP_BUSY"/>
+       <value value="19" name="CP_ME_FIFO_NOT_EMPTY_NOT_FULL"/>
+       <value value="20" name="CP_ME_FIFO_FULL_ME_BUSY"/>
+       <value value="21" name="CP_ME_FIFO_FULL_ME_NON_WORKING"/>
+       <value value="22" name="CP_ME_WAITING_FOR_PACKETS"/>
+       <value value="23" name="CP_ME_BUSY_WORKING"/>
+       <value value="24" name="CP_ME_STARVE_CYCLES_ANY"/>
+       <value value="25" name="CP_ME_STARVE_CYCLES_PER_PROFILE"/>
+       <value value="26" name="CP_ME_STALL_CYCLES_PER_PROFILE"/>
+       <value value="27" name="CP_ME_PC_PROFILE"/>
+       <value value="28" name="CP_RCIU_FIFO_EMPTY"/>
+       <value value="29" name="CP_RCIU_FIFO_NOT_EMPTY_NOT_FULL"/>
+       <value value="30" name="CP_RCIU_FIFO_FULL"/>
+       <value value="31" name="CP_RCIU_FIFO_FULL_NO_CONTEXT"/>
+       <value value="32" name="CP_RCIU_FIFO_FULL_AHB_MASTER"/>
+       <value value="33" name="CP_RCIU_FIFO_FULL_OTHER"/>
+       <value value="34" name="CP_AHB_IDLE"/>
+       <value value="35" name="CP_AHB_STALL_ON_GRANT_NO_SPLIT"/>
+       <value value="36" name="CP_AHB_STALL_ON_GRANT_SPLIT"/>
+       <value value="37" name="CP_AHB_STALL_ON_GRANT_SPLIT_PROFILE"/>
+       <value value="38" name="CP_AHB_BUSY_WORKING"/>
+       <value value="39" name="CP_AHB_BUSY_STALL_ON_HRDY"/>
+       <value value="40" name="CP_AHB_BUSY_STALL_ON_HRDY_PROFILE"/>
+</enum>
+
+<enum name="a4xx_gras_ras_perfcounter_select">
+       <value value="0" name="RAS_SUPER_TILES"/>
+       <value value="1" name="RAS_8X8_TILES"/>
+       <value value="2" name="RAS_4X4_TILES"/>
+       <value value="3" name="RAS_BUSY_CYCLES"/>
+       <value value="4" name="RAS_STALL_CYCLES_BY_RB"/>
+       <value value="5" name="RAS_STALL_CYCLES_BY_VSC"/>
+       <value value="6" name="RAS_STARVE_CYCLES_BY_TSE"/>
+       <value value="7" name="RAS_SUPERTILE_CYCLES"/>
+       <value value="8" name="RAS_TILE_CYCLES"/>
+       <value value="9" name="RAS_FULLY_COVERED_SUPER_TILES"/>
+       <value value="10" name="RAS_FULLY_COVERED_8X8_TILES"/>
+       <value value="11" name="RAS_4X4_PRIM"/>
+       <value value="12" name="RAS_8X4_4X8_PRIM"/>
+       <value value="13" name="RAS_8X8_PRIM"/>
+</enum>
+
+<enum name="a4xx_gras_tse_perfcounter_select">
+       <value value="0" name="TSE_INPUT_PRIM"/>
+       <value value="1" name="TSE_INPUT_NULL_PRIM"/>
+       <value value="2" name="TSE_TRIVAL_REJ_PRIM"/>
+       <value value="3" name="TSE_CLIPPED_PRIM"/>
+       <value value="4" name="TSE_NEW_PRIM"/>
+       <value value="5" name="TSE_ZERO_AREA_PRIM"/>
+       <value value="6" name="TSE_FACENESS_CULLED_PRIM"/>
+       <value value="7" name="TSE_ZERO_PIXEL_PRIM"/>
+       <value value="8" name="TSE_OUTPUT_NULL_PRIM"/>
+       <value value="9" name="TSE_OUTPUT_VISIBLE_PRIM"/>
+       <value value="10" name="TSE_PRE_CLIP_PRIM"/>
+       <value value="11" name="TSE_POST_CLIP_PRIM"/>
+       <value value="12" name="TSE_BUSY_CYCLES"/>
+       <value value="13" name="TSE_PC_STARVE"/>
+       <value value="14" name="TSE_RAS_STALL"/>
+       <value value="15" name="TSE_STALL_BARYPLANE_FIFO_FULL"/>
+       <value value="16" name="TSE_STALL_ZPLANE_FIFO_FULL"/>
+</enum>
+
+<enum name="a4xx_hlsq_perfcounter_select">
+       <value value="0" name="HLSQ_SP_VS_STAGE_CONSTANT"/>
+       <value value="1" name="HLSQ_SP_VS_STAGE_INSTRUCTIONS"/>
+       <value value="2" name="HLSQ_SP_FS_STAGE_CONSTANT"/>
+       <value value="3" name="HLSQ_SP_FS_STAGE_INSTRUCTIONS"/>
+       <value value="4" name="HLSQ_TP_STATE"/>
+       <value value="5" name="HLSQ_QUADS"/>
+       <value value="6" name="HLSQ_PIXELS"/>
+       <value value="7" name="HLSQ_VERTICES"/>
+       <value value="13" name="HLSQ_SP_VS_STAGE_DATA_BYTES"/>
+       <value value="14" name="HLSQ_SP_FS_STAGE_DATA_BYTES"/>
+       <value value="15" name="HLSQ_BUSY_CYCLES"/>
+       <value value="16" name="HLSQ_STALL_CYCLES_SP_STATE"/>
+       <value value="17" name="HLSQ_STALL_CYCLES_SP_VS_STAGE"/>
+       <value value="18" name="HLSQ_STALL_CYCLES_SP_FS_STAGE"/>
+       <value value="19" name="HLSQ_STALL_CYCLES_UCHE"/>
+       <value value="20" name="HLSQ_RBBM_LOAD_CYCLES"/>
+       <value value="21" name="HLSQ_DI_TO_VS_START_SP"/>
+       <value value="22" name="HLSQ_DI_TO_FS_START_SP"/>
+       <value value="23" name="HLSQ_VS_STAGE_START_TO_DONE_SP"/>
+       <value value="24" name="HLSQ_FS_STAGE_START_TO_DONE_SP"/>
+       <value value="25" name="HLSQ_SP_STATE_COPY_CYCLES_VS_STAGE"/>
+       <value value="26" name="HLSQ_SP_STATE_COPY_CYCLES_FS_STAGE"/>
+       <value value="27" name="HLSQ_UCHE_LATENCY_CYCLES"/>
+       <value value="28" name="HLSQ_UCHE_LATENCY_COUNT"/>
+       <value value="29" name="HLSQ_STARVE_CYCLES_VFD"/>
+</enum>
+
+<enum name="a4xx_pc_perfcounter_select">
+       <value value="0" name="PC_VIS_STREAMS_LOADED"/>
+       <value value="2" name="PC_VPC_PRIMITIVES"/>
+       <value value="3" name="PC_DEAD_PRIM"/>
+       <value value="4" name="PC_LIVE_PRIM"/>
+       <value value="5" name="PC_DEAD_DRAWCALLS"/>
+       <value value="6" name="PC_LIVE_DRAWCALLS"/>
+       <value value="7" name="PC_VERTEX_MISSES"/>
+       <value value="9" name="PC_STALL_CYCLES_VFD"/>
+       <value value="10" name="PC_STALL_CYCLES_TSE"/>
+       <value value="11" name="PC_STALL_CYCLES_UCHE"/>
+       <value value="12" name="PC_WORKING_CYCLES"/>
+       <value value="13" name="PC_IA_VERTICES"/>
+       <value value="14" name="PC_GS_PRIMITIVES"/>
+       <value value="15" name="PC_HS_INVOCATIONS"/>
+       <value value="16" name="PC_DS_INVOCATIONS"/>
+       <value value="17" name="PC_DS_PRIMITIVES"/>
+       <value value="20" name="PC_STARVE_CYCLES_FOR_INDEX"/>
+       <value value="21" name="PC_STARVE_CYCLES_FOR_TESS_FACTOR"/>
+       <value value="22" name="PC_STARVE_CYCLES_FOR_VIZ_STREAM"/>
+       <value value="23" name="PC_STALL_CYCLES_TESS"/>
+       <value value="24" name="PC_STARVE_CYCLES_FOR_POSITION"/>
+       <value value="25" name="PC_MODE0_DRAWCALL"/>
+       <value value="26" name="PC_MODE1_DRAWCALL"/>
+       <value value="27" name="PC_MODE2_DRAWCALL"/>
+       <value value="28" name="PC_MODE3_DRAWCALL"/>
+       <value value="29" name="PC_MODE4_DRAWCALL"/>
+       <value value="30" name="PC_PREDICATED_DEAD_DRAWCALL"/>
+       <value value="31" name="PC_STALL_CYCLES_BY_TSE_ONLY"/>
+       <value value="32" name="PC_STALL_CYCLES_BY_VPC_ONLY"/>
+       <value value="33" name="PC_VPC_POS_DATA_TRANSACTION"/>
+       <value value="34" name="PC_BUSY_CYCLES"/>
+       <value value="35" name="PC_STARVE_CYCLES_DI"/>
+       <value value="36" name="PC_STALL_CYCLES_VPC"/>
+       <value value="37" name="TESS_WORKING_CYCLES"/>
+       <value value="38" name="TESS_NUM_CYCLES_SETUP_WORKING"/>
+       <value value="39" name="TESS_NUM_CYCLES_PTGEN_WORKING"/>
+       <value value="40" name="TESS_NUM_CYCLES_CONNGEN_WORKING"/>
+       <value value="41" name="TESS_BUSY_CYCLES"/>
+       <value value="42" name="TESS_STARVE_CYCLES_PC"/>
+       <value value="43" name="TESS_STALL_CYCLES_PC"/>
+</enum>
+
+<enum name="a4xx_pwr_perfcounter_select">
+       <!-- NOTE not actually used.. see RBBM_RBBM_CTL.RESET_PWR_CTR0/1 -->
+       <value value="0" name="PWR_CORE_CLOCK_CYCLES"/>
+       <value value="1" name="PWR_BUSY_CLOCK_CYCLES"/>
+</enum>
+
+<enum name="a4xx_rb_perfcounter_select">
+       <value value="0" name="RB_BUSY_CYCLES"/>
+       <value value="1" name="RB_BUSY_CYCLES_BINNING"/>
+       <value value="2" name="RB_BUSY_CYCLES_RENDERING"/>
+       <value value="3" name="RB_BUSY_CYCLES_RESOLVE"/>
+       <value value="4" name="RB_STARVE_CYCLES_BY_SP"/>
+       <value value="5" name="RB_STARVE_CYCLES_BY_RAS"/>
+       <value value="6" name="RB_STARVE_CYCLES_BY_MARB"/>
+       <value value="7" name="RB_STALL_CYCLES_BY_MARB"/>
+       <value value="8" name="RB_STALL_CYCLES_BY_HLSQ"/>
+       <value value="9" name="RB_RB_RB_MARB_DATA"/>
+       <value value="10" name="RB_SP_RB_QUAD"/>
+       <value value="11" name="RB_RAS_RB_Z_QUADS"/>
+       <value value="12" name="RB_GMEM_CH0_READ"/>
+       <value value="13" name="RB_GMEM_CH1_READ"/>
+       <value value="14" name="RB_GMEM_CH0_WRITE"/>
+       <value value="15" name="RB_GMEM_CH1_WRITE"/>
+       <value value="16" name="RB_CP_CONTEXT_DONE"/>
+       <value value="17" name="RB_CP_CACHE_FLUSH"/>
+       <value value="18" name="RB_CP_ZPASS_DONE"/>
+       <value value="19" name="RB_STALL_FIFO0_FULL"/>
+       <value value="20" name="RB_STALL_FIFO1_FULL"/>
+       <value value="21" name="RB_STALL_FIFO2_FULL"/>
+       <value value="22" name="RB_STALL_FIFO3_FULL"/>
+       <value value="23" name="RB_RB_HLSQ_TRANSACTIONS"/>
+       <value value="24" name="RB_Z_READ"/>
+       <value value="25" name="RB_Z_WRITE"/>
+       <value value="26" name="RB_C_READ"/>
+       <value value="27" name="RB_C_WRITE"/>
+       <value value="28" name="RB_C_READ_LATENCY"/>
+       <value value="29" name="RB_Z_READ_LATENCY"/>
+       <value value="30" name="RB_STALL_BY_UCHE"/>
+       <value value="31" name="RB_MARB_UCHE_TRANSACTIONS"/>
+       <value value="32" name="RB_CACHE_STALL_MISS"/>
+       <value value="33" name="RB_CACHE_STALL_FIFO_FULL"/>
+       <value value="34" name="RB_8BIT_BLENDER_UNITS_ACTIVE"/>
+       <value value="35" name="RB_16BIT_BLENDER_UNITS_ACTIVE"/>
+       <value value="36" name="RB_SAMPLER_UNITS_ACTIVE"/>
+       <value value="38" name="RB_TOTAL_PASS"/>
+       <value value="39" name="RB_Z_PASS"/>
+       <value value="40" name="RB_Z_FAIL"/>
+       <value value="41" name="RB_S_FAIL"/>
+       <value value="42" name="RB_POWER0"/>
+       <value value="43" name="RB_POWER1"/>
+       <value value="44" name="RB_POWER2"/>
+       <value value="45" name="RB_POWER3"/>
+       <value value="46" name="RB_POWER4"/>
+       <value value="47" name="RB_POWER5"/>
+       <value value="48" name="RB_POWER6"/>
+       <value value="49" name="RB_POWER7"/>
+</enum>
+
+<enum name="a4xx_rbbm_perfcounter_select">
+       <value value="0" name="RBBM_ALWAYS_ON"/>
+       <value value="1" name="RBBM_VBIF_BUSY"/>
+       <value value="2" name="RBBM_TSE_BUSY"/>
+       <value value="3" name="RBBM_RAS_BUSY"/>
+       <value value="4" name="RBBM_PC_DCALL_BUSY"/>
+       <value value="5" name="RBBM_PC_VSD_BUSY"/>
+       <value value="6" name="RBBM_VFD_BUSY"/>
+       <value value="7" name="RBBM_VPC_BUSY"/>
+       <value value="8" name="RBBM_UCHE_BUSY"/>
+       <value value="9" name="RBBM_VSC_BUSY"/>
+       <value value="10" name="RBBM_HLSQ_BUSY"/>
+       <value value="11" name="RBBM_ANY_RB_BUSY"/>
+       <value value="12" name="RBBM_ANY_TPL1_BUSY"/>
+       <value value="13" name="RBBM_ANY_SP_BUSY"/>
+       <value value="14" name="RBBM_ANY_MARB_BUSY"/>
+       <value value="15" name="RBBM_ANY_ARB_BUSY"/>
+       <value value="16" name="RBBM_AHB_STATUS_BUSY"/>
+       <value value="17" name="RBBM_AHB_STATUS_STALLED"/>
+       <value value="18" name="RBBM_AHB_STATUS_TXFR"/>
+       <value value="19" name="RBBM_AHB_STATUS_TXFR_SPLIT"/>
+       <value value="20" name="RBBM_AHB_STATUS_TXFR_ERROR"/>
+       <value value="21" name="RBBM_AHB_STATUS_LONG_STALL"/>
+       <value value="22" name="RBBM_STATUS_MASKED"/>
+       <value value="23" name="RBBM_CP_BUSY_GFX_CORE_IDLE"/>
+       <value value="24" name="RBBM_TESS_BUSY"/>
+       <value value="25" name="RBBM_COM_BUSY"/>
+       <value value="32" name="RBBM_DCOM_BUSY"/>
+       <value value="33" name="RBBM_ANY_CCU_BUSY"/>
+       <value value="34" name="RBBM_DPM_BUSY"/>
+</enum>
+
+<enum name="a4xx_sp_perfcounter_select">
+       <value value="0" name="SP_LM_LOAD_INSTRUCTIONS"/>
+       <value value="1" name="SP_LM_STORE_INSTRUCTIONS"/>
+       <value value="2" name="SP_LM_ATOMICS"/>
+       <value value="3" name="SP_GM_LOAD_INSTRUCTIONS"/>
+       <value value="4" name="SP_GM_STORE_INSTRUCTIONS"/>
+       <value value="5" name="SP_GM_ATOMICS"/>
+       <value value="6" name="SP_VS_STAGE_TEX_INSTRUCTIONS"/>
+       <value value="7" name="SP_VS_STAGE_CFLOW_INSTRUCTIONS"/>
+       <value value="8" name="SP_VS_STAGE_EFU_INSTRUCTIONS"/>
+       <value value="9" name="SP_VS_STAGE_FULL_ALU_INSTRUCTIONS"/>
+       <value value="10" name="SP_VS_STAGE_HALF_ALU_INSTRUCTIONS"/>
+       <value value="11" name="SP_FS_STAGE_TEX_INSTRUCTIONS"/>
+       <value value="12" name="SP_FS_STAGE_CFLOW_INSTRUCTIONS"/>
+       <value value="13" name="SP_FS_STAGE_EFU_INSTRUCTIONS"/>
+       <value value="14" name="SP_FS_STAGE_FULL_ALU_INSTRUCTIONS"/>
+       <value value="15" name="SP_FS_STAGE_HALF_ALU_INSTRUCTIONS"/>
+       <value value="17" name="SP_VS_INSTRUCTIONS"/>
+       <value value="18" name="SP_FS_INSTRUCTIONS"/>
+       <value value="19" name="SP_ADDR_LOCK_COUNT"/>
+       <value value="20" name="SP_UCHE_READ_TRANS"/>
+       <value value="21" name="SP_UCHE_WRITE_TRANS"/>
+       <value value="22" name="SP_EXPORT_VPC_TRANS"/>
+       <value value="23" name="SP_EXPORT_RB_TRANS"/>
+       <value value="24" name="SP_PIXELS_KILLED"/>
+       <value value="25" name="SP_ICL1_REQUESTS"/>
+       <value value="26" name="SP_ICL1_MISSES"/>
+       <value value="27" name="SP_ICL0_REQUESTS"/>
+       <value value="28" name="SP_ICL0_MISSES"/>
+       <value value="29" name="SP_ALU_WORKING_CYCLES"/>
+       <value value="30" name="SP_EFU_WORKING_CYCLES"/>
+       <value value="31" name="SP_STALL_CYCLES_BY_VPC"/>
+       <value value="32" name="SP_STALL_CYCLES_BY_TP"/>
+       <value value="33" name="SP_STALL_CYCLES_BY_UCHE"/>
+       <value value="34" name="SP_STALL_CYCLES_BY_RB"/>
+       <value value="35" name="SP_BUSY_CYCLES"/>
+       <value value="36" name="SP_HS_INSTRUCTIONS"/>
+       <value value="37" name="SP_DS_INSTRUCTIONS"/>
+       <value value="38" name="SP_GS_INSTRUCTIONS"/>
+       <value value="39" name="SP_CS_INSTRUCTIONS"/>
+       <value value="40" name="SP_SCHEDULER_NON_WORKING"/>
+       <value value="41" name="SP_WAVE_CONTEXTS"/>
+       <value value="42" name="SP_WAVE_CONTEXT_CYCLES"/>
+       <value value="43" name="SP_POWER0"/>
+       <value value="44" name="SP_POWER1"/>
+       <value value="45" name="SP_POWER2"/>
+       <value value="46" name="SP_POWER3"/>
+       <value value="47" name="SP_POWER4"/>
+       <value value="48" name="SP_POWER5"/>
+       <value value="49" name="SP_POWER6"/>
+       <value value="50" name="SP_POWER7"/>
+       <value value="51" name="SP_POWER8"/>
+       <value value="52" name="SP_POWER9"/>
+       <value value="53" name="SP_POWER10"/>
+       <value value="54" name="SP_POWER11"/>
+       <value value="55" name="SP_POWER12"/>
+       <value value="56" name="SP_POWER13"/>
+       <value value="57" name="SP_POWER14"/>
+       <value value="58" name="SP_POWER15"/>
+</enum>
+
+<enum name="a4xx_tp_perfcounter_select">
+       <value value="0" name="TP_L1_REQUESTS"/>
+       <value value="1" name="TP_L1_MISSES"/>
+       <value value="8" name="TP_QUADS_OFFSET"/>
+       <value value="9" name="TP_QUAD_SHADOW"/>
+       <value value="10" name="TP_QUADS_ARRAY"/>
+       <value value="11" name="TP_QUADS_GRADIENT"/>
+       <value value="12" name="TP_QUADS_1D2D"/>
+       <value value="13" name="TP_QUADS_3DCUBE"/>
+       <value value="16" name="TP_BUSY_CYCLES"/>
+       <value value="17" name="TP_STALL_CYCLES_BY_ARB"/>
+       <value value="20" name="TP_STATE_CACHE_REQUESTS"/>
+       <value value="21" name="TP_STATE_CACHE_MISSES"/>
+       <value value="22" name="TP_POWER0"/>
+       <value value="23" name="TP_POWER1"/>
+       <value value="24" name="TP_POWER2"/>
+       <value value="25" name="TP_POWER3"/>
+       <value value="26" name="TP_POWER4"/>
+       <value value="27" name="TP_POWER5"/>
+       <value value="28" name="TP_POWER6"/>
+       <value value="29" name="TP_POWER7"/>
+</enum>
+
+<enum name="a4xx_uche_perfcounter_select">
+       <value value="0" name="UCHE_VBIF_READ_BEATS_TP"/>
+       <value value="1" name="UCHE_VBIF_READ_BEATS_VFD"/>
+       <value value="2" name="UCHE_VBIF_READ_BEATS_HLSQ"/>
+       <value value="3" name="UCHE_VBIF_READ_BEATS_MARB"/>
+       <value value="4" name="UCHE_VBIF_READ_BEATS_SP"/>
+       <value value="5" name="UCHE_READ_REQUESTS_TP"/>
+       <value value="6" name="UCHE_READ_REQUESTS_VFD"/>
+       <value value="7" name="UCHE_READ_REQUESTS_HLSQ"/>
+       <value value="8" name="UCHE_READ_REQUESTS_MARB"/>
+       <value value="9" name="UCHE_READ_REQUESTS_SP"/>
+       <value value="10" name="UCHE_WRITE_REQUESTS_MARB"/>
+       <value value="11" name="UCHE_WRITE_REQUESTS_SP"/>
+       <value value="12" name="UCHE_TAG_CHECK_FAILS"/>
+       <value value="13" name="UCHE_EVICTS"/>
+       <value value="14" name="UCHE_FLUSHES"/>
+       <value value="15" name="UCHE_VBIF_LATENCY_CYCLES"/>
+       <value value="16" name="UCHE_VBIF_LATENCY_SAMPLES"/>
+       <value value="17" name="UCHE_BUSY_CYCLES"/>
+       <value value="18" name="UCHE_VBIF_READ_BEATS_PC"/>
+       <value value="19" name="UCHE_READ_REQUESTS_PC"/>
+       <value value="20" name="UCHE_WRITE_REQUESTS_VPC"/>
+       <value value="21" name="UCHE_STALL_BY_VBIF"/>
+       <value value="22" name="UCHE_WRITE_REQUESTS_VSC"/>
+       <value value="23" name="UCHE_POWER0"/>
+       <value value="24" name="UCHE_POWER1"/>
+       <value value="25" name="UCHE_POWER2"/>
+       <value value="26" name="UCHE_POWER3"/>
+       <value value="27" name="UCHE_POWER4"/>
+       <value value="28" name="UCHE_POWER5"/>
+       <value value="29" name="UCHE_POWER6"/>
+       <value value="30" name="UCHE_POWER7"/>
+</enum>
+
+<enum name="a4xx_vbif_perfcounter_select">
+       <value value="0" name="AXI_READ_REQUESTS_ID_0"/>
+       <value value="1" name="AXI_READ_REQUESTS_ID_1"/>
+       <value value="2" name="AXI_READ_REQUESTS_ID_2"/>
+       <value value="3" name="AXI_READ_REQUESTS_ID_3"/>
+       <value value="4" name="AXI_READ_REQUESTS_ID_4"/>
+       <value value="5" name="AXI_READ_REQUESTS_ID_5"/>
+       <value value="6" name="AXI_READ_REQUESTS_ID_6"/>
+       <value value="7" name="AXI_READ_REQUESTS_ID_7"/>
+       <value value="8" name="AXI_READ_REQUESTS_ID_8"/>
+       <value value="9" name="AXI_READ_REQUESTS_ID_9"/>
+       <value value="10" name="AXI_READ_REQUESTS_ID_10"/>
+       <value value="11" name="AXI_READ_REQUESTS_ID_11"/>
+       <value value="12" name="AXI_READ_REQUESTS_ID_12"/>
+       <value value="13" name="AXI_READ_REQUESTS_ID_13"/>
+       <value value="14" name="AXI_READ_REQUESTS_ID_14"/>
+       <value value="15" name="AXI_READ_REQUESTS_ID_15"/>
+       <value value="16" name="AXI0_READ_REQUESTS_TOTAL"/>
+       <value value="17" name="AXI1_READ_REQUESTS_TOTAL"/>
+       <value value="18" name="AXI2_READ_REQUESTS_TOTAL"/>
+       <value value="19" name="AXI3_READ_REQUESTS_TOTAL"/>
+       <value value="20" name="AXI_READ_REQUESTS_TOTAL"/>
+       <value value="21" name="AXI_WRITE_REQUESTS_ID_0"/>
+       <value value="22" name="AXI_WRITE_REQUESTS_ID_1"/>
+       <value value="23" name="AXI_WRITE_REQUESTS_ID_2"/>
+       <value value="24" name="AXI_WRITE_REQUESTS_ID_3"/>
+       <value value="25" name="AXI_WRITE_REQUESTS_ID_4"/>
+       <value value="26" name="AXI_WRITE_REQUESTS_ID_5"/>
+       <value value="27" name="AXI_WRITE_REQUESTS_ID_6"/>
+       <value value="28" name="AXI_WRITE_REQUESTS_ID_7"/>
+       <value value="29" name="AXI_WRITE_REQUESTS_ID_8"/>
+       <value value="30" name="AXI_WRITE_REQUESTS_ID_9"/>
+       <value value="31" name="AXI_WRITE_REQUESTS_ID_10"/>
+       <value value="32" name="AXI_WRITE_REQUESTS_ID_11"/>
+       <value value="33" name="AXI_WRITE_REQUESTS_ID_12"/>
+       <value value="34" name="AXI_WRITE_REQUESTS_ID_13"/>
+       <value value="35" name="AXI_WRITE_REQUESTS_ID_14"/>
+       <value value="36" name="AXI_WRITE_REQUESTS_ID_15"/>
+       <value value="37" name="AXI0_WRITE_REQUESTS_TOTAL"/>
+       <value value="38" name="AXI1_WRITE_REQUESTS_TOTAL"/>
+       <value value="39" name="AXI2_WRITE_REQUESTS_TOTAL"/>
+       <value value="40" name="AXI3_WRITE_REQUESTS_TOTAL"/>
+       <value value="41" name="AXI_WRITE_REQUESTS_TOTAL"/>
+       <value value="42" name="AXI_TOTAL_REQUESTS"/>
+       <value value="43" name="AXI_READ_DATA_BEATS_ID_0"/>
+       <value value="44" name="AXI_READ_DATA_BEATS_ID_1"/>
+       <value value="45" name="AXI_READ_DATA_BEATS_ID_2"/>
+       <value value="46" name="AXI_READ_DATA_BEATS_ID_3"/>
+       <value value="47" name="AXI_READ_DATA_BEATS_ID_4"/>
+       <value value="48" name="AXI_READ_DATA_BEATS_ID_5"/>
+       <value value="49" name="AXI_READ_DATA_BEATS_ID_6"/>
+       <value value="50" name="AXI_READ_DATA_BEATS_ID_7"/>
+       <value value="51" name="AXI_READ_DATA_BEATS_ID_8"/>
+       <value value="52" name="AXI_READ_DATA_BEATS_ID_9"/>
+       <value value="53" name="AXI_READ_DATA_BEATS_ID_10"/>
+       <value value="54" name="AXI_READ_DATA_BEATS_ID_11"/>
+       <value value="55" name="AXI_READ_DATA_BEATS_ID_12"/>
+       <value value="56" name="AXI_READ_DATA_BEATS_ID_13"/>
+       <value value="57" name="AXI_READ_DATA_BEATS_ID_14"/>
+       <value value="58" name="AXI_READ_DATA_BEATS_ID_15"/>
+       <value value="59" name="AXI0_READ_DATA_BEATS_TOTAL"/>
+       <value value="60" name="AXI1_READ_DATA_BEATS_TOTAL"/>
+       <value value="61" name="AXI2_READ_DATA_BEATS_TOTAL"/>
+       <value value="62" name="AXI3_READ_DATA_BEATS_TOTAL"/>
+       <value value="63" name="AXI_READ_DATA_BEATS_TOTAL"/>
+       <value value="64" name="AXI_WRITE_DATA_BEATS_ID_0"/>
+       <value value="65" name="AXI_WRITE_DATA_BEATS_ID_1"/>
+       <value value="66" name="AXI_WRITE_DATA_BEATS_ID_2"/>
+       <value value="67" name="AXI_WRITE_DATA_BEATS_ID_3"/>
+       <value value="68" name="AXI_WRITE_DATA_BEATS_ID_4"/>
+       <value value="69" name="AXI_WRITE_DATA_BEATS_ID_5"/>
+       <value value="70" name="AXI_WRITE_DATA_BEATS_ID_6"/>
+       <value value="71" name="AXI_WRITE_DATA_BEATS_ID_7"/>
+       <value value="72" name="AXI_WRITE_DATA_BEATS_ID_8"/>
+       <value value="73" name="AXI_WRITE_DATA_BEATS_ID_9"/>
+       <value value="74" name="AXI_WRITE_DATA_BEATS_ID_10"/>
+       <value value="75" name="AXI_WRITE_DATA_BEATS_ID_11"/>
+       <value value="76" name="AXI_WRITE_DATA_BEATS_ID_12"/>
+       <value value="77" name="AXI_WRITE_DATA_BEATS_ID_13"/>
+       <value value="78" name="AXI_WRITE_DATA_BEATS_ID_14"/>
+       <value value="79" name="AXI_WRITE_DATA_BEATS_ID_15"/>
+       <value value="80" name="AXI0_WRITE_DATA_BEATS_TOTAL"/>
+       <value value="81" name="AXI1_WRITE_DATA_BEATS_TOTAL"/>
+       <value value="82" name="AXI2_WRITE_DATA_BEATS_TOTAL"/>
+       <value value="83" name="AXI3_WRITE_DATA_BEATS_TOTAL"/>
+       <value value="84" name="AXI_WRITE_DATA_BEATS_TOTAL"/>
+       <value value="85" name="AXI_DATA_BEATS_TOTAL"/>
+       <value value="86" name="CYCLES_HELD_OFF_ID_0"/>
+       <value value="87" name="CYCLES_HELD_OFF_ID_1"/>
+       <value value="88" name="CYCLES_HELD_OFF_ID_2"/>
+       <value value="89" name="CYCLES_HELD_OFF_ID_3"/>
+       <value value="90" name="CYCLES_HELD_OFF_ID_4"/>
+       <value value="91" name="CYCLES_HELD_OFF_ID_5"/>
+       <value value="92" name="CYCLES_HELD_OFF_ID_6"/>
+       <value value="93" name="CYCLES_HELD_OFF_ID_7"/>
+       <value value="94" name="CYCLES_HELD_OFF_ID_8"/>
+       <value value="95" name="CYCLES_HELD_OFF_ID_9"/>
+       <value value="96" name="CYCLES_HELD_OFF_ID_10"/>
+       <value value="97" name="CYCLES_HELD_OFF_ID_11"/>
+       <value value="98" name="CYCLES_HELD_OFF_ID_12"/>
+       <value value="99" name="CYCLES_HELD_OFF_ID_13"/>
+       <value value="100" name="CYCLES_HELD_OFF_ID_14"/>
+       <value value="101" name="CYCLES_HELD_OFF_ID_15"/>
+       <value value="102" name="AXI_READ_REQUEST_HELD_OFF"/>
+       <value value="103" name="AXI_WRITE_REQUEST_HELD_OFF"/>
+       <value value="104" name="AXI_REQUEST_HELD_OFF"/>
+       <value value="105" name="AXI_WRITE_DATA_HELD_OFF"/>
+       <value value="106" name="OCMEM_AXI_READ_REQUEST_HELD_OFF"/>
+       <value value="107" name="OCMEM_AXI_WRITE_REQUEST_HELD_OFF"/>
+       <value value="108" name="OCMEM_AXI_REQUEST_HELD_OFF"/>
+       <value value="109" name="OCMEM_AXI_WRITE_DATA_HELD_OFF"/>
+       <value value="110" name="ELAPSED_CYCLES_DDR"/>
+       <value value="111" name="ELAPSED_CYCLES_OCMEM"/>
+</enum>
+
+<enum name="a4xx_vfd_perfcounter_select">
+       <value value="0" name="VFD_UCHE_BYTE_FETCHED"/>
+       <value value="1" name="VFD_UCHE_TRANS"/>
+       <value value="3" name="VFD_FETCH_INSTRUCTIONS"/>
+       <value value="5" name="VFD_BUSY_CYCLES"/>
+       <value value="6" name="VFD_STALL_CYCLES_UCHE"/>
+       <value value="7" name="VFD_STALL_CYCLES_HLSQ"/>
+       <value value="8" name="VFD_STALL_CYCLES_VPC_BYPASS"/>
+       <value value="9" name="VFD_STALL_CYCLES_VPC_ALLOC"/>
+       <value value="13" name="VFD_MODE_0_FIBERS"/>
+       <value value="14" name="VFD_MODE_1_FIBERS"/>
+       <value value="15" name="VFD_MODE_2_FIBERS"/>
+       <value value="16" name="VFD_MODE_3_FIBERS"/>
+       <value value="17" name="VFD_MODE_4_FIBERS"/>
+       <value value="18" name="VFD_BFIFO_STALL"/>
+       <value value="19" name="VFD_NUM_VERTICES_TOTAL"/>
+       <value value="20" name="VFD_PACKER_FULL"/>
+       <value value="21" name="VFD_UCHE_REQUEST_FIFO_FULL"/>
+       <value value="22" name="VFD_STARVE_CYCLES_PC"/>
+       <value value="23" name="VFD_STARVE_CYCLES_UCHE"/>
+</enum>
+
+<enum name="a4xx_vpc_perfcounter_select">
+       <value value="2" name="VPC_SP_LM_COMPONENTS"/>
+       <value value="3" name="VPC_SP0_LM_BYTES"/>
+       <value value="4" name="VPC_SP1_LM_BYTES"/>
+       <value value="5" name="VPC_SP2_LM_BYTES"/>
+       <value value="6" name="VPC_SP3_LM_BYTES"/>
+       <value value="7" name="VPC_WORKING_CYCLES"/>
+       <value value="8" name="VPC_STALL_CYCLES_LM"/>
+       <value value="9" name="VPC_STARVE_CYCLES_RAS"/>
+       <value value="10" name="VPC_STREAMOUT_CYCLES"/>
+       <value value="12" name="VPC_UCHE_TRANSACTIONS"/>
+       <value value="13" name="VPC_STALL_CYCLES_UCHE"/>
+       <value value="14" name="VPC_BUSY_CYCLES"/>
+       <value value="15" name="VPC_STARVE_CYCLES_SP"/>
+</enum>
+
+<enum name="a4xx_vsc_perfcounter_select">
+       <value value="0" name="VSC_BUSY_CYCLES"/>
+       <value value="1" name="VSC_WORKING_CYCLES"/>
+       <value value="2" name="VSC_STALL_CYCLES_UCHE"/>
+       <value value="3" name="VSC_STARVE_CYCLES_RAS"/>
+       <value value="4" name="VSC_EOT_NUM"/>
+</enum>
+
+<domain name="A4XX" width="32">
+       <!-- RB registers -->
+       <reg32 offset="0x0cc0" name="RB_GMEM_BASE_ADDR"/>
+       <reg32 offset="0x0cc7" name="RB_PERFCTR_RB_SEL_0" type="a4xx_rb_perfcounter_select"/>
+       <reg32 offset="0x0cc8" name="RB_PERFCTR_RB_SEL_1" type="a4xx_rb_perfcounter_select"/>
+       <reg32 offset="0x0cc9" name="RB_PERFCTR_RB_SEL_2" type="a4xx_rb_perfcounter_select"/>
+       <reg32 offset="0x0cca" name="RB_PERFCTR_RB_SEL_3" type="a4xx_rb_perfcounter_select"/>
+       <reg32 offset="0x0ccb" name="RB_PERFCTR_RB_SEL_4" type="a4xx_rb_perfcounter_select"/>
+       <reg32 offset="0x0ccc" name="RB_PERFCTR_RB_SEL_5" type="a4xx_rb_perfcounter_select"/>
+       <reg32 offset="0x0ccd" name="RB_PERFCTR_RB_SEL_6" type="a4xx_rb_perfcounter_select"/>
+       <reg32 offset="0x0cce" name="RB_PERFCTR_RB_SEL_7" type="a4xx_rb_perfcounter_select"/>
+       <reg32 offset="0x0ccf" name="RB_PERFCTR_CCU_SEL_0" type="a4xx_ccu_perfcounter_select"/>
+       <reg32 offset="0x0cd0" name="RB_PERFCTR_CCU_SEL_1" type="a4xx_ccu_perfcounter_select"/>
+       <reg32 offset="0x0cd1" name="RB_PERFCTR_CCU_SEL_2" type="a4xx_ccu_perfcounter_select"/>
+       <reg32 offset="0x0cd2" name="RB_PERFCTR_CCU_SEL_3" type="a4xx_ccu_perfcounter_select"/>
+       <reg32 offset="0x0ce0" name="RB_FRAME_BUFFER_DIMENSION">
+               <bitfield name="WIDTH" low="0" high="13" type="uint"/>
+               <bitfield name="HEIGHT" low="16" high="29" type="uint"/>
+       </reg32>
+       <reg32 offset="0x20cc" name="RB_CLEAR_COLOR_DW0"/>
+       <reg32 offset="0x20cd" name="RB_CLEAR_COLOR_DW1"/>
+       <reg32 offset="0x20ce" name="RB_CLEAR_COLOR_DW2"/>
+       <reg32 offset="0x20cf" name="RB_CLEAR_COLOR_DW3"/>
+       <reg32 offset="0x20a0" name="RB_MODE_CONTROL">
+               <!--
+               for non-bypass mode, these are bin width/height..  although
+               possibly bigger bitfields to hold entire width/height for
+               gmem-bypass??  Either way, it appears to need to be multiple
+               of 32..
+               -->
+               <bitfield name="WIDTH" low="0" high="5" shr="5" type="uint"/>
+               <bitfield name="HEIGHT" low="8" high="13" shr="5" type="uint"/>
+               <bitfield name="ENABLE_GMEM" pos="16" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x20a1" name="RB_RENDER_CONTROL">
+               <bitfield name="BINNING_PASS" pos="0" type="boolean"/>
+               <!-- nearly everything has bit3 set.. -->
+               <!-- bit5 set on resolve and tiling pass -->
+               <bitfield name="DISABLE_COLOR_PIPE" pos="5" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x20a2" name="RB_MSAA_CONTROL">
+               <bitfield name="DISABLE" pos="12" type="boolean"/>
+               <bitfield name="SAMPLES" low="13" high="15" type="uint"/>
+       </reg32>
+       <reg32 offset="0x20a3" name="RB_RENDER_CONTROL2">
+               <bitfield name="COORD_MASK" low="0" high="3" type="hex"/>
+               <bitfield name="SAMPLEMASK" pos="4" type="boolean"/>
+               <bitfield name="FACENESS" pos="5" type="boolean"/>
+               <bitfield name="SAMPLEID" pos="6" type="boolean"/>
+               <bitfield name="MSAA_SAMPLES" low="7" high="9" type="uint"/>
+               <bitfield name="SAMPLEID_HR" pos="11" type="boolean"/>
+               <bitfield name="IJ_PERSP_PIXEL" pos="12" type="boolean"/>
+               <!-- the 2 below are just educated guesses -->
+               <bitfield name="IJ_PERSP_CENTROID" pos="13" type="boolean"/>
+               <bitfield name="IJ_PERSP_SAMPLE" pos="14" type="boolean"/>
+               <!-- needs to be enabled to get nopersp values,
+                    perhaps other cases too? -->
+               <bitfield name="SIZE" pos="15" type="boolean"/>
+       </reg32>
+       <array offset="0x20a4" name="RB_MRT" stride="5" length="8">
+               <reg32 offset="0x0" name="CONTROL">
+                       <bitfield name="READ_DEST_ENABLE" pos="3" type="boolean"/>
+                       <!-- both these bits seem to get set when enabling GL_BLEND.. -->
+                       <bitfield name="BLEND" pos="4" type="boolean"/>
+                       <bitfield name="BLEND2" pos="5" type="boolean"/>
+                       <bitfield name="ROP_ENABLE" pos="6" type="boolean"/>
+                       <bitfield name="ROP_CODE" low="8" high="11" type="a3xx_rop_code"/>
+                       <bitfield name="COMPONENT_ENABLE" low="24" high="27" type="hex"/>
+               </reg32>
+               <reg32 offset="0x1" name="BUF_INFO">
+                       <bitfield name="COLOR_FORMAT" low="0" high="5" type="a4xx_color_fmt"/>
+                       <!--
+                           guestimate position of COLOR_TILE_MODE..  this works out if
+                           common value is 2, like on a3xx..
+                        -->
+                       <bitfield name="COLOR_TILE_MODE" low="6" high="7" type="a4xx_tile_mode"/>
+                       <bitfield name="DITHER_MODE" low="9" high="10" type="adreno_rb_dither_mode"/>
+                       <bitfield name="COLOR_SWAP" low="11" high="12" type="a3xx_color_swap"/>
+                       <bitfield name="COLOR_SRGB" pos="13" type="boolean"/>
+                       <!-- note: possibly some # of lsb's aren't there: -->
+                       <doc>
+                               Pitch (actually, appears to be pitch in bytes, so really is a stride)
+                               in GMEM, so pitch of the current tile.
+                       </doc>
+                       <bitfield name="COLOR_BUF_PITCH" low="14" high="31" shr="4" type="uint"/>
+               </reg32>
+               <reg32 offset="0x2" name="BASE"/>
+               <reg32 offset="0x3" name="CONTROL3">
+                       <!-- probably missing some lsb's.. and guessing upper size -->
+                       <!-- pitch * cpp * msaa: -->
+                       <bitfield name="STRIDE" low="3" high="25" type="uint"/>
+               </reg32>
+               <reg32 offset="0x4" name="BLEND_CONTROL">
+                       <bitfield name="RGB_SRC_FACTOR" low="0" high="4" type="adreno_rb_blend_factor"/>
+                       <bitfield name="RGB_BLEND_OPCODE" low="5" high="7" type="a3xx_rb_blend_opcode"/>
+                       <bitfield name="RGB_DEST_FACTOR" low="8" high="12" type="adreno_rb_blend_factor"/>
+                       <bitfield name="ALPHA_SRC_FACTOR" low="16" high="20" type="adreno_rb_blend_factor"/>
+                       <bitfield name="ALPHA_BLEND_OPCODE" low="21" high="23" type="a3xx_rb_blend_opcode"/>
+                       <bitfield name="ALPHA_DEST_FACTOR" low="24" high="28" type="adreno_rb_blend_factor"/>
+               </reg32>
+       </array>
+
+       <reg32 offset="0x20f0" name="RB_BLEND_RED">
+               <bitfield name="UINT" low="0" high="7" type="hex"/>
+               <bitfield name="SINT" low="8" high="15" type="hex"/>
+               <bitfield name="FLOAT" low="16" high="31" type="float"/>
+       </reg32>
+       <reg32 offset="0x20f1" name="RB_BLEND_RED_F32" type="float"/>
+
+       <reg32 offset="0x20f2" name="RB_BLEND_GREEN">
+               <bitfield name="UINT" low="0" high="7" type="hex"/>
+               <bitfield name="SINT" low="8" high="15" type="hex"/>
+               <bitfield name="FLOAT" low="16" high="31" type="float"/>
+       </reg32>
+       <reg32 offset="0x20f3" name="RB_BLEND_GREEN_F32" type="float"/>
+
+       <reg32 offset="0x20f4" name="RB_BLEND_BLUE">
+               <bitfield name="UINT" low="0" high="7" type="hex"/>
+               <bitfield name="SINT" low="8" high="15" type="hex"/>
+               <bitfield name="FLOAT" low="16" high="31" type="float"/>
+       </reg32>
+       <reg32 offset="0x20f5" name="RB_BLEND_BLUE_F32" type="float"/>
+
+       <reg32 offset="0x20f6" name="RB_BLEND_ALPHA">
+               <bitfield name="UINT" low="0" high="7" type="hex"/>
+               <bitfield name="SINT" low="8" high="15" type="hex"/>
+               <bitfield name="FLOAT" low="16" high="31" type="float"/>
+       </reg32>
+       <reg32 offset="0x20f7" name="RB_BLEND_ALPHA_F32" type="float"/>
+
+       <reg32 offset="0x20f8" name="RB_ALPHA_CONTROL">
+               <bitfield name="ALPHA_REF" low="0" high="7" type="hex"/>
+               <bitfield name="ALPHA_TEST" pos="8" type="boolean"/>
+               <bitfield name="ALPHA_TEST_FUNC" low="9" high="11" type="adreno_compare_func"/>
+       </reg32>
+       <reg32 offset="0x20f9" name="RB_FS_OUTPUT">
+               <!-- per-mrt enable bit -->
+               <bitfield name="ENABLE_BLEND" low="0" high="7"/>
+               <bitfield name="INDEPENDENT_BLEND" pos="8" type="boolean"/>
+               <!-- a guess? -->
+               <bitfield name="SAMPLE_MASK" low="16" high="31"/>
+       </reg32>
+       <reg32 offset="0x20fa" name="RB_SAMPLE_COUNT_CONTROL">
+               <bitfield name="COPY" pos="1" type="boolean"/>
+               <bitfield name="ADDR" low="2" high="31" shr="2"/>
+       </reg32>
+       <!-- always 00000000 for binning pass, else 0000000f: -->
+       <reg32 offset="0x20fb" name="RB_RENDER_COMPONENTS">
+               <bitfield name="RT0" low="0" high="3"/>
+               <bitfield name="RT1" low="4" high="7"/>
+               <bitfield name="RT2" low="8" high="11"/>
+               <bitfield name="RT3" low="12" high="15"/>
+               <bitfield name="RT4" low="16" high="19"/>
+               <bitfield name="RT5" low="20" high="23"/>
+               <bitfield name="RT6" low="24" high="27"/>
+               <bitfield name="RT7" low="28" high="31"/>
+       </reg32>
+
+       <reg32 offset="0x20fc" name="RB_COPY_CONTROL">
+               <!-- not sure # of bits -->
+               <bitfield name="MSAA_RESOLVE" low="0" high="1" type="a3xx_msaa_samples"/>
+               <bitfield name="MODE" low="4" high="6" type="adreno_rb_copy_control_mode"/>
+               <bitfield name="FASTCLEAR" low="8" high="11" type="hex"/>
+               <bitfield name="GMEM_BASE" low="14" high="31" shr="14" type="hex"/>
+       </reg32>
+       <reg32 offset="0x20fd" name="RB_COPY_DEST_BASE">
+               <bitfield name="BASE" low="5" high="31" shr="5" type="hex"/>
+       </reg32>
+       <reg32 offset="0x20fe" name="RB_COPY_DEST_PITCH">
+               <doc>actually, appears to be pitch in bytes, so really is a stride</doc>
+               <!-- not actually sure about max pitch... -->
+               <bitfield name="PITCH" low="0" high="31" shr="5" type="uint"/>
+       </reg32>
+       <reg32 offset="0x20ff" name="RB_COPY_DEST_INFO">
+               <bitfield name="FORMAT" low="2" high="7" type="a4xx_color_fmt"/>
+               <bitfield name="SWAP" low="8" high="9" type="a3xx_color_swap"/>
+               <bitfield name="DITHER_MODE" low="10" high="11" type="adreno_rb_dither_mode"/>
+               <bitfield name="COMPONENT_ENABLE" low="14" high="17" type="hex"/>
+               <bitfield name="ENDIAN" low="18" high="20" type="adreno_rb_surface_endian"/>
+               <bitfield name="TILE" low="24" high="25" type="a4xx_tile_mode"/>
+       </reg32>
+       <reg32 offset="0x2100" name="RB_FS_OUTPUT_REG">
+               <!-- bit0 set except for binning pass.. -->
+               <bitfield name="MRT" low="0" high="3" type="uint"/>
+               <bitfield name="FRAG_WRITES_Z" pos="5" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x2101" name="RB_DEPTH_CONTROL">
+               <!--
+                       guessing that this matches a2xx with the stencil fields
+                       moved out into RB_STENCIL_CONTROL?
+                -->
+               <bitfield name="FRAG_WRITES_Z" pos="0" type="boolean"/>
+               <bitfield name="Z_ENABLE" pos="1" type="boolean"/>
+               <bitfield name="Z_WRITE_ENABLE" pos="2" type="boolean"/>
+               <bitfield name="ZFUNC" low="4" high="6" type="adreno_compare_func"/>
+               <bitfield name="Z_CLAMP_ENABLE" pos="7" type="boolean"/>
+               <bitfield name="EARLY_Z_DISABLE" pos="16" type="boolean"/>
+               <bitfield name="FORCE_FRAGZ_TO_FS" pos="17" type="boolean"/>
+               <doc>Z_TEST_ENABLE bit is set for zfunc other than GL_ALWAYS or GL_NEVER</doc>
+               <bitfield name="Z_TEST_ENABLE" pos="31" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x2102" name="RB_DEPTH_CLEAR"/>
+       <reg32 offset="0x2103" name="RB_DEPTH_INFO">
+               <bitfield name="DEPTH_FORMAT" low="0" high="1" type="a4xx_depth_format"/>
+               <doc>
+                       DEPTH_BASE is offset in GMEM to depth/stencil buffer, ie
+                       bin_w * bin_h / 1024 (possible rounded up to multiple of
+                       something??  ie. 39 becomes 40, 78 becomes 80.. 75 becomes
+                       80.. so maybe it needs to be multiple of 8??
+               </doc>
+               <bitfield name="DEPTH_BASE" low="12" high="31" shr="12" type="hex"/>
+       </reg32>
+       <reg32 offset="0x2104" name="RB_DEPTH_PITCH" shr="5" type="uint">
+               <doc>stride of depth/stencil buffer</doc>
+       </reg32>
+       <reg32 offset="0x2105" name="RB_DEPTH_PITCH2" shr="5" type="uint">
+               <doc>???</doc>
+       </reg32>
+       <reg32 offset="0x2106" name="RB_STENCIL_CONTROL">
+               <bitfield name="STENCIL_ENABLE" pos="0" type="boolean"/>
+               <bitfield name="STENCIL_ENABLE_BF" pos="1" type="boolean"/>
+               <!--
+                       set for stencil operations that require read from stencil
+                       buffer, but not for example for stencil clear (which does
+                       not require read).. so guessing this is analogous to
+                       READ_DEST_ENABLE for color buffer..
+                -->
+               <bitfield name="STENCIL_READ" pos="2" type="boolean"/>
+               <bitfield name="FUNC" low="8" high="10" type="adreno_compare_func"/>
+               <bitfield name="FAIL" low="11" high="13" type="adreno_stencil_op"/>
+               <bitfield name="ZPASS" low="14" high="16" type="adreno_stencil_op"/>
+               <bitfield name="ZFAIL" low="17" high="19" type="adreno_stencil_op"/>
+               <bitfield name="FUNC_BF" low="20" high="22" type="adreno_compare_func"/>
+               <bitfield name="FAIL_BF" low="23" high="25" type="adreno_stencil_op"/>
+               <bitfield name="ZPASS_BF" low="26" high="28" type="adreno_stencil_op"/>
+               <bitfield name="ZFAIL_BF" low="29" high="31" type="adreno_stencil_op"/>
+       </reg32>
+       <reg32 offset="0x2107" name="RB_STENCIL_CONTROL2">
+               <!--
+               This seems to be set by blob if there is a stencil buffer
+               at all in GMEM, regardless of whether it is enabled for
+               a particular draw (ie. RB_STENCIL_CONTROL).  Not really
+               sure if that is required or just a quirk of the blob
+               -->
+               <bitfield name="STENCIL_BUFFER" pos="0" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x2108" name="RB_STENCIL_INFO">
+               <bitfield name="SEPARATE_STENCIL" pos="0" type="boolean"/>
+               <doc>Base address for stencil when not using interleaved depth/stencil</doc>
+               <bitfield name="STENCIL_BASE" low="12" high="31" shr="12" type="hex"/>
+       </reg32>
+       <reg32 offset="0x2109" name="RB_STENCIL_PITCH" shr="5" type="uint">
+               <doc>pitch of stencil buffer when not using interleaved depth/stencil</doc>
+       </reg32>
+
+       <reg32 offset="0x210b" name="RB_STENCILREFMASK" type="adreno_rb_stencilrefmask"/>
+       <reg32 offset="0x210c" name="RB_STENCILREFMASK_BF" type="adreno_rb_stencilrefmask"/>
+       <reg32 offset="0x210d" name="RB_BIN_OFFSET" type="adreno_reg_xy"/>
+       <array offset="0x2120" name="RB_VPORT_Z_CLAMP" stride="2" length="16">
+               <reg32 offset="0x0" name="MIN"/>
+               <reg32 offset="0x1" name="MAX"/>
+       </array>
+
+       <!-- RBBM registers -->
+       <reg32 offset="0x0000" name="RBBM_HW_VERSION"/>
+       <reg32 offset="0x0002" name="RBBM_HW_CONFIGURATION"/>
+       <array offset="0x4" name="RBBM_CLOCK_CTL_TP" stride="1" length="4">
+               <reg32 offset="0x0" name="REG"/>
+       </array>
+       <array offset="0x8" name="RBBM_CLOCK_CTL2_TP" stride="1" length="4">
+               <reg32 offset="0x0" name="REG"/>
+       </array>
+       <array offset="0xc" name="RBBM_CLOCK_HYST_TP" stride="1" length="4">
+               <reg32 offset="0x0" name="REG"/>
+       </array>
+       <array offset="0x10" name="RBBM_CLOCK_DELAY_TP" stride="1" length="4">
+               <reg32 offset="0x0" name="REG"/>
+       </array>
+       <reg32 offset="0x0014" name="RBBM_CLOCK_CTL_UCHE "/>
+       <reg32 offset="0x0015" name="RBBM_CLOCK_CTL2_UCHE"/>
+       <reg32 offset="0x0016" name="RBBM_CLOCK_CTL3_UCHE"/>
+       <reg32 offset="0x0017" name="RBBM_CLOCK_CTL4_UCHE"/>
+       <reg32 offset="0x0018" name="RBBM_CLOCK_HYST_UCHE"/>
+       <reg32 offset="0x0019" name="RBBM_CLOCK_DELAY_UCHE"/>
+       <reg32 offset="0x001a" name="RBBM_CLOCK_MODE_GPC"/>
+       <reg32 offset="0x001b" name="RBBM_CLOCK_DELAY_GPC"/>
+       <reg32 offset="0x001c" name="RBBM_CLOCK_HYST_GPC"/>
+       <reg32 offset="0x001d" name="RBBM_CLOCK_CTL_TSE_RAS_RBBM"/>
+       <reg32 offset="0x001e" name="RBBM_CLOCK_HYST_TSE_RAS_RBBM"/>
+       <reg32 offset="0x001f" name="RBBM_CLOCK_DELAY_TSE_RAS_RBBM"/>
+       <reg32 offset="0x0020" name="RBBM_CLOCK_CTL"/>
+       <reg32 offset="0x0021" name="RBBM_SP_HYST_CNT"/>
+       <reg32 offset="0x0022" name="RBBM_SW_RESET_CMD"/>
+       <reg32 offset="0x0023" name="RBBM_AHB_CTL0"/>
+       <reg32 offset="0x0024" name="RBBM_AHB_CTL1"/>
+       <reg32 offset="0x0025" name="RBBM_AHB_CMD"/>
+       <reg32 offset="0x0026" name="RBBM_RB_SUB_BLOCK_SEL_CTL"/>
+       <reg32 offset="0x0028" name="RBBM_RAM_ACC_63_32"/>
+       <reg32 offset="0x002b" name="RBBM_WAIT_IDLE_CLOCKS_CTL"/>
+       <reg32 offset="0x002f" name="RBBM_INTERFACE_HANG_INT_CTL"/>
+       <reg32 offset="0x0034" name="RBBM_INTERFACE_HANG_MASK_CTL4"/>
+       <reg32 offset="0x0036" name="RBBM_INT_CLEAR_CMD"/>
+       <reg32 offset="0x0037" name="RBBM_INT_0_MASK"/>
+       <reg32 offset="0x003e" name="RBBM_RBBM_CTL"/>
+       <reg32 offset="0x003f" name="RBBM_AHB_DEBUG_CTL"/>
+       <reg32 offset="0x0041" name="RBBM_VBIF_DEBUG_CTL"/>
+       <reg32 offset="0x0042" name="RBBM_CLOCK_CTL2"/>
+       <reg32 offset="0x0045" name="RBBM_BLOCK_SW_RESET_CMD"/>
+       <reg32 offset="0x0047" name="RBBM_RESET_CYCLES"/>
+       <reg32 offset="0x0049" name="RBBM_EXT_TRACE_BUS_CTL"/>
+       <reg32 offset="0x004a" name="RBBM_CFG_DEBBUS_SEL_A"/>
+       <reg32 offset="0x004b" name="RBBM_CFG_DEBBUS_SEL_B"/>
+       <reg32 offset="0x004c" name="RBBM_CFG_DEBBUS_SEL_C"/>
+       <reg32 offset="0x004d" name="RBBM_CFG_DEBBUS_SEL_D"/>
+       <reg32 offset="0x0098" name="RBBM_POWER_CNTL_IP">
+               <bitfield name="SW_COLLAPSE" pos="0" type="boolean"/>
+               <bitfield name="SP_TP_PWR_ON" pos="20" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x009c" name="RBBM_PERFCTR_CP_0_LO"/>
+       <reg32 offset="0x009d" name="RBBM_PERFCTR_CP_0_HI"/>
+       <reg32 offset="0x009e" name="RBBM_PERFCTR_CP_1_LO"/>
+       <reg32 offset="0x009f" name="RBBM_PERFCTR_CP_1_HI"/>
+       <reg32 offset="0x00a0" name="RBBM_PERFCTR_CP_2_LO"/>
+       <reg32 offset="0x00a1" name="RBBM_PERFCTR_CP_2_HI"/>
+       <reg32 offset="0x00a2" name="RBBM_PERFCTR_CP_3_LO"/>
+       <reg32 offset="0x00a3" name="RBBM_PERFCTR_CP_3_HI"/>
+       <reg32 offset="0x00a4" name="RBBM_PERFCTR_CP_4_LO"/>
+       <reg32 offset="0x00a5" name="RBBM_PERFCTR_CP_4_HI"/>
+       <reg32 offset="0x00a6" name="RBBM_PERFCTR_CP_5_LO"/>
+       <reg32 offset="0x00a7" name="RBBM_PERFCTR_CP_5_HI"/>
+       <reg32 offset="0x00a8" name="RBBM_PERFCTR_CP_6_LO"/>
+       <reg32 offset="0x00a9" name="RBBM_PERFCTR_CP_6_HI"/>
+       <reg32 offset="0x00aa" name="RBBM_PERFCTR_CP_7_LO"/>
+       <reg32 offset="0x00ab" name="RBBM_PERFCTR_CP_7_HI"/>
+       <reg32 offset="0x00ac" name="RBBM_PERFCTR_RBBM_0_LO"/>
+       <reg32 offset="0x00ad" name="RBBM_PERFCTR_RBBM_0_HI"/>
+       <reg32 offset="0x00ae" name="RBBM_PERFCTR_RBBM_1_LO"/>
+       <reg32 offset="0x00af" name="RBBM_PERFCTR_RBBM_1_HI"/>
+       <reg32 offset="0x00b0" name="RBBM_PERFCTR_RBBM_2_LO"/>
+       <reg32 offset="0x00b1" name="RBBM_PERFCTR_RBBM_2_HI"/>
+       <reg32 offset="0x00b2" name="RBBM_PERFCTR_RBBM_3_LO"/>
+       <reg32 offset="0x00b3" name="RBBM_PERFCTR_RBBM_3_HI"/>
+       <reg32 offset="0x00b4" name="RBBM_PERFCTR_PC_0_LO"/>
+       <reg32 offset="0x00b5" name="RBBM_PERFCTR_PC_0_HI"/>
+       <reg32 offset="0x00b6" name="RBBM_PERFCTR_PC_1_LO"/>
+       <reg32 offset="0x00b7" name="RBBM_PERFCTR_PC_1_HI"/>
+       <reg32 offset="0x00b8" name="RBBM_PERFCTR_PC_2_LO"/>
+       <reg32 offset="0x00b9" name="RBBM_PERFCTR_PC_2_HI"/>
+       <reg32 offset="0x00ba" name="RBBM_PERFCTR_PC_3_LO"/>
+       <reg32 offset="0x00bb" name="RBBM_PERFCTR_PC_3_HI"/>
+       <reg32 offset="0x00bc" name="RBBM_PERFCTR_PC_4_LO"/>
+       <reg32 offset="0x00bd" name="RBBM_PERFCTR_PC_4_HI"/>
+       <reg32 offset="0x00be" name="RBBM_PERFCTR_PC_5_LO"/>
+       <reg32 offset="0x00bf" name="RBBM_PERFCTR_PC_5_HI"/>
+       <reg32 offset="0x00c0" name="RBBM_PERFCTR_PC_6_LO"/>
+       <reg32 offset="0x00c1" name="RBBM_PERFCTR_PC_6_HI"/>
+       <reg32 offset="0x00c2" name="RBBM_PERFCTR_PC_7_LO"/>
+       <reg32 offset="0x00c3" name="RBBM_PERFCTR_PC_7_HI"/>
+       <reg32 offset="0x00c4" name="RBBM_PERFCTR_VFD_0_LO"/>
+       <reg32 offset="0x00c5" name="RBBM_PERFCTR_VFD_0_HI"/>
+       <reg32 offset="0x00c6" name="RBBM_PERFCTR_VFD_1_LO"/>
+       <reg32 offset="0x00c7" name="RBBM_PERFCTR_VFD_1_HI"/>
+       <reg32 offset="0x00c8" name="RBBM_PERFCTR_VFD_2_LO"/>
+       <reg32 offset="0x00c9" name="RBBM_PERFCTR_VFD_2_HI"/>
+       <reg32 offset="0x00ca" name="RBBM_PERFCTR_VFD_3_LO"/>
+       <reg32 offset="0x00cb" name="RBBM_PERFCTR_VFD_3_HI"/>
+       <reg32 offset="0x00cc" name="RBBM_PERFCTR_VFD_4_LO"/>
+       <reg32 offset="0x00cd" name="RBBM_PERFCTR_VFD_4_HI"/>
+       <reg32 offset="0x00ce" name="RBBM_PERFCTR_VFD_5_LO"/>
+       <reg32 offset="0x00cf" name="RBBM_PERFCTR_VFD_5_HI"/>
+       <reg32 offset="0x00d0" name="RBBM_PERFCTR_VFD_6_LO"/>
+       <reg32 offset="0x00d1" name="RBBM_PERFCTR_VFD_6_HI"/>
+       <reg32 offset="0x00d2" name="RBBM_PERFCTR_VFD_7_LO"/>
+       <reg32 offset="0x00d3" name="RBBM_PERFCTR_VFD_7_HI"/>
+       <reg32 offset="0x00d4" name="RBBM_PERFCTR_HLSQ_0_LO"/>
+       <reg32 offset="0x00d5" name="RBBM_PERFCTR_HLSQ_0_HI"/>
+       <reg32 offset="0x00d6" name="RBBM_PERFCTR_HLSQ_1_LO"/>
+       <reg32 offset="0x00d7" name="RBBM_PERFCTR_HLSQ_1_HI"/>
+       <reg32 offset="0x00d8" name="RBBM_PERFCTR_HLSQ_2_LO"/>
+       <reg32 offset="0x00d9" name="RBBM_PERFCTR_HLSQ_2_HI"/>
+       <reg32 offset="0x00da" name="RBBM_PERFCTR_HLSQ_3_LO"/>
+       <reg32 offset="0x00db" name="RBBM_PERFCTR_HLSQ_3_HI"/>
+       <reg32 offset="0x00dc" name="RBBM_PERFCTR_HLSQ_4_LO"/>
+       <reg32 offset="0x00dd" name="RBBM_PERFCTR_HLSQ_4_HI"/>
+       <reg32 offset="0x00de" name="RBBM_PERFCTR_HLSQ_5_LO"/>
+       <reg32 offset="0x00df" name="RBBM_PERFCTR_HLSQ_5_HI"/>
+       <reg32 offset="0x00e0" name="RBBM_PERFCTR_HLSQ_6_LO"/>
+       <reg32 offset="0x00e1" name="RBBM_PERFCTR_HLSQ_6_HI"/>
+       <reg32 offset="0x00e2" name="RBBM_PERFCTR_HLSQ_7_LO"/>
+       <reg32 offset="0x00e3" name="RBBM_PERFCTR_HLSQ_7_HI"/>
+       <reg32 offset="0x00e4" name="RBBM_PERFCTR_VPC_0_LO"/>
+       <reg32 offset="0x00e5" name="RBBM_PERFCTR_VPC_0_HI"/>
+       <reg32 offset="0x00e6" name="RBBM_PERFCTR_VPC_1_LO"/>
+       <reg32 offset="0x00e7" name="RBBM_PERFCTR_VPC_1_HI"/>
+       <reg32 offset="0x00e8" name="RBBM_PERFCTR_VPC_2_LO"/>
+       <reg32 offset="0x00e9" name="RBBM_PERFCTR_VPC_2_HI"/>
+       <reg32 offset="0x00ea" name="RBBM_PERFCTR_VPC_3_LO"/>
+       <reg32 offset="0x00eb" name="RBBM_PERFCTR_VPC_3_HI"/>
+       <reg32 offset="0x00ec" name="RBBM_PERFCTR_CCU_0_LO"/>
+       <reg32 offset="0x00ed" name="RBBM_PERFCTR_CCU_0_HI"/>
+       <reg32 offset="0x00ee" name="RBBM_PERFCTR_CCU_1_LO"/>
+       <reg32 offset="0x00ef" name="RBBM_PERFCTR_CCU_1_HI"/>
+       <reg32 offset="0x00f0" name="RBBM_PERFCTR_CCU_2_LO"/>
+       <reg32 offset="0x00f1" name="RBBM_PERFCTR_CCU_2_HI"/>
+       <reg32 offset="0x00f2" name="RBBM_PERFCTR_CCU_3_LO"/>
+       <reg32 offset="0x00f3" name="RBBM_PERFCTR_CCU_3_HI"/>
+       <reg32 offset="0x00f4" name="RBBM_PERFCTR_TSE_0_LO"/>
+       <reg32 offset="0x00f5" name="RBBM_PERFCTR_TSE_0_HI"/>
+       <reg32 offset="0x00f6" name="RBBM_PERFCTR_TSE_1_LO"/>
+       <reg32 offset="0x00f7" name="RBBM_PERFCTR_TSE_1_HI"/>
+       <reg32 offset="0x00f8" name="RBBM_PERFCTR_TSE_2_LO"/>
+       <reg32 offset="0x00f9" name="RBBM_PERFCTR_TSE_2_HI"/>
+       <reg32 offset="0x00fa" name="RBBM_PERFCTR_TSE_3_LO"/>
+       <reg32 offset="0x00fb" name="RBBM_PERFCTR_TSE_3_HI"/>
+       <reg32 offset="0x00fc" name="RBBM_PERFCTR_RAS_0_LO"/>
+       <reg32 offset="0x00fd" name="RBBM_PERFCTR_RAS_0_HI"/>
+       <reg32 offset="0x00fe" name="RBBM_PERFCTR_RAS_1_LO"/>
+       <reg32 offset="0x00ff" name="RBBM_PERFCTR_RAS_1_HI"/>
+       <reg32 offset="0x0100" name="RBBM_PERFCTR_RAS_2_LO"/>
+       <reg32 offset="0x0101" name="RBBM_PERFCTR_RAS_2_HI"/>
+       <reg32 offset="0x0102" name="RBBM_PERFCTR_RAS_3_LO"/>
+       <reg32 offset="0x0103" name="RBBM_PERFCTR_RAS_3_HI"/>
+       <reg32 offset="0x0104" name="RBBM_PERFCTR_UCHE_0_LO"/>
+       <reg32 offset="0x0105" name="RBBM_PERFCTR_UCHE_0_HI"/>
+       <reg32 offset="0x0106" name="RBBM_PERFCTR_UCHE_1_LO"/>
+       <reg32 offset="0x0107" name="RBBM_PERFCTR_UCHE_1_HI"/>
+       <reg32 offset="0x0108" name="RBBM_PERFCTR_UCHE_2_LO"/>
+       <reg32 offset="0x0109" name="RBBM_PERFCTR_UCHE_2_HI"/>
+       <reg32 offset="0x010a" name="RBBM_PERFCTR_UCHE_3_LO"/>
+       <reg32 offset="0x010b" name="RBBM_PERFCTR_UCHE_3_HI"/>
+       <reg32 offset="0x010c" name="RBBM_PERFCTR_UCHE_4_LO"/>
+       <reg32 offset="0x010d" name="RBBM_PERFCTR_UCHE_4_HI"/>
+       <reg32 offset="0x010e" name="RBBM_PERFCTR_UCHE_5_LO"/>
+       <reg32 offset="0x010f" name="RBBM_PERFCTR_UCHE_5_HI"/>
+       <reg32 offset="0x0110" name="RBBM_PERFCTR_UCHE_6_LO"/>
+       <reg32 offset="0x0111" name="RBBM_PERFCTR_UCHE_6_HI"/>
+       <reg32 offset="0x0112" name="RBBM_PERFCTR_UCHE_7_LO"/>
+       <reg32 offset="0x0113" name="RBBM_PERFCTR_UCHE_7_HI"/>
+       <reg32 offset="0x0114" name="RBBM_PERFCTR_TP_0_LO"/>
+       <reg32 offset="0x0115" name="RBBM_PERFCTR_TP_0_HI"/>
+       <reg32 offset="0x0116" name="RBBM_PERFCTR_TP_1_LO"/>
+       <reg32 offset="0x0117" name="RBBM_PERFCTR_TP_1_HI"/>
+       <reg32 offset="0x0118" name="RBBM_PERFCTR_TP_2_LO"/>
+       <reg32 offset="0x0119" name="RBBM_PERFCTR_TP_2_HI"/>
+       <reg32 offset="0x011a" name="RBBM_PERFCTR_TP_3_LO"/>
+       <reg32 offset="0x011b" name="RBBM_PERFCTR_TP_3_HI"/>
+       <reg32 offset="0x011c" name="RBBM_PERFCTR_TP_4_LO"/>
+       <reg32 offset="0x011d" name="RBBM_PERFCTR_TP_4_HI"/>
+       <reg32 offset="0x011e" name="RBBM_PERFCTR_TP_5_LO"/>
+       <reg32 offset="0x011f" name="RBBM_PERFCTR_TP_5_HI"/>
+       <reg32 offset="0x0120" name="RBBM_PERFCTR_TP_6_LO"/>
+       <reg32 offset="0x0121" name="RBBM_PERFCTR_TP_6_HI"/>
+       <reg32 offset="0x0122" name="RBBM_PERFCTR_TP_7_LO"/>
+       <reg32 offset="0x0123" name="RBBM_PERFCTR_TP_7_HI"/>
+       <reg32 offset="0x0124" name="RBBM_PERFCTR_SP_0_LO"/>
+       <reg32 offset="0x0125" name="RBBM_PERFCTR_SP_0_HI"/>
+       <reg32 offset="0x0126" name="RBBM_PERFCTR_SP_1_LO"/>
+       <reg32 offset="0x0127" name="RBBM_PERFCTR_SP_1_HI"/>
+       <reg32 offset="0x0128" name="RBBM_PERFCTR_SP_2_LO"/>
+       <reg32 offset="0x0129" name="RBBM_PERFCTR_SP_2_HI"/>
+       <reg32 offset="0x012a" name="RBBM_PERFCTR_SP_3_LO"/>
+       <reg32 offset="0x012b" name="RBBM_PERFCTR_SP_3_HI"/>
+       <reg32 offset="0x012c" name="RBBM_PERFCTR_SP_4_LO"/>
+       <reg32 offset="0x012d" name="RBBM_PERFCTR_SP_4_HI"/>
+       <reg32 offset="0x012e" name="RBBM_PERFCTR_SP_5_LO"/>
+       <reg32 offset="0x012f" name="RBBM_PERFCTR_SP_5_HI"/>
+       <reg32 offset="0x0130" name="RBBM_PERFCTR_SP_6_LO"/>
+       <reg32 offset="0x0131" name="RBBM_PERFCTR_SP_6_HI"/>
+       <reg32 offset="0x0132" name="RBBM_PERFCTR_SP_7_LO"/>
+       <reg32 offset="0x0133" name="RBBM_PERFCTR_SP_7_HI"/>
+       <reg32 offset="0x0134" name="RBBM_PERFCTR_SP_8_LO"/>
+       <reg32 offset="0x0135" name="RBBM_PERFCTR_SP_8_HI"/>
+       <reg32 offset="0x0136" name="RBBM_PERFCTR_SP_9_LO"/>
+       <reg32 offset="0x0137" name="RBBM_PERFCTR_SP_9_HI"/>
+       <reg32 offset="0x0138" name="RBBM_PERFCTR_SP_10_LO"/>
+       <reg32 offset="0x0139" name="RBBM_PERFCTR_SP_10_HI"/>
+       <reg32 offset="0x013a" name="RBBM_PERFCTR_SP_11_LO"/>
+       <reg32 offset="0x013b" name="RBBM_PERFCTR_SP_11_HI"/>
+       <reg32 offset="0x013c" name="RBBM_PERFCTR_RB_0_LO"/>
+       <reg32 offset="0x013d" name="RBBM_PERFCTR_RB_0_HI"/>
+       <reg32 offset="0x013e" name="RBBM_PERFCTR_RB_1_LO"/>
+       <reg32 offset="0x013f" name="RBBM_PERFCTR_RB_1_HI"/>
+       <reg32 offset="0x0140" name="RBBM_PERFCTR_RB_2_LO"/>
+       <reg32 offset="0x0141" name="RBBM_PERFCTR_RB_2_HI"/>
+       <reg32 offset="0x0142" name="RBBM_PERFCTR_RB_3_LO"/>
+       <reg32 offset="0x0143" name="RBBM_PERFCTR_RB_3_HI"/>
+       <reg32 offset="0x0144" name="RBBM_PERFCTR_RB_4_LO"/>
+       <reg32 offset="0x0145" name="RBBM_PERFCTR_RB_4_HI"/>
+       <reg32 offset="0x0146" name="RBBM_PERFCTR_RB_5_LO"/>
+       <reg32 offset="0x0147" name="RBBM_PERFCTR_RB_5_HI"/>
+       <reg32 offset="0x0148" name="RBBM_PERFCTR_RB_6_LO"/>
+       <reg32 offset="0x0149" name="RBBM_PERFCTR_RB_6_HI"/>
+       <reg32 offset="0x014a" name="RBBM_PERFCTR_RB_7_LO"/>
+       <reg32 offset="0x014b" name="RBBM_PERFCTR_RB_7_HI"/>
+       <reg32 offset="0x014c" name="RBBM_PERFCTR_VSC_0_LO"/>
+       <reg32 offset="0x014d" name="RBBM_PERFCTR_VSC_0_HI"/>
+       <reg32 offset="0x014e" name="RBBM_PERFCTR_VSC_1_LO"/>
+       <reg32 offset="0x014f" name="RBBM_PERFCTR_VSC_1_HI"/>
+       <reg32 offset="0x0166" name="RBBM_PERFCTR_PWR_0_LO"/>
+       <reg32 offset="0x0167" name="RBBM_PERFCTR_PWR_0_HI"/>
+       <reg32 offset="0x0168" name="RBBM_PERFCTR_PWR_1_LO"/>
+       <reg32 offset="0x0169" name="RBBM_PERFCTR_PWR_1_HI"/>
+       <reg32 offset="0x016e" name="RBBM_ALWAYSON_COUNTER_LO"/>
+       <reg32 offset="0x016f" name="RBBM_ALWAYSON_COUNTER_HI"/>
+       <array offset="0x0068" name="RBBM_CLOCK_CTL_SP" stride="1" length="4">
+               <reg32 offset="0x0" name="REG"/>
+       </array>
+       <array offset="0x006c" name="RBBM_CLOCK_CTL2_SP" stride="1" length="4">
+               <reg32 offset="0x0" name="REG"/>
+       </array>
+       <array offset="0x0070" name="RBBM_CLOCK_HYST_SP" stride="1" length="4">
+               <reg32 offset="0x0" name="REG"/>
+       </array>
+       <array offset="0x0074" name="RBBM_CLOCK_DELAY_SP" stride="1" length="4">
+               <reg32 offset="0x0" name="REG"/>
+       </array>
+       <array offset="0x0078" name="RBBM_CLOCK_CTL_RB" stride="1" length="4">
+               <reg32 offset="0x0" name="REG"/>
+       </array>
+       <array offset="0x007c" name="RBBM_CLOCK_CTL2_RB" stride="1" length="4">
+               <reg32 offset="0x0" name="REG"/>
+       </array>
+       <array offset="0x0082" name="RBBM_CLOCK_CTL_MARB_CCU" stride="1" length="4">
+               <reg32 offset="0x0" name="REG"/>
+       </array>
+       <array offset="0x0086" name="RBBM_CLOCK_HYST_RB_MARB_CCU" stride="1" length="4">
+               <reg32 offset="0x0" name="REG"/>
+       </array>
+       <reg32 offset="0x0080" name="RBBM_CLOCK_HYST_COM_DCOM"/>
+       <reg32 offset="0x0081" name="RBBM_CLOCK_CTL_COM_DCOM"/>
+       <reg32 offset="0x008a" name="RBBM_CLOCK_CTL_HLSQ"/>
+       <reg32 offset="0x008b" name="RBBM_CLOCK_HYST_HLSQ"/>
+       <reg32 offset="0x008c" name="RBBM_CLOCK_DELAY_HLSQ"/>
+       <bitset name="A4XX_CGC_HLSQ">
+               <bitfield name="EARLY_CYC" low="20" high="22" type="uint"/>
+       </bitset>
+       <reg32 offset="0x008d" name="RBBM_CLOCK_DELAY_COM_DCOM"/>
+       <array offset="0x008e" name="RBBM_CLOCK_DELAY_RB_MARB_CCU_L1" stride="1" length="4">
+               <reg32 offset="0x0" name="REG"/>
+       </array>
+       <bitset name="A4XX_INT0">
+               <bitfield name="RBBM_GPU_IDLE" pos="0" type="boolean"/>
+               <bitfield name="RBBM_AHB_ERROR" pos="1" type="boolean"/>
+               <bitfield name="RBBM_REG_TIMEOUT" pos="2" type="boolean"/>
+               <bitfield name="RBBM_ME_MS_TIMEOUT" pos="3" type="boolean"/>
+               <bitfield name="RBBM_PFP_MS_TIMEOUT" pos="4" type="boolean"/>
+               <bitfield name="RBBM_ATB_BUS_OVERFLOW" pos="5" type="boolean"/>
+               <bitfield name="VFD_ERROR" pos="6" type="boolean"/>
+               <bitfield name="CP_SW_INT" pos="7" type="boolean"/>
+               <bitfield name="CP_T0_PACKET_IN_IB" pos="8" type="boolean"/>
+               <bitfield name="CP_OPCODE_ERROR" pos="9" type="boolean"/>
+               <bitfield name="CP_RESERVED_BIT_ERROR" pos="10" type="boolean"/>
+               <bitfield name="CP_HW_FAULT" pos="11" type="boolean"/>
+               <bitfield name="CP_DMA" pos="12" type="boolean"/>
+               <bitfield name="CP_IB2_INT" pos="13" type="boolean"/>
+               <bitfield name="CP_IB1_INT" pos="14" type="boolean"/>
+               <bitfield name="CP_RB_INT" pos="15" type="boolean"/>
+               <bitfield name="CP_REG_PROTECT_FAULT" pos="16" type="boolean"/>
+               <bitfield name="CP_RB_DONE_TS" pos="17" type="boolean"/>
+               <bitfield name="CP_VS_DONE_TS" pos="18" type="boolean"/>
+               <bitfield name="CP_PS_DONE_TS" pos="19" type="boolean"/>
+               <bitfield name="CACHE_FLUSH_TS" pos="20" type="boolean"/>
+               <bitfield name="CP_AHB_ERROR_HALT" pos="21" type="boolean"/>
+               <bitfield name="MISC_HANG_DETECT" pos="24" type="boolean"/>
+               <bitfield name="UCHE_OOB_ACCESS" pos="25" type="boolean"/>
+       </bitset>
+
+       <reg32 offset="0x0099" name="RBBM_SP_REGFILE_SLEEP_CNTL_0"/>
+       <reg32 offset="0x009a" name="RBBM_SP_REGFILE_SLEEP_CNTL_1"/>
+       <reg32 offset="0x0170" name="RBBM_PERFCTR_CTL"/>
+       <reg32 offset="0x0171" name="RBBM_PERFCTR_LOAD_CMD0"/>
+       <reg32 offset="0x0172" name="RBBM_PERFCTR_LOAD_CMD1"/>
+       <reg32 offset="0x0173" name="RBBM_PERFCTR_LOAD_CMD2"/>
+       <reg32 offset="0x0174" name="RBBM_PERFCTR_LOAD_VALUE_LO"/>
+       <reg32 offset="0x0175" name="RBBM_PERFCTR_LOAD_VALUE_HI"/>
+       <reg32 offset="0x0176" name="RBBM_PERFCTR_RBBM_SEL_0" type="a4xx_rbbm_perfcounter_select"/>
+       <reg32 offset="0x0177" name="RBBM_PERFCTR_RBBM_SEL_1" type="a4xx_rbbm_perfcounter_select"/>
+       <reg32 offset="0x0178" name="RBBM_PERFCTR_RBBM_SEL_2" type="a4xx_rbbm_perfcounter_select"/>
+       <reg32 offset="0x0179" name="RBBM_PERFCTR_RBBM_SEL_3" type="a4xx_rbbm_perfcounter_select"/>
+       <reg32 offset="0x017a" name="RBBM_GPU_BUSY_MASKED"/>
+       <reg32 offset="0x017d" name="RBBM_INT_0_STATUS"/>
+       <reg32 offset="0x0182" name="RBBM_CLOCK_STATUS"/>
+       <reg32 offset="0x0189" name="RBBM_AHB_STATUS"/>
+       <reg32 offset="0x018c" name="RBBM_AHB_ME_SPLIT_STATUS"/>
+       <reg32 offset="0x018d" name="RBBM_AHB_PFP_SPLIT_STATUS"/>
+       <reg32 offset="0x018f" name="RBBM_AHB_ERROR_STATUS"/>
+       <reg32 offset="0x0191" name="RBBM_STATUS">
+               <bitfield name="HI_BUSY" pos="0" type="boolean"/>
+               <bitfield name="CP_ME_BUSY" pos="1" type="boolean"/>
+               <bitfield name="CP_PFP_BUSY" pos="2" type="boolean"/>
+               <bitfield name="CP_NRT_BUSY" pos="14" type="boolean"/>
+               <bitfield name="VBIF_BUSY" pos="15" type="boolean"/>
+               <bitfield name="TSE_BUSY" pos="16" type="boolean"/>
+               <bitfield name="RAS_BUSY" pos="17" type="boolean"/>
+               <bitfield name="RB_BUSY" pos="18" type="boolean"/>
+               <bitfield name="PC_DCALL_BUSY" pos="19" type="boolean"/>
+               <bitfield name="PC_VSD_BUSY" pos="20" type="boolean"/>
+               <bitfield name="VFD_BUSY" pos="21" type="boolean"/>
+               <bitfield name="VPC_BUSY" pos="22" type="boolean"/>
+               <bitfield name="UCHE_BUSY" pos="23" type="boolean"/>
+               <bitfield name="SP_BUSY" pos="24" type="boolean"/>
+               <bitfield name="TPL1_BUSY" pos="25" type="boolean"/>
+               <bitfield name="MARB_BUSY" pos="26" type="boolean"/>
+               <bitfield name="VSC_BUSY" pos="27" type="boolean"/>
+               <bitfield name="ARB_BUSY" pos="28" type="boolean"/>
+               <bitfield name="HLSQ_BUSY" pos="29" type="boolean"/>
+               <bitfield name="GPU_BUSY_NOHC" pos="30" type="boolean"/>
+               <bitfield name="GPU_BUSY" pos="31" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x019f" name="RBBM_INTERFACE_RRDY_STATUS5"/>
+       <reg32 offset="0x01b0" name="RBBM_POWER_STATUS">
+               <bitfield name="SP_TP_PWR_ON" pos="20" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x01b8" name="RBBM_WAIT_IDLE_CLOCKS_CTL2"/>
+
+       <!-- CP registers -->
+       <reg32 offset="0x0228" name="CP_SCRATCH_UMASK"/>
+       <reg32 offset="0x0229" name="CP_SCRATCH_ADDR"/>
+       <reg32 offset="0x0200" name="CP_RB_BASE"/>
+       <reg32 offset="0x0201" name="CP_RB_CNTL"/>
+       <reg32 offset="0x0205" name="CP_RB_WPTR"/>
+       <reg32 offset="0x0203" name="CP_RB_RPTR_ADDR"/>
+       <reg32 offset="0x0204" name="CP_RB_RPTR"/>
+       <reg32 offset="0x0206" name="CP_IB1_BASE"/>
+       <reg32 offset="0x0207" name="CP_IB1_BUFSZ"/>
+       <reg32 offset="0x0208" name="CP_IB2_BASE"/>
+       <reg32 offset="0x0209" name="CP_IB2_BUFSZ"/>
+       <reg32 offset="0x020c" name="CP_ME_NRT_ADDR"/>
+       <reg32 offset="0x020d" name="CP_ME_NRT_DATA"/>
+       <reg32 offset="0x0217" name="CP_ME_RB_DONE_DATA"/>
+       <reg32 offset="0x0219" name="CP_QUEUE_THRESH2"/>
+       <reg32 offset="0x021b" name="CP_MERCIU_SIZE"/>
+       <reg32 offset="0x021c" name="CP_ROQ_ADDR"/>
+       <reg32 offset="0x021d" name="CP_ROQ_DATA"/>
+       <reg32 offset="0x021e" name="CP_MEQ_ADDR"/>
+       <reg32 offset="0x021f" name="CP_MEQ_DATA"/>
+       <reg32 offset="0x0220" name="CP_MERCIU_ADDR"/>
+       <reg32 offset="0x0221" name="CP_MERCIU_DATA"/>
+       <reg32 offset="0x0222" name="CP_MERCIU_DATA2"/>
+       <reg32 offset="0x0223" name="CP_PFP_UCODE_ADDR"/>
+       <reg32 offset="0x0224" name="CP_PFP_UCODE_DATA"/>
+       <reg32 offset="0x0225" name="CP_ME_RAM_WADDR"/>
+       <reg32 offset="0x0226" name="CP_ME_RAM_RADDR"/>
+       <reg32 offset="0x0227" name="CP_ME_RAM_DATA"/>
+       <reg32 offset="0x022a" name="CP_PREEMPT"/>
+       <reg32 offset="0x022c" name="CP_CNTL"/>
+       <reg32 offset="0x022d" name="CP_ME_CNTL"/>
+       <reg32 offset="0x022e" name="CP_DEBUG"/>
+       <reg32 offset="0x0231" name="CP_DEBUG_ECO_CONTROL"/>
+       <reg32 offset="0x0232" name="CP_DRAW_STATE_ADDR"/>
+       <array offset="0x0240" name="CP_PROTECT" stride="1" length="16">
+               <reg32 offset="0x0" name="REG" type="adreno_cp_protect"/>
+       </array>
+       <reg32 offset="0x0250" name="CP_PROTECT_CTRL"/>
+       <reg32 offset="0x04c0" name="CP_ST_BASE"/>
+       <reg32 offset="0x04ce" name="CP_STQ_AVAIL"/>
+       <reg32 offset="0x04d0" name="CP_MERCIU_STAT"/>
+       <reg32 offset="0x04d2" name="CP_WFI_PEND_CTR"/>
+       <reg32 offset="0x04d8" name="CP_HW_FAULT"/>
+       <reg32 offset="0x04da" name="CP_PROTECT_STATUS"/>
+       <reg32 offset="0x04dd" name="CP_EVENTS_IN_FLIGHT"/>
+       <reg32 offset="0x0500" name="CP_PERFCTR_CP_SEL_0" type="a4xx_cp_perfcounter_select"/>
+       <reg32 offset="0x0501" name="CP_PERFCTR_CP_SEL_1" type="a4xx_cp_perfcounter_select"/>
+       <reg32 offset="0x0502" name="CP_PERFCTR_CP_SEL_2" type="a4xx_cp_perfcounter_select"/>
+       <reg32 offset="0x0503" name="CP_PERFCTR_CP_SEL_3" type="a4xx_cp_perfcounter_select"/>
+       <reg32 offset="0x0504" name="CP_PERFCTR_CP_SEL_4" type="a4xx_cp_perfcounter_select"/>
+       <reg32 offset="0x0505" name="CP_PERFCTR_CP_SEL_5" type="a4xx_cp_perfcounter_select"/>
+       <reg32 offset="0x0506" name="CP_PERFCTR_CP_SEL_6" type="a4xx_cp_perfcounter_select"/>
+       <reg32 offset="0x0507" name="CP_PERFCTR_CP_SEL_7" type="a4xx_cp_perfcounter_select"/>
+       <reg32 offset="0x050b" name="CP_PERFCOMBINER_SELECT"/>
+       <array offset="0x0578" name="CP_SCRATCH" stride="1" length="23">
+               <reg32 offset="0x0" name="REG"/>
+       </array>
+
+
+       <!-- SP registers -->
+       <reg32 offset="0x0ec0" name="SP_VS_STATUS"/>
+       <reg32 offset="0x0ec3" name="SP_MODE_CONTROL"/>
+
+       <reg32 offset="0x0ec4" name="SP_PERFCTR_SP_SEL_0" type="a4xx_sp_perfcounter_select"/>
+       <reg32 offset="0x0ec5" name="SP_PERFCTR_SP_SEL_1" type="a4xx_sp_perfcounter_select"/>
+       <reg32 offset="0x0ec6" name="SP_PERFCTR_SP_SEL_2" type="a4xx_sp_perfcounter_select"/>
+       <reg32 offset="0x0ec7" name="SP_PERFCTR_SP_SEL_3" type="a4xx_sp_perfcounter_select"/>
+       <reg32 offset="0x0ec8" name="SP_PERFCTR_SP_SEL_4" type="a4xx_sp_perfcounter_select"/>
+       <reg32 offset="0x0ec9" name="SP_PERFCTR_SP_SEL_5" type="a4xx_sp_perfcounter_select"/>
+       <reg32 offset="0x0eca" name="SP_PERFCTR_SP_SEL_6" type="a4xx_sp_perfcounter_select"/>
+       <reg32 offset="0x0ecb" name="SP_PERFCTR_SP_SEL_7" type="a4xx_sp_perfcounter_select"/>
+       <reg32 offset="0x0ecc" name="SP_PERFCTR_SP_SEL_8" type="a4xx_sp_perfcounter_select"/>
+       <reg32 offset="0x0ecd" name="SP_PERFCTR_SP_SEL_9" type="a4xx_sp_perfcounter_select"/>
+       <reg32 offset="0x0ece" name="SP_PERFCTR_SP_SEL_10" type="a4xx_sp_perfcounter_select"/>
+       <reg32 offset="0x0ecf" name="SP_PERFCTR_SP_SEL_11" type="a4xx_sp_perfcounter_select"/>
+
+       <reg32 offset="0x22c0" name="SP_SP_CTRL_REG">
+               <bitfield name="BINNING_PASS" pos="19" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x22c1" name="SP_INSTR_CACHE_CTRL">
+               <!-- set when VS in buffer mode: -->
+               <bitfield name="VS_BUFFER" pos="7" type="boolean"/>
+               <!-- set when FS in buffer mode: -->
+               <bitfield name="FS_BUFFER" pos="8" type="boolean"/>
+               <!-- set when both VS or FS in buffer mode: -->
+               <bitfield name="INSTR_BUFFER" pos="10" type="boolean"/>
+               <!-- TODO other bits probably matter when other stages active? -->
+       </reg32>
+
+       <bitset name="a4xx_sp_vs_fs_ctrl_reg0" inline="yes">
+               <!--
+                       NOTE that SP_{VS,FS}_CTRL_REG1 are different, but so far REG0
+                       appears to be the same..
+               -->
+               <bitfield name="THREADMODE" pos="0" type="a3xx_threadmode"/>
+               <!-- VARYING bit only for FS.. think it controls emitting (ei) flag? -->
+               <bitfield name="VARYING" pos="1" type="boolean"/>
+               <!-- maybe CACHEINVALID is two bits?? -->
+               <bitfield name="CACHEINVALID" pos="2" type="boolean"/>
+               <doc>
+                       The full/half register footprint is in units of four components,
+                       so if r0.x is used, that counts as all of r0.[xyzw] as used.
+                       There are separate full/half register footprint values as the
+                       full and half registers are independent (not overlapping).
+                       Presumably the thread scheduler hardware allocates the full/half
+                       register names from the actual physical register file and
+                       handles the register renaming.
+               </doc>
+               <bitfield name="HALFREGFOOTPRINT" low="4" high="9" type="uint"/>
+               <bitfield name="FULLREGFOOTPRINT" low="10" high="15" type="uint"/>
+               <!-- maybe INOUTREGOVERLAP is a bitflag? -->
+               <bitfield name="INOUTREGOVERLAP" low="18" high="19" type="uint"/>
+               <bitfield name="THREADSIZE" pos="20" type="a3xx_threadsize"/>
+               <bitfield name="SUPERTHREADMODE" pos="21" type="boolean"/>
+               <bitfield name="PIXLODENABLE" pos="22" type="boolean"/>
+       </bitset>
+
+       <reg32 offset="0x22c4" name="SP_VS_CTRL_REG0" type="a4xx_sp_vs_fs_ctrl_reg0"/>
+       <reg32 offset="0x22c5" name="SP_VS_CTRL_REG1">
+               <bitfield name="CONSTLENGTH" low="0" high="7" type="uint"/>
+               <bitfield name="INITIALOUTSTANDING" low="24" high="30" type="uint"/>
+       </reg32>
+       <reg32 offset="0x22c6" name="SP_VS_PARAM_REG">
+               <bitfield name="POSREGID" low="0" high="7" type="a3xx_regid"/>
+               <bitfield name="PSIZEREGID" low="8" high="15" type="a3xx_regid"/>
+               <bitfield name="TOTALVSOUTVAR" low="20" high="31" type="uint"/>
+       </reg32>
+       <array offset="0x22c7" name="SP_VS_OUT" stride="1" length="16">
+               <reg32 offset="0x0" name="REG">
+                       <bitfield name="A_REGID" low="0" high="8" type="a3xx_regid"/>
+                       <bitfield name="A_COMPMASK" low="9" high="12" type="hex"/>
+                       <bitfield name="B_REGID" low="16" high="24" type="a3xx_regid"/>
+                       <bitfield name="B_COMPMASK" low="25" high="28" type="hex"/>
+               </reg32>
+       </array>
+       <array offset="0x22d8" name="SP_VS_VPC_DST" stride="1" length="8">
+               <reg32 offset="0x0" name="REG">
+                       <doc>
+                               These seem to be offsets for storage of the varyings.
+                               Always seems to start from 8, possibly loc 0 and 4
+                               are for gl_Position and gl_PointSize?
+                       </doc>
+                       <bitfield name="OUTLOC0" low="0" high="7" type="uint"/>
+                       <bitfield name="OUTLOC1" low="8" high="15" type="uint"/>
+                       <bitfield name="OUTLOC2" low="16" high="23" type="uint"/>
+                       <bitfield name="OUTLOC3" low="24" high="31" type="uint"/>
+               </reg32>
+       </array>
+
+       <reg32 offset="0x22e0" name="SP_VS_OBJ_OFFSET_REG">
+               <!-- always 00000000: -->
+               <doc>
+                       From register spec:
+                       SP_FS_OBJ_OFFSET_REG.CONSTOBJECTSTARTOFFSET [16:24]: Constant object
+                       start offset in on chip RAM,
+                       128bit aligned
+               </doc>
+               <bitfield name="CONSTOBJECTOFFSET" low="16" high="24" type="uint"/>
+               <bitfield name="SHADEROBJOFFSET" low="25" high="31" type="uint"/>
+       </reg32>
+       <reg32 offset="0x22e1" name="SP_VS_OBJ_START"/>
+       <reg32 offset="0x22e2" name="SP_VS_PVT_MEM_PARAM"/>"
+       <reg32 offset="0x22e3" name="SP_VS_PVT_MEM_ADDR"/>
+       <reg32 offset="0x22e5" name="SP_VS_LENGTH_REG" type="uint"/>
+       <reg32 offset="0x22e8" name="SP_FS_CTRL_REG0" type="a4xx_sp_vs_fs_ctrl_reg0"/>
+       <reg32 offset="0x22e9" name="SP_FS_CTRL_REG1">
+               <bitfield name="CONSTLENGTH" low="0" high="7" type="uint"/>
+               <bitfield name="FACENESS" pos="19" type="boolean"/>
+               <bitfield name="VARYING" pos="20" type="boolean"/>
+               <bitfield name="FRAGCOORD" pos="21" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x22ea" name="SP_FS_OBJ_OFFSET_REG">
+               <bitfield name="CONSTOBJECTOFFSET" low="16" high="24" type="uint"/>
+               <bitfield name="SHADEROBJOFFSET" low="25" high="31" type="uint"/>
+       </reg32>
+       <reg32 offset="0x22eb" name="SP_FS_OBJ_START"/>
+       <reg32 offset="0x22ec" name="SP_FS_PVT_MEM_PARAM"/>"
+       <reg32 offset="0x22ed" name="SP_FS_PVT_MEM_ADDR"/>
+       <reg32 offset="0x22ef" name="SP_FS_LENGTH_REG" type="uint"/>
+       <reg32 offset="0x22f0" name="SP_FS_OUTPUT_REG">
+               <bitfield name="MRT" low="0" high="3" type="uint"/>
+               <bitfield name="DEPTH_ENABLE" pos="7" type="boolean"/>
+               <!-- TODO double check.. for now assume same as a3xx -->
+               <bitfield name="DEPTH_REGID" low="8" high="15" type="a3xx_regid"/>
+               <bitfield name="SAMPLEMASK_REGID" low="24" high="31" type="a3xx_regid"/>
+       </reg32>
+       <array offset="0x22f1" name="SP_FS_MRT" stride="1" length="8">
+               <reg32 offset="0x0" name="REG">
+                       <bitfield name="REGID" low="0" high="7" type="a3xx_regid"/>
+                       <bitfield name="HALF_PRECISION" pos="8" type="boolean"/>
+                       <bitfield name="MRTFORMAT" low="12" high="17" type="a4xx_color_fmt"/>
+                       <bitfield name="COLOR_SRGB" pos="18" type="boolean"/>
+               </reg32>
+       </array>
+       <reg32 offset="0x2300" name="SP_CS_CTRL_REG0"/>
+       <reg32 offset="0x2301" name="SP_CS_OBJ_OFFSET_REG"/>
+       <reg32 offset="0x2302" name="SP_CS_OBJ_START"/>
+       <reg32 offset="0x2303" name="SP_CS_PVT_MEM_PARAM"/>
+       <reg32 offset="0x2304" name="SP_CS_PVT_MEM_ADDR"/>
+       <reg32 offset="0x2305" name="SP_CS_PVT_MEM_SIZE"/>
+       <reg32 offset="0x2306" name="SP_CS_LENGTH_REG" type="uint"/>
+       <reg32 offset="0x230d" name="SP_HS_OBJ_OFFSET_REG">
+               <bitfield name="CONSTOBJECTOFFSET" low="16" high="24" type="uint"/>
+               <bitfield name="SHADEROBJOFFSET" low="25" high="31" type="uint"/>
+       </reg32>
+       <reg32 offset="0x230e" name="SP_HS_OBJ_START"/>
+       <reg32 offset="0x230f" name="SP_HS_PVT_MEM_PARAM"/>"
+       <reg32 offset="0x2310" name="SP_HS_PVT_MEM_ADDR"/>
+       <reg32 offset="0x2312" name="SP_HS_LENGTH_REG" type="uint"/>
+
+       <reg32 offset="0x231a" name="SP_DS_PARAM_REG">
+               <bitfield name="POSREGID" low="0" high="7" type="a3xx_regid"/>
+               <bitfield name="TOTALGSOUTVAR" low="20" high="31" type="uint"/>
+       </reg32>
+       <array offset="0x231b" name="SP_DS_OUT" stride="1" length="16">
+               <reg32 offset="0x0" name="REG">
+                       <bitfield name="A_REGID" low="0" high="8" type="a3xx_regid"/>
+                       <bitfield name="A_COMPMASK" low="9" high="12" type="hex"/>
+                       <bitfield name="B_REGID" low="16" high="24" type="a3xx_regid"/>
+                       <bitfield name="B_COMPMASK" low="25" high="28" type="hex"/>
+               </reg32>
+       </array>
+       <array offset="0x232c" name="SP_DS_VPC_DST" stride="1" length="8">
+               <reg32 offset="0x0" name="REG">
+                       <doc>
+                               These seem to be offsets for storage of the varyings.
+                               Always seems to start from 8, possibly loc 0 and 4
+                               are for gl_Position and gl_PointSize?
+                       </doc>
+                       <bitfield name="OUTLOC0" low="0" high="7" type="uint"/>
+                       <bitfield name="OUTLOC1" low="8" high="15" type="uint"/>
+                       <bitfield name="OUTLOC2" low="16" high="23" type="uint"/>
+                       <bitfield name="OUTLOC3" low="24" high="31" type="uint"/>
+               </reg32>
+       </array>
+       <reg32 offset="0x2334" name="SP_DS_OBJ_OFFSET_REG">
+               <bitfield name="CONSTOBJECTOFFSET" low="16" high="24" type="uint"/>
+               <bitfield name="SHADEROBJOFFSET" low="25" high="31" type="uint"/>
+       </reg32>
+       <reg32 offset="0x2335" name="SP_DS_OBJ_START"/>
+       <reg32 offset="0x2336" name="SP_DS_PVT_MEM_PARAM"/>"
+       <reg32 offset="0x2337" name="SP_DS_PVT_MEM_ADDR"/>
+       <reg32 offset="0x2339" name="SP_DS_LENGTH_REG" type="uint"/>
+
+       <reg32 offset="0x2341" name="SP_GS_PARAM_REG">
+               <bitfield name="POSREGID" low="0" high="7" type="a3xx_regid"/>
+               <bitfield name="PRIMREGID" low="8" high="15" type="a3xx_regid"/>
+               <bitfield name="TOTALGSOUTVAR" low="20" high="31" type="uint"/>
+       </reg32>
+       <array offset="0x2342" name="SP_GS_OUT" stride="1" length="16">
+               <reg32 offset="0x0" name="REG">
+                       <bitfield name="A_REGID" low="0" high="8" type="a3xx_regid"/>
+                       <bitfield name="A_COMPMASK" low="9" high="12" type="hex"/>
+                       <bitfield name="B_REGID" low="16" high="24" type="a3xx_regid"/>
+                       <bitfield name="B_COMPMASK" low="25" high="28" type="hex"/>
+               </reg32>
+       </array>
+       <array offset="0x2353" name="SP_GS_VPC_DST" stride="1" length="8">
+               <reg32 offset="0x0" name="REG">
+                       <doc>
+                               These seem to be offsets for storage of the varyings.
+                               Always seems to start from 8, possibly loc 0 and 4
+                               are for gl_Position and gl_PointSize?
+                       </doc>
+                       <bitfield name="OUTLOC0" low="0" high="7" type="uint"/>
+                       <bitfield name="OUTLOC1" low="8" high="15" type="uint"/>
+                       <bitfield name="OUTLOC2" low="16" high="23" type="uint"/>
+                       <bitfield name="OUTLOC3" low="24" high="31" type="uint"/>
+               </reg32>
+       </array>
+       <reg32 offset="0x235b" name="SP_GS_OBJ_OFFSET_REG">
+               <bitfield name="CONSTOBJECTOFFSET" low="16" high="24" type="uint"/>
+               <bitfield name="SHADEROBJOFFSET" low="25" high="31" type="uint"/>
+       </reg32>
+       <reg32 offset="0x235c" name="SP_GS_OBJ_START"/>
+       <reg32 offset="0x235d" name="SP_GS_PVT_MEM_PARAM"/>"
+       <reg32 offset="0x235e" name="SP_GS_PVT_MEM_ADDR"/>
+       <reg32 offset="0x2360" name="SP_GS_LENGTH_REG" type="uint"/>
+
+       <!-- VPC registers -->
+       <reg32 offset="0x0e60" name="VPC_DEBUG_RAM_SEL"/>
+       <reg32 offset="0x0e61" name="VPC_DEBUG_RAM_READ"/>
+       <reg32 offset="0x0e64" name="VPC_DEBUG_ECO_CONTROL"/>
+       <reg32 offset="0x0e65" name="VPC_PERFCTR_VPC_SEL_0" type="a4xx_vpc_perfcounter_select"/>
+       <reg32 offset="0x0e66" name="VPC_PERFCTR_VPC_SEL_1" type="a4xx_vpc_perfcounter_select"/>
+       <reg32 offset="0x0e67" name="VPC_PERFCTR_VPC_SEL_2" type="a4xx_vpc_perfcounter_select"/>
+       <reg32 offset="0x0e68" name="VPC_PERFCTR_VPC_SEL_3" type="a4xx_vpc_perfcounter_select"/>
+       <reg32 offset="0x2140" name="VPC_ATTR">
+               <bitfield name="TOTALATTR" low="0" high="8" type="uint"/>
+               <!-- PSIZE bit set if gl_PointSize written: -->
+               <bitfield name="PSIZE" pos="9" type="boolean"/>
+               <bitfield name="THRDASSIGN" low="12" high="13" type="uint"/>
+               <bitfield name="ENABLE" pos="25" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x2141" name="VPC_PACK">
+               <bitfield name="NUMBYPASSVAR" low="0" high="7" type="uint"/>
+               <bitfield name="NUMFPNONPOSVAR" low="8" high="15" type="uint"/>
+               <bitfield name="NUMNONPOSVSVAR" low="16" high="23" type="uint"/>
+       </reg32>
+       <array offset="0x2142" name="VPC_VARYING_INTERP" stride="1" length="8">
+               <reg32 offset="0x0" name="MODE"/>
+       </array>
+       <array offset="0x214a" name="VPC_VARYING_PS_REPL" stride="1" length="8">
+               <reg32 offset="0x0" name="MODE"/>
+       </array>
+
+       <reg32 offset="0x216e" name="VPC_SO_FLUSH_WADDR_3"/>
+
+       <!-- VSC registers -->
+       <reg32 offset="0x0c00" name="VSC_BIN_SIZE">
+               <bitfield name="WIDTH" low="0" high="4" shr="5" type="uint"/>
+               <bitfield name="HEIGHT" low="5" high="9" shr="5" type="uint"/>
+       </reg32>
+       <reg32 offset="0x0c01" name="VSC_SIZE_ADDRESS"/>
+       <reg32 offset="0x0c02" name="VSC_SIZE_ADDRESS2"/>
+       <reg32 offset="0x0c03" name="VSC_DEBUG_ECO_CONTROL"/>
+       <array offset="0x0c08" name="VSC_PIPE_CONFIG" stride="1" length="8">
+               <reg32 offset="0x0" name="REG">
+                       <doc>
+                               Configures the mapping between VSC_PIPE buffer and
+                               bin, X/Y specify the bin index in the horiz/vert
+                               direction (0,0 is upper left, 0,1 is leftmost bin
+                               on second row, and so on).  W/H specify the number
+                               of bins assigned to this VSC_PIPE in the horiz/vert
+                               dimension.
+                       </doc>
+                       <bitfield name="X" low="0" high="9" type="uint"/>
+                       <bitfield name="Y" low="10" high="19" type="uint"/>
+                       <bitfield name="W" low="20" high="23" type="uint"/>
+                       <bitfield name="H" low="24" high="27" type="uint"/>
+               </reg32>
+       </array>
+       <array offset="0x0c10" name="VSC_PIPE_DATA_ADDRESS" stride="1" length="8">
+               <reg32 offset="0x0" name="REG"/>
+       </array>
+       <array offset="0x0c18" name="VSC_PIPE_DATA_LENGTH" stride="1" length="8">
+               <reg32 offset="0x0" name="REG"/>
+       </array>
+       <reg32 offset="0x0c41" name="VSC_PIPE_PARTIAL_POSN_1"/>
+       <reg32 offset="0x0c50" name="VSC_PERFCTR_VSC_SEL_0" type="a4xx_vsc_perfcounter_select"/>
+       <reg32 offset="0x0c51" name="VSC_PERFCTR_VSC_SEL_1" type="a4xx_vsc_perfcounter_select"/>
+
+       <!-- VFD registers -->
+       <reg32 offset="0x0e40" name="VFD_DEBUG_CONTROL"/>
+       <reg32 offset="0x0e43" name="VFD_PERFCTR_VFD_SEL_0" type="a4xx_vfd_perfcounter_select"/>
+       <reg32 offset="0x0e44" name="VFD_PERFCTR_VFD_SEL_1" type="a4xx_vfd_perfcounter_select"/>
+       <reg32 offset="0x0e45" name="VFD_PERFCTR_VFD_SEL_2" type="a4xx_vfd_perfcounter_select"/>
+       <reg32 offset="0x0e46" name="VFD_PERFCTR_VFD_SEL_3" type="a4xx_vfd_perfcounter_select"/>
+       <reg32 offset="0x0e47" name="VFD_PERFCTR_VFD_SEL_4" type="a4xx_vfd_perfcounter_select"/>
+       <reg32 offset="0x0e48" name="VFD_PERFCTR_VFD_SEL_5" type="a4xx_vfd_perfcounter_select"/>
+       <reg32 offset="0x0e49" name="VFD_PERFCTR_VFD_SEL_6" type="a4xx_vfd_perfcounter_select"/>
+       <reg32 offset="0x0e4a" name="VFD_PERFCTR_VFD_SEL_7" type="a4xx_vfd_perfcounter_select"/>
+       <reg32 offset="0x21d0" name="VGT_CL_INITIATOR"/>
+       <reg32 offset="0x21d9" name="VGT_EVENT_INITIATOR"/>
+       <reg32 offset="0x2200" name="VFD_CONTROL_0">
+               <doc>
+                       TOTALATTRTOVS is # of attributes to vertex shader, in register
+                       slots (ie. vec4+vec3 -> 7)
+               </doc>
+               <bitfield name="TOTALATTRTOVS" low="0" high="7" type="uint"/>
+               <doc>
+               BYPASSATTROVS seems to count varyings that are just directly
+               assigned from attributes (ie, "vFoo = aFoo;")
+               </doc>
+               <bitfield name="BYPASSATTROVS" low="9" high="16" type="uint"/>
+               <doc>STRMDECINSTRCNT is # of VFD_DECODE_INSTR registers valid</doc>
+               <bitfield name="STRMDECINSTRCNT" low="20" high="25" type="uint"/>
+               <doc>STRMFETCHINSTRCNT is # of VFD_FETCH_INSTR registers valid</doc>
+               <bitfield name="STRMFETCHINSTRCNT" low="26" high="31" type="uint"/>
+       </reg32>
+       <reg32 offset="0x2201" name="VFD_CONTROL_1">
+               <doc>MAXSTORAGE could be # of attributes/vbo's</doc>
+               <bitfield name="MAXSTORAGE" low="0" high="15" type="uint"/>
+               <bitfield name="REGID4VTX" low="16" high="23" type="a3xx_regid"/>
+               <bitfield name="REGID4INST" low="24" high="31" type="a3xx_regid"/>
+       </reg32>
+       <reg32 offset="0x2202" name="VFD_CONTROL_2"/>
+       <reg32 offset="0x2203" name="VFD_CONTROL_3">
+               <bitfield name="REGID_VTXCNT" low="8" high="15" type="a3xx_regid"/>
+               <bitfield name="REGID_TESSX" low="16" high="23" type="a3xx_regid"/>
+               <bitfield name="REGID_TESSY" low="24" high="31" type="a3xx_regid"/>
+       </reg32>
+       <reg32 offset="0x2204" name="VFD_CONTROL_4"/>
+       <reg32 offset="0x2208" name="VFD_INDEX_OFFSET"/>
+       <array offset="0x220a" name="VFD_FETCH" stride="4" length="32">
+               <reg32 offset="0x0" name="INSTR_0">
+                       <bitfield name="FETCHSIZE" low="0" high="6" type="uint"/>
+                       <bitfield name="BUFSTRIDE" low="7" high="16" type="uint"/>
+                       <bitfield name="SWITCHNEXT" pos="19" type="boolean"/>
+                       <bitfield name="INSTANCED" pos="20" type="boolean"/>
+               </reg32>
+               <reg32 offset="0x1" name="INSTR_1"/>
+               <reg32 offset="0x2" name="INSTR_2">
+                       <bitfield name="SIZE" low="0" high="31"/>
+               </reg32>
+               <reg32 offset="0x3" name="INSTR_3">
+                       <!-- might well be bigger.. -->
+                       <bitfield name="STEPRATE" low="0" high="8" type="uint"/>
+               </reg32>
+       </array>
+       <array offset="0x228a" name="VFD_DECODE" stride="1" length="32">
+               <reg32 offset="0x0" name="INSTR">
+                       <bitfield name="WRITEMASK" low="0" high="3" type="hex"/>
+                       <!-- not sure if this is a bit flag and another flag above it, or?? -->
+                       <bitfield name="CONSTFILL" pos="4" type="boolean"/>
+                       <bitfield name="FORMAT" low="6" high="11" type="a4xx_vtx_fmt"/>
+                       <bitfield name="REGID" low="12" high="19" type="a3xx_regid"/>
+                       <bitfield name="INT" pos="20" type="boolean"/>
+                       <doc>SHIFTCNT appears to be size, ie. FLOAT_32_32_32 is 12, and BYTE_8 is 1</doc>
+                       <bitfield name="SWAP" low="22" high="23" type="a3xx_color_swap"/>
+                       <bitfield name="SHIFTCNT" low="24" high="28" type="uint"/>
+                       <bitfield name="LASTCOMPVALID" pos="29" type="boolean"/>
+                       <bitfield name="SWITCHNEXT" pos="30" type="boolean"/>
+               </reg32>
+       </array>
+
+       <!-- TPL1 registers -->
+       <reg32 offset="0x0f00" name="TPL1_DEBUG_ECO_CONTROL"/>
+       <!-- always 0000003a: -->
+       <reg32 offset="0x0f03" name="TPL1_TP_MODE_CONTROL"/>
+       <reg32 offset="0x0f04" name="TPL1_PERFCTR_TP_SEL_0" type="a4xx_tp_perfcounter_select"/>
+       <reg32 offset="0x0f05" name="TPL1_PERFCTR_TP_SEL_1" type="a4xx_tp_perfcounter_select"/>
+       <reg32 offset="0x0f06" name="TPL1_PERFCTR_TP_SEL_2" type="a4xx_tp_perfcounter_select"/>
+       <reg32 offset="0x0f07" name="TPL1_PERFCTR_TP_SEL_3" type="a4xx_tp_perfcounter_select"/>
+       <reg32 offset="0x0f08" name="TPL1_PERFCTR_TP_SEL_4" type="a4xx_tp_perfcounter_select"/>
+       <reg32 offset="0x0f09" name="TPL1_PERFCTR_TP_SEL_5" type="a4xx_tp_perfcounter_select"/>
+       <reg32 offset="0x0f0a" name="TPL1_PERFCTR_TP_SEL_6" type="a4xx_tp_perfcounter_select"/>
+       <reg32 offset="0x0f0b" name="TPL1_PERFCTR_TP_SEL_7" type="a4xx_tp_perfcounter_select"/>
+       <reg32 offset="0x2380" name="TPL1_TP_TEX_OFFSET"/>
+       <reg32 offset="0x2381" name="TPL1_TP_TEX_COUNT">
+               <bitfield name="VS" low="0" high="7" type="uint"/>
+               <bitfield name="HS" low="8" high="15" type="uint"/>
+               <bitfield name="DS" low="16" high="23" type="uint"/>
+               <bitfield name="GS" low="24" high="31" type="uint"/>
+       </reg32>
+       <reg32 offset="0x2384" name="TPL1_TP_VS_BORDER_COLOR_BASE_ADDR"/>
+       <reg32 offset="0x2387" name="TPL1_TP_HS_BORDER_COLOR_BASE_ADDR"/>
+       <reg32 offset="0x238a" name="TPL1_TP_DS_BORDER_COLOR_BASE_ADDR"/>
+       <reg32 offset="0x238d" name="TPL1_TP_GS_BORDER_COLOR_BASE_ADDR"/>
+       <reg32 offset="0x23a0" name="TPL1_TP_FS_TEX_COUNT"/>
+       <reg32 offset="0x23a1" name="TPL1_TP_FS_BORDER_COLOR_BASE_ADDR"/>
+       <reg32 offset="0x23a4" name="TPL1_TP_CS_BORDER_COLOR_BASE_ADDR"/>
+       <reg32 offset="0x23a5" name="TPL1_TP_CS_SAMPLER_BASE_ADDR"/>
+       <reg32 offset="0x23a6" name="TPL1_TP_CS_TEXMEMOBJ_BASE_ADDR"/>
+
+       <!-- GRAS registers -->
+       <reg32 offset="0x0c80" name="GRAS_TSE_STATUS"/>
+       <reg32 offset="0x0c81" name="GRAS_DEBUG_ECO_CONTROL"/>
+       <reg32 offset="0x0c88" name="GRAS_PERFCTR_TSE_SEL_0" type="a4xx_gras_tse_perfcounter_select"/>
+       <reg32 offset="0x0c89" name="GRAS_PERFCTR_TSE_SEL_1" type="a4xx_gras_tse_perfcounter_select"/>
+       <reg32 offset="0x0c8a" name="GRAS_PERFCTR_TSE_SEL_2" type="a4xx_gras_tse_perfcounter_select"/>
+       <reg32 offset="0x0c8b" name="GRAS_PERFCTR_TSE_SEL_3" type="a4xx_gras_tse_perfcounter_select"/>
+       <reg32 offset="0x0c8c" name="GRAS_PERFCTR_RAS_SEL_0" type="a4xx_gras_ras_perfcounter_select"/>
+       <reg32 offset="0x0c8d" name="GRAS_PERFCTR_RAS_SEL_1" type="a4xx_gras_ras_perfcounter_select"/>
+       <reg32 offset="0x0c8e" name="GRAS_PERFCTR_RAS_SEL_2" type="a4xx_gras_ras_perfcounter_select"/>
+       <reg32 offset="0x0c8f" name="GRAS_PERFCTR_RAS_SEL_3" type="a4xx_gras_ras_perfcounter_select"/>
+       <reg32 offset="0x2000" name="GRAS_CL_CLIP_CNTL">
+               <bitfield name="CLIP_DISABLE" pos="15" type="boolean"/>
+               <bitfield name="ZNEAR_CLIP_DISABLE" pos="16" type="boolean"/>
+               <bitfield name="ZFAR_CLIP_DISABLE" pos="17" type="boolean"/>
+               <bitfield name="ZERO_GB_SCALE_Z" pos="22" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x2003" name="GRAS_CNTL">
+               <bitfield name="IJ_PERSP" pos="0" type="boolean"/>
+               <bitfield name="IJ_LINEAR" pos="1" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x2004" name="GRAS_CL_GB_CLIP_ADJ">
+               <bitfield name="HORZ" low="0" high="9" type="uint"/>
+               <bitfield name="VERT" low="10" high="19" type="uint"/>
+       </reg32>
+       <reg32 offset="0x2008" name="GRAS_CL_VPORT_XOFFSET_0" type="float"/>
+       <reg32 offset="0x2009" name="GRAS_CL_VPORT_XSCALE_0" type="float"/>
+       <reg32 offset="0x200a" name="GRAS_CL_VPORT_YOFFSET_0" type="float"/>
+       <reg32 offset="0x200b" name="GRAS_CL_VPORT_YSCALE_0" type="float"/>
+       <reg32 offset="0x200c" name="GRAS_CL_VPORT_ZOFFSET_0" type="float"/>
+       <reg32 offset="0x200d" name="GRAS_CL_VPORT_ZSCALE_0" type="float"/>
+       <reg32 offset="0x2070" name="GRAS_SU_POINT_MINMAX">
+               <bitfield name="MIN" low="0" high="15" type="ufixed" radix="4"/>
+               <bitfield name="MAX" low="16" high="31" type="ufixed" radix="4"/>
+       </reg32>
+       <reg32 offset="0x2071" name="GRAS_SU_POINT_SIZE" type="fixed" radix="4"/>
+       <reg32 offset="0x2073" name="GRAS_ALPHA_CONTROL">
+               <bitfield name="ALPHA_TEST_ENABLE" pos="2" type="boolean"/>
+               <bitfield name="FORCE_FRAGZ_TO_FS" pos="3" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x2074" name="GRAS_SU_POLY_OFFSET_SCALE" type="float"/>
+       <reg32 offset="0x2075" name="GRAS_SU_POLY_OFFSET_OFFSET" type="float"/>
+       <reg32 offset="0x2076" name="GRAS_SU_POLY_OFFSET_CLAMP" type="float"/>
+       <reg32 offset="0x2077" name="GRAS_DEPTH_CONTROL">
+               <!-- guestimating that this is GRAS based on addr -->
+               <bitfield name="FORMAT" low="0" high="1" type="a4xx_depth_format"/>
+       </reg32>
+       <reg32 offset="0x2078" name="GRAS_SU_MODE_CONTROL">
+               <bitfield name="CULL_FRONT" pos="0" type="boolean"/>
+               <bitfield name="CULL_BACK" pos="1" type="boolean"/>
+               <bitfield name="FRONT_CW" pos="2" type="boolean"/>
+               <bitfield name="LINEHALFWIDTH" low="3" high="10" radix="2" type="fixed"/>
+               <bitfield name="POLY_OFFSET" pos="11" type="boolean"/>
+               <bitfield name="MSAA_ENABLE" pos="13" type="boolean"/>
+               <!-- bit20 set whenever RENDER_MODE = RB_RENDERING_PASS -->
+               <bitfield name="RENDERING_PASS" pos="20" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x207b" name="GRAS_SC_CONTROL">
+               <!-- complete wild-ass-guess for sizes of these bitfields.. -->
+               <bitfield name="RENDER_MODE" low="2" high="3" type="a3xx_render_mode"/>
+               <bitfield name="MSAA_SAMPLES" low="7" high="9" type="uint"/>
+               <bitfield name="MSAA_DISABLE" pos="11" type="boolean"/>
+               <bitfield name="RASTER_MODE" low="12" high="15"/>
+       </reg32>
+       <reg32 offset="0x207c" name="GRAS_SC_SCREEN_SCISSOR_TL" type="adreno_reg_xy"/>
+       <reg32 offset="0x207d" name="GRAS_SC_SCREEN_SCISSOR_BR" type="adreno_reg_xy"/>
+       <reg32 offset="0x209c" name="GRAS_SC_WINDOW_SCISSOR_BR" type="adreno_reg_xy"/>
+       <reg32 offset="0x209d" name="GRAS_SC_WINDOW_SCISSOR_TL" type="adreno_reg_xy"/>
+       <reg32 offset="0x209e" name="GRAS_SC_EXTENT_WINDOW_BR" type="adreno_reg_xy"/>
+       <reg32 offset="0x209f" name="GRAS_SC_EXTENT_WINDOW_TL" type="adreno_reg_xy"/>
+
+       <!-- UCHE registers -->
+       <reg32 offset="0x0e80" name="UCHE_CACHE_MODE_CONTROL"/>
+       <reg32 offset="0x0e83" name="UCHE_TRAP_BASE_LO"/>
+       <reg32 offset="0x0e84" name="UCHE_TRAP_BASE_HI"/>
+       <reg32 offset="0x0e88" name="UCHE_CACHE_STATUS"/>
+       <reg32 offset="0x0e8a" name="UCHE_INVALIDATE0"/>
+       <reg32 offset="0x0e8b" name="UCHE_INVALIDATE1"/>
+       <reg32 offset="0x0e8c" name="UCHE_CACHE_WAYS_VFD"/>
+       <reg32 offset="0x0e8e" name="UCHE_PERFCTR_UCHE_SEL_0" type="a4xx_uche_perfcounter_select"/>
+       <reg32 offset="0x0e8f" name="UCHE_PERFCTR_UCHE_SEL_1" type="a4xx_uche_perfcounter_select"/>
+       <reg32 offset="0x0e90" name="UCHE_PERFCTR_UCHE_SEL_2" type="a4xx_uche_perfcounter_select"/>
+       <reg32 offset="0x0e91" name="UCHE_PERFCTR_UCHE_SEL_3" type="a4xx_uche_perfcounter_select"/>
+       <reg32 offset="0x0e92" name="UCHE_PERFCTR_UCHE_SEL_4" type="a4xx_uche_perfcounter_select"/>
+       <reg32 offset="0x0e93" name="UCHE_PERFCTR_UCHE_SEL_5" type="a4xx_uche_perfcounter_select"/>
+       <reg32 offset="0x0e94" name="UCHE_PERFCTR_UCHE_SEL_6" type="a4xx_uche_perfcounter_select"/>
+       <reg32 offset="0x0e95" name="UCHE_PERFCTR_UCHE_SEL_7" type="a4xx_uche_perfcounter_select"/>
+
+       <!-- HLSQ registers -->
+       <reg32 offset="0x0e00" name="HLSQ_TIMEOUT_THRESHOLD"/>
+       <reg32 offset="0x0e04" name="HLSQ_DEBUG_ECO_CONTROL"/>
+       <!-- always 00000000: -->
+       <reg32 offset="0x0e05" name="HLSQ_MODE_CONTROL"/>
+       <reg32 offset="0x0e0e" name="HLSQ_PERF_PIPE_MASK"/>
+       <reg32 offset="0x0e06" name="HLSQ_PERFCTR_HLSQ_SEL_0" type="a4xx_hlsq_perfcounter_select"/>
+       <reg32 offset="0x0e07" name="HLSQ_PERFCTR_HLSQ_SEL_1" type="a4xx_hlsq_perfcounter_select"/>
+       <reg32 offset="0x0e08" name="HLSQ_PERFCTR_HLSQ_SEL_2" type="a4xx_hlsq_perfcounter_select"/>
+       <reg32 offset="0x0e09" name="HLSQ_PERFCTR_HLSQ_SEL_3" type="a4xx_hlsq_perfcounter_select"/>
+       <reg32 offset="0x0e0a" name="HLSQ_PERFCTR_HLSQ_SEL_4" type="a4xx_hlsq_perfcounter_select"/>
+       <reg32 offset="0x0e0b" name="HLSQ_PERFCTR_HLSQ_SEL_5" type="a4xx_hlsq_perfcounter_select"/>
+       <reg32 offset="0x0e0c" name="HLSQ_PERFCTR_HLSQ_SEL_6" type="a4xx_hlsq_perfcounter_select"/>
+       <reg32 offset="0x0e0d" name="HLSQ_PERFCTR_HLSQ_SEL_7" type="a4xx_hlsq_perfcounter_select"/>
+       <reg32 offset="0x23c0" name="HLSQ_CONTROL_0_REG">
+               <!-- I guess same as a3xx, but so far only seen 08000050 -->
+               <bitfield name="FSTHREADSIZE" pos="4" type="a3xx_threadsize"/>
+               <bitfield name="FSSUPERTHREADENABLE" pos="6" type="boolean"/>
+               <bitfield name="SPSHADERRESTART" pos="9" type="boolean"/>
+               <bitfield name="RESERVED2" pos="10" type="boolean"/>
+               <bitfield name="CHUNKDISABLE" pos="26" type="boolean"/>
+               <bitfield name="CONSTMODE" pos="27" type="uint"/>
+               <bitfield name="LAZYUPDATEDISABLE" pos="28" type="boolean"/>
+               <bitfield name="SPCONSTFULLUPDATE" pos="29" type="boolean"/>
+               <bitfield name="TPFULLUPDATE" pos="30" type="boolean"/>
+               <bitfield name="SINGLECONTEXT" pos="31" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x23c1" name="HLSQ_CONTROL_1_REG">
+               <bitfield name="VSTHREADSIZE" pos="6" type="a3xx_threadsize"/>
+               <bitfield name="VSSUPERTHREADENABLE" pos="8" type="boolean"/>
+               <bitfield name="RESERVED1" pos="9" type="boolean"/>
+               <bitfield name="COORDREGID" low="16" high="23" type="a3xx_regid"/>
+               <!-- set if gl_FragCoord.[zw] used in frag shader: -->
+               <bitfield name="ZWCOORDREGID" low="24" high="31" type="a3xx_regid"/>
+       </reg32>
+       <reg32 offset="0x23c2" name="HLSQ_CONTROL_2_REG">
+               <bitfield name="PRIMALLOCTHRESHOLD" low="26" high="31" type="uint"/>
+               <bitfield name="FACEREGID" low="2" high="9" type="a3xx_regid"/>
+               <bitfield name="SAMPLEID_REGID" low="10" high="17" type="a3xx_regid"/>
+               <bitfield name="SAMPLEMASK_REGID" low="18" high="25" type="a3xx_regid"/>
+       </reg32>
+       <reg32 offset="0x23c3" name="HLSQ_CONTROL_3_REG">
+               <!-- register loaded with position (bary.f) -->
+               <bitfield name="IJ_PERSP_PIXEL" low="0" high="7" type="a3xx_regid"/>
+               <bitfield name="IJ_LINEAR_PIXEL" low="8" high="15" type="a3xx_regid"/>
+               <bitfield name="IJ_PERSP_CENTROID" low="16" high="23" type="a3xx_regid"/>
+               <bitfield name="IJ_LINEAR_CENTROID" low="24" high="31" type="a3xx_regid"/>
+       </reg32>
+       <!-- 0x23c4 3 regids, lowest one goes to 0 when *not* per-sample shading -->
+       <reg32 offset="0x23c4" name="HLSQ_CONTROL_4_REG">
+               <bitfield name="IJ_PERSP_SAMPLE" low="0" high="7" type="a3xx_regid"/>
+               <bitfield name="IJ_LINEAR_SAMPLE" low="8" high="15" type="a3xx_regid"/>
+       </reg32>
+
+       <bitset name="a4xx_xs_control_reg" inline="yes">
+               <bitfield name="CONSTLENGTH" low="0" high="7" type="uint"/>
+               <bitfield name="CONSTOBJECTOFFSET" low="8" high="14" type="uint"/>
+               <bitfield name="SSBO_ENABLE" pos="15" type="boolean"/>
+               <bitfield name="ENABLED" pos="16" type="boolean"/>
+               <bitfield name="SHADEROBJOFFSET" low="17" high="23" type="uint"/>
+               <bitfield name="INSTRLENGTH" low="24" high="31" type="uint"/>
+       </bitset>
+       <reg32 offset="0x23c5" name="HLSQ_VS_CONTROL_REG" type="a4xx_xs_control_reg"/>
+       <reg32 offset="0x23c6" name="HLSQ_FS_CONTROL_REG" type="a4xx_xs_control_reg"/>
+       <reg32 offset="0x23c7" name="HLSQ_HS_CONTROL_REG" type="a4xx_xs_control_reg"/>
+       <reg32 offset="0x23c8" name="HLSQ_DS_CONTROL_REG" type="a4xx_xs_control_reg"/>
+       <reg32 offset="0x23c9" name="HLSQ_GS_CONTROL_REG" type="a4xx_xs_control_reg"/>
+       <reg32 offset="0x23ca" name="HLSQ_CS_CONTROL_REG" type="a4xx_xs_control_reg"/>
+       <reg32 offset="0x23cd" name="HLSQ_CL_NDRANGE_0">
+               <bitfield name="KERNELDIM" low="0" high="1" type="uint"/>
+               <!-- localsize is value minus one: -->
+               <bitfield name="LOCALSIZEX" low="2" high="11" type="uint"/>
+               <bitfield name="LOCALSIZEY" low="12" high="21" type="uint"/>
+               <bitfield name="LOCALSIZEZ" low="22" high="31" type="uint"/>
+       </reg32>
+       <reg32 offset="0x23ce" name="HLSQ_CL_NDRANGE_1">
+               <bitfield name="SIZE_X" low="0" high="31" type="uint"/>
+       </reg32>
+       <reg32 offset="0x23cf" name="HLSQ_CL_NDRANGE_2"/>
+       <reg32 offset="0x23d0" name="HLSQ_CL_NDRANGE_3">
+               <bitfield name="SIZE_Y" low="0" high="31" type="uint"/>
+       </reg32>
+       <reg32 offset="0x23d1" name="HLSQ_CL_NDRANGE_4"/>
+       <reg32 offset="0x23d2" name="HLSQ_CL_NDRANGE_5">
+               <bitfield name="SIZE_Z" low="0" high="31" type="uint"/>
+       </reg32>
+       <reg32 offset="0x23d3" name="HLSQ_CL_NDRANGE_6"/>
+       <reg32 offset="0x23d4" name="HLSQ_CL_CONTROL_0">
+               <bitfield name="WGIDCONSTID" low="0" high="7" type="a3xx_regid"/>
+               <bitfield name="LOCALIDREGID" low="24" high="31" type="a3xx_regid"/>
+       </reg32>
+       <reg32 offset="0x23d5" name="HLSQ_CL_CONTROL_1"/>
+       <reg32 offset="0x23d6" name="HLSQ_CL_KERNEL_CONST"/>
+       <reg32 offset="0x23d7" name="HLSQ_CL_KERNEL_GROUP_X"/>
+       <reg32 offset="0x23d8" name="HLSQ_CL_KERNEL_GROUP_Y"/>
+       <reg32 offset="0x23d9" name="HLSQ_CL_KERNEL_GROUP_Z"/>
+       <reg32 offset="0x23da" name="HLSQ_CL_WG_OFFSET"/>
+       <reg32 offset="0x23db" name="HLSQ_UPDATE_CONTROL"/>
+
+       <!-- PC registers -->
+       <reg32 offset="0x0d00" name="PC_BINNING_COMMAND">
+               <bitfield name="BINNING_ENABLE" pos="0" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x0d08" name="PC_TESSFACTOR_ADDR"/>
+       <reg32 offset="0x0d0c" name="PC_DRAWCALL_SETUP_OVERRIDE"/>
+       <reg32 offset="0x0d10" name="PC_PERFCTR_PC_SEL_0" type="a4xx_pc_perfcounter_select"/>
+       <reg32 offset="0x0d11" name="PC_PERFCTR_PC_SEL_1" type="a4xx_pc_perfcounter_select"/>
+       <reg32 offset="0x0d12" name="PC_PERFCTR_PC_SEL_2" type="a4xx_pc_perfcounter_select"/>
+       <reg32 offset="0x0d13" name="PC_PERFCTR_PC_SEL_3" type="a4xx_pc_perfcounter_select"/>
+       <reg32 offset="0x0d14" name="PC_PERFCTR_PC_SEL_4" type="a4xx_pc_perfcounter_select"/>
+       <reg32 offset="0x0d15" name="PC_PERFCTR_PC_SEL_5" type="a4xx_pc_perfcounter_select"/>
+       <reg32 offset="0x0d16" name="PC_PERFCTR_PC_SEL_6" type="a4xx_pc_perfcounter_select"/>
+       <reg32 offset="0x0d17" name="PC_PERFCTR_PC_SEL_7" type="a4xx_pc_perfcounter_select"/>
+       <reg32 offset="0x21c0" name="PC_BIN_BASE"/>
+       <reg32 offset="0x21c2" name="PC_VSTREAM_CONTROL">
+               <doc>SIZE is current pipe width * height (in tiles)</doc>
+               <bitfield name="SIZE" low="16" high="21" type="uint"/>
+               <doc>
+                       N is some sort of slot # between 0..(SIZE-1).  In case
+                       multiple tiles use same pipe, each tile gets unique slot #
+               </doc>
+               <bitfield name="N" low="22" high="26" type="uint"/>
+       </reg32>
+       <reg32 offset="0x21c4" name="PC_PRIM_VTX_CNTL">
+               <!-- bit0 set if there is >= 1 varying (actually used by FS) -->
+               <bitfield name="VAROUT" low="0" high="3" type="uint">
+                       <doc>in groups of 4x vec4, blob only uses values
+                       0, 1, 2, 4, 6, 8</doc>
+               </bitfield>
+               <bitfield name="PRIMITIVE_RESTART" pos="20" type="boolean"/>
+               <bitfield name="PROVOKING_VTX_LAST" pos="25" type="boolean"/>
+               <!-- PSIZE bit set if gl_PointSize written: -->
+               <bitfield name="PSIZE" pos="26" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x21c5" name="PC_PRIM_VTX_CNTL2">
+               <bitfield name="POLYMODE_FRONT_PTYPE" low="0" high="2" type="adreno_pa_su_sc_draw"/>
+               <bitfield name="POLYMODE_BACK_PTYPE" low="3" high="5" type="adreno_pa_su_sc_draw"/>
+               <bitfield name="POLYMODE_ENABLE" pos="6" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x21c6" name="PC_RESTART_INDEX"/>
+       <reg32 offset="0x21e5" name="PC_GS_PARAM">
+               <bitfield name="MAX_VERTICES" low="0" high="9" type="uint"/><!-- +1, i.e. max is 1024 -->
+               <bitfield name="INVOCATIONS" low="11" high="15" type="uint"/><!-- +1, i.e. max is 32 -->
+               <bitfield name="PRIMTYPE" low="23" high="24" type="adreno_pa_su_sc_draw"/>
+               <bitfield name="LAYER" pos="31" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x21e7" name="PC_HS_PARAM">
+               <bitfield name="VERTICES_OUT" low="0" high="5" type="uint"/>
+               <bitfield name="SPACING" low="21" high="22" type="a4xx_tess_spacing"/>
+               <bitfield name="CW" pos="23" type="boolean"/>
+               <bitfield name="CONNECTED" pos="24" type="boolean"/>
+       </reg32>
+
+       <!-- VBIF registers -->
+       <reg32 offset="0x3000" name="VBIF_VERSION"/>
+       <reg32 offset="0x3001" name="VBIF_CLKON">
+               <bitfield name="FORCE_ON_TESTBUS" pos="0" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x301c" name="VBIF_ABIT_SORT"/>
+       <reg32 offset="0x301d" name="VBIF_ABIT_SORT_CONF"/>
+       <reg32 offset="0x302a" name="VBIF_GATE_OFF_WRREQ_EN"/>
+       <reg32 offset="0x302c" name="VBIF_IN_RD_LIM_CONF0"/>
+       <reg32 offset="0x302d" name="VBIF_IN_RD_LIM_CONF1"/>
+       <reg32 offset="0x3030" name="VBIF_IN_WR_LIM_CONF0"/>
+       <reg32 offset="0x3031" name="VBIF_IN_WR_LIM_CONF1"/>
+       <reg32 offset="0x3049" name="VBIF_ROUND_ROBIN_QOS_ARB"/>
+       <reg32 offset="0x30c0" name="VBIF_PERF_CNT_EN0"/>
+       <reg32 offset="0x30c1" name="VBIF_PERF_CNT_EN1"/>
+       <reg32 offset="0x30c2" name="VBIF_PERF_CNT_EN2"/>
+       <reg32 offset="0x30c3" name="VBIF_PERF_CNT_EN3"/>
+       <reg32 offset="0x30d0" name="VBIF_PERF_CNT_SEL0" type="a4xx_vbif_perfcounter_select"/>
+       <reg32 offset="0x30d1" name="VBIF_PERF_CNT_SEL1" type="a4xx_vbif_perfcounter_select"/>
+       <reg32 offset="0x30d2" name="VBIF_PERF_CNT_SEL2" type="a4xx_vbif_perfcounter_select"/>
+       <reg32 offset="0x30d3" name="VBIF_PERF_CNT_SEL3" type="a4xx_vbif_perfcounter_select"/>
+       <reg32 offset="0x30d8" name="VBIF_PERF_CNT_LOW0"/>
+       <reg32 offset="0x30d9" name="VBIF_PERF_CNT_LOW1"/>
+       <reg32 offset="0x30da" name="VBIF_PERF_CNT_LOW2"/>
+       <reg32 offset="0x30db" name="VBIF_PERF_CNT_LOW3"/>
+       <reg32 offset="0x30e0" name="VBIF_PERF_CNT_HIGH0"/>
+       <reg32 offset="0x30e1" name="VBIF_PERF_CNT_HIGH1"/>
+       <reg32 offset="0x30e2" name="VBIF_PERF_CNT_HIGH2"/>
+       <reg32 offset="0x30e3" name="VBIF_PERF_CNT_HIGH3"/>
+       <reg32 offset="0x3100" name="VBIF_PERF_PWR_CNT_EN0"/>
+       <reg32 offset="0x3101" name="VBIF_PERF_PWR_CNT_EN1"/>
+       <reg32 offset="0x3102" name="VBIF_PERF_PWR_CNT_EN2"/>
+
+       <!--
+       Unknown registers:
+       (mostly related to DX11 features not used yet, I guess?)
+       -->
+
+       <!-- always 00000006: -->
+       <reg32 offset="0x0cc5" name="UNKNOWN_0CC5"/>
+
+       <!-- always 00000000: -->
+       <reg32 offset="0x0cc6" name="UNKNOWN_0CC6"/>
+
+       <!-- always 00000001: -->
+       <reg32 offset="0x0d01" name="UNKNOWN_0D01"/>
+
+       <!-- always 00000000: -->
+       <reg32 offset="0x0e42" name="UNKNOWN_0E42"/>
+
+       <!-- always 00040000: -->
+       <reg32 offset="0x0ec2" name="UNKNOWN_0EC2"/>
+
+       <!-- always 00000000: -->
+       <reg32 offset="0x2001" name="UNKNOWN_2001"/>
+
+       <!-- always 00000000: -->
+       <reg32 offset="0x209b" name="UNKNOWN_209B"/>
+
+       <!-- always 00000000: -->
+       <reg32 offset="0x20ef" name="UNKNOWN_20EF"/>
+
+       <!-- always 00000000: -->
+       <reg32 offset="0x2152" name="UNKNOWN_2152"/>
+
+       <!-- always 00000000: -->
+       <reg32 offset="0x2153" name="UNKNOWN_2153"/>
+
+       <!-- always 00000000: -->
+       <reg32 offset="0x2154" name="UNKNOWN_2154"/>
+
+       <!-- always 00000000: -->
+       <reg32 offset="0x2155" name="UNKNOWN_2155"/>
+
+       <!-- always 00000000: -->
+       <reg32 offset="0x2156" name="UNKNOWN_2156"/>
+
+       <!-- always 00000000: -->
+       <reg32 offset="0x2157" name="UNKNOWN_2157"/>
+
+       <!-- always 0000000b: -->
+       <reg32 offset="0x21c3" name="UNKNOWN_21C3"/>
+
+       <!-- always 00000001: -->
+       <reg32 offset="0x21e6" name="UNKNOWN_21E6"/>
+
+       <!-- always 00000000: -->
+       <reg32 offset="0x2209" name="UNKNOWN_2209"/>
+
+       <!-- always 00000000: -->
+       <reg32 offset="0x22d7" name="UNKNOWN_22D7"/>
+
+        <!-- always 00fcfc00: -->
+        <reg32 offset="0x2352" name="UNKNOWN_2352"/>
+
+</domain>
+
+
+<domain name="A4XX_TEX_SAMP" width="32">
+       <doc>Texture sampler dwords</doc>
+       <enum name="a4xx_tex_filter">
+               <value name="A4XX_TEX_NEAREST" value="0"/>
+               <value name="A4XX_TEX_LINEAR" value="1"/>
+               <value name="A4XX_TEX_ANISO" value="2"/>
+       </enum>
+       <enum name="a4xx_tex_clamp">
+               <value name="A4XX_TEX_REPEAT" value="0"/>
+               <value name="A4XX_TEX_CLAMP_TO_EDGE" value="1"/>
+               <value name="A4XX_TEX_MIRROR_REPEAT" value="2"/>
+               <value name="A4XX_TEX_CLAMP_TO_BORDER" value="3"/>
+               <value name="A4XX_TEX_MIRROR_CLAMP" value="4"/>
+       </enum>
+       <enum name="a4xx_tex_aniso">
+               <value name="A4XX_TEX_ANISO_1" value="0"/>
+               <value name="A4XX_TEX_ANISO_2" value="1"/>
+               <value name="A4XX_TEX_ANISO_4" value="2"/>
+               <value name="A4XX_TEX_ANISO_8" value="3"/>
+               <value name="A4XX_TEX_ANISO_16" value="4"/>
+       </enum>
+       <reg32 offset="0" name="0">
+               <bitfield name="MIPFILTER_LINEAR_NEAR" pos="0" type="boolean"/>
+               <bitfield name="XY_MAG" low="1" high="2" type="a4xx_tex_filter"/>
+               <bitfield name="XY_MIN" low="3" high="4" type="a4xx_tex_filter"/>
+               <bitfield name="WRAP_S" low="5" high="7" type="a4xx_tex_clamp"/>
+               <bitfield name="WRAP_T" low="8" high="10" type="a4xx_tex_clamp"/>
+               <bitfield name="WRAP_R" low="11" high="13" type="a4xx_tex_clamp"/>
+               <bitfield name="ANISO" low="14" high="16" type="a4xx_tex_aniso"/>
+               <bitfield name="LOD_BIAS" low="19" high="31" type="fixed" radix="8"/><!-- no idea how many bits for real -->
+       </reg32>
+       <reg32 offset="1" name="1">
+               <bitfield name="COMPARE_FUNC" low="1" high="3" type="adreno_compare_func"/>
+               <bitfield name="CUBEMAPSEAMLESSFILTOFF" pos="4" type="boolean"/>
+               <bitfield name="UNNORM_COORDS" pos="5" type="boolean"/>
+               <bitfield name="MIPFILTER_LINEAR_FAR" pos="6" type="boolean"/>
+               <bitfield name="MAX_LOD" low="8" high="19" type="ufixed" radix="8"/>
+               <bitfield name="MIN_LOD" low="20" high="31" type="ufixed" radix="8"/>
+       </reg32>
+</domain>
+
+<domain name="A4XX_TEX_CONST" width="32">
+       <doc>Texture constant dwords</doc>
+       <enum name="a4xx_tex_swiz">
+               <!-- same as a2xx? -->
+               <value name="A4XX_TEX_X" value="0"/>
+               <value name="A4XX_TEX_Y" value="1"/>
+               <value name="A4XX_TEX_Z" value="2"/>
+               <value name="A4XX_TEX_W" value="3"/>
+               <value name="A4XX_TEX_ZERO" value="4"/>
+               <value name="A4XX_TEX_ONE" value="5"/>
+       </enum>
+       <enum name="a4xx_tex_type">
+               <value name="A4XX_TEX_1D" value="0"/>
+               <value name="A4XX_TEX_2D" value="1"/>
+               <value name="A4XX_TEX_CUBE" value="2"/>
+               <value name="A4XX_TEX_3D" value="3"/>
+       </enum>
+       <reg32 offset="0" name="0">
+               <bitfield name="TILED" pos="0" type="boolean"/>
+               <bitfield name="SRGB" pos="2" type="boolean"/>
+               <bitfield name="SWIZ_X" low="4" high="6" type="a4xx_tex_swiz"/>
+               <bitfield name="SWIZ_Y" low="7" high="9" type="a4xx_tex_swiz"/>
+               <bitfield name="SWIZ_Z" low="10" high="12" type="a4xx_tex_swiz"/>
+               <bitfield name="SWIZ_W" low="13" high="15" type="a4xx_tex_swiz"/>
+               <bitfield name="MIPLVLS" low="16" high="19" type="uint"/>
+               <bitfield name="FMT" low="22" high="28" type="a4xx_tex_fmt"/>
+               <bitfield name="TYPE" low="29" high="30" type="a4xx_tex_type"/>
+       </reg32>
+       <reg32 offset="1" name="1">
+               <bitfield name="HEIGHT" low="0" high="14" type="uint"/>
+               <bitfield name="WIDTH" low="15" high="29" type="uint"/>
+       </reg32>
+       <reg32 offset="2" name="2">
+               <!-- minimum pitch (for mipmap levels): log2(pitchalign / 32) -->
+               <bitfield name="PITCHALIGN" low="0" high="3" type="uint"/>
+               <doc>Pitch in bytes (so actually stride)</doc>
+               <bitfield name="PITCH" low="9" high="29" type="uint"/>
+               <bitfield name="SWAP" low="30" high="31" type="a3xx_color_swap"/>
+       </reg32>
+       <reg32 offset="3" name="3">
+               <bitfield name="LAYERSZ" low="0" high="13" shr="12" type="uint"/>
+               <bitfield name="DEPTH" low="18" high="30" type="uint"/>
+       </reg32>
+       <reg32 offset="4" name="4">
+               <!--
+               like a3xx we seem to have two LAYERSZ's.. although this one
+               seems too small to be useful, and when it overflows blob just
+               sets it to zero..
+                -->
+               <bitfield name="LAYERSZ" low="0" high="3" shr="12" type="uint"/>
+               <bitfield name="BASE" low="5" high="31" shr="5"/>
+       </reg32>
+       <reg32 offset="5" name="5"/>
+       <reg32 offset="6" name="6"/>
+       <reg32 offset="7" name="7"/>
+</domain>
+
+<domain name="A4XX_SSBO_0" width="32">
+       <reg32 offset="0" name="0">
+               <bitfield name="BASE" low="5" high="31" shr="5"/>
+       </reg32>
+       <reg32 offset="1" name="1">
+               <doc>Pitch in bytes (so actually stride)</doc>
+               <bitfield name="PITCH" low="0" high="21" type="uint"/>
+       </reg32>
+       <reg32 offset="2" name="2">
+               <bitfield name="ARRAY_PITCH" low="12" high="25" shr="12" type="uint"/>
+       </reg32>
+       <reg32 offset="3" name="3">
+               <!-- bytes per pixel: -->
+               <bitfield name="CPP" low="0" high="5" type="uint"/>
+       </reg32>
+</domain>
+
+<domain name="A4XX_SSBO_1" width="32">
+       <reg32 offset="0" name="0">
+               <bitfield name="CPP" low="0" high="4" type="uint"/>
+               <bitfield name="FMT" low="8" high="15" type="a4xx_color_fmt"/>
+               <bitfield name="WIDTH" low="16" high="31" type="uint"/>
+       </reg32>
+       <reg32 offset="1" name="1">
+               <bitfield name="HEIGHT" low="0" high="15" type="uint"/>
+               <bitfield name="DEPTH" low="16" high="31" type="uint"/>
+       </reg32>
+</domain>
+
+</database>
diff --git a/src/freedreno/registers/adreno/a5xx.xml b/src/freedreno/registers/adreno/a5xx.xml
new file mode 100644 (file)
index 0000000..34ae474
--- /dev/null
@@ -0,0 +1,2996 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<database xmlns="http://nouveau.freedesktop.org/"
+xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+xsi:schemaLocation="http://nouveau.freedesktop.org/ rules-ng.xsd">
+<import file="freedreno_copyright.xml"/>
+<import file="adreno/adreno_common.xml"/>
+<import file="adreno/adreno_pm4.xml"/>
+
+<enum name="a5xx_color_fmt">
+       <value value="0x02" name="RB5_A8_UNORM"/>
+       <value value="0x03" name="RB5_R8_UNORM"/>
+       <value value="0x04" name="RB5_R8_SNORM"/>
+       <value value="0x05" name="RB5_R8_UINT"/>
+       <value value="0x06" name="RB5_R8_SINT"/>
+       <value value="0x08" name="RB5_R4G4B4A4_UNORM"/>
+       <value value="0x0a" name="RB5_R5G5B5A1_UNORM"/>
+       <value value="0x0e" name="RB5_R5G6B5_UNORM"/>
+       <value value="0x0f" name="RB5_R8G8_UNORM"/>
+       <value value="0x10" name="RB5_R8G8_SNORM"/>
+       <value value="0x11" name="RB5_R8G8_UINT"/>
+       <value value="0x12" name="RB5_R8G8_SINT"/>
+       <value value="0x15" name="RB5_R16_UNORM"/>
+       <value value="0x16" name="RB5_R16_SNORM"/>
+       <value value="0x17" name="RB5_R16_FLOAT"/>
+       <value value="0x18" name="RB5_R16_UINT"/>
+       <value value="0x19" name="RB5_R16_SINT"/>
+       <value value="0x30" name="RB5_R8G8B8A8_UNORM"/>
+       <value value="0x31" name="RB5_R8G8B8_UNORM"/>
+       <value value="0x32" name="RB5_R8G8B8A8_SNORM"/>
+       <value value="0x33" name="RB5_R8G8B8A8_UINT"/>
+       <value value="0x34" name="RB5_R8G8B8A8_SINT"/>
+       <value value="0x37" name="RB5_R10G10B10A2_UNORM"/>  <!-- GL_RGB10_A2 -->
+       <value value="0x3a" name="RB5_R10G10B10A2_UINT"/>   <!-- GL_RGB10_A2UI -->
+       <value value="0x42" name="RB5_R11G11B10_FLOAT"/>    <!-- GL_R11F_G11F_B10F -->
+       <value value="0x43" name="RB5_R16G16_UNORM"/>
+       <value value="0x44" name="RB5_R16G16_SNORM"/>
+       <value value="0x45" name="RB5_R16G16_FLOAT"/>
+       <value value="0x46" name="RB5_R16G16_UINT"/>
+       <value value="0x47" name="RB5_R16G16_SINT"/>
+       <value value="0x4a" name="RB5_R32_FLOAT"/>
+       <value value="0x4b" name="RB5_R32_UINT"/>
+       <value value="0x4c" name="RB5_R32_SINT"/>
+       <value value="0x60" name="RB5_R16G16B16A16_UNORM"/>
+       <value value="0x61" name="RB5_R16G16B16A16_SNORM"/>
+       <value value="0x62" name="RB5_R16G16B16A16_FLOAT"/>
+       <value value="0x63" name="RB5_R16G16B16A16_UINT"/>
+       <value value="0x64" name="RB5_R16G16B16A16_SINT"/>
+       <value value="0x67" name="RB5_R32G32_FLOAT"/>
+       <value value="0x68" name="RB5_R32G32_UINT"/>
+       <value value="0x69" name="RB5_R32G32_SINT"/>
+       <value value="0x82" name="RB5_R32G32B32A32_FLOAT"/>
+       <value value="0x83" name="RB5_R32G32B32A32_UINT"/>
+       <value value="0x84" name="RB5_R32G32B32A32_SINT"/>
+
+       <value value="0xff" name="RB5_NONE"/>
+</enum>
+
+<enum name="a5xx_tile_mode">
+       <value name="TILE5_LINEAR" value="0"/>
+       <value name="TILE5_2" value="2"/>
+       <value name="TILE5_3" value="3"/>
+</enum>
+
+<enum name="a5xx_vtx_fmt" prefix="chipset">
+       <value value="0x03" name="VFMT5_8_UNORM"/>
+       <value value="0x04" name="VFMT5_8_SNORM"/>
+       <value value="0x05" name="VFMT5_8_UINT"/>
+       <value value="0x06" name="VFMT5_8_SINT"/>
+
+       <value value="0x0f" name="VFMT5_8_8_UNORM"/>
+       <value value="0x10" name="VFMT5_8_8_SNORM"/>
+       <value value="0x11" name="VFMT5_8_8_UINT"/>
+       <value value="0x12" name="VFMT5_8_8_SINT"/>
+
+       <value value="0x15" name="VFMT5_16_UNORM"/>
+       <value value="0x16" name="VFMT5_16_SNORM"/>
+       <value value="0x17" name="VFMT5_16_FLOAT"/>
+       <value value="0x18" name="VFMT5_16_UINT"/>
+       <value value="0x19" name="VFMT5_16_SINT"/>
+
+       <value value="0x21" name="VFMT5_8_8_8_UNORM"/>
+       <value value="0x22" name="VFMT5_8_8_8_SNORM"/>
+       <value value="0x23" name="VFMT5_8_8_8_UINT"/>
+       <value value="0x24" name="VFMT5_8_8_8_SINT"/>
+
+       <value value="0x30" name="VFMT5_8_8_8_8_UNORM"/>
+       <value value="0x32" name="VFMT5_8_8_8_8_SNORM"/>
+       <value value="0x33" name="VFMT5_8_8_8_8_UINT"/>
+       <value value="0x34" name="VFMT5_8_8_8_8_SINT"/>
+
+       <value value="0x36" name="VFMT5_10_10_10_2_UNORM"/>
+       <value value="0x39" name="VFMT5_10_10_10_2_SNORM"/>
+       <value value="0x3a" name="VFMT5_10_10_10_2_UINT"/>
+       <value value="0x3b" name="VFMT5_10_10_10_2_SINT"/>
+
+       <value value="0x42" name="VFMT5_11_11_10_FLOAT"/>
+
+       <value value="0x43" name="VFMT5_16_16_UNORM"/>
+       <value value="0x44" name="VFMT5_16_16_SNORM"/>
+       <value value="0x45" name="VFMT5_16_16_FLOAT"/>
+       <value value="0x46" name="VFMT5_16_16_UINT"/>
+       <value value="0x47" name="VFMT5_16_16_SINT"/>
+
+       <value value="0x48" name="VFMT5_32_UNORM"/>
+       <value value="0x49" name="VFMT5_32_SNORM"/>
+       <value value="0x4a" name="VFMT5_32_FLOAT"/>
+       <value value="0x4b" name="VFMT5_32_UINT"/>
+       <value value="0x4c" name="VFMT5_32_SINT"/>
+       <value value="0x4d" name="VFMT5_32_FIXED"/>
+
+       <value value="0x58" name="VFMT5_16_16_16_UNORM"/>
+       <value value="0x59" name="VFMT5_16_16_16_SNORM"/>
+       <value value="0x5a" name="VFMT5_16_16_16_FLOAT"/>
+       <value value="0x5b" name="VFMT5_16_16_16_UINT"/>
+       <value value="0x5c" name="VFMT5_16_16_16_SINT"/>
+
+       <value value="0x60" name="VFMT5_16_16_16_16_UNORM"/>
+       <value value="0x61" name="VFMT5_16_16_16_16_SNORM"/>
+       <value value="0x62" name="VFMT5_16_16_16_16_FLOAT"/>
+       <value value="0x63" name="VFMT5_16_16_16_16_UINT"/>
+       <value value="0x64" name="VFMT5_16_16_16_16_SINT"/>
+
+       <value value="0x65" name="VFMT5_32_32_UNORM"/>
+       <value value="0x66" name="VFMT5_32_32_SNORM"/>
+       <value value="0x67" name="VFMT5_32_32_FLOAT"/>
+       <value value="0x68" name="VFMT5_32_32_UINT"/>
+       <value value="0x69" name="VFMT5_32_32_SINT"/>
+       <value value="0x6a" name="VFMT5_32_32_FIXED"/>
+
+       <value value="0x70" name="VFMT5_32_32_32_UNORM"/>
+       <value value="0x71" name="VFMT5_32_32_32_SNORM"/>
+       <value value="0x72" name="VFMT5_32_32_32_UINT"/>
+       <value value="0x73" name="VFMT5_32_32_32_SINT"/>
+       <value value="0x74" name="VFMT5_32_32_32_FLOAT"/>
+       <value value="0x75" name="VFMT5_32_32_32_FIXED"/>
+
+       <value value="0x80" name="VFMT5_32_32_32_32_UNORM"/>
+       <value value="0x81" name="VFMT5_32_32_32_32_SNORM"/>
+       <value value="0x82" name="VFMT5_32_32_32_32_FLOAT"/>
+       <value value="0x83" name="VFMT5_32_32_32_32_UINT"/>
+       <value value="0x84" name="VFMT5_32_32_32_32_SINT"/>
+       <value value="0x85" name="VFMT5_32_32_32_32_FIXED"/>
+
+       <value value="0xff" name="VFMT5_NONE"/>
+</enum>
+
+<enum name="a5xx_tex_fmt">
+       <value value="0x02" name="TFMT5_A8_UNORM"/>
+       <value value="0x03" name="TFMT5_8_UNORM"/>
+       <value value="0x04" name="TFMT5_8_SNORM"/>
+       <value value="0x05" name="TFMT5_8_UINT"/>
+       <value value="0x06" name="TFMT5_8_SINT"/>
+       <value value="0x08" name="TFMT5_4_4_4_4_UNORM"/>
+       <value value="0x0a" name="TFMT5_5_5_5_1_UNORM"/>
+       <value value="0x0e" name="TFMT5_5_6_5_UNORM"/>
+       <value value="0x0f" name="TFMT5_8_8_UNORM"/>
+       <value value="0x10" name="TFMT5_8_8_SNORM"/>
+       <value value="0x11" name="TFMT5_8_8_UINT"/>
+       <value value="0x12" name="TFMT5_8_8_SINT"/>
+       <value value="0x13" name="TFMT5_L8_A8_UNORM"/>
+       <value value="0x15" name="TFMT5_16_UNORM"/>
+       <value value="0x16" name="TFMT5_16_SNORM"/>
+       <value value="0x17" name="TFMT5_16_FLOAT"/>
+       <value value="0x18" name="TFMT5_16_UINT"/>
+       <value value="0x19" name="TFMT5_16_SINT"/>
+       <value value="0x30" name="TFMT5_8_8_8_8_UNORM"/>
+       <value value="0x31" name="TFMT5_8_8_8_UNORM"/>
+       <value value="0x32" name="TFMT5_8_8_8_8_SNORM"/>
+       <value value="0x33" name="TFMT5_8_8_8_8_UINT"/>
+       <value value="0x34" name="TFMT5_8_8_8_8_SINT"/>
+       <value value="0x35" name="TFMT5_9_9_9_E5_FLOAT"/>
+       <value value="0x36" name="TFMT5_10_10_10_2_UNORM"/>
+       <value value="0x3a" name="TFMT5_10_10_10_2_UINT"/>
+       <value value="0x42" name="TFMT5_11_11_10_FLOAT"/>
+       <value value="0x43" name="TFMT5_16_16_UNORM"/>
+       <value value="0x44" name="TFMT5_16_16_SNORM"/>
+       <value value="0x45" name="TFMT5_16_16_FLOAT"/>
+       <value value="0x46" name="TFMT5_16_16_UINT"/>
+       <value value="0x47" name="TFMT5_16_16_SINT"/>
+       <value value="0x4a" name="TFMT5_32_FLOAT"/>
+       <value value="0x4b" name="TFMT5_32_UINT"/>
+       <value value="0x4c" name="TFMT5_32_SINT"/>
+       <value value="0x60" name="TFMT5_16_16_16_16_UNORM"/>
+       <value value="0x61" name="TFMT5_16_16_16_16_SNORM"/>
+       <value value="0x62" name="TFMT5_16_16_16_16_FLOAT"/>
+       <value value="0x63" name="TFMT5_16_16_16_16_UINT"/>
+       <value value="0x64" name="TFMT5_16_16_16_16_SINT"/>
+       <value value="0x67" name="TFMT5_32_32_FLOAT"/>
+       <value value="0x68" name="TFMT5_32_32_UINT"/>
+       <value value="0x69" name="TFMT5_32_32_SINT"/>
+       <value value="0x72" name="TFMT5_32_32_32_UINT"/>
+       <value value="0x73" name="TFMT5_32_32_32_SINT"/>
+       <value value="0x74" name="TFMT5_32_32_32_FLOAT"/>
+       <value value="0x82" name="TFMT5_32_32_32_32_FLOAT"/>
+       <value value="0x83" name="TFMT5_32_32_32_32_UINT"/>
+       <value value="0x84" name="TFMT5_32_32_32_32_SINT"/>
+       <value value="0xa0" name="TFMT5_X8Z24_UNORM"/>
+
+       <value value="0xab" name="TFMT5_ETC2_RG11_UNORM"/>
+       <value value="0xac" name="TFMT5_ETC2_RG11_SNORM"/>
+       <value value="0xad" name="TFMT5_ETC2_R11_UNORM"/>
+       <value value="0xae" name="TFMT5_ETC2_R11_SNORM"/>
+       <value value="0xaf" name="TFMT5_ETC1"/>
+       <value value="0xb0" name="TFMT5_ETC2_RGB8"/>
+       <value value="0xb1" name="TFMT5_ETC2_RGBA8"/>
+       <value value="0xb2" name="TFMT5_ETC2_RGB8A1"/>
+       <value value="0xb3" name="TFMT5_DXT1"/>
+       <value value="0xb4" name="TFMT5_DXT3"/>
+       <value value="0xb5" name="TFMT5_DXT5"/>
+       <value value="0xb7" name="TFMT5_RGTC1_UNORM"/>
+       <value value="0xb8" name="TFMT5_RGTC1_SNORM"/>
+       <value value="0xbb" name="TFMT5_RGTC2_UNORM"/>
+       <value value="0xbc" name="TFMT5_RGTC2_SNORM"/>
+       <value value="0xbe" name="TFMT5_BPTC_UFLOAT"/>
+       <value value="0xbf" name="TFMT5_BPTC_FLOAT"/>
+       <value value="0xc0" name="TFMT5_BPTC"/>
+       <value value="0xc1" name="TFMT5_ASTC_4x4"/>
+       <value value="0xc2" name="TFMT5_ASTC_5x4"/>
+       <value value="0xc3" name="TFMT5_ASTC_5x5"/>
+       <value value="0xc4" name="TFMT5_ASTC_6x5"/>
+       <value value="0xc5" name="TFMT5_ASTC_6x6"/>
+       <value value="0xc6" name="TFMT5_ASTC_8x5"/>
+       <value value="0xc7" name="TFMT5_ASTC_8x6"/>
+       <value value="0xc8" name="TFMT5_ASTC_8x8"/>
+       <value value="0xc9" name="TFMT5_ASTC_10x5"/>
+       <value value="0xca" name="TFMT5_ASTC_10x6"/>
+       <value value="0xcb" name="TFMT5_ASTC_10x8"/>
+       <value value="0xcc" name="TFMT5_ASTC_10x10"/>
+       <value value="0xcd" name="TFMT5_ASTC_12x10"/>
+       <value value="0xce" name="TFMT5_ASTC_12x12"/>
+
+       <value value="0xff" name="TFMT5_NONE"/>
+</enum>
+
+<enum name="a5xx_depth_format">
+       <value name="DEPTH5_NONE" value="0"/>
+       <value name="DEPTH5_16" value="1"/>
+       <value name="DEPTH5_24_8" value="2"/>
+       <value name="DEPTH5_32" value="4"/>
+</enum>
+
+<enum name="a5xx_blit_buf">
+       <value value="0" name="BLIT_MRT0"/>
+       <value value="1" name="BLIT_MRT1"/>
+       <value value="2" name="BLIT_MRT2"/>
+       <value value="3" name="BLIT_MRT3"/>
+       <value value="4" name="BLIT_MRT4"/>
+       <value value="5" name="BLIT_MRT5"/>
+       <value value="6" name="BLIT_MRT6"/>
+       <value value="7" name="BLIT_MRT7"/>
+       <value value="8" name="BLIT_ZS"/>       <!-- depth or combined depth+stencil -->
+       <value value="9" name="BLIT_S"/>        <!-- separate stencil -->
+</enum>
+
+<!-- see comment in a4xx.xml about script to extract countables from test-perf output -->
+<enum name="a5xx_cp_perfcounter_select">
+       <value value="0" name="PERF_CP_ALWAYS_COUNT"/>
+       <value value="1" name="PERF_CP_BUSY_GFX_CORE_IDLE"/>
+       <value value="2" name="PERF_CP_BUSY_CYCLES"/>
+       <value value="3" name="PERF_CP_PFP_IDLE"/>
+       <value value="4" name="PERF_CP_PFP_BUSY_WORKING"/>
+       <value value="5" name="PERF_CP_PFP_STALL_CYCLES_ANY"/>
+       <value value="6" name="PERF_CP_PFP_STARVE_CYCLES_ANY"/>
+       <value value="7" name="PERF_CP_PFP_ICACHE_MISS"/>
+       <value value="8" name="PERF_CP_PFP_ICACHE_HIT"/>
+       <value value="9" name="PERF_CP_PFP_MATCH_PM4_PKT_PROFILE"/>
+       <value value="10" name="PERF_CP_ME_BUSY_WORKING"/>
+       <value value="11" name="PERF_CP_ME_IDLE"/>
+       <value value="12" name="PERF_CP_ME_STARVE_CYCLES_ANY"/>
+       <value value="13" name="PERF_CP_ME_FIFO_EMPTY_PFP_IDLE"/>
+       <value value="14" name="PERF_CP_ME_FIFO_EMPTY_PFP_BUSY"/>
+       <value value="15" name="PERF_CP_ME_FIFO_FULL_ME_BUSY"/>
+       <value value="16" name="PERF_CP_ME_FIFO_FULL_ME_NON_WORKING"/>
+       <value value="17" name="PERF_CP_ME_STALL_CYCLES_ANY"/>
+       <value value="18" name="PERF_CP_ME_ICACHE_MISS"/>
+       <value value="19" name="PERF_CP_ME_ICACHE_HIT"/>
+       <value value="20" name="PERF_CP_NUM_PREEMPTIONS"/>
+       <value value="21" name="PERF_CP_PREEMPTION_REACTION_DELAY"/>
+       <value value="22" name="PERF_CP_PREEMPTION_SWITCH_OUT_TIME"/>
+       <value value="23" name="PERF_CP_PREEMPTION_SWITCH_IN_TIME"/>
+       <value value="24" name="PERF_CP_DEAD_DRAWS_IN_BIN_RENDER"/>
+       <value value="25" name="PERF_CP_PREDICATED_DRAWS_KILLED"/>
+       <value value="26" name="PERF_CP_MODE_SWITCH"/>
+       <value value="27" name="PERF_CP_ZPASS_DONE"/>
+       <value value="28" name="PERF_CP_CONTEXT_DONE"/>
+       <value value="29" name="PERF_CP_CACHE_FLUSH"/>
+       <value value="30" name="PERF_CP_LONG_PREEMPTIONS"/>
+</enum>
+
+<enum name="a5xx_rbbm_perfcounter_select">
+       <value value="0" name="PERF_RBBM_ALWAYS_COUNT"/>
+       <value value="1" name="PERF_RBBM_ALWAYS_ON"/>
+       <value value="2" name="PERF_RBBM_TSE_BUSY"/>
+       <value value="3" name="PERF_RBBM_RAS_BUSY"/>
+       <value value="4" name="PERF_RBBM_PC_DCALL_BUSY"/>
+       <value value="5" name="PERF_RBBM_PC_VSD_BUSY"/>
+       <value value="6" name="PERF_RBBM_STATUS_MASKED"/>
+       <value value="7" name="PERF_RBBM_COM_BUSY"/>
+       <value value="8" name="PERF_RBBM_DCOM_BUSY"/>
+       <value value="9" name="PERF_RBBM_VBIF_BUSY"/>
+       <value value="10" name="PERF_RBBM_VSC_BUSY"/>
+       <value value="11" name="PERF_RBBM_TESS_BUSY"/>
+       <value value="12" name="PERF_RBBM_UCHE_BUSY"/>
+       <value value="13" name="PERF_RBBM_HLSQ_BUSY"/>
+</enum>
+
+<enum name="a5xx_pc_perfcounter_select">
+       <value value="0" name="PERF_PC_BUSY_CYCLES"/>
+       <value value="1" name="PERF_PC_WORKING_CYCLES"/>
+       <value value="2" name="PERF_PC_STALL_CYCLES_VFD"/>
+       <value value="3" name="PERF_PC_STALL_CYCLES_TSE"/>
+       <value value="4" name="PERF_PC_STALL_CYCLES_VPC"/>
+       <value value="5" name="PERF_PC_STALL_CYCLES_UCHE"/>
+       <value value="6" name="PERF_PC_STALL_CYCLES_TESS"/>
+       <value value="7" name="PERF_PC_STALL_CYCLES_TSE_ONLY"/>
+       <value value="8" name="PERF_PC_STALL_CYCLES_VPC_ONLY"/>
+       <value value="9" name="PERF_PC_PASS1_TF_STALL_CYCLES"/>
+       <value value="10" name="PERF_PC_STARVE_CYCLES_FOR_INDEX"/>
+       <value value="11" name="PERF_PC_STARVE_CYCLES_FOR_TESS_FACTOR"/>
+       <value value="12" name="PERF_PC_STARVE_CYCLES_FOR_VIZ_STREAM"/>
+       <value value="13" name="PERF_PC_STARVE_CYCLES_FOR_POSITION"/>
+       <value value="14" name="PERF_PC_STARVE_CYCLES_DI"/>
+       <value value="15" name="PERF_PC_VIS_STREAMS_LOADED"/>
+       <value value="16" name="PERF_PC_INSTANCES"/>
+       <value value="17" name="PERF_PC_VPC_PRIMITIVES"/>
+       <value value="18" name="PERF_PC_DEAD_PRIM"/>
+       <value value="19" name="PERF_PC_LIVE_PRIM"/>
+       <value value="20" name="PERF_PC_VERTEX_HITS"/>
+       <value value="21" name="PERF_PC_IA_VERTICES"/>
+       <value value="22" name="PERF_PC_IA_PRIMITIVES"/>
+       <value value="23" name="PERF_PC_GS_PRIMITIVES"/>
+       <value value="24" name="PERF_PC_HS_INVOCATIONS"/>
+       <value value="25" name="PERF_PC_DS_INVOCATIONS"/>
+       <value value="26" name="PERF_PC_VS_INVOCATIONS"/>
+       <value value="27" name="PERF_PC_GS_INVOCATIONS"/>
+       <value value="28" name="PERF_PC_DS_PRIMITIVES"/>
+       <value value="29" name="PERF_PC_VPC_POS_DATA_TRANSACTION"/>
+       <value value="30" name="PERF_PC_3D_DRAWCALLS"/>
+       <value value="31" name="PERF_PC_2D_DRAWCALLS"/>
+       <value value="32" name="PERF_PC_NON_DRAWCALL_GLOBAL_EVENTS"/>
+       <value value="33" name="PERF_TESS_BUSY_CYCLES"/>
+       <value value="34" name="PERF_TESS_WORKING_CYCLES"/>
+       <value value="35" name="PERF_TESS_STALL_CYCLES_PC"/>
+       <value value="36" name="PERF_TESS_STARVE_CYCLES_PC"/>
+</enum>
+
+<enum name="a5xx_vfd_perfcounter_select">
+       <value value="0" name="PERF_VFD_BUSY_CYCLES"/>
+       <value value="1" name="PERF_VFD_STALL_CYCLES_UCHE"/>
+       <value value="2" name="PERF_VFD_STALL_CYCLES_VPC_ALLOC"/>
+       <value value="3" name="PERF_VFD_STALL_CYCLES_MISS_VB"/>
+       <value value="4" name="PERF_VFD_STALL_CYCLES_MISS_Q"/>
+       <value value="5" name="PERF_VFD_STALL_CYCLES_SP_INFO"/>
+       <value value="6" name="PERF_VFD_STALL_CYCLES_SP_ATTR"/>
+       <value value="7" name="PERF_VFD_STALL_CYCLES_VFDP_VB"/>
+       <value value="8" name="PERF_VFD_STALL_CYCLES_VFDP_Q"/>
+       <value value="9" name="PERF_VFD_DECODER_PACKER_STALL"/>
+       <value value="10" name="PERF_VFD_STARVE_CYCLES_UCHE"/>
+       <value value="11" name="PERF_VFD_RBUFFER_FULL"/>
+       <value value="12" name="PERF_VFD_ATTR_INFO_FIFO_FULL"/>
+       <value value="13" name="PERF_VFD_DECODED_ATTRIBUTE_BYTES"/>
+       <value value="14" name="PERF_VFD_NUM_ATTRIBUTES"/>
+       <value value="15" name="PERF_VFD_INSTRUCTIONS"/>
+       <value value="16" name="PERF_VFD_UPPER_SHADER_FIBERS"/>
+       <value value="17" name="PERF_VFD_LOWER_SHADER_FIBERS"/>
+       <value value="18" name="PERF_VFD_MODE_0_FIBERS"/>
+       <value value="19" name="PERF_VFD_MODE_1_FIBERS"/>
+       <value value="20" name="PERF_VFD_MODE_2_FIBERS"/>
+       <value value="21" name="PERF_VFD_MODE_3_FIBERS"/>
+       <value value="22" name="PERF_VFD_MODE_4_FIBERS"/>
+       <value value="23" name="PERF_VFD_TOTAL_VERTICES"/>
+       <value value="24" name="PERF_VFD_NUM_ATTR_MISS"/>
+       <value value="25" name="PERF_VFD_1_BURST_REQ"/>
+       <value value="26" name="PERF_VFDP_STALL_CYCLES_VFD"/>
+       <value value="27" name="PERF_VFDP_STALL_CYCLES_VFD_INDEX"/>
+       <value value="28" name="PERF_VFDP_STALL_CYCLES_VFD_PROG"/>
+       <value value="29" name="PERF_VFDP_STARVE_CYCLES_PC"/>
+       <value value="30" name="PERF_VFDP_VS_STAGE_32_WAVES"/>
+</enum>
+
+<enum name="a5xx_hlsq_perfcounter_select">
+       <value value="0" name="PERF_HLSQ_BUSY_CYCLES"/>
+       <value value="1" name="PERF_HLSQ_STALL_CYCLES_UCHE"/>
+       <value value="2" name="PERF_HLSQ_STALL_CYCLES_SP_STATE"/>
+       <value value="3" name="PERF_HLSQ_STALL_CYCLES_SP_FS_STAGE"/>
+       <value value="4" name="PERF_HLSQ_UCHE_LATENCY_CYCLES"/>
+       <value value="5" name="PERF_HLSQ_UCHE_LATENCY_COUNT"/>
+       <value value="6" name="PERF_HLSQ_FS_STAGE_32_WAVES"/>
+       <value value="7" name="PERF_HLSQ_FS_STAGE_64_WAVES"/>
+       <value value="8" name="PERF_HLSQ_QUADS"/>
+       <value value="9" name="PERF_HLSQ_SP_STATE_COPY_TRANS_FS_STAGE"/>
+       <value value="10" name="PERF_HLSQ_SP_STATE_COPY_TRANS_VS_STAGE"/>
+       <value value="11" name="PERF_HLSQ_TP_STATE_COPY_TRANS_FS_STAGE"/>
+       <value value="12" name="PERF_HLSQ_TP_STATE_COPY_TRANS_VS_STAGE"/>
+       <value value="13" name="PERF_HLSQ_CS_INVOCATIONS"/>
+       <value value="14" name="PERF_HLSQ_COMPUTE_DRAWCALLS"/>
+</enum>
+
+<enum name="a5xx_vpc_perfcounter_select">
+       <value value="0" name="PERF_VPC_BUSY_CYCLES"/>
+       <value value="1" name="PERF_VPC_WORKING_CYCLES"/>
+       <value value="2" name="PERF_VPC_STALL_CYCLES_UCHE"/>
+       <value value="3" name="PERF_VPC_STALL_CYCLES_VFD_WACK"/>
+       <value value="4" name="PERF_VPC_STALL_CYCLES_HLSQ_PRIM_ALLOC"/>
+       <value value="5" name="PERF_VPC_STALL_CYCLES_PC"/>
+       <value value="6" name="PERF_VPC_STALL_CYCLES_SP_LM"/>
+       <value value="7" name="PERF_VPC_POS_EXPORT_STALL_CYCLES"/>
+       <value value="8" name="PERF_VPC_STARVE_CYCLES_SP"/>
+       <value value="9" name="PERF_VPC_STARVE_CYCLES_LRZ"/>
+       <value value="10" name="PERF_VPC_PC_PRIMITIVES"/>
+       <value value="11" name="PERF_VPC_SP_COMPONENTS"/>
+       <value value="12" name="PERF_VPC_SP_LM_PRIMITIVES"/>
+       <value value="13" name="PERF_VPC_SP_LM_COMPONENTS"/>
+       <value value="14" name="PERF_VPC_SP_LM_DWORDS"/>
+       <value value="15" name="PERF_VPC_STREAMOUT_COMPONENTS"/>
+       <value value="16" name="PERF_VPC_GRANT_PHASES"/>
+</enum>
+
+<enum name="a5xx_tse_perfcounter_select">
+       <value value="0" name="PERF_TSE_BUSY_CYCLES"/>
+       <value value="1" name="PERF_TSE_CLIPPING_CYCLES"/>
+       <value value="2" name="PERF_TSE_STALL_CYCLES_RAS"/>
+       <value value="3" name="PERF_TSE_STALL_CYCLES_LRZ_BARYPLANE"/>
+       <value value="4" name="PERF_TSE_STALL_CYCLES_LRZ_ZPLANE"/>
+       <value value="5" name="PERF_TSE_STARVE_CYCLES_PC"/>
+       <value value="6" name="PERF_TSE_INPUT_PRIM"/>
+       <value value="7" name="PERF_TSE_INPUT_NULL_PRIM"/>
+       <value value="8" name="PERF_TSE_TRIVAL_REJ_PRIM"/>
+       <value value="9" name="PERF_TSE_CLIPPED_PRIM"/>
+       <value value="10" name="PERF_TSE_ZERO_AREA_PRIM"/>
+       <value value="11" name="PERF_TSE_FACENESS_CULLED_PRIM"/>
+       <value value="12" name="PERF_TSE_ZERO_PIXEL_PRIM"/>
+       <value value="13" name="PERF_TSE_OUTPUT_NULL_PRIM"/>
+       <value value="14" name="PERF_TSE_OUTPUT_VISIBLE_PRIM"/>
+       <value value="15" name="PERF_TSE_CINVOCATION"/>
+       <value value="16" name="PERF_TSE_CPRIMITIVES"/>
+       <value value="17" name="PERF_TSE_2D_INPUT_PRIM"/>
+       <value value="18" name="PERF_TSE_2D_ALIVE_CLCLES"/>
+</enum>
+
+<enum name="a5xx_ras_perfcounter_select">
+       <value value="0" name="PERF_RAS_BUSY_CYCLES"/>
+       <value value="1" name="PERF_RAS_SUPERTILE_ACTIVE_CYCLES"/>
+       <value value="2" name="PERF_RAS_STALL_CYCLES_LRZ"/>
+       <value value="3" name="PERF_RAS_STARVE_CYCLES_TSE"/>
+       <value value="4" name="PERF_RAS_SUPER_TILES"/>
+       <value value="5" name="PERF_RAS_8X4_TILES"/>
+       <value value="6" name="PERF_RAS_MASKGEN_ACTIVE"/>
+       <value value="7" name="PERF_RAS_FULLY_COVERED_SUPER_TILES"/>
+       <value value="8" name="PERF_RAS_FULLY_COVERED_8X4_TILES"/>
+       <value value="9" name="PERF_RAS_PRIM_KILLED_INVISILBE"/>
+</enum>
+
+<enum name="a5xx_lrz_perfcounter_select">
+       <value value="0" name="PERF_LRZ_BUSY_CYCLES"/>
+       <value value="1" name="PERF_LRZ_STARVE_CYCLES_RAS"/>
+       <value value="2" name="PERF_LRZ_STALL_CYCLES_RB"/>
+       <value value="3" name="PERF_LRZ_STALL_CYCLES_VSC"/>
+       <value value="4" name="PERF_LRZ_STALL_CYCLES_VPC"/>
+       <value value="5" name="PERF_LRZ_STALL_CYCLES_FLAG_PREFETCH"/>
+       <value value="6" name="PERF_LRZ_STALL_CYCLES_UCHE"/>
+       <value value="7" name="PERF_LRZ_LRZ_READ"/>
+       <value value="8" name="PERF_LRZ_LRZ_WRITE"/>
+       <value value="9" name="PERF_LRZ_READ_LATENCY"/>
+       <value value="10" name="PERF_LRZ_MERGE_CACHE_UPDATING"/>
+       <value value="11" name="PERF_LRZ_PRIM_KILLED_BY_MASKGEN"/>
+       <value value="12" name="PERF_LRZ_PRIM_KILLED_BY_LRZ"/>
+       <value value="13" name="PERF_LRZ_VISIBLE_PRIM_AFTER_LRZ"/>
+       <value value="14" name="PERF_LRZ_FULL_8X8_TILES"/>
+       <value value="15" name="PERF_LRZ_PARTIAL_8X8_TILES"/>
+       <value value="16" name="PERF_LRZ_TILE_KILLED"/>
+       <value value="17" name="PERF_LRZ_TOTAL_PIXEL"/>
+       <value value="18" name="PERF_LRZ_VISIBLE_PIXEL_AFTER_LRZ"/>
+</enum>
+
+<enum name="a5xx_uche_perfcounter_select">
+       <value value="0" name="PERF_UCHE_BUSY_CYCLES"/>
+       <value value="1" name="PERF_UCHE_STALL_CYCLES_VBIF"/>
+       <value value="2" name="PERF_UCHE_VBIF_LATENCY_CYCLES"/>
+       <value value="3" name="PERF_UCHE_VBIF_LATENCY_SAMPLES"/>
+       <value value="4" name="PERF_UCHE_VBIF_READ_BEATS_TP"/>
+       <value value="5" name="PERF_UCHE_VBIF_READ_BEATS_VFD"/>
+       <value value="6" name="PERF_UCHE_VBIF_READ_BEATS_HLSQ"/>
+       <value value="7" name="PERF_UCHE_VBIF_READ_BEATS_LRZ"/>
+       <value value="8" name="PERF_UCHE_VBIF_READ_BEATS_SP"/>
+       <value value="9" name="PERF_UCHE_READ_REQUESTS_TP"/>
+       <value value="10" name="PERF_UCHE_READ_REQUESTS_VFD"/>
+       <value value="11" name="PERF_UCHE_READ_REQUESTS_HLSQ"/>
+       <value value="12" name="PERF_UCHE_READ_REQUESTS_LRZ"/>
+       <value value="13" name="PERF_UCHE_READ_REQUESTS_SP"/>
+       <value value="14" name="PERF_UCHE_WRITE_REQUESTS_LRZ"/>
+       <value value="15" name="PERF_UCHE_WRITE_REQUESTS_SP"/>
+       <value value="16" name="PERF_UCHE_WRITE_REQUESTS_VPC"/>
+       <value value="17" name="PERF_UCHE_WRITE_REQUESTS_VSC"/>
+       <value value="18" name="PERF_UCHE_EVICTS"/>
+       <value value="19" name="PERF_UCHE_BANK_REQ0"/>
+       <value value="20" name="PERF_UCHE_BANK_REQ1"/>
+       <value value="21" name="PERF_UCHE_BANK_REQ2"/>
+       <value value="22" name="PERF_UCHE_BANK_REQ3"/>
+       <value value="23" name="PERF_UCHE_BANK_REQ4"/>
+       <value value="24" name="PERF_UCHE_BANK_REQ5"/>
+       <value value="25" name="PERF_UCHE_BANK_REQ6"/>
+       <value value="26" name="PERF_UCHE_BANK_REQ7"/>
+       <value value="27" name="PERF_UCHE_VBIF_READ_BEATS_CH0"/>
+       <value value="28" name="PERF_UCHE_VBIF_READ_BEATS_CH1"/>
+       <value value="29" name="PERF_UCHE_GMEM_READ_BEATS"/>
+       <value value="30" name="PERF_UCHE_FLAG_COUNT"/>
+</enum>
+
+<enum name="a5xx_tp_perfcounter_select">
+       <value value="0" name="PERF_TP_BUSY_CYCLES"/>
+       <value value="1" name="PERF_TP_STALL_CYCLES_UCHE"/>
+       <value value="2" name="PERF_TP_LATENCY_CYCLES"/>
+       <value value="3" name="PERF_TP_LATENCY_TRANS"/>
+       <value value="4" name="PERF_TP_FLAG_CACHE_REQUEST_SAMPLES"/>
+       <value value="5" name="PERF_TP_FLAG_CACHE_REQUEST_LATENCY"/>
+       <value value="6" name="PERF_TP_L1_CACHELINE_REQUESTS"/>
+       <value value="7" name="PERF_TP_L1_CACHELINE_MISSES"/>
+       <value value="8" name="PERF_TP_SP_TP_TRANS"/>
+       <value value="9" name="PERF_TP_TP_SP_TRANS"/>
+       <value value="10" name="PERF_TP_OUTPUT_PIXELS"/>
+       <value value="11" name="PERF_TP_FILTER_WORKLOAD_16BIT"/>
+       <value value="12" name="PERF_TP_FILTER_WORKLOAD_32BIT"/>
+       <value value="13" name="PERF_TP_QUADS_RECEIVED"/>
+       <value value="14" name="PERF_TP_QUADS_OFFSET"/>
+       <value value="15" name="PERF_TP_QUADS_SHADOW"/>
+       <value value="16" name="PERF_TP_QUADS_ARRAY"/>
+       <value value="17" name="PERF_TP_QUADS_GRADIENT"/>
+       <value value="18" name="PERF_TP_QUADS_1D"/>
+       <value value="19" name="PERF_TP_QUADS_2D"/>
+       <value value="20" name="PERF_TP_QUADS_BUFFER"/>
+       <value value="21" name="PERF_TP_QUADS_3D"/>
+       <value value="22" name="PERF_TP_QUADS_CUBE"/>
+       <value value="23" name="PERF_TP_STATE_CACHE_REQUESTS"/>
+       <value value="24" name="PERF_TP_STATE_CACHE_MISSES"/>
+       <value value="25" name="PERF_TP_DIVERGENT_QUADS_RECEIVED"/>
+       <value value="26" name="PERF_TP_BINDLESS_STATE_CACHE_REQUESTS"/>
+       <value value="27" name="PERF_TP_BINDLESS_STATE_CACHE_MISSES"/>
+       <value value="28" name="PERF_TP_PRT_NON_RESIDENT_EVENTS"/>
+       <value value="29" name="PERF_TP_OUTPUT_PIXELS_POINT"/>
+       <value value="30" name="PERF_TP_OUTPUT_PIXELS_BILINEAR"/>
+       <value value="31" name="PERF_TP_OUTPUT_PIXELS_MIP"/>
+       <value value="32" name="PERF_TP_OUTPUT_PIXELS_ANISO"/>
+       <value value="33" name="PERF_TP_OUTPUT_PIXELS_ZERO_LOD"/>
+       <value value="34" name="PERF_TP_FLAG_CACHE_REQUESTS"/>
+       <value value="35" name="PERF_TP_FLAG_CACHE_MISSES"/>
+       <value value="36" name="PERF_TP_L1_5_L2_REQUESTS"/>
+       <value value="37" name="PERF_TP_2D_OUTPUT_PIXELS"/>
+       <value value="38" name="PERF_TP_2D_OUTPUT_PIXELS_POINT"/>
+       <value value="39" name="PERF_TP_2D_OUTPUT_PIXELS_BILINEAR"/>
+       <value value="40" name="PERF_TP_2D_FILTER_WORKLOAD_16BIT"/>
+       <value value="41" name="PERF_TP_2D_FILTER_WORKLOAD_32BIT"/>
+</enum>
+
+<enum name="a5xx_sp_perfcounter_select">
+       <value value="0" name="PERF_SP_BUSY_CYCLES"/>
+       <value value="1" name="PERF_SP_ALU_WORKING_CYCLES"/>
+       <value value="2" name="PERF_SP_EFU_WORKING_CYCLES"/>
+       <value value="3" name="PERF_SP_STALL_CYCLES_VPC"/>
+       <value value="4" name="PERF_SP_STALL_CYCLES_TP"/>
+       <value value="5" name="PERF_SP_STALL_CYCLES_UCHE"/>
+       <value value="6" name="PERF_SP_STALL_CYCLES_RB"/>
+       <value value="7" name="PERF_SP_SCHEDULER_NON_WORKING"/>
+       <value value="8" name="PERF_SP_WAVE_CONTEXTS"/>
+       <value value="9" name="PERF_SP_WAVE_CONTEXT_CYCLES"/>
+       <value value="10" name="PERF_SP_FS_STAGE_WAVE_CYCLES"/>
+       <value value="11" name="PERF_SP_FS_STAGE_WAVE_SAMPLES"/>
+       <value value="12" name="PERF_SP_VS_STAGE_WAVE_CYCLES"/>
+       <value value="13" name="PERF_SP_VS_STAGE_WAVE_SAMPLES"/>
+       <value value="14" name="PERF_SP_FS_STAGE_DURATION_CYCLES"/>
+       <value value="15" name="PERF_SP_VS_STAGE_DURATION_CYCLES"/>
+       <value value="16" name="PERF_SP_WAVE_CTRL_CYCLES"/>
+       <value value="17" name="PERF_SP_WAVE_LOAD_CYCLES"/>
+       <value value="18" name="PERF_SP_WAVE_EMIT_CYCLES"/>
+       <value value="19" name="PERF_SP_WAVE_NOP_CYCLES"/>
+       <value value="20" name="PERF_SP_WAVE_WAIT_CYCLES"/>
+       <value value="21" name="PERF_SP_WAVE_FETCH_CYCLES"/>
+       <value value="22" name="PERF_SP_WAVE_IDLE_CYCLES"/>
+       <value value="23" name="PERF_SP_WAVE_END_CYCLES"/>
+       <value value="24" name="PERF_SP_WAVE_LONG_SYNC_CYCLES"/>
+       <value value="25" name="PERF_SP_WAVE_SHORT_SYNC_CYCLES"/>
+       <value value="26" name="PERF_SP_WAVE_JOIN_CYCLES"/>
+       <value value="27" name="PERF_SP_LM_LOAD_INSTRUCTIONS"/>
+       <value value="28" name="PERF_SP_LM_STORE_INSTRUCTIONS"/>
+       <value value="29" name="PERF_SP_LM_ATOMICS"/>
+       <value value="30" name="PERF_SP_GM_LOAD_INSTRUCTIONS"/>
+       <value value="31" name="PERF_SP_GM_STORE_INSTRUCTIONS"/>
+       <value value="32" name="PERF_SP_GM_ATOMICS"/>
+       <value value="33" name="PERF_SP_VS_STAGE_TEX_INSTRUCTIONS"/>
+       <value value="34" name="PERF_SP_VS_STAGE_CFLOW_INSTRUCTIONS"/>
+       <value value="35" name="PERF_SP_VS_STAGE_EFU_INSTRUCTIONS"/>
+       <value value="36" name="PERF_SP_VS_STAGE_FULL_ALU_INSTRUCTIONS"/>
+       <value value="37" name="PERF_SP_VS_STAGE_HALF_ALU_INSTRUCTIONS"/>
+       <value value="38" name="PERF_SP_FS_STAGE_TEX_INSTRUCTIONS"/>
+       <value value="39" name="PERF_SP_FS_STAGE_CFLOW_INSTRUCTIONS"/>
+       <value value="40" name="PERF_SP_FS_STAGE_EFU_INSTRUCTIONS"/>
+       <value value="41" name="PERF_SP_FS_STAGE_FULL_ALU_INSTRUCTIONS"/>
+       <value value="42" name="PERF_SP_FS_STAGE_HALF_ALU_INSTRUCTIONS"/>
+       <value value="43" name="PERF_SP_FS_STAGE_BARY_INSTRUCTIONS"/>
+       <value value="44" name="PERF_SP_VS_INSTRUCTIONS"/>
+       <value value="45" name="PERF_SP_FS_INSTRUCTIONS"/>
+       <value value="46" name="PERF_SP_ADDR_LOCK_COUNT"/>
+       <value value="47" name="PERF_SP_UCHE_READ_TRANS"/>
+       <value value="48" name="PERF_SP_UCHE_WRITE_TRANS"/>
+       <value value="49" name="PERF_SP_EXPORT_VPC_TRANS"/>
+       <value value="50" name="PERF_SP_EXPORT_RB_TRANS"/>
+       <value value="51" name="PERF_SP_PIXELS_KILLED"/>
+       <value value="52" name="PERF_SP_ICL1_REQUESTS"/>
+       <value value="53" name="PERF_SP_ICL1_MISSES"/>
+       <value value="54" name="PERF_SP_ICL0_REQUESTS"/>
+       <value value="55" name="PERF_SP_ICL0_MISSES"/>
+       <value value="56" name="PERF_SP_HS_INSTRUCTIONS"/>
+       <value value="57" name="PERF_SP_DS_INSTRUCTIONS"/>
+       <value value="58" name="PERF_SP_GS_INSTRUCTIONS"/>
+       <value value="59" name="PERF_SP_CS_INSTRUCTIONS"/>
+       <value value="60" name="PERF_SP_GPR_READ"/>
+       <value value="61" name="PERF_SP_GPR_WRITE"/>
+       <value value="62" name="PERF_SP_LM_CH0_REQUESTS"/>
+       <value value="63" name="PERF_SP_LM_CH1_REQUESTS"/>
+       <value value="64" name="PERF_SP_LM_BANK_CONFLICTS"/>
+</enum>
+
+<enum name="a5xx_rb_perfcounter_select">
+       <value value="0" name="PERF_RB_BUSY_CYCLES"/>
+       <value value="1" name="PERF_RB_STALL_CYCLES_CCU"/>
+       <value value="2" name="PERF_RB_STALL_CYCLES_HLSQ"/>
+       <value value="3" name="PERF_RB_STALL_CYCLES_FIFO0_FULL"/>
+       <value value="4" name="PERF_RB_STALL_CYCLES_FIFO1_FULL"/>
+       <value value="5" name="PERF_RB_STALL_CYCLES_FIFO2_FULL"/>
+       <value value="6" name="PERF_RB_STARVE_CYCLES_SP"/>
+       <value value="7" name="PERF_RB_STARVE_CYCLES_LRZ_TILE"/>
+       <value value="8" name="PERF_RB_STARVE_CYCLES_CCU"/>
+       <value value="9" name="PERF_RB_STARVE_CYCLES_Z_PLANE"/>
+       <value value="10" name="PERF_RB_STARVE_CYCLES_BARY_PLANE"/>
+       <value value="11" name="PERF_RB_Z_WORKLOAD"/>
+       <value value="12" name="PERF_RB_HLSQ_ACTIVE"/>
+       <value value="13" name="PERF_RB_Z_READ"/>
+       <value value="14" name="PERF_RB_Z_WRITE"/>
+       <value value="15" name="PERF_RB_C_READ"/>
+       <value value="16" name="PERF_RB_C_WRITE"/>
+       <value value="17" name="PERF_RB_TOTAL_PASS"/>
+       <value value="18" name="PERF_RB_Z_PASS"/>
+       <value value="19" name="PERF_RB_Z_FAIL"/>
+       <value value="20" name="PERF_RB_S_FAIL"/>
+       <value value="21" name="PERF_RB_BLENDED_FXP_COMPONENTS"/>
+       <value value="22" name="PERF_RB_BLENDED_FP16_COMPONENTS"/>
+       <value value="23" name="RB_RESERVED"/>
+       <value value="24" name="PERF_RB_2D_ALIVE_CYCLES"/>
+       <value value="25" name="PERF_RB_2D_STALL_CYCLES_A2D"/>
+       <value value="26" name="PERF_RB_2D_STARVE_CYCLES_SRC"/>
+       <value value="27" name="PERF_RB_2D_STARVE_CYCLES_SP"/>
+       <value value="28" name="PERF_RB_2D_STARVE_CYCLES_DST"/>
+       <value value="29" name="PERF_RB_2D_VALID_PIXELS"/>
+</enum>
+
+<enum name="a5xx_rb_samples_perfcounter_select">
+       <value value="0" name="TOTAL_SAMPLES"/>
+       <value value="1" name="ZPASS_SAMPLES"/>
+       <value value="2" name="ZFAIL_SAMPLES"/>
+       <value value="3" name="SFAIL_SAMPLES"/>
+</enum>
+
+<enum name="a5xx_vsc_perfcounter_select">
+       <value value="0" name="PERF_VSC_BUSY_CYCLES"/>
+       <value value="1" name="PERF_VSC_WORKING_CYCLES"/>
+       <value value="2" name="PERF_VSC_STALL_CYCLES_UCHE"/>
+       <value value="3" name="PERF_VSC_EOT_NUM"/>
+</enum>
+
+<enum name="a5xx_ccu_perfcounter_select">
+       <value value="0" name="PERF_CCU_BUSY_CYCLES"/>
+       <value value="1" name="PERF_CCU_STALL_CYCLES_RB_DEPTH_RETURN"/>
+       <value value="2" name="PERF_CCU_STALL_CYCLES_RB_COLOR_RETURN"/>
+       <value value="3" name="PERF_CCU_STARVE_CYCLES_FLAG_RETURN"/>
+       <value value="4" name="PERF_CCU_DEPTH_BLOCKS"/>
+       <value value="5" name="PERF_CCU_COLOR_BLOCKS"/>
+       <value value="6" name="PERF_CCU_DEPTH_BLOCK_HIT"/>
+       <value value="7" name="PERF_CCU_COLOR_BLOCK_HIT"/>
+       <value value="8" name="PERF_CCU_PARTIAL_BLOCK_READ"/>
+       <value value="9" name="PERF_CCU_GMEM_READ"/>
+       <value value="10" name="PERF_CCU_GMEM_WRITE"/>
+       <value value="11" name="PERF_CCU_DEPTH_READ_FLAG0_COUNT"/>
+       <value value="12" name="PERF_CCU_DEPTH_READ_FLAG1_COUNT"/>
+       <value value="13" name="PERF_CCU_DEPTH_READ_FLAG2_COUNT"/>
+       <value value="14" name="PERF_CCU_DEPTH_READ_FLAG3_COUNT"/>
+       <value value="15" name="PERF_CCU_DEPTH_READ_FLAG4_COUNT"/>
+       <value value="16" name="PERF_CCU_COLOR_READ_FLAG0_COUNT"/>
+       <value value="17" name="PERF_CCU_COLOR_READ_FLAG1_COUNT"/>
+       <value value="18" name="PERF_CCU_COLOR_READ_FLAG2_COUNT"/>
+       <value value="19" name="PERF_CCU_COLOR_READ_FLAG3_COUNT"/>
+       <value value="20" name="PERF_CCU_COLOR_READ_FLAG4_COUNT"/>
+       <value value="21" name="PERF_CCU_2D_BUSY_CYCLES"/>
+       <value value="22" name="PERF_CCU_2D_RD_REQ"/>
+       <value value="23" name="PERF_CCU_2D_WR_REQ"/>
+       <value value="24" name="PERF_CCU_2D_REORDER_STARVE_CYCLES"/>
+       <value value="25" name="PERF_CCU_2D_PIXELS"/>
+</enum>
+
+<enum name="a5xx_cmp_perfcounter_select">
+       <value value="0" name="PERF_CMPDECMP_STALL_CYCLES_VBIF"/>
+       <value value="1" name="PERF_CMPDECMP_VBIF_LATENCY_CYCLES"/>
+       <value value="2" name="PERF_CMPDECMP_VBIF_LATENCY_SAMPLES"/>
+       <value value="3" name="PERF_CMPDECMP_VBIF_READ_DATA_CCU"/>
+       <value value="4" name="PERF_CMPDECMP_VBIF_WRITE_DATA_CCU"/>
+       <value value="5" name="PERF_CMPDECMP_VBIF_READ_REQUEST"/>
+       <value value="6" name="PERF_CMPDECMP_VBIF_WRITE_REQUEST"/>
+       <value value="7" name="PERF_CMPDECMP_VBIF_READ_DATA"/>
+       <value value="8" name="PERF_CMPDECMP_VBIF_WRITE_DATA"/>
+       <value value="9" name="PERF_CMPDECMP_FLAG_FETCH_CYCLES"/>
+       <value value="10" name="PERF_CMPDECMP_FLAG_FETCH_SAMPLES"/>
+       <value value="11" name="PERF_CMPDECMP_DEPTH_WRITE_FLAG1_COUNT"/>
+       <value value="12" name="PERF_CMPDECMP_DEPTH_WRITE_FLAG2_COUNT"/>
+       <value value="13" name="PERF_CMPDECMP_DEPTH_WRITE_FLAG3_COUNT"/>
+       <value value="14" name="PERF_CMPDECMP_DEPTH_WRITE_FLAG4_COUNT"/>
+       <value value="15" name="PERF_CMPDECMP_COLOR_WRITE_FLAG1_COUNT"/>
+       <value value="16" name="PERF_CMPDECMP_COLOR_WRITE_FLAG2_COUNT"/>
+       <value value="17" name="PERF_CMPDECMP_COLOR_WRITE_FLAG3_COUNT"/>
+       <value value="18" name="PERF_CMPDECMP_COLOR_WRITE_FLAG4_COUNT"/>
+       <value value="19" name="PERF_CMPDECMP_2D_STALL_CYCLES_VBIF_REQ"/>
+       <value value="20" name="PERF_CMPDECMP_2D_STALL_CYCLES_VBIF_WR"/>
+       <value value="21" name="PERF_CMPDECMP_2D_STALL_CYCLES_VBIF_RETURN"/>
+       <value value="22" name="PERF_CMPDECMP_2D_RD_DATA"/>
+       <value value="23" name="PERF_CMPDECMP_2D_WR_DATA"/>
+</enum>
+
+<enum name="a5xx_vbif_perfcounter_select">
+       <value value="0" name="AXI_READ_REQUESTS_ID_0"/>
+       <value value="1" name="AXI_READ_REQUESTS_ID_1"/>
+       <value value="2" name="AXI_READ_REQUESTS_ID_2"/>
+       <value value="3" name="AXI_READ_REQUESTS_ID_3"/>
+       <value value="4" name="AXI_READ_REQUESTS_ID_4"/>
+       <value value="5" name="AXI_READ_REQUESTS_ID_5"/>
+       <value value="6" name="AXI_READ_REQUESTS_ID_6"/>
+       <value value="7" name="AXI_READ_REQUESTS_ID_7"/>
+       <value value="8" name="AXI_READ_REQUESTS_ID_8"/>
+       <value value="9" name="AXI_READ_REQUESTS_ID_9"/>
+       <value value="10" name="AXI_READ_REQUESTS_ID_10"/>
+       <value value="11" name="AXI_READ_REQUESTS_ID_11"/>
+       <value value="12" name="AXI_READ_REQUESTS_ID_12"/>
+       <value value="13" name="AXI_READ_REQUESTS_ID_13"/>
+       <value value="14" name="AXI_READ_REQUESTS_ID_14"/>
+       <value value="15" name="AXI_READ_REQUESTS_ID_15"/>
+       <value value="16" name="AXI0_READ_REQUESTS_TOTAL"/>
+       <value value="17" name="AXI1_READ_REQUESTS_TOTAL"/>
+       <value value="18" name="AXI2_READ_REQUESTS_TOTAL"/>
+       <value value="19" name="AXI3_READ_REQUESTS_TOTAL"/>
+       <value value="20" name="AXI_READ_REQUESTS_TOTAL"/>
+       <value value="21" name="AXI_WRITE_REQUESTS_ID_0"/>
+       <value value="22" name="AXI_WRITE_REQUESTS_ID_1"/>
+       <value value="23" name="AXI_WRITE_REQUESTS_ID_2"/>
+       <value value="24" name="AXI_WRITE_REQUESTS_ID_3"/>
+       <value value="25" name="AXI_WRITE_REQUESTS_ID_4"/>
+       <value value="26" name="AXI_WRITE_REQUESTS_ID_5"/>
+       <value value="27" name="AXI_WRITE_REQUESTS_ID_6"/>
+       <value value="28" name="AXI_WRITE_REQUESTS_ID_7"/>
+       <value value="29" name="AXI_WRITE_REQUESTS_ID_8"/>
+       <value value="30" name="AXI_WRITE_REQUESTS_ID_9"/>
+       <value value="31" name="AXI_WRITE_REQUESTS_ID_10"/>
+       <value value="32" name="AXI_WRITE_REQUESTS_ID_11"/>
+       <value value="33" name="AXI_WRITE_REQUESTS_ID_12"/>
+       <value value="34" name="AXI_WRITE_REQUESTS_ID_13"/>
+       <value value="35" name="AXI_WRITE_REQUESTS_ID_14"/>
+       <value value="36" name="AXI_WRITE_REQUESTS_ID_15"/>
+       <value value="37" name="AXI0_WRITE_REQUESTS_TOTAL"/>
+       <value value="38" name="AXI1_WRITE_REQUESTS_TOTAL"/>
+       <value value="39" name="AXI2_WRITE_REQUESTS_TOTAL"/>
+       <value value="40" name="AXI3_WRITE_REQUESTS_TOTAL"/>
+       <value value="41" name="AXI_WRITE_REQUESTS_TOTAL"/>
+       <value value="42" name="AXI_TOTAL_REQUESTS"/>
+       <value value="43" name="AXI_READ_DATA_BEATS_ID_0"/>
+       <value value="44" name="AXI_READ_DATA_BEATS_ID_1"/>
+       <value value="45" name="AXI_READ_DATA_BEATS_ID_2"/>
+       <value value="46" name="AXI_READ_DATA_BEATS_ID_3"/>
+       <value value="47" name="AXI_READ_DATA_BEATS_ID_4"/>
+       <value value="48" name="AXI_READ_DATA_BEATS_ID_5"/>
+       <value value="49" name="AXI_READ_DATA_BEATS_ID_6"/>
+       <value value="50" name="AXI_READ_DATA_BEATS_ID_7"/>
+       <value value="51" name="AXI_READ_DATA_BEATS_ID_8"/>
+       <value value="52" name="AXI_READ_DATA_BEATS_ID_9"/>
+       <value value="53" name="AXI_READ_DATA_BEATS_ID_10"/>
+       <value value="54" name="AXI_READ_DATA_BEATS_ID_11"/>
+       <value value="55" name="AXI_READ_DATA_BEATS_ID_12"/>
+       <value value="56" name="AXI_READ_DATA_BEATS_ID_13"/>
+       <value value="57" name="AXI_READ_DATA_BEATS_ID_14"/>
+       <value value="58" name="AXI_READ_DATA_BEATS_ID_15"/>
+       <value value="59" name="AXI0_READ_DATA_BEATS_TOTAL"/>
+       <value value="60" name="AXI1_READ_DATA_BEATS_TOTAL"/>
+       <value value="61" name="AXI2_READ_DATA_BEATS_TOTAL"/>
+       <value value="62" name="AXI3_READ_DATA_BEATS_TOTAL"/>
+       <value value="63" name="AXI_READ_DATA_BEATS_TOTAL"/>
+       <value value="64" name="AXI_WRITE_DATA_BEATS_ID_0"/>
+       <value value="65" name="AXI_WRITE_DATA_BEATS_ID_1"/>
+       <value value="66" name="AXI_WRITE_DATA_BEATS_ID_2"/>
+       <value value="67" name="AXI_WRITE_DATA_BEATS_ID_3"/>
+       <value value="68" name="AXI_WRITE_DATA_BEATS_ID_4"/>
+       <value value="69" name="AXI_WRITE_DATA_BEATS_ID_5"/>
+       <value value="70" name="AXI_WRITE_DATA_BEATS_ID_6"/>
+       <value value="71" name="AXI_WRITE_DATA_BEATS_ID_7"/>
+       <value value="72" name="AXI_WRITE_DATA_BEATS_ID_8"/>
+       <value value="73" name="AXI_WRITE_DATA_BEATS_ID_9"/>
+       <value value="74" name="AXI_WRITE_DATA_BEATS_ID_10"/>
+       <value value="75" name="AXI_WRITE_DATA_BEATS_ID_11"/>
+       <value value="76" name="AXI_WRITE_DATA_BEATS_ID_12"/>
+       <value value="77" name="AXI_WRITE_DATA_BEATS_ID_13"/>
+       <value value="78" name="AXI_WRITE_DATA_BEATS_ID_14"/>
+       <value value="79" name="AXI_WRITE_DATA_BEATS_ID_15"/>
+       <value value="80" name="AXI0_WRITE_DATA_BEATS_TOTAL"/>
+       <value value="81" name="AXI1_WRITE_DATA_BEATS_TOTAL"/>
+       <value value="82" name="AXI2_WRITE_DATA_BEATS_TOTAL"/>
+       <value value="83" name="AXI3_WRITE_DATA_BEATS_TOTAL"/>
+       <value value="84" name="AXI_WRITE_DATA_BEATS_TOTAL"/>
+       <value value="85" name="AXI_DATA_BEATS_TOTAL"/>
+</enum>
+
+<domain name="A5XX" width="32">
+       <bitset name="A5XX_INT0">
+               <bitfield name="RBBM_GPU_IDLE" pos="0" type="boolean"/>
+               <bitfield name="RBBM_AHB_ERROR" pos="1" type="boolean"/>
+               <bitfield name="RBBM_TRANSFER_TIMEOUT" pos="2" type="boolean"/>
+               <bitfield name="RBBM_ME_MS_TIMEOUT" pos="3" type="boolean"/>
+               <bitfield name="RBBM_PFP_MS_TIMEOUT" pos="4" type="boolean"/>
+               <bitfield name="RBBM_ETS_MS_TIMEOUT" pos="5" type="boolean"/>
+               <bitfield name="RBBM_ATB_ASYNC_OVERFLOW" pos="6" type="boolean"/>
+               <bitfield name="RBBM_GPC_ERROR" pos="7" type="boolean"/>
+               <bitfield name="CP_SW" pos="8" type="boolean"/>
+               <bitfield name="CP_HW_ERROR" pos="9" type="boolean"/>
+               <bitfield name="CP_CCU_FLUSH_DEPTH_TS" pos="10" type="boolean"/>
+               <bitfield name="CP_CCU_FLUSH_COLOR_TS" pos="11" type="boolean"/>
+               <bitfield name="CP_CCU_RESOLVE_TS" pos="12" type="boolean"/>
+               <bitfield name="CP_IB2" pos="13" type="boolean"/>
+               <bitfield name="CP_IB1" pos="14" type="boolean"/>
+               <bitfield name="CP_RB" pos="15" type="boolean"/>
+               <bitfield name="CP_UNUSED_1" pos="16" type="boolean"/>
+               <bitfield name="CP_RB_DONE_TS" pos="17" type="boolean"/>
+               <bitfield name="CP_WT_DONE_TS" pos="18" type="boolean"/>
+               <bitfield name="UNKNOWN_1" pos="19" type="boolean"/>
+               <bitfield name="CP_CACHE_FLUSH_TS" pos="20" type="boolean"/>
+               <bitfield name="UNUSED_2" pos="21" type="boolean"/>
+               <bitfield name="RBBM_ATB_BUS_OVERFLOW" pos="22" type="boolean"/>
+               <bitfield name="MISC_HANG_DETECT" pos="23" type="boolean"/>
+               <bitfield name="UCHE_OOB_ACCESS" pos="24" type="boolean"/>
+               <bitfield name="UCHE_TRAP_INTR" pos="25" type="boolean"/>
+               <bitfield name="DEBBUS_INTR_0" pos="26" type="boolean"/>
+               <bitfield name="DEBBUS_INTR_1" pos="27" type="boolean"/>
+               <bitfield name="GPMU_VOLTAGE_DROOP" pos="28" type="boolean"/>
+               <bitfield name="GPMU_FIRMWARE" pos="29" type="boolean"/>
+               <bitfield name="ISDB_CPU_IRQ" pos="30" type="boolean"/>
+               <bitfield name="ISDB_UNDER_DEBUG" pos="31" type="boolean"/>
+       </bitset>
+
+       <!-- CP Interrupt bits -->
+       <bitset name="A5XX_CP_INT">
+               <bitfield name="CP_OPCODE_ERROR" pos="0" type="boolean"/>
+               <bitfield name="CP_RESERVED_BIT_ERROR" pos="1" type="boolean"/>
+               <bitfield name="CP_HW_FAULT_ERROR" pos="2" type="boolean"/>
+               <bitfield name="CP_DMA_ERROR" pos="3" type="boolean"/>
+               <bitfield name="CP_REGISTER_PROTECTION_ERROR" pos="4" type="boolean"/>
+               <bitfield name="CP_AHB_ERROR" pos="5" type="boolean"/>
+       </bitset>
+
+       <!-- CP registers -->
+       <reg32 offset="0x0800" name="CP_RB_BASE"/>
+       <reg32 offset="0x0801" name="CP_RB_BASE_HI"/>
+       <reg32 offset="0x0802" name="CP_RB_CNTL"/>
+       <reg32 offset="0x0804" name="CP_RB_RPTR_ADDR"/>
+       <reg32 offset="0x0805" name="CP_RB_RPTR_ADDR_HI"/>
+       <reg32 offset="0x0806" name="CP_RB_RPTR"/>
+       <reg32 offset="0x0807" name="CP_RB_WPTR"/>
+       <reg32 offset="0x0808" name="CP_PFP_STAT_ADDR"/>
+       <reg32 offset="0x0809" name="CP_PFP_STAT_DATA"/>
+       <reg32 offset="0x080b" name="CP_DRAW_STATE_ADDR"/>
+       <reg32 offset="0x080c" name="CP_DRAW_STATE_DATA"/>
+       <reg32 offset="0x080d" name="CP_ME_NRT_ADDR_LO"/>
+       <reg32 offset="0x080e" name="CP_ME_NRT_ADDR_HI"/>
+       <reg32 offset="0x0810" name="CP_ME_NRT_DATA"/>
+       <reg32 offset="0x0817" name="CP_CRASH_SCRIPT_BASE_LO"/>
+       <reg32 offset="0x0818" name="CP_CRASH_SCRIPT_BASE_HI"/>
+       <reg32 offset="0x0819" name="CP_CRASH_DUMP_CNTL"/>
+       <reg32 offset="0x081a" name="CP_ME_STAT_ADDR"/>
+       <reg32 offset="0x081f" name="CP_ROQ_THRESHOLDS_1"/>
+       <reg32 offset="0x0820" name="CP_ROQ_THRESHOLDS_2"/>
+       <reg32 offset="0x0821" name="CP_ROQ_DBG_ADDR"/>
+       <reg32 offset="0x0822" name="CP_ROQ_DBG_DATA"/>
+       <reg32 offset="0x0823" name="CP_MEQ_DBG_ADDR"/>
+       <reg32 offset="0x0824" name="CP_MEQ_DBG_DATA"/>
+       <reg32 offset="0x0825" name="CP_MEQ_THRESHOLDS"/>
+       <reg32 offset="0x0826" name="CP_MERCIU_SIZE"/>
+       <reg32 offset="0x0827" name="CP_MERCIU_DBG_ADDR"/>
+       <reg32 offset="0x0828" name="CP_MERCIU_DBG_DATA_1"/>
+       <reg32 offset="0x0829" name="CP_MERCIU_DBG_DATA_2"/>
+       <reg32 offset="0x082a" name="CP_PFP_UCODE_DBG_ADDR"/>
+       <reg32 offset="0x082b" name="CP_PFP_UCODE_DBG_DATA"/>
+       <reg32 offset="0x082f" name="CP_ME_UCODE_DBG_ADDR"/>
+       <reg32 offset="0x0830" name="CP_ME_UCODE_DBG_DATA"/>
+       <reg32 offset="0x0831" name="CP_CNTL"/>
+       <reg32 offset="0x0832" name="CP_PFP_ME_CNTL"/>
+       <reg32 offset="0x0833" name="CP_CHICKEN_DBG"/>
+       <reg32 offset="0x0835" name="CP_PFP_INSTR_BASE_LO"/>
+       <reg32 offset="0x0836" name="CP_PFP_INSTR_BASE_HI"/>
+       <reg32 offset="0x0838" name="CP_ME_INSTR_BASE_LO"/>
+       <reg32 offset="0x0839" name="CP_ME_INSTR_BASE_HI"/>
+       <reg32 offset="0x083b" name="CP_CONTEXT_SWITCH_CNTL"/>
+       <reg32 offset="0x083c" name="CP_CONTEXT_SWITCH_RESTORE_ADDR_LO"/>
+       <reg32 offset="0x083d" name="CP_CONTEXT_SWITCH_RESTORE_ADDR_HI"/>
+       <reg32 offset="0x083e" name="CP_CONTEXT_SWITCH_SAVE_ADDR_LO"/>
+       <reg32 offset="0x083f" name="CP_CONTEXT_SWITCH_SAVE_ADDR_HI"/>
+       <reg32 offset="0x0840" name="CP_CONTEXT_SWITCH_SMMU_INFO_LO"/>
+       <reg32 offset="0x0841" name="CP_CONTEXT_SWITCH_SMMU_INFO_HI"/>
+       <reg32 offset="0x0860" name="CP_ADDR_MODE_CNTL" type="a5xx_address_mode"/>
+       <reg32 offset="0x0b14" name="CP_ME_STAT_DATA"/>
+       <reg32 offset="0x0b15" name="CP_WFI_PEND_CTR"/>
+       <reg32 offset="0x0b18" name="CP_INTERRUPT_STATUS"/>
+       <reg32 offset="0x0b1a" name="CP_HW_FAULT"/>
+       <reg32 offset="0x0b1c" name="CP_PROTECT_STATUS"/>
+       <reg32 offset="0x0b1f" name="CP_IB1_BASE"/>
+       <reg32 offset="0x0b20" name="CP_IB1_BASE_HI"/>
+       <reg32 offset="0x0b21" name="CP_IB1_BUFSZ"/>
+       <reg32 offset="0x0b22" name="CP_IB2_BASE"/>
+       <reg32 offset="0x0b23" name="CP_IB2_BASE_HI"/>
+       <reg32 offset="0x0b24" name="CP_IB2_BUFSZ"/>
+       <array offset="0x0b78" name="CP_SCRATCH" stride="1" length="8">
+               <reg32 offset="0x0" name="REG" type="uint"/>
+       </array>
+       <array offset="0x0880" name="CP_PROTECT" stride="1" length="32">
+               <reg32 offset="0x0" name="REG" type="adreno_cp_protect"/>
+       </array>
+       <reg32 offset="0x08a0" name="CP_PROTECT_CNTL"/>
+       <reg32 offset="0x0b1b" name="CP_AHB_FAULT"/>
+       <reg32 offset="0x0bb0" name="CP_PERFCTR_CP_SEL_0" type="a5xx_cp_perfcounter_select"/>
+       <reg32 offset="0x0bb1" name="CP_PERFCTR_CP_SEL_1" type="a5xx_cp_perfcounter_select"/>
+       <reg32 offset="0x0bb2" name="CP_PERFCTR_CP_SEL_2" type="a5xx_cp_perfcounter_select"/>
+       <reg32 offset="0x0bb3" name="CP_PERFCTR_CP_SEL_3" type="a5xx_cp_perfcounter_select"/>
+       <reg32 offset="0x0bb4" name="CP_PERFCTR_CP_SEL_4" type="a5xx_cp_perfcounter_select"/>
+       <reg32 offset="0x0bb5" name="CP_PERFCTR_CP_SEL_5" type="a5xx_cp_perfcounter_select"/>
+       <reg32 offset="0x0bb6" name="CP_PERFCTR_CP_SEL_6" type="a5xx_cp_perfcounter_select"/>
+       <reg32 offset="0x0bb7" name="CP_PERFCTR_CP_SEL_7" type="a5xx_cp_perfcounter_select"/>
+       <reg32 offset="0x0bc1" name="VSC_ADDR_MODE_CNTL" type="a5xx_address_mode"/>
+       <reg32 offset="0x0bba" name="CP_POWERCTR_CP_SEL_0"/>
+       <reg32 offset="0x0bbb" name="CP_POWERCTR_CP_SEL_1"/>
+       <reg32 offset="0x0bbc" name="CP_POWERCTR_CP_SEL_2"/>
+       <reg32 offset="0x0bbd" name="CP_POWERCTR_CP_SEL_3"/>
+
+       <!-- RBBM registers -->
+       <reg32 offset="0x0004" name="RBBM_CFG_DBGBUS_SEL_A"/>
+       <reg32 offset="0x0005" name="RBBM_CFG_DBGBUS_SEL_B"/>
+       <reg32 offset="0x0006" name="RBBM_CFG_DBGBUS_SEL_C"/>
+       <reg32 offset="0x0007" name="RBBM_CFG_DBGBUS_SEL_D"/>
+<!--
+#define A5XX_RBBM_CFG_DBGBUS_SEL_PING_INDEX_SHIFT    0x0
+#define A5XX_RBBM_CFG_DBGBUS_SEL_PING_BLK_SEL_SHIFT  0x8
+#define A5XX_RBBM_CFG_DBGBUS_SEL_PONG_INDEX_SHIFT    0x10
+#define A5XX_RBBM_CFG_DBGBUS_SEL_PONG_BLK_SEL_SHIFT  0x18
+ -->
+       <reg32 offset="0x0008" name="RBBM_CFG_DBGBUS_CNTLT"/>
+       <reg32 offset="0x0009" name="RBBM_CFG_DBGBUS_CNTLM"/>
+       <reg32 offset="0x0018" name="RBBM_CFG_DEBBUS_CTLTM_ENABLE_SHIFT"/>
+       <reg32 offset="0x000a" name="RBBM_CFG_DBGBUS_OPL"/>
+       <reg32 offset="0x000b" name="RBBM_CFG_DBGBUS_OPE"/>
+       <reg32 offset="0x000c" name="RBBM_CFG_DBGBUS_IVTL_0"/>
+       <reg32 offset="0x000d" name="RBBM_CFG_DBGBUS_IVTL_1"/>
+       <reg32 offset="0x000e" name="RBBM_CFG_DBGBUS_IVTL_2"/>
+       <reg32 offset="0x000f" name="RBBM_CFG_DBGBUS_IVTL_3"/>
+       <reg32 offset="0x0010" name="RBBM_CFG_DBGBUS_MASKL_0"/>
+       <reg32 offset="0x0011" name="RBBM_CFG_DBGBUS_MASKL_1"/>
+       <reg32 offset="0x0012" name="RBBM_CFG_DBGBUS_MASKL_2"/>
+       <reg32 offset="0x0013" name="RBBM_CFG_DBGBUS_MASKL_3"/>
+       <reg32 offset="0x0014" name="RBBM_CFG_DBGBUS_BYTEL_0"/>
+       <reg32 offset="0x0015" name="RBBM_CFG_DBGBUS_BYTEL_1"/>
+       <reg32 offset="0x0016" name="RBBM_CFG_DBGBUS_IVTE_0"/>
+       <reg32 offset="0x0017" name="RBBM_CFG_DBGBUS_IVTE_1"/>
+       <reg32 offset="0x0018" name="RBBM_CFG_DBGBUS_IVTE_2"/>
+       <reg32 offset="0x0019" name="RBBM_CFG_DBGBUS_IVTE_3"/>
+       <reg32 offset="0x001a" name="RBBM_CFG_DBGBUS_MASKE_0"/>
+       <reg32 offset="0x001b" name="RBBM_CFG_DBGBUS_MASKE_1"/>
+       <reg32 offset="0x001c" name="RBBM_CFG_DBGBUS_MASKE_2"/>
+       <reg32 offset="0x001d" name="RBBM_CFG_DBGBUS_MASKE_3"/>
+       <reg32 offset="0x001e" name="RBBM_CFG_DBGBUS_NIBBLEE"/>
+       <reg32 offset="0x001f" name="RBBM_CFG_DBGBUS_PTRC0"/>
+       <reg32 offset="0x0020" name="RBBM_CFG_DBGBUS_PTRC1"/>
+       <reg32 offset="0x0021" name="RBBM_CFG_DBGBUS_LOADREG"/>
+       <reg32 offset="0x0022" name="RBBM_CFG_DBGBUS_IDX"/>
+       <reg32 offset="0x0023" name="RBBM_CFG_DBGBUS_CLRC"/>
+       <reg32 offset="0x0024" name="RBBM_CFG_DBGBUS_LOADIVT"/>
+       <reg32 offset="0x002f" name="RBBM_INTERFACE_HANG_INT_CNTL"/>
+       <reg32 offset="0x0037" name="RBBM_INT_CLEAR_CMD"/>
+       <reg32 offset="0x0038" name="RBBM_INT_0_MASK">
+               <bitfield name="RBBM_GPU_IDLE" pos="0" type="boolean"/>
+               <bitfield name="RBBM_AHB_ERROR" pos="1" type="boolean"/>
+               <bitfield name="RBBM_TRANSFER_TIMEOUT" pos="2" type="boolean"/>
+               <bitfield name="RBBM_ME_MS_TIMEOUT" pos="3" type="boolean"/>
+               <bitfield name="RBBM_PFP_MS_TIMEOUT" pos="4" type="boolean"/>
+               <bitfield name="RBBM_ETS_MS_TIMEOUT" pos="5" type="boolean"/>
+               <bitfield name="RBBM_ATB_ASYNC_OVERFLOW" pos="6" type="boolean"/>
+               <bitfield name="RBBM_GPC_ERROR" pos="7" type="boolean"/>
+               <bitfield name="CP_SW" pos="8" type="boolean"/>
+               <bitfield name="CP_HW_ERROR" pos="9" type="boolean"/>
+               <bitfield name="CP_CCU_FLUSH_DEPTH_TS" pos="10" type="boolean"/>
+               <bitfield name="CP_CCU_FLUSH_COLOR_TS" pos="11" type="boolean"/>
+               <bitfield name="CP_CCU_RESOLVE_TS" pos="12" type="boolean"/>
+               <bitfield name="CP_IB2" pos="13" type="boolean"/>
+               <bitfield name="CP_IB1" pos="14" type="boolean"/>
+               <bitfield name="CP_RB" pos="15" type="boolean"/>
+               <bitfield name="CP_RB_DONE_TS" pos="17" type="boolean"/>
+               <bitfield name="CP_WT_DONE_TS" pos="18" type="boolean"/>
+               <bitfield name="CP_CACHE_FLUSH_TS" pos="20" type="boolean"/>
+               <bitfield name="RBBM_ATB_BUS_OVERFLOW" pos="22" type="boolean"/>
+               <bitfield name="MISC_HANG_DETECT" pos="23" type="boolean"/>
+               <bitfield name="UCHE_OOB_ACCESS" pos="24" type="boolean"/>
+               <bitfield name="UCHE_TRAP_INTR" pos="25" type="boolean"/>
+               <bitfield name="DEBBUS_INTR_0" pos="26" type="boolean"/>
+               <bitfield name="DEBBUS_INTR_1" pos="27" type="boolean"/>
+               <bitfield name="GPMU_VOLTAGE_DROOP" pos="28" type="boolean"/>
+               <bitfield name="GPMU_FIRMWARE" pos="29" type="boolean"/>
+               <bitfield name="ISDB_CPU_IRQ" pos="30" type="boolean"/>
+               <bitfield name="ISDB_UNDER_DEBUG" pos="31" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x003f" name="RBBM_AHB_DBG_CNTL"/>
+       <reg32 offset="0x0041" name="RBBM_EXT_VBIF_DBG_CNTL"/>
+       <reg32 offset="0x0043" name="RBBM_SW_RESET_CMD"/>
+       <reg32 offset="0x0045" name="RBBM_BLOCK_SW_RESET_CMD"/>
+       <reg32 offset="0x0046" name="RBBM_BLOCK_SW_RESET_CMD2"/>
+       <reg32 offset="0x0048" name="RBBM_DBG_LO_HI_GPIO"/>
+       <reg32 offset="0x0049" name="RBBM_EXT_TRACE_BUS_CNTL"/>
+       <reg32 offset="0x004a" name="RBBM_CLOCK_CNTL_TP0"/>
+       <reg32 offset="0x004b" name="RBBM_CLOCK_CNTL_TP1"/>
+       <reg32 offset="0x004c" name="RBBM_CLOCK_CNTL_TP2"/>
+       <reg32 offset="0x004d" name="RBBM_CLOCK_CNTL_TP3"/>
+       <reg32 offset="0x004e" name="RBBM_CLOCK_CNTL2_TP0"/>
+       <reg32 offset="0x004f" name="RBBM_CLOCK_CNTL2_TP1"/>
+       <reg32 offset="0x0050" name="RBBM_CLOCK_CNTL2_TP2"/>
+       <reg32 offset="0x0051" name="RBBM_CLOCK_CNTL2_TP3"/>
+       <reg32 offset="0x0052" name="RBBM_CLOCK_CNTL3_TP0"/>
+       <reg32 offset="0x0053" name="RBBM_CLOCK_CNTL3_TP1"/>
+       <reg32 offset="0x0054" name="RBBM_CLOCK_CNTL3_TP2"/>
+       <reg32 offset="0x0055" name="RBBM_CLOCK_CNTL3_TP3"/>
+       <reg32 offset="0x0059" name="RBBM_READ_AHB_THROUGH_DBG"/>
+       <reg32 offset="0x005a" name="RBBM_CLOCK_CNTL_UCHE"/>
+       <reg32 offset="0x005b" name="RBBM_CLOCK_CNTL2_UCHE"/>
+       <reg32 offset="0x005c" name="RBBM_CLOCK_CNTL3_UCHE"/>
+       <reg32 offset="0x005d" name="RBBM_CLOCK_CNTL4_UCHE"/>
+       <reg32 offset="0x005e" name="RBBM_CLOCK_HYST_UCHE"/>
+       <reg32 offset="0x005f" name="RBBM_CLOCK_DELAY_UCHE"/>
+       <reg32 offset="0x0060" name="RBBM_CLOCK_MODE_GPC"/>
+       <reg32 offset="0x0061" name="RBBM_CLOCK_DELAY_GPC"/>
+       <reg32 offset="0x0062" name="RBBM_CLOCK_HYST_GPC"/>
+       <reg32 offset="0x0063" name="RBBM_CLOCK_CNTL_TSE_RAS_RBBM"/>
+       <reg32 offset="0x0064" name="RBBM_CLOCK_HYST_TSE_RAS_RBBM"/>
+       <reg32 offset="0x0065" name="RBBM_CLOCK_DELAY_TSE_RAS_RBBM"/>
+       <reg32 offset="0x0066" name="RBBM_CLOCK_DELAY_HLSQ"/>
+       <reg32 offset="0x0067" name="RBBM_CLOCK_CNTL"/>
+       <reg32 offset="0x0068" name="RBBM_CLOCK_CNTL_SP0"/>
+       <reg32 offset="0x0069" name="RBBM_CLOCK_CNTL_SP1"/>
+       <reg32 offset="0x006a" name="RBBM_CLOCK_CNTL_SP2"/>
+       <reg32 offset="0x006b" name="RBBM_CLOCK_CNTL_SP3"/>
+       <reg32 offset="0x006c" name="RBBM_CLOCK_CNTL2_SP0"/>
+       <reg32 offset="0x006d" name="RBBM_CLOCK_CNTL2_SP1"/>
+       <reg32 offset="0x006e" name="RBBM_CLOCK_CNTL2_SP2"/>
+       <reg32 offset="0x006f" name="RBBM_CLOCK_CNTL2_SP3"/>
+       <reg32 offset="0x0070" name="RBBM_CLOCK_HYST_SP0"/>
+       <reg32 offset="0x0071" name="RBBM_CLOCK_HYST_SP1"/>
+       <reg32 offset="0x0072" name="RBBM_CLOCK_HYST_SP2"/>
+       <reg32 offset="0x0073" name="RBBM_CLOCK_HYST_SP3"/>
+       <reg32 offset="0x0074" name="RBBM_CLOCK_DELAY_SP0"/>
+       <reg32 offset="0x0075" name="RBBM_CLOCK_DELAY_SP1"/>
+       <reg32 offset="0x0076" name="RBBM_CLOCK_DELAY_SP2"/>
+       <reg32 offset="0x0077" name="RBBM_CLOCK_DELAY_SP3"/>
+       <reg32 offset="0x0078" name="RBBM_CLOCK_CNTL_RB0"/>
+       <reg32 offset="0x0079" name="RBBM_CLOCK_CNTL_RB1"/>
+       <reg32 offset="0x007a" name="RBBM_CLOCK_CNTL_RB2"/>
+       <reg32 offset="0x007b" name="RBBM_CLOCK_CNTL_RB3"/>
+       <reg32 offset="0x007c" name="RBBM_CLOCK_CNTL2_RB0"/>
+       <reg32 offset="0x007d" name="RBBM_CLOCK_CNTL2_RB1"/>
+       <reg32 offset="0x007e" name="RBBM_CLOCK_CNTL2_RB2"/>
+       <reg32 offset="0x007f" name="RBBM_CLOCK_CNTL2_RB3"/>
+       <reg32 offset="0x0080" name="RBBM_CLOCK_HYST_RAC"/>
+       <reg32 offset="0x0081" name="RBBM_CLOCK_DELAY_RAC"/>
+       <reg32 offset="0x0082" name="RBBM_CLOCK_CNTL_CCU0"/>
+       <reg32 offset="0x0083" name="RBBM_CLOCK_CNTL_CCU1"/>
+       <reg32 offset="0x0084" name="RBBM_CLOCK_CNTL_CCU2"/>
+       <reg32 offset="0x0085" name="RBBM_CLOCK_CNTL_CCU3"/>
+       <reg32 offset="0x0086" name="RBBM_CLOCK_HYST_RB_CCU0"/>
+       <reg32 offset="0x0087" name="RBBM_CLOCK_HYST_RB_CCU1"/>
+       <reg32 offset="0x0088" name="RBBM_CLOCK_HYST_RB_CCU2"/>
+       <reg32 offset="0x0089" name="RBBM_CLOCK_HYST_RB_CCU3"/>
+       <reg32 offset="0x008a" name="RBBM_CLOCK_CNTL_RAC"/>
+       <reg32 offset="0x008b" name="RBBM_CLOCK_CNTL2_RAC"/>
+       <reg32 offset="0x008c" name="RBBM_CLOCK_DELAY_RB_CCU_L1_0"/>
+       <reg32 offset="0x008d" name="RBBM_CLOCK_DELAY_RB_CCU_L1_1"/>
+       <reg32 offset="0x008e" name="RBBM_CLOCK_DELAY_RB_CCU_L1_2"/>
+       <reg32 offset="0x008f" name="RBBM_CLOCK_DELAY_RB_CCU_L1_3"/>
+       <reg32 offset="0x0090" name="RBBM_CLOCK_HYST_VFD"/>
+       <reg32 offset="0x0091" name="RBBM_CLOCK_MODE_VFD"/>
+       <reg32 offset="0x0092" name="RBBM_CLOCK_DELAY_VFD"/>
+       <reg32 offset="0x0093" name="RBBM_AHB_CNTL0"/>
+       <reg32 offset="0x0094" name="RBBM_AHB_CNTL1"/>
+       <reg32 offset="0x0095" name="RBBM_AHB_CNTL2"/>
+       <reg32 offset="0x0096" name="RBBM_AHB_CMD"/>
+       <reg32 offset="0x009c" name="RBBM_INTERFACE_HANG_MASK_CNTL11"/>
+       <reg32 offset="0x009d" name="RBBM_INTERFACE_HANG_MASK_CNTL12"/>
+       <reg32 offset="0x009e" name="RBBM_INTERFACE_HANG_MASK_CNTL13"/>
+       <reg32 offset="0x009f" name="RBBM_INTERFACE_HANG_MASK_CNTL14"/>
+       <reg32 offset="0x00a0" name="RBBM_INTERFACE_HANG_MASK_CNTL15"/>
+       <reg32 offset="0x00a1" name="RBBM_INTERFACE_HANG_MASK_CNTL16"/>
+       <reg32 offset="0x00a2" name="RBBM_INTERFACE_HANG_MASK_CNTL17"/>
+       <reg32 offset="0x00a3" name="RBBM_INTERFACE_HANG_MASK_CNTL18"/>
+       <reg32 offset="0x00a4" name="RBBM_CLOCK_DELAY_TP0"/>
+       <reg32 offset="0x00a5" name="RBBM_CLOCK_DELAY_TP1"/>
+       <reg32 offset="0x00a6" name="RBBM_CLOCK_DELAY_TP2"/>
+       <reg32 offset="0x00a7" name="RBBM_CLOCK_DELAY_TP3"/>
+       <reg32 offset="0x00a8" name="RBBM_CLOCK_DELAY2_TP0"/>
+       <reg32 offset="0x00a9" name="RBBM_CLOCK_DELAY2_TP1"/>
+       <reg32 offset="0x00aa" name="RBBM_CLOCK_DELAY2_TP2"/>
+       <reg32 offset="0x00ab" name="RBBM_CLOCK_DELAY2_TP3"/>
+       <reg32 offset="0x00ac" name="RBBM_CLOCK_DELAY3_TP0"/>
+       <reg32 offset="0x00ad" name="RBBM_CLOCK_DELAY3_TP1"/>
+       <reg32 offset="0x00ae" name="RBBM_CLOCK_DELAY3_TP2"/>
+       <reg32 offset="0x00af" name="RBBM_CLOCK_DELAY3_TP3"/>
+       <reg32 offset="0x00b0" name="RBBM_CLOCK_HYST_TP0"/>
+       <reg32 offset="0x00b1" name="RBBM_CLOCK_HYST_TP1"/>
+       <reg32 offset="0x00b2" name="RBBM_CLOCK_HYST_TP2"/>
+       <reg32 offset="0x00b3" name="RBBM_CLOCK_HYST_TP3"/>
+       <reg32 offset="0x00b4" name="RBBM_CLOCK_HYST2_TP0"/>
+       <reg32 offset="0x00b5" name="RBBM_CLOCK_HYST2_TP1"/>
+       <reg32 offset="0x00b6" name="RBBM_CLOCK_HYST2_TP2"/>
+       <reg32 offset="0x00b7" name="RBBM_CLOCK_HYST2_TP3"/>
+       <reg32 offset="0x00b8" name="RBBM_CLOCK_HYST3_TP0"/>
+       <reg32 offset="0x00b9" name="RBBM_CLOCK_HYST3_TP1"/>
+       <reg32 offset="0x00ba" name="RBBM_CLOCK_HYST3_TP2"/>
+       <reg32 offset="0x00bb" name="RBBM_CLOCK_HYST3_TP3"/>
+       <reg32 offset="0x00c8" name="RBBM_CLOCK_CNTL_GPMU"/>
+       <reg32 offset="0x00c9" name="RBBM_CLOCK_DELAY_GPMU"/>
+       <reg32 offset="0x00ca" name="RBBM_CLOCK_HYST_GPMU"/>
+       <reg32 offset="0x03a0" name="RBBM_PERFCTR_CP_0_LO"/>
+       <reg32 offset="0x03a1" name="RBBM_PERFCTR_CP_0_HI"/>
+       <reg32 offset="0x03a2" name="RBBM_PERFCTR_CP_1_LO"/>
+       <reg32 offset="0x03a3" name="RBBM_PERFCTR_CP_1_HI"/>
+       <reg32 offset="0x03a4" name="RBBM_PERFCTR_CP_2_LO"/>
+       <reg32 offset="0x03a5" name="RBBM_PERFCTR_CP_2_HI"/>
+       <reg32 offset="0x03a6" name="RBBM_PERFCTR_CP_3_LO"/>
+       <reg32 offset="0x03a7" name="RBBM_PERFCTR_CP_3_HI"/>
+       <reg32 offset="0x03a8" name="RBBM_PERFCTR_CP_4_LO"/>
+       <reg32 offset="0x03a9" name="RBBM_PERFCTR_CP_4_HI"/>
+       <reg32 offset="0x03aa" name="RBBM_PERFCTR_CP_5_LO"/>
+       <reg32 offset="0x03ab" name="RBBM_PERFCTR_CP_5_HI"/>
+       <reg32 offset="0x03ac" name="RBBM_PERFCTR_CP_6_LO"/>
+       <reg32 offset="0x03ad" name="RBBM_PERFCTR_CP_6_HI"/>
+       <reg32 offset="0x03ae" name="RBBM_PERFCTR_CP_7_LO"/>
+       <reg32 offset="0x03af" name="RBBM_PERFCTR_CP_7_HI"/>
+       <reg32 offset="0x03b0" name="RBBM_PERFCTR_RBBM_0_LO"/>
+       <reg32 offset="0x03b1" name="RBBM_PERFCTR_RBBM_0_HI"/>
+       <reg32 offset="0x03b2" name="RBBM_PERFCTR_RBBM_1_LO"/>
+       <reg32 offset="0x03b3" name="RBBM_PERFCTR_RBBM_1_HI"/>
+       <reg32 offset="0x03b4" name="RBBM_PERFCTR_RBBM_2_LO"/>
+       <reg32 offset="0x03b5" name="RBBM_PERFCTR_RBBM_2_HI"/>
+       <reg32 offset="0x03b6" name="RBBM_PERFCTR_RBBM_3_LO"/>
+       <reg32 offset="0x03b7" name="RBBM_PERFCTR_RBBM_3_HI"/>
+       <reg32 offset="0x03b8" name="RBBM_PERFCTR_PC_0_LO"/>
+       <reg32 offset="0x03b9" name="RBBM_PERFCTR_PC_0_HI"/>
+       <reg32 offset="0x03ba" name="RBBM_PERFCTR_PC_1_LO"/>
+       <reg32 offset="0x03bb" name="RBBM_PERFCTR_PC_1_HI"/>
+       <reg32 offset="0x03bc" name="RBBM_PERFCTR_PC_2_LO"/>
+       <reg32 offset="0x03bd" name="RBBM_PERFCTR_PC_2_HI"/>
+       <reg32 offset="0x03be" name="RBBM_PERFCTR_PC_3_LO"/>
+       <reg32 offset="0x03bf" name="RBBM_PERFCTR_PC_3_HI"/>
+       <reg32 offset="0x03c0" name="RBBM_PERFCTR_PC_4_LO"/>
+       <reg32 offset="0x03c1" name="RBBM_PERFCTR_PC_4_HI"/>
+       <reg32 offset="0x03c2" name="RBBM_PERFCTR_PC_5_LO"/>
+       <reg32 offset="0x03c3" name="RBBM_PERFCTR_PC_5_HI"/>
+       <reg32 offset="0x03c4" name="RBBM_PERFCTR_PC_6_LO"/>
+       <reg32 offset="0x03c5" name="RBBM_PERFCTR_PC_6_HI"/>
+       <reg32 offset="0x03c6" name="RBBM_PERFCTR_PC_7_LO"/>
+       <reg32 offset="0x03c7" name="RBBM_PERFCTR_PC_7_HI"/>
+       <reg32 offset="0x03c8" name="RBBM_PERFCTR_VFD_0_LO"/>
+       <reg32 offset="0x03c9" name="RBBM_PERFCTR_VFD_0_HI"/>
+       <reg32 offset="0x03ca" name="RBBM_PERFCTR_VFD_1_LO"/>
+       <reg32 offset="0x03cb" name="RBBM_PERFCTR_VFD_1_HI"/>
+       <reg32 offset="0x03cc" name="RBBM_PERFCTR_VFD_2_LO"/>
+       <reg32 offset="0x03cd" name="RBBM_PERFCTR_VFD_2_HI"/>
+       <reg32 offset="0x03ce" name="RBBM_PERFCTR_VFD_3_LO"/>
+       <reg32 offset="0x03cf" name="RBBM_PERFCTR_VFD_3_HI"/>
+       <reg32 offset="0x03d0" name="RBBM_PERFCTR_VFD_4_LO"/>
+       <reg32 offset="0x03d1" name="RBBM_PERFCTR_VFD_4_HI"/>
+       <reg32 offset="0x03d2" name="RBBM_PERFCTR_VFD_5_LO"/>
+       <reg32 offset="0x03d3" name="RBBM_PERFCTR_VFD_5_HI"/>
+       <reg32 offset="0x03d4" name="RBBM_PERFCTR_VFD_6_LO"/>
+       <reg32 offset="0x03d5" name="RBBM_PERFCTR_VFD_6_HI"/>
+       <reg32 offset="0x03d6" name="RBBM_PERFCTR_VFD_7_LO"/>
+       <reg32 offset="0x03d7" name="RBBM_PERFCTR_VFD_7_HI"/>
+       <reg32 offset="0x03d8" name="RBBM_PERFCTR_HLSQ_0_LO"/>
+       <reg32 offset="0x03d9" name="RBBM_PERFCTR_HLSQ_0_HI"/>
+       <reg32 offset="0x03da" name="RBBM_PERFCTR_HLSQ_1_LO"/>
+       <reg32 offset="0x03db" name="RBBM_PERFCTR_HLSQ_1_HI"/>
+       <reg32 offset="0x03dc" name="RBBM_PERFCTR_HLSQ_2_LO"/>
+       <reg32 offset="0x03dd" name="RBBM_PERFCTR_HLSQ_2_HI"/>
+       <reg32 offset="0x03de" name="RBBM_PERFCTR_HLSQ_3_LO"/>
+       <reg32 offset="0x03df" name="RBBM_PERFCTR_HLSQ_3_HI"/>
+       <reg32 offset="0x03e0" name="RBBM_PERFCTR_HLSQ_4_LO"/>
+       <reg32 offset="0x03e1" name="RBBM_PERFCTR_HLSQ_4_HI"/>
+       <reg32 offset="0x03e2" name="RBBM_PERFCTR_HLSQ_5_LO"/>
+       <reg32 offset="0x03e3" name="RBBM_PERFCTR_HLSQ_5_HI"/>
+       <reg32 offset="0x03e4" name="RBBM_PERFCTR_HLSQ_6_LO"/>
+       <reg32 offset="0x03e5" name="RBBM_PERFCTR_HLSQ_6_HI"/>
+       <reg32 offset="0x03e6" name="RBBM_PERFCTR_HLSQ_7_LO"/>
+       <reg32 offset="0x03e7" name="RBBM_PERFCTR_HLSQ_7_HI"/>
+       <reg32 offset="0x03e8" name="RBBM_PERFCTR_VPC_0_LO"/>
+       <reg32 offset="0x03e9" name="RBBM_PERFCTR_VPC_0_HI"/>
+       <reg32 offset="0x03ea" name="RBBM_PERFCTR_VPC_1_LO"/>
+       <reg32 offset="0x03eb" name="RBBM_PERFCTR_VPC_1_HI"/>
+       <reg32 offset="0x03ec" name="RBBM_PERFCTR_VPC_2_LO"/>
+       <reg32 offset="0x03ed" name="RBBM_PERFCTR_VPC_2_HI"/>
+       <reg32 offset="0x03ee" name="RBBM_PERFCTR_VPC_3_LO"/>
+       <reg32 offset="0x03ef" name="RBBM_PERFCTR_VPC_3_HI"/>
+       <reg32 offset="0x03f0" name="RBBM_PERFCTR_CCU_0_LO"/>
+       <reg32 offset="0x03f1" name="RBBM_PERFCTR_CCU_0_HI"/>
+       <reg32 offset="0x03f2" name="RBBM_PERFCTR_CCU_1_LO"/>
+       <reg32 offset="0x03f3" name="RBBM_PERFCTR_CCU_1_HI"/>
+       <reg32 offset="0x03f4" name="RBBM_PERFCTR_CCU_2_LO"/>
+       <reg32 offset="0x03f5" name="RBBM_PERFCTR_CCU_2_HI"/>
+       <reg32 offset="0x03f6" name="RBBM_PERFCTR_CCU_3_LO"/>
+       <reg32 offset="0x03f7" name="RBBM_PERFCTR_CCU_3_HI"/>
+       <reg32 offset="0x03f8" name="RBBM_PERFCTR_TSE_0_LO"/>
+       <reg32 offset="0x03f9" name="RBBM_PERFCTR_TSE_0_HI"/>
+       <reg32 offset="0x03fa" name="RBBM_PERFCTR_TSE_1_LO"/>
+       <reg32 offset="0x03fb" name="RBBM_PERFCTR_TSE_1_HI"/>
+       <reg32 offset="0x03fc" name="RBBM_PERFCTR_TSE_2_LO"/>
+       <reg32 offset="0x03fd" name="RBBM_PERFCTR_TSE_2_HI"/>
+       <reg32 offset="0x03fe" name="RBBM_PERFCTR_TSE_3_LO"/>
+       <reg32 offset="0x03ff" name="RBBM_PERFCTR_TSE_3_HI"/>
+       <reg32 offset="0x0400" name="RBBM_PERFCTR_RAS_0_LO"/>
+       <reg32 offset="0x0401" name="RBBM_PERFCTR_RAS_0_HI"/>
+       <reg32 offset="0x0402" name="RBBM_PERFCTR_RAS_1_LO"/>
+       <reg32 offset="0x0403" name="RBBM_PERFCTR_RAS_1_HI"/>
+       <reg32 offset="0x0404" name="RBBM_PERFCTR_RAS_2_LO"/>
+       <reg32 offset="0x0405" name="RBBM_PERFCTR_RAS_2_HI"/>
+       <reg32 offset="0x0406" name="RBBM_PERFCTR_RAS_3_LO"/>
+       <reg32 offset="0x0407" name="RBBM_PERFCTR_RAS_3_HI"/>
+       <reg32 offset="0x0408" name="RBBM_PERFCTR_UCHE_0_LO"/>
+       <reg32 offset="0x0409" name="RBBM_PERFCTR_UCHE_0_HI"/>
+       <reg32 offset="0x040a" name="RBBM_PERFCTR_UCHE_1_LO"/>
+       <reg32 offset="0x040b" name="RBBM_PERFCTR_UCHE_1_HI"/>
+       <reg32 offset="0x040c" name="RBBM_PERFCTR_UCHE_2_LO"/>
+       <reg32 offset="0x040d" name="RBBM_PERFCTR_UCHE_2_HI"/>
+       <reg32 offset="0x040e" name="RBBM_PERFCTR_UCHE_3_LO"/>
+       <reg32 offset="0x040f" name="RBBM_PERFCTR_UCHE_3_HI"/>
+       <reg32 offset="0x0410" name="RBBM_PERFCTR_UCHE_4_LO"/>
+       <reg32 offset="0x0411" name="RBBM_PERFCTR_UCHE_4_HI"/>
+       <reg32 offset="0x0412" name="RBBM_PERFCTR_UCHE_5_LO"/>
+       <reg32 offset="0x0413" name="RBBM_PERFCTR_UCHE_5_HI"/>
+       <reg32 offset="0x0414" name="RBBM_PERFCTR_UCHE_6_LO"/>
+       <reg32 offset="0x0415" name="RBBM_PERFCTR_UCHE_6_HI"/>
+       <reg32 offset="0x0416" name="RBBM_PERFCTR_UCHE_7_LO"/>
+       <reg32 offset="0x0417" name="RBBM_PERFCTR_UCHE_7_HI"/>
+       <reg32 offset="0x0418" name="RBBM_PERFCTR_TP_0_LO"/>
+       <reg32 offset="0x0419" name="RBBM_PERFCTR_TP_0_HI"/>
+       <reg32 offset="0x041a" name="RBBM_PERFCTR_TP_1_LO"/>
+       <reg32 offset="0x041b" name="RBBM_PERFCTR_TP_1_HI"/>
+       <reg32 offset="0x041c" name="RBBM_PERFCTR_TP_2_LO"/>
+       <reg32 offset="0x041d" name="RBBM_PERFCTR_TP_2_HI"/>
+       <reg32 offset="0x041e" name="RBBM_PERFCTR_TP_3_LO"/>
+       <reg32 offset="0x041f" name="RBBM_PERFCTR_TP_3_HI"/>
+       <reg32 offset="0x0420" name="RBBM_PERFCTR_TP_4_LO"/>
+       <reg32 offset="0x0421" name="RBBM_PERFCTR_TP_4_HI"/>
+       <reg32 offset="0x0422" name="RBBM_PERFCTR_TP_5_LO"/>
+       <reg32 offset="0x0423" name="RBBM_PERFCTR_TP_5_HI"/>
+       <reg32 offset="0x0424" name="RBBM_PERFCTR_TP_6_LO"/>
+       <reg32 offset="0x0425" name="RBBM_PERFCTR_TP_6_HI"/>
+       <reg32 offset="0x0426" name="RBBM_PERFCTR_TP_7_LO"/>
+       <reg32 offset="0x0427" name="RBBM_PERFCTR_TP_7_HI"/>
+       <reg32 offset="0x0428" name="RBBM_PERFCTR_SP_0_LO"/>
+       <reg32 offset="0x0429" name="RBBM_PERFCTR_SP_0_HI"/>
+       <reg32 offset="0x042a" name="RBBM_PERFCTR_SP_1_LO"/>
+       <reg32 offset="0x042b" name="RBBM_PERFCTR_SP_1_HI"/>
+       <reg32 offset="0x042c" name="RBBM_PERFCTR_SP_2_LO"/>
+       <reg32 offset="0x042d" name="RBBM_PERFCTR_SP_2_HI"/>
+       <reg32 offset="0x042e" name="RBBM_PERFCTR_SP_3_LO"/>
+       <reg32 offset="0x042f" name="RBBM_PERFCTR_SP_3_HI"/>
+       <reg32 offset="0x0430" name="RBBM_PERFCTR_SP_4_LO"/>
+       <reg32 offset="0x0431" name="RBBM_PERFCTR_SP_4_HI"/>
+       <reg32 offset="0x0432" name="RBBM_PERFCTR_SP_5_LO"/>
+       <reg32 offset="0x0433" name="RBBM_PERFCTR_SP_5_HI"/>
+       <reg32 offset="0x0434" name="RBBM_PERFCTR_SP_6_LO"/>
+       <reg32 offset="0x0435" name="RBBM_PERFCTR_SP_6_HI"/>
+       <reg32 offset="0x0436" name="RBBM_PERFCTR_SP_7_LO"/>
+       <reg32 offset="0x0437" name="RBBM_PERFCTR_SP_7_HI"/>
+       <reg32 offset="0x0438" name="RBBM_PERFCTR_SP_8_LO"/>
+       <reg32 offset="0x0439" name="RBBM_PERFCTR_SP_8_HI"/>
+       <reg32 offset="0x043a" name="RBBM_PERFCTR_SP_9_LO"/>
+       <reg32 offset="0x043b" name="RBBM_PERFCTR_SP_9_HI"/>
+       <reg32 offset="0x043c" name="RBBM_PERFCTR_SP_10_LO"/>
+       <reg32 offset="0x043d" name="RBBM_PERFCTR_SP_10_HI"/>
+       <reg32 offset="0x043e" name="RBBM_PERFCTR_SP_11_LO"/>
+       <reg32 offset="0x043f" name="RBBM_PERFCTR_SP_11_HI"/>
+       <reg32 offset="0x0440" name="RBBM_PERFCTR_RB_0_LO"/>
+       <reg32 offset="0x0441" name="RBBM_PERFCTR_RB_0_HI"/>
+       <reg32 offset="0x0442" name="RBBM_PERFCTR_RB_1_LO"/>
+       <reg32 offset="0x0443" name="RBBM_PERFCTR_RB_1_HI"/>
+       <reg32 offset="0x0444" name="RBBM_PERFCTR_RB_2_LO"/>
+       <reg32 offset="0x0445" name="RBBM_PERFCTR_RB_2_HI"/>
+       <reg32 offset="0x0446" name="RBBM_PERFCTR_RB_3_LO"/>
+       <reg32 offset="0x0447" name="RBBM_PERFCTR_RB_3_HI"/>
+       <reg32 offset="0x0448" name="RBBM_PERFCTR_RB_4_LO"/>
+       <reg32 offset="0x0449" name="RBBM_PERFCTR_RB_4_HI"/>
+       <reg32 offset="0x044a" name="RBBM_PERFCTR_RB_5_LO"/>
+       <reg32 offset="0x044b" name="RBBM_PERFCTR_RB_5_HI"/>
+       <reg32 offset="0x044c" name="RBBM_PERFCTR_RB_6_LO"/>
+       <reg32 offset="0x044d" name="RBBM_PERFCTR_RB_6_HI"/>
+       <reg32 offset="0x044e" name="RBBM_PERFCTR_RB_7_LO"/>
+       <reg32 offset="0x044f" name="RBBM_PERFCTR_RB_7_HI"/>
+       <reg32 offset="0x0450" name="RBBM_PERFCTR_VSC_0_LO"/>
+       <reg32 offset="0x0451" name="RBBM_PERFCTR_VSC_0_HI"/>
+       <reg32 offset="0x0452" name="RBBM_PERFCTR_VSC_1_LO"/>
+       <reg32 offset="0x0453" name="RBBM_PERFCTR_VSC_1_HI"/>
+       <reg32 offset="0x0454" name="RBBM_PERFCTR_LRZ_0_LO"/>
+       <reg32 offset="0x0455" name="RBBM_PERFCTR_LRZ_0_HI"/>
+       <reg32 offset="0x0456" name="RBBM_PERFCTR_LRZ_1_LO"/>
+       <reg32 offset="0x0457" name="RBBM_PERFCTR_LRZ_1_HI"/>
+       <reg32 offset="0x0458" name="RBBM_PERFCTR_LRZ_2_LO"/>
+       <reg32 offset="0x0459" name="RBBM_PERFCTR_LRZ_2_HI"/>
+       <reg32 offset="0x045a" name="RBBM_PERFCTR_LRZ_3_LO"/>
+       <reg32 offset="0x045b" name="RBBM_PERFCTR_LRZ_3_HI"/>
+       <reg32 offset="0x045c" name="RBBM_PERFCTR_CMP_0_LO"/>
+       <reg32 offset="0x045d" name="RBBM_PERFCTR_CMP_0_HI"/>
+       <reg32 offset="0x045e" name="RBBM_PERFCTR_CMP_1_LO"/>
+       <reg32 offset="0x045f" name="RBBM_PERFCTR_CMP_1_HI"/>
+       <reg32 offset="0x0460" name="RBBM_PERFCTR_CMP_2_LO"/>
+       <reg32 offset="0x0461" name="RBBM_PERFCTR_CMP_2_HI"/>
+       <reg32 offset="0x0462" name="RBBM_PERFCTR_CMP_3_LO"/>
+       <reg32 offset="0x0463" name="RBBM_PERFCTR_CMP_3_HI"/>
+       <reg32 offset="0x046b" name="RBBM_PERFCTR_RBBM_SEL_0" type="a5xx_rbbm_perfcounter_select"/>
+       <reg32 offset="0x046c" name="RBBM_PERFCTR_RBBM_SEL_1" type="a5xx_rbbm_perfcounter_select"/>
+       <reg32 offset="0x046d" name="RBBM_PERFCTR_RBBM_SEL_2" type="a5xx_rbbm_perfcounter_select"/>
+       <reg32 offset="0x046e" name="RBBM_PERFCTR_RBBM_SEL_3" type="a5xx_rbbm_perfcounter_select"/>
+       <reg32 offset="0x04d2" name="RBBM_ALWAYSON_COUNTER_LO"/>
+       <reg32 offset="0x04d3" name="RBBM_ALWAYSON_COUNTER_HI"/>
+       <reg32 offset="0x04f5" name="RBBM_STATUS">
+               <bitfield high="31" low="31" name="GPU_BUSY_IGN_AHB" />
+               <bitfield high="30" low="30" name="GPU_BUSY_IGN_AHB_CP" />
+               <bitfield high="29" low="29" name="HLSQ_BUSY" />
+               <bitfield high="28" low="28" name="VSC_BUSY" />
+               <bitfield high="27" low="27" name="TPL1_BUSY" />
+               <bitfield high="26" low="26" name="SP_BUSY" />
+               <bitfield high="25" low="25" name="UCHE_BUSY" />
+               <bitfield high="24" low="24" name="VPC_BUSY" />
+               <bitfield high="23" low="23" name="VFDP_BUSY" />
+               <bitfield high="22" low="22" name="VFD_BUSY" />
+               <bitfield high="21" low="21" name="TESS_BUSY" />
+               <bitfield high="20" low="20" name="PC_VSD_BUSY" />
+               <bitfield high="19" low="19" name="PC_DCALL_BUSY" />
+               <bitfield high="18" low="18" name="GPMU_SLAVE_BUSY" />
+               <bitfield high="17" low="17" name="DCOM_BUSY" />
+               <bitfield high="16" low="16" name="COM_BUSY" />
+               <bitfield high="15" low="15" name="LRZ_BUZY" />
+               <bitfield high="14" low="14" name="A2D_DSP_BUSY" />
+               <bitfield high="13" low="13" name="CCUFCHE_BUSY" />
+               <bitfield high="12" low="12" name="RB_BUSY" />
+               <bitfield high="11" low="11" name="RAS_BUSY" />
+               <bitfield high="10" low="10" name="TSE_BUSY" />
+               <bitfield high="9" low="9" name="VBIF_BUSY" />
+               <bitfield high="8" low="8" name="GPU_BUSY_IGN_AHB_HYST" />
+               <bitfield high="7" low="7" name="CP_BUSY_IGN_HYST" />
+               <bitfield high="6" low="6" name="CP_BUSY" />
+               <bitfield high="5" low="5" name="GPMU_MASTER_BUSY" />
+               <bitfield high="4" low="4" name="CP_CRASH_BUSY" />
+               <bitfield high="3" low="3" name="CP_ETS_BUSY" />
+               <bitfield high="2" low="2" name="CP_PFP_BUSY" />
+               <bitfield high="1" low="1" name="CP_ME_BUSY" />
+               <bitfield high="0" low="0" name="HI_BUSY" />
+       </reg32>
+       <reg32 offset="0x0530" name="RBBM_STATUS3"/>
+       <reg32 offset="0x04e1" name="RBBM_INT_0_STATUS"/>
+       <reg32 offset="0x04f0" name="RBBM_AHB_ME_SPLIT_STATUS"/>
+       <reg32 offset="0x04f1" name="RBBM_AHB_PFP_SPLIT_STATUS"/>
+       <reg32 offset="0x04f3" name="RBBM_AHB_ETS_SPLIT_STATUS"/>
+       <reg32 offset="0x04f4" name="RBBM_AHB_ERROR_STATUS"/>
+       <reg32 offset="0x0464" name="RBBM_PERFCTR_CNTL"/>
+       <reg32 offset="0x0465" name="RBBM_PERFCTR_LOAD_CMD0"/>
+       <reg32 offset="0x0466" name="RBBM_PERFCTR_LOAD_CMD1"/>
+       <reg32 offset="0x0467" name="RBBM_PERFCTR_LOAD_CMD2"/>
+       <reg32 offset="0x0468" name="RBBM_PERFCTR_LOAD_CMD3"/>
+       <reg32 offset="0x0469" name="RBBM_PERFCTR_LOAD_VALUE_LO"/>
+       <reg32 offset="0x046a" name="RBBM_PERFCTR_LOAD_VALUE_HI"/>
+       <reg32 offset="0x046f" name="RBBM_PERFCTR_GPU_BUSY_MASKED"/>
+       <reg32 offset="0x04ed" name="RBBM_AHB_ERROR"/>
+       <reg32 offset="0x0504" name="RBBM_CFG_DBGBUS_EVENT_LOGIC"/>
+       <reg32 offset="0x0505" name="RBBM_CFG_DBGBUS_OVER"/>
+       <reg32 offset="0x0506" name="RBBM_CFG_DBGBUS_COUNT0"/>
+       <reg32 offset="0x0507" name="RBBM_CFG_DBGBUS_COUNT1"/>
+       <reg32 offset="0x0508" name="RBBM_CFG_DBGBUS_COUNT2"/>
+       <reg32 offset="0x0509" name="RBBM_CFG_DBGBUS_COUNT3"/>
+       <reg32 offset="0x050a" name="RBBM_CFG_DBGBUS_COUNT4"/>
+       <reg32 offset="0x050b" name="RBBM_CFG_DBGBUS_COUNT5"/>
+       <reg32 offset="0x050c" name="RBBM_CFG_DBGBUS_TRACE_ADDR"/>
+       <reg32 offset="0x050d" name="RBBM_CFG_DBGBUS_TRACE_BUF0"/>
+       <reg32 offset="0x050e" name="RBBM_CFG_DBGBUS_TRACE_BUF1"/>
+       <reg32 offset="0x050f" name="RBBM_CFG_DBGBUS_TRACE_BUF2"/>
+       <reg32 offset="0x0510" name="RBBM_CFG_DBGBUS_TRACE_BUF3"/>
+       <reg32 offset="0x0511" name="RBBM_CFG_DBGBUS_TRACE_BUF4"/>
+       <reg32 offset="0x0512" name="RBBM_CFG_DBGBUS_MISR0"/>
+       <reg32 offset="0x0513" name="RBBM_CFG_DBGBUS_MISR1"/>
+       <reg32 offset="0x0533" name="RBBM_ISDB_CNT"/>
+       <reg32 offset="0xf000" name="RBBM_SECVID_TRUST_CONFIG"/>
+       <reg32 offset="0xf400" name="RBBM_SECVID_TRUST_CNTL"/>
+       <reg32 offset="0xf800" name="RBBM_SECVID_TSB_TRUSTED_BASE_LO"/>
+       <reg32 offset="0xf801" name="RBBM_SECVID_TSB_TRUSTED_BASE_HI"/>
+       <reg32 offset="0xf802" name="RBBM_SECVID_TSB_TRUSTED_SIZE"/>
+       <reg32 offset="0xf803" name="RBBM_SECVID_TSB_CNTL"/>
+       <reg32 offset="0xf804" name="RBBM_SECVID_TSB_COMP_STATUS_LO"/>
+       <reg32 offset="0xf805" name="RBBM_SECVID_TSB_COMP_STATUS_HI"/>
+       <reg32 offset="0xf806" name="RBBM_SECVID_TSB_UCHE_STATUS_LO"/>
+       <reg32 offset="0xf807" name="RBBM_SECVID_TSB_UCHE_STATUS_HI"/>
+       <reg32 offset="0xf810" name="RBBM_SECVID_TSB_ADDR_MODE_CNTL" type="a5xx_address_mode"/>
+
+       <!-- VSC registers -->
+       <reg32 offset="0x0bc2" name="VSC_BIN_SIZE">
+               <bitfield name="WIDTH" low="0" high="7" shr="5" type="uint"/>
+               <bitfield name="HEIGHT" low="9" high="16" shr="5" type="uint"/>
+               <!-- b17 maybe BYPASS like RB_CNTL, but reg not written for bypass -->
+       </reg32>
+       <reg32 offset="0x0bc3" name="VSC_SIZE_ADDRESS_LO"/>
+       <reg32 offset="0x0bc4" name="VSC_SIZE_ADDRESS_HI"/>
+       <reg32 offset="0x0bc5" name="UNKNOWN_0BC5"/> <!-- always 00000000? -->
+       <reg32 offset="0x0bc6" name="UNKNOWN_0BC6"/> <!-- always 00000000? -->
+       <array offset="0x0bd0" name="VSC_PIPE_CONFIG" stride="1" length="16">
+               <reg32 offset="0x0" name="REG">
+                       <doc>
+                               Configures the mapping between VSC_PIPE buffer and
+                               bin, X/Y specify the bin index in the horiz/vert
+                               direction (0,0 is upper left, 0,1 is leftmost bin
+                               on second row, and so on).  W/H specify the number
+                               of bins assigned to this VSC_PIPE in the horiz/vert
+                               dimension.
+                       </doc>
+                       <bitfield name="X" low="0" high="9" type="uint"/>
+                       <bitfield name="Y" low="10" high="19" type="uint"/>
+                       <bitfield name="W" low="20" high="23" type="uint"/>
+                       <bitfield name="H" low="24" high="27" type="uint"/>
+               </reg32>
+       </array>
+       <array offset="0x0be0" name="VSC_PIPE_DATA_ADDRESS" stride="2" length="16">
+               <reg32 offset="0x0" name="LO"/>
+               <reg32 offset="0x1" name="HI"/>
+       </array>
+       <array offset="0x0c00" name="VSC_PIPE_DATA_LENGTH" stride="1" length="16">
+               <reg32 offset="0x0" name="REG"/>
+       </array>
+       <reg32 offset="0x0c60" name="VSC_PERFCTR_VSC_SEL_0" type="a5xx_vsc_perfcounter_select"/>
+       <reg32 offset="0x0c61" name="VSC_PERFCTR_VSC_SEL_1" type="a5xx_vsc_perfcounter_select"/>
+
+       <!-- used for some blits?? -->
+       <reg32 offset="0x0cdd" name="VSC_RESOLVE_CNTL" type="adreno_reg_xy"/>
+
+       <!-- GRAS registers -->
+       <reg32 offset="0x0c81" name="GRAS_ADDR_MODE_CNTL" type="a5xx_address_mode"/>
+       <reg32 offset="0x0c90" name="GRAS_PERFCTR_TSE_SEL_0" type="a5xx_tse_perfcounter_select"/>
+       <reg32 offset="0x0c91" name="GRAS_PERFCTR_TSE_SEL_1" type="a5xx_tse_perfcounter_select"/>
+       <reg32 offset="0x0c92" name="GRAS_PERFCTR_TSE_SEL_2" type="a5xx_tse_perfcounter_select"/>
+       <reg32 offset="0x0c93" name="GRAS_PERFCTR_TSE_SEL_3" type="a5xx_tse_perfcounter_select"/>
+       <reg32 offset="0x0c94" name="GRAS_PERFCTR_RAS_SEL_0" type="a5xx_ras_perfcounter_select"/>
+       <reg32 offset="0x0c95" name="GRAS_PERFCTR_RAS_SEL_1" type="a5xx_ras_perfcounter_select"/>
+       <reg32 offset="0x0c96" name="GRAS_PERFCTR_RAS_SEL_2" type="a5xx_ras_perfcounter_select"/>
+       <reg32 offset="0x0c97" name="GRAS_PERFCTR_RAS_SEL_3" type="a5xx_ras_perfcounter_select"/>
+       <reg32 offset="0x0c98" name="GRAS_PERFCTR_LRZ_SEL_0" type="a5xx_lrz_perfcounter_select"/>
+       <reg32 offset="0x0c99" name="GRAS_PERFCTR_LRZ_SEL_1" type="a5xx_lrz_perfcounter_select"/>
+       <reg32 offset="0x0c9a" name="GRAS_PERFCTR_LRZ_SEL_2" type="a5xx_lrz_perfcounter_select"/>
+       <reg32 offset="0x0c9b" name="GRAS_PERFCTR_LRZ_SEL_3" type="a5xx_lrz_perfcounter_select"/>
+
+       <reg32 offset="0x0cc4" name="RB_DBG_ECO_CNTL"/> <!-- always 00100000? -->
+       <reg32 offset="0x0cc5" name="RB_ADDR_MODE_CNTL" type="a5xx_address_mode"/>
+       <reg32 offset="0x0cc6" name="RB_MODE_CNTL"/> <!-- always 00000044? -->
+       <reg32 offset="0x0cc7" name="RB_CCU_CNTL"/> <!-- always b0056080 or 10000000? -->
+       <reg32 offset="0x0cd0" name="RB_PERFCTR_RB_SEL_0" type="a5xx_rb_perfcounter_select"/>
+       <reg32 offset="0x0cd1" name="RB_PERFCTR_RB_SEL_1" type="a5xx_rb_perfcounter_select"/>
+       <reg32 offset="0x0cd2" name="RB_PERFCTR_RB_SEL_2" type="a5xx_rb_perfcounter_select"/>
+       <reg32 offset="0x0cd3" name="RB_PERFCTR_RB_SEL_3" type="a5xx_rb_perfcounter_select"/>
+       <reg32 offset="0x0cd4" name="RB_PERFCTR_RB_SEL_4" type="a5xx_rb_perfcounter_select"/>
+       <reg32 offset="0x0cd5" name="RB_PERFCTR_RB_SEL_5" type="a5xx_rb_perfcounter_select"/>
+       <reg32 offset="0x0cd6" name="RB_PERFCTR_RB_SEL_6" type="a5xx_rb_perfcounter_select"/>
+       <reg32 offset="0x0cd7" name="RB_PERFCTR_RB_SEL_7" type="a5xx_rb_perfcounter_select"/>
+       <reg32 offset="0x0cd8" name="RB_PERFCTR_CCU_SEL_0" type="a5xx_ccu_perfcounter_select"/>
+       <reg32 offset="0x0cd9" name="RB_PERFCTR_CCU_SEL_1" type="a5xx_ccu_perfcounter_select"/>
+       <reg32 offset="0x0cda" name="RB_PERFCTR_CCU_SEL_2" type="a5xx_ccu_perfcounter_select"/>
+       <reg32 offset="0x0cdb" name="RB_PERFCTR_CCU_SEL_3" type="a5xx_ccu_perfcounter_select"/>
+       <reg32 offset="0x0ce0" name="RB_POWERCTR_RB_SEL_0"/>
+       <reg32 offset="0x0ce1" name="RB_POWERCTR_RB_SEL_1"/>
+       <reg32 offset="0x0ce2" name="RB_POWERCTR_RB_SEL_2"/>
+       <reg32 offset="0x0ce3" name="RB_POWERCTR_RB_SEL_3"/>
+       <reg32 offset="0x0ce4" name="RB_POWERCTR_CCU_SEL_0"/>
+       <reg32 offset="0x0ce5" name="RB_POWERCTR_CCU_SEL_1"/>
+       <reg32 offset="0x0cec" name="RB_PERFCTR_CMP_SEL_0" type="a5xx_cmp_perfcounter_select"/>
+       <reg32 offset="0x0ced" name="RB_PERFCTR_CMP_SEL_1" type="a5xx_cmp_perfcounter_select"/>
+       <reg32 offset="0x0cee" name="RB_PERFCTR_CMP_SEL_2" type="a5xx_cmp_perfcounter_select"/>
+       <reg32 offset="0x0cef" name="RB_PERFCTR_CMP_SEL_3" type="a5xx_cmp_perfcounter_select"/>
+
+       <reg32 offset="0x0d00" name="PC_DBG_ECO_CNTL">
+               <bitfield name="TWOPASSUSEWFI" pos="8" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x0d01" name="PC_ADDR_MODE_CNTL" type="a5xx_address_mode"/>
+       <reg32 offset="0x0d02" name="PC_MODE_CNTL"/> <!-- always 0000001f? -->
+       <reg32 offset="0x0d04" name="PC_INDEX_BUF_LO"/>
+       <reg32 offset="0x0d05" name="PC_INDEX_BUF_HI"/>
+       <reg32 offset="0x0d06" name="PC_START_INDEX"/>
+       <reg32 offset="0x0d07" name="PC_MAX_INDEX"/>
+       <reg32 offset="0x0d08" name="PC_TESSFACTOR_ADDR_LO"/>
+       <reg32 offset="0x0d09" name="PC_TESSFACTOR_ADDR_HI"/>
+       <reg32 offset="0x0d10" name="PC_PERFCTR_PC_SEL_0" type="a5xx_pc_perfcounter_select"/>
+       <reg32 offset="0x0d11" name="PC_PERFCTR_PC_SEL_1" type="a5xx_pc_perfcounter_select"/>
+       <reg32 offset="0x0d12" name="PC_PERFCTR_PC_SEL_2" type="a5xx_pc_perfcounter_select"/>
+       <reg32 offset="0x0d13" name="PC_PERFCTR_PC_SEL_3" type="a5xx_pc_perfcounter_select"/>
+       <reg32 offset="0x0d14" name="PC_PERFCTR_PC_SEL_4" type="a5xx_pc_perfcounter_select"/>
+       <reg32 offset="0x0d15" name="PC_PERFCTR_PC_SEL_5" type="a5xx_pc_perfcounter_select"/>
+       <reg32 offset="0x0d16" name="PC_PERFCTR_PC_SEL_6" type="a5xx_pc_perfcounter_select"/>
+       <reg32 offset="0x0d17" name="PC_PERFCTR_PC_SEL_7" type="a5xx_pc_perfcounter_select"/>
+
+       <reg32 offset="0x0e00" name="HLSQ_TIMEOUT_THRESHOLD_0"/>
+       <reg32 offset="0x0e01" name="HLSQ_TIMEOUT_THRESHOLD_1"/>
+       <reg32 offset="0x0e04" name="HLSQ_DBG_ECO_CNTL"/>
+       <reg32 offset="0x0e05" name="HLSQ_ADDR_MODE_CNTL" type="a5xx_address_mode"/>
+       <reg32 offset="0x0e06" name="HLSQ_MODE_CNTL"/> <!-- always 00000001? -->
+       <reg32 offset="0x0e10" name="HLSQ_PERFCTR_HLSQ_SEL_0" type="a5xx_hlsq_perfcounter_select"/>
+       <reg32 offset="0x0e11" name="HLSQ_PERFCTR_HLSQ_SEL_1" type="a5xx_hlsq_perfcounter_select"/>
+       <reg32 offset="0x0e12" name="HLSQ_PERFCTR_HLSQ_SEL_2" type="a5xx_hlsq_perfcounter_select"/>
+       <reg32 offset="0x0e13" name="HLSQ_PERFCTR_HLSQ_SEL_3" type="a5xx_hlsq_perfcounter_select"/>
+       <reg32 offset="0x0e14" name="HLSQ_PERFCTR_HLSQ_SEL_4" type="a5xx_hlsq_perfcounter_select"/>
+       <reg32 offset="0x0e15" name="HLSQ_PERFCTR_HLSQ_SEL_5" type="a5xx_hlsq_perfcounter_select"/>
+       <reg32 offset="0x0e16" name="HLSQ_PERFCTR_HLSQ_SEL_6" type="a5xx_hlsq_perfcounter_select"/>
+       <reg32 offset="0x0e17" name="HLSQ_PERFCTR_HLSQ_SEL_7" type="a5xx_hlsq_perfcounter_select"/>
+       <reg32 offset="0x0f08" name="HLSQ_SPTP_RDSEL"/>
+       <reg32 offset="0xbc00" name="HLSQ_DBG_READ_SEL"/>
+       <reg32 offset="0xa000" name="HLSQ_DBG_AHB_READ_APERTURE"/>
+
+       <reg32 offset="0x0e41" name="VFD_ADDR_MODE_CNTL" type="a5xx_address_mode"/>
+       <reg32 offset="0x0e42" name="VFD_MODE_CNTL"/> <!-- always 00000000? -->
+       <reg32 offset="0x0e50" name="VFD_PERFCTR_VFD_SEL_0" type="a5xx_vfd_perfcounter_select"/>
+       <reg32 offset="0x0e51" name="VFD_PERFCTR_VFD_SEL_1" type="a5xx_vfd_perfcounter_select"/>
+       <reg32 offset="0x0e52" name="VFD_PERFCTR_VFD_SEL_2" type="a5xx_vfd_perfcounter_select"/>
+       <reg32 offset="0x0e53" name="VFD_PERFCTR_VFD_SEL_3" type="a5xx_vfd_perfcounter_select"/>
+       <reg32 offset="0x0e54" name="VFD_PERFCTR_VFD_SEL_4" type="a5xx_vfd_perfcounter_select"/>
+       <reg32 offset="0x0e55" name="VFD_PERFCTR_VFD_SEL_5" type="a5xx_vfd_perfcounter_select"/>
+       <reg32 offset="0x0e56" name="VFD_PERFCTR_VFD_SEL_6" type="a5xx_vfd_perfcounter_select"/>
+       <reg32 offset="0x0e57" name="VFD_PERFCTR_VFD_SEL_7" type="a5xx_vfd_perfcounter_select"/>
+       <reg32 offset="0x0e60" name="VPC_DBG_ECO_CNTL"/> <!-- always 00000400? -->
+       <reg32 offset="0x0e61" name="VPC_ADDR_MODE_CNTL" type="a5xx_address_mode"/>
+       <reg32 offset="0x0e62" name="VPC_MODE_CNTL">
+               <bitfield name="BINNING_PASS" pos="0" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x0e64" name="VPC_PERFCTR_VPC_SEL_0" type="a5xx_vpc_perfcounter_select"/>
+       <reg32 offset="0x0e65" name="VPC_PERFCTR_VPC_SEL_1" type="a5xx_vpc_perfcounter_select"/>
+       <reg32 offset="0x0e66" name="VPC_PERFCTR_VPC_SEL_2" type="a5xx_vpc_perfcounter_select"/>
+       <reg32 offset="0x0e67" name="VPC_PERFCTR_VPC_SEL_3" type="a5xx_vpc_perfcounter_select"/>
+
+       <reg32 offset="0x0e80" name="UCHE_ADDR_MODE_CNTL" type="a5xx_address_mode"/>
+       <reg32 offset="0x0e82" name="UCHE_SVM_CNTL"/>
+       <reg32 offset="0x0e87" name="UCHE_WRITE_THRU_BASE_LO"/>
+       <reg32 offset="0x0e88" name="UCHE_WRITE_THRU_BASE_HI"/>
+       <reg32 offset="0x0e89" name="UCHE_TRAP_BASE_LO"/>
+       <reg32 offset="0x0e8a" name="UCHE_TRAP_BASE_HI"/>
+       <reg32 offset="0x0e8b" name="UCHE_GMEM_RANGE_MIN_LO"/>
+       <reg32 offset="0x0e8c" name="UCHE_GMEM_RANGE_MIN_HI"/>
+       <reg32 offset="0x0e8d" name="UCHE_GMEM_RANGE_MAX_LO"/>
+       <reg32 offset="0x0e8e" name="UCHE_GMEM_RANGE_MAX_HI"/>
+       <reg32 offset="0x0e8f" name="UCHE_DBG_ECO_CNTL_2"/>
+       <reg32 offset="0x0e90" name="UCHE_DBG_ECO_CNTL"/>
+       <reg32 offset="0x0e91" name="UCHE_CACHE_INVALIDATE_MIN_LO"/>
+       <reg32 offset="0x0e92" name="UCHE_CACHE_INVALIDATE_MIN_HI"/>
+       <reg32 offset="0x0e93" name="UCHE_CACHE_INVALIDATE_MAX_LO"/>
+       <reg32 offset="0x0e94" name="UCHE_CACHE_INVALIDATE_MAX_HI"/>
+       <reg32 offset="0x0e95" name="UCHE_CACHE_INVALIDATE"/>
+       <reg32 offset="0x0e96" name="UCHE_CACHE_WAYS"/>
+       <reg32 offset="0x0ea0" name="UCHE_PERFCTR_UCHE_SEL_0" type="a5xx_uche_perfcounter_select"/>
+       <reg32 offset="0x0ea1" name="UCHE_PERFCTR_UCHE_SEL_1" type="a5xx_uche_perfcounter_select"/>
+       <reg32 offset="0x0ea2" name="UCHE_PERFCTR_UCHE_SEL_2" type="a5xx_uche_perfcounter_select"/>
+       <reg32 offset="0x0ea3" name="UCHE_PERFCTR_UCHE_SEL_3" type="a5xx_uche_perfcounter_select"/>
+       <reg32 offset="0x0ea4" name="UCHE_PERFCTR_UCHE_SEL_4" type="a5xx_uche_perfcounter_select"/>
+       <reg32 offset="0x0ea5" name="UCHE_PERFCTR_UCHE_SEL_5" type="a5xx_uche_perfcounter_select"/>
+       <reg32 offset="0x0ea6" name="UCHE_PERFCTR_UCHE_SEL_6" type="a5xx_uche_perfcounter_select"/>
+       <reg32 offset="0x0ea7" name="UCHE_PERFCTR_UCHE_SEL_7" type="a5xx_uche_perfcounter_select"/>
+       <reg32 offset="0x0ea8" name="UCHE_POWERCTR_UCHE_SEL_0"/>
+       <reg32 offset="0x0ea9" name="UCHE_POWERCTR_UCHE_SEL_1"/>
+       <reg32 offset="0x0eaa" name="UCHE_POWERCTR_UCHE_SEL_2"/>
+       <reg32 offset="0x0eab" name="UCHE_POWERCTR_UCHE_SEL_3"/>
+       <reg32 offset="0x0eb1" name="UCHE_TRAP_LOG_LO"/>
+       <reg32 offset="0x0eb2" name="UCHE_TRAP_LOG_HI"/>
+
+       <reg32 offset="0x0ec0" name="SP_DBG_ECO_CNTL"/>
+       <reg32 offset="0x0ec1" name="SP_ADDR_MODE_CNTL" type="a5xx_address_mode"/>
+       <reg32 offset="0x0ec2" name="SP_MODE_CNTL"/> <!-- always 0000001e? -->
+       <reg32 offset="0x0ed0" name="SP_PERFCTR_SP_SEL_0"  type="a5xx_sp_perfcounter_select"/>
+       <reg32 offset="0x0ed1" name="SP_PERFCTR_SP_SEL_1"  type="a5xx_sp_perfcounter_select"/>
+       <reg32 offset="0x0ed2" name="SP_PERFCTR_SP_SEL_2"  type="a5xx_sp_perfcounter_select"/>
+       <reg32 offset="0x0ed3" name="SP_PERFCTR_SP_SEL_3"  type="a5xx_sp_perfcounter_select"/>
+       <reg32 offset="0x0ed4" name="SP_PERFCTR_SP_SEL_4"  type="a5xx_sp_perfcounter_select"/>
+       <reg32 offset="0x0ed5" name="SP_PERFCTR_SP_SEL_5"  type="a5xx_sp_perfcounter_select"/>
+       <reg32 offset="0x0ed6" name="SP_PERFCTR_SP_SEL_6"  type="a5xx_sp_perfcounter_select"/>
+       <reg32 offset="0x0ed7" name="SP_PERFCTR_SP_SEL_7"  type="a5xx_sp_perfcounter_select"/>
+       <reg32 offset="0x0ed8" name="SP_PERFCTR_SP_SEL_8"  type="a5xx_sp_perfcounter_select"/>
+       <reg32 offset="0x0ed9" name="SP_PERFCTR_SP_SEL_9"  type="a5xx_sp_perfcounter_select"/>
+       <reg32 offset="0x0eda" name="SP_PERFCTR_SP_SEL_10" type="a5xx_sp_perfcounter_select"/>
+       <reg32 offset="0x0edb" name="SP_PERFCTR_SP_SEL_11" type="a5xx_sp_perfcounter_select"/>
+       <reg32 offset="0x0edc" name="SP_POWERCTR_SP_SEL_0"/>
+       <reg32 offset="0x0edd" name="SP_POWERCTR_SP_SEL_1"/>
+       <reg32 offset="0x0ede" name="SP_POWERCTR_SP_SEL_2"/>
+       <reg32 offset="0x0edf" name="SP_POWERCTR_SP_SEL_3"/>
+
+       <reg32 offset="0x0f01" name="TPL1_ADDR_MODE_CNTL" type="a5xx_address_mode"/>
+       <reg32 offset="0x0f02" name="TPL1_MODE_CNTL"/> <!-- always 00000544? -->
+       <reg32 offset="0x0f10" name="TPL1_PERFCTR_TP_SEL_0" type="a5xx_tp_perfcounter_select"/>
+       <reg32 offset="0x0f11" name="TPL1_PERFCTR_TP_SEL_1" type="a5xx_tp_perfcounter_select"/>
+       <reg32 offset="0x0f12" name="TPL1_PERFCTR_TP_SEL_2" type="a5xx_tp_perfcounter_select"/>
+       <reg32 offset="0x0f13" name="TPL1_PERFCTR_TP_SEL_3" type="a5xx_tp_perfcounter_select"/>
+       <reg32 offset="0x0f14" name="TPL1_PERFCTR_TP_SEL_4" type="a5xx_tp_perfcounter_select"/>
+       <reg32 offset="0x0f15" name="TPL1_PERFCTR_TP_SEL_5" type="a5xx_tp_perfcounter_select"/>
+       <reg32 offset="0x0f16" name="TPL1_PERFCTR_TP_SEL_6" type="a5xx_tp_perfcounter_select"/>
+       <reg32 offset="0x0f17" name="TPL1_PERFCTR_TP_SEL_7" type="a5xx_tp_perfcounter_select"/>
+       <reg32 offset="0x0f18" name="TPL1_POWERCTR_TP_SEL_0"/>
+       <reg32 offset="0x0f19" name="TPL1_POWERCTR_TP_SEL_1"/>
+       <reg32 offset="0x0f1a" name="TPL1_POWERCTR_TP_SEL_2"/>
+       <reg32 offset="0x0f1b" name="TPL1_POWERCTR_TP_SEL_3"/>
+
+       <reg32 offset="0x3000" name="VBIF_VERSION"/>
+       <reg32 offset="0x3001" name="VBIF_CLKON"/>
+<!--
+#define A5XX_VBIF_CLKON_FORCE_ON_TESTBUS_MASK   0x1
+#define A5XX_VBIF_CLKON_FORCE_ON_TESTBUS_SHIFT  0x1
+ -->
+       <reg32 offset="0x3028" name="VBIF_ABIT_SORT"/>
+       <reg32 offset="0x3029" name="VBIF_ABIT_SORT_CONF"/>
+       <reg32 offset="0x3049" name="VBIF_ROUND_ROBIN_QOS_ARB"/>
+       <reg32 offset="0x302a" name="VBIF_GATE_OFF_WRREQ_EN"/>
+       <reg32 offset="0x302c" name="VBIF_IN_RD_LIM_CONF0"/>
+       <reg32 offset="0x302d" name="VBIF_IN_RD_LIM_CONF1"/>
+       <reg32 offset="0x3080" name="VBIF_XIN_HALT_CTRL0"/>
+<!--
+#define A5XX_VBIF_XIN_HALT_CTRL0_MASK     0xF
+#define A510_VBIF_XIN_HALT_CTRL0_MASK     0x7
+ -->
+       <reg32 offset="0x3081" name="VBIF_XIN_HALT_CTRL1"/>
+       <reg32 offset="0x3084" name="VBIF_TEST_BUS_OUT_CTRL"/>
+<!--
+#define A5XX_VBIF_TEST_BUS_OUT_CTRL_EN_MASK    0x1
+#define A5XX_VBIF_TEST_BUS_OUT_CTRL_EN_SHIFT   0x0
+ -->
+       <reg32 offset="0x3085" name="VBIF_TEST_BUS1_CTRL0"/>
+       <reg32 offset="0x3086" name="VBIF_TEST_BUS1_CTRL1"/>
+<!--
+#define A5XX_VBIF_TEST_BUS1_CTRL1_DATA_SEL_MASK  0xF
+#define A5XX_VBIF_TEST_BUS1_CTRL1_DATA_SEL_SHIFT 0x0
+ -->
+       <reg32 offset="0x3087" name="VBIF_TEST_BUS2_CTRL0"/>
+       <reg32 offset="0x3088" name="VBIF_TEST_BUS2_CTRL1"/>
+<!--
+#define A5XX_VBIF_TEST_BUS2_CTRL1_DATA_SEL_MASK     0xF
+#define A5XX_VBIF_TEST_BUS2_CTRL1_DATA_SEL_SHIFT    0x0
+ -->
+       <reg32 offset="0x308c" name="VBIF_TEST_BUS_OUT"/>
+       <reg32 offset="0x30c0" name="VBIF_PERF_CNT_EN0"/>
+       <reg32 offset="0x30c1" name="VBIF_PERF_CNT_EN1"/>
+       <reg32 offset="0x30c2" name="VBIF_PERF_CNT_EN2"/>
+       <reg32 offset="0x30c3" name="VBIF_PERF_CNT_EN3"/>
+       <reg32 offset="0x30c8" name="VBIF_PERF_CNT_CLR0"/>
+       <reg32 offset="0x30c9" name="VBIF_PERF_CNT_CLR1"/>
+       <reg32 offset="0x30ca" name="VBIF_PERF_CNT_CLR2"/>
+       <reg32 offset="0x30cb" name="VBIF_PERF_CNT_CLR3"/>
+       <reg32 offset="0x30d0" name="VBIF_PERF_CNT_SEL0" type="a5xx_vbif_perfcounter_select"/>
+       <reg32 offset="0x30d1" name="VBIF_PERF_CNT_SEL1" type="a5xx_vbif_perfcounter_select"/>
+       <reg32 offset="0x30d2" name="VBIF_PERF_CNT_SEL2" type="a5xx_vbif_perfcounter_select"/>
+       <reg32 offset="0x30d3" name="VBIF_PERF_CNT_SEL3" type="a5xx_vbif_perfcounter_select"/>
+       <reg32 offset="0x30d8" name="VBIF_PERF_CNT_LOW0"/>
+       <reg32 offset="0x30d9" name="VBIF_PERF_CNT_LOW1"/>
+       <reg32 offset="0x30da" name="VBIF_PERF_CNT_LOW2"/>
+       <reg32 offset="0x30db" name="VBIF_PERF_CNT_LOW3"/>
+       <reg32 offset="0x30e0" name="VBIF_PERF_CNT_HIGH0"/>
+       <reg32 offset="0x30e1" name="VBIF_PERF_CNT_HIGH1"/>
+       <reg32 offset="0x30e2" name="VBIF_PERF_CNT_HIGH2"/>
+       <reg32 offset="0x30e3" name="VBIF_PERF_CNT_HIGH3"/>
+       <reg32 offset="0x3100" name="VBIF_PERF_PWR_CNT_EN0"/>
+       <reg32 offset="0x3101" name="VBIF_PERF_PWR_CNT_EN1"/>
+       <reg32 offset="0x3102" name="VBIF_PERF_PWR_CNT_EN2"/>
+       <reg32 offset="0x3110" name="VBIF_PERF_PWR_CNT_LOW0"/>
+       <reg32 offset="0x3111" name="VBIF_PERF_PWR_CNT_LOW1"/>
+       <reg32 offset="0x3112" name="VBIF_PERF_PWR_CNT_LOW2"/>
+       <reg32 offset="0x3118" name="VBIF_PERF_PWR_CNT_HIGH0"/>
+       <reg32 offset="0x3119" name="VBIF_PERF_PWR_CNT_HIGH1"/>
+       <reg32 offset="0x311a" name="VBIF_PERF_PWR_CNT_HIGH2"/>
+
+       <reg32 offset="0x8800" name="GPMU_INST_RAM_BASE"/>
+       <reg32 offset="0x9800" name="GPMU_DATA_RAM_BASE"/>
+       <reg32 offset="0xa881" name="GPMU_SP_POWER_CNTL"/>
+       <reg32 offset="0xa886" name="GPMU_RBCCU_CLOCK_CNTL"/>
+       <reg32 offset="0xa887" name="GPMU_RBCCU_POWER_CNTL"/>
+       <reg32 offset="0xa88b" name="GPMU_SP_PWR_CLK_STATUS">
+               <bitfield name="PWR_ON" pos="20" type="boolean"/>
+       </reg32>
+       <reg32 offset="0xa88d" name="GPMU_RBCCU_PWR_CLK_STATUS">
+               <bitfield name="PWR_ON" pos="20" type="boolean"/>
+       </reg32>
+       <reg32 offset="0xa891" name="GPMU_PWR_COL_STAGGER_DELAY"/>
+       <reg32 offset="0xa892" name="GPMU_PWR_COL_INTER_FRAME_CTRL"/>
+       <reg32 offset="0xa893" name="GPMU_PWR_COL_INTER_FRAME_HYST"/>
+       <reg32 offset="0xa894" name="GPMU_PWR_COL_BINNING_CTRL"/>
+       <reg32 offset="0xa8c1" name="GPMU_WFI_CONFIG"/>
+       <reg32 offset="0xa8d6" name="GPMU_RBBM_INTR_INFO"/>
+       <reg32 offset="0xa8d8" name="GPMU_CM3_SYSRESET"/>
+       <reg32 offset="0xa8e0" name="GPMU_GENERAL_0"/>
+       <reg32 offset="0xa8e1" name="GPMU_GENERAL_1"/>
+
+<!--
+/* COUNTABLE FOR SP PERFCOUNTER */
+#define A5XX_SP_ALU_ACTIVE_CYCLES          0x1
+#define A5XX_SP0_ICL1_MISSES               0x35
+#define A5XX_SP_FS_CFLOW_INSTRUCTIONS      0x27
+
+/* COUNTABLE FOR TSE PERFCOUNTER */
+#define A5XX_TSE_INPUT_PRIM_NUM            0x6
+ -->
+       <reg32 offset="0xa840" name="SP_POWER_COUNTER_0_LO"/>
+       <reg32 offset="0xa841" name="SP_POWER_COUNTER_0_HI"/>
+       <reg32 offset="0xa842" name="SP_POWER_COUNTER_1_LO"/>
+       <reg32 offset="0xa843" name="SP_POWER_COUNTER_1_HI"/>
+       <reg32 offset="0xa844" name="SP_POWER_COUNTER_2_LO"/>
+       <reg32 offset="0xa845" name="SP_POWER_COUNTER_2_HI"/>
+       <reg32 offset="0xa846" name="SP_POWER_COUNTER_3_LO"/>
+       <reg32 offset="0xa847" name="SP_POWER_COUNTER_3_HI"/>
+       <reg32 offset="0xa848" name="TP_POWER_COUNTER_0_LO"/>
+       <reg32 offset="0xa849" name="TP_POWER_COUNTER_0_HI"/>
+       <reg32 offset="0xa84a" name="TP_POWER_COUNTER_1_LO"/>
+       <reg32 offset="0xa84b" name="TP_POWER_COUNTER_1_HI"/>
+       <reg32 offset="0xa84c" name="TP_POWER_COUNTER_2_LO"/>
+       <reg32 offset="0xa84d" name="TP_POWER_COUNTER_2_HI"/>
+       <reg32 offset="0xa84e" name="TP_POWER_COUNTER_3_LO"/>
+       <reg32 offset="0xa84f" name="TP_POWER_COUNTER_3_HI"/>
+       <reg32 offset="0xa850" name="RB_POWER_COUNTER_0_LO"/>
+       <reg32 offset="0xa851" name="RB_POWER_COUNTER_0_HI"/>
+       <reg32 offset="0xa852" name="RB_POWER_COUNTER_1_LO"/>
+       <reg32 offset="0xa853" name="RB_POWER_COUNTER_1_HI"/>
+       <reg32 offset="0xa854" name="RB_POWER_COUNTER_2_LO"/>
+       <reg32 offset="0xa855" name="RB_POWER_COUNTER_2_HI"/>
+       <reg32 offset="0xa856" name="RB_POWER_COUNTER_3_LO"/>
+       <reg32 offset="0xa857" name="RB_POWER_COUNTER_3_HI"/>
+       <reg32 offset="0xa858" name="CCU_POWER_COUNTER_0_LO"/>
+       <reg32 offset="0xa859" name="CCU_POWER_COUNTER_0_HI"/>
+       <reg32 offset="0xa85a" name="CCU_POWER_COUNTER_1_LO"/>
+       <reg32 offset="0xa85b" name="CCU_POWER_COUNTER_1_HI"/>
+       <reg32 offset="0xa85c" name="UCHE_POWER_COUNTER_0_LO"/>
+       <reg32 offset="0xa85d" name="UCHE_POWER_COUNTER_0_HI"/>
+       <reg32 offset="0xa85e" name="UCHE_POWER_COUNTER_1_LO"/>
+       <reg32 offset="0xa85f" name="UCHE_POWER_COUNTER_1_HI"/>
+       <reg32 offset="0xa860" name="UCHE_POWER_COUNTER_2_LO"/>
+       <reg32 offset="0xa861" name="UCHE_POWER_COUNTER_2_HI"/>
+       <reg32 offset="0xa862" name="UCHE_POWER_COUNTER_3_LO"/>
+       <reg32 offset="0xa863" name="UCHE_POWER_COUNTER_3_HI"/>
+       <reg32 offset="0xa864" name="CP_POWER_COUNTER_0_LO"/>
+       <reg32 offset="0xa865" name="CP_POWER_COUNTER_0_HI"/>
+       <reg32 offset="0xa866" name="CP_POWER_COUNTER_1_LO"/>
+       <reg32 offset="0xa867" name="CP_POWER_COUNTER_1_HI"/>
+       <reg32 offset="0xa868" name="CP_POWER_COUNTER_2_LO"/>
+       <reg32 offset="0xa869" name="CP_POWER_COUNTER_2_HI"/>
+       <reg32 offset="0xa86a" name="CP_POWER_COUNTER_3_LO"/>
+       <reg32 offset="0xa86b" name="CP_POWER_COUNTER_3_HI"/>
+       <reg32 offset="0xa86c" name="GPMU_POWER_COUNTER_0_LO"/>
+       <reg32 offset="0xa86d" name="GPMU_POWER_COUNTER_0_HI"/>
+       <reg32 offset="0xa86e" name="GPMU_POWER_COUNTER_1_LO"/>
+       <reg32 offset="0xa86f" name="GPMU_POWER_COUNTER_1_HI"/>
+       <reg32 offset="0xa870" name="GPMU_POWER_COUNTER_2_LO"/>
+       <reg32 offset="0xa871" name="GPMU_POWER_COUNTER_2_HI"/>
+       <reg32 offset="0xa872" name="GPMU_POWER_COUNTER_3_LO"/>
+       <reg32 offset="0xa873" name="GPMU_POWER_COUNTER_3_HI"/>
+       <reg32 offset="0xa874" name="GPMU_POWER_COUNTER_4_LO"/>
+       <reg32 offset="0xa875" name="GPMU_POWER_COUNTER_4_HI"/>
+       <reg32 offset="0xa876" name="GPMU_POWER_COUNTER_5_LO"/>
+       <reg32 offset="0xa877" name="GPMU_POWER_COUNTER_5_HI"/>
+       <reg32 offset="0xa878" name="GPMU_POWER_COUNTER_ENABLE"/>
+       <reg32 offset="0xa879" name="GPMU_ALWAYS_ON_COUNTER_LO"/>
+       <reg32 offset="0xa87a" name="GPMU_ALWAYS_ON_COUNTER_HI"/>
+       <reg32 offset="0xa87b" name="GPMU_ALWAYS_ON_COUNTER_RESET"/>
+       <reg32 offset="0xa87c" name="GPMU_POWER_COUNTER_SELECT_0"/>
+       <reg32 offset="0xa87d" name="GPMU_POWER_COUNTER_SELECT_1"/>
+       <reg32 offset="0xa8a3" name="GPMU_CLOCK_THROTTLE_CTRL"/>
+       <reg32 offset="0xa8a8" name="GPMU_THROTTLE_UNMASK_FORCE_CTRL"/>
+       <reg32 offset="0xac00" name="GPMU_TEMP_SENSOR_ID"/>
+       <reg32 offset="0xac01" name="GPMU_TEMP_SENSOR_CONFIG"/>
+       <reg32 offset="0xac02" name="GPMU_TEMP_VAL"/>
+       <reg32 offset="0xac03" name="GPMU_DELTA_TEMP_THRESHOLD"/>
+       <reg32 offset="0xac05" name="GPMU_TEMP_THRESHOLD_INTR_STATUS"/>
+       <reg32 offset="0xac06" name="GPMU_TEMP_THRESHOLD_INTR_EN_MASK"/>
+       <reg32 offset="0xac40" name="GPMU_LEAKAGE_TEMP_COEFF_0_1"/>
+       <reg32 offset="0xac41" name="GPMU_LEAKAGE_TEMP_COEFF_2_3"/>
+       <reg32 offset="0xac42" name="GPMU_LEAKAGE_VTG_COEFF_0_1"/>
+       <reg32 offset="0xac43" name="GPMU_LEAKAGE_VTG_COEFF_2_3"/>
+       <reg32 offset="0xac46" name="GPMU_BASE_LEAKAGE"/>
+       <reg32 offset="0xac60" name="GPMU_GPMU_VOLTAGE"/>
+       <reg32 offset="0xac61" name="GPMU_GPMU_VOLTAGE_INTR_STATUS"/>
+       <reg32 offset="0xac62" name="GPMU_GPMU_VOLTAGE_INTR_EN_MASK"/>
+       <reg32 offset="0xac80" name="GPMU_GPMU_PWR_THRESHOLD"/>
+       <reg32 offset="0xacc4" name="GPMU_GPMU_LLM_GLM_SLEEP_CTRL"/>
+       <reg32 offset="0xacc5" name="GPMU_GPMU_LLM_GLM_SLEEP_STATUS"/>
+       <reg32 offset="0xb80c" name="GDPM_CONFIG1"/>
+       <reg32 offset="0xb80d" name="GDPM_CONFIG2"/>
+       <reg32 offset="0xb80f" name="GDPM_INT_EN"/>
+       <reg32 offset="0xb811" name="GDPM_INT_MASK"/>
+       <reg32 offset="0xb9a0" name="GPMU_BEC_ENABLE"/>
+       <reg32 offset="0xc41a" name="GPU_CS_SENSOR_GENERAL_STATUS"/>
+       <reg32 offset="0xc41d" name="GPU_CS_AMP_CALIBRATION_STATUS1_0"/>
+       <reg32 offset="0xc41f" name="GPU_CS_AMP_CALIBRATION_STATUS1_2"/>
+       <reg32 offset="0xc421" name="GPU_CS_AMP_CALIBRATION_STATUS1_4"/>
+       <reg32 offset="0xc520" name="GPU_CS_ENABLE_REG"/>
+       <reg32 offset="0xc557" name="GPU_CS_AMP_CALIBRATION_CONTROL1"/>
+
+
+       <reg32 offset="0xe000" name="GRAS_CL_CNTL">
+               <bitfield name="ZERO_GB_SCALE_Z" pos="6" type="boolean"/>
+       </reg32>
+       <reg32 offset="0xe001" name="UNKNOWN_E001"/> <!-- always 00000000? -->
+       <reg32 offset="0xe004" name="UNKNOWN_E004"/> <!-- always 00000000? -->
+       <reg32 offset="0xe005" name="GRAS_CNTL">
+               <!-- see also RB_RENDER_CONTROL0 -->
+               <bitfield name="IJ_PERSP_PIXEL" pos="0" type="boolean"/>
+               <bitfield name="IJ_PERSP_CENTROID" pos="1" type="boolean"/>
+               <bitfield name="IJ_PERSP_SAMPLE" pos="2" type="boolean"/>
+               <!--
+               bit 3 set when blob turns on WCOORD.. which also corresponds to
+               register being set in in HLSQ_CONTROL_3_REG bits 8..15 (which
+               shader does not use).. possibly providing wcoord in an alternate
+               way??
+               Also, when that happens, VARYING bits are turned on as well.
+                -->
+               <bitfield name="SIZE" pos="3" type="boolean"/>
+               <bitfield name="COORD_MASK" low="6" high="9" type="hex"/>
+       </reg32>
+       <reg32 offset="0xe006" name="GRAS_CL_GUARDBAND_CLIP_ADJ">
+               <bitfield name="HORZ" low="0" high="9" type="uint"/>
+               <bitfield name="VERT" low="10" high="19" type="uint"/>
+       </reg32>
+       <reg32 offset="0xe010" name="GRAS_CL_VPORT_XOFFSET_0" type="float"/>
+       <reg32 offset="0xe011" name="GRAS_CL_VPORT_XSCALE_0" type="float"/>
+       <reg32 offset="0xe012" name="GRAS_CL_VPORT_YOFFSET_0" type="float"/>
+       <reg32 offset="0xe013" name="GRAS_CL_VPORT_YSCALE_0" type="float"/>
+       <reg32 offset="0xe014" name="GRAS_CL_VPORT_ZOFFSET_0" type="float"/>
+       <reg32 offset="0xe015" name="GRAS_CL_VPORT_ZSCALE_0" type="float"/>
+       <reg32 offset="0xe090" name="GRAS_SU_CNTL">
+               <bitfield name="CULL_FRONT" pos="0" type="boolean"/>
+               <bitfield name="CULL_BACK" pos="1" type="boolean"/>
+               <bitfield name="FRONT_CW" pos="2" type="boolean"/>
+               <bitfield name="LINEHALFWIDTH" low="3" high="10" radix="2" type="fixed"/>
+               <bitfield name="POLY_OFFSET" pos="11" type="boolean"/>
+               <bitfield name="MSAA_ENABLE" pos="13" type="boolean"/>
+               <!-- probably LINEHALFWIDTH is the same as a4xx.. -->
+       </reg32>
+       <reg32 offset="0xe091" name="GRAS_SU_POINT_MINMAX">
+               <bitfield name="MIN" low="0" high="15" type="ufixed" radix="4"/>
+               <bitfield name="MAX" low="16" high="31" type="ufixed" radix="4"/>
+       </reg32>
+       <reg32 offset="0xe092" name="GRAS_SU_POINT_SIZE" type="fixed" radix="4"/>
+       <reg32 offset="0xe093" name="GRAS_SU_LAYERED"/>
+       <reg32 offset="0xe094" name="GRAS_SU_DEPTH_PLANE_CNTL">
+               <bitfield name="FRAG_WRITES_Z" pos="0" type="boolean"/>
+               <bitfield name="UNK1" pos="1" type="boolean"/>
+       </reg32>
+       <reg32 offset="0xe095" name="GRAS_SU_POLY_OFFSET_SCALE" type="float"/>
+       <reg32 offset="0xe096" name="GRAS_SU_POLY_OFFSET_OFFSET" type="float"/>
+       <reg32 offset="0xe097" name="GRAS_SU_POLY_OFFSET_OFFSET_CLAMP" type="float"/>
+       <!-- duplicates RB_DEPTH_INFO0: -->
+       <reg32 offset="0xe098" name="GRAS_SU_DEPTH_BUFFER_INFO">
+               <bitfield name="DEPTH_FORMAT" low="0" high="2" type="a5xx_depth_format"/>
+       </reg32>
+       <reg32 offset="0xe099" name="GRAS_SU_CONSERVATIVE_RAS_CNTL"/> <!-- always 00000000? -->
+       <!--
+       guessing about window/screen/extent, I think they can in the end be
+       used interchangeably?
+        -->
+       <reg32 offset="0xe0a0" name="GRAS_SC_CNTL">
+               <bitfield name="BINNING_PASS" pos="0" type="boolean"/>
+               <bitfield name="SAMPLES_PASSED" pos="15" type="boolean"/>
+       </reg32>
+       <!-- note, 0x4 for binning pass when frag writes z?? -->
+       <reg32 offset="0xe0a1" name="GRAS_SC_BIN_CNTL"/> <!-- always 00000000? -->
+       <reg32 offset="0xe0a2" name="GRAS_SC_RAS_MSAA_CNTL">
+               <bitfield name="SAMPLES" low="0" high="1" type="a3xx_msaa_samples"/>
+       </reg32>
+       <reg32 offset="0xe0a3" name="GRAS_SC_DEST_MSAA_CNTL">
+               <bitfield name="SAMPLES" low="0" high="1" type="a3xx_msaa_samples"/>
+               <bitfield name="MSAA_DISABLE" pos="2" type="boolean"/>
+       </reg32>
+       <reg32 offset="0xe0a4" name="GRAS_SC_SCREEN_SCISSOR_CNTL"/> <!-- always 00000000? -->
+       <reg32 offset="0xe0aa" name="GRAS_SC_SCREEN_SCISSOR_TL_0" type="adreno_reg_xy"/>
+       <reg32 offset="0xe0ab" name="GRAS_SC_SCREEN_SCISSOR_BR_0" type="adreno_reg_xy"/>
+       <reg32 offset="0xe0ca" name="GRAS_SC_VIEWPORT_SCISSOR_TL_0" type="adreno_reg_xy"/>
+       <reg32 offset="0xe0cb" name="GRAS_SC_VIEWPORT_SCISSOR_BR_0" type="adreno_reg_xy"/>
+       <reg32 offset="0xe0ea" name="GRAS_SC_WINDOW_SCISSOR_TL" type="adreno_reg_xy"/>
+       <reg32 offset="0xe0eb" name="GRAS_SC_WINDOW_SCISSOR_BR" type="adreno_reg_xy"/>
+
+       <doc>
+               LRZ:  (Low Resolution Z ??)
+               ----
+
+               I think it serves two functions, early discard of primitives in binning
+               pass without needing full resolution depth buffer, and also functions as
+               a depth-prepass, used during the GMEM draws to discard primitives that
+               would not be visible due to later draws.
+
+               The LRZ buffer always seems to be z16 format, regardless of actual
+               depth buffer format.
+
+               Note that LRZ write should be disabled when blend/stencil/etc is enabled,
+               since the occluded primitive can still contribute to final color value
+               of a fragment.
+
+               Only enabled for GL_LESS/GL_LEQUAL/GL_GREATER/GL_GEQUAL?
+       </doc>
+       <reg32 offset="0xe100" name="GRAS_LRZ_CNTL">
+               <bitfield name="ENABLE" pos="0" type="boolean"/>
+               <doc>LRZ write also disabled for blend/etc.</doc>
+               <bitfield name="LRZ_WRITE" pos="1" type="boolean"/>
+               <doc>update MAX instead of MIN value, ie. GL_GREATER/GL_GEQUAL</doc>
+               <bitfield name="GREATER" pos="2" type="boolean"/>
+               <!--
+               b3 set sometimes, when depth buffer isn't cleared.. maybe it
+               invalidates the LRZ buffer?  (Or just the covered positions?
+                -->
+       </reg32>
+       <reg32 offset="0xe101" name="GRAS_LRZ_BUFFER_BASE_LO"/>
+       <reg32 offset="0xe102" name="GRAS_LRZ_BUFFER_BASE_HI"/>
+       <!--
+       lzr pitch is depth pitch (in pixels) / 8 (aligned to 32)..
+        -->
+       <doc>
+               Pitch is depth width (in pixels) / 8 (aligned to 32).  Height
+               is also divided by 8 (ie. covers 8x8 pixels)
+       </doc>
+       <reg32 offset="0xe103" name="GRAS_LRZ_BUFFER_PITCH" shr="5" type="uint"/>
+       <reg32 offset="0xe104" name="GRAS_LRZ_FAST_CLEAR_BUFFER_BASE_LO"/>
+       <reg32 offset="0xe105" name="GRAS_LRZ_FAST_CLEAR_BUFFER_BASE_HI"/>
+
+       <reg32 offset="0xe140" name="RB_CNTL">
+               <bitfield name="WIDTH" low="0" high="7" shr="5" type="uint"/>
+               <bitfield name="HEIGHT" low="9" high="16" shr="5" type="uint"/>
+               <bitfield name="BYPASS" pos="17" type="boolean"/>
+       </reg32>
+       <reg32 offset="0xe141" name="RB_RENDER_CNTL">
+<!--
+bit 3 set for normal draws
+bit 7 for RECTLIST (clear) when z32s8 (used for clear of depth32?  not set
+       for z32 with no stencil, but maybe in that case separate z/s not used?
+       see mrt-fbo-* zs=2)
+ -->
+               <bitfield name="BINNING_PASS" pos="0" type="boolean"/>
+               <bitfield name="SAMPLES_PASSED" pos="6" type="boolean"/>
+               <bitfield name="DISABLE_COLOR_PIPE" pos="7" type="boolean"/>
+               <!-- why everything twice?? maybe read vs write? -->
+               <!-- UBWC flag buffer enabled for depth/stencil: -->
+               <bitfield name="FLAG_DEPTH" pos="14" type="boolean"/>
+               <bitfield name="FLAG_DEPTH2" pos="15" type="boolean"/>
+               <!-- bitmask of MRTs using UBWC flag buffer: -->
+               <bitfield name="FLAG_MRTS" low="16" high="23"/>
+               <bitfield name="FLAG_MRTS2" low="24" high="31"/>
+       </reg32>
+       <reg32 offset="0xe142" name="RB_RAS_MSAA_CNTL">
+               <bitfield name="SAMPLES" low="0" high="1" type="a3xx_msaa_samples"/>
+       </reg32>
+       <reg32 offset="0xe143" name="RB_DEST_MSAA_CNTL">
+               <bitfield name="SAMPLES" low="0" high="1" type="a3xx_msaa_samples"/>
+               <bitfield name="MSAA_DISABLE" pos="2" type="boolean"/>
+       </reg32>
+       <!--
+       note: maybe not actually called RB_RENDER_CONTROLn (since RB_RENDER_CNTL
+       name comes from kernel and is probably right)
+        -->
+       <reg32 offset="0xe144" name="RB_RENDER_CONTROL0">
+               <!-- see also GRAS_CNTL -->
+               <bitfield name="IJ_PERSP_PIXEL" pos="0" type="boolean"/>
+               <bitfield name="IJ_PERSP_CENTROID" pos="1" type="boolean"/>
+               <bitfield name="IJ_PERSP_SAMPLE" pos="2" type="boolean"/>
+               <!--
+               bit 3 set when blob turns on WCOORD.. which also corresponds to
+               register being set in in HLSQ_CONTROL_3_REG bits 8..15 (which
+               shader does not use).. possibly providing wcoord in an alternate
+               way??
+               Also, when that happens, VARYING bits are turned on as well.
+                -->
+               <bitfield name="SIZE" pos="3" type="boolean"/>
+               <bitfield name="COORD_MASK" low="6" high="9" type="hex"/>
+       </reg32>
+       <reg32 offset="0xe145" name="RB_RENDER_CONTROL1">
+               <bitfield name="SAMPLEMASK" pos="0" type="boolean"/>
+               <bitfield name="FACENESS" pos="1" type="boolean"/>
+               <bitfield name="SAMPLEID" pos="2" type="boolean"/>
+       </reg32>
+       <reg32 offset="0xe146" name="RB_FS_OUTPUT_CNTL">
+               <!-- bit0 set except for binning pass.. -->
+               <bitfield name="MRT" low="0" high="3" type="uint"/>
+               <bitfield name="FRAG_WRITES_Z" pos="5" type="boolean"/>
+       </reg32>
+       <reg32 offset="0xe147" name="RB_RENDER_COMPONENTS">
+               <bitfield name="RT0" low="0" high="3"/>
+               <bitfield name="RT1" low="4" high="7"/>
+               <bitfield name="RT2" low="8" high="11"/>
+               <bitfield name="RT3" low="12" high="15"/>
+               <bitfield name="RT4" low="16" high="19"/>
+               <bitfield name="RT5" low="20" high="23"/>
+               <bitfield name="RT6" low="24" high="27"/>
+               <bitfield name="RT7" low="28" high="31"/>
+       </reg32>
+       <array offset="0xe150" name="RB_MRT" stride="7" length="8">
+               <reg32 offset="0x0" name="CONTROL">
+                       <bitfield name="BLEND" pos="0" type="boolean"/>
+                       <bitfield name="BLEND2" pos="1" type="boolean"/>
+                       <bitfield name="ROP_ENABLE" pos="2" type="boolean"/>
+                       <bitfield name="ROP_CODE" low="3" high="6" type="a3xx_rop_code"/>
+                       <bitfield name="COMPONENT_ENABLE" low="7" high="10" type="hex"/>
+               </reg32>
+               <reg32 offset="0x1" name="BLEND_CONTROL">
+                       <bitfield name="RGB_SRC_FACTOR" low="0" high="4" type="adreno_rb_blend_factor"/>
+                       <bitfield name="RGB_BLEND_OPCODE" low="5" high="7" type="a3xx_rb_blend_opcode"/>
+                       <bitfield name="RGB_DEST_FACTOR" low="8" high="12" type="adreno_rb_blend_factor"/>
+                       <bitfield name="ALPHA_SRC_FACTOR" low="16" high="20" type="adreno_rb_blend_factor"/>
+                       <bitfield name="ALPHA_BLEND_OPCODE" low="21" high="23" type="a3xx_rb_blend_opcode"/>
+                       <bitfield name="ALPHA_DEST_FACTOR" low="24" high="28" type="adreno_rb_blend_factor"/>
+               </reg32>
+               <reg32 offset="0x2" name="BUF_INFO">
+                       <!--
+                       not sure if there is a separate COLOR_SWAP field like on a3xx/a4xx,
+                       or if it is inherent in the format.  Will have to play with bits
+                       once we get things working and see what happens.  If it is a diff
+                       field, it doesn't seem to have the same encoding as a3xx/a4xx.
+                        -->
+                       <bitfield name="COLOR_FORMAT" low="0" high="7" type="a5xx_color_fmt"/>
+                       <bitfield name="COLOR_TILE_MODE" low="8" high="9" type="a5xx_tile_mode"/>
+                       <bitfield name="DITHER_MODE" low="11" high="12" type="adreno_rb_dither_mode"/>
+                       <bitfield name="COLOR_SWAP" low="13" high="14" type="a3xx_color_swap"/>
+                       <bitfield name="COLOR_SRGB" pos="15" type="boolean"/>
+               </reg32>
+               <!--
+               at least in gmem, things seem to be aligned to pitch of 64..
+               maybe an artifact of tiled format used in gmem?
+                -->
+               <reg32 offset="0x3" name="PITCH" shr="6" type="uint"/>
+               <reg32 offset="0x4" name="ARRAY_PITCH" shr="6" type="uint"/>
+               <reg32 offset="0x5" name="BASE_LO"/>
+               <reg32 offset="0x6" name="BASE_HI"/>
+       </array>
+       <reg32 offset="0xe1a0" name="RB_BLEND_RED">
+               <bitfield name="UINT" low="0" high="7" type="hex"/>
+               <bitfield name="SINT" low="8" high="15" type="hex"/>
+               <bitfield name="FLOAT" low="16" high="31" type="float"/>
+       </reg32>
+       <reg32 offset="0xe1a1" name="RB_BLEND_RED_F32" type="float"/>
+       <reg32 offset="0xe1a2" name="RB_BLEND_GREEN">
+               <bitfield name="UINT" low="0" high="7" type="hex"/>
+               <bitfield name="SINT" low="8" high="15" type="hex"/>
+               <bitfield name="FLOAT" low="16" high="31" type="float"/>
+       </reg32>
+       <reg32 offset="0xe1a3" name="RB_BLEND_GREEN_F32" type="float"/>
+       <reg32 offset="0xe1a4" name="RB_BLEND_BLUE">
+               <bitfield name="UINT" low="0" high="7" type="hex"/>
+               <bitfield name="SINT" low="8" high="15" type="hex"/>
+               <bitfield name="FLOAT" low="16" high="31" type="float"/>
+       </reg32>
+       <reg32 offset="0xe1a5" name="RB_BLEND_BLUE_F32" type="float"/>
+       <reg32 offset="0xe1a6" name="RB_BLEND_ALPHA">
+               <bitfield name="UINT" low="0" high="7" type="hex"/>
+               <bitfield name="SINT" low="8" high="15" type="hex"/>
+               <bitfield name="FLOAT" low="16" high="31" type="float"/>
+       </reg32>
+       <reg32 offset="0xe1a7" name="RB_BLEND_ALPHA_F32" type="float"/>
+       <reg32 offset="0xe1a8" name="RB_ALPHA_CONTROL">
+               <bitfield name="ALPHA_REF" low="0" high="7" type="hex"/>
+               <bitfield name="ALPHA_TEST" pos="8" type="boolean"/>
+               <bitfield name="ALPHA_TEST_FUNC" low="9" high="11" type="adreno_compare_func"/>
+       </reg32>
+       <reg32 offset="0xe1a9" name="RB_BLEND_CNTL">
+               <!-- per-mrt enable bit -->
+               <bitfield name="ENABLE_BLEND" low="0" high="7"/>
+               <bitfield name="INDEPENDENT_BLEND" pos="8" type="boolean"/>
+               <bitfield name="ALPHA_TO_COVERAGE" pos="10" type="boolean"/>
+               <!-- a guess? -->
+               <bitfield name="SAMPLE_MASK" low="16" high="31"/>
+       </reg32>
+       <reg32 offset="0xe1b0" name="RB_DEPTH_PLANE_CNTL">
+               <bitfield name="FRAG_WRITES_Z" pos="0" type="boolean"/>
+               <bitfield name="UNK1" pos="1" type="boolean"/>
+       </reg32>
+       <reg32 offset="0xe1b1" name="RB_DEPTH_CNTL">
+               <bitfield name="Z_ENABLE" pos="0" type="boolean"/>
+               <bitfield name="Z_WRITE_ENABLE" pos="1" type="boolean"/>
+               <bitfield name="ZFUNC" low="2" high="4" type="adreno_compare_func"/>
+               <doc>Z_TEST_ENABLE bit is set for zfunc other than GL_ALWAYS or GL_NEVER</doc>
+               <bitfield name="Z_TEST_ENABLE" pos="6" type="boolean"/>
+       </reg32>
+       <reg32 offset="0xe1b2" name="RB_DEPTH_BUFFER_INFO">
+               <bitfield name="DEPTH_FORMAT" low="0" high="2" type="a5xx_depth_format"/>
+       </reg32>
+       <reg32 offset="0xe1b3" name="RB_DEPTH_BUFFER_BASE_LO"/>
+       <reg32 offset="0xe1b4" name="RB_DEPTH_BUFFER_BASE_HI"/>
+       <reg32 offset="0xe1b5" name="RB_DEPTH_BUFFER_PITCH" shr="6" type="uint">
+               <doc>stride of depth/stencil buffer</doc>
+       </reg32>
+       <reg32 offset="0xe1b6" name="RB_DEPTH_BUFFER_ARRAY_PITCH" shr="6" type="uint">
+               <doc>size of layer</doc>
+       </reg32>
+       <reg32 offset="0xe1c0" name="RB_STENCIL_CONTROL">
+               <bitfield name="STENCIL_ENABLE" pos="0" type="boolean"/>
+               <bitfield name="STENCIL_ENABLE_BF" pos="1" type="boolean"/>
+               <!--
+                       set for stencil operations that require read from stencil
+                       buffer, but not for example for stencil clear (which does
+                       not require read).. so guessing this is analogous to
+                       READ_DEST_ENABLE for color buffer..
+                -->
+               <bitfield name="STENCIL_READ" pos="2" type="boolean"/>
+               <bitfield name="FUNC" low="8" high="10" type="adreno_compare_func"/>
+               <bitfield name="FAIL" low="11" high="13" type="adreno_stencil_op"/>
+               <bitfield name="ZPASS" low="14" high="16" type="adreno_stencil_op"/>
+               <bitfield name="ZFAIL" low="17" high="19" type="adreno_stencil_op"/>
+               <bitfield name="FUNC_BF" low="20" high="22" type="adreno_compare_func"/>
+               <bitfield name="FAIL_BF" low="23" high="25" type="adreno_stencil_op"/>
+               <bitfield name="ZPASS_BF" low="26" high="28" type="adreno_stencil_op"/>
+               <bitfield name="ZFAIL_BF" low="29" high="31" type="adreno_stencil_op"/>
+       </reg32>
+       <reg32 offset="0xe1c1" name="RB_STENCIL_INFO">
+               <bitfield name="SEPARATE_STENCIL" pos="0" type="boolean"/>
+       </reg32>
+       <reg32 offset="0xe1c2" name="RB_STENCIL_BASE_LO"/>
+       <reg32 offset="0xe1c3" name="RB_STENCIL_BASE_HI"/>
+       <reg32 offset="0xe1c4" name="RB_STENCIL_PITCH" shr="6" type="uint"/>
+       <reg32 offset="0xe1c5" name="RB_STENCIL_ARRAY_PITCH" shr="6" type="uint"/>
+       <reg32 offset="0xe1c6" name="RB_STENCILREFMASK" type="adreno_rb_stencilrefmask"/>
+       <reg32 offset="0xe1c7" name="RB_STENCILREFMASK_BF" type="adreno_rb_stencilrefmask"/>
+       <reg32 offset="0xe1d0" name="RB_WINDOW_OFFSET" type="adreno_reg_xy"/>
+       <reg32 offset="0xe1d1" name="RB_SAMPLE_COUNT_CONTROL">
+               <bitfield name="COPY" pos="1" type="boolean"/>
+       </reg32>
+
+       <doc>
+               Blits:
+               ------
+
+               Blits are triggered by CP_EVENT_WRITE:BLIT, compared to previous
+               generations where they shared most of the gl pipeline and were
+               triggered by CP_DRAW_INDX*
+
+               For gmem->mem blob uses RB_BLIT_CNTL.BUF to specify src of
+               blit (ie MRTn, ZS, etc) and RB_BLIT_DST_LO/HI for destination
+               gpuaddr.  The gmem offset is taken from RB_MRT[n].BASE_LO/HI
+
+               For mem->gmem blob uses just MRT0 or ZS and RB_BLIT_DST_LO/HI
+               for the GMEM offset, and gpuaddr from RB_MRT[0].BASE_LO/HI
+               (I suppose this is just to avoid trashing RB_MRT[1..7]??)
+       </doc>
+       <reg32 offset="0xe210" name="RB_BLIT_CNTL">
+               <bitfield name="BUF" low="0" high="3" type="a5xx_blit_buf"/>
+       </reg32>
+       <reg32 offset="0xe211" name="RB_RESOLVE_CNTL_1" type="adreno_reg_xy"/>
+       <reg32 offset="0xe212" name="RB_RESOLVE_CNTL_2" type="adreno_reg_xy"/>
+       <reg32 offset="0xe213" name="RB_RESOLVE_CNTL_3">
+               <!-- if b0 set, output is in TILE5_3 format -->
+               <bitfield name="TILED" pos="0" type="boolean"/>
+       <!--
+               0xe213:
+                       0x0 mem->gmem
+                       0xf gmem->mem with flag buffer (color)
+                       0x4 gmem->mem without flag buffer (color)
+                       0x7 BYPASS mode flag buffer result (ie. on readpix)
+                           also for gmem->mem preserving tiling
+       -->
+       </reg32>
+       <reg32 offset="0xe214" name="RB_BLIT_DST_LO"/>
+       <reg32 offset="0xe215" name="RB_BLIT_DST_HI"/>
+       <reg32 offset="0xe216" name="RB_BLIT_DST_PITCH" shr="6" type="uint"/>
+       <!-- array-pitch is size of layer -->
+       <reg32 offset="0xe217" name="RB_BLIT_DST_ARRAY_PITCH" shr="6" type="uint"/>
+       <reg32 offset="0xe218" name="RB_CLEAR_COLOR_DW0"/>
+       <reg32 offset="0xe219" name="RB_CLEAR_COLOR_DW1"/>
+       <reg32 offset="0xe21a" name="RB_CLEAR_COLOR_DW2"/>
+       <reg32 offset="0xe21b" name="RB_CLEAR_COLOR_DW3"/>
+       <reg32 offset="0xe21c" name="RB_CLEAR_CNTL">
+               <bitfield name="FAST_CLEAR" pos="1" type="boolean"/>
+               <bitfield name="MSAA_RESOLVE" pos="2" type="boolean"/>
+               <doc>
+                       For MASK, if RB_BLIT_CNTL.BUF=BLIT_ZS:
+                               1 - depth
+                               2 - stencil
+                               3 - depth+stencil
+                       if RB_BLIT_CNTL.BUF=BLIT_MRTn
+                               then probably a component mask, I always see 0xf
+               </doc>
+               <bitfield name="MASK" low="4" high="7"/>
+       </reg32>
+
+       <doc>
+               Buffer Metadata (flag buffers):
+               -------------------------------
+
+               Blob seems to stick some metadata at the front of the buffer,
+               both z/s and MRT.  I think this is same as UBWC (bandwidth
+               compression) metadata that mdp 1.7 and later supports.  See
+               1d3fae5698ce5358caab87a15383b690941697e8 in downstream kernel.
+               UBWC seems to stand for "universal bandwidth compression".
+
+               Before glReadPixels() it does a pair of BYPASS blits (at least
+               if metadata is used) presumably to resolve metadata.
+
+               NOTES: see: getUBwcBlockSize(), getUBwcMetaBufferSize() at
+               https://android.googlesource.com/platform/hardware/qcom/display/+/android-6.0.1_r40/msm8994/libgralloc/alloc_controller.cpp
+               (note that bpp in bytes, not bits, so really cpp)
+
+               Example Layout 2d w/ mipmap levels:
+
+                       100x2000, ifmt=GL_RG, fmt=GL_RG16F, type=GL_FLOAT, meta=64x512@0x8000 (7x500)
+                               base=c072e000, offset=16384, size=1703936
+
+                               color           flags
+                       0       c073a000        c0732000        - level 0 flags is address
+                       1       c0838000        c0834000          programmed in texture state
+                       2       c0879000        c0877000
+                       3       c089a000        c0899000
+                       4       c08ab000        c08aa000
+                       5       c08b4000        c08b3000
+                       6       c08b9000        c08b8000
+                       7       c08bc000        c08bb000
+                       8       c08be000        c08bd000
+                       9       c08c0000        c08bf000
+                       10      c08c2000        c08c1000
+
+               ARRAY_PITCH is the combined size of all the levels plus flags,
+               so 0xc08c3000 - 0xc0732000 = 0x00191000 (1642496); each level
+               takes up a minimum of 2 pages (since color and flags parts are
+               each page aligned.
+
+                       { TILE_MODE = TILE5_3 | SWIZ_X = A5XX_TEX_X | SWIZ_Y = A5XX_TEX_Y | SWIZ_Z = A5XX_TEX_ZERO | SWIZ_W = A5XX_TEX_ONE | MIPLVLS = 0 | FMT = TFMT5_16_16_FLOAT | SWAP = WZYX }
+                       { WIDTH = 100 | HEIGHT = 2000 }
+                       { FETCHSIZE = TFETCH5_4_BYTE | PITCH = 512 | TYPE = A5XX_TEX_2D }
+                       { ARRAY_PITCH = 1642496 | 0x18800000 }  - NOTE c2dc always has 0x18800000 but
+                       { BASE_LO = 0xc0732000 }                  this varies for blob gles driver..
+                       { BASE_HI = 0 | DEPTH = 1 }               not sure what it is
+
+
+       </doc>
+       <reg32 offset="0xe240" name="RB_DEPTH_FLAG_BUFFER_BASE_LO"/>
+       <reg32 offset="0xe241" name="RB_DEPTH_FLAG_BUFFER_BASE_HI"/>
+       <reg32 offset="0xe242" name="RB_DEPTH_FLAG_BUFFER_PITCH">
+       </reg32>
+       <array offset="0xe243" name="RB_MRT_FLAG_BUFFER" stride="4" length="8">
+               <reg32 offset="0" name="ADDR_LO"/>
+               <reg32 offset="1" name="ADDR_HI"/>
+               <reg32 offset="2" name="PITCH" shr="6" type="uint"/>
+               <!-- array-pitch is size of layer -->
+               <reg32 offset="3" name="ARRAY_PITCH" shr="6" type="uint"/>
+       </array>
+       <reg32 offset="0xe263" name="RB_BLIT_FLAG_DST_LO"/>
+       <reg32 offset="0xe264" name="RB_BLIT_FLAG_DST_HI"/>
+       <reg32 offset="0xe265" name="RB_BLIT_FLAG_DST_PITCH" shr="6" type="uint"/>
+       <!-- array-pitch is size of layer -->
+       <reg32 offset="0xe266" name="RB_BLIT_FLAG_DST_ARRAY_PITCH" shr="6" type="uint"/>
+
+       <reg32 offset="0xe267" name="RB_SAMPLE_COUNT_ADDR_LO"/>
+       <reg32 offset="0xe268" name="RB_SAMPLE_COUNT_ADDR_HI"/>
+
+       <reg32 offset="0xe280" name="VPC_CNTL_0">
+               <doc>
+                       num of varyings plus four for gl_Position (plus one if gl_PointSize)
+                       plus # of transform-feedback (streamout) varyings if using the
+                       hw streamout (rather than stg instructions in shader)
+               </doc>
+               <bitfield name="STRIDE_IN_VPC" low="0" high="6" type="uint"/>
+               <bitfield name="VARYING" pos="11" type="boolean"/>
+       </reg32>
+       <array offset="0xe282" name="VPC_VARYING_INTERP" stride="1" length="8">
+               <reg32 offset="0x0" name="MODE"/>
+       </array>
+       <array offset="0xe28a" name="VPC_VARYING_PS_REPL" stride="1" length="8">
+               <reg32 offset="0x0" name="MODE"/>
+       </array>
+       <reg32 offset="0xe292" name="UNKNOWN_E292"/>
+       <reg32 offset="0xe293" name="UNKNOWN_E293"/>
+       <array offset="0xe294" name="VPC_VAR" stride="1" length="4">
+               <!-- one bit per varying component: -->
+               <reg32 offset="0" name="DISABLE"/>
+       </array>
+       <reg32 offset="0xe298" name="VPC_GS_SIV_CNTL"/>
+       <reg32 offset="0xe29a" name="UNKNOWN_E29A"/>
+       <reg32 offset="0xe29d" name="VPC_PACK">
+               <bitfield name="NUMNONPOSVAR" low="0" high="7" type="uint"/>
+               <!--
+               This seems to be the OUTLOC for the psize output.  It could possibly
+               be the max-OUTLOC position, but it is only set when VS writes psize
+               (and blob always puts psize at highest OUTLOC)
+                -->
+               <bitfield name="PSIZELOC" low="8" high="15" type="uint"/>
+       </reg32>
+       <reg32 offset="0xe2a0" name="VPC_FS_PRIMITIVEID_CNTL"/>
+
+       <doc>
+               Stream-Out:
+               -----------
+
+               VPC_SO[0..3] registers setup details about streamout buffers, and
+               number of components to write to each.
+
+               VPC_SO_PROG provides the mapping between output varyings and the SO
+               buffers.  It is written multiple times (via a CP_CONTEXT_REG_BUNCH
+               packet, not sure if that matters), each write can handle up to two
+               components of stream-out output.  Order matches up to OUTLOC,
+               including padding.  So, if outputting first 3 varyings:
+
+                       SP_VS_OUT[0].REG: { A_REGID = r0.w | A_COMPMASK = 0xf | B_REGID = r0.x | B_COMPMASK = 0x7 }
+                       SP_VS_OUT[0x1].REG: { A_REGID = r1.w | A_COMPMASK = 0x3 | B_REGID = r2.y | B_COMPMASK = 0xf }
+                       SP_VS_VPC_DST[0].REG: { OUTLOC0 = 0 | OUTLOC1 = 4 | OUTLOC2 = 8 | OUTLOC3 = 12 }
+
+               Then:
+
+                       VPC_SO_PROG: { A_BUF = 0 | A_OFF = 0 | A_EN | A_BUF = 0 | B_OFF = 4 | B_EN }
+                       VPC_SO_PROG: { A_BUF = 0 | A_OFF = 8 | A_EN | A_BUF = 0 | B_OFF = 12 | B_EN }
+                       VPC_SO_PROG: { A_BUF = 2 | A_OFF = 0 | A_EN | A_BUF = 2 | B_OFF = 4 | B_EN }
+                       VPC_SO_PROG: { A_BUF = 2 | A_OFF = 8 | A_EN | A_BUF = 0 | B_OFF = 0 }
+                       VPC_SO_PROG: { A_BUF = 1 | A_OFF = 0 | A_EN | A_BUF = 1 | B_OFF = 4 | B_EN }
+
+               Note that varying order is OUTLOC0, OUTLOC2, OUTLOC1, and note
+               the padding between OUTLOC1 and OUTLOC2.
+
+               The BUF bitfield indicates which of the four streamout buffers
+               to write into at the specified offset.
+
+               The VPC_SO[n].FLUSH_BASE_LO/HI is used for hw to write back next
+               offset which gets loaded back into VPC_SO[n].BUFFER_OFFSET via a
+               CP_MEM_TO_REG.  Probably can be ignored until we have GS/etc, at
+               which point we can't calculate the offset on the CPU.
+       </doc>
+       <reg32 offset="0xe2a1" name="VPC_SO_BUF_CNTL">
+               <bitfield name="BUF0" pos="0" type="boolean"/>
+               <bitfield name="BUF1" pos="3" type="boolean"/>
+               <bitfield name="BUF2" pos="6" type="boolean"/>
+               <bitfield name="BUF3" pos="9" type="boolean"/>
+               <bitfield name="ENABLE" pos="15" type="boolean"/>
+       </reg32>
+       <reg32 offset="0xe2a2" name="VPC_SO_OVERRIDE">
+               <bitfield name="SO_DISABLE" pos="0" type="boolean"/>
+       </reg32>
+       <reg32 offset="0xe2a3" name="VPC_SO_CNTL">
+               <!-- always 0x10000 when SO enabled.. -->
+               <bitfield name="ENABLE" pos="16" type="boolean"/>
+       </reg32>
+       <reg32 offset="0xe2a4" name="VPC_SO_PROG">
+               <bitfield name="A_BUF" low="0" high="1" type="uint"/>
+               <bitfield name="A_OFF" low="2" high="10" shr="2" type="uint"/>
+               <bitfield name="A_EN" pos="11" type="boolean"/>
+               <bitfield name="B_BUF" low="12" high="13" type="uint"/>
+               <bitfield name="B_OFF" low="14" high="22" shr="2" type="uint"/>
+               <bitfield name="B_EN" pos="23" type="boolean"/>
+       </reg32>
+       <array offset="0xe2a7" name="VPC_SO" stride="7" length="4">
+               <reg32 offset="0" name="BUFFER_BASE_LO"/>
+               <reg32 offset="1" name="BUFFER_BASE_HI"/>
+               <reg32 offset="2" name="BUFFER_SIZE"/>
+               <reg32 offset="3" name="NCOMP"/>  <!-- component count -->
+               <reg32 offset="4" name="BUFFER_OFFSET"/>
+               <reg32 offset="5" name="FLUSH_BASE_LO"/>
+               <reg32 offset="6" name="FLUSH_BASE_HI"/>
+       </array>
+
+       <reg32 offset="0xe384" name="PC_PRIMITIVE_CNTL">
+               <!-- # of varyings plus four for gl_Position (plus one if gl_PointSize) -->
+               <bitfield name="STRIDE_IN_VPC" low="0" high="6" type="uint"/>
+               <bitfield name="PRIMITIVE_RESTART" pos="8" type="boolean"/>
+               <bitfield name="COUNT_PRIMITIVES" pos="9" type="boolean"/><!-- enabled when gl_PrimitiveIDIn is used -->
+               <bitfield name="PROVOKING_VTX_LAST" pos="10" type="boolean"/>
+       </reg32>
+       <reg32 offset="0xe385" name="PC_PRIM_VTX_CNTL">
+               <bitfield name="PSIZE" pos="11" type="boolean"/>
+       </reg32>
+       <reg32 offset="0xe388" name="PC_RASTER_CNTL">
+               <bitfield name="POLYMODE_FRONT_PTYPE" low="0" high="2" type="adreno_pa_su_sc_draw"/>
+               <bitfield name="POLYMODE_BACK_PTYPE" low="3" high="5" type="adreno_pa_su_sc_draw"/>
+               <bitfield name="POLYMODE_ENABLE" pos="6" type="boolean"/>
+       </reg32>
+       <reg32 offset="0xe389" name="UNKNOWN_E389"/>
+       <reg32 offset="0xe38c" name="PC_RESTART_INDEX"/>
+       <reg32 offset="0xe38d" name="PC_GS_LAYERED"/>
+       <reg32 offset="0xe38e" name="PC_GS_PARAM">
+               <bitfield name="MAX_VERTICES" low="0" high="9" type="uint"/><!-- vertices - 1 -->
+               <bitfield name="INVOCATIONS" low="11" high="15" type="uint"/><!-- invoc - 1 -->
+               <bitfield name="PRIMTYPE" low="23" high="24" type="adreno_pa_su_sc_draw"/>
+       </reg32>
+       <reg32 offset="0xe38f" name="PC_HS_PARAM">
+               <bitfield name="VERTICES_OUT" low="0" high="5" type="uint"/>
+               <bitfield name="SPACING" low="21" high="22" type="a4xx_tess_spacing"/>
+               <bitfield name="CW" pos="23" type="boolean"/>
+               <bitfield name="CONNECTED" pos="24" type="boolean"/>
+       </reg32>
+       <reg32 offset="0xe3b0" name="PC_POWER_CNTL"/>
+
+       <reg32 offset="0xe400" name="VFD_CONTROL_0">
+               <bitfield name="VTXCNT" low="0" high="5" type="uint"/>
+       </reg32>
+       <reg32 offset="0xe401" name="VFD_CONTROL_1">
+               <bitfield name="REGID4VTX" low="0" high="7" type="a3xx_regid"/>
+               <bitfield name="REGID4INST" low="8" high="15" type="a3xx_regid"/>
+               <bitfield name="REGID4PRIMID" low="16" high="23" type="a3xx_regid"/>
+       </reg32>
+       <reg32 offset="0xe402" name="VFD_CONTROL_2">
+               <bitfield name="REGID_PATCHID" low="0" high="7" type="a3xx_regid"/><!-- same as VFD_CONTROL_3.REGID_PATCHID? -->
+       </reg32>
+       <reg32 offset="0xe403" name="VFD_CONTROL_3">
+               <bitfield name="REGID_PATCHID" low="8" high="15" type="a3xx_regid"/>
+               <bitfield name="REGID_TESSX" low="16" high="23" type="a3xx_regid"/>
+               <bitfield name="REGID_TESSY" low="24" high="31" type="a3xx_regid"/>
+       </reg32>
+       <reg32 offset="0xe404" name="VFD_CONTROL_4">
+       </reg32>
+       <reg32 offset="0xe405" name="VFD_CONTROL_5">
+               <!-- b0 set if gl_PrimitiveID used in fs ?? -->
+       </reg32>
+       <reg32 offset="0xe408" name="VFD_INDEX_OFFSET"/>
+       <reg32 offset="0xe409" name="VFD_INSTANCE_START_OFFSET"/>
+       <array offset="0xe40a" name="VFD_FETCH" stride="4" length="32">
+               <reg32 offset="0x0" name="BASE_LO"/>
+               <reg32 offset="0x1" name="BASE_HI"/>
+               <reg32 offset="0x2" name="SIZE" type="uint"/>
+               <reg32 offset="0x3" name="STRIDE" type="uint"/>
+       </array>
+       <array offset="0xe48a" name="VFD_DECODE" stride="2" length="32">
+               <reg32 offset="0x0" name="INSTR">
+                       <!-- IDX appears to index into VFD_FETCH[] -->
+                       <bitfield name="IDX" low="0" high="4" type="uint"/>
+                       <bitfield name="INSTANCED" pos="17" type="boolean"/>
+                       <bitfield name="FORMAT" low="20" high="27" type="a5xx_vtx_fmt"/>
+                       <bitfield name="SWAP" low="28" high="29" type="a3xx_color_swap"/>
+                       <bitfield name="UNK30" pos="30" type="boolean"/>
+                       <bitfield name="FLOAT" pos="31" type="boolean"/>
+               </reg32>
+               <reg32 offset="0x1" name="STEP_RATE"/> <!-- ??? -->
+       </array>
+       <array offset="0xe4ca" name="VFD_DEST_CNTL" stride="1" length="32">
+               <reg32 offset="0x0" name="INSTR">
+                       <bitfield name="WRITEMASK" low="0" high="3" type="hex"/>
+                       <bitfield name="REGID" low="4" high="11" type="a3xx_regid"/>
+               </reg32>
+       </array>
+       <reg32 offset="0xe4f0" name="VFD_POWER_CNTL"/>
+
+       <!-- 0x0 for compute, 0x10 for 3d? -->
+       <reg32 offset="0xe580" name="SP_SP_CNTL"/>
+
+       <bitset name="a5xx_xs_config" inline="yes">
+               <bitfield name="ENABLED" pos="0" type="boolean"/>
+               <bitfield name="CONSTOBJECTOFFSET" low="1" high="7" type="uint"/>
+               <bitfield name="SHADEROBJOFFSET" low="8" high="14" type="uint"/>
+       </bitset>
+       <bitset name="a5xx_xs_cntl" inline="yes">
+               <bitfield name="SSBO_ENABLE" pos="0" type="boolean"/>
+               <!--
+               no idea high bit.. could be this is amount of on-chip memory used
+               rather than total size?
+                -->
+               <bitfield name="INSTRLEN" low="1" high="31" type="uint"/>
+       </bitset>
+       <bitset name="a5xx_sp_xs_ctrl_reg0" inline="yes">
+               <!-- bit1 + bit2 set for "buffer" mode (ie. shader small enough to fit internally) -->
+               <!-- 24 or more (full size) GPRS and blob uses TWO_QUADS instead of FOUR_QUADS -->
+               <bitfield name="THREADSIZE" pos="3" type="a3xx_threadsize"/>
+               <bitfield name="HALFREGFOOTPRINT" low="4" high="9" type="uint"/>
+               <bitfield name="FULLREGFOOTPRINT" low="10" high="15" type="uint"/>
+               <bitfield name="VARYING" pos="16" type="boolean"/>
+               <bitfield name="PIXLODENABLE" pos="20" type="boolean"/>
+               <!-- seems to be nesting level for flow control:.. -->
+               <bitfield name="BRANCHSTACK" low="25" high="31" type="uint"/>
+       </bitset>
+       <!-- assuming things appear in same relative order as a4xx: -->
+       <!-- duplicated exactly w/ corresponding HLSQ_ regs starting at 0xe78b.. -->
+       <reg32 offset="0xe584" name="SP_VS_CONFIG" type="a5xx_xs_config"/>
+       <reg32 offset="0xe585" name="SP_FS_CONFIG" type="a5xx_xs_config"/>
+       <reg32 offset="0xe586" name="SP_HS_CONFIG" type="a5xx_xs_config"/>
+       <reg32 offset="0xe587" name="SP_DS_CONFIG" type="a5xx_xs_config"/>
+       <reg32 offset="0xe588" name="SP_GS_CONFIG" type="a5xx_xs_config"/>
+       <reg32 offset="0xe589" name="SP_CS_CONFIG" type="a5xx_xs_config"/>
+       <reg32 offset="0xe58a" name="SP_VS_CONFIG_MAX_CONST"/>
+       <reg32 offset="0xe58b" name="SP_FS_CONFIG_MAX_CONST"/>
+       <reg32 offset="0xe590" name="SP_VS_CTRL_REG0" type="a5xx_sp_xs_ctrl_reg0"/>
+       <reg32 offset="0xe592" name="SP_PRIMITIVE_CNTL">
+               <!-- # of VS outputs including pos/psize -->
+               <bitfield name="VSOUT" low="0" high="4" type="uint"/>
+       </reg32>
+       <array offset="0xe593" name="SP_VS_OUT" stride="1" length="16">
+               <reg32 offset="0x0" name="REG">
+                       <bitfield name="A_REGID" low="0" high="7" type="a3xx_regid"/>
+                       <bitfield name="A_COMPMASK" low="8" high="11" type="hex"/>
+                       <bitfield name="B_REGID" low="16" high="23" type="a3xx_regid"/>
+                       <bitfield name="B_COMPMASK" low="24" high="27" type="hex"/>
+               </reg32>
+       </array>
+       <!--
+       Starting with a5xx, position/psize outputs from shader end up in the
+       SP_VS_OUT map, with highest OUTLOCn position.  (Generally they are
+       the last entries too, except when gl_PointCoord is used, blob inserts
+       an extra varying after, but with a lower OUTLOC position.  If present,
+       psize is last, preceded by position.
+        -->
+       <array offset="0xe5a3" name="SP_VS_VPC_DST" stride="1" length="8">
+               <reg32 offset="0x0" name="REG">
+                       <bitfield name="OUTLOC0" low="0" high="7" type="uint"/>
+                       <bitfield name="OUTLOC1" low="8" high="15" type="uint"/>
+                       <bitfield name="OUTLOC2" low="16" high="23" type="uint"/>
+                       <bitfield name="OUTLOC3" low="24" high="31" type="uint"/>
+               </reg32>
+       </array>
+       <reg32 offset="0xe5ab" name="UNKNOWN_E5AB"/>
+       <reg32 offset="0xe5ac" name="SP_VS_OBJ_START_LO"/>
+       <reg32 offset="0xe5ad" name="SP_VS_OBJ_START_HI"/>
+       <reg32 offset="0xe5c0" name="SP_FS_CTRL_REG0" type="a5xx_sp_xs_ctrl_reg0"/>
+       <reg32 offset="0xe5c2" name="UNKNOWN_E5C2"/>
+       <reg32 offset="0xe5c3" name="SP_FS_OBJ_START_LO"/>
+       <reg32 offset="0xe5c4" name="SP_FS_OBJ_START_HI"/>
+       <reg32 offset="0xe5c9" name="SP_BLEND_CNTL">
+               <bitfield name="ENABLED" pos="0" type="boolean"/>
+               <bitfield name="UNK8" pos="8" type="boolean"/>
+               <bitfield name="ALPHA_TO_COVERAGE" pos="10" type="boolean"/>
+       </reg32>
+       <reg32 offset="0xe5ca" name="SP_FS_OUTPUT_CNTL">
+               <bitfield name="MRT" low="0" high="3" type="uint"/>
+               <bitfield name="DEPTH_REGID" low="5" high="12" type="a3xx_regid"/>
+               <bitfield name="SAMPLEMASK_REGID" low="13" high="20" type="a3xx_regid"/>
+       </reg32>
+       <array offset="0xe5cb" name="SP_FS_OUTPUT" stride="1" length="8">
+               <doc>per MRT</doc>
+               <reg32 offset="0x0" name="REG">
+                       <bitfield name="REGID" low="0" high="7" type="a3xx_regid"/>
+                       <bitfield name="HALF_PRECISION" pos="8" type="boolean"/>
+               </reg32>
+       </array>
+       <array offset="0xe5d3" name="SP_FS_MRT" stride="1" length="8">
+               <reg32 offset="0" name="REG">
+                       <bitfield name="COLOR_FORMAT" low="0" high="7" type="a5xx_color_fmt"/>
+                       <bitfield name="COLOR_SINT" pos="8" type="boolean"/>
+                       <bitfield name="COLOR_UINT" pos="9" type="boolean"/>
+                       <bitfield name="COLOR_SRGB" pos="10" type="boolean"/>
+               </reg32>
+       </array>
+       <!--
+       e5db/e5dc seems to look related to some optimization to do sample from
+       texture using varying value directly before shader thread starts?  I
+       guess that could optimize common simple frag shaders..
+        -->
+       <reg32 offset="0xe5db" name="UNKNOWN_E5DB"/>
+       <reg32 offset="0xe5f0" name="SP_CS_CTRL_REG0" type="a5xx_sp_xs_ctrl_reg0"/>
+       <reg32 offset="0xe5f2" name="UNKNOWN_E5F2"/>
+       <reg32 offset="0xe5f3" name="SP_CS_OBJ_START_LO"/>
+       <reg32 offset="0xe5f4" name="SP_CS_OBJ_START_HI"/>
+       <!-- e5f9 something compute related.. seems to change when HLSQ_CS_CNTL_1 changes -->
+
+       <reg32 offset="0xe600" name="SP_HS_CTRL_REG0" type="a5xx_sp_xs_ctrl_reg0"/>
+       <reg32 offset="0xe602" name="UNKNOWN_E602"/>
+       <reg32 offset="0xe603" name="SP_HS_OBJ_START_LO"/>
+       <reg32 offset="0xe604" name="SP_HS_OBJ_START_HI"/>
+       <reg32 offset="0xe610" name="SP_DS_CTRL_REG0" type="a5xx_sp_xs_ctrl_reg0"/>
+       <reg32 offset="0xe62b" name="UNKNOWN_E62B"/>
+       <reg32 offset="0xe62c" name="SP_DS_OBJ_START_LO"/>
+       <reg32 offset="0xe62d" name="SP_DS_OBJ_START_HI"/>
+       <reg32 offset="0xe640" name="SP_GS_CTRL_REG0" type="a5xx_sp_xs_ctrl_reg0"/>
+       <reg32 offset="0xe65b" name="UNKNOWN_E65B"/>
+       <reg32 offset="0xe65c" name="SP_GS_OBJ_START_LO"/>
+       <reg32 offset="0xe65d" name="SP_GS_OBJ_START_HI"/>
+
+       <reg32 offset="0xe704" name="TPL1_TP_RAS_MSAA_CNTL">
+               <bitfield name="SAMPLES" low="0" high="1" type="a3xx_msaa_samples"/>
+       </reg32>
+       <reg32 offset="0xe705" name="TPL1_TP_DEST_MSAA_CNTL">
+               <bitfield name="SAMPLES" low="0" high="1" type="a3xx_msaa_samples"/>
+               <bitfield name="MSAA_DISABLE" pos="2" type="boolean"/>
+       </reg32>
+       <!-- either blob is doing it wrong, or this is not per-stage anymore: -->
+       <reg32 offset="0xe706" name="TPL1_TP_BORDER_COLOR_BASE_ADDR_LO"/>
+       <reg32 offset="0xe707" name="TPL1_TP_BORDER_COLOR_BASE_ADDR_HI"/>
+
+       <!--
+       so these have the same info that is normally in the CP_LOAD_STATE
+       packets.. not sure if they are normally written by pm4/me or if the
+       CP_LOAD_STATE mechanism is deprecated?
+        -->
+       <reg32 offset="0xe700" name="TPL1_VS_TEX_COUNT" type="uint"/>
+       <reg32 offset="0xe701" name="TPL1_HS_TEX_COUNT" type="uint"/>
+       <reg32 offset="0xe702" name="TPL1_DS_TEX_COUNT" type="uint"/>
+       <reg32 offset="0xe703" name="TPL1_GS_TEX_COUNT" type="uint"/>
+
+       <reg32 offset="0xe722" name="TPL1_VS_TEX_SAMP_LO"/>
+       <reg32 offset="0xe723" name="TPL1_VS_TEX_SAMP_HI"/>
+       <reg32 offset="0xe724" name="TPL1_HS_TEX_SAMP_LO"/>
+       <reg32 offset="0xe725" name="TPL1_HS_TEX_SAMP_HI"/>
+       <reg32 offset="0xe726" name="TPL1_DS_TEX_SAMP_LO"/>
+       <reg32 offset="0xe727" name="TPL1_DS_TEX_SAMP_HI"/>
+       <reg32 offset="0xe728" name="TPL1_GS_TEX_SAMP_LO"/>
+       <reg32 offset="0xe729" name="TPL1_GS_TEX_SAMP_HI"/>
+
+       <reg32 offset="0xe72a" name="TPL1_VS_TEX_CONST_LO"/>
+       <reg32 offset="0xe72b" name="TPL1_VS_TEX_CONST_HI"/>
+       <reg32 offset="0xe72c" name="TPL1_HS_TEX_CONST_LO"/>
+       <reg32 offset="0xe72d" name="TPL1_HS_TEX_CONST_HI"/>
+       <reg32 offset="0xe72e" name="TPL1_DS_TEX_CONST_LO"/>
+       <reg32 offset="0xe72f" name="TPL1_DS_TEX_CONST_HI"/>
+       <reg32 offset="0xe730" name="TPL1_GS_TEX_CONST_LO"/>
+       <reg32 offset="0xe731" name="TPL1_GS_TEX_CONST_HI"/>
+
+       <reg32 offset="0xe750" name="TPL1_FS_TEX_COUNT" type="uint"/>
+       <reg32 offset="0xe751" name="TPL1_CS_TEX_COUNT" type="uint"/>
+
+       <reg32 offset="0xe75a" name="TPL1_FS_TEX_SAMP_LO"/>
+       <reg32 offset="0xe75b" name="TPL1_FS_TEX_SAMP_HI"/>
+       <reg32 offset="0xe75c" name="TPL1_CS_TEX_SAMP_LO"/>
+       <reg32 offset="0xe75d" name="TPL1_CS_TEX_SAMP_HI"/>
+       <reg32 offset="0xe75e" name="TPL1_FS_TEX_CONST_LO"/>
+       <reg32 offset="0xe75f" name="TPL1_FS_TEX_CONST_HI"/>
+       <reg32 offset="0xe760" name="TPL1_CS_TEX_CONST_LO"/>
+       <reg32 offset="0xe761" name="TPL1_CS_TEX_CONST_HI"/>
+
+       <reg32 offset="0xe764" name="TPL1_TP_FS_ROTATION_CNTL"/>
+
+       <reg32 offset="0xe784" name="HLSQ_CONTROL_0_REG">
+               <!-- 24 or more (full size) GPRS and blob uses TWO_QUADS instead of FOUR_QUADS -->
+               <bitfield name="FSTHREADSIZE" pos="0" type="a3xx_threadsize"/>
+               <bitfield name="CSTHREADSIZE" pos="2" type="a3xx_threadsize"/>
+       </reg32>
+       <reg32 offset="0xe785" name="HLSQ_CONTROL_1_REG">
+               <!-- I guess.. not set exactly same as a4xx, but similar: -->
+               <bitfield name="PRIMALLOCTHRESHOLD" low="0" high="5" type="uint"/>
+       </reg32>
+       <reg32 offset="0xe786" name="HLSQ_CONTROL_2_REG">
+               <bitfield name="FACEREGID" low="0" high="7" type="a3xx_regid"/>
+               <!-- SAMPLEID is loaded into a half-precision register: -->
+               <bitfield name="SAMPLEID" low="8" high="15" type="a3xx_regid"/>
+               <bitfield name="SAMPLEMASK" low="16" high="23" type="a3xx_regid"/>
+               <bitfield name="SIZE" low="24" high="31" type="a3xx_regid"/>
+       </reg32>
+       <reg32 offset="0xe787" name="HLSQ_CONTROL_3_REG">
+               <!-- register loaded with position (bary.f) -->
+               <bitfield name="IJ_PERSP_PIXEL" low="0" high="7" type="a3xx_regid"/>
+               <bitfield name="IJ_LINEAR_PIXEL" low="8" high="15" type="a3xx_regid"/>
+               <bitfield name="IJ_PERSP_CENTROID" low="16" high="23" type="a3xx_regid"/>
+               <bitfield name="IJ_LINEAR_CENTROID" low="24" high="31" type="a3xx_regid"/>
+       </reg32>
+       <reg32 offset="0xe788" name="HLSQ_CONTROL_4_REG">
+               <bitfield name="IJ_PERSP_SAMPLE" low="0" high="7" type="a3xx_regid"/>
+               <bitfield name="IJ_LINEAR_SAMPLE" low="8" high="15" type="a3xx_regid"/>
+               <bitfield name="XYCOORDREGID" low="16" high="23" type="a3xx_regid"/>
+               <bitfield name="ZWCOORDREGID" low="24" high="31" type="a3xx_regid"/>
+       </reg32>
+       <!--
+       0x020fffff for normal draws, 0x1f00000 for compute.. maybe what state
+       is enabled?  We could probably try disabling different bits and see
+       what breaks to figure out which is what:
+        -->
+       <reg32 offset="0xe78a" name="HLSQ_UPDATE_CNTL"/>
+       <reg32 offset="0xe78b" name="HLSQ_VS_CONFIG" type="a5xx_xs_config"/>
+       <reg32 offset="0xe78c" name="HLSQ_FS_CONFIG" type="a5xx_xs_config"/>
+       <reg32 offset="0xe78d" name="HLSQ_HS_CONFIG" type="a5xx_xs_config"/>
+       <reg32 offset="0xe78e" name="HLSQ_DS_CONFIG" type="a5xx_xs_config"/>
+       <reg32 offset="0xe78f" name="HLSQ_GS_CONFIG" type="a5xx_xs_config"/>
+       <reg32 offset="0xe790" name="HLSQ_CS_CONFIG" type="a5xx_xs_config"/>
+       <reg32 offset="0xe791" name="HLSQ_VS_CNTL" type="a5xx_xs_cntl"/>
+       <reg32 offset="0xe792" name="HLSQ_FS_CNTL" type="a5xx_xs_cntl"/>
+       <reg32 offset="0xe793" name="HLSQ_HS_CNTL" type="a5xx_xs_cntl"/>
+       <reg32 offset="0xe794" name="HLSQ_DS_CNTL" type="a5xx_xs_cntl"/>
+       <reg32 offset="0xe795" name="HLSQ_GS_CNTL" type="a5xx_xs_cntl"/>
+       <reg32 offset="0xe796" name="HLSQ_CS_CNTL" type="a5xx_xs_cntl"/>
+       <reg32 offset="0xe7b9" name="HLSQ_CS_KERNEL_GROUP_X"/>
+       <reg32 offset="0xe7ba" name="HLSQ_CS_KERNEL_GROUP_Y"/>
+       <reg32 offset="0xe7bb" name="HLSQ_CS_KERNEL_GROUP_Z"/>
+       <reg32 offset="0xe7b0" name="HLSQ_CS_NDRANGE_0">
+               <bitfield name="KERNELDIM" low="0" high="1" type="uint"/>
+               <!-- localsize is value minus one: -->
+               <bitfield name="LOCALSIZEX" low="2" high="11" type="uint"/>
+               <bitfield name="LOCALSIZEY" low="12" high="21" type="uint"/>
+               <bitfield name="LOCALSIZEZ" low="22" high="31" type="uint"/>
+       </reg32>
+       <reg32 offset="0xe7b1" name="HLSQ_CS_NDRANGE_1">
+               <bitfield name="GLOBALSIZE_X" low="0" high="31" type="uint"/>
+       </reg32>
+       <reg32 offset="0xe7b2" name="HLSQ_CS_NDRANGE_2">
+               <bitfield name="GLOBALOFF_X" low="0" high="31" type="uint"/>
+       </reg32>
+       <reg32 offset="0xe7b3" name="HLSQ_CS_NDRANGE_3">
+               <bitfield name="GLOBALSIZE_Y" low="0" high="31" type="uint"/>
+       </reg32>
+       <reg32 offset="0xe7b4" name="HLSQ_CS_NDRANGE_4">
+               <bitfield name="GLOBALOFF_Y" low="0" high="31" type="uint"/>
+       </reg32>
+       <reg32 offset="0xe7b5" name="HLSQ_CS_NDRANGE_5">
+               <bitfield name="GLOBALSIZE_Z" low="0" high="31" type="uint"/>
+       </reg32>
+       <reg32 offset="0xe7b6" name="HLSQ_CS_NDRANGE_6">
+               <bitfield name="GLOBALOFF_Z" low="0" high="31" type="uint"/>
+       </reg32>
+       <reg32 offset="0xe7b7" name="HLSQ_CS_CNTL_0">
+               <bitfield name="WGIDCONSTID" low="0" high="7" type="a3xx_regid"/>
+               <!-- possibly one of these is KERNELDIMCONSTID? -->
+               <!--
+               UNK0 appears to be NUMWGCONSTID.. but only works in certain
+               cases?  Blob doesn't appear to use it, but instead emits
+               these via const (uniform).  Which requires some shenanigans
+               for indirect draws when the offset is not strongly aligned
+               enough to use as EXT_SRC_ADDR in CP_LOAD_STATE
+                -->
+               <bitfield name="UNK0" low="8" high="15" type="a3xx_regid"/>
+               <bitfield name="UNK1" low="16" high="23" type="a3xx_regid"/>
+               <bitfield name="LOCALIDREGID" low="24" high="31" type="a3xx_regid"/>
+       </reg32>
+       <reg32 offset="0xe7b8" name="HLSQ_CS_CNTL_1"/>
+       <reg32 offset="0xe7c0" name="UNKNOWN_E7C0"/>
+       <reg32 offset="0xe7c3" name="HLSQ_VS_CONSTLEN" type="uint"/>
+       <reg32 offset="0xe7c4" name="HLSQ_VS_INSTRLEN" type="uint"/>
+       <reg32 offset="0xe7c5" name="UNKNOWN_E7C5"/>
+       <reg32 offset="0xe7c8" name="HLSQ_HS_CONSTLEN" type="uint"/>
+       <reg32 offset="0xe7c9" name="HLSQ_HS_INSTRLEN" type="uint"/>
+       <reg32 offset="0xe7ca" name="UNKNOWN_E7CA"/>
+       <reg32 offset="0xe7cd" name="HLSQ_DS_CONSTLEN" type="uint"/>
+       <reg32 offset="0xe7ce" name="HLSQ_DS_INSTRLEN" type="uint"/>
+       <reg32 offset="0xe7cf" name="UNKNOWN_E7CF"/>
+       <reg32 offset="0xe7d2" name="HLSQ_GS_CONSTLEN" type="uint"/>
+       <reg32 offset="0xe7d3" name="HLSQ_GS_INSTRLEN" type="uint"/>
+       <reg32 offset="0xe7d4" name="UNKNOWN_E7D4"/>
+       <reg32 offset="0xe7d7" name="HLSQ_FS_CONSTLEN" type="uint"/>
+       <reg32 offset="0xe7d8" name="HLSQ_FS_INSTRLEN" type="uint"/>
+       <reg32 offset="0xe7d9" name="UNKNOWN_E7D9"/>
+       <reg32 offset="0xe7dc" name="HLSQ_CS_CONSTLEN" type="uint"/>
+       <reg32 offset="0xe7dd" name="HLSQ_CS_INSTRLEN" type="uint"/>
+
+       <!--
+               Separate blit/2d or dma engine?  Seems to get used sometimes for
+               texture uploads, where a4xx blob would use normal draws.  Used
+               in render-mode 0x5..
+
+               Note seems mostly to be used for small blits, large blits seem
+               to use the CP_EVENT_WRITE:BLIT style of doing things.  See
+               cubemap-0003 (40x40) vs cubemap-0004 (256x256).
+
+               see cube-0000, cubemap-(1..3 but not 4+), quad-textured-10..17
+
+               Other nearby registers are probably color formats, etc.  The
+               blit coords are in CP packet.  Play more w/ glTexSubImage2D()
+               to work it out.
+
+               Separate this into a different domain??  Would that help to
+               restrict which registers we dump based on mode?
+
+               regs 0x2000 to 0x2004 (plus all-zero regs 0x2005-0x2009) look
+               like 2nd source for blending?  Used in mipmap generation.. but
+               maybe layout is a bit different.  (Possibly used for reading
+               src via sampler, to enable scaling??)  0x2040 also used in this
+               case.
+        -->
+       <reg32 offset="0x2100" name="RB_2D_BLIT_CNTL"/>  <!-- same as 0x2180 -->
+       <reg32 offset="0x2101" name="RB_2D_SRC_SOLID_DW0"/>
+       <reg32 offset="0x2102" name="RB_2D_SRC_SOLID_DW1"/>
+       <reg32 offset="0x2103" name="RB_2D_SRC_SOLID_DW2"/>
+       <reg32 offset="0x2104" name="RB_2D_SRC_SOLID_DW3"/>
+       <reg32 offset="0x2107" name="RB_2D_SRC_INFO">
+               <bitfield name="COLOR_FORMAT" low="0" high="7" type="a5xx_color_fmt"/>
+               <bitfield name="TILE_MODE" low="8" high="9" type="a5xx_tile_mode"/>
+               <bitfield name="COLOR_SWAP" low="10" high="11" type="a3xx_color_swap"/>
+               <!-- b12 seems to be set when UBWC "FLAGS" buffer enabled -->
+               <bitfield name="FLAGS" pos="12" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x2108" name="RB_2D_SRC_LO"/>
+       <reg32 offset="0x2109" name="RB_2D_SRC_HI"/>
+       <reg32 offset="0x210a" name="RB_2D_SRC_SIZE">
+               <bitfield name="PITCH" low="0" high="15" shr="6" type="uint"/>
+               <bitfield name="ARRAY_PITCH" low="16" high="31" shr="6" type="uint"/>
+       </reg32>
+       <reg32 offset="0x2110" name="RB_2D_DST_INFO">
+               <bitfield name="COLOR_FORMAT" low="0" high="7" type="a5xx_color_fmt"/>
+               <bitfield name="TILE_MODE" low="8" high="9" type="a5xx_tile_mode"/>
+               <bitfield name="COLOR_SWAP" low="10" high="11" type="a3xx_color_swap"/>
+               <!-- b12 seems to be set when UBWC "FLAGS" buffer enabled -->
+               <bitfield name="FLAGS" pos="12" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x2111" name="RB_2D_DST_LO"/>
+       <reg32 offset="0x2112" name="RB_2D_DST_HI"/>
+       <reg32 offset="0x2113" name="RB_2D_DST_SIZE">
+               <bitfield name="PITCH" low="0" high="15" shr="6" type="uint"/>
+               <bitfield name="ARRAY_PITCH" low="16" high="31" shr="6" type="uint"/>
+       </reg32>
+       <reg32 offset="0x2140" name="RB_2D_SRC_FLAGS_LO"/>
+       <reg32 offset="0x2141" name="RB_2D_SRC_FLAGS_HI"/>
+        <reg32 offset="0x2142" name="RB_2D_SRC_FLAGS_PITCH" shr="6" type="uint"/>
+       <reg32 offset="0x2143" name="RB_2D_DST_FLAGS_LO"/>
+       <reg32 offset="0x2144" name="RB_2D_DST_FLAGS_HI"/>
+        <reg32 offset="0x2145" name="RB_2D_DST_FLAGS_PITCH" shr="6" type="uint"/>
+       <reg32 offset="0x2180" name="GRAS_2D_BLIT_CNTL"/> <!-- same as 0x2100 -->
+       <!-- looks same as 0x2107: -->
+       <reg32 offset="0x2181" name="GRAS_2D_SRC_INFO">
+               <bitfield name="COLOR_FORMAT" low="0" high="7" type="a5xx_color_fmt"/>
+               <bitfield name="TILE_MODE" low="8" high="9" type="a5xx_tile_mode"/>
+               <bitfield name="COLOR_SWAP" low="10" high="11" type="a3xx_color_swap"/>
+               <!-- b12 seems to be set when UBWC "FLAGS" buffer enabled -->
+               <bitfield name="FLAGS" pos="12" type="boolean"/>
+       </reg32>
+       <!-- looks same as 0x2110: -->
+       <reg32 offset="0x2182" name="GRAS_2D_DST_INFO">
+               <bitfield name="COLOR_FORMAT" low="0" high="7" type="a5xx_color_fmt"/>
+               <bitfield name="TILE_MODE" low="8" high="9" type="a5xx_tile_mode"/>
+               <bitfield name="COLOR_SWAP" low="10" high="11" type="a3xx_color_swap"/>
+               <!-- b12 seems to be set when UBWC "FLAGS" buffer enabled -->
+               <bitfield name="FLAGS" pos="12" type="boolean"/>
+       </reg32>
+<!--
+0x2100 and 0x2180 look like same thing (RB and GRAS versions)..
+   0x86000000 for copy, 0x00000000 for fill?
+
+0x2184 0x9 for copy, 0x1 for blit (maybe bitmask of enabled src/dst???)
+ -->
+       <reg32 offset="0x2100" name="UNKNOWN_2100"/>
+       <reg32 offset="0x2180" name="UNKNOWN_2180"/>
+       <reg32 offset="0x2184" name="UNKNOWN_2184"/>
+</domain>
+
+<domain name="A5XX_TEX_SAMP" width="32">
+       <doc>Texture sampler dwords</doc>
+       <enum name="a5xx_tex_filter"> <!-- same as a4xx? -->
+               <value name="A5XX_TEX_NEAREST" value="0"/>
+               <value name="A5XX_TEX_LINEAR" value="1"/>
+               <value name="A5XX_TEX_ANISO" value="2"/>
+       </enum>
+       <enum name="a5xx_tex_clamp"> <!-- same as a4xx? -->
+               <value name="A5XX_TEX_REPEAT" value="0"/>
+               <value name="A5XX_TEX_CLAMP_TO_EDGE" value="1"/>
+               <value name="A5XX_TEX_MIRROR_REPEAT" value="2"/>
+               <value name="A5XX_TEX_CLAMP_TO_BORDER" value="3"/>
+               <value name="A5XX_TEX_MIRROR_CLAMP" value="4"/>
+       </enum>
+       <enum name="a5xx_tex_aniso"> <!-- same as a4xx? -->
+               <value name="A5XX_TEX_ANISO_1" value="0"/>
+               <value name="A5XX_TEX_ANISO_2" value="1"/>
+               <value name="A5XX_TEX_ANISO_4" value="2"/>
+               <value name="A5XX_TEX_ANISO_8" value="3"/>
+               <value name="A5XX_TEX_ANISO_16" value="4"/>
+       </enum>
+       <reg32 offset="0" name="0">
+               <bitfield name="MIPFILTER_LINEAR_NEAR" pos="0" type="boolean"/>
+               <bitfield name="XY_MAG" low="1" high="2" type="a5xx_tex_filter"/>
+               <bitfield name="XY_MIN" low="3" high="4" type="a5xx_tex_filter"/>
+               <bitfield name="WRAP_S" low="5" high="7" type="a5xx_tex_clamp"/>
+               <bitfield name="WRAP_T" low="8" high="10" type="a5xx_tex_clamp"/>
+               <bitfield name="WRAP_R" low="11" high="13" type="a5xx_tex_clamp"/>
+               <bitfield name="ANISO" low="14" high="16" type="a5xx_tex_aniso"/>
+               <bitfield name="LOD_BIAS" low="19" high="31" type="fixed" radix="8"/><!-- no idea how many bits for real -->
+       </reg32>
+       <reg32 offset="1" name="1">
+               <bitfield name="COMPARE_FUNC" low="1" high="3" type="adreno_compare_func"/>
+               <bitfield name="CUBEMAPSEAMLESSFILTOFF" pos="4" type="boolean"/>
+               <bitfield name="UNNORM_COORDS" pos="5" type="boolean"/>
+               <bitfield name="MIPFILTER_LINEAR_FAR" pos="6" type="boolean"/>
+               <bitfield name="MAX_LOD" low="8" high="19" type="ufixed" radix="8"/>
+               <bitfield name="MIN_LOD" low="20" high="31" type="ufixed" radix="8"/>
+       </reg32>
+       <reg32 offset="2" name="2">
+               <!--
+               offset into border-color buffer?  Blob always uses 0x80 for FS state
+               if both VS and FS have border-color.
+Seems like when both VS and FS have bcolor, one starts 0x300 after other..
+and 0x80 in TEX_SAMP.2 ..  blob doesn't seem to be able to cope w/ multiple
+different border-color states per texture..  Looks something like:
+0000: 3f000000 00000000 00000000 3f800000 00008000 ffff0000 00004000 7fff0000
+0020: 00003800 3c000000 80100010 0000f008 ff000080 7f000040 c0000200 00800000
+0040: 00003800 3c000000 00000000 00000000 00000000 00000000 00000000 00000000
+*
+0300: 3f800000 3f800000 3f800000 3f800000 ffffffff ffffffff 7fff7fff 7fff7fff
+0320: 3c003c00 3c003c00 ffffffff 0000ffff ffffffff 7f7f7f7f ffffffff 00ffffff
+0340: 3c003c00 3c003c00 00000000 00000000 00000000 00000000 00000000 00000000
+
+                -->
+               <bitfield name="BCOLOR_OFFSET" low="4" high="31"/>
+       </reg32>
+       <reg32 offset="3" name="3"/>
+</domain>
+
+<domain name="A5XX_TEX_CONST" width="32">
+       <doc>Texture constant dwords</doc>
+       <enum name="a5xx_tex_swiz"> <!-- same as a4xx? -->
+               <value name="A5XX_TEX_X" value="0"/>
+               <value name="A5XX_TEX_Y" value="1"/>
+               <value name="A5XX_TEX_Z" value="2"/>
+               <value name="A5XX_TEX_W" value="3"/>
+               <value name="A5XX_TEX_ZERO" value="4"/>
+               <value name="A5XX_TEX_ONE" value="5"/>
+       </enum>
+       <enum name="a5xx_tex_type"> <!-- same as a4xx? -->
+               <value name="A5XX_TEX_1D" value="0"/>
+               <value name="A5XX_TEX_2D" value="1"/>
+               <value name="A5XX_TEX_CUBE" value="2"/>
+               <value name="A5XX_TEX_3D" value="3"/>
+       </enum>
+       <reg32 offset="0" name="0">
+               <bitfield name="TILE_MODE" low="0" high="1" type="a5xx_tile_mode"/>
+               <bitfield name="SRGB" pos="2" type="boolean"/>
+               <bitfield name="SWIZ_X" low="4" high="6" type="a5xx_tex_swiz"/>
+               <bitfield name="SWIZ_Y" low="7" high="9" type="a5xx_tex_swiz"/>
+               <bitfield name="SWIZ_Z" low="10" high="12" type="a5xx_tex_swiz"/>
+               <bitfield name="SWIZ_W" low="13" high="15" type="a5xx_tex_swiz"/>
+               <bitfield name="MIPLVLS" low="16" high="19" type="uint"/>
+               <bitfield name="SAMPLES" low="20" high="21" type="a3xx_msaa_samples"/>
+               <bitfield name="FMT" low="22" high="29" type="a5xx_tex_fmt"/>
+               <bitfield name="SWAP" low="30" high="31" type="a3xx_color_swap"/>
+       </reg32>
+       <reg32 offset="1" name="1">
+               <bitfield name="WIDTH" low="0" high="14" type="uint"/>
+               <bitfield name="HEIGHT" low="15" high="29" type="uint"/>
+       </reg32>
+       <reg32 offset="2" name="2">
+               <!-- minimum pitch (for mipmap levels): log2(pitchalign / 64) -->
+               <bitfield name="PITCHALIGN" low="0" high="3" type="uint"/>
+               <doc>Pitch in bytes (so actually stride)</doc>
+               <bitfield name="PITCH" low="7" high="28" type="uint"/>
+               <bitfield name="TYPE" low="29" high="30" type="a5xx_tex_type"/>
+       </reg32>
+       <reg32 offset="3" name="3">
+               <!--
+               ARRAY_PITCH is basically LAYERSZ for the first mipmap level, and
+               for 3d textures (laid out mipmap level first) MIN_LAYERSZ is the
+               layer size at the point that it stops being reduced moving to
+               higher (smaller) mipmap levels
+                -->
+               <bitfield name="ARRAY_PITCH" low="0" high="13" shr="12" type="uint"/>
+               <bitfield name="MIN_LAYERSZ" low="23" high="26" shr="12"/>
+               <!--
+               by default levels with w < 16 are linear
+               TILE_ALL makes all levels have tiling
+               seems required when using UBWC, since all levels have UBWC (can possibly be disabled?)
+                -->
+               <bitfield name="TILE_ALL" pos="27" type="boolean"/>
+               <bitfield name="FLAG" pos="28" type="boolean"/>
+       </reg32>
+       <reg32 offset="4" name="4">
+               <bitfield name="BASE_LO" low="5" high="31" shr="5"/>
+       </reg32>
+       <reg32 offset="5" name="5">
+               <bitfield name="BASE_HI" low="0" high="16"/>
+               <bitfield name="DEPTH" low="17" high="29" type="uint"/>
+       </reg32>
+       <reg32 offset="6" name="6"/>
+       <reg32 offset="7" name="7"/>
+       <reg32 offset="8" name="8"/>
+       <reg32 offset="9" name="9"/>
+       <reg32 offset="10" name="10"/>
+       <reg32 offset="11" name="11"/>
+</domain>
+
+<!--
+Note the "SSBO" state blocks are actually used for both images and SSBOs,
+naming is just because I r/e'd SSBOs first.  I should probably come up
+with a better name.
+-->
+<domain name="A5XX_SSBO_0" width="32">
+       <reg32 offset="0" name="0">
+               <bitfield name="BASE_LO" low="5" high="31" shr="5"/>
+       </reg32>
+       <reg32 offset="1" name="1">
+               <!-- no BASE_HI here?  Maybe this is only used for 32b mode? -->
+               <doc>Pitch in bytes (so actually stride)</doc>
+               <bitfield name="PITCH" low="0" high="21" type="uint"/>
+       </reg32>
+       <reg32 offset="2" name="2">
+               <bitfield name="ARRAY_PITCH" low="12" high="25" shr="12" type="uint"/>
+       </reg32>
+       <reg32 offset="3" name="3">
+               <!-- bytes per pixel: -->
+               <bitfield name="CPP" low="0" high="5" type="uint"/>
+       </reg32>
+</domain>
+
+<domain name="A5XX_SSBO_1" width="32">
+       <reg32 offset="0" name="0">
+               <bitfield name="FMT" low="8" high="15" type="a5xx_tex_fmt"/>
+               <bitfield name="WIDTH" low="16" high="31" type="uint"/>
+       </reg32>
+       <reg32 offset="1" name="1">
+               <bitfield name="HEIGHT" low="0" high="15" type="uint"/>
+               <bitfield name="DEPTH" low="16" high="31" type="uint"/>
+       </reg32>
+</domain>
+
+<domain name="A5XX_SSBO_2" width="32">
+       <reg32 offset="0" name="0">
+               <bitfield name="BASE_LO" low="0" high="31"/>
+       </reg32>
+       <reg32 offset="1" name="1">
+               <bitfield name="BASE_HI" low="0" high="31"/>
+       </reg32>
+</domain>
+
+<domain name="A5XX_UBO" width="32">
+       <reg32 offset="0" name="0">
+               <bitfield name="BASE_LO" low="0" high="31"/>
+       </reg32>
+       <reg32 offset="1" name="1">
+               <bitfield name="BASE_HI" low="0" high="16"/>
+               <!-- size probably in high bits -->
+       </reg32>
+</domain>
+
+</database>
diff --git a/src/freedreno/registers/adreno/a6xx.xml b/src/freedreno/registers/adreno/a6xx.xml
new file mode 100644 (file)
index 0000000..1e7eefb
--- /dev/null
@@ -0,0 +1,3944 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<database xmlns="http://nouveau.freedesktop.org/"
+xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+xsi:schemaLocation="http://nouveau.freedesktop.org/ rules-ng.xsd">
+<import file="freedreno_copyright.xml"/>
+<import file="adreno/adreno_common.xml"/>
+<import file="adreno/adreno_pm4.xml"/>
+
+<!-- these might be same as a5xx -->
+<enum name="a6xx_tile_mode">
+       <value name="TILE6_LINEAR" value="0"/>
+       <value name="TILE6_2" value="2"/>
+       <value name="TILE6_3" value="3"/>
+</enum>
+
+<enum name="a6xx_format">
+       <value value="0x02" name="FMT6_A8_UNORM"/>
+       <value value="0x03" name="FMT6_8_UNORM"/>
+       <value value="0x04" name="FMT6_8_SNORM"/>
+       <value value="0x05" name="FMT6_8_UINT"/>
+       <value value="0x06" name="FMT6_8_SINT"/>
+
+       <value value="0x08" name="FMT6_4_4_4_4_UNORM"/>
+       <value value="0x0a" name="FMT6_5_5_5_1_UNORM"/>
+       <value value="0x0c" name="FMT6_1_5_5_5_UNORM"/> <!-- read only -->
+       <value value="0x0e" name="FMT6_5_6_5_UNORM"/>
+
+       <value value="0x0f" name="FMT6_8_8_UNORM"/>
+       <value value="0x10" name="FMT6_8_8_SNORM"/>
+       <value value="0x11" name="FMT6_8_8_UINT"/>
+       <value value="0x12" name="FMT6_8_8_SINT"/>
+       <value value="0x13" name="FMT6_L8_A8_UNORM"/>
+
+       <value value="0x15" name="FMT6_16_UNORM"/>
+       <value value="0x16" name="FMT6_16_SNORM"/>
+       <value value="0x17" name="FMT6_16_FLOAT"/>
+       <value value="0x18" name="FMT6_16_UINT"/>
+       <value value="0x19" name="FMT6_16_SINT"/>
+
+       <value value="0x21" name="FMT6_8_8_8_UNORM"/>
+       <value value="0x22" name="FMT6_8_8_8_SNORM"/>
+       <value value="0x23" name="FMT6_8_8_8_UINT"/>
+       <value value="0x24" name="FMT6_8_8_8_SINT"/>
+
+       <value value="0x30" name="FMT6_8_8_8_8_UNORM"/>
+       <value value="0x31" name="FMT6_8_8_8_X8_UNORM"/> <!-- samples 1 for alpha -->
+       <value value="0x32" name="FMT6_8_8_8_8_SNORM"/>
+       <value value="0x33" name="FMT6_8_8_8_8_UINT"/>
+       <value value="0x34" name="FMT6_8_8_8_8_SINT"/>
+
+       <value value="0x35" name="FMT6_9_9_9_E5_FLOAT"/>
+
+       <value value="0x36" name="FMT6_10_10_10_2_UNORM"/>
+       <value value="0x37" name="FMT6_10_10_10_2_UNORM_DEST"/>
+       <value value="0x39" name="FMT6_10_10_10_2_SNORM"/>
+       <value value="0x3a" name="FMT6_10_10_10_2_UINT"/>
+       <value value="0x3b" name="FMT6_10_10_10_2_SINT"/>
+
+       <value value="0x42" name="FMT6_11_11_10_FLOAT"/>
+
+       <value value="0x43" name="FMT6_16_16_UNORM"/>
+       <value value="0x44" name="FMT6_16_16_SNORM"/>
+       <value value="0x45" name="FMT6_16_16_FLOAT"/>
+       <value value="0x46" name="FMT6_16_16_UINT"/>
+       <value value="0x47" name="FMT6_16_16_SINT"/>
+
+       <value value="0x48" name="FMT6_32_UNORM"/>
+       <value value="0x49" name="FMT6_32_SNORM"/>
+       <value value="0x4a" name="FMT6_32_FLOAT"/>
+       <value value="0x4b" name="FMT6_32_UINT"/>
+       <value value="0x4c" name="FMT6_32_SINT"/>
+       <value value="0x4d" name="FMT6_32_FIXED"/>
+
+       <value value="0x58" name="FMT6_16_16_16_UNORM"/>
+       <value value="0x59" name="FMT6_16_16_16_SNORM"/>
+       <value value="0x5a" name="FMT6_16_16_16_FLOAT"/>
+       <value value="0x5b" name="FMT6_16_16_16_UINT"/>
+       <value value="0x5c" name="FMT6_16_16_16_SINT"/>
+
+       <value value="0x60" name="FMT6_16_16_16_16_UNORM"/>
+       <value value="0x61" name="FMT6_16_16_16_16_SNORM"/>
+       <value value="0x62" name="FMT6_16_16_16_16_FLOAT"/>
+       <value value="0x63" name="FMT6_16_16_16_16_UINT"/>
+       <value value="0x64" name="FMT6_16_16_16_16_SINT"/>
+
+       <value value="0x65" name="FMT6_32_32_UNORM"/>
+       <value value="0x66" name="FMT6_32_32_SNORM"/>
+       <value value="0x67" name="FMT6_32_32_FLOAT"/>
+       <value value="0x68" name="FMT6_32_32_UINT"/>
+       <value value="0x69" name="FMT6_32_32_SINT"/>
+       <value value="0x6a" name="FMT6_32_32_FIXED"/>
+
+       <value value="0x70" name="FMT6_32_32_32_UNORM"/>
+       <value value="0x71" name="FMT6_32_32_32_SNORM"/>
+       <value value="0x72" name="FMT6_32_32_32_UINT"/>
+       <value value="0x73" name="FMT6_32_32_32_SINT"/>
+       <value value="0x74" name="FMT6_32_32_32_FLOAT"/>
+       <value value="0x75" name="FMT6_32_32_32_FIXED"/>
+
+       <value value="0x80" name="FMT6_32_32_32_32_UNORM"/>
+       <value value="0x81" name="FMT6_32_32_32_32_SNORM"/>
+       <value value="0x82" name="FMT6_32_32_32_32_FLOAT"/>
+       <value value="0x83" name="FMT6_32_32_32_32_UINT"/>
+       <value value="0x84" name="FMT6_32_32_32_32_SINT"/>
+       <value value="0x85" name="FMT6_32_32_32_32_FIXED"/>
+
+       <value value="0x8c" name="FMT6_G8R8B8R8_422_UNORM"/>
+       <value value="0x8d" name="FMT6_R8G8R8B8_422_UNORM"/>
+       <value value="0x8e" name="FMT6_R8_G8B8_2PLANE_420_UNORM"/>
+       <value value="0x90" name="FMT6_R8_G8_B8_3PLANE_420_UNORM"/>
+
+       <value value="0x91" name="FMT6_Z24_UNORM_S8_UINT_AS_R8G8B8A8"/>
+
+       <!-- used with the Y plane of FMT6_R8_G8B8_2PLANE_420_UNORM
+            which has different UBWC compression from regular 8_UNORM format -->
+       <value value="0x94" name="FMT6_8_PLANE_UNORM"/>
+
+       <value value="0xa0" name="FMT6_Z24_UNORM_S8_UINT"/>
+
+       <value value="0xab" name="FMT6_ETC2_RG11_UNORM"/>
+       <value value="0xac" name="FMT6_ETC2_RG11_SNORM"/>
+       <value value="0xad" name="FMT6_ETC2_R11_UNORM"/>
+       <value value="0xae" name="FMT6_ETC2_R11_SNORM"/>
+       <value value="0xaf" name="FMT6_ETC1"/>
+       <value value="0xb0" name="FMT6_ETC2_RGB8"/>
+       <value value="0xb1" name="FMT6_ETC2_RGBA8"/>
+       <value value="0xb2" name="FMT6_ETC2_RGB8A1"/>
+       <value value="0xb3" name="FMT6_DXT1"/>
+       <value value="0xb4" name="FMT6_DXT3"/>
+       <value value="0xb5" name="FMT6_DXT5"/>
+       <value value="0xb7" name="FMT6_RGTC1_UNORM"/>
+       <value value="0xb8" name="FMT6_RGTC1_SNORM"/>
+       <value value="0xbb" name="FMT6_RGTC2_UNORM"/>
+       <value value="0xbc" name="FMT6_RGTC2_SNORM"/>
+       <value value="0xbe" name="FMT6_BPTC_UFLOAT"/>
+       <value value="0xbf" name="FMT6_BPTC_FLOAT"/>
+       <value value="0xc0" name="FMT6_BPTC"/>
+       <value value="0xc1" name="FMT6_ASTC_4x4"/>
+       <value value="0xc2" name="FMT6_ASTC_5x4"/>
+       <value value="0xc3" name="FMT6_ASTC_5x5"/>
+       <value value="0xc4" name="FMT6_ASTC_6x5"/>
+       <value value="0xc5" name="FMT6_ASTC_6x6"/>
+       <value value="0xc6" name="FMT6_ASTC_8x5"/>
+       <value value="0xc7" name="FMT6_ASTC_8x6"/>
+       <value value="0xc8" name="FMT6_ASTC_8x8"/>
+       <value value="0xc9" name="FMT6_ASTC_10x5"/>
+       <value value="0xca" name="FMT6_ASTC_10x6"/>
+       <value value="0xcb" name="FMT6_ASTC_10x8"/>
+       <value value="0xcc" name="FMT6_ASTC_10x10"/>
+       <value value="0xcd" name="FMT6_ASTC_12x10"/>
+       <value value="0xce" name="FMT6_ASTC_12x12"/>
+
+       <!-- same as X8Z24_UNORM but for sampling stencil (integer, 2nd channel) -->
+       <value value="0xea" name="FMT6_S8Z24_UINT"/>
+
+       <!-- Not a hw enum, used internally in driver -->
+       <value value="0xff" name="FMT6_NONE"/>
+
+</enum>
+
+<!-- probably same as a5xx -->
+<enum name="a6xx_polygon_mode">
+       <value name="POLYMODE6_POINTS" value="1"/>
+       <value name="POLYMODE6_LINES" value="2"/>
+       <value name="POLYMODE6_TRIANGLES" value="3"/>
+</enum>
+
+<enum name="a6xx_depth_format">
+       <value name="DEPTH6_NONE" value="0"/>
+       <value name="DEPTH6_16" value="1"/>
+       <value name="DEPTH6_24_8" value="2"/>
+       <value name="DEPTH6_32" value="4"/>
+</enum>
+
+<bitset name="a6x_cp_protect" inline="yes">
+       <bitfield name="BASE_ADDR" low="0" high="17"/>
+       <bitfield name="MASK_LEN" low="18" high="30"/>
+       <bitfield name="READ" pos="31" type="boolean"/>
+</bitset>
+
+<enum name="a6xx_shader_id">
+       <value value="0x9" name="A6XX_TP0_TMO_DATA"/>
+       <value value="0xa" name="A6XX_TP0_SMO_DATA"/>
+       <value value="0xb" name="A6XX_TP0_MIPMAP_BASE_DATA"/>
+       <value value="0x19" name="A6XX_TP1_TMO_DATA"/>
+       <value value="0x1a" name="A6XX_TP1_SMO_DATA"/>
+       <value value="0x1b" name="A6XX_TP1_MIPMAP_BASE_DATA"/>
+       <value value="0x29" name="A6XX_SP_INST_DATA"/>
+       <value value="0x2a" name="A6XX_SP_LB_0_DATA"/>
+       <value value="0x2b" name="A6XX_SP_LB_1_DATA"/>
+       <value value="0x2c" name="A6XX_SP_LB_2_DATA"/>
+       <value value="0x2d" name="A6XX_SP_LB_3_DATA"/>
+       <value value="0x2e" name="A6XX_SP_LB_4_DATA"/>
+       <value value="0x2f" name="A6XX_SP_LB_5_DATA"/>
+       <value value="0x30" name="A6XX_SP_CB_BINDLESS_DATA"/>
+       <value value="0x31" name="A6XX_SP_CB_LEGACY_DATA"/>
+       <value value="0x32" name="A6XX_SP_UAV_DATA"/>
+       <value value="0x33" name="A6XX_SP_INST_TAG"/>
+       <value value="0x34" name="A6XX_SP_CB_BINDLESS_TAG"/>
+       <value value="0x35" name="A6XX_SP_TMO_UMO_TAG"/>
+       <value value="0x36" name="A6XX_SP_SMO_TAG"/>
+       <value value="0x37" name="A6XX_SP_STATE_DATA"/>
+       <value value="0x49" name="A6XX_HLSQ_CHUNK_CVS_RAM"/>
+       <value value="0x4a" name="A6XX_HLSQ_CHUNK_CPS_RAM"/>
+       <value value="0x4b" name="A6XX_HLSQ_CHUNK_CVS_RAM_TAG"/>
+       <value value="0x4c" name="A6XX_HLSQ_CHUNK_CPS_RAM_TAG"/>
+       <value value="0x4d" name="A6XX_HLSQ_ICB_CVS_CB_BASE_TAG"/>
+       <value value="0x4e" name="A6XX_HLSQ_ICB_CPS_CB_BASE_TAG"/>
+       <value value="0x50" name="A6XX_HLSQ_CVS_MISC_RAM"/>
+       <value value="0x51" name="A6XX_HLSQ_CPS_MISC_RAM"/>
+       <value value="0x52" name="A6XX_HLSQ_INST_RAM"/>
+       <value value="0x53" name="A6XX_HLSQ_GFX_CVS_CONST_RAM"/>
+       <value value="0x54" name="A6XX_HLSQ_GFX_CPS_CONST_RAM"/>
+       <value value="0x55" name="A6XX_HLSQ_CVS_MISC_RAM_TAG"/>
+       <value value="0x56" name="A6XX_HLSQ_CPS_MISC_RAM_TAG"/>
+       <value value="0x57" name="A6XX_HLSQ_INST_RAM_TAG"/>
+       <value value="0x58" name="A6XX_HLSQ_GFX_CVS_CONST_RAM_TAG"/>
+       <value value="0x59" name="A6XX_HLSQ_GFX_CPS_CONST_RAM_TAG"/>
+       <value value="0x5a" name="A6XX_HLSQ_PWR_REST_RAM"/>
+       <value value="0x5b" name="A6XX_HLSQ_PWR_REST_TAG"/>
+       <value value="0x60" name="A6XX_HLSQ_DATAPATH_META"/>
+       <value value="0x61" name="A6XX_HLSQ_FRONTEND_META"/>
+       <value value="0x62" name="A6XX_HLSQ_INDIRECT_META"/>
+       <value value="0x63" name="A6XX_HLSQ_BACKEND_META"/>
+</enum>
+
+<enum name="a6xx_debugbus_id">
+       <value value="0x1" name="A6XX_DBGBUS_CP"/>
+       <value value="0x2" name="A6XX_DBGBUS_RBBM"/>
+       <value value="0x3" name="A6XX_DBGBUS_VBIF"/>
+       <value value="0x4" name="A6XX_DBGBUS_HLSQ"/>
+       <value value="0x5" name="A6XX_DBGBUS_UCHE"/>
+       <value value="0x6" name="A6XX_DBGBUS_DPM"/>
+       <value value="0x7" name="A6XX_DBGBUS_TESS"/>
+       <value value="0x8" name="A6XX_DBGBUS_PC"/>
+       <value value="0x9" name="A6XX_DBGBUS_VFDP"/>
+       <value value="0xa" name="A6XX_DBGBUS_VPC"/>
+       <value value="0xb" name="A6XX_DBGBUS_TSE"/>
+       <value value="0xc" name="A6XX_DBGBUS_RAS"/>
+       <value value="0xd" name="A6XX_DBGBUS_VSC"/>
+       <value value="0xe" name="A6XX_DBGBUS_COM"/>
+       <value value="0x10" name="A6XX_DBGBUS_LRZ"/>
+       <value value="0x11" name="A6XX_DBGBUS_A2D"/>
+       <value value="0x12" name="A6XX_DBGBUS_CCUFCHE"/>
+       <value value="0x13" name="A6XX_DBGBUS_GMU_CX"/>
+       <value value="0x14" name="A6XX_DBGBUS_RBP"/>
+       <value value="0x15" name="A6XX_DBGBUS_DCS"/>
+       <value value="0x16" name="A6XX_DBGBUS_DBGC"/>
+       <value value="0x17" name="A6XX_DBGBUS_CX"/>
+       <value value="0x18" name="A6XX_DBGBUS_GMU_GX"/>
+       <value value="0x19" name="A6XX_DBGBUS_TPFCHE"/>
+       <value value="0x1a" name="A6XX_DBGBUS_GBIF_GX"/>
+       <value value="0x1d" name="A6XX_DBGBUS_GPC"/>
+       <value value="0x1e" name="A6XX_DBGBUS_LARC"/>
+       <value value="0x1f" name="A6XX_DBGBUS_HLSQ_SPTP"/>
+       <value value="0x20" name="A6XX_DBGBUS_RB_0"/>
+       <value value="0x21" name="A6XX_DBGBUS_RB_1"/>
+       <value value="0x24" name="A6XX_DBGBUS_UCHE_WRAPPER"/>
+       <value value="0x28" name="A6XX_DBGBUS_CCU_0"/>
+       <value value="0x29" name="A6XX_DBGBUS_CCU_1"/>
+       <value value="0x38" name="A6XX_DBGBUS_VFD_0"/>
+       <value value="0x39" name="A6XX_DBGBUS_VFD_1"/>
+       <value value="0x3a" name="A6XX_DBGBUS_VFD_2"/>
+       <value value="0x3b" name="A6XX_DBGBUS_VFD_3"/>
+       <value value="0x40" name="A6XX_DBGBUS_SP_0"/>
+       <value value="0x41" name="A6XX_DBGBUS_SP_1"/>
+       <value value="0x48" name="A6XX_DBGBUS_TPL1_0"/>
+       <value value="0x49" name="A6XX_DBGBUS_TPL1_1"/>
+       <value value="0x4a" name="A6XX_DBGBUS_TPL1_2"/>
+       <value value="0x4b" name="A6XX_DBGBUS_TPL1_3"/>
+</enum>
+
+<enum name="a6xx_cp_perfcounter_select">
+       <value value="0" name="PERF_CP_ALWAYS_COUNT"/>
+       <value value="1" name="PERF_CP_BUSY_GFX_CORE_IDLE"/>
+       <value value="2" name="PERF_CP_BUSY_CYCLES"/>
+       <value value="3" name="PERF_CP_NUM_PREEMPTIONS"/>
+       <value value="4" name="PERF_CP_PREEMPTION_REACTION_DELAY"/>
+       <value value="5" name="PERF_CP_PREEMPTION_SWITCH_OUT_TIME"/>
+       <value value="6" name="PERF_CP_PREEMPTION_SWITCH_IN_TIME"/>
+       <value value="7" name="PERF_CP_DEAD_DRAWS_IN_BIN_RENDER"/>
+       <value value="8" name="PERF_CP_PREDICATED_DRAWS_KILLED"/>
+       <value value="9" name="PERF_CP_MODE_SWITCH"/>
+       <value value="10" name="PERF_CP_ZPASS_DONE"/>
+       <value value="11" name="PERF_CP_CONTEXT_DONE"/>
+       <value value="12" name="PERF_CP_CACHE_FLUSH"/>
+       <value value="13" name="PERF_CP_LONG_PREEMPTIONS"/>
+       <value value="14" name="PERF_CP_SQE_I_CACHE_STARVE"/>
+       <value value="15" name="PERF_CP_SQE_IDLE"/>
+       <value value="16" name="PERF_CP_SQE_PM4_STARVE_RB_IB"/>
+       <value value="17" name="PERF_CP_SQE_PM4_STARVE_SDS"/>
+       <value value="18" name="PERF_CP_SQE_MRB_STARVE"/>
+       <value value="19" name="PERF_CP_SQE_RRB_STARVE"/>
+       <value value="20" name="PERF_CP_SQE_VSD_STARVE"/>
+       <value value="21" name="PERF_CP_VSD_DECODE_STARVE"/>
+       <value value="22" name="PERF_CP_SQE_PIPE_OUT_STALL"/>
+       <value value="23" name="PERF_CP_SQE_SYNC_STALL"/>
+       <value value="24" name="PERF_CP_SQE_PM4_WFI_STALL"/>
+       <value value="25" name="PERF_CP_SQE_SYS_WFI_STALL"/>
+       <value value="26" name="PERF_CP_SQE_T4_EXEC"/>
+       <value value="27" name="PERF_CP_SQE_LOAD_STATE_EXEC"/>
+       <value value="28" name="PERF_CP_SQE_SAVE_SDS_STATE"/>
+       <value value="29" name="PERF_CP_SQE_DRAW_EXEC"/>
+       <value value="30" name="PERF_CP_SQE_CTXT_REG_BUNCH_EXEC"/>
+       <value value="31" name="PERF_CP_SQE_EXEC_PROFILED"/>
+       <value value="32" name="PERF_CP_MEMORY_POOL_EMPTY"/>
+       <value value="33" name="PERF_CP_MEMORY_POOL_SYNC_STALL"/>
+       <value value="34" name="PERF_CP_MEMORY_POOL_ABOVE_THRESH"/>
+       <value value="35" name="PERF_CP_AHB_WR_STALL_PRE_DRAWS"/>
+       <value value="36" name="PERF_CP_AHB_STALL_SQE_GMU"/>
+       <value value="37" name="PERF_CP_AHB_STALL_SQE_WR_OTHER"/>
+       <value value="38" name="PERF_CP_AHB_STALL_SQE_RD_OTHER"/>
+       <value value="39" name="PERF_CP_CLUSTER0_EMPTY"/>
+       <value value="40" name="PERF_CP_CLUSTER1_EMPTY"/>
+       <value value="41" name="PERF_CP_CLUSTER2_EMPTY"/>
+       <value value="42" name="PERF_CP_CLUSTER3_EMPTY"/>
+       <value value="43" name="PERF_CP_CLUSTER4_EMPTY"/>
+       <value value="44" name="PERF_CP_CLUSTER5_EMPTY"/>
+       <value value="45" name="PERF_CP_PM4_DATA"/>
+       <value value="46" name="PERF_CP_PM4_HEADERS"/>
+       <value value="47" name="PERF_CP_VBIF_READ_BEATS"/>
+       <value value="48" name="PERF_CP_VBIF_WRITE_BEATS"/>
+       <value value="49" name="PERF_CP_SQE_INSTR_COUNTER"/>
+</enum>
+
+<enum name="a6xx_rbbm_perfcounter_select">
+       <value value="0" name="PERF_RBBM_ALWAYS_COUNT"/>
+       <value value="1" name="PERF_RBBM_ALWAYS_ON"/>
+       <value value="2" name="PERF_RBBM_TSE_BUSY"/>
+       <value value="3" name="PERF_RBBM_RAS_BUSY"/>
+       <value value="4" name="PERF_RBBM_PC_DCALL_BUSY"/>
+       <value value="5" name="PERF_RBBM_PC_VSD_BUSY"/>
+       <value value="6" name="PERF_RBBM_STATUS_MASKED"/>
+       <value value="7" name="PERF_RBBM_COM_BUSY"/>
+       <value value="8" name="PERF_RBBM_DCOM_BUSY"/>
+       <value value="9" name="PERF_RBBM_VBIF_BUSY"/>
+       <value value="10" name="PERF_RBBM_VSC_BUSY"/>
+       <value value="11" name="PERF_RBBM_TESS_BUSY"/>
+       <value value="12" name="PERF_RBBM_UCHE_BUSY"/>
+       <value value="13" name="PERF_RBBM_HLSQ_BUSY"/>
+</enum>
+
+<enum name="a6xx_pc_perfcounter_select">
+       <value value="0" name="PERF_PC_BUSY_CYCLES"/>
+       <value value="1" name="PERF_PC_WORKING_CYCLES"/>
+       <value value="2" name="PERF_PC_STALL_CYCLES_VFD"/>
+       <value value="3" name="PERF_PC_STALL_CYCLES_TSE"/>
+       <value value="4" name="PERF_PC_STALL_CYCLES_VPC"/>
+       <value value="5" name="PERF_PC_STALL_CYCLES_UCHE"/>
+       <value value="6" name="PERF_PC_STALL_CYCLES_TESS"/>
+       <value value="7" name="PERF_PC_STALL_CYCLES_TSE_ONLY"/>
+       <value value="8" name="PERF_PC_STALL_CYCLES_VPC_ONLY"/>
+       <value value="9" name="PERF_PC_PASS1_TF_STALL_CYCLES"/>
+       <value value="10" name="PERF_PC_STARVE_CYCLES_FOR_INDEX"/>
+       <value value="11" name="PERF_PC_STARVE_CYCLES_FOR_TESS_FACTOR"/>
+       <value value="12" name="PERF_PC_STARVE_CYCLES_FOR_VIZ_STREAM"/>
+       <value value="13" name="PERF_PC_STARVE_CYCLES_FOR_POSITION"/>
+       <value value="14" name="PERF_PC_STARVE_CYCLES_DI"/>
+       <value value="15" name="PERF_PC_VIS_STREAMS_LOADED"/>
+       <value value="16" name="PERF_PC_INSTANCES"/>
+       <value value="17" name="PERF_PC_VPC_PRIMITIVES"/>
+       <value value="18" name="PERF_PC_DEAD_PRIM"/>
+       <value value="19" name="PERF_PC_LIVE_PRIM"/>
+       <value value="20" name="PERF_PC_VERTEX_HITS"/>
+       <value value="21" name="PERF_PC_IA_VERTICES"/>
+       <value value="22" name="PERF_PC_IA_PRIMITIVES"/>
+       <value value="23" name="PERF_PC_GS_PRIMITIVES"/>
+       <value value="24" name="PERF_PC_HS_INVOCATIONS"/>
+       <value value="25" name="PERF_PC_DS_INVOCATIONS"/>
+       <value value="26" name="PERF_PC_VS_INVOCATIONS"/>
+       <value value="27" name="PERF_PC_GS_INVOCATIONS"/>
+       <value value="28" name="PERF_PC_DS_PRIMITIVES"/>
+       <value value="29" name="PERF_PC_VPC_POS_DATA_TRANSACTION"/>
+       <value value="30" name="PERF_PC_3D_DRAWCALLS"/>
+       <value value="31" name="PERF_PC_2D_DRAWCALLS"/>
+       <value value="32" name="PERF_PC_NON_DRAWCALL_GLOBAL_EVENTS"/>
+       <value value="33" name="PERF_TESS_BUSY_CYCLES"/>
+       <value value="34" name="PERF_TESS_WORKING_CYCLES"/>
+       <value value="35" name="PERF_TESS_STALL_CYCLES_PC"/>
+       <value value="36" name="PERF_TESS_STARVE_CYCLES_PC"/>
+       <value value="37" name="PERF_PC_TSE_TRANSACTION"/>
+       <value value="38" name="PERF_PC_TSE_VERTEX"/>
+       <value value="39" name="PERF_PC_TESS_PC_UV_TRANS"/>
+       <value value="40" name="PERF_PC_TESS_PC_UV_PATCHES"/>
+       <value value="41" name="PERF_PC_TESS_FACTOR_TRANS"/>
+</enum>
+
+<enum name="a6xx_vfd_perfcounter_select">
+       <value value="0" name="PERF_VFD_BUSY_CYCLES"/>
+       <value value="1" name="PERF_VFD_STALL_CYCLES_UCHE"/>
+       <value value="2" name="PERF_VFD_STALL_CYCLES_VPC_ALLOC"/>
+       <value value="3" name="PERF_VFD_STALL_CYCLES_SP_INFO"/>
+       <value value="4" name="PERF_VFD_STALL_CYCLES_SP_ATTR"/>
+       <value value="5" name="PERF_VFD_STARVE_CYCLES_UCHE"/>
+       <value value="6" name="PERF_VFD_RBUFFER_FULL"/>
+       <value value="7" name="PERF_VFD_ATTR_INFO_FIFO_FULL"/>
+       <value value="8" name="PERF_VFD_DECODED_ATTRIBUTE_BYTES"/>
+       <value value="9" name="PERF_VFD_NUM_ATTRIBUTES"/>
+       <value value="10" name="PERF_VFD_UPPER_SHADER_FIBERS"/>
+       <value value="11" name="PERF_VFD_LOWER_SHADER_FIBERS"/>
+       <value value="12" name="PERF_VFD_MODE_0_FIBERS"/>
+       <value value="13" name="PERF_VFD_MODE_1_FIBERS"/>
+       <value value="14" name="PERF_VFD_MODE_2_FIBERS"/>
+       <value value="15" name="PERF_VFD_MODE_3_FIBERS"/>
+       <value value="16" name="PERF_VFD_MODE_4_FIBERS"/>
+       <value value="17" name="PERF_VFD_TOTAL_VERTICES"/>
+       <value value="18" name="PERF_VFDP_STALL_CYCLES_VFD"/>
+       <value value="19" name="PERF_VFDP_STALL_CYCLES_VFD_INDEX"/>
+       <value value="20" name="PERF_VFDP_STALL_CYCLES_VFD_PROG"/>
+       <value value="21" name="PERF_VFDP_STARVE_CYCLES_PC"/>
+       <value value="22" name="PERF_VFDP_VS_STAGE_WAVES"/>
+</enum>
+
+<enum name="a6xx_hlsq_perfcounter_select">
+       <value value="0" name="PERF_HLSQ_BUSY_CYCLES"/>
+       <value value="1" name="PERF_HLSQ_STALL_CYCLES_UCHE"/>
+       <value value="2" name="PERF_HLSQ_STALL_CYCLES_SP_STATE"/>
+       <value value="3" name="PERF_HLSQ_STALL_CYCLES_SP_FS_STAGE"/>
+       <value value="4" name="PERF_HLSQ_UCHE_LATENCY_CYCLES"/>
+       <value value="5" name="PERF_HLSQ_UCHE_LATENCY_COUNT"/>
+       <value value="6" name="PERF_HLSQ_FS_STAGE_1X_WAVES"/>
+       <value value="7" name="PERF_HLSQ_FS_STAGE_2X_WAVES"/>
+       <value value="8" name="PERF_HLSQ_QUADS"/>
+       <value value="9" name="PERF_HLSQ_CS_INVOCATIONS"/>
+       <value value="10" name="PERF_HLSQ_COMPUTE_DRAWCALLS"/>
+       <value value="11" name="PERF_HLSQ_FS_DATA_WAIT_PROGRAMMING"/>
+       <value value="12" name="PERF_HLSQ_DUAL_FS_PROG_ACTIVE"/>
+       <value value="13" name="PERF_HLSQ_DUAL_VS_PROG_ACTIVE"/>
+       <value value="14" name="PERF_HLSQ_FS_BATCH_COUNT_ZERO"/>
+       <value value="15" name="PERF_HLSQ_VS_BATCH_COUNT_ZERO"/>
+       <value value="16" name="PERF_HLSQ_WAVE_PENDING_NO_QUAD"/>
+       <value value="17" name="PERF_HLSQ_WAVE_PENDING_NO_PRIM_BASE"/>
+       <value value="18" name="PERF_HLSQ_STALL_CYCLES_VPC"/>
+       <value value="19" name="PERF_HLSQ_PIXELS"/>
+       <value value="20" name="PERF_HLSQ_DRAW_MODE_SWITCH_VSFS_SYNC"/>
+</enum>
+
+<enum name="a6xx_vpc_perfcounter_select">
+       <value value="0" name="PERF_VPC_BUSY_CYCLES"/>
+       <value value="1" name="PERF_VPC_WORKING_CYCLES"/>
+       <value value="2" name="PERF_VPC_STALL_CYCLES_UCHE"/>
+       <value value="3" name="PERF_VPC_STALL_CYCLES_VFD_WACK"/>
+       <value value="4" name="PERF_VPC_STALL_CYCLES_HLSQ_PRIM_ALLOC"/>
+       <value value="5" name="PERF_VPC_STALL_CYCLES_PC"/>
+       <value value="6" name="PERF_VPC_STALL_CYCLES_SP_LM"/>
+       <value value="7" name="PERF_VPC_STARVE_CYCLES_SP"/>
+       <value value="8" name="PERF_VPC_STARVE_CYCLES_LRZ"/>
+       <value value="9" name="PERF_VPC_PC_PRIMITIVES"/>
+       <value value="10" name="PERF_VPC_SP_COMPONENTS"/>
+       <value value="11" name="PERF_VPC_STALL_CYCLES_VPCRAM_POS"/>
+       <value value="12" name="PERF_VPC_LRZ_ASSIGN_PRIMITIVES"/>
+       <value value="13" name="PERF_VPC_RB_VISIBLE_PRIMITIVES"/>
+       <value value="14" name="PERF_VPC_LM_TRANSACTION"/>
+       <value value="15" name="PERF_VPC_STREAMOUT_TRANSACTION"/>
+       <value value="16" name="PERF_VPC_VS_BUSY_CYCLES"/>
+       <value value="17" name="PERF_VPC_PS_BUSY_CYCLES"/>
+       <value value="18" name="PERF_VPC_VS_WORKING_CYCLES"/>
+       <value value="19" name="PERF_VPC_PS_WORKING_CYCLES"/>
+       <value value="20" name="PERF_VPC_STARVE_CYCLES_RB"/>
+       <value value="21" name="PERF_VPC_NUM_VPCRAM_READ_POS"/>
+       <value value="22" name="PERF_VPC_WIT_FULL_CYCLES"/>
+       <value value="23" name="PERF_VPC_VPCRAM_FULL_CYCLES"/>
+       <value value="24" name="PERF_VPC_LM_FULL_WAIT_FOR_INTP_END"/>
+       <value value="25" name="PERF_VPC_NUM_VPCRAM_WRITE"/>
+       <value value="26" name="PERF_VPC_NUM_VPCRAM_READ_SO"/>
+       <value value="27" name="PERF_VPC_NUM_ATTR_REQ_LM"/>
+</enum>
+
+<enum name="a6xx_tse_perfcounter_select">
+       <value value="0" name="PERF_TSE_BUSY_CYCLES"/>
+       <value value="1" name="PERF_TSE_CLIPPING_CYCLES"/>
+       <value value="2" name="PERF_TSE_STALL_CYCLES_RAS"/>
+       <value value="3" name="PERF_TSE_STALL_CYCLES_LRZ_BARYPLANE"/>
+       <value value="4" name="PERF_TSE_STALL_CYCLES_LRZ_ZPLANE"/>
+       <value value="5" name="PERF_TSE_STARVE_CYCLES_PC"/>
+       <value value="6" name="PERF_TSE_INPUT_PRIM"/>
+       <value value="7" name="PERF_TSE_INPUT_NULL_PRIM"/>
+       <value value="8" name="PERF_TSE_TRIVAL_REJ_PRIM"/>
+       <value value="9" name="PERF_TSE_CLIPPED_PRIM"/>
+       <value value="10" name="PERF_TSE_ZERO_AREA_PRIM"/>
+       <value value="11" name="PERF_TSE_FACENESS_CULLED_PRIM"/>
+       <value value="12" name="PERF_TSE_ZERO_PIXEL_PRIM"/>
+       <value value="13" name="PERF_TSE_OUTPUT_NULL_PRIM"/>
+       <value value="14" name="PERF_TSE_OUTPUT_VISIBLE_PRIM"/>
+       <value value="15" name="PERF_TSE_CINVOCATION"/>
+       <value value="16" name="PERF_TSE_CPRIMITIVES"/>
+       <value value="17" name="PERF_TSE_2D_INPUT_PRIM"/>
+       <value value="18" name="PERF_TSE_2D_ALIVE_CYCLES"/>
+       <value value="19" name="PERF_TSE_CLIP_PLANES"/>
+</enum>
+
+<enum name="a6xx_ras_perfcounter_select">
+       <value value="0" name="PERF_RAS_BUSY_CYCLES"/>
+       <value value="1" name="PERF_RAS_SUPERTILE_ACTIVE_CYCLES"/>
+       <value value="2" name="PERF_RAS_STALL_CYCLES_LRZ"/>
+       <value value="3" name="PERF_RAS_STARVE_CYCLES_TSE"/>
+       <value value="4" name="PERF_RAS_SUPER_TILES"/>
+       <value value="5" name="PERF_RAS_8X4_TILES"/>
+       <value value="6" name="PERF_RAS_MASKGEN_ACTIVE"/>
+       <value value="7" name="PERF_RAS_FULLY_COVERED_SUPER_TILES"/>
+       <value value="8" name="PERF_RAS_FULLY_COVERED_8X4_TILES"/>
+       <value value="9" name="PERF_RAS_PRIM_KILLED_INVISILBE"/>
+       <value value="10" name="PERF_RAS_SUPERTILE_GEN_ACTIVE_CYCLES"/>
+       <value value="11" name="PERF_RAS_LRZ_INTF_WORKING_CYCLES"/>
+       <value value="12" name="PERF_RAS_BLOCKS"/>
+</enum>
+
+<enum name="a6xx_uche_perfcounter_select">
+       <value value="0" name="PERF_UCHE_BUSY_CYCLES"/>
+       <value value="1" name="PERF_UCHE_STALL_CYCLES_ARBITER"/>
+       <value value="2" name="PERF_UCHE_VBIF_LATENCY_CYCLES"/>
+       <value value="3" name="PERF_UCHE_VBIF_LATENCY_SAMPLES"/>
+       <value value="4" name="PERF_UCHE_VBIF_READ_BEATS_TP"/>
+       <value value="5" name="PERF_UCHE_VBIF_READ_BEATS_VFD"/>
+       <value value="6" name="PERF_UCHE_VBIF_READ_BEATS_HLSQ"/>
+       <value value="7" name="PERF_UCHE_VBIF_READ_BEATS_LRZ"/>
+       <value value="8" name="PERF_UCHE_VBIF_READ_BEATS_SP"/>
+       <value value="9" name="PERF_UCHE_READ_REQUESTS_TP"/>
+       <value value="10" name="PERF_UCHE_READ_REQUESTS_VFD"/>
+       <value value="11" name="PERF_UCHE_READ_REQUESTS_HLSQ"/>
+       <value value="12" name="PERF_UCHE_READ_REQUESTS_LRZ"/>
+       <value value="13" name="PERF_UCHE_READ_REQUESTS_SP"/>
+       <value value="14" name="PERF_UCHE_WRITE_REQUESTS_LRZ"/>
+       <value value="15" name="PERF_UCHE_WRITE_REQUESTS_SP"/>
+       <value value="16" name="PERF_UCHE_WRITE_REQUESTS_VPC"/>
+       <value value="17" name="PERF_UCHE_WRITE_REQUESTS_VSC"/>
+       <value value="18" name="PERF_UCHE_EVICTS"/>
+       <value value="19" name="PERF_UCHE_BANK_REQ0"/>
+       <value value="20" name="PERF_UCHE_BANK_REQ1"/>
+       <value value="21" name="PERF_UCHE_BANK_REQ2"/>
+       <value value="22" name="PERF_UCHE_BANK_REQ3"/>
+       <value value="23" name="PERF_UCHE_BANK_REQ4"/>
+       <value value="24" name="PERF_UCHE_BANK_REQ5"/>
+       <value value="25" name="PERF_UCHE_BANK_REQ6"/>
+       <value value="26" name="PERF_UCHE_BANK_REQ7"/>
+       <value value="27" name="PERF_UCHE_VBIF_READ_BEATS_CH0"/>
+       <value value="28" name="PERF_UCHE_VBIF_READ_BEATS_CH1"/>
+       <value value="29" name="PERF_UCHE_GMEM_READ_BEATS"/>
+       <value value="30" name="PERF_UCHE_TPH_REF_FULL"/>
+       <value value="31" name="PERF_UCHE_TPH_VICTIM_FULL"/>
+       <value value="32" name="PERF_UCHE_TPH_EXT_FULL"/>
+       <value value="33" name="PERF_UCHE_VBIF_STALL_WRITE_DATA"/>
+       <value value="34" name="PERF_UCHE_DCMP_LATENCY_SAMPLES"/>
+       <value value="35" name="PERF_UCHE_DCMP_LATENCY_CYCLES"/>
+       <value value="36" name="PERF_UCHE_VBIF_READ_BEATS_PC"/>
+       <value value="37" name="PERF_UCHE_READ_REQUESTS_PC"/>
+       <value value="38" name="PERF_UCHE_RAM_READ_REQ"/>
+       <value value="39" name="PERF_UCHE_RAM_WRITE_REQ"/>
+</enum>
+
+<enum name="a6xx_tp_perfcounter_select">
+       <value value="0" name="PERF_TP_BUSY_CYCLES"/>
+       <value value="1" name="PERF_TP_STALL_CYCLES_UCHE"/>
+       <value value="2" name="PERF_TP_LATENCY_CYCLES"/>
+       <value value="3" name="PERF_TP_LATENCY_TRANS"/>
+       <value value="4" name="PERF_TP_FLAG_CACHE_REQUEST_SAMPLES"/>
+       <value value="5" name="PERF_TP_FLAG_CACHE_REQUEST_LATENCY"/>
+       <value value="6" name="PERF_TP_L1_CACHELINE_REQUESTS"/>
+       <value value="7" name="PERF_TP_L1_CACHELINE_MISSES"/>
+       <value value="8" name="PERF_TP_SP_TP_TRANS"/>
+       <value value="9" name="PERF_TP_TP_SP_TRANS"/>
+       <value value="10" name="PERF_TP_OUTPUT_PIXELS"/>
+       <value value="11" name="PERF_TP_FILTER_WORKLOAD_16BIT"/>
+       <value value="12" name="PERF_TP_FILTER_WORKLOAD_32BIT"/>
+       <value value="13" name="PERF_TP_QUADS_RECEIVED"/>
+       <value value="14" name="PERF_TP_QUADS_OFFSET"/>
+       <value value="15" name="PERF_TP_QUADS_SHADOW"/>
+       <value value="16" name="PERF_TP_QUADS_ARRAY"/>
+       <value value="17" name="PERF_TP_QUADS_GRADIENT"/>
+       <value value="18" name="PERF_TP_QUADS_1D"/>
+       <value value="19" name="PERF_TP_QUADS_2D"/>
+       <value value="20" name="PERF_TP_QUADS_BUFFER"/>
+       <value value="21" name="PERF_TP_QUADS_3D"/>
+       <value value="22" name="PERF_TP_QUADS_CUBE"/>
+       <value value="23" name="PERF_TP_DIVERGENT_QUADS_RECEIVED"/>
+       <value value="24" name="PERF_TP_PRT_NON_RESIDENT_EVENTS"/>
+       <value value="25" name="PERF_TP_OUTPUT_PIXELS_POINT"/>
+       <value value="26" name="PERF_TP_OUTPUT_PIXELS_BILINEAR"/>
+       <value value="27" name="PERF_TP_OUTPUT_PIXELS_MIP"/>
+       <value value="28" name="PERF_TP_OUTPUT_PIXELS_ANISO"/>
+       <value value="29" name="PERF_TP_OUTPUT_PIXELS_ZERO_LOD"/>
+       <value value="30" name="PERF_TP_FLAG_CACHE_REQUESTS"/>
+       <value value="31" name="PERF_TP_FLAG_CACHE_MISSES"/>
+       <value value="32" name="PERF_TP_L1_5_L2_REQUESTS"/>
+       <value value="33" name="PERF_TP_2D_OUTPUT_PIXELS"/>
+       <value value="34" name="PERF_TP_2D_OUTPUT_PIXELS_POINT"/>
+       <value value="35" name="PERF_TP_2D_OUTPUT_PIXELS_BILINEAR"/>
+       <value value="36" name="PERF_TP_2D_FILTER_WORKLOAD_16BIT"/>
+       <value value="37" name="PERF_TP_2D_FILTER_WORKLOAD_32BIT"/>
+       <value value="38" name="PERF_TP_TPA2TPC_TRANS"/>
+       <value value="39" name="PERF_TP_L1_MISSES_ASTC_1TILE"/>
+       <value value="40" name="PERF_TP_L1_MISSES_ASTC_2TILE"/>
+       <value value="41" name="PERF_TP_L1_MISSES_ASTC_4TILE"/>
+       <value value="42" name="PERF_TP_L1_5_L2_COMPRESS_REQS"/>
+       <value value="43" name="PERF_TP_L1_5_L2_COMPRESS_MISS"/>
+       <value value="44" name="PERF_TP_L1_BANK_CONFLICT"/>
+       <value value="45" name="PERF_TP_L1_5_MISS_LATENCY_CYCLES"/>
+       <value value="46" name="PERF_TP_L1_5_MISS_LATENCY_TRANS"/>
+       <value value="47" name="PERF_TP_QUADS_CONSTANT_MULTIPLIED"/>
+       <value value="48" name="PERF_TP_FRONTEND_WORKING_CYCLES"/>
+       <value value="49" name="PERF_TP_L1_TAG_WORKING_CYCLES"/>
+       <value value="50" name="PERF_TP_L1_DATA_WRITE_WORKING_CYCLES"/>
+       <value value="51" name="PERF_TP_PRE_L1_DECOM_WORKING_CYCLES"/>
+       <value value="52" name="PERF_TP_BACKEND_WORKING_CYCLES"/>
+       <value value="53" name="PERF_TP_FLAG_CACHE_WORKING_CYCLES"/>
+       <value value="54" name="PERF_TP_L1_5_CACHE_WORKING_CYCLES"/>
+       <value value="55" name="PERF_TP_STARVE_CYCLES_SP"/>
+       <value value="56" name="PERF_TP_STARVE_CYCLES_UCHE"/>
+</enum>
+
+<enum name="a6xx_sp_perfcounter_select">
+       <value value="0" name="PERF_SP_BUSY_CYCLES"/>
+       <value value="1" name="PERF_SP_ALU_WORKING_CYCLES"/>
+       <value value="2" name="PERF_SP_EFU_WORKING_CYCLES"/>
+       <value value="3" name="PERF_SP_STALL_CYCLES_VPC"/>
+       <value value="4" name="PERF_SP_STALL_CYCLES_TP"/>
+       <value value="5" name="PERF_SP_STALL_CYCLES_UCHE"/>
+       <value value="6" name="PERF_SP_STALL_CYCLES_RB"/>
+       <value value="7" name="PERF_SP_NON_EXECUTION_CYCLES"/>
+       <value value="8" name="PERF_SP_WAVE_CONTEXTS"/>
+       <value value="9" name="PERF_SP_WAVE_CONTEXT_CYCLES"/>
+       <value value="10" name="PERF_SP_FS_STAGE_WAVE_CYCLES"/>
+       <value value="11" name="PERF_SP_FS_STAGE_WAVE_SAMPLES"/>
+       <value value="12" name="PERF_SP_VS_STAGE_WAVE_CYCLES"/>
+       <value value="13" name="PERF_SP_VS_STAGE_WAVE_SAMPLES"/>
+       <value value="14" name="PERF_SP_FS_STAGE_DURATION_CYCLES"/>
+       <value value="15" name="PERF_SP_VS_STAGE_DURATION_CYCLES"/>
+       <value value="16" name="PERF_SP_WAVE_CTRL_CYCLES"/>
+       <value value="17" name="PERF_SP_WAVE_LOAD_CYCLES"/>
+       <value value="18" name="PERF_SP_WAVE_EMIT_CYCLES"/>
+       <value value="19" name="PERF_SP_WAVE_NOP_CYCLES"/>
+       <value value="20" name="PERF_SP_WAVE_WAIT_CYCLES"/>
+       <value value="21" name="PERF_SP_WAVE_FETCH_CYCLES"/>
+       <value value="22" name="PERF_SP_WAVE_IDLE_CYCLES"/>
+       <value value="23" name="PERF_SP_WAVE_END_CYCLES"/>
+       <value value="24" name="PERF_SP_WAVE_LONG_SYNC_CYCLES"/>
+       <value value="25" name="PERF_SP_WAVE_SHORT_SYNC_CYCLES"/>
+       <value value="26" name="PERF_SP_WAVE_JOIN_CYCLES"/>
+       <value value="27" name="PERF_SP_LM_LOAD_INSTRUCTIONS"/>
+       <value value="28" name="PERF_SP_LM_STORE_INSTRUCTIONS"/>
+       <value value="29" name="PERF_SP_LM_ATOMICS"/>
+       <value value="30" name="PERF_SP_GM_LOAD_INSTRUCTIONS"/>
+       <value value="31" name="PERF_SP_GM_STORE_INSTRUCTIONS"/>
+       <value value="32" name="PERF_SP_GM_ATOMICS"/>
+       <value value="33" name="PERF_SP_VS_STAGE_TEX_INSTRUCTIONS"/>
+       <value value="34" name="PERF_SP_VS_STAGE_EFU_INSTRUCTIONS"/>
+       <value value="35" name="PERF_SP_VS_STAGE_FULL_ALU_INSTRUCTIONS"/>
+       <value value="36" name="PERF_SP_VS_STAGE_HALF_ALU_INSTRUCTIONS"/>
+       <value value="37" name="PERF_SP_FS_STAGE_TEX_INSTRUCTIONS"/>
+       <value value="38" name="PERF_SP_FS_STAGE_CFLOW_INSTRUCTIONS"/>
+       <value value="39" name="PERF_SP_FS_STAGE_EFU_INSTRUCTIONS"/>
+       <value value="40" name="PERF_SP_FS_STAGE_FULL_ALU_INSTRUCTIONS"/>
+       <value value="41" name="PERF_SP_FS_STAGE_HALF_ALU_INSTRUCTIONS"/>
+       <value value="42" name="PERF_SP_FS_STAGE_BARY_INSTRUCTIONS"/>
+       <value value="43" name="PERF_SP_VS_INSTRUCTIONS"/>
+       <value value="44" name="PERF_SP_FS_INSTRUCTIONS"/>
+       <value value="45" name="PERF_SP_ADDR_LOCK_COUNT"/>
+       <value value="46" name="PERF_SP_UCHE_READ_TRANS"/>
+       <value value="47" name="PERF_SP_UCHE_WRITE_TRANS"/>
+       <value value="48" name="PERF_SP_EXPORT_VPC_TRANS"/>
+       <value value="49" name="PERF_SP_EXPORT_RB_TRANS"/>
+       <value value="50" name="PERF_SP_PIXELS_KILLED"/>
+       <value value="51" name="PERF_SP_ICL1_REQUESTS"/>
+       <value value="52" name="PERF_SP_ICL1_MISSES"/>
+       <value value="53" name="PERF_SP_HS_INSTRUCTIONS"/>
+       <value value="54" name="PERF_SP_DS_INSTRUCTIONS"/>
+       <value value="55" name="PERF_SP_GS_INSTRUCTIONS"/>
+       <value value="56" name="PERF_SP_CS_INSTRUCTIONS"/>
+       <value value="57" name="PERF_SP_GPR_READ"/>
+       <value value="58" name="PERF_SP_GPR_WRITE"/>
+       <value value="59" name="PERF_SP_FS_STAGE_HALF_EFU_INSTRUCTIONS"/>
+       <value value="60" name="PERF_SP_VS_STAGE_HALF_EFU_INSTRUCTIONS"/>
+       <value value="61" name="PERF_SP_LM_BANK_CONFLICTS"/>
+       <value value="62" name="PERF_SP_TEX_CONTROL_WORKING_CYCLES"/>
+       <value value="63" name="PERF_SP_LOAD_CONTROL_WORKING_CYCLES"/>
+       <value value="64" name="PERF_SP_FLOW_CONTROL_WORKING_CYCLES"/>
+       <value value="65" name="PERF_SP_LM_WORKING_CYCLES"/>
+       <value value="66" name="PERF_SP_DISPATCHER_WORKING_CYCLES"/>
+       <value value="67" name="PERF_SP_SEQUENCER_WORKING_CYCLES"/>
+       <value value="68" name="PERF_SP_LOW_EFFICIENCY_STARVED_BY_TP"/>
+       <value value="69" name="PERF_SP_STARVE_CYCLES_HLSQ"/>
+       <value value="70" name="PERF_SP_NON_EXECUTION_LS_CYCLES"/>
+       <value value="71" name="PERF_SP_WORKING_EU"/>
+       <value value="72" name="PERF_SP_ANY_EU_WORKING"/>
+       <value value="73" name="PERF_SP_WORKING_EU_FS_STAGE"/>
+       <value value="74" name="PERF_SP_ANY_EU_WORKING_FS_STAGE"/>
+       <value value="75" name="PERF_SP_WORKING_EU_VS_STAGE"/>
+       <value value="76" name="PERF_SP_ANY_EU_WORKING_VS_STAGE"/>
+       <value value="77" name="PERF_SP_WORKING_EU_CS_STAGE"/>
+       <value value="78" name="PERF_SP_ANY_EU_WORKING_CS_STAGE"/>
+       <value value="79" name="PERF_SP_GPR_READ_PREFETCH"/>
+       <value value="80" name="PERF_SP_GPR_READ_CONFLICT"/>
+       <value value="81" name="PERF_SP_GPR_WRITE_CONFLICT"/>
+       <value value="82" name="PERF_SP_GM_LOAD_LATENCY_CYCLES"/>
+       <value value="83" name="PERF_SP_GM_LOAD_LATENCY_SAMPLES"/>
+       <value value="84" name="PERF_SP_EXECUTABLE_WAVES"/>
+</enum>
+
+<enum name="a6xx_rb_perfcounter_select">
+       <value value="0" name="PERF_RB_BUSY_CYCLES"/>
+       <value value="1" name="PERF_RB_STALL_CYCLES_HLSQ"/>
+       <value value="2" name="PERF_RB_STALL_CYCLES_FIFO0_FULL"/>
+       <value value="3" name="PERF_RB_STALL_CYCLES_FIFO1_FULL"/>
+       <value value="4" name="PERF_RB_STALL_CYCLES_FIFO2_FULL"/>
+       <value value="5" name="PERF_RB_STARVE_CYCLES_SP"/>
+       <value value="6" name="PERF_RB_STARVE_CYCLES_LRZ_TILE"/>
+       <value value="7" name="PERF_RB_STARVE_CYCLES_CCU"/>
+       <value value="8" name="PERF_RB_STARVE_CYCLES_Z_PLANE"/>
+       <value value="9" name="PERF_RB_STARVE_CYCLES_BARY_PLANE"/>
+       <value value="10" name="PERF_RB_Z_WORKLOAD"/>
+       <value value="11" name="PERF_RB_HLSQ_ACTIVE"/>
+       <value value="12" name="PERF_RB_Z_READ"/>
+       <value value="13" name="PERF_RB_Z_WRITE"/>
+       <value value="14" name="PERF_RB_C_READ"/>
+       <value value="15" name="PERF_RB_C_WRITE"/>
+       <value value="16" name="PERF_RB_TOTAL_PASS"/>
+       <value value="17" name="PERF_RB_Z_PASS"/>
+       <value value="18" name="PERF_RB_Z_FAIL"/>
+       <value value="19" name="PERF_RB_S_FAIL"/>
+       <value value="20" name="PERF_RB_BLENDED_FXP_COMPONENTS"/>
+       <value value="21" name="PERF_RB_BLENDED_FP16_COMPONENTS"/>
+       <value value="22" name="PERF_RB_PS_INVOCATIONS"/>
+       <value value="23" name="PERF_RB_2D_ALIVE_CYCLES"/>
+       <value value="24" name="PERF_RB_2D_STALL_CYCLES_A2D"/>
+       <value value="25" name="PERF_RB_2D_STARVE_CYCLES_SRC"/>
+       <value value="26" name="PERF_RB_2D_STARVE_CYCLES_SP"/>
+       <value value="27" name="PERF_RB_2D_STARVE_CYCLES_DST"/>
+       <value value="28" name="PERF_RB_2D_VALID_PIXELS"/>
+       <value value="29" name="PERF_RB_3D_PIXELS"/>
+       <value value="30" name="PERF_RB_BLENDER_WORKING_CYCLES"/>
+       <value value="31" name="PERF_RB_ZPROC_WORKING_CYCLES"/>
+       <value value="32" name="PERF_RB_CPROC_WORKING_CYCLES"/>
+       <value value="33" name="PERF_RB_SAMPLER_WORKING_CYCLES"/>
+       <value value="34" name="PERF_RB_STALL_CYCLES_CCU_COLOR_READ"/>
+       <value value="35" name="PERF_RB_STALL_CYCLES_CCU_COLOR_WRITE"/>
+       <value value="36" name="PERF_RB_STALL_CYCLES_CCU_DEPTH_READ"/>
+       <value value="37" name="PERF_RB_STALL_CYCLES_CCU_DEPTH_WRITE"/>
+       <value value="38" name="PERF_RB_STALL_CYCLES_VPC"/>
+       <value value="39" name="PERF_RB_2D_INPUT_TRANS"/>
+       <value value="40" name="PERF_RB_2D_OUTPUT_RB_DST_TRANS"/>
+       <value value="41" name="PERF_RB_2D_OUTPUT_RB_SRC_TRANS"/>
+       <value value="42" name="PERF_RB_BLENDED_FP32_COMPONENTS"/>
+       <value value="43" name="PERF_RB_COLOR_PIX_TILES"/>
+       <value value="44" name="PERF_RB_STALL_CYCLES_CCU"/>
+       <value value="45" name="PERF_RB_EARLY_Z_ARB3_GRANT"/>
+       <value value="46" name="PERF_RB_LATE_Z_ARB3_GRANT"/>
+       <value value="47" name="PERF_RB_EARLY_Z_SKIP_GRANT"/>
+</enum>
+
+<enum name="a6xx_vsc_perfcounter_select">
+       <value value="0" name="PERF_VSC_BUSY_CYCLES"/>
+       <value value="1" name="PERF_VSC_WORKING_CYCLES"/>
+       <value value="2" name="PERF_VSC_STALL_CYCLES_UCHE"/>
+       <value value="3" name="PERF_VSC_EOT_NUM"/>
+       <value value="4" name="PERF_VSC_INPUT_TILES"/>
+</enum>
+
+<enum name="a6xx_ccu_perfcounter_select">
+       <value value="0" name="PERF_CCU_BUSY_CYCLES"/>
+       <value value="1" name="PERF_CCU_STALL_CYCLES_RB_DEPTH_RETURN"/>
+       <value value="2" name="PERF_CCU_STALL_CYCLES_RB_COLOR_RETURN"/>
+       <value value="3" name="PERF_CCU_STARVE_CYCLES_FLAG_RETURN"/>
+       <value value="4" name="PERF_CCU_DEPTH_BLOCKS"/>
+       <value value="5" name="PERF_CCU_COLOR_BLOCKS"/>
+       <value value="6" name="PERF_CCU_DEPTH_BLOCK_HIT"/>
+       <value value="7" name="PERF_CCU_COLOR_BLOCK_HIT"/>
+       <value value="8" name="PERF_CCU_PARTIAL_BLOCK_READ"/>
+       <value value="9" name="PERF_CCU_GMEM_READ"/>
+       <value value="10" name="PERF_CCU_GMEM_WRITE"/>
+       <value value="11" name="PERF_CCU_DEPTH_READ_FLAG0_COUNT"/>
+       <value value="12" name="PERF_CCU_DEPTH_READ_FLAG1_COUNT"/>
+       <value value="13" name="PERF_CCU_DEPTH_READ_FLAG2_COUNT"/>
+       <value value="14" name="PERF_CCU_DEPTH_READ_FLAG3_COUNT"/>
+       <value value="15" name="PERF_CCU_DEPTH_READ_FLAG4_COUNT"/>
+       <value value="16" name="PERF_CCU_DEPTH_READ_FLAG5_COUNT"/>
+       <value value="17" name="PERF_CCU_DEPTH_READ_FLAG6_COUNT"/>
+       <value value="18" name="PERF_CCU_DEPTH_READ_FLAG8_COUNT"/>
+       <value value="19" name="PERF_CCU_COLOR_READ_FLAG0_COUNT"/>
+       <value value="20" name="PERF_CCU_COLOR_READ_FLAG1_COUNT"/>
+       <value value="21" name="PERF_CCU_COLOR_READ_FLAG2_COUNT"/>
+       <value value="22" name="PERF_CCU_COLOR_READ_FLAG3_COUNT"/>
+       <value value="23" name="PERF_CCU_COLOR_READ_FLAG4_COUNT"/>
+       <value value="24" name="PERF_CCU_COLOR_READ_FLAG5_COUNT"/>
+       <value value="25" name="PERF_CCU_COLOR_READ_FLAG6_COUNT"/>
+       <value value="26" name="PERF_CCU_COLOR_READ_FLAG8_COUNT"/>
+       <value value="27" name="PERF_CCU_2D_RD_REQ"/>
+       <value value="28" name="PERF_CCU_2D_WR_REQ"/>
+</enum>
+
+<enum name="a6xx_lrz_perfcounter_select">
+       <value value="0" name="PERF_LRZ_BUSY_CYCLES"/>
+       <value value="1" name="PERF_LRZ_STARVE_CYCLES_RAS"/>
+       <value value="2" name="PERF_LRZ_STALL_CYCLES_RB"/>
+       <value value="3" name="PERF_LRZ_STALL_CYCLES_VSC"/>
+       <value value="4" name="PERF_LRZ_STALL_CYCLES_VPC"/>
+       <value value="5" name="PERF_LRZ_STALL_CYCLES_FLAG_PREFETCH"/>
+       <value value="6" name="PERF_LRZ_STALL_CYCLES_UCHE"/>
+       <value value="7" name="PERF_LRZ_LRZ_READ"/>
+       <value value="8" name="PERF_LRZ_LRZ_WRITE"/>
+       <value value="9" name="PERF_LRZ_READ_LATENCY"/>
+       <value value="10" name="PERF_LRZ_MERGE_CACHE_UPDATING"/>
+       <value value="11" name="PERF_LRZ_PRIM_KILLED_BY_MASKGEN"/>
+       <value value="12" name="PERF_LRZ_PRIM_KILLED_BY_LRZ"/>
+       <value value="13" name="PERF_LRZ_VISIBLE_PRIM_AFTER_LRZ"/>
+       <value value="14" name="PERF_LRZ_FULL_8X8_TILES"/>
+       <value value="15" name="PERF_LRZ_PARTIAL_8X8_TILES"/>
+       <value value="16" name="PERF_LRZ_TILE_KILLED"/>
+       <value value="17" name="PERF_LRZ_TOTAL_PIXEL"/>
+       <value value="18" name="PERF_LRZ_VISIBLE_PIXEL_AFTER_LRZ"/>
+       <value value="19" name="PERF_LRZ_FULLY_COVERED_TILES"/>
+       <value value="20" name="PERF_LRZ_PARTIAL_COVERED_TILES"/>
+       <value value="21" name="PERF_LRZ_FEEDBACK_ACCEPT"/>
+       <value value="22" name="PERF_LRZ_FEEDBACK_DISCARD"/>
+       <value value="23" name="PERF_LRZ_FEEDBACK_STALL"/>
+       <value value="24" name="PERF_LRZ_STALL_CYCLES_RB_ZPLANE"/>
+       <value value="25" name="PERF_LRZ_STALL_CYCLES_RB_BPLANE"/>
+       <value value="26" name="PERF_LRZ_STALL_CYCLES_VC"/>
+       <value value="27" name="PERF_LRZ_RAS_MASK_TRANS"/>
+</enum>
+
+<enum name="a6xx_cmp_perfcounter_select">
+       <value value="0" name="PERF_CMPDECMP_STALL_CYCLES_ARB"/>
+       <value value="1" name="PERF_CMPDECMP_VBIF_LATENCY_CYCLES"/>
+       <value value="2" name="PERF_CMPDECMP_VBIF_LATENCY_SAMPLES"/>
+       <value value="3" name="PERF_CMPDECMP_VBIF_READ_DATA_CCU"/>
+       <value value="4" name="PERF_CMPDECMP_VBIF_WRITE_DATA_CCU"/>
+       <value value="5" name="PERF_CMPDECMP_VBIF_READ_REQUEST"/>
+       <value value="6" name="PERF_CMPDECMP_VBIF_WRITE_REQUEST"/>
+       <value value="7" name="PERF_CMPDECMP_VBIF_READ_DATA"/>
+       <value value="8" name="PERF_CMPDECMP_VBIF_WRITE_DATA"/>
+       <value value="9" name="PERF_CMPDECMP_FLAG_FETCH_CYCLES"/>
+       <value value="10" name="PERF_CMPDECMP_FLAG_FETCH_SAMPLES"/>
+       <value value="11" name="PERF_CMPDECMP_DEPTH_WRITE_FLAG1_COUNT"/>
+       <value value="12" name="PERF_CMPDECMP_DEPTH_WRITE_FLAG2_COUNT"/>
+       <value value="13" name="PERF_CMPDECMP_DEPTH_WRITE_FLAG3_COUNT"/>
+       <value value="14" name="PERF_CMPDECMP_DEPTH_WRITE_FLAG4_COUNT"/>
+       <value value="15" name="PERF_CMPDECMP_DEPTH_WRITE_FLAG5_COUNT"/>
+       <value value="16" name="PERF_CMPDECMP_DEPTH_WRITE_FLAG6_COUNT"/>
+       <value value="17" name="PERF_CMPDECMP_DEPTH_WRITE_FLAG8_COUNT"/>
+       <value value="18" name="PERF_CMPDECMP_COLOR_WRITE_FLAG1_COUNT"/>
+       <value value="19" name="PERF_CMPDECMP_COLOR_WRITE_FLAG2_COUNT"/>
+       <value value="20" name="PERF_CMPDECMP_COLOR_WRITE_FLAG3_COUNT"/>
+       <value value="21" name="PERF_CMPDECMP_COLOR_WRITE_FLAG4_COUNT"/>
+       <value value="22" name="PERF_CMPDECMP_COLOR_WRITE_FLAG5_COUNT"/>
+       <value value="23" name="PERF_CMPDECMP_COLOR_WRITE_FLAG6_COUNT"/>
+       <value value="24" name="PERF_CMPDECMP_COLOR_WRITE_FLAG8_COUNT"/>
+       <value value="25" name="PERF_CMPDECMP_2D_STALL_CYCLES_VBIF_REQ"/>
+       <value value="26" name="PERF_CMPDECMP_2D_STALL_CYCLES_VBIF_WR"/>
+       <value value="27" name="PERF_CMPDECMP_2D_STALL_CYCLES_VBIF_RETURN"/>
+       <value value="28" name="PERF_CMPDECMP_2D_RD_DATA"/>
+       <value value="29" name="PERF_CMPDECMP_2D_WR_DATA"/>
+       <value value="30" name="PERF_CMPDECMP_VBIF_READ_DATA_UCHE_CH0"/>
+       <value value="31" name="PERF_CMPDECMP_VBIF_READ_DATA_UCHE_CH1"/>
+       <value value="32" name="PERF_CMPDECMP_2D_OUTPUT_TRANS"/>
+       <value value="33" name="PERF_CMPDECMP_VBIF_WRITE_DATA_UCHE"/>
+       <value value="34" name="PERF_CMPDECMP_DEPTH_WRITE_FLAG0_COUNT"/>
+       <value value="35" name="PERF_CMPDECMP_COLOR_WRITE_FLAG0_COUNT"/>
+       <value value="36" name="PERF_CMPDECMP_COLOR_WRITE_FLAGALPHA_COUNT"/>
+       <value value="37" name="PERF_CMPDECMP_2D_BUSY_CYCLES"/>
+       <value value="38" name="PERF_CMPDECMP_2D_REORDER_STARVE_CYCLES"/>
+       <value value="39" name="PERF_CMPDECMP_2D_PIXELS"/>
+</enum>
+
+<!--
+Used in a6xx_2d_blit_cntl.. the value mostly seems to correlate to the
+component type/size, so I think it relates to internal format used for
+blending?  The one exception is that 16b unorm and 32b float use the
+same value... maybe 16b unorm is uncommon enough that it was just easier
+to upconvert to 32b float internally?
+
+ 8b unorm:  10 (sometimes 0, is the high bit part of something else?)
+16b unorm:   4
+
+32b int:     7
+16b int:     6
+ 8b int:     5
+
+32b float:   4
+16b float:   3
+ -->
+<enum name="a6xx_2d_ifmt">
+       <value value="0x10" name="R2D_UNORM8"/>
+       <value value="0x7"  name="R2D_INT32"/>
+       <value value="0x6"  name="R2D_INT16"/>
+       <value value="0x5"  name="R2D_INT8"/>
+       <value value="0x4"  name="R2D_FLOAT32"/>
+       <value value="0x3"  name="R2D_FLOAT16"/>
+       <value value="0x1"  name="R2D_UNORM8_SRGB"/>
+       <value value="0x0"  name="R2D_RAW"/>
+</enum>
+
+<enum name="a6xx_ztest_mode">
+       <doc>Allow early z-test and early-lrz (if applicable)</doc>
+       <value value="0x0" name="A6XX_EARLY_Z"/>
+       <doc>Disable early z-test and early-lrz test (if applicable)</doc>
+       <value value="0x1" name="A6XX_LATE_Z"/>
+       <doc>
+               A special mode that allows early-lrz test but disables
+               early-z test.  Which might sound a bit funny, since
+               lrz-test happens before z-test.  But as long as a couple
+               conditions are maintained this allows using lrz-test in
+               cases where fragment shader has kill/discard:
+
+               1) Disable lrz-write in cases where it is uncertain during
+                  binning pass that a fragment will pass.  Ie.  if frag
+                  shader has-kill, writes-z, or alpha/stencil test is
+                  enabled.  (For correctness, lrz-write must be disabled
+                  when blend is enabled.)  This is analogous to how a
+                  z-prepass works.
+
+               2) Disable lrz-write and test if a depth-test direction
+                  reversal is detected.  Due to condition (1), the contents
+                  of the lrz buffer are a conservative estimation of the
+                  depth buffer during the draw pass.  Meaning that geometry
+                  that we know for certain will not be visible will not pass
+                  lrz-test.  But geometry which may be (or contributes to
+                  blend) will pass the lrz-test.
+
+               This allows us to keep early-lrz-test in cases where the frag
+               shader does not write-z (ie. we know the z-value before FS)
+               and does not have side-effects (image/ssbo writes, etc), but
+               does have kill/discard.  Which turns out to be a common
+               enough case that it is useful to keep early-lrz test against
+               the conservative lrz buffer to discard fragments that we
+               know will definitely not be visible.
+       </doc>
+       <value value="0x2" name="A6XX_EARLY_LRZ_LATE_Z"/>
+</enum>
+
+<domain name="A6XX" width="32">
+       <bitset name="A6XX_RBBM_INT_0_MASK" inline="no">
+               <bitfield name="RBBM_GPU_IDLE" pos="0" type="boolean"/>
+               <bitfield name="CP_AHB_ERROR" pos="1" type="boolean"/>
+               <bitfield name="RBBM_ATB_ASYNCFIFO_OVERFLOW" pos="6" type="boolean"/>
+               <bitfield name="RBBM_GPC_ERROR" pos="7" type="boolean"/>
+               <bitfield name="CP_SW" pos="8" type="boolean"/>
+               <bitfield name="CP_HW_ERROR" pos="9" type="boolean"/>
+               <bitfield name="CP_CCU_FLUSH_DEPTH_TS" pos="10" type="boolean"/>
+               <bitfield name="CP_CCU_FLUSH_COLOR_TS" pos="11" type="boolean"/>
+               <bitfield name="CP_CCU_RESOLVE_TS" pos="12" type="boolean"/>
+               <bitfield name="CP_IB2" pos="13" type="boolean"/>
+               <bitfield name="CP_IB1" pos="14" type="boolean"/>
+               <bitfield name="CP_RB" pos="15" type="boolean"/>
+               <bitfield name="CP_RB_DONE_TS" pos="17" type="boolean"/>
+               <bitfield name="CP_WT_DONE_TS" pos="18" type="boolean"/>
+               <bitfield name="CP_CACHE_FLUSH_TS" pos="20" type="boolean"/>
+               <bitfield name="RBBM_ATB_BUS_OVERFLOW" pos="22" type="boolean"/>
+               <bitfield name="RBBM_HANG_DETECT" pos="23" type="boolean"/>
+               <bitfield name="UCHE_OOB_ACCESS" pos="24" type="boolean"/>
+               <bitfield name="UCHE_TRAP_INTR" pos="25" type="boolean"/>
+               <bitfield name="DEBBUS_INTR_0" pos="26" type="boolean"/>
+               <bitfield name="DEBBUS_INTR_1" pos="27" type="boolean"/>
+               <bitfield name="ISDB_CPU_IRQ" pos="30" type="boolean"/>
+               <bitfield name="ISDB_UNDER_DEBUG" pos="31" type="boolean"/>
+       </bitset>
+
+       <bitset name="A6XX_CP_INT">
+               <bitfield name="CP_OPCODE_ERROR" pos="0" type="boolean"/>
+               <bitfield name="CP_UCODE_ERROR" pos="1" type="boolean"/>
+               <bitfield name="CP_HW_FAULT_ERROR" pos="2" type="boolean"/>
+               <bitfield name="CP_REGISTER_PROTECTION_ERROR" pos="4" type="boolean"/>
+               <bitfield name="CP_AHB_ERROR" pos="5" type="boolean"/>
+               <bitfield name="CP_VSD_PARITY_ERROR" pos="6" type="boolean"/>
+               <bitfield name="CP_ILLEGAL_INSTR_ERROR" pos="7" type="boolean"/>
+       </bitset>
+
+       <reg32 offset="0x0800" name="CP_RB_BASE"/>
+       <reg32 offset="0x0801" name="CP_RB_BASE_HI"/>
+       <reg32 offset="0x0802" name="CP_RB_CNTL"/>
+       <reg32 offset="0x0804" name="CP_RB_RPTR_ADDR_LO"/>
+       <reg32 offset="0x0805" name="CP_RB_RPTR_ADDR_HI"/>
+       <reg32 offset="0x0806" name="CP_RB_RPTR"/>
+       <reg32 offset="0x0807" name="CP_RB_WPTR"/>
+       <reg32 offset="0x0808" name="CP_SQE_CNTL"/>
+       <reg32 offset="0x0812" name="CP_CP2GMU_STATUS">
+               <bitfield name="IFPC" pos="0" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x0821" name="CP_HW_FAULT"/>
+       <reg32 offset="0x0823" name="CP_INTERRUPT_STATUS"/>
+       <reg32 offset="0x0824" name="CP_PROTECT_STATUS"/>
+       <reg32 offset="0x0830" name="CP_SQE_INSTR_BASE_LO"/>
+       <reg32 offset="0x0831" name="CP_SQE_INSTR_BASE_HI"/>
+       <reg32 offset="0x0840" name="CP_MISC_CNTL"/>
+       <reg32 offset="0x0844" name="CP_APRIV_CNTL"/>
+       <!-- all the threshold values seem to be in units of quad-dwords: -->
+       <reg32 offset="0x08C1" name="CP_ROQ_THRESHOLDS_1">
+               <doc>
+                       b0..7 seems to contain the size of buffered by not yet processed
+                       RB level cmdstream.. it's possible that it is a low threshold
+                       and b8..15 is a high threshold?
+
+                       b16..23 identifies where IB1 data starts (and RB data ends?)
+
+                       b24..31 identifies where IB2 data starts (and IB1 data ends)
+               </doc>
+               <bitfield name="RB_LO" low="0" high="7" shr="2"/>
+               <bitfield name="RB_HI" low="8" high="15" shr="2"/>
+               <bitfield name="IB1_START" low="16" high="23" shr="2"/>
+               <bitfield name="IB2_START" low="24" high="31" shr="2"/>
+       </reg32>
+       <reg32 offset="0x08C2" name="CP_ROQ_THRESHOLDS_2">
+               <doc>
+                       low bits identify where CP_SET_DRAW_STATE stateobj
+                       processing starts (and IB2 data ends). I'm guessing
+                       b8 is part of this since (from downstream kgsl):
+
+                               /* ROQ sizes are twice as big on a640/a680 than on a630 */
+                               if (adreno_is_a640(adreno_dev) || adreno_is_a680(adreno_dev)) {
+                                       kgsl_regwrite(device, A6XX_CP_ROQ_THRESHOLDS_2, 0x02000140);
+                                       kgsl_regwrite(device, A6XX_CP_ROQ_THRESHOLDS_1, 0x8040362C);
+                               } ...
+               </doc>
+               <bitfield name="SDS_START" low="0" high="8" shr="2"/>
+               <!-- total ROQ size: -->
+               <bitfield name="ROQ_SIZE" low="16" high="31" shr="2"/>
+       </reg32>
+       <reg32 offset="0x08C3" name="CP_MEM_POOL_SIZE"/>
+       <reg32 offset="0x0841" name="CP_CHICKEN_DBG"/>
+       <reg32 offset="0x0842" name="CP_ADDR_MODE_CNTL" type="a5xx_address_mode"/>
+       <reg32 offset="0x0843" name="CP_DBG_ECO_CNTL"/>
+       <reg32 offset="0x084F" name="CP_PROTECT_CNTL"/>
+
+       <array offset="0x0883" name="CP_SCRATCH" stride="1" length="8">
+               <reg32 offset="0x0" name="REG" type="uint"/>
+       </array>
+       <array offset="0x0850" name="CP_PROTECT" stride="1" length="32">
+               <reg32 offset="0x0" name="REG" type="a6x_cp_protect"/>
+       </array>
+
+       <reg32 offset="0x08A0" name="CP_CONTEXT_SWITCH_CNTL"/>
+       <reg32 offset="0x08A1" name="CP_CONTEXT_SWITCH_SMMU_INFO_LO"/>
+       <reg32 offset="0x08A2" name="CP_CONTEXT_SWITCH_SMMU_INFO_HI"/>
+       <reg32 offset="0x08A3" name="CP_CONTEXT_SWITCH_PRIV_NON_SECURE_RESTORE_ADDR_LO"/>
+       <reg32 offset="0x08A4" name="CP_CONTEXT_SWITCH_PRIV_NON_SECURE_RESTORE_ADDR_HI"/>
+       <reg32 offset="0x08A5" name="CP_CONTEXT_SWITCH_PRIV_SECURE_RESTORE_ADDR_LO"/>
+       <reg32 offset="0x08A6" name="CP_CONTEXT_SWITCH_PRIV_SECURE_RESTORE_ADDR_HI"/>
+       <reg32 offset="0x08A7" name="CP_CONTEXT_SWITCH_NON_PRIV_RESTORE_ADDR_LO"/>
+       <reg32 offset="0x08A8" name="CP_CONTEXT_SWITCH_NON_PRIV_RESTORE_ADDR_HI"/>
+       <reg32 offset="0x08D0" name="CP_PERFCTR_CP_SEL_0"/>
+       <reg32 offset="0x08D1" name="CP_PERFCTR_CP_SEL_1"/>
+       <reg32 offset="0x08D2" name="CP_PERFCTR_CP_SEL_2"/>
+       <reg32 offset="0x08D3" name="CP_PERFCTR_CP_SEL_3"/>
+       <reg32 offset="0x08D4" name="CP_PERFCTR_CP_SEL_4"/>
+       <reg32 offset="0x08D5" name="CP_PERFCTR_CP_SEL_5"/>
+       <reg32 offset="0x08D6" name="CP_PERFCTR_CP_SEL_6"/>
+       <reg32 offset="0x08D7" name="CP_PERFCTR_CP_SEL_7"/>
+       <reg32 offset="0x08D8" name="CP_PERFCTR_CP_SEL_8"/>
+       <reg32 offset="0x08D9" name="CP_PERFCTR_CP_SEL_9"/>
+       <reg32 offset="0x08DA" name="CP_PERFCTR_CP_SEL_10"/>
+       <reg32 offset="0x08DB" name="CP_PERFCTR_CP_SEL_11"/>
+       <reg32 offset="0x08DC" name="CP_PERFCTR_CP_SEL_12"/>
+       <reg32 offset="0x08DD" name="CP_PERFCTR_CP_SEL_13"/>
+       <reg32 offset="0x0900" name="CP_CRASH_SCRIPT_BASE_LO"/>
+       <reg32 offset="0x0901" name="CP_CRASH_SCRIPT_BASE_HI"/>
+       <reg32 offset="0x0902" name="CP_CRASH_DUMP_CNTL"/>
+       <reg32 offset="0x0903" name="CP_CRASH_DUMP_STATUS"/>
+       <reg32 offset="0x0908" name="CP_SQE_STAT_ADDR"/>
+       <reg32 offset="0x0909" name="CP_SQE_STAT_DATA"/>
+       <reg32 offset="0x090A" name="CP_DRAW_STATE_ADDR"/>
+       <reg32 offset="0x090B" name="CP_DRAW_STATE_DATA"/>
+       <reg32 offset="0x090C" name="CP_ROQ_DBG_ADDR"/>
+       <reg32 offset="0x090D" name="CP_ROQ_DBG_DATA"/>
+       <reg32 offset="0x090E" name="CP_MEM_POOL_DBG_ADDR"/>
+       <reg32 offset="0x090F" name="CP_MEM_POOL_DBG_DATA"/>
+       <reg32 offset="0x0910" name="CP_SQE_UCODE_DBG_ADDR"/>
+       <reg32 offset="0x0911" name="CP_SQE_UCODE_DBG_DATA"/>
+       <reg32 offset="0x0928" name="CP_IB1_BASE"/>
+       <reg32 offset="0x0929" name="CP_IB1_BASE_HI"/>
+       <reg32 offset="0x092A" name="CP_IB1_REM_SIZE"/>
+       <reg32 offset="0x092B" name="CP_IB2_BASE"/>
+       <reg32 offset="0x092C" name="CP_IB2_BASE_HI"/>
+       <reg32 offset="0x092D" name="CP_IB2_REM_SIZE"/>
+       <!-- SDS == CP_SET_DRAW_STATE: -->
+       <reg32 offset="0x092e" name="CP_SDS_BASE"/>
+       <reg32 offset="0x092f" name="CP_SDS_BASE_HI"/>
+       <reg32 offset="0x092e" name="CP_SDS_REM_SIZE"/>
+       <reg32 offset="0x0931" name="CP_BIN_SIZE_ADDRESS"/>
+       <reg32 offset="0x0932" name="CP_BIN_SIZE_ADDRESS_HI"/>
+       <reg32 offset="0x0934" name="CP_BIN_DATA_ADDR"/>
+       <reg32 offset="0x0935" name="CP_BIN_DATA_ADDR_HI"/>
+       <!--
+       There are probably similar registers for RB and SDS, teasing out SDS will
+       take a slightly better test case..
+        -->
+       <reg32 offset="0x0949" name="CP_CSQ_IB1_STAT">
+               <doc>number of remaining dwords incl current dword being consumed?</doc>
+               <bitfield name="REM" low="16" high="31"/>
+       </reg32>
+       <reg32 offset="0x094a" name="CP_CSQ_IB2_STAT">
+               <doc>number of remaining dwords incl current dword being consumed?</doc>
+               <bitfield name="REM" low="16" high="31"/>
+       </reg32>
+       <reg32 offset="0x0980" name="CP_ALWAYS_ON_COUNTER_LO"/>
+       <reg32 offset="0x0981" name="CP_ALWAYS_ON_COUNTER_HI"/>
+       <reg32 offset="0x098D" name="CP_AHB_CNTL"/>
+       <reg32 offset="0x0A00" name="CP_APERTURE_CNTL_HOST"/>
+       <reg32 offset="0x0A03" name="CP_APERTURE_CNTL_CD"/>
+       <reg32 offset="0x0C01" name="VSC_ADDR_MODE_CNTL" type="a5xx_address_mode"/>
+       <reg32 offset="0x0201" name="RBBM_INT_0_STATUS" type="A6XX_RBBM_INT_0_MASK"/>
+       <reg32 offset="0x0210" name="RBBM_STATUS">
+               <bitfield pos="23" name="GPU_BUSY_IGN_AHB" type="boolean"/>
+               <bitfield pos="22" name="GPU_BUSY_IGN_AHB_CP" type="boolean"/>
+               <bitfield pos="21" name="HLSQ_BUSY" type="boolean"/>
+               <bitfield pos="20" name="VSC_BUSY" type="boolean"/>
+               <bitfield pos="19" name="TPL1_BUSY" type="boolean"/>
+               <bitfield pos="18" name="SP_BUSY" type="boolean"/>
+               <bitfield pos="17" name="UCHE_BUSY" type="boolean"/>
+               <bitfield pos="16" name="VPC_BUSY" type="boolean"/>
+               <bitfield pos="15" name="VFD_BUSY" type="boolean"/>
+               <bitfield pos="14" name="TESS_BUSY" type="boolean"/>
+               <bitfield pos="13" name="PC_VSD_BUSY" type="boolean"/>
+               <bitfield pos="12" name="PC_DCALL_BUSY" type="boolean"/>
+               <bitfield pos="11" name="COM_DCOM_BUSY" type="boolean"/>
+               <bitfield pos="10" name="LRZ_BUSY" type="boolean"/>
+               <bitfield pos="9"  name="A2D_BUSY" type="boolean"/>
+               <bitfield pos="8"  name="CCU_BUSY" type="boolean"/>
+               <bitfield pos="7"  name="RB_BUSY" type="boolean"/>
+               <bitfield pos="6"  name="RAS_BUSY" type="boolean"/>
+               <bitfield pos="5"  name="TSE_BUSY" type="boolean"/>
+               <bitfield pos="4"  name="VBIF_BUSY" type="boolean"/>
+               <bitfield pos="3"  name="GFX_DBGC_BUSY" type="boolean"/>
+               <bitfield pos="2"  name="CP_BUSY" type="boolean"/>
+               <bitfield pos="1"  name="CP_AHB_BUSY_CP_MASTER" type="boolean"/>
+               <bitfield pos="0"  name="CP_AHB_BUSY_CX_MASTER" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x0213" name="RBBM_STATUS3">
+               <bitfield pos="24" name="SMMU_STALLED_ON_FAULT" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x0215" name="RBBM_VBIF_GX_RESET_STATUS"/>
+       <reg32 offset="0x0400" name="RBBM_PERFCTR_CP_0_LO"/>
+       <reg32 offset="0x0401" name="RBBM_PERFCTR_CP_0_HI"/>
+       <reg32 offset="0x0402" name="RBBM_PERFCTR_CP_1_LO"/>
+       <reg32 offset="0x0403" name="RBBM_PERFCTR_CP_1_HI"/>
+       <reg32 offset="0x0404" name="RBBM_PERFCTR_CP_2_LO"/>
+       <reg32 offset="0x0405" name="RBBM_PERFCTR_CP_2_HI"/>
+       <reg32 offset="0x0406" name="RBBM_PERFCTR_CP_3_LO"/>
+       <reg32 offset="0x0407" name="RBBM_PERFCTR_CP_3_HI"/>
+       <reg32 offset="0x0408" name="RBBM_PERFCTR_CP_4_LO"/>
+       <reg32 offset="0x0409" name="RBBM_PERFCTR_CP_4_HI"/>
+       <reg32 offset="0x040a" name="RBBM_PERFCTR_CP_5_LO"/>
+       <reg32 offset="0x040b" name="RBBM_PERFCTR_CP_5_HI"/>
+       <reg32 offset="0x040c" name="RBBM_PERFCTR_CP_6_LO"/>
+       <reg32 offset="0x040d" name="RBBM_PERFCTR_CP_6_HI"/>
+       <reg32 offset="0x040e" name="RBBM_PERFCTR_CP_7_LO"/>
+       <reg32 offset="0x040f" name="RBBM_PERFCTR_CP_7_HI"/>
+       <reg32 offset="0x0410" name="RBBM_PERFCTR_CP_8_LO"/>
+       <reg32 offset="0x0411" name="RBBM_PERFCTR_CP_8_HI"/>
+       <reg32 offset="0x0412" name="RBBM_PERFCTR_CP_9_LO"/>
+       <reg32 offset="0x0413" name="RBBM_PERFCTR_CP_9_HI"/>
+       <reg32 offset="0x0414" name="RBBM_PERFCTR_CP_10_LO"/>
+       <reg32 offset="0x0415" name="RBBM_PERFCTR_CP_10_HI"/>
+       <reg32 offset="0x0416" name="RBBM_PERFCTR_CP_11_LO"/>
+       <reg32 offset="0x0417" name="RBBM_PERFCTR_CP_11_HI"/>
+       <reg32 offset="0x0418" name="RBBM_PERFCTR_CP_12_LO"/>
+       <reg32 offset="0x0419" name="RBBM_PERFCTR_CP_12_HI"/>
+       <reg32 offset="0x041a" name="RBBM_PERFCTR_CP_13_LO"/>
+       <reg32 offset="0x041b" name="RBBM_PERFCTR_CP_13_HI"/>
+       <reg32 offset="0x041c" name="RBBM_PERFCTR_RBBM_0_LO"/>
+       <reg32 offset="0x041d" name="RBBM_PERFCTR_RBBM_0_HI"/>
+       <reg32 offset="0x041e" name="RBBM_PERFCTR_RBBM_1_LO"/>
+       <reg32 offset="0x041f" name="RBBM_PERFCTR_RBBM_1_HI"/>
+       <reg32 offset="0x0420" name="RBBM_PERFCTR_RBBM_2_LO"/>
+       <reg32 offset="0x0421" name="RBBM_PERFCTR_RBBM_2_HI"/>
+       <reg32 offset="0x0422" name="RBBM_PERFCTR_RBBM_3_LO"/>
+       <reg32 offset="0x0423" name="RBBM_PERFCTR_RBBM_3_HI"/>
+       <reg32 offset="0x0424" name="RBBM_PERFCTR_PC_0_LO"/>
+       <reg32 offset="0x0425" name="RBBM_PERFCTR_PC_0_HI"/>
+       <reg32 offset="0x0426" name="RBBM_PERFCTR_PC_1_LO"/>
+       <reg32 offset="0x0427" name="RBBM_PERFCTR_PC_1_HI"/>
+       <reg32 offset="0x0428" name="RBBM_PERFCTR_PC_2_LO"/>
+       <reg32 offset="0x0429" name="RBBM_PERFCTR_PC_2_HI"/>
+       <reg32 offset="0x042a" name="RBBM_PERFCTR_PC_3_LO"/>
+       <reg32 offset="0x042b" name="RBBM_PERFCTR_PC_3_HI"/>
+       <reg32 offset="0x042c" name="RBBM_PERFCTR_PC_4_LO"/>
+       <reg32 offset="0x042d" name="RBBM_PERFCTR_PC_4_HI"/>
+       <reg32 offset="0x042e" name="RBBM_PERFCTR_PC_5_LO"/>
+       <reg32 offset="0x042f" name="RBBM_PERFCTR_PC_5_HI"/>
+       <reg32 offset="0x0430" name="RBBM_PERFCTR_PC_6_LO"/>
+       <reg32 offset="0x0431" name="RBBM_PERFCTR_PC_6_HI"/>
+       <reg32 offset="0x0432" name="RBBM_PERFCTR_PC_7_LO"/>
+       <reg32 offset="0x0433" name="RBBM_PERFCTR_PC_7_HI"/>
+       <reg32 offset="0x0434" name="RBBM_PERFCTR_VFD_0_LO"/>
+       <reg32 offset="0x0435" name="RBBM_PERFCTR_VFD_0_HI"/>
+       <reg32 offset="0x0436" name="RBBM_PERFCTR_VFD_1_LO"/>
+       <reg32 offset="0x0437" name="RBBM_PERFCTR_VFD_1_HI"/>
+       <reg32 offset="0x0438" name="RBBM_PERFCTR_VFD_2_LO"/>
+       <reg32 offset="0x0439" name="RBBM_PERFCTR_VFD_2_HI"/>
+       <reg32 offset="0x043a" name="RBBM_PERFCTR_VFD_3_LO"/>
+       <reg32 offset="0x043b" name="RBBM_PERFCTR_VFD_3_HI"/>
+       <reg32 offset="0x043c" name="RBBM_PERFCTR_VFD_4_LO"/>
+       <reg32 offset="0x043d" name="RBBM_PERFCTR_VFD_4_HI"/>
+       <reg32 offset="0x043e" name="RBBM_PERFCTR_VFD_5_LO"/>
+       <reg32 offset="0x043f" name="RBBM_PERFCTR_VFD_5_HI"/>
+       <reg32 offset="0x0440" name="RBBM_PERFCTR_VFD_6_LO"/>
+       <reg32 offset="0x0441" name="RBBM_PERFCTR_VFD_6_HI"/>
+       <reg32 offset="0x0442" name="RBBM_PERFCTR_VFD_7_LO"/>
+       <reg32 offset="0x0443" name="RBBM_PERFCTR_VFD_7_HI"/>
+       <reg32 offset="0x0444" name="RBBM_PERFCTR_HLSQ_0_LO"/>
+       <reg32 offset="0x0445" name="RBBM_PERFCTR_HLSQ_0_HI"/>
+       <reg32 offset="0x0446" name="RBBM_PERFCTR_HLSQ_1_LO"/>
+       <reg32 offset="0x0447" name="RBBM_PERFCTR_HLSQ_1_HI"/>
+       <reg32 offset="0x0448" name="RBBM_PERFCTR_HLSQ_2_LO"/>
+       <reg32 offset="0x0449" name="RBBM_PERFCTR_HLSQ_2_HI"/>
+       <reg32 offset="0x044a" name="RBBM_PERFCTR_HLSQ_3_LO"/>
+       <reg32 offset="0x044b" name="RBBM_PERFCTR_HLSQ_3_HI"/>
+       <reg32 offset="0x044c" name="RBBM_PERFCTR_HLSQ_4_LO"/>
+       <reg32 offset="0x044d" name="RBBM_PERFCTR_HLSQ_4_HI"/>
+       <reg32 offset="0x044e" name="RBBM_PERFCTR_HLSQ_5_LO"/>
+       <reg32 offset="0x044f" name="RBBM_PERFCTR_HLSQ_5_HI"/>
+       <reg32 offset="0x0450" name="RBBM_PERFCTR_VPC_0_LO"/>
+       <reg32 offset="0x0451" name="RBBM_PERFCTR_VPC_0_HI"/>
+       <reg32 offset="0x0452" name="RBBM_PERFCTR_VPC_1_LO"/>
+       <reg32 offset="0x0453" name="RBBM_PERFCTR_VPC_1_HI"/>
+       <reg32 offset="0x0454" name="RBBM_PERFCTR_VPC_2_LO"/>
+       <reg32 offset="0x0455" name="RBBM_PERFCTR_VPC_2_HI"/>
+       <reg32 offset="0x0456" name="RBBM_PERFCTR_VPC_3_LO"/>
+       <reg32 offset="0x0457" name="RBBM_PERFCTR_VPC_3_HI"/>
+       <reg32 offset="0x0458" name="RBBM_PERFCTR_VPC_4_LO"/>
+       <reg32 offset="0x0459" name="RBBM_PERFCTR_VPC_4_HI"/>
+       <reg32 offset="0x045a" name="RBBM_PERFCTR_VPC_5_LO"/>
+       <reg32 offset="0x045b" name="RBBM_PERFCTR_VPC_5_HI"/>
+       <reg32 offset="0x045c" name="RBBM_PERFCTR_CCU_0_LO"/>
+       <reg32 offset="0x045d" name="RBBM_PERFCTR_CCU_0_HI"/>
+       <reg32 offset="0x045e" name="RBBM_PERFCTR_CCU_1_LO"/>
+       <reg32 offset="0x045f" name="RBBM_PERFCTR_CCU_1_HI"/>
+       <reg32 offset="0x0460" name="RBBM_PERFCTR_CCU_2_LO"/>
+       <reg32 offset="0x0461" name="RBBM_PERFCTR_CCU_2_HI"/>
+       <reg32 offset="0x0462" name="RBBM_PERFCTR_CCU_3_LO"/>
+       <reg32 offset="0x0463" name="RBBM_PERFCTR_CCU_3_HI"/>
+       <reg32 offset="0x0464" name="RBBM_PERFCTR_CCU_4_LO"/>
+       <reg32 offset="0x0465" name="RBBM_PERFCTR_CCU_4_HI"/>
+       <reg32 offset="0x0466" name="RBBM_PERFCTR_TSE_0_LO"/>
+       <reg32 offset="0x0467" name="RBBM_PERFCTR_TSE_0_HI"/>
+       <reg32 offset="0x0468" name="RBBM_PERFCTR_TSE_1_LO"/>
+       <reg32 offset="0x0469" name="RBBM_PERFCTR_TSE_1_HI"/>
+       <reg32 offset="0x046a" name="RBBM_PERFCTR_TSE_2_LO"/>
+       <reg32 offset="0x046b" name="RBBM_PERFCTR_TSE_2_HI"/>
+       <reg32 offset="0x046c" name="RBBM_PERFCTR_TSE_3_LO"/>
+       <reg32 offset="0x046d" name="RBBM_PERFCTR_TSE_3_HI"/>
+       <reg32 offset="0x046e" name="RBBM_PERFCTR_RAS_0_LO"/>
+       <reg32 offset="0x046f" name="RBBM_PERFCTR_RAS_0_HI"/>
+       <reg32 offset="0x0470" name="RBBM_PERFCTR_RAS_1_LO"/>
+       <reg32 offset="0x0471" name="RBBM_PERFCTR_RAS_1_HI"/>
+       <reg32 offset="0x0472" name="RBBM_PERFCTR_RAS_2_LO"/>
+       <reg32 offset="0x0473" name="RBBM_PERFCTR_RAS_2_HI"/>
+       <reg32 offset="0x0474" name="RBBM_PERFCTR_RAS_3_LO"/>
+       <reg32 offset="0x0475" name="RBBM_PERFCTR_RAS_3_HI"/>
+       <reg32 offset="0x0476" name="RBBM_PERFCTR_UCHE_0_LO"/>
+       <reg32 offset="0x0477" name="RBBM_PERFCTR_UCHE_0_HI"/>
+       <reg32 offset="0x0478" name="RBBM_PERFCTR_UCHE_1_LO"/>
+       <reg32 offset="0x0479" name="RBBM_PERFCTR_UCHE_1_HI"/>
+       <reg32 offset="0x047a" name="RBBM_PERFCTR_UCHE_2_LO"/>
+       <reg32 offset="0x047b" name="RBBM_PERFCTR_UCHE_2_HI"/>
+       <reg32 offset="0x047c" name="RBBM_PERFCTR_UCHE_3_LO"/>
+       <reg32 offset="0x047d" name="RBBM_PERFCTR_UCHE_3_HI"/>
+       <reg32 offset="0x047e" name="RBBM_PERFCTR_UCHE_4_LO"/>
+       <reg32 offset="0x047f" name="RBBM_PERFCTR_UCHE_4_HI"/>
+       <reg32 offset="0x0480" name="RBBM_PERFCTR_UCHE_5_LO"/>
+       <reg32 offset="0x0481" name="RBBM_PERFCTR_UCHE_5_HI"/>
+       <reg32 offset="0x0482" name="RBBM_PERFCTR_UCHE_6_LO"/>
+       <reg32 offset="0x0483" name="RBBM_PERFCTR_UCHE_6_HI"/>
+       <reg32 offset="0x0484" name="RBBM_PERFCTR_UCHE_7_LO"/>
+       <reg32 offset="0x0485" name="RBBM_PERFCTR_UCHE_7_HI"/>
+       <reg32 offset="0x0486" name="RBBM_PERFCTR_UCHE_8_LO"/>
+       <reg32 offset="0x0487" name="RBBM_PERFCTR_UCHE_8_HI"/>
+       <reg32 offset="0x0488" name="RBBM_PERFCTR_UCHE_9_LO"/>
+       <reg32 offset="0x0489" name="RBBM_PERFCTR_UCHE_9_HI"/>
+       <reg32 offset="0x048a" name="RBBM_PERFCTR_UCHE_10_LO"/>
+       <reg32 offset="0x048b" name="RBBM_PERFCTR_UCHE_10_HI"/>
+       <reg32 offset="0x048c" name="RBBM_PERFCTR_UCHE_11_LO"/>
+       <reg32 offset="0x048d" name="RBBM_PERFCTR_UCHE_11_HI"/>
+       <reg32 offset="0x048e" name="RBBM_PERFCTR_TP_0_LO"/>
+       <reg32 offset="0x048f" name="RBBM_PERFCTR_TP_0_HI"/>
+       <reg32 offset="0x0490" name="RBBM_PERFCTR_TP_1_LO"/>
+       <reg32 offset="0x0491" name="RBBM_PERFCTR_TP_1_HI"/>
+       <reg32 offset="0x0492" name="RBBM_PERFCTR_TP_2_LO"/>
+       <reg32 offset="0x0493" name="RBBM_PERFCTR_TP_2_HI"/>
+       <reg32 offset="0x0494" name="RBBM_PERFCTR_TP_3_LO"/>
+       <reg32 offset="0x0495" name="RBBM_PERFCTR_TP_3_HI"/>
+       <reg32 offset="0x0496" name="RBBM_PERFCTR_TP_4_LO"/>
+       <reg32 offset="0x0497" name="RBBM_PERFCTR_TP_4_HI"/>
+       <reg32 offset="0x0498" name="RBBM_PERFCTR_TP_5_LO"/>
+       <reg32 offset="0x0499" name="RBBM_PERFCTR_TP_5_HI"/>
+       <reg32 offset="0x049a" name="RBBM_PERFCTR_TP_6_LO"/>
+       <reg32 offset="0x049b" name="RBBM_PERFCTR_TP_6_HI"/>
+       <reg32 offset="0x049c" name="RBBM_PERFCTR_TP_7_LO"/>
+       <reg32 offset="0x049d" name="RBBM_PERFCTR_TP_7_HI"/>
+       <reg32 offset="0x049e" name="RBBM_PERFCTR_TP_8_LO"/>
+       <reg32 offset="0x049f" name="RBBM_PERFCTR_TP_8_HI"/>
+       <reg32 offset="0x04a0" name="RBBM_PERFCTR_TP_9_LO"/>
+       <reg32 offset="0x04a1" name="RBBM_PERFCTR_TP_9_HI"/>
+       <reg32 offset="0x04a2" name="RBBM_PERFCTR_TP_10_LO"/>
+       <reg32 offset="0x04a3" name="RBBM_PERFCTR_TP_10_HI"/>
+       <reg32 offset="0x04a4" name="RBBM_PERFCTR_TP_11_LO"/>
+       <reg32 offset="0x04a5" name="RBBM_PERFCTR_TP_11_HI"/>
+       <reg32 offset="0x04a6" name="RBBM_PERFCTR_SP_0_LO"/>
+       <reg32 offset="0x04a7" name="RBBM_PERFCTR_SP_0_HI"/>
+       <reg32 offset="0x04a8" name="RBBM_PERFCTR_SP_1_LO"/>
+       <reg32 offset="0x04a9" name="RBBM_PERFCTR_SP_1_HI"/>
+       <reg32 offset="0x04aa" name="RBBM_PERFCTR_SP_2_LO"/>
+       <reg32 offset="0x04ab" name="RBBM_PERFCTR_SP_2_HI"/>
+       <reg32 offset="0x04ac" name="RBBM_PERFCTR_SP_3_LO"/>
+       <reg32 offset="0x04ad" name="RBBM_PERFCTR_SP_3_HI"/>
+       <reg32 offset="0x04ae" name="RBBM_PERFCTR_SP_4_LO"/>
+       <reg32 offset="0x04af" name="RBBM_PERFCTR_SP_4_HI"/>
+       <reg32 offset="0x04b0" name="RBBM_PERFCTR_SP_5_LO"/>
+       <reg32 offset="0x04b1" name="RBBM_PERFCTR_SP_5_HI"/>
+       <reg32 offset="0x04b2" name="RBBM_PERFCTR_SP_6_LO"/>
+       <reg32 offset="0x04b3" name="RBBM_PERFCTR_SP_6_HI"/>
+       <reg32 offset="0x04b4" name="RBBM_PERFCTR_SP_7_LO"/>
+       <reg32 offset="0x04b5" name="RBBM_PERFCTR_SP_7_HI"/>
+       <reg32 offset="0x04b6" name="RBBM_PERFCTR_SP_8_LO"/>
+       <reg32 offset="0x04b7" name="RBBM_PERFCTR_SP_8_HI"/>
+       <reg32 offset="0x04b8" name="RBBM_PERFCTR_SP_9_LO"/>
+       <reg32 offset="0x04b9" name="RBBM_PERFCTR_SP_9_HI"/>
+       <reg32 offset="0x04ba" name="RBBM_PERFCTR_SP_10_LO"/>
+       <reg32 offset="0x04bb" name="RBBM_PERFCTR_SP_10_HI"/>
+       <reg32 offset="0x04bc" name="RBBM_PERFCTR_SP_11_LO"/>
+       <reg32 offset="0x04bd" name="RBBM_PERFCTR_SP_11_HI"/>
+       <reg32 offset="0x04be" name="RBBM_PERFCTR_SP_12_LO"/>
+       <reg32 offset="0x04bf" name="RBBM_PERFCTR_SP_12_HI"/>
+       <reg32 offset="0x04c0" name="RBBM_PERFCTR_SP_13_LO"/>
+       <reg32 offset="0x04c1" name="RBBM_PERFCTR_SP_13_HI"/>
+       <reg32 offset="0x04c2" name="RBBM_PERFCTR_SP_14_LO"/>
+       <reg32 offset="0x04c3" name="RBBM_PERFCTR_SP_14_HI"/>
+       <reg32 offset="0x04c4" name="RBBM_PERFCTR_SP_15_LO"/>
+       <reg32 offset="0x04c5" name="RBBM_PERFCTR_SP_15_HI"/>
+       <reg32 offset="0x04c6" name="RBBM_PERFCTR_SP_16_LO"/>
+       <reg32 offset="0x04c7" name="RBBM_PERFCTR_SP_16_HI"/>
+       <reg32 offset="0x04c8" name="RBBM_PERFCTR_SP_17_LO"/>
+       <reg32 offset="0x04c9" name="RBBM_PERFCTR_SP_17_HI"/>
+       <reg32 offset="0x04ca" name="RBBM_PERFCTR_SP_18_LO"/>
+       <reg32 offset="0x04cb" name="RBBM_PERFCTR_SP_18_HI"/>
+       <reg32 offset="0x04cc" name="RBBM_PERFCTR_SP_19_LO"/>
+       <reg32 offset="0x04cd" name="RBBM_PERFCTR_SP_19_HI"/>
+       <reg32 offset="0x04ce" name="RBBM_PERFCTR_SP_20_LO"/>
+       <reg32 offset="0x04cf" name="RBBM_PERFCTR_SP_20_HI"/>
+       <reg32 offset="0x04d0" name="RBBM_PERFCTR_SP_21_LO"/>
+       <reg32 offset="0x04d1" name="RBBM_PERFCTR_SP_21_HI"/>
+       <reg32 offset="0x04d2" name="RBBM_PERFCTR_SP_22_LO"/>
+       <reg32 offset="0x04d3" name="RBBM_PERFCTR_SP_22_HI"/>
+       <reg32 offset="0x04d4" name="RBBM_PERFCTR_SP_23_LO"/>
+       <reg32 offset="0x04d5" name="RBBM_PERFCTR_SP_23_HI"/>
+       <reg32 offset="0x04d6" name="RBBM_PERFCTR_RB_0_LO"/>
+       <reg32 offset="0x04d7" name="RBBM_PERFCTR_RB_0_HI"/>
+       <reg32 offset="0x04d8" name="RBBM_PERFCTR_RB_1_LO"/>
+       <reg32 offset="0x04d9" name="RBBM_PERFCTR_RB_1_HI"/>
+       <reg32 offset="0x04da" name="RBBM_PERFCTR_RB_2_LO"/>
+       <reg32 offset="0x04db" name="RBBM_PERFCTR_RB_2_HI"/>
+       <reg32 offset="0x04dc" name="RBBM_PERFCTR_RB_3_LO"/>
+       <reg32 offset="0x04dd" name="RBBM_PERFCTR_RB_3_HI"/>
+       <reg32 offset="0x04de" name="RBBM_PERFCTR_RB_4_LO"/>
+       <reg32 offset="0x04df" name="RBBM_PERFCTR_RB_4_HI"/>
+       <reg32 offset="0x04e0" name="RBBM_PERFCTR_RB_5_LO"/>
+       <reg32 offset="0x04e1" name="RBBM_PERFCTR_RB_5_HI"/>
+       <reg32 offset="0x04e2" name="RBBM_PERFCTR_RB_6_LO"/>
+       <reg32 offset="0x04e3" name="RBBM_PERFCTR_RB_6_HI"/>
+       <reg32 offset="0x04e4" name="RBBM_PERFCTR_RB_7_LO"/>
+       <reg32 offset="0x04e5" name="RBBM_PERFCTR_RB_7_HI"/>
+       <reg32 offset="0x04e6" name="RBBM_PERFCTR_VSC_0_LO"/>
+       <reg32 offset="0x04e7" name="RBBM_PERFCTR_VSC_0_HI"/>
+       <reg32 offset="0x04e8" name="RBBM_PERFCTR_VSC_1_LO"/>
+       <reg32 offset="0x04e9" name="RBBM_PERFCTR_VSC_1_HI"/>
+       <reg32 offset="0x04ea" name="RBBM_PERFCTR_LRZ_0_LO"/>
+       <reg32 offset="0x04eb" name="RBBM_PERFCTR_LRZ_0_HI"/>
+       <reg32 offset="0x04ec" name="RBBM_PERFCTR_LRZ_1_LO"/>
+       <reg32 offset="0x04ed" name="RBBM_PERFCTR_LRZ_1_HI"/>
+       <reg32 offset="0x04ee" name="RBBM_PERFCTR_LRZ_2_LO"/>
+       <reg32 offset="0x04ef" name="RBBM_PERFCTR_LRZ_2_HI"/>
+       <reg32 offset="0x04f0" name="RBBM_PERFCTR_LRZ_3_LO"/>
+       <reg32 offset="0x04f1" name="RBBM_PERFCTR_LRZ_3_HI"/>
+       <reg32 offset="0x04f2" name="RBBM_PERFCTR_CMP_0_LO"/>
+       <reg32 offset="0x04f3" name="RBBM_PERFCTR_CMP_0_HI"/>
+       <reg32 offset="0x04f4" name="RBBM_PERFCTR_CMP_1_LO"/>
+       <reg32 offset="0x04f5" name="RBBM_PERFCTR_CMP_1_HI"/>
+       <reg32 offset="0x04f6" name="RBBM_PERFCTR_CMP_2_LO"/>
+       <reg32 offset="0x04f7" name="RBBM_PERFCTR_CMP_2_HI"/>
+       <reg32 offset="0x04f8" name="RBBM_PERFCTR_CMP_3_LO"/>
+       <reg32 offset="0x04f9" name="RBBM_PERFCTR_CMP_3_HI"/>
+       <reg32 offset="0x0500" name="RBBM_PERFCTR_CNTL"/>
+       <reg32 offset="0x0501" name="RBBM_PERFCTR_LOAD_CMD0"/>
+       <reg32 offset="0x0502" name="RBBM_PERFCTR_LOAD_CMD1"/>
+       <reg32 offset="0x0503" name="RBBM_PERFCTR_LOAD_CMD2"/>
+       <reg32 offset="0x0504" name="RBBM_PERFCTR_LOAD_CMD3"/>
+       <reg32 offset="0x0505" name="RBBM_PERFCTR_LOAD_VALUE_LO"/>
+       <reg32 offset="0x0506" name="RBBM_PERFCTR_LOAD_VALUE_HI"/>
+       <reg32 offset="0x0507" name="RBBM_PERFCTR_RBBM_SEL_0"/>
+       <reg32 offset="0x0508" name="RBBM_PERFCTR_RBBM_SEL_1"/>
+       <reg32 offset="0x0509" name="RBBM_PERFCTR_RBBM_SEL_2"/>
+       <reg32 offset="0x050A" name="RBBM_PERFCTR_RBBM_SEL_3"/>
+       <reg32 offset="0x050B" name="RBBM_PERFCTR_GPU_BUSY_MASKED"/>
+       <reg32 offset="0x0533" name="RBBM_ISDB_CNT"/>
+
+       <!---
+           This block of registers aren't tied to perf counters. They
+           count various geometry stats, for example number of
+           vertices in, number of primnitives assembled etc.
+       -->
+
+       <reg32 offset="0x0540" name="RBBM_PRIMCTR_0_LO"/>  <!-- vs vertices in -->
+       <reg32 offset="0x0541" name="RBBM_PRIMCTR_0_HI"/>
+       <reg32 offset="0x0542" name="RBBM_PRIMCTR_1_LO"/>  <!-- vs primitives out -->
+       <reg32 offset="0x0543" name="RBBM_PRIMCTR_1_HI"/>
+       <reg32 offset="0x0544" name="RBBM_PRIMCTR_2_LO"/>  <!-- hs vertices in -->
+       <reg32 offset="0x0545" name="RBBM_PRIMCTR_2_HI"/>
+       <reg32 offset="0x0546" name="RBBM_PRIMCTR_3_LO"/>  <!-- hs patches out -->
+       <reg32 offset="0x0547" name="RBBM_PRIMCTR_3_HI"/>
+       <reg32 offset="0x0548" name="RBBM_PRIMCTR_4_LO"/>  <!-- dss vertices in -->
+       <reg32 offset="0x0549" name="RBBM_PRIMCTR_4_HI"/>
+       <reg32 offset="0x054a" name="RBBM_PRIMCTR_5_LO"/>  <!-- ds primitives out -->
+       <reg32 offset="0x054b" name="RBBM_PRIMCTR_5_HI"/>
+       <reg32 offset="0x054c" name="RBBM_PRIMCTR_6_LO"/>  <!-- gs primitives in -->
+       <reg32 offset="0x054d" name="RBBM_PRIMCTR_6_HI"/>
+       <reg32 offset="0x054e" name="RBBM_PRIMCTR_7_LO"/>  <!-- gs primitives out -->
+       <reg32 offset="0x054f" name="RBBM_PRIMCTR_7_HI"/>
+       <reg32 offset="0x0550" name="RBBM_PRIMCTR_8_LO"/>  <!-- gs primitives out -->
+       <reg32 offset="0x0551" name="RBBM_PRIMCTR_8_HI"/>
+       <reg32 offset="0x0552" name="RBBM_PRIMCTR_9_LO"/>  <!-- raster primitives in -->
+       <reg32 offset="0x0553" name="RBBM_PRIMCTR_9_HI"/>
+       <reg32 offset="0x0554" name="RBBM_PRIMCTR_10_LO"/>
+       <reg32 offset="0x0555" name="RBBM_PRIMCTR_10_HI"/>
+
+       <reg32 offset="0xF400" name="RBBM_SECVID_TRUST_CNTL"/>
+       <reg32 offset="0xF800" name="RBBM_SECVID_TSB_TRUSTED_BASE_LO"/>
+       <reg32 offset="0xF801" name="RBBM_SECVID_TSB_TRUSTED_BASE_HI"/>
+       <reg32 offset="0xF802" name="RBBM_SECVID_TSB_TRUSTED_SIZE"/>
+       <reg32 offset="0xF803" name="RBBM_SECVID_TSB_CNTL"/>
+       <reg32 offset="0xF810" name="RBBM_SECVID_TSB_ADDR_MODE_CNTL" type="a5xx_address_mode"/>
+       <reg32 offset="0x00010" name="RBBM_VBIF_CLIENT_QOS_CNTL"/>
+       <reg32 offset="0x00011" name="RBBM_GBIF_CLIENT_QOS_CNTL"/>
+       <reg32 offset="0x0001c" name="RBBM_WAIT_FOR_GPU_IDLE_CMD">
+               <bitfield pos="0" name="WAIT_GPU_IDLE" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x0001f" name="RBBM_INTERFACE_HANG_INT_CNTL"/>
+       <reg32 offset="0x00037" name="RBBM_INT_CLEAR_CMD" type="A6XX_RBBM_INT_0_MASK"/>
+       <reg32 offset="0x00038" name="RBBM_INT_0_MASK"/>
+       <reg32 offset="0x00042" name="RBBM_SP_HYST_CNT"/>
+       <reg32 offset="0x00043" name="RBBM_SW_RESET_CMD"/>
+       <reg32 offset="0x00044" name="RBBM_RAC_THRESHOLD_CNT"/>
+       <reg32 offset="0x00045" name="RBBM_BLOCK_SW_RESET_CMD"/>
+       <reg32 offset="0x00046" name="RBBM_BLOCK_SW_RESET_CMD2"/>
+       <reg32 offset="0x000ae" name="RBBM_CLOCK_CNTL"/>
+       <reg32 offset="0x000b0" name="RBBM_CLOCK_CNTL_SP0"/>
+       <reg32 offset="0x000b1" name="RBBM_CLOCK_CNTL_SP1"/>
+       <reg32 offset="0x000b2" name="RBBM_CLOCK_CNTL_SP2"/>
+       <reg32 offset="0x000b3" name="RBBM_CLOCK_CNTL_SP3"/>
+       <reg32 offset="0x000b4" name="RBBM_CLOCK_CNTL2_SP0"/>
+       <reg32 offset="0x000b5" name="RBBM_CLOCK_CNTL2_SP1"/>
+       <reg32 offset="0x000b6" name="RBBM_CLOCK_CNTL2_SP2"/>
+       <reg32 offset="0x000b7" name="RBBM_CLOCK_CNTL2_SP3"/>
+       <reg32 offset="0x000b8" name="RBBM_CLOCK_DELAY_SP0"/>
+       <reg32 offset="0x000b9" name="RBBM_CLOCK_DELAY_SP1"/>
+       <reg32 offset="0x000ba" name="RBBM_CLOCK_DELAY_SP2"/>
+       <reg32 offset="0x000bb" name="RBBM_CLOCK_DELAY_SP3"/>
+       <reg32 offset="0x000bc" name="RBBM_CLOCK_HYST_SP0"/>
+       <reg32 offset="0x000bd" name="RBBM_CLOCK_HYST_SP1"/>
+       <reg32 offset="0x000be" name="RBBM_CLOCK_HYST_SP2"/>
+       <reg32 offset="0x000bf" name="RBBM_CLOCK_HYST_SP3"/>
+       <reg32 offset="0x000c0" name="RBBM_CLOCK_CNTL_TP0"/>
+       <reg32 offset="0x000c1" name="RBBM_CLOCK_CNTL_TP1"/>
+       <reg32 offset="0x000c2" name="RBBM_CLOCK_CNTL_TP2"/>
+       <reg32 offset="0x000c3" name="RBBM_CLOCK_CNTL_TP3"/>
+       <reg32 offset="0x000c4" name="RBBM_CLOCK_CNTL2_TP0"/>
+       <reg32 offset="0x000c5" name="RBBM_CLOCK_CNTL2_TP1"/>
+       <reg32 offset="0x000c6" name="RBBM_CLOCK_CNTL2_TP2"/>
+       <reg32 offset="0x000c7" name="RBBM_CLOCK_CNTL2_TP3"/>
+       <reg32 offset="0x000c8" name="RBBM_CLOCK_CNTL3_TP0"/>
+       <reg32 offset="0x000c9" name="RBBM_CLOCK_CNTL3_TP1"/>
+       <reg32 offset="0x000ca" name="RBBM_CLOCK_CNTL3_TP2"/>
+       <reg32 offset="0x000cb" name="RBBM_CLOCK_CNTL3_TP3"/>
+       <reg32 offset="0x000cc" name="RBBM_CLOCK_CNTL4_TP0"/>
+       <reg32 offset="0x000cd" name="RBBM_CLOCK_CNTL4_TP1"/>
+       <reg32 offset="0x000ce" name="RBBM_CLOCK_CNTL4_TP2"/>
+       <reg32 offset="0x000cf" name="RBBM_CLOCK_CNTL4_TP3"/>
+       <reg32 offset="0x000d0" name="RBBM_CLOCK_DELAY_TP0"/>
+       <reg32 offset="0x000d1" name="RBBM_CLOCK_DELAY_TP1"/>
+       <reg32 offset="0x000d2" name="RBBM_CLOCK_DELAY_TP2"/>
+       <reg32 offset="0x000d3" name="RBBM_CLOCK_DELAY_TP3"/>
+       <reg32 offset="0x000d4" name="RBBM_CLOCK_DELAY2_TP0"/>
+       <reg32 offset="0x000d5" name="RBBM_CLOCK_DELAY2_TP1"/>
+       <reg32 offset="0x000d6" name="RBBM_CLOCK_DELAY2_TP2"/>
+       <reg32 offset="0x000d7" name="RBBM_CLOCK_DELAY2_TP3"/>
+       <reg32 offset="0x000d8" name="RBBM_CLOCK_DELAY3_TP0"/>
+       <reg32 offset="0x000d9" name="RBBM_CLOCK_DELAY3_TP1"/>
+       <reg32 offset="0x000da" name="RBBM_CLOCK_DELAY3_TP2"/>
+       <reg32 offset="0x000db" name="RBBM_CLOCK_DELAY3_TP3"/>
+       <reg32 offset="0x000dc" name="RBBM_CLOCK_DELAY4_TP0"/>
+       <reg32 offset="0x000dd" name="RBBM_CLOCK_DELAY4_TP1"/>
+       <reg32 offset="0x000de" name="RBBM_CLOCK_DELAY4_TP2"/>
+       <reg32 offset="0x000df" name="RBBM_CLOCK_DELAY4_TP3"/>
+       <reg32 offset="0x000e0" name="RBBM_CLOCK_HYST_TP0"/>
+       <reg32 offset="0x000e1" name="RBBM_CLOCK_HYST_TP1"/>
+       <reg32 offset="0x000e2" name="RBBM_CLOCK_HYST_TP2"/>
+       <reg32 offset="0x000e3" name="RBBM_CLOCK_HYST_TP3"/>
+       <reg32 offset="0x000e4" name="RBBM_CLOCK_HYST2_TP0"/>
+       <reg32 offset="0x000e5" name="RBBM_CLOCK_HYST2_TP1"/>
+       <reg32 offset="0x000e6" name="RBBM_CLOCK_HYST2_TP2"/>
+       <reg32 offset="0x000e7" name="RBBM_CLOCK_HYST2_TP3"/>
+       <reg32 offset="0x000e8" name="RBBM_CLOCK_HYST3_TP0"/>
+       <reg32 offset="0x000e9" name="RBBM_CLOCK_HYST3_TP1"/>
+       <reg32 offset="0x000ea" name="RBBM_CLOCK_HYST3_TP2"/>
+       <reg32 offset="0x000eb" name="RBBM_CLOCK_HYST3_TP3"/>
+       <reg32 offset="0x000ec" name="RBBM_CLOCK_HYST4_TP0"/>
+       <reg32 offset="0x000ed" name="RBBM_CLOCK_HYST4_TP1"/>
+       <reg32 offset="0x000ee" name="RBBM_CLOCK_HYST4_TP2"/>
+       <reg32 offset="0x000ef" name="RBBM_CLOCK_HYST4_TP3"/>
+       <reg32 offset="0x000f0" name="RBBM_CLOCK_CNTL_RB0"/>
+       <reg32 offset="0x000f1" name="RBBM_CLOCK_CNTL_RB1"/>
+       <reg32 offset="0x000f2" name="RBBM_CLOCK_CNTL_RB2"/>
+       <reg32 offset="0x000f3" name="RBBM_CLOCK_CNTL_RB3"/>
+       <reg32 offset="0x000f4" name="RBBM_CLOCK_CNTL2_RB0"/>
+       <reg32 offset="0x000f5" name="RBBM_CLOCK_CNTL2_RB1"/>
+       <reg32 offset="0x000f6" name="RBBM_CLOCK_CNTL2_RB2"/>
+       <reg32 offset="0x000f7" name="RBBM_CLOCK_CNTL2_RB3"/>
+       <reg32 offset="0x000f8" name="RBBM_CLOCK_CNTL_CCU0"/>
+       <reg32 offset="0x000f9" name="RBBM_CLOCK_CNTL_CCU1"/>
+       <reg32 offset="0x000fa" name="RBBM_CLOCK_CNTL_CCU2"/>
+       <reg32 offset="0x000fb" name="RBBM_CLOCK_CNTL_CCU3"/>
+       <reg32 offset="0x00100" name="RBBM_CLOCK_HYST_RB_CCU0"/>
+       <reg32 offset="0x00101" name="RBBM_CLOCK_HYST_RB_CCU1"/>
+       <reg32 offset="0x00102" name="RBBM_CLOCK_HYST_RB_CCU2"/>
+       <reg32 offset="0x00103" name="RBBM_CLOCK_HYST_RB_CCU3"/>
+       <reg32 offset="0x00104" name="RBBM_CLOCK_CNTL_RAC"/>
+       <reg32 offset="0x00105" name="RBBM_CLOCK_CNTL2_RAC"/>
+       <reg32 offset="0x00106" name="RBBM_CLOCK_DELAY_RAC"/>
+       <reg32 offset="0x00107" name="RBBM_CLOCK_HYST_RAC"/>
+       <reg32 offset="0x00108" name="RBBM_CLOCK_CNTL_TSE_RAS_RBBM"/>
+       <reg32 offset="0x00109" name="RBBM_CLOCK_DELAY_TSE_RAS_RBBM"/>
+       <reg32 offset="0x0010a" name="RBBM_CLOCK_HYST_TSE_RAS_RBBM"/>
+       <reg32 offset="0x0010b" name="RBBM_CLOCK_CNTL_UCHE"/>
+       <reg32 offset="0x0010c" name="RBBM_CLOCK_CNTL2_UCHE"/>
+       <reg32 offset="0x0010d" name="RBBM_CLOCK_CNTL3_UCHE"/>
+       <reg32 offset="0x0010e" name="RBBM_CLOCK_CNTL4_UCHE"/>
+       <reg32 offset="0x0010f" name="RBBM_CLOCK_DELAY_UCHE"/>
+       <reg32 offset="0x00110" name="RBBM_CLOCK_HYST_UCHE"/>
+       <reg32 offset="0x00111" name="RBBM_CLOCK_MODE_VFD"/>
+       <reg32 offset="0x00112" name="RBBM_CLOCK_DELAY_VFD"/>
+       <reg32 offset="0x00113" name="RBBM_CLOCK_HYST_VFD"/>
+       <reg32 offset="0x00114" name="RBBM_CLOCK_MODE_GPC"/>
+       <reg32 offset="0x00115" name="RBBM_CLOCK_DELAY_GPC"/>
+       <reg32 offset="0x00116" name="RBBM_CLOCK_HYST_GPC"/>
+       <reg32 offset="0x00117" name="RBBM_CLOCK_DELAY_HLSQ_2"/>
+       <reg32 offset="0x00118" name="RBBM_CLOCK_CNTL_GMU_GX"/>
+       <reg32 offset="0x00119" name="RBBM_CLOCK_DELAY_GMU_GX"/>
+       <reg32 offset="0x0011a" name="RBBM_CLOCK_HYST_GMU_GX"/>
+       <reg32 offset="0x0011b" name="RBBM_CLOCK_MODE_HLSQ"/>
+       <reg32 offset="0x0011c" name="RBBM_CLOCK_DELAY_HLSQ"/>
+       <reg32 offset="0x0011d" name="RBBM_CLOCK_HYST_HLSQ"/>
+       <reg32 offset="0x00120" name="RBBM_CLOCK_CNTL_TEX_FCHE"/>
+       <reg32 offset="0x00121" name="RBBM_CLOCK_DELAY_TEX_FCHE"/>
+       <reg32 offset="0x00122" name="RBBM_CLOCK_HYST_TEX_FCHE"/>
+
+       <reg32 offset="0x0600" name="DBGC_CFG_DBGBUS_SEL_A"/>
+       <reg32 offset="0x0601" name="DBGC_CFG_DBGBUS_SEL_B"/>
+       <reg32 offset="0x0602" name="DBGC_CFG_DBGBUS_SEL_C"/>
+       <reg32 offset="0x0603" name="DBGC_CFG_DBGBUS_SEL_D">
+               <bitfield high="7" low="0" name="PING_INDEX"/>
+               <bitfield high="15" low="8" name="PING_BLK_SEL"/>
+       </reg32>
+       <reg32 offset="0x0604" name="DBGC_CFG_DBGBUS_CNTLT">
+               <bitfield high="5" low="0" name="TRACEEN"/>
+               <bitfield high="14" low="12" name="GRANU"/>
+               <bitfield high="31" low="28" name="SEGT"/>
+       </reg32>
+       <reg32 offset="0x0605" name="DBGC_CFG_DBGBUS_CNTLM">
+               <bitfield high="27" low="24" name="ENABLE"/>
+       </reg32>
+       <reg32 offset="0x0608" name="DBGC_CFG_DBGBUS_IVTL_0"/>
+       <reg32 offset="0x0609" name="DBGC_CFG_DBGBUS_IVTL_1"/>
+       <reg32 offset="0x060a" name="DBGC_CFG_DBGBUS_IVTL_2"/>
+       <reg32 offset="0x060b" name="DBGC_CFG_DBGBUS_IVTL_3"/>
+       <reg32 offset="0x060c" name="DBGC_CFG_DBGBUS_MASKL_0"/>
+       <reg32 offset="0x060d" name="DBGC_CFG_DBGBUS_MASKL_1"/>
+       <reg32 offset="0x060e" name="DBGC_CFG_DBGBUS_MASKL_2"/>
+       <reg32 offset="0x060f" name="DBGC_CFG_DBGBUS_MASKL_3"/>
+       <reg32 offset="0x0610" name="DBGC_CFG_DBGBUS_BYTEL_0">
+               <bitfield high="3" low="0" name="BYTEL0"/>
+               <bitfield high="7" low="4" name="BYTEL1"/>
+               <bitfield high="11" low="8" name="BYTEL2"/>
+               <bitfield high="15" low="12" name="BYTEL3"/>
+               <bitfield high="19" low="16" name="BYTEL4"/>
+               <bitfield high="23" low="20" name="BYTEL5"/>
+               <bitfield high="27" low="24" name="BYTEL6"/>
+               <bitfield high="31" low="28" name="BYTEL7"/>
+       </reg32>
+       <reg32 offset="0x0611" name="DBGC_CFG_DBGBUS_BYTEL_1">
+               <bitfield high="3" low="0" name="BYTEL8"/>
+               <bitfield high="7" low="4" name="BYTEL9"/>
+               <bitfield high="11" low="8" name="BYTEL10"/>
+               <bitfield high="15" low="12" name="BYTEL11"/>
+               <bitfield high="19" low="16" name="BYTEL12"/>
+               <bitfield high="23" low="20" name="BYTEL13"/>
+               <bitfield high="27" low="24" name="BYTEL14"/>
+               <bitfield high="31" low="28" name="BYTEL15"/>
+       </reg32>
+       <reg32 offset="0x062f" name="DBGC_CFG_DBGBUS_TRACE_BUF1"/>
+       <reg32 offset="0x0630" name="DBGC_CFG_DBGBUS_TRACE_BUF2"/>
+       <reg32 offset="0x0CD8" name="VSC_PERFCTR_VSC_SEL_0"/>
+       <reg32 offset="0x0CD9" name="VSC_PERFCTR_VSC_SEL_1"/>
+       <reg32 offset="0xBE05" name="HLSQ_ADDR_MODE_CNTL" type="a5xx_address_mode"/>
+       <reg32 offset="0xBE10" name="HLSQ_PERFCTR_HLSQ_SEL_0"/>
+       <reg32 offset="0xBE11" name="HLSQ_PERFCTR_HLSQ_SEL_1"/>
+       <reg32 offset="0xBE12" name="HLSQ_PERFCTR_HLSQ_SEL_2"/>
+       <reg32 offset="0xBE13" name="HLSQ_PERFCTR_HLSQ_SEL_3"/>
+       <reg32 offset="0xBE14" name="HLSQ_PERFCTR_HLSQ_SEL_4"/>
+       <reg32 offset="0xBE15" name="HLSQ_PERFCTR_HLSQ_SEL_5"/>
+       <reg32 offset="0xC800" name="HLSQ_DBG_AHB_READ_APERTURE"/>
+       <reg32 offset="0xD000" name="HLSQ_DBG_READ_SEL"/>
+       <reg32 offset="0xA601" name="VFD_ADDR_MODE_CNTL" type="a5xx_address_mode"/>
+       <reg32 offset="0xA610" name="VFD_PERFCTR_VFD_SEL_0"/>
+       <reg32 offset="0xA611" name="VFD_PERFCTR_VFD_SEL_1"/>
+       <reg32 offset="0xA612" name="VFD_PERFCTR_VFD_SEL_2"/>
+       <reg32 offset="0xA613" name="VFD_PERFCTR_VFD_SEL_3"/>
+       <reg32 offset="0xA614" name="VFD_PERFCTR_VFD_SEL_4"/>
+       <reg32 offset="0xA615" name="VFD_PERFCTR_VFD_SEL_5"/>
+       <reg32 offset="0xA616" name="VFD_PERFCTR_VFD_SEL_6"/>
+       <reg32 offset="0xA617" name="VFD_PERFCTR_VFD_SEL_7"/>
+       <reg32 offset="0x0E00" name="UCHE_ADDR_MODE_CNTL" type="a5xx_address_mode"/>
+       <reg32 offset="0x0E01" name="UCHE_MODE_CNTL"/>
+       <reg32 offset="0x0E05" name="UCHE_WRITE_RANGE_MAX_LO"/>
+       <reg32 offset="0x0E06" name="UCHE_WRITE_RANGE_MAX_HI"/>
+       <reg32 offset="0x0E07" name="UCHE_WRITE_THRU_BASE_LO"/>
+       <reg32 offset="0x0E08" name="UCHE_WRITE_THRU_BASE_HI"/>
+       <reg32 offset="0x0E09" name="UCHE_TRAP_BASE_LO"/>
+       <reg32 offset="0x0E0A" name="UCHE_TRAP_BASE_HI"/>
+       <reg32 offset="0x0E0B" name="UCHE_GMEM_RANGE_MIN_LO"/>
+       <reg32 offset="0x0E0C" name="UCHE_GMEM_RANGE_MIN_HI"/>
+       <reg32 offset="0x0E0D" name="UCHE_GMEM_RANGE_MAX_LO"/>
+       <reg32 offset="0x0E0E" name="UCHE_GMEM_RANGE_MAX_HI"/>
+       <reg32 offset="0x0E17" name="UCHE_CACHE_WAYS"/>
+       <reg32 offset="0x0E18" name="UCHE_FILTER_CNTL"/>
+       <reg32 offset="0x0E19" name="UCHE_CLIENT_PF">
+               <bitfield high="7" low="0" name="PERFSEL"/>
+       </reg32>
+       <reg32 offset="0x0E1C" name="UCHE_PERFCTR_UCHE_SEL_0"/>
+       <reg32 offset="0x0E1D" name="UCHE_PERFCTR_UCHE_SEL_1"/>
+       <reg32 offset="0x0E1E" name="UCHE_PERFCTR_UCHE_SEL_2"/>
+       <reg32 offset="0x0E1F" name="UCHE_PERFCTR_UCHE_SEL_3"/>
+       <reg32 offset="0x0E20" name="UCHE_PERFCTR_UCHE_SEL_4"/>
+       <reg32 offset="0x0E21" name="UCHE_PERFCTR_UCHE_SEL_5"/>
+       <reg32 offset="0x0E22" name="UCHE_PERFCTR_UCHE_SEL_6"/>
+       <reg32 offset="0x0E23" name="UCHE_PERFCTR_UCHE_SEL_7"/>
+       <reg32 offset="0x0E24" name="UCHE_PERFCTR_UCHE_SEL_8"/>
+       <reg32 offset="0x0E25" name="UCHE_PERFCTR_UCHE_SEL_9"/>
+       <reg32 offset="0x0E26" name="UCHE_PERFCTR_UCHE_SEL_10"/>
+       <reg32 offset="0x0E27" name="UCHE_PERFCTR_UCHE_SEL_11"/>
+       <reg32 offset="0xAE01" name="SP_ADDR_MODE_CNTL" type="a5xx_address_mode"/>
+       <reg32 offset="0xAE02" name="SP_NC_MODE_CNTL"/>
+       <reg32 offset="0xAE10" name="SP_PERFCTR_SP_SEL_0"/>
+       <reg32 offset="0xAE11" name="SP_PERFCTR_SP_SEL_1"/>
+       <reg32 offset="0xAE12" name="SP_PERFCTR_SP_SEL_2"/>
+       <reg32 offset="0xAE13" name="SP_PERFCTR_SP_SEL_3"/>
+       <reg32 offset="0xAE14" name="SP_PERFCTR_SP_SEL_4"/>
+       <reg32 offset="0xAE15" name="SP_PERFCTR_SP_SEL_5"/>
+       <reg32 offset="0xAE16" name="SP_PERFCTR_SP_SEL_6"/>
+       <reg32 offset="0xAE17" name="SP_PERFCTR_SP_SEL_7"/>
+       <reg32 offset="0xAE18" name="SP_PERFCTR_SP_SEL_8"/>
+       <reg32 offset="0xAE19" name="SP_PERFCTR_SP_SEL_9"/>
+       <reg32 offset="0xAE1A" name="SP_PERFCTR_SP_SEL_10"/>
+       <reg32 offset="0xAE1B" name="SP_PERFCTR_SP_SEL_11"/>
+       <reg32 offset="0xAE1C" name="SP_PERFCTR_SP_SEL_12"/>
+       <reg32 offset="0xAE1D" name="SP_PERFCTR_SP_SEL_13"/>
+       <reg32 offset="0xAE1E" name="SP_PERFCTR_SP_SEL_14"/>
+       <reg32 offset="0xAE1F" name="SP_PERFCTR_SP_SEL_15"/>
+       <reg32 offset="0xAE20" name="SP_PERFCTR_SP_SEL_16"/>
+       <reg32 offset="0xAE21" name="SP_PERFCTR_SP_SEL_17"/>
+       <reg32 offset="0xAE22" name="SP_PERFCTR_SP_SEL_18"/>
+       <reg32 offset="0xAE23" name="SP_PERFCTR_SP_SEL_19"/>
+       <reg32 offset="0xAE24" name="SP_PERFCTR_SP_SEL_20"/>
+       <reg32 offset="0xAE25" name="SP_PERFCTR_SP_SEL_21"/>
+       <reg32 offset="0xAE26" name="SP_PERFCTR_SP_SEL_22"/>
+       <reg32 offset="0xAE27" name="SP_PERFCTR_SP_SEL_23"/>
+       <reg32 offset="0xB601" name="TPL1_ADDR_MODE_CNTL" type="a5xx_address_mode"/>
+       <reg32 offset="0xB604" name="TPL1_NC_MODE_CNTL"/>
+       <reg32 offset="0xB608" name="TPL1_BICUBIC_WEIGHTS_TABLE_0"/>
+       <reg32 offset="0xB609" name="TPL1_BICUBIC_WEIGHTS_TABLE_1"/>
+       <reg32 offset="0xB60A" name="TPL1_BICUBIC_WEIGHTS_TABLE_2"/>
+       <reg32 offset="0xB60B" name="TPL1_BICUBIC_WEIGHTS_TABLE_3"/>
+       <reg32 offset="0xB60C" name="TPL1_BICUBIC_WEIGHTS_TABLE_4"/>
+       <reg32 offset="0xB610" name="TPL1_PERFCTR_TP_SEL_0"/>
+       <reg32 offset="0xB611" name="TPL1_PERFCTR_TP_SEL_1"/>
+       <reg32 offset="0xB612" name="TPL1_PERFCTR_TP_SEL_2"/>
+       <reg32 offset="0xB613" name="TPL1_PERFCTR_TP_SEL_3"/>
+       <reg32 offset="0xB614" name="TPL1_PERFCTR_TP_SEL_4"/>
+       <reg32 offset="0xB615" name="TPL1_PERFCTR_TP_SEL_5"/>
+       <reg32 offset="0xB616" name="TPL1_PERFCTR_TP_SEL_6"/>
+       <reg32 offset="0xB617" name="TPL1_PERFCTR_TP_SEL_7"/>
+       <reg32 offset="0xB618" name="TPL1_PERFCTR_TP_SEL_8"/>
+       <reg32 offset="0xB619" name="TPL1_PERFCTR_TP_SEL_9"/>
+       <reg32 offset="0xB61A" name="TPL1_PERFCTR_TP_SEL_10"/>
+       <reg32 offset="0xB61B" name="TPL1_PERFCTR_TP_SEL_11"/>
+       <reg32 offset="0x3000" name="VBIF_VERSION"/>
+       <reg32 offset="0x3001" name="VBIF_CLKON">
+               <bitfield pos="1" name="FORCE_ON_TESTBUS" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x302A" name="VBIF_GATE_OFF_WRREQ_EN"/>
+       <reg32 offset="0x3080" name="VBIF_XIN_HALT_CTRL0"/>
+       <reg32 offset="0x3081" name="VBIF_XIN_HALT_CTRL1"/>
+       <reg32 offset="0x3084" name="VBIF_TEST_BUS_OUT_CTRL"/>
+       <reg32 offset="0x3085" name="VBIF_TEST_BUS1_CTRL0"/>
+       <reg32 offset="0x3086" name="VBIF_TEST_BUS1_CTRL1">
+               <bitfield low="0" high="3" name="DATA_SEL"/>
+       </reg32>
+       <reg32 offset="0x3087" name="VBIF_TEST_BUS2_CTRL0"/>
+       <reg32 offset="0x3088" name="VBIF_TEST_BUS2_CTRL1">
+               <bitfield low="0" high="8" name="DATA_SEL"/>
+       </reg32>
+       <reg32 offset="0x308c" name="VBIF_TEST_BUS_OUT"/>
+       <reg32 offset="0x30d0" name="VBIF_PERF_CNT_SEL0"/>
+       <reg32 offset="0x30d1" name="VBIF_PERF_CNT_SEL1"/>
+       <reg32 offset="0x30d2" name="VBIF_PERF_CNT_SEL2"/>
+       <reg32 offset="0x30d3" name="VBIF_PERF_CNT_SEL3"/>
+       <reg32 offset="0x30d8" name="VBIF_PERF_CNT_LOW0"/>
+       <reg32 offset="0x30d9" name="VBIF_PERF_CNT_LOW1"/>
+       <reg32 offset="0x30da" name="VBIF_PERF_CNT_LOW2"/>
+       <reg32 offset="0x30db" name="VBIF_PERF_CNT_LOW3"/>
+       <reg32 offset="0x30e0" name="VBIF_PERF_CNT_HIGH0"/>
+       <reg32 offset="0x30e1" name="VBIF_PERF_CNT_HIGH1"/>
+       <reg32 offset="0x30e2" name="VBIF_PERF_CNT_HIGH2"/>
+       <reg32 offset="0x30e3" name="VBIF_PERF_CNT_HIGH3"/>
+       <reg32 offset="0x3100" name="VBIF_PERF_PWR_CNT_EN0"/>
+       <reg32 offset="0x3101" name="VBIF_PERF_PWR_CNT_EN1"/>
+       <reg32 offset="0x3102" name="VBIF_PERF_PWR_CNT_EN2"/>
+       <reg32 offset="0x3110" name="VBIF_PERF_PWR_CNT_LOW0"/>
+       <reg32 offset="0x3111" name="VBIF_PERF_PWR_CNT_LOW1"/>
+       <reg32 offset="0x3112" name="VBIF_PERF_PWR_CNT_LOW2"/>
+       <reg32 offset="0x3118" name="VBIF_PERF_PWR_CNT_HIGH0"/>
+       <reg32 offset="0x3119" name="VBIF_PERF_PWR_CNT_HIGH1"/>
+       <reg32 offset="0x311a" name="VBIF_PERF_PWR_CNT_HIGH2"/>
+
+       <reg32 offset="0x3c02" name="GBIF_SCACHE_CNTL1"/>
+       <reg32 offset="0x3c03" name="GBIF_QSB_SIDE0"/>
+       <reg32 offset="0x3c04" name="GBIF_QSB_SIDE1"/>
+       <reg32 offset="0x3c05" name="GBIF_QSB_SIDE2"/>
+       <reg32 offset="0x3c06" name="GBIF_QSB_SIDE3"/>
+       <reg32 offset="0x3c45" name="GBIF_HALT"/>
+       <reg32 offset="0x3c46" name="GBIF_HALT_ACK"/>
+       <reg32 offset="0x3cc0" name="GBIF_PERF_PWR_CNT_EN"/>
+       <reg32 offset="0x3cc2" name="GBIF_PERF_CNT_SEL"/>
+       <reg32 offset="0x3cc3" name="GBIF_PERF_PWR_CNT_SEL"/>
+       <reg32 offset="0x3cc4" name="GBIF_PERF_CNT_LOW0"/>
+       <reg32 offset="0x3cc5" name="GBIF_PERF_CNT_LOW1"/>
+       <reg32 offset="0x3cc6" name="GBIF_PERF_CNT_LOW2"/>
+       <reg32 offset="0x3cc7" name="GBIF_PERF_CNT_LOW3"/>
+       <reg32 offset="0x3cc8" name="GBIF_PERF_CNT_HIGH0"/>
+       <reg32 offset="0x3cc9" name="GBIF_PERF_CNT_HIGH1"/>
+       <reg32 offset="0x3cca" name="GBIF_PERF_CNT_HIGH2"/>
+       <reg32 offset="0x3ccb" name="GBIF_PERF_CNT_HIGH3"/>
+       <reg32 offset="0x3ccc" name="GBIF_PWR_CNT_LOW0"/>
+       <reg32 offset="0x3ccd" name="GBIF_PWR_CNT_LOW1"/>
+       <reg32 offset="0x3cce" name="GBIF_PWR_CNT_LOW2"/>
+       <reg32 offset="0x3ccf" name="GBIF_PWR_CNT_HIGH0"/>
+       <reg32 offset="0x3cd0" name="GBIF_PWR_CNT_HIGH1"/>
+       <reg32 offset="0x3cd1" name="GBIF_PWR_CNT_HIGH2"/>
+
+       <!-- move/rename these.. -->
+
+       <reg32 offset="0xb4d1" name="SP_WINDOW_OFFSET" type="adreno_reg_xy"/>
+       <reg32 offset="0xb307" name="SP_TP_WINDOW_OFFSET" type="adreno_reg_xy"/>
+
+       <reg32 offset="0x0c02" name="VSC_BIN_SIZE">
+               <bitfield name="WIDTH" low="0" high="7" shr="5" type="uint"/>
+               <bitfield name="HEIGHT" low="8" high="16" shr="4" type="uint"/>
+       </reg32>
+       <reg32 offset="0x0c03" name="VSC_DRAW_STRM_SIZE_ADDRESS_LO"/>
+       <reg32 offset="0x0c04" name="VSC_DRAW_STRM_SIZE_ADDRESS_HI"/>
+       <reg64 offset="0x0c03" name="VSC_DRAW_STRM_SIZE_ADDRESS" type="waddress"/>
+       <reg32 offset="0x0c06" name="VSC_BIN_COUNT">
+               <bitfield name="NX" low="1" high="10" type="uint"/>
+               <bitfield name="NY" low="11" high="20" type="uint"/>
+       </reg32>
+       <array offset="0x0c10" name="VSC_PIPE_CONFIG" stride="1" length="32">
+               <reg32 offset="0x0" name="REG">
+                       <doc>
+                               Configures the mapping between VSC_PIPE buffer and
+                               bin, X/Y specify the bin index in the horiz/vert
+                               direction (0,0 is upper left, 0,1 is leftmost bin
+                               on second row, and so on).  W/H specify the number
+                               of bins assigned to this VSC_PIPE in the horiz/vert
+                               dimension.
+                       </doc>
+                       <bitfield name="X" low="0" high="9" type="uint"/>
+                       <bitfield name="Y" low="10" high="19" type="uint"/>
+                       <bitfield name="W" low="20" high="25" type="uint"/>
+                       <bitfield name="H" low="26" high="31" type="uint"/>
+               </reg32>
+       </array>
+       <!--
+       HW binning primitive & draw streams, which enable draws and primitives
+       within a draw to be skipped in the main tile pass.  See:
+       https://github.com/freedreno/freedreno/wiki/Visibility-Stream-Format
+
+       Compared to a5xx and earlier, we just program the address of the first
+       stream and hw adds (pipe_num * VSC_*_STRM_PITCH)
+
+       LIMIT is set to PITCH - 64, to make room for a bit of overflow
+        -->
+       <reg32 offset="0x0c30" name="VSC_PRIM_STRM_ADDRESS_LO"/>
+       <reg32 offset="0x0c31" name="VSC_PRIM_STRM_ADDRESS_HI"/>
+       <reg64 offset="0x0c30" name="VSC_PRIM_STRM_ADDRESS" type="waddress"/>
+       <reg32 offset="0x0c32" name="VSC_PRIM_STRM_PITCH"/>
+       <reg32 offset="0x0c33" name="VSC_PRIM_STRM_LIMIT"/>
+       <reg32 offset="0x0c34" name="VSC_DRAW_STRM_ADDRESS_LO"/>
+       <reg32 offset="0x0c35" name="VSC_DRAW_STRM_ADDRESS_HI"/>
+       <reg64 offset="0x0c34" name="VSC_DRAW_STRM_ADDRESS" type="waddress"/>
+       <reg32 offset="0x0c36" name="VSC_DRAW_STRM_PITCH"/>
+       <reg32 offset="0x0c37" name="VSC_DRAW_STRM_LIMIT"/>
+
+       <array offset="0x0c38" name="VSC_STATE" stride="1" length="32">
+               <doc>
+                       Seems to be a bitmap of which tiles mapped to the VSC
+                       pipe contain geometry.
+
+                       I suppose we can connect a maximum of 32 tiles to a
+                       single VSC pipe.
+               </doc>
+               <reg32 offset="0x0" name="REG"/>
+       </array>
+
+       <array offset="0x0c58" name="VSC_PRIM_STRM_SIZE" stride="1" length="32">
+               <doc>
+                       Has the size of data written to corresponding VSC_PRIM_STRM
+                       buffer.
+               </doc>
+               <reg32 offset="0x0" name="REG"/>
+       </array>
+
+       <array offset="0x0c78" name="VSC_DRAW_STRM_SIZE" stride="1" length="32">
+               <doc>
+                       Has the size of data written to corresponding VSC pipe, ie.
+                       same thing that is written out to VSC_DRAW_STRM_SIZE_ADDRESS_LO/HI
+               </doc>
+               <reg32 offset="0x0" name="REG"/>
+       </array>
+
+       <!-- always 0x03200000 ? -->
+       <reg32 offset="0x0e12" name="UCHE_UNKNOWN_0E12"/>
+
+       <!-- adreno_reg_xy has 15 bits per coordinate, but a6xx registers only have 14 -->
+       <bitset name="a6xx_reg_xy" inline="yes">
+               <bitfield name="X" low="0" high="13" type="uint"/>
+               <bitfield name="Y" low="16" high="29" type="uint"/>
+       </bitset>
+
+       <reg32 offset="0x8000" name="GRAS_CL_CNTL">
+               <bitfield name="CLIP_DISABLE" pos="0" type="boolean"/>
+               <bitfield name="ZNEAR_CLIP_DISABLE" pos="1" type="boolean"/>
+               <bitfield name="ZFAR_CLIP_DISABLE" pos="2" type="boolean"/>
+               <!-- set with depthClampEnable, not clear what it does -->
+               <bitfield name="UNK5" pos="5" type="boolean"/>
+               <!-- controls near z clip behavior (set for vulkan) -->
+               <bitfield name="ZERO_GB_SCALE_Z" pos="6" type="boolean"/>
+               <!-- guess based on a3xx and meaning of bits 8 and 9
+                    if the guess is right then this is related to point sprite clipping -->
+               <bitfield name="VP_CLIP_CODE_IGNORE" pos="7" type="boolean"/>
+               <bitfield name="VP_XFORM_DISABLE" pos="8" type="boolean"/>
+               <bitfield name="PERSP_DIVISION_DISABLE" pos="9" type="boolean"/>
+       </reg32>
+
+       <bitset name="a6xx_gras_xs_cl_cntl" inline="yes">
+               <bitfield name="CLIP_MASK" low="0" high="7"/>
+               <bitfield name="CULL_MASK" low="8" high="15"/>
+       </bitset>
+       <reg32 offset="0x8001" name="GRAS_VS_CL_CNTL" type="a6xx_gras_xs_cl_cntl"/>
+       <reg32 offset="0x8002" name="GRAS_DS_CL_CNTL" type="a6xx_gras_xs_cl_cntl"/>
+       <reg32 offset="0x8003" name="GRAS_GS_CL_CNTL" type="a6xx_gras_xs_cl_cntl"/>
+       <reg32 offset="0x8004" name="GRAS_MAX_LAYER_INDEX" low="0" high="10" type="uint"/>
+
+       <reg32 offset="0x8005" name="GRAS_CNTL">
+               <!-- see also RB_RENDER_CONTROL0 -->
+               <bitfield name="IJ_PERSP_PIXEL" pos="0" type="boolean"/>
+               <!-- b1 set for interpolateAtCentroid() -->
+               <bitfield name="IJ_PERSP_CENTROID" pos="1" type="boolean"/>
+               <!-- b2 set instead of b0 when running in per-sample mode -->
+               <bitfield name="IJ_PERSP_SAMPLE" pos="2" type="boolean"/>
+               <!--
+               b3 set for interpolateAt{Offset,Sample}() if not in per-sample
+               mode, and frag_face
+                -->
+               <bitfield name="SIZE" pos="3" type="boolean"/>
+               <bitfield name="UNK4" pos="4" type="boolean"/>
+               <!-- b5 set ofr interpolateAt{Offset,Sample}() if in per-sample mode -->
+               <bitfield name="SIZE_PERSAMP" pos="5" type="boolean"/>
+               <bitfield name="COORD_MASK" low="6" high="9" type="hex"/>
+       </reg32>
+       <reg32 offset="0x8006" name="GRAS_CL_GUARDBAND_CLIP_ADJ">
+               <bitfield name="HORZ" low="0" high="8" type="uint"/>
+               <bitfield name="VERT" low="10" high="18" type="uint"/>
+       </reg32>
+       <!-- 0x8006-0x800f invalid -->
+       <array offset="0x8010" name="GRAS_CL_VPORT" stride="6" length="16">
+               <reg32 offset="0" name="XOFFSET" type="float"/>
+               <reg32 offset="1" name="XSCALE" type="float"/>
+               <reg32 offset="2" name="YOFFSET" type="float"/>
+               <reg32 offset="3" name="YSCALE" type="float"/>
+               <reg32 offset="4" name="ZOFFSET" type="float"/>
+               <reg32 offset="5" name="ZSCALE" type="float"/>
+       </array>
+       <array offset="0x8070" name="GRAS_CL_Z_CLAMP" stride="2" length="16">
+               <reg32 offset="0" name="MIN" type="float"/>
+               <reg32 offset="1" name="MAX" type="float"/>
+       </array>
+
+       <reg32 offset="0x8090" name="GRAS_SU_CNTL">
+               <bitfield name="CULL_FRONT" pos="0" type="boolean"/>
+               <bitfield name="CULL_BACK" pos="1" type="boolean"/>
+               <bitfield name="FRONT_CW" pos="2" type="boolean"/>
+               <bitfield name="LINEHALFWIDTH" low="3" high="10" radix="2" type="fixed"/>
+               <bitfield name="POLY_OFFSET" pos="11" type="boolean"/>
+               <bitfield name="UNK12" pos="12"/>
+               <bitfield name="MSAA_ENABLE" pos="13" type="boolean"/>
+               <bitfield name="UNK15" low="15" high="22"/>
+       </reg32>
+       <reg32 offset="0x8091" name="GRAS_SU_POINT_MINMAX">
+               <bitfield name="MIN" low="0" high="15" type="ufixed" radix="4"/>
+               <bitfield name="MAX" low="16" high="31" type="ufixed" radix="4"/>
+       </reg32>
+       <reg32 offset="0x8092" name="GRAS_SU_POINT_SIZE" low="0" high="15" type="fixed" radix="4"/>
+       <!-- 0x8093 invalid -->
+       <reg32 offset="0x8094" name="GRAS_SU_DEPTH_PLANE_CNTL">
+               <bitfield name="Z_MODE" low="0" high="1" type="a6xx_ztest_mode"/>
+       </reg32>
+       <reg32 offset="0x8095" name="GRAS_SU_POLY_OFFSET_SCALE" type="float"/>
+       <reg32 offset="0x8096" name="GRAS_SU_POLY_OFFSET_OFFSET" type="float"/>
+       <reg32 offset="0x8097" name="GRAS_SU_POLY_OFFSET_OFFSET_CLAMP" type="float"/>
+       <!-- duplicates RB_DEPTH_BUFFER_INFO: -->
+       <reg32 offset="0x8098" name="GRAS_SU_DEPTH_BUFFER_INFO">
+               <bitfield name="DEPTH_FORMAT" low="0" high="2" type="a6xx_depth_format"/>
+               <bitfield name="UNK3" pos="3"/>
+       </reg32>
+
+       <reg32 offset="0x8099" name="GRAS_UNKNOWN_8099" low="0" high="5"/>
+       <reg32 offset="0x809a" name="GRAS_UNKNOWN_809A" low="0" high="1"/>
+
+       <bitset name="a6xx_gras_layer_cntl" inline="yes">
+               <bitfield name="WRITES_LAYER" pos="0" type="boolean"/>
+               <bitfield name="WRITES_VIEW" pos="1" type="boolean"/>
+       </bitset>
+       <reg32 offset="0x809b" name="GRAS_VS_LAYER_CNTL" type="a6xx_gras_layer_cntl"/>
+       <reg32 offset="0x809c" name="GRAS_GS_LAYER_CNTL" type="a6xx_gras_layer_cntl"/>
+       <reg32 offset="0x809d" name="GRAS_DS_LAYER_CNTL" type="a6xx_gras_layer_cntl"/>
+       <!-- 0x809e/0x809f invalid -->
+       <reg32 offset="0x80a0" name="GRAS_UNKNOWN_80A0" low="0" high="12"/>
+       <reg32 offset="0x80a1" name="GRAS_BIN_CONTROL">
+               <bitfield name="BINW" low="0" high="5" shr="5" type="uint"/>
+               <bitfield name="BINH" low="8" high="14" shr="4" type="uint"/>
+               <bitfield name="BINNING_PASS" pos="18" type="boolean"/>
+               <bitfield name="UNK19" pos="19"/>
+               <bitfield name="UNK20" pos="20"/>
+               <bitfield name="USE_VIZ" pos="21" type="boolean"/>
+               <bitfield name="UNK22" low="22" high="27"/>
+       </reg32>
+
+       <reg32 offset="0x80a2" name="GRAS_RAS_MSAA_CNTL">
+               <bitfield name="SAMPLES" low="0" high="1" type="a3xx_msaa_samples"/>
+               <bitfield name="UNK2" pos="2"/>
+               <bitfield name="UNK3" pos="3"/>
+       </reg32>
+       <reg32 offset="0x80a3" name="GRAS_DEST_MSAA_CNTL">
+               <bitfield name="SAMPLES" low="0" high="1" type="a3xx_msaa_samples"/>
+               <bitfield name="MSAA_DISABLE" pos="2" type="boolean"/>
+       </reg32>
+
+       <bitset name="a6xx_sample_config" inline="yes">
+               <bitfield name="UNK0" pos="0"/>
+               <bitfield name="LOCATION_ENABLE" pos="1" type="boolean"/>
+       </bitset>
+
+       <bitset name="a6xx_sample_locations" inline="yes">
+               <bitfield name="SAMPLE_0_X" low="0" high="3" radix="4" type="fixed"/>
+               <bitfield name="SAMPLE_0_Y" low="4" high="7" radix="4" type="fixed"/>
+               <bitfield name="SAMPLE_1_X" low="8" high="11" radix="4" type="fixed"/>
+               <bitfield name="SAMPLE_1_Y" low="12" high="15" radix="4" type="fixed"/>
+               <bitfield name="SAMPLE_2_X" low="16" high="19" radix="4" type="fixed"/>
+               <bitfield name="SAMPLE_2_Y" low="20" high="23" radix="4" type="fixed"/>
+               <bitfield name="SAMPLE_3_X" low="24" high="27" radix="4" type="fixed"/>
+               <bitfield name="SAMPLE_3_Y" low="28" high="31" radix="4" type="fixed"/>
+       </bitset>
+
+       <reg32 offset="0x80a4" name="GRAS_SAMPLE_CONFIG" type="a6xx_sample_config"/>
+       <reg32 offset="0x80a5" name="GRAS_SAMPLE_LOCATION_0" type="a6xx_sample_locations"/>
+       <reg32 offset="0x80a6" name="GRAS_SAMPLE_LOCATION_1" type="a6xx_sample_locations"/>
+       <!-- 0x80a7-0x80ae invalid -->
+       <reg32 offset="0x80af" name="GRAS_UNKNOWN_80AF" pos="0"/>
+
+       <bitset name="a6xx_scissor_xy" inline="yes">
+               <bitfield name="X" low="0" high="15" type="uint"/>
+               <bitfield name="Y" low="16" high="31" type="uint"/>
+       </bitset>
+       <array offset="0x80b0" name="GRAS_SC_SCREEN_SCISSOR" stride="2" length="16">
+               <reg32 offset="0" name="TL" type="a6xx_scissor_xy"/>
+               <reg32 offset="1" name="BR" type="a6xx_scissor_xy"/>
+       </array>
+       <array offset="0x80d0" name="GRAS_SC_VIEWPORT_SCISSOR" stride="2" length="16">
+               <reg32 offset="0" name="TL" type="a6xx_scissor_xy"/>
+               <reg32 offset="1" name="BR" type="a6xx_scissor_xy"/>
+       </array>
+
+       <reg32 offset="0x80f0" name="GRAS_SC_WINDOW_SCISSOR_TL" type="a6xx_reg_xy"/>
+       <reg32 offset="0x80f1" name="GRAS_SC_WINDOW_SCISSOR_BR" type="a6xx_reg_xy"/>
+       <!-- 0x80f2-0x80ff invalid -->
+
+       <reg32 offset="0x8100" name="GRAS_LRZ_CNTL">
+               <!--
+               These bits seems to mostly fit.. but wouldn't hurt to have a 2nd
+               look when we get around to enabling lrz
+                -->
+               <bitfield name="ENABLE" pos="0" type="boolean"/>
+               <doc>LRZ write also disabled for blend/etc.</doc>
+               <bitfield name="LRZ_WRITE" pos="1" type="boolean"/>
+               <doc>update MAX instead of MIN value, ie. GL_GREATER/GL_GEQUAL</doc>
+               <bitfield name="GREATER" pos="2" type="boolean"/>
+               <bitfield name="FC_ENABLE" pos="3" type="boolean"/>
+               <!-- set when depth-test + depth-write enabled -->
+               <bitfield name="Z_TEST_ENABLE" pos="4" type="boolean"/>
+               <bitfield name="UNK5" low="5" high="9"/>
+       </reg32>
+       <reg32 offset="0x8101" name="GRAS_UNKNOWN_8101" low="0" high="2"/>
+       <reg32 offset="0x8102" name="GRAS_2D_BLIT_INFO">
+               <bitfield name="COLOR_FORMAT" low="0" high="7" type="a6xx_format"/>
+       </reg32>
+       <reg32 offset="0x8103" name="GRAS_LRZ_BUFFER_BASE_LO"/>
+       <reg32 offset="0x8104" name="GRAS_LRZ_BUFFER_BASE_HI"/>
+       <reg64 offset="0x8103" name="GRAS_LRZ_BUFFER_BASE" align="256" type="waddress"/>
+       <reg32 offset="0x8105" name="GRAS_LRZ_BUFFER_PITCH">
+               <!-- TODO: fix the shr fields -->
+               <bitfield name="PITCH" low="0" high="7" shr="5" type="uint"/>
+               <bitfield name="ARRAY_PITCH" low="10" high="28" shr="4" type="uint"/>
+       </reg32>
+
+       <!--
+       The LRZ "fast clear" buffer is initialized to zero's by blob, and
+       read/written when GRAS_LRZ_CNTL.FC_ENABLE (b3) is set.  It appears
+       to store 1b/block.  It appears that '0' means block has original
+       depth clear value, and '1' means that the corresponding block in
+       LRZ has been modified.  Ignoring alignment/padding, the size is
+       given by the formula:
+
+               // calculate LRZ size from depth size:
+               if (nr_samples == 4) {
+                       width *= 2;
+                       height *= 2;
+               } else if (nr_samples == 2) {
+                       height *= 2;
+               }
+
+               lrz_width = div_round_up(width, 8);
+               lrz_heigh = div_round_up(height, 8);
+
+               // calculate # of blocks:
+               nblocksx = div_round_up(lrz_width, 16);
+               nblocksy = div_round_up(lrz_height, 4);
+
+               // fast-clear buffer is 1bit/block:
+               fc_sz = div_round_up(nblocksx * nblocksy, 8);
+
+       In practice the blob seems to switch off FC_ENABLE once the size
+       increases beyond 1 page.  Not sure if that is an actual limit or
+       not.
+        -->
+       <reg32 offset="0x8106" name="GRAS_LRZ_FAST_CLEAR_BUFFER_BASE_LO"/>
+       <reg32 offset="0x8107" name="GRAS_LRZ_FAST_CLEAR_BUFFER_BASE_HI"/>
+       <reg32 offset="0x8106" name="GRAS_LRZ_FAST_CLEAR_BUFFER_BASE" align="64" type="waddress"/>
+       <!-- 0x8108 invalid -->
+       <reg32 offset="0x8109" name="GRAS_SAMPLE_CNTL">
+               <bitfield name="PER_SAMP_MODE" pos="0" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x810a" name="GRAS_UNKNOWN_810A">
+               <bitfield name="UNK0" low="0" high="10" type="uint"/>
+               <bitfield name="UNK16" low="16" high="26" type="uint"/>
+               <bitfield name="UNK28" low="28" high="31" type="uint"/>
+       </reg32>
+
+       <!-- 0x810b-0x810f invalid -->
+
+       <reg32 offset="0x8110" name="GRAS_UNKNOWN_8110" low="0" high="1"/>
+
+       <!-- 0x8111-0x83ff invalid -->
+
+       <enum name="a6xx_rotation">
+               <value value="0x0" name="ROTATE_0"/>
+               <value value="0x1" name="ROTATE_90"/>
+               <value value="0x2" name="ROTATE_180"/>
+               <value value="0x3" name="ROTATE_270"/>
+               <value value="0x4" name="ROTATE_HFLIP"/>
+               <value value="0x5" name="ROTATE_VFLIP"/>
+       </enum>
+
+       <bitset name="a6xx_2d_blit_cntl" inline="yes">
+               <bitfield name="ROTATE" low="0" high="2" type="a6xx_rotation"/>
+               <bitfield name="UNK3" low="3" high="6"/>
+               <bitfield name="SOLID_COLOR" pos="7" type="boolean"/>
+               <bitfield name="COLOR_FORMAT" low="8" high="15" type="a6xx_format"/>
+               <bitfield name="SCISSOR" pos="16" type="boolean"/>
+               <bitfield name="UNK17" low="17" high="18"/>
+               <!-- required when blitting D24S8/D24X8 -->
+               <bitfield name="D24S8" pos="19" type="boolean"/>
+               <!-- some sort of channel mask, disabled channels are set to zero ? -->
+               <bitfield name="MASK" low="20" high="23"/>
+               <bitfield name="IFMT" low="24" high="28" type="a6xx_2d_ifmt"/>
+               <bitfield name="UNK29" pos="29"/>
+       </bitset>
+
+       <reg32 offset="0x8400" name="GRAS_2D_BLIT_CNTL" type="a6xx_2d_blit_cntl"/>
+       <!-- note: the low 8 bits for src coords are valid, probably fixed point
+            it would be a bit weird though, since we subtract 1 from BR coords
+            apparently signed, gallium driver uses negative coords and it works?
+        -->
+       <reg32 offset="0x8401" name="GRAS_2D_SRC_TL_X" low="8" high="24" type="int"/>
+       <reg32 offset="0x8402" name="GRAS_2D_SRC_BR_X" low="8" high="24" type="int"/>
+       <reg32 offset="0x8403" name="GRAS_2D_SRC_TL_Y" low="8" high="24" type="int"/>
+       <reg32 offset="0x8404" name="GRAS_2D_SRC_BR_Y" low="8" high="24" type="int"/>
+       <reg32 offset="0x8405" name="GRAS_2D_DST_TL" type="a6xx_reg_xy"/>
+       <reg32 offset="0x8406" name="GRAS_2D_DST_BR" type="a6xx_reg_xy"/>
+       <reg32 offset="0x8407" name="GRAS_2D_UNKNOWN_8407" low="0" high="31"/>
+       <reg32 offset="0x8408" name="GRAS_2D_UNKNOWN_8408" low="0" high="31"/>
+       <reg32 offset="0x8409" name="GRAS_2D_UNKNOWN_8409" low="0" high="31"/>
+       <reg32 offset="0x840a" name="GRAS_2D_RESOLVE_CNTL_1" type="a6xx_reg_xy"/>
+       <reg32 offset="0x840b" name="GRAS_2D_RESOLVE_CNTL_2" type="a6xx_reg_xy"/>
+       <!-- 0x840c-0x85ff invalid -->
+
+       <!-- always 0x880 ? (and 0 in a640/a650 traces?) -->
+       <reg32 offset="0x8600" name="GRAS_UNKNOWN_8600" low="0" high="12" />
+       <reg32 offset="0x8601" name="GRAS_ADDR_MODE_CNTL" pos="0" type="a5xx_address_mode"/>
+       <reg32 offset="0x8610" name="GRAS_PERFCTR_TSE_SEL_0"/>
+       <reg32 offset="0x8611" name="GRAS_PERFCTR_TSE_SEL_1"/>
+       <reg32 offset="0x8612" name="GRAS_PERFCTR_TSE_SEL_2"/>
+       <reg32 offset="0x8613" name="GRAS_PERFCTR_TSE_SEL_3"/>
+       <reg32 offset="0x8614" name="GRAS_PERFCTR_RAS_SEL_0"/>
+       <reg32 offset="0x8615" name="GRAS_PERFCTR_RAS_SEL_1"/>
+       <reg32 offset="0x8616" name="GRAS_PERFCTR_RAS_SEL_2"/>
+       <reg32 offset="0x8617" name="GRAS_PERFCTR_RAS_SEL_3"/>
+       <reg32 offset="0x8618" name="GRAS_PERFCTR_LRZ_SEL_0"/>
+       <reg32 offset="0x8619" name="GRAS_PERFCTR_LRZ_SEL_1"/>
+       <reg32 offset="0x861A" name="GRAS_PERFCTR_LRZ_SEL_2"/>
+       <reg32 offset="0x861B" name="GRAS_PERFCTR_LRZ_SEL_3"/>
+
+       <!-- note 0x8620-0x87ff are not all invalid
+       (in particular, 0x8631/0x8632 have 0x3fff3fff mask and would be xy coords)
+       -->
+
+       <!-- same as GRAS_BIN_CONTROL, but without bit 27: -->
+       <reg32 offset="0x8800" name="RB_BIN_CONTROL">
+               <bitfield name="BINW" low="0" high="5" shr="5" type="uint"/>
+               <bitfield name="BINH" low="8" high="14" shr="4" type="uint"/>
+               <bitfield name="BINNING_PASS" pos="18" type="boolean"/>
+               <bitfield name="UNK19" pos="19"/>
+               <bitfield name="UNK20" pos="20"/>
+               <bitfield name="USE_VIZ" pos="21" type="boolean"/>
+               <bitfield name="UNK22" low="22" high="26"/>
+       </reg32>
+       <reg32 offset="0x8801" name="RB_RENDER_CNTL">
+               <bitfield name="UNK3" pos="3" type="boolean"/>
+               <!-- always set: ?? -->
+               <bitfield name="UNK4" pos="4" type="boolean"/>
+               <bitfield name="UNK5" low="5" high="6"/>
+               <!-- set during binning pass: -->
+               <bitfield name="BINNING" pos="7" type="boolean"/>
+               <bitfield name="UNK8" low="8" high="12"/>
+               <!-- bit seems to be set whenever depth buffer enabled: -->
+               <bitfield name="FLAG_DEPTH" pos="14" type="boolean"/>
+               <!-- bitmask of MRTs using UBWC flag buffer: -->
+               <bitfield name="FLAG_MRTS" low="16" high="23"/>
+       </reg32>
+       <reg32 offset="0x8802" name="RB_RAS_MSAA_CNTL">
+               <bitfield name="SAMPLES" low="0" high="1" type="a3xx_msaa_samples"/>
+               <bitfield name="UNK2" pos="2"/>
+               <bitfield name="UNK3" pos="3"/>
+       </reg32>
+       <reg32 offset="0x8803" name="RB_DEST_MSAA_CNTL">
+               <bitfield name="SAMPLES" low="0" high="1" type="a3xx_msaa_samples"/>
+               <bitfield name="MSAA_DISABLE" pos="2" type="boolean"/>
+       </reg32>
+
+       <reg32 offset="0x8804" name="RB_SAMPLE_CONFIG" type="a6xx_sample_config"/>
+       <reg32 offset="0x8805" name="RB_SAMPLE_LOCATION_0" type="a6xx_sample_locations"/>
+       <reg32 offset="0x8806" name="RB_SAMPLE_LOCATION_1" type="a6xx_sample_locations"/>
+       <!-- 0x8807-0x8808 invalid -->
+       <!--
+       note: maybe not actually called RB_RENDER_CONTROLn (since RB_RENDER_CNTL
+       name comes from kernel and is probably right)
+        -->
+       <reg32 offset="0x8809" name="RB_RENDER_CONTROL0">
+               <!-- see also GRAS_CNTL -->
+               <bitfield name="IJ_PERSP_PIXEL" pos="0" type="boolean"/>
+               <!-- b1 set for interpolateAtCentroid() -->
+               <bitfield name="IJ_PERSP_CENTROID" pos="1" type="boolean"/>
+               <!-- b2 set instead of b0 when running in per-sample mode -->
+               <bitfield name="IJ_PERSP_SAMPLE" pos="2" type="boolean"/>
+               <!--
+               b3 set for interpolateAt{Offset,Sample}() if not in per-sample
+               mode, and frag_face
+                -->
+               <bitfield name="SIZE" pos="3" type="boolean"/>
+               <bitfield name="UNK4" pos="4" type="boolean"/>
+               <!-- b5 set ofr interpolateAt{Offset,Sample}() if in per-sample mode -->
+               <bitfield name="SIZE_PERSAMP" pos="5" type="boolean"/>
+               <bitfield name="COORD_MASK" low="6" high="9" type="hex"/>
+               <bitfield name="UNK10" pos="10" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x880a" name="RB_RENDER_CONTROL1">
+               <!-- enable bits for various FS sysvalue regs: -->
+               <bitfield name="SAMPLEMASK" pos="0" type="boolean"/>
+               <bitfield name="UNK1" pos="1" type="boolean"/>
+               <bitfield name="FACENESS" pos="2" type="boolean"/>
+               <bitfield name="SAMPLEID" pos="3" type="boolean"/>
+               <!-- b4 and b5 set in per-sample mode: -->
+               <bitfield name="UNK4" pos="4" type="boolean"/>
+               <bitfield name="UNK5" pos="5" type="boolean"/>
+               <bitfield name="SIZE" pos="6" type="boolean"/>
+               <bitfield name="UNK7" pos="7" type="boolean"/>
+               <bitfield name="UNK8" pos="8" type="boolean"/>
+       </reg32>
+
+       <reg32 offset="0x880b" name="RB_FS_OUTPUT_CNTL0">
+               <bitfield name="DUAL_COLOR_IN_ENABLE" pos="0" type="boolean"/>
+               <bitfield name="FRAG_WRITES_Z" pos="1" type="boolean"/>
+               <bitfield name="FRAG_WRITES_SAMPMASK" pos="2" type="boolean"/>
+               <bitfield name="FRAG_WRITES_STENCILREF" pos="3" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x880c" name="RB_FS_OUTPUT_CNTL1">
+               <bitfield name="MRT" low="0" high="3" type="uint"/>
+       </reg32>
+       <reg32 offset="0x880d" name="RB_RENDER_COMPONENTS">
+               <bitfield name="RT0" low="0" high="3"/>
+               <bitfield name="RT1" low="4" high="7"/>
+               <bitfield name="RT2" low="8" high="11"/>
+               <bitfield name="RT3" low="12" high="15"/>
+               <bitfield name="RT4" low="16" high="19"/>
+               <bitfield name="RT5" low="20" high="23"/>
+               <bitfield name="RT6" low="24" high="27"/>
+               <bitfield name="RT7" low="28" high="31"/>
+       </reg32>
+       <reg32 offset="0x880e" name="RB_DITHER_CNTL">
+               <bitfield name="DITHER_MODE_MRT0" low="0"  high="1"  type="adreno_rb_dither_mode"/>
+               <bitfield name="DITHER_MODE_MRT1" low="2"  high="3"  type="adreno_rb_dither_mode"/>
+               <bitfield name="DITHER_MODE_MRT2" low="4"  high="5"  type="adreno_rb_dither_mode"/>
+               <bitfield name="DITHER_MODE_MRT3" low="6"  high="7"  type="adreno_rb_dither_mode"/>
+               <bitfield name="DITHER_MODE_MRT4" low="8"  high="9"  type="adreno_rb_dither_mode"/>
+               <bitfield name="DITHER_MODE_MRT5" low="10" high="11" type="adreno_rb_dither_mode"/>
+               <bitfield name="DITHER_MODE_MRT6" low="12" high="12" type="adreno_rb_dither_mode"/>
+               <bitfield name="DITHER_MODE_MRT7" low="14" high="15" type="adreno_rb_dither_mode"/>
+       </reg32>
+       <reg32 offset="0x880f" name="RB_SRGB_CNTL">
+               <!-- Same as SP_SRGB_CNTL -->
+               <bitfield name="SRGB_MRT0" pos="0" type="boolean"/>
+               <bitfield name="SRGB_MRT1" pos="1" type="boolean"/>
+               <bitfield name="SRGB_MRT2" pos="2" type="boolean"/>
+               <bitfield name="SRGB_MRT3" pos="3" type="boolean"/>
+               <bitfield name="SRGB_MRT4" pos="4" type="boolean"/>
+               <bitfield name="SRGB_MRT5" pos="5" type="boolean"/>
+               <bitfield name="SRGB_MRT6" pos="6" type="boolean"/>
+               <bitfield name="SRGB_MRT7" pos="7" type="boolean"/>
+       </reg32>
+
+       <reg32 offset="0x8810" name="RB_SAMPLE_CNTL">
+               <bitfield name="PER_SAMP_MODE" pos="0" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x8811" name="RB_UNKNOWN_8811" low="4" high="6"/>
+       <!-- 0x8812-0x8817 invalid -->
+       <!-- always 0x0 ? -->
+       <reg32 offset="0x8818" name="RB_UNKNOWN_8818" low="0" high="6"/>
+       <!-- 0x8819-0x881e all 32 bits -->
+       <reg32 offset="0x8819" name="RB_UNKNOWN_8819"/>
+       <reg32 offset="0x881a" name="RB_UNKNOWN_881A"/>
+       <reg32 offset="0x881b" name="RB_UNKNOWN_881B"/>
+       <reg32 offset="0x881c" name="RB_UNKNOWN_881C"/>
+       <reg32 offset="0x881d" name="RB_UNKNOWN_881D"/>
+       <reg32 offset="0x881e" name="RB_UNKNOWN_881E"/>
+       <!-- 0x881f invalid -->
+       <array offset="0x8820" name="RB_MRT" stride="8" length="8">
+               <reg32 offset="0x0" name="CONTROL">
+                       <bitfield name="BLEND" pos="0" type="boolean"/>
+                       <bitfield name="BLEND2" pos="1" type="boolean"/>
+                       <bitfield name="ROP_ENABLE" pos="2" type="boolean"/>
+                       <bitfield name="ROP_CODE" low="3" high="6" type="a3xx_rop_code"/>
+                       <bitfield name="COMPONENT_ENABLE" low="7" high="10" type="hex"/>
+               </reg32>
+               <reg32 offset="0x1" name="BLEND_CONTROL">
+                       <bitfield name="RGB_SRC_FACTOR" low="0" high="4" type="adreno_rb_blend_factor"/>
+                       <bitfield name="RGB_BLEND_OPCODE" low="5" high="7" type="a3xx_rb_blend_opcode"/>
+                       <bitfield name="RGB_DEST_FACTOR" low="8" high="12" type="adreno_rb_blend_factor"/>
+                       <bitfield name="ALPHA_SRC_FACTOR" low="16" high="20" type="adreno_rb_blend_factor"/>
+                       <bitfield name="ALPHA_BLEND_OPCODE" low="21" high="23" type="a3xx_rb_blend_opcode"/>
+                       <bitfield name="ALPHA_DEST_FACTOR" low="24" high="28" type="adreno_rb_blend_factor"/>
+               </reg32>
+               <reg32 offset="0x2" name="BUF_INFO">
+                       <bitfield name="COLOR_FORMAT" low="0" high="7" type="a6xx_format"/>
+                       <bitfield name="COLOR_TILE_MODE" low="8" high="9" type="a6xx_tile_mode"/>
+                       <bitfield name="UNK10" pos="10"/>
+                       <bitfield name="COLOR_SWAP" low="13" high="14" type="a3xx_color_swap"/>
+               </reg32>
+               <!--
+               at least in gmem, things seem to be aligned to pitch of 64..
+               maybe an artifact of tiled format used in gmem?
+                -->
+               <reg32 offset="0x3" name="PITCH" shr="6" high="15" type="uint"/>
+               <reg32 offset="0x4" name="ARRAY_PITCH" shr="6" high="28" type="uint"/>
+               <!--
+               Compared to a5xx and before, we configure both a GMEM base and
+               external base.  Not sure if this is to facilitate GMEM save/
+               restore for context switch, or just to simplify state setup to
+               not have to care about GMEM vs BYPASS mode.
+                -->
+               <reg32 offset="0x5" name="BASE_LO"/>
+               <reg32 offset="0x6" name="BASE_HI"/>
+
+               <!-- maybe something in low bits since alignment of 1 doesn't make sense? -->
+               <reg64 offset="0x5" name="BASE" type="waddress" align="1"/>
+
+               <reg32 offset="0x7" name="BASE_GMEM" low="12" high="31" shr="12"/>
+       </array>
+
+       <reg32 offset="0x8860" name="RB_BLEND_RED_F32" type="float"/>
+       <reg32 offset="0x8861" name="RB_BLEND_GREEN_F32" type="float"/>
+       <reg32 offset="0x8862" name="RB_BLEND_BLUE_F32" type="float"/>
+       <reg32 offset="0x8863" name="RB_BLEND_ALPHA_F32" type="float"/>
+       <reg32 offset="0x8864" name="RB_ALPHA_CONTROL">
+               <bitfield name="ALPHA_REF" low="0" high="7" type="hex"/>
+               <bitfield name="ALPHA_TEST" pos="8" type="boolean"/>
+               <bitfield name="ALPHA_TEST_FUNC" low="9" high="11" type="adreno_compare_func"/>
+       </reg32>
+       <reg32 offset="0x8865" name="RB_BLEND_CNTL">
+               <!-- per-mrt enable bit -->
+               <bitfield name="ENABLE_BLEND" low="0" high="7"/>
+               <bitfield name="INDEPENDENT_BLEND" pos="8" type="boolean"/>
+               <bitfield name="DUAL_COLOR_IN_ENABLE" pos="9" type="boolean"/>
+               <bitfield name="ALPHA_TO_COVERAGE" pos="10" type="boolean"/>
+               <bitfield name="ALPHA_TO_ONE" pos="11" type="boolean"/>
+               <bitfield name="SAMPLE_MASK" low="16" high="31"/>
+       </reg32>
+       <!-- 0x8866-0x886f invalid -->
+       <reg32 offset="0x8870" name="RB_DEPTH_PLANE_CNTL">
+               <bitfield name="Z_MODE" low="0" high="1" type="a6xx_ztest_mode"/>
+       </reg32>
+
+       <reg32 offset="0x8871" name="RB_DEPTH_CNTL">
+               <bitfield name="Z_ENABLE" pos="0" type="boolean"/>
+               <bitfield name="Z_WRITE_ENABLE" pos="1" type="boolean"/>
+               <bitfield name="ZFUNC" low="2" high="4" type="adreno_compare_func"/>
+               <bitfield name="Z_CLAMP_ENABLE" pos="5" type="boolean"/>
+               <doc>
+               Z_TEST_ENABLE bit is set for zfunc other than GL_ALWAYS or GL_NEVER
+               also set when Z_BOUNDS_ENABLE is set
+               </doc>
+               <bitfield name="Z_TEST_ENABLE" pos="6" type="boolean"/>
+               <bitfield name="Z_BOUNDS_ENABLE" pos="7" type="boolean"/>
+       </reg32>
+       <!-- duplicates GRAS_SU_DEPTH_BUFFER_INFO: -->
+       <reg32 offset="0x8872" name="RB_DEPTH_BUFFER_INFO">
+               <bitfield name="DEPTH_FORMAT" low="0" high="2" type="a6xx_depth_format"/>
+               <bitfield name="UNK3" low="3" high="4"/>
+       </reg32>
+       <reg32 offset="0x8873" name="RB_DEPTH_BUFFER_PITCH" low="0" high="13" shr="6" type="uint"/>
+       <reg32 offset="0x8874" name="RB_DEPTH_BUFFER_ARRAY_PITCH" low="0" high="27" shr="6" type="uint"/>
+       <reg32 offset="0x8875" name="RB_DEPTH_BUFFER_BASE_LO"/>
+       <reg32 offset="0x8876" name="RB_DEPTH_BUFFER_BASE_HI"/>
+       <reg64 offset="0x8875" name="RB_DEPTH_BUFFER_BASE" type="waddress" align="64"/>
+       <reg32 offset="0x8877" name="RB_DEPTH_BUFFER_BASE_GMEM" low="12" high="31" shr="12"/>
+
+       <reg32 offset="0x8878" name="RB_Z_BOUNDS_MIN" type="float"/>
+       <reg32 offset="0x8879" name="RB_Z_BOUNDS_MAX" type="float"/>
+       <!-- 0x887a-0x887f invalid -->
+       <reg32 offset="0x8880" name="RB_STENCIL_CONTROL">
+               <bitfield name="STENCIL_ENABLE" pos="0" type="boolean"/>
+               <bitfield name="STENCIL_ENABLE_BF" pos="1" type="boolean"/>
+               <!--
+                       set for stencil operations that require read from stencil
+                       buffer, but not for example for stencil clear (which does
+                       not require read).. so guessing this is analogous to
+                       READ_DEST_ENABLE for color buffer..
+                -->
+               <bitfield name="STENCIL_READ" pos="2" type="boolean"/>
+               <bitfield name="FUNC" low="8" high="10" type="adreno_compare_func"/>
+               <bitfield name="FAIL" low="11" high="13" type="adreno_stencil_op"/>
+               <bitfield name="ZPASS" low="14" high="16" type="adreno_stencil_op"/>
+               <bitfield name="ZFAIL" low="17" high="19" type="adreno_stencil_op"/>
+               <bitfield name="FUNC_BF" low="20" high="22" type="adreno_compare_func"/>
+               <bitfield name="FAIL_BF" low="23" high="25" type="adreno_stencil_op"/>
+               <bitfield name="ZPASS_BF" low="26" high="28" type="adreno_stencil_op"/>
+               <bitfield name="ZFAIL_BF" low="29" high="31" type="adreno_stencil_op"/>
+       </reg32>
+       <reg32 offset="0x8881" name="RB_STENCIL_INFO">
+               <bitfield name="SEPARATE_STENCIL" pos="0" type="boolean"/>
+               <bitfield name="UNK1" pos="1" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x8882" name="RB_STENCIL_BUFFER_PITCH" low="0" high="11" shr="6" type="uint"/>
+       <reg32 offset="0x8883" name="RB_STENCIL_BUFFER_ARRAY_PITCH" low="0" high="23" shr="6" type="uint"/>
+       <reg32 offset="0x8884" name="RB_STENCIL_BUFFER_BASE_LO"/>
+       <reg32 offset="0x8885" name="RB_STENCIL_BUFFER_BASE_HI"/>
+       <reg64 offset="0x8884" name="RB_STENCIL_BUFFER_BASE" type="waddress" align="64"/>
+       <reg32 offset="0x8886" name="RB_STENCIL_BUFFER_BASE_GMEM" low="12" high="31" shr="12"/>
+       <reg32 offset="0x8887" name="RB_STENCILREF">
+               <bitfield name="REF" low="0" high="7"/>
+               <bitfield name="BFREF" low="8" high="15"/>
+       </reg32>
+       <reg32 offset="0x8888" name="RB_STENCILMASK">
+               <bitfield name="MASK" low="0" high="7"/>
+               <bitfield name="BFMASK" low="8" high="15"/>
+       </reg32>
+       <reg32 offset="0x8889" name="RB_STENCILWRMASK">
+               <bitfield name="WRMASK" low="0" high="7"/>
+               <bitfield name="BFWRMASK" low="8" high="15"/>
+       </reg32>
+       <!-- 0x888a-0x888f invalid -->
+       <reg32 offset="0x8890" name="RB_WINDOW_OFFSET" type="a6xx_reg_xy"/>
+       <reg32 offset="0x8891" name="RB_SAMPLE_COUNT_CONTROL">
+               <bitfield name="UNK0" pos="0" type="boolean"/>
+               <bitfield name="COPY" pos="1" type="boolean"/>
+       </reg32>
+       <!-- 0x8892-0x8897 invalid -->
+       <reg32 offset="0x8898" name="RB_LRZ_CNTL">
+               <bitfield name="ENABLE" pos="0" type="boolean"/>
+       </reg32>
+       <!-- 0x8899-0x88bf invalid -->
+       <!-- clamps depth value for depth test/write -->
+       <reg32 offset="0x88c0" name="RB_Z_CLAMP_MIN" type="float"/>
+       <reg32 offset="0x88c1" name="RB_Z_CLAMP_MAX" type="float"/>
+       <!-- 0x88c2-0x88cf invalid-->
+       <reg32 offset="0x88d0" name="RB_UNKNOWN_88D0">
+               <bitfield name="UNK0" low="0" high="12"/>
+               <bitfield name="UNK16" low="16" high="26"/>
+       </reg32>
+       <reg32 offset="0x88d1" name="RB_BLIT_SCISSOR_TL" type="a6xx_reg_xy"/>
+       <reg32 offset="0x88d2" name="RB_BLIT_SCISSOR_BR" type="a6xx_reg_xy"/>
+       <!-- weird to duplicate other regs from same block?? -->
+       <reg32 offset="0x88d3" name="RB_BIN_CONTROL2">
+               <bitfield name="BINW" low="0" high="5" shr="5" type="uint"/>
+               <bitfield name="BINH" low="8" high="14" shr="4" type="uint"/>
+       </reg32>
+       <reg32 offset="0x88d4" name="RB_WINDOW_OFFSET2" type="a6xx_reg_xy"/>
+       <reg32 offset="0x88d5" name="RB_MSAA_CNTL">
+               <bitfield name="SAMPLES" low="3" high="4" type="a3xx_msaa_samples"/>
+       </reg32>
+       <reg32 offset="0x88d6" name="RB_BLIT_BASE_GMEM" low="12" high="31" shr="12"/>
+       <!-- s/DST_FORMAT/DST_INFO/ probably: -->
+       <reg32 offset="0x88d7" name="RB_BLIT_DST_INFO">
+               <bitfield name="TILE_MODE" low="0" high="1" type="a6xx_tile_mode"/>
+               <bitfield name="FLAGS" pos="2" type="boolean"/>
+               <bitfield name="SAMPLES" low="3" high="4" type="a3xx_msaa_samples"/>
+               <bitfield name="COLOR_SWAP" low="5" high="6" type="a3xx_color_swap"/>
+               <bitfield name="COLOR_FORMAT" low="7" high="14" type="a6xx_format"/>
+               <bitfield name="UNK15" pos="15" type="boolean"/>
+       </reg32>
+       <reg64 offset="0x88d8" name="RB_BLIT_DST" type="waddress" align="64"/>
+       <reg32 offset="0x88d8" name="RB_BLIT_DST_LO"/>
+       <reg32 offset="0x88d9" name="RB_BLIT_DST_HI"/>
+       <reg32 offset="0x88da" name="RB_BLIT_DST_PITCH" low="0" high="15" shr="6" type="uint"/>
+       <!-- array-pitch is size of layer -->
+       <reg32 offset="0x88db" name="RB_BLIT_DST_ARRAY_PITCH" low="0" high="28" shr="6" type="uint"/>
+       <reg64 offset="0x88dc" name="RB_BLIT_FLAG_DST" type="waddress" align="64"/>
+       <reg32 offset="0x88dc" name="RB_BLIT_FLAG_DST_LO"/>
+       <reg32 offset="0x88dd" name="RB_BLIT_FLAG_DST_HI"/>
+       <reg32 offset="0x88de" name="RB_BLIT_FLAG_DST_PITCH">
+               <bitfield name="PITCH" low="0" high="10" shr="6" type="uint"/>
+               <bitfield name="ARRAY_PITCH" low="11" high="27" shr="7" type="uint"/>
+       </reg32>
+
+       <reg32 offset="0x88df" name="RB_BLIT_CLEAR_COLOR_DW0"/>
+       <reg32 offset="0x88e0" name="RB_BLIT_CLEAR_COLOR_DW1"/>
+       <reg32 offset="0x88e1" name="RB_BLIT_CLEAR_COLOR_DW2"/>
+       <reg32 offset="0x88e2" name="RB_BLIT_CLEAR_COLOR_DW3"/>
+
+       <!-- seems somewhat similar to what we called RB_CLEAR_CNTL on a5xx: -->
+       <reg32 offset="0x88e3" name="RB_BLIT_INFO">
+               <bitfield name="UNK0" pos="0" type="boolean"/> <!-- s8 stencil restore/clear?  But also color restore? -->
+               <bitfield name="GMEM" pos="1" type="boolean"/> <!-- set for restore and clear to gmem? -->
+               <bitfield name="INTEGER" pos="2" type="boolean"/> <!-- probably -->
+               <bitfield name="DEPTH" pos="3" type="boolean"/> <!-- z16/z32/z24s8/x24x8 clear or resolve? -->
+               <doc>
+                       For clearing depth/stencil
+                               1 - depth
+                               2 - stencil
+                               3 - depth+stencil
+                       For clearing color buffer:
+                               then probably a component mask, I always see 0xf
+               </doc>
+               <bitfield name="CLEAR_MASK" low="4" high="7"/>
+               <bitfield name="UNK8" low="8" high="9"/>
+               <bitfield name="UNK12" low="12" high="15"/>
+       </reg32>
+       <!-- 0x88e4-0x88ef invalid -->
+       <!-- always 0x0 ? -->
+       <reg32 offset="0x88f0" name="RB_UNKNOWN_88F0" low="0" high="11"/>
+       <!-- could be for separate stencil? (or may not be a flag buffer at all) -->
+       <reg64 offset="0x88f1" name="RB_UNK_FLAG_BUFFER_BASE" type="waddress" align="64"/>
+       <reg32 offset="0x88f3" name="RB_UNK_FLAG_BUFFER_PITCH">
+               <bitfield name="PITCH" low="0" high="10" shr="6" type="uint"/>
+               <bitfield name="ARRAY_PITCH" low="11" high="23" shr="7" type="uint"/>
+       </reg32>
+       <reg32 offset="0x88f4" name="RB_UNKNOWN_88F4" low="0" high="2"/>
+       <!-- 0x88f5-0x88ff invalid -->
+       <reg32 offset="0x8900" name="RB_DEPTH_FLAG_BUFFER_BASE_LO"/>
+       <reg32 offset="0x8901" name="RB_DEPTH_FLAG_BUFFER_BASE_HI"/>
+       <reg64 offset="0x8900" name="RB_DEPTH_FLAG_BUFFER_BASE" type="waddress" align="64"/>
+       <reg32 offset="0x8902" name="RB_DEPTH_FLAG_BUFFER_PITCH">
+               <bitfield name="PITCH" low="0" high="6" shr="6" type="uint"/>
+               <!-- TODO: actually part of array pitch -->
+               <bitfield name="UNK8" low="8" high="10"/>
+               <bitfield name="ARRAY_PITCH" low="11" high="27" shr="7" type="uint"/>
+       </reg32>
+       <array offset="0x8903" name="RB_MRT_FLAG_BUFFER" stride="3" length="8">
+               <reg32 offset="0" name="ADDR_LO"/>
+               <reg32 offset="1" name="ADDR_HI"/>
+               <reg64 offset="0" name="ADDR" type="waddress" align="64"/>
+               <reg32 offset="2" name="PITCH">
+                       <bitfield name="PITCH" low="0" high="10" shr="6" type="uint"/>
+                       <bitfield name="ARRAY_PITCH" low="11" high="28" shr="7" type="uint"/>
+               </reg32>
+       </array>
+       <!-- 0x891b-0x8926 invalid -->
+       <reg32 offset="0x8927" name="RB_SAMPLE_COUNT_ADDR_LO"/>
+       <reg32 offset="0x8928" name="RB_SAMPLE_COUNT_ADDR_HI"/>
+       <reg64 offset="0x8927" name="RB_SAMPLE_COUNT_ADDR" type="waddress" align="16"/>
+       <!-- 0x8929-0x89ff invalid -->
+
+       <!-- TODO: there are some registers in the 0x8a00-0x8bff range -->
+
+       <reg32 offset="0x8c00" name="RB_2D_BLIT_CNTL" type="a6xx_2d_blit_cntl"/>
+       <reg32 offset="0x8c01" name="RB_2D_UNKNOWN_8C01" low="0" high="31"/>
+
+       <bitset name="a6xx_2d_surf_info" inline="yes">
+               <bitfield name="COLOR_FORMAT" low="0" high="7" type="a6xx_format"/>
+               <bitfield name="TILE_MODE" low="8" high="9" type="a6xx_tile_mode"/>
+               <bitfield name="COLOR_SWAP" low="10" high="11" type="a3xx_color_swap"/>
+               <bitfield name="FLAGS" pos="12" type="boolean"/>
+               <bitfield name="SRGB" pos="13" type="boolean"/>
+               <!-- the rest is only for src -->
+               <bitfield name="SAMPLES" low="14" high="15" type="a3xx_msaa_samples"/>
+               <bitfield name="FILTER" pos="16" type="boolean"/>
+               <bitfield name="SAMPLES_AVERAGE" pos="18" type="boolean"/>
+               <bitfield name="UNK20" pos="20" type="boolean"/>
+               <bitfield name="UNK22" pos="22" type="boolean"/>
+       </bitset>
+
+       <!-- 0x8c02-0x8c16 invalid -->
+       <!-- TODO: RB_2D_DST_INFO has 17 valid bits (doesn't match a6xx_2d_surf_info) -->
+       <reg32 offset="0x8c17" name="RB_2D_DST_INFO" type="a6xx_2d_surf_info"/>
+       <reg32 offset="0x8c18" name="RB_2D_DST_LO"/>
+       <reg32 offset="0x8c19" name="RB_2D_DST_HI"/>
+       <reg64 offset="0x8c18" name="RB_2D_DST" type="waddress" align="64"/>
+       <reg32 offset="0x8c1a" name="RB_2D_DST_PITCH" low="0" high="15" shr="6" type="uint"/>
+       <!-- this is a guess but seems likely (for NV12/IYUV): -->
+       <reg64 offset="0x8c1b" name="RB_2D_DST_PLANE1" type="waddress" align="64"/>
+       <reg32 offset="0x8c1d" name="RB_2D_DST_PLANE_PITCH" low="0" high="15" shr="6" type="uint"/>
+       <reg64 offset="0x8c1e" name="RB_2D_DST_PLANE2" type="waddress" align="64"/>
+
+       <reg32 offset="0x8c20" name="RB_2D_DST_FLAGS_LO"/>
+       <reg32 offset="0x8c21" name="RB_2D_DST_FLAGS_HI"/>
+       <reg64 offset="0x8c20" name="RB_2D_DST_FLAGS" type="waddress" align="64"/>
+       <reg32 offset="0x8c22" name="RB_2D_DST_FLAGS_PITCH" low="0" high="7" shr="6" type="uint"/>
+       <!-- this is a guess but seems likely (for NV12 with UBWC): -->
+       <reg64 offset="0x8c23" name="RB_2D_DST_FLAGS_PLANE" type="waddress" align="64"/>
+       <reg32 offset="0x8c25" name="RB_2D_DST_FLAGS_PLANE_PITCH" low="0" high="7" shr="6" type="uint"/>
+
+       <!-- TODO: 0x8c26-0x8c33 are all full 32-bit registers -->
+       <!-- unlike a5xx, these are per channel values rather than packed -->
+       <reg32 offset="0x8c2c" name="RB_2D_SRC_SOLID_C0"/>
+       <reg32 offset="0x8c2d" name="RB_2D_SRC_SOLID_C1"/>
+       <reg32 offset="0x8c2e" name="RB_2D_SRC_SOLID_C2"/>
+       <reg32 offset="0x8c2f" name="RB_2D_SRC_SOLID_C3"/>
+       <!-- 0x8c34-0x8dff invalid -->
+
+       <!-- always 0x1 ? either doesn't exist for a650 or write-only: -->
+       <reg32 offset="0x8e01" name="RB_UNKNOWN_8E01"/>
+       <!-- 0x8e00-0x8e03 invalid -->
+       <reg32 offset="0x8e04" name="RB_UNKNOWN_8E04"/> <!-- TODO: valid mask 0xfffffeff -->
+       <reg32 offset="0x8e05" name="RB_ADDR_MODE_CNTL" pos="0" type="a5xx_address_mode"/>
+       <!-- 0x8e06 invalid -->
+       <reg32 offset="0x8e07" name="RB_CCU_CNTL">
+               <!-- offset into GMEM for something.
+                       important for sysmem path
+                       BLIT_OP_SCALE also writes to GMEM at this offset for GMEM store
+                       blob values for GMEM path (note: close to GMEM size):
+                       a618: 0x7c000 a630/a640: 0xf8000 a650: 0x114000
+                       SYSMEM path values:
+                       a618: 0x10000 a630/a640: 0x20000 a650: 0x30000
+                       TODO: valid mask 0xfffffc1f
+               -->
+               <bitfield name="OFFSET" low="23" high="31" shr="12" type="hex"/>
+               <bitfield name="GMEM" pos="22" type="boolean"/> <!-- set for GMEM path -->
+               <bitfield name="UNK2" pos="2" type="boolean"/> <!-- sometimes set with GMEM? -->
+       </reg32>
+       <reg32 offset="0x8e08" name="RB_NC_MODE_CNTL">
+               <bitfield name="MODE" pos="0" type="boolean"/>
+               <bitfield name="LOWER_BIT" low="1" high="2" type="uint"/>
+               <bitfield name="MIN_ACCESS_LENGTH" pos="3" type="boolean"/> <!-- true=64b false=32b -->
+               <bitfield name="AMSBC" pos="4" type="boolean"/>
+               <bitfield name="UPPER_BIT" pos="10" type="uint"/>
+               <bitfield name="RGB565_PREDICATOR" pos="11" type="boolean"/>
+               <bitfield name="UNK12" low="12" high="13"/>
+       </reg32>
+       <!-- 0x8e09-0x8e0f invalid -->
+       <reg32 offset="0x8e10" name="RB_PERFCTR_RB_SEL_0"/>
+       <reg32 offset="0x8e11" name="RB_PERFCTR_RB_SEL_1"/>
+       <reg32 offset="0x8e12" name="RB_PERFCTR_RB_SEL_2"/>
+       <reg32 offset="0x8e13" name="RB_PERFCTR_RB_SEL_3"/>
+       <reg32 offset="0x8e14" name="RB_PERFCTR_RB_SEL_4"/>
+       <reg32 offset="0x8e15" name="RB_PERFCTR_RB_SEL_5"/>
+       <reg32 offset="0x8e16" name="RB_PERFCTR_RB_SEL_6"/>
+       <reg32 offset="0x8e17" name="RB_PERFCTR_RB_SEL_7"/>
+       <reg32 offset="0x8e18" name="RB_PERFCTR_CCU_SEL_0"/>
+       <reg32 offset="0x8e19" name="RB_PERFCTR_CCU_SEL_1"/>
+       <reg32 offset="0x8e1a" name="RB_PERFCTR_CCU_SEL_2"/>
+       <reg32 offset="0x8e1b" name="RB_PERFCTR_CCU_SEL_3"/>
+       <reg32 offset="0x8e1c" name="RB_PERFCTR_CCU_SEL_4"/>
+       <!-- 0x8e1d-0x8e1f invalid -->
+       <!-- 0x8e20-0x8e25 more perfcntr sel? -->
+       <!-- 0x8e26-0x8e27 invalid -->
+       <reg32 offset="0x8e28" name="RB_UNKNOWN_8E28" low="0" high="10"/>
+       <!-- 0x8e29-0x8e2b invalid -->
+       <reg32 offset="0x8e2c" name="RB_PERFCTR_CMP_SEL_0"/>
+       <reg32 offset="0x8e2d" name="RB_PERFCTR_CMP_SEL_1"/>
+       <reg32 offset="0x8e2e" name="RB_PERFCTR_CMP_SEL_2"/>
+       <reg32 offset="0x8e2f" name="RB_PERFCTR_CMP_SEL_3"/>
+       <reg32 offset="0x8e3b" name="RB_RB_SUB_BLOCK_SEL_CNTL_HOST"/>
+       <reg32 offset="0x8e3d" name="RB_RB_SUB_BLOCK_SEL_CNTL_CD"/>
+       <!-- 0x8e3e-0x8e4f invalid -->
+       <!-- GMEM save/restore for preemption: -->
+       <reg32 offset="0x8e50" name="RB_CONTEXT_SWITCH_GMEM_SAVE_RESTORE" pos="0" type="boolean"/>
+       <!-- address for GMEM save/restore? -->
+       <reg32 offset="0x8e51" name="RB_UNKNOWN_8E51" type="waddress" align="1"/>
+       <!-- 0x8e53-0x8e7f invalid -->
+       <!-- 0x8e80-0x8e83 are valid -->
+       <!-- 0x8e84-0x90ff invalid -->
+
+       <!-- 0x9000-0x90ff invalid -->
+
+       <!-- something to do with geometry shader: -->
+       <reg32 offset="0x9100" name="VPC_UNKNOWN_9100" low="0" high="7"/>
+
+       <bitset name="a6xx_vpc_xs_clip_cntl" inline="yes">
+               <bitfield name="CLIP_MASK" low="0" high="7" type="uint"/>
+               <!-- there can be up to 8 total clip/cull distance outputs,
+                    but apparenly VPC can only deal with vec4, so when there are
+                    more than 4 outputs a second location needs to be programmed
+               -->
+               <bitfield name="CLIP_DIST_03_LOC" low="8" high="15" type="uint"/>
+               <bitfield name="CLIP_DIST_47_LOC" low="16" high="23" type="uint"/>
+       </bitset>
+       <reg32 offset="0x9101" name="VPC_VS_CLIP_CNTL" type="a6xx_vpc_xs_clip_cntl"/>
+       <reg32 offset="0x9102" name="VPC_GS_CLIP_CNTL" type="a6xx_vpc_xs_clip_cntl"/>
+       <reg32 offset="0x9103" name="VPC_DS_CLIP_CNTL" type="a6xx_vpc_xs_clip_cntl"/>
+
+       <bitset name="a6xx_vpc_xs_layer_cntl" inline="yes">
+               <bitfield name="LAYERLOC" low="0" high="7" type="uint"/>
+               <bitfield name="VIEWLOC" low="8" high="15" type="uint"/>
+       </bitset>
+
+       <reg32 offset="0x9104" name="VPC_VS_LAYER_CNTL" type="a6xx_vpc_xs_layer_cntl"/>
+       <reg32 offset="0x9105" name="VPC_GS_LAYER_CNTL" type="a6xx_vpc_xs_layer_cntl"/>
+       <reg32 offset="0x9106" name="VPC_DS_LAYER_CNTL" type="a6xx_vpc_xs_layer_cntl"/>
+
+       <reg32 offset="0x9107" name="VPC_UNKNOWN_9107" pos="2"/>
+       <reg32 offset="0x9108" name="VPC_POLYGON_MODE">
+               <bitfield name="MODE" low="0" high="1" type="a6xx_polygon_mode"/>
+       </reg32>
+       <!-- 0x9109-0x91ff invalid -->
+       <array offset="0x9200" name="VPC_VARYING_INTERP" stride="1" length="8">
+               <reg32 offset="0x0" name="MODE"/>
+       </array>
+       <array offset="0x9208" name="VPC_VARYING_PS_REPL" stride="1" length="8">
+               <reg32 offset="0x0" name="MODE"/>
+       </array>
+
+       <!-- always 0x0 -->
+       <reg32 offset="0x9210" name="VPC_UNKNOWN_9210" low="0" high="31"/>
+       <reg32 offset="0x9211" name="VPC_UNKNOWN_9211" low="0" high="31"/>
+
+       <array offset="0x9212" name="VPC_VAR" stride="1" length="4">
+               <!-- one bit per varying component: -->
+               <reg32 offset="0" name="DISABLE"/>
+       </array>
+
+       <reg32 offset="0x9216" name="VPC_SO_CNTL">
+               <bitfield name="UNK0" low="0" high="7"/>
+               <!-- always 0x10000 when SO enabled.. -->
+               <bitfield name="ENABLE" pos="16" type="boolean"/>
+       </reg32>
+       <!-- special register, write multiple times to load SO program (not readable) -->
+       <reg32 offset="0x9217" name="VPC_SO_PROG">
+               <bitfield name="A_BUF" low="0" high="1" type="uint"/>
+               <bitfield name="A_OFF" low="2" high="10" shr="2" type="uint"/>
+               <bitfield name="A_EN" pos="11" type="boolean"/>
+               <bitfield name="B_BUF" low="12" high="13" type="uint"/>
+               <bitfield name="B_OFF" low="14" high="22" shr="2" type="uint"/>
+               <bitfield name="B_EN" pos="23" type="boolean"/>
+       </reg32>
+
+       <reg32 offset="0x9218" name="VPC_SO_STREAM_COUNTS_LO"/>
+       <reg32 offset="0x9219" name="VPC_SO_STREAM_COUNTS_HI"/>
+       <reg32 offset="0x9218" name="VPC_SO_STREAM_COUNTS" type="waddress" align="32"/>
+
+       <array offset="0x921a" name="VPC_SO" stride="7" length="4">
+               <reg64 offset="0" name="BUFFER_BASE" type="waddress" align="32"/>
+               <reg32 offset="0" name="BUFFER_BASE_LO"/>
+               <reg32 offset="1" name="BUFFER_BASE_HI"/>
+               <reg32 offset="2" name="BUFFER_SIZE" low="2" high="31" shr="2"/>
+               <reg32 offset="3" name="NCOMP" low="0" high="9"/>  <!-- component count -->
+               <reg32 offset="4" name="BUFFER_OFFSET" low="2" high="31" shr="2"/>
+               <reg64 offset="5" name="FLUSH_BASE" type="waddress" align="32"/>
+               <reg32 offset="5" name="FLUSH_BASE_LO"/>
+               <reg32 offset="6" name="FLUSH_BASE_HI"/>
+       </array>
+
+       <reg32 offset="0x9236" name="VPC_POINT_COORD_INVERT">
+               <bitfield name="INVERT" pos="0" type="boolean"/>
+       </reg32>
+       <!-- 0x9237-0x92ff invalid -->
+       <!-- always 0x0 ? -->
+       <reg32 offset="0x9300" name="VPC_UNKNOWN_9300" low="0" high="2"/>
+
+       <bitset name="a6xx_vpc_xs_pack" inline="yes">
+               <doc>
+                       num of varyings plus four for gl_Position (plus one if gl_PointSize)
+                       plus # of transform-feedback (streamout) varyings if using the
+                       hw streamout (rather than stg instructions in shader)
+               </doc>
+               <bitfield name="STRIDE_IN_VPC" low="0" high="7" type="uint"/>
+               <bitfield name="POSITIONLOC" low="8" high="15" type="uint"/>
+               <bitfield name="PSIZELOC" low="16" high="23" type="uint"/>
+               <bitfield name="UNK24" low="24" high="27"/>
+       </bitset>
+       <reg32 offset="0x9301" name="VPC_VS_PACK" type="a6xx_vpc_xs_pack"/>
+       <reg32 offset="0x9302" name="VPC_GS_PACK" type="a6xx_vpc_xs_pack"/>
+       <reg32 offset="0x9303" name="VPC_DS_PACK" type="a6xx_vpc_xs_pack"/>
+
+       <reg32 offset="0x9304" name="VPC_CNTL_0">
+               <bitfield name="NUMNONPOSVAR" low="0" high="7" type="uint"/>
+               <!-- for fixed-function (i.e. no GS) gl_PrimitiveID in FS -->
+               <bitfield name="PRIMIDLOC" low="8" high="15" type="uint"/>
+               <bitfield name="VARYING" pos="16" type="boolean"/>
+               <bitfield name="UNKLOC" low="24" high="31" type="uint"/>
+       </reg32>
+
+       <reg32 offset="0x9305" name="VPC_SO_BUF_CNTL">
+               <!-- TODO: the first 12 bits are valid, likely 3-bit enum instead of bools -->
+               <bitfield name="BUF0" pos="0" type="boolean"/>
+               <bitfield name="BUF1" pos="3" type="boolean"/>
+               <bitfield name="BUF2" pos="6" type="boolean"/>
+               <bitfield name="BUF3" pos="9" type="boolean"/>
+               <bitfield name="ENABLE" pos="15" type="boolean"/>
+               <bitfield name="UNK16" low="16" high="19"/>
+       </reg32>
+       <reg32 offset="0x9306" name="VPC_SO_DISABLE">
+               <bitfield name="DISABLE" pos="0" type="boolean"/>
+       </reg32>
+       <!-- 0x9307-0x95ff invalid -->
+
+       <!-- TODO: 0x9600-0x97ff range -->
+       <reg32 offset="0x9600" name="VPC_UNKNOWN_9600"/> <!-- always 0x0 ? TODO: 0x1fbf37ff valid mask -->
+       <reg32 offset="0x9601" name="VPC_ADDR_MODE_CNTL" pos="0" type="a5xx_address_mode"/>
+       <reg32 offset="0x9602" name="VPC_UNKNOWN_9602" pos="0"/> <!-- always 0x0 ? -->
+       <reg32 offset="0x9603" name="VPC_UNKNOWN_9603" low="0" high="26"/>
+       <reg32 offset="0x9604" name="VPC_PERFCTR_VPC_SEL_0"/>
+       <reg32 offset="0x9605" name="VPC_PERFCTR_VPC_SEL_1"/>
+       <reg32 offset="0x9606" name="VPC_PERFCTR_VPC_SEL_2"/>
+       <reg32 offset="0x9607" name="VPC_PERFCTR_VPC_SEL_3"/>
+       <reg32 offset="0x9608" name="VPC_PERFCTR_VPC_SEL_4"/>
+       <reg32 offset="0x9609" name="VPC_PERFCTR_VPC_SEL_5"/>
+       <!-- 0x960a-0x9623 invalid -->
+       <!-- TODO: regs from 0x9624-0x963a -->
+       <!-- 0x963b-0x97ff invalid -->
+
+       <reg32 offset="0x9800" name="PC_TESS_NUM_VERTEX" low="0" high="5" type="uint"/>
+
+       <!-- always 0x0 ? -->
+       <reg32 offset="0x9801" name="PC_HS_INPUT_SIZE">
+               <bitfield name="SIZE" low="0" high="10"/>
+               <bitfield name="UNK13" pos="13"/>
+       </reg32>
+
+       <enum name="a6xx_tess_spacing">
+               <value value="0x0" name="TESS_EQUAL"/>
+               <value value="0x2" name="TESS_FRACTIONAL_ODD"/>
+               <value value="0x3" name="TESS_FRACTIONAL_EVEN"/>
+       </enum>
+       <enum name="a6xx_tess_output">
+               <value value="0x0" name="TESS_POINTS"/>
+               <value value="0x1" name="TESS_LINES"/>
+               <value value="0x2" name="TESS_CW_TRIS"/>
+               <value value="0x3" name="TESS_CCW_TRIS"/>
+       </enum>
+       <reg32 offset="0x9802" name="PC_TESS_CNTL">
+               <bitfield name="SPACING" low="0" high="1" type="a6xx_tess_spacing"/>
+               <bitfield name="OUTPUT" low="2" high="3" type="a6xx_tess_output"/>
+       </reg32>
+
+       <reg32 offset="0x9803" name="PC_RESTART_INDEX" low="0" high="31" type="uint"/>
+       <reg32 offset="0x9804" name="PC_MODE_CNTL" low="0" high="7"/>
+
+       <!-- always 0x1 ? -->
+       <reg32 offset="0x9805" name="PC_UNKNOWN_9805" low="0" high="2"/>
+
+       <!-- probably a mirror of VFD_CONTROL_6 -->
+       <reg32 offset="0x9806" name="PC_PRIMID_PASSTHRU" pos="0" type="boolean"/>
+       <!-- 0x980b-0x983f invalid -->
+
+       <!-- 0x9840 - 0x9842 are not readable -->
+       <reg32 offset="0x9840" name="PC_DRAW_CMD">
+               <bitfield name="STATE_ID" low="0" high="7"/>
+       </reg32>
+
+       <reg32 offset="0x9841" name="PC_DISPATCH_CMD">
+               <bitfield name="STATE_ID" low="0" high="7"/>
+       </reg32>
+
+       <reg32 offset="0x9842" name="PC_EVENT_CMD">
+               <!-- I think only the low bit is actually used? -->
+               <bitfield name="STATE_ID" low="16" high="23"/>
+               <bitfield name="EVENT" low="0" high="6" type="vgt_event_type"/>
+       </reg32>
+
+       <!-- 0x9843-0x997f invalid -->
+
+       <reg32 offset="0x9981" name="PC_POLYGON_MODE">
+               <bitfield name="MODE" low="0" high="1" type="a6xx_polygon_mode"/>
+       </reg32>
+       <reg32 offset="0x9980" name="PC_UNKNOWN_9980" low="0" high="2"/>
+
+       <!-- 0x9982-0x9aff invalid -->
+
+       <reg32 offset="0x9b00" name="PC_PRIMITIVE_CNTL_0">
+               <bitfield name="PRIMITIVE_RESTART" pos="0" type="boolean"/>
+               <!-- maybe?  b1 seems always set, so just assume it is for now: -->
+               <bitfield name="PROVOKING_VTX_LAST" pos="1" type="boolean"/>
+               <bitfield name="TESS_UPPER_LEFT_DOMAIN_ORIGIN" pos="2" type="boolean"/>
+               <bitfield name="UNK3" pos="3" type="boolean"/>
+       </reg32>
+
+       <bitset name="a6xx_xs_out_cntl" inline="yes">
+               <doc>
+                       num of varyings plus four for gl_Position (plus one if gl_PointSize)
+                       plus # of transform-feedback (streamout) varyings if using the
+                       hw streamout (rather than stg instructions in shader)
+               </doc>
+               <bitfield name="STRIDE_IN_VPC" low="0" high="7" type="uint"/>
+               <bitfield name="PSIZE" pos="8" type="boolean"/>
+               <bitfield name="LAYER" pos="9" type="boolean"/>
+               <bitfield name="VIEW" pos="10" type="boolean"/>
+               <!-- note: PC_VS_OUT_CNTL doesn't have the PRIMITIVE_ID bit -->
+               <bitfield name="PRIMITIVE_ID" pos="11" type="boolean"/>
+               <bitfield name="CLIP_MASK" low="16" high="23" type="uint"/>
+       </bitset>
+
+       <reg32 offset="0x9b01" name="PC_VS_OUT_CNTL" type="a6xx_xs_out_cntl"/>
+       <reg32 offset="0x9b02" name="PC_GS_OUT_CNTL" type="a6xx_xs_out_cntl"/>
+       <reg32 offset="0x9b03" name="PC_PRIMITIVE_CNTL_3" pos="11"/>
+       <reg32 offset="0x9b04" name="PC_DS_OUT_CNTL" type="a6xx_xs_out_cntl"/>
+
+       <reg32 offset="0x9b05" name="PC_PRIMITIVE_CNTL_5">
+               <doc>
+                 geometry shader
+               </doc>
+               <!-- TODO: first 16 bits are valid so something is wrong or missing here -->
+               <bitfield name="GS_VERTICES_OUT" low="0" high="7" type="uint"/>
+               <bitfield name="GS_INVOCATIONS" low="10" high="14" type="uint"/>
+               <bitfield name="GS_OUTPUT" low="16" high="17" type="a6xx_tess_output"/>
+               <bitfield name="UNK18" pos="18"/>
+       </reg32>
+
+       <reg32 offset="0x9b06" name="PC_PRIMITIVE_CNTL_6">
+               <doc>
+                 size in vec4s of per-primitive storage for gs. TODO: not actually in VPC
+               </doc>
+               <bitfield name="STRIDE_IN_VPC" low="0" high="10" type="uint"/>
+       </reg32>
+       <!-- something gs related: -->
+       <reg32 offset="0x9b07" name="PC_UNKNOWN_9B07" low="0" high="6"/>
+
+       <reg32 offset="0x9b08" name="PC_UNKNOWN_9B08" low="0" high="15"/>
+       <!-- 0x9b09-0x9bff invalid -->
+       <reg32 offset="0x9c00" name="PC_2D_EVENT_CMD">
+               <!-- special register (but note first 8 bits can be written/read) -->
+               <bitfield name="EVENT" low="0" high="6" type="vgt_event_type"/>
+               <bitfield name="STATE_ID" low="8" high="15"/>
+       </reg32>
+       <!-- 0x9c01-0x9dff invalid -->
+       <!-- TODO: 0x9e00-0xa000 range incomplete -->
+       <reg32 offset="0x9e00" name="PC_DBG_ECO_CNTL"/>
+       <reg32 offset="0x9e01" name="PC_ADDR_MODE_CNTL" type="a5xx_address_mode"/>
+       <reg32 offset="0x9e08" name="PC_TESSFACTOR_ADDR_LO"/>
+       <reg32 offset="0x9e09" name="PC_TESSFACTOR_ADDR_HI"/>
+       <reg32 offset="0x9e08" name="PC_TESSFACTOR_ADDR" type="waddress" align="32"/>
+
+       <!-- These match the contents of CP_SET_BIN_DATA (not written directly) -->
+       <reg32 offset="0x9e11" name="PC_VSTREAM_CONTROL">
+               <bitfield name="UNK0" low="0" high="15"/>
+               <bitfield name="VSC_SIZE" low="16" high="21" type="uint"/>
+               <bitfield name="VSC_N" low="22" high="26" type="uint"/>
+       </reg32>
+       <reg64 offset="0x9e12" name="PC_BIN_PRIM_STRM" type="waddress" align="32"/>
+       <reg64 offset="0x9e14" name="PC_BIN_DRAW_STRM" type="waddress" align="32"/>
+
+       <reg32 offset="0x9e34" name="PC_PERFCTR_PC_SEL_0"/>
+       <reg32 offset="0x9e35" name="PC_PERFCTR_PC_SEL_1"/>
+       <reg32 offset="0x9e36" name="PC_PERFCTR_PC_SEL_2"/>
+       <reg32 offset="0x9e37" name="PC_PERFCTR_PC_SEL_3"/>
+       <reg32 offset="0x9e38" name="PC_PERFCTR_PC_SEL_4"/>
+       <reg32 offset="0x9e39" name="PC_PERFCTR_PC_SEL_5"/>
+       <reg32 offset="0x9e3a" name="PC_PERFCTR_PC_SEL_6"/>
+       <reg32 offset="0x9e3b" name="PC_PERFCTR_PC_SEL_7"/>
+
+       <!-- always 0x0 -->
+       <reg32 offset="0x9e72" name="PC_UNKNOWN_9E72"/>
+
+       <reg32 offset="0xa000" name="VFD_CONTROL_0">
+               <bitfield name="FETCH_CNT" low="0" high="5" type="uint"/>
+               <bitfield name="DECODE_CNT" low="8" high="13" type="uint"/>
+       </reg32>
+       <reg32 offset="0xa001" name="VFD_CONTROL_1">
+               <bitfield name="REGID4VTX" low="0" high="7" type="a3xx_regid"/>
+               <bitfield name="REGID4INST" low="8" high="15" type="a3xx_regid"/>
+               <bitfield name="REGID4PRIMID" low="16" high="23" type="a3xx_regid"/>
+       </reg32>
+       <reg32 offset="0xa002" name="VFD_CONTROL_2">
+               <bitfield name="REGID_HSPATCHID" low="0" high="7" type="a3xx_regid"/>
+               <bitfield name="REGID_INVOCATIONID" low="8" high="15" type="a3xx_regid"/>
+       </reg32>
+       <reg32 offset="0xa003" name="VFD_CONTROL_3">
+               <bitfield name="REGID_DSPATCHID" low="8" high="15" type="a3xx_regid"/>
+               <bitfield name="REGID_TESSX" low="16" high="23" type="a3xx_regid"/>
+               <bitfield name="REGID_TESSY" low="24" high="31" type="a3xx_regid"/>
+       </reg32>
+       <reg32 offset="0xa004" name="VFD_CONTROL_4">
+       </reg32>
+       <reg32 offset="0xa005" name="VFD_CONTROL_5">
+               <bitfield name="REGID_GSHEADER" low="0" high="7" type="a3xx_regid"/>
+       </reg32>
+       <reg32 offset="0xa006" name="VFD_CONTROL_6">
+               <!--
+                       True if gl_PrimitiveID is read via the FS and there is
+                       no matching write from the GS, and therefore it needs to
+                       be passed through via fixed-function logic.
+               -->
+               <bitfield name="PRIMID_PASSTHRU" pos="0" type="boolean"/>
+       </reg32>
+
+       <reg32 offset="0xa007" name="VFD_MODE_CNTL">
+               <bitfield name="BINNING_PASS" pos="0" type="boolean"/>
+       </reg32>
+
+       <!-- always 0x0 ? -->
+       <reg32 offset="0xa008" name="VFD_UNKNOWN_A008"/>
+       <reg32 offset="0xa009" name="VFD_ADD_OFFSET">
+               <!-- add VFD_INDEX_OFFSET to REGID4VTX -->
+               <bitfield name="VERTEX" pos="0" type="boolean"/>
+               <!-- add VFD_INSTANCE_START_OFFSET to REGID4INST -->
+               <bitfield name="INSTANCE" pos="1" type="boolean"/>
+       </reg32>
+
+       <reg32 offset="0xa00e" name="VFD_INDEX_OFFSET"/>
+       <reg32 offset="0xa00f" name="VFD_INSTANCE_START_OFFSET"/>
+       <array offset="0xa010" name="VFD_FETCH" stride="4" length="32">
+               <reg64 offset="0x0" name="BASE" type="address"/>
+               <reg32 offset="0x0" name="BASE_LO"/>
+               <reg32 offset="0x1" name="BASE_HI"/>
+               <reg32 offset="0x2" name="SIZE" type="uint"/>
+               <reg32 offset="0x3" name="STRIDE" type="uint"/>
+       </array>
+       <array offset="0xa090" name="VFD_DECODE" stride="2" length="32">
+               <reg32 offset="0x0" name="INSTR">
+                       <!-- IDX and byte OFFSET into VFD_FETCH -->
+                       <bitfield name="IDX" low="0" high="4" type="uint"/>
+                       <bitfield name="OFFSET" low="5" high="16"/>
+                       <bitfield name="INSTANCED" pos="17" type="boolean"/>
+                       <bitfield name="FORMAT" low="20" high="27" type="a6xx_format"/>
+                       <bitfield name="SWAP" low="28" high="29" type="a3xx_color_swap"/>
+                       <bitfield name="UNK30" pos="30" type="boolean"/>
+                       <bitfield name="FLOAT" pos="31" type="boolean"/>
+               </reg32>
+               <reg32 offset="0x1" name="STEP_RATE"/>
+       </array>
+       <array offset="0xa0d0" name="VFD_DEST_CNTL" stride="1" length="32">
+               <reg32 offset="0x0" name="INSTR">
+                       <bitfield name="WRITEMASK" low="0" high="3" type="hex"/>
+                       <bitfield name="REGID" low="4" high="11" type="a3xx_regid"/>
+               </reg32>
+       </array>
+
+       <!-- always 0x1 ? -->
+       <reg32 offset="0xa0f8" name="SP_UNKNOWN_A0F8"/>
+
+       <bitset name="a6xx_sp_xs_ctrl_reg0" inline="yes">
+               <!--
+               When b31 set we just see FULLREGFOOTPRINT set.  The pattern of
+               used registers is a bit odd too:
+                       - used (half): 0-15 68-179 (cnt=128, max=179)
+                       - used (full): 0-33 50-69 71 73 75 77 79 81 83 85 87 89-105 107 109 111 113 115 117 119 121 123 125 127>
+               whereas we usually see a (mostly) contiguous range of regs used.  But if
+               I merge the full and half ranges (ie. rN counts as hr(N*2) and hr(N*2+1)),
+               then:
+                       - used (merged): 0-191 (cnt=192, max=191)
+               So I think if b31 is set, then the half precision registers overlap
+               the full precision registers.  (Which seems like a pretty sensible
+               feature, actually I'm not sure when you *wouldn't* want to use that,
+               since it gives register allocation more flexibility)
+                -->
+               <bitfield name="HALFREGFOOTPRINT" low="1" high="6" type="uint"/>
+               <bitfield name="FULLREGFOOTPRINT" low="7" high="12" type="uint"/>
+               <!-- seems to be nesting level for flow control:.. -->
+               <bitfield name="BRANCHSTACK" low="14" high="19" type="uint"/>
+               <bitfield name="THREADSIZE" pos="20" type="a3xx_threadsize"/>
+               <bitfield name="VARYING" pos="22" type="boolean"/>
+               <!-- set when dFdxFine/dFdyFine is used -->
+               <bitfield name="DIFF_FINE" pos="23" type="boolean"/>
+               <bitfield name="PIXLODENABLE" pos="26" type="boolean"/>
+               <bitfield name="MERGEDREGS" pos="31" type="boolean"/>
+       </bitset>
+
+       <bitset name="a6xx_sp_xs_config" inline="yes">
+               <!--
+               Each of these are set if the given resource type is used
+               with the Vulkan/bindless binding model.
+               -->
+               <bitfield name="BINDLESS_TEX" pos="0" type="boolean"/>
+               <bitfield name="BINDLESS_SAMP" pos="1" type="boolean"/>
+               <bitfield name="BINDLESS_IBO" pos="2" type="boolean"/>
+               <bitfield name="BINDLESS_UBO" pos="3" type="boolean"/>
+
+               <bitfield name="ENABLED" pos="8" type="boolean"/>
+               <!--
+               number of textures and samplers.. these might be swapped, with GL I
+               always see the same value for both.
+                -->
+               <bitfield name="NTEX" low="9" high="16" type="uint"/>
+               <bitfield name="NSAMP" low="17" high="21" type="uint"/>
+               <bitfield name="NIBO" low="22" high="29" type="uint"/>
+       </bitset>
+
+       <reg32 offset="0xa800" name="SP_VS_CTRL_REG0" type="a6xx_sp_xs_ctrl_reg0"/>
+       <reg32 offset="0xa801" name="SP_VS_BRANCH_COND" type="hex">
+               <!--
+               bitmask of true/false conditions for VS brac.N instructions,
+               bit N corresponds to brac.N
+                -->
+       </reg32>
+       <reg32 offset="0xa802" name="SP_VS_PRIMITIVE_CNTL">
+               <!-- # of VS outputs including pos/psize -->
+               <bitfield name="OUT" low="0" high="5" type="uint"/>
+       </reg32>
+       <array offset="0xa803" name="SP_VS_OUT" stride="1" length="16">
+               <reg32 offset="0x0" name="REG">
+                       <bitfield name="A_REGID" low="0" high="7" type="a3xx_regid"/>
+                       <bitfield name="A_COMPMASK" low="8" high="11" type="hex"/>
+                       <bitfield name="B_REGID" low="16" high="23" type="a3xx_regid"/>
+                       <bitfield name="B_COMPMASK" low="24" high="27" type="hex"/>
+               </reg32>
+       </array>
+       <!--
+       Starting with a5xx, position/psize outputs from shader end up in the
+       SP_VS_OUT map, with highest OUTLOCn position.  (Generally they are
+       the last entries too, except when gl_PointCoord is used, blob inserts
+       an extra varying after, but with a lower OUTLOC position.  If present,
+       psize is last, preceded by position.
+        -->
+       <array offset="0xa813" name="SP_VS_VPC_DST" stride="1" length="8">
+               <reg32 offset="0x0" name="REG">
+                       <bitfield name="OUTLOC0" low="0" high="7" type="uint"/>
+                       <bitfield name="OUTLOC1" low="8" high="15" type="uint"/>
+                       <bitfield name="OUTLOC2" low="16" high="23" type="uint"/>
+                       <bitfield name="OUTLOC3" low="24" high="31" type="uint"/>
+               </reg32>
+       </array>
+
+       <reg32 offset="0xa81b" name="SP_UNKNOWN_A81B"/>
+       <reg32 offset="0xa81c" name="SP_VS_OBJ_START_LO"/>
+       <reg32 offset="0xa81d" name="SP_VS_OBJ_START_HI"/>
+       <reg32 offset="0xa822" name="SP_VS_TEX_COUNT" type="uint"/>
+       <reg32 offset="0xa823" name="SP_VS_CONFIG" type="a6xx_sp_xs_config"/>
+       <reg32 offset="0xa824" name="SP_VS_INSTRLEN" type="uint"/>
+
+       <reg32 offset="0xa830" name="SP_HS_CTRL_REG0" type="a6xx_sp_xs_ctrl_reg0"/>
+       <reg32 offset="0xa831" name="SP_HS_UNKNOWN_A831"/>
+       <reg32 offset="0xa833" name="SP_HS_UNKNOWN_A833"/>
+       <reg32 offset="0xa834" name="SP_HS_OBJ_START_LO"/>
+       <reg32 offset="0xa835" name="SP_HS_OBJ_START_HI"/>
+       <reg32 offset="0xa83a" name="SP_HS_TEX_COUNT" type="uint"/>
+       <reg32 offset="0xa83b" name="SP_HS_CONFIG" type="a6xx_sp_xs_config"/>
+       <reg32 offset="0xa83c" name="SP_HS_INSTRLEN" type="uint"/>
+
+       <reg32 offset="0xa840" name="SP_DS_CTRL_REG0" type="a6xx_sp_xs_ctrl_reg0"/>
+       <reg32 offset="0xa842" name="SP_DS_PRIMITIVE_CNTL">
+               <!-- # of DS outputs including pos/psize -->
+               <bitfield name="OUT" low="0" high="5" type="uint"/>
+       </reg32>
+       <array offset="0xa843" name="SP_DS_OUT" stride="1" length="16">
+               <reg32 offset="0x0" name="REG">
+                       <bitfield name="A_REGID" low="0" high="7" type="a3xx_regid"/>
+                       <bitfield name="A_COMPMASK" low="8" high="11" type="hex"/>
+                       <bitfield name="B_REGID" low="16" high="23" type="a3xx_regid"/>
+                       <bitfield name="B_COMPMASK" low="24" high="27" type="hex"/>
+               </reg32>
+       </array>
+       <array offset="0xa853" name="SP_DS_VPC_DST" stride="1" length="8">
+               <reg32 offset="0x0" name="REG">
+                       <bitfield name="OUTLOC0" low="0" high="7" type="uint"/>
+                       <bitfield name="OUTLOC1" low="8" high="15" type="uint"/>
+                       <bitfield name="OUTLOC2" low="16" high="23" type="uint"/>
+                       <bitfield name="OUTLOC3" low="24" high="31" type="uint"/>
+               </reg32>
+       </array>
+
+       <reg32 offset="0xa85b" name="SP_DS_UNKNOWN_A85B"/>
+       <reg32 offset="0xa85c" name="SP_DS_OBJ_START_LO"/>
+       <reg32 offset="0xa85d" name="SP_DS_OBJ_START_HI"/>
+       <reg32 offset="0xa862" name="SP_DS_TEX_COUNT" type="uint"/>
+       <reg32 offset="0xa863" name="SP_DS_CONFIG" type="a6xx_sp_xs_config"/>
+       <reg32 offset="0xa864" name="SP_DS_INSTRLEN" type="uint"/>
+
+       <reg32 offset="0xa870" name="SP_GS_CTRL_REG0" type="a6xx_sp_xs_ctrl_reg0"/>
+       <reg32 offset="0xa871" name="SP_GS_PRIM_SIZE">
+               <!-- size of output of previous stage -->
+       </reg32>
+       <reg32 offset="0xa872" name="SP_GS_BRANCH_COND" type="hex">
+               <!--
+               bitmask of true/false conditions for FS brac.N instructions,
+               bit N corresponds to brac.N
+                -->
+       </reg32>
+
+       <reg32 offset="0xa873" name="SP_GS_PRIMITIVE_CNTL">
+               <!-- # of VS outputs including pos/psize -->
+               <bitfield name="OUT" low="0" high="5" type="uint"/>
+               <bitfield name="FLAGS_REGID" low="6" high="13" type="a3xx_regid"/>
+       </reg32>
+
+       <array offset="0xa874" name="SP_GS_OUT" stride="1" length="16">
+               <reg32 offset="0x0" name="REG">
+                       <bitfield name="A_REGID" low="0" high="7" type="a3xx_regid"/>
+                       <bitfield name="A_COMPMASK" low="8" high="11" type="hex"/>
+                       <bitfield name="B_REGID" low="16" high="23" type="a3xx_regid"/>
+                       <bitfield name="B_COMPMASK" low="24" high="27" type="hex"/>
+               </reg32>
+       </array>
+
+       <array offset="0xa884" name="SP_GS_VPC_DST" stride="1" length="8">
+               <reg32 offset="0x0" name="REG">
+                       <bitfield name="OUTLOC0" low="0" high="7" type="uint"/>
+                       <bitfield name="OUTLOC1" low="8" high="15" type="uint"/>
+                       <bitfield name="OUTLOC2" low="16" high="23" type="uint"/>
+                       <bitfield name="OUTLOC3" low="24" high="31" type="uint"/>
+               </reg32>
+       </array>
+
+       <reg32 offset="0xa88d" name="SP_GS_OBJ_START_LO"/>
+       <reg32 offset="0xa88e" name="SP_GS_OBJ_START_HI"/>
+       <reg32 offset="0xa893" name="SP_GS_TEX_COUNT" type="uint"/>
+       <reg32 offset="0xa894" name="SP_GS_CONFIG" type="a6xx_sp_xs_config"/>
+       <reg32 offset="0xa895" name="SP_GS_INSTRLEN" type="uint"/>
+
+       <reg32 offset="0xa8a0" name="SP_VS_TEX_SAMP_LO"/>
+       <reg32 offset="0xa8a1" name="SP_VS_TEX_SAMP_HI"/>
+       <reg32 offset="0xa8a2" name="SP_HS_TEX_SAMP_LO"/>
+       <reg32 offset="0xa8a3" name="SP_HS_TEX_SAMP_HI"/>
+       <reg32 offset="0xa8a4" name="SP_DS_TEX_SAMP_LO"/>
+       <reg32 offset="0xa8a5" name="SP_DS_TEX_SAMP_HI"/>
+       <reg32 offset="0xa8a6" name="SP_GS_TEX_SAMP_LO"/>
+       <reg32 offset="0xa8a7" name="SP_GS_TEX_SAMP_HI"/>
+       <reg32 offset="0xa8a8" name="SP_VS_TEX_CONST_LO"/>
+       <reg32 offset="0xa8a9" name="SP_VS_TEX_CONST_HI"/>
+       <reg32 offset="0xa8aa" name="SP_HS_TEX_CONST_LO"/>
+       <reg32 offset="0xa8ab" name="SP_HS_TEX_CONST_HI"/>
+       <reg32 offset="0xa8ac" name="SP_DS_TEX_CONST_LO"/>
+       <reg32 offset="0xa8ad" name="SP_DS_TEX_CONST_HI"/>
+       <reg32 offset="0xa8ae" name="SP_GS_TEX_CONST_LO"/>
+       <reg32 offset="0xa8af" name="SP_GS_TEX_CONST_HI"/>
+
+       <reg32 offset="0xa980" name="SP_FS_CTRL_REG0" type="a6xx_sp_xs_ctrl_reg0"/>
+       <reg32 offset="0xa981" name="SP_FS_BRANCH_COND" type="hex">
+               <!--
+               bitmask of true/false conditions for FS brac.N instructions,
+               bit N corresponds to brac.N
+                -->
+       </reg32>
+       <reg32 offset="0xa982" name="SP_UNKNOWN_A982"/>
+       <reg32 offset="0xa983" name="SP_FS_OBJ_START_LO"/>
+       <reg32 offset="0xa984" name="SP_FS_OBJ_START_HI"/>
+
+       <reg32 offset="0xa989" name="SP_BLEND_CNTL">
+               <bitfield name="ENABLED" pos="0" type="boolean"/>
+               <bitfield name="UNK8" pos="8" type="boolean"/>
+               <bitfield name="DUAL_COLOR_IN_ENABLE" pos="9" type="boolean"/>
+               <bitfield name="ALPHA_TO_COVERAGE" pos="10" type="boolean"/>
+       </reg32>
+       <reg32 offset="0xa98a" name="SP_SRGB_CNTL">
+               <!-- Same as RB_SRGB_CNTL -->
+               <bitfield name="SRGB_MRT0" pos="0" type="boolean"/>
+               <bitfield name="SRGB_MRT1" pos="1" type="boolean"/>
+               <bitfield name="SRGB_MRT2" pos="2" type="boolean"/>
+               <bitfield name="SRGB_MRT3" pos="3" type="boolean"/>
+               <bitfield name="SRGB_MRT4" pos="4" type="boolean"/>
+               <bitfield name="SRGB_MRT5" pos="5" type="boolean"/>
+               <bitfield name="SRGB_MRT6" pos="6" type="boolean"/>
+               <bitfield name="SRGB_MRT7" pos="7" type="boolean"/>
+       </reg32>
+       <reg32 offset="0xa98b" name="SP_FS_RENDER_COMPONENTS">
+               <bitfield name="RT0" low="0" high="3"/>
+               <bitfield name="RT1" low="4" high="7"/>
+               <bitfield name="RT2" low="8" high="11"/>
+               <bitfield name="RT3" low="12" high="15"/>
+               <bitfield name="RT4" low="16" high="19"/>
+               <bitfield name="RT5" low="20" high="23"/>
+               <bitfield name="RT6" low="24" high="27"/>
+               <bitfield name="RT7" low="28" high="31"/>
+       </reg32>
+       <reg32 offset="0xa98c" name="SP_FS_OUTPUT_CNTL0">
+               <bitfield name="DUAL_COLOR_IN_ENABLE" pos="0" type="boolean"/>
+               <bitfield name="DEPTH_REGID" low="8" high="15" type="a3xx_regid"/>
+               <bitfield name="SAMPMASK_REGID" low="16" high="23" type="a3xx_regid"/>
+               <bitfield name="STENCILREF_REGID" low="24" high="31" type="a3xx_regid"/>
+       </reg32>
+       <reg32 offset="0xa98d" name="SP_FS_OUTPUT_CNTL1">
+               <bitfield name="MRT" low="0" high="3" type="uint"/>
+       </reg32>
+
+       <array offset="0xa996" name="SP_FS_MRT" stride="1" length="8">
+               <reg32 offset="0" name="REG">
+                       <bitfield name="COLOR_FORMAT" low="0" high="7" type="a6xx_format"/>
+                       <bitfield name="COLOR_SINT" pos="8" type="boolean"/>
+                       <bitfield name="COLOR_UINT" pos="9" type="boolean"/>
+               </reg32>
+       </array>
+
+       <reg32 offset="0xa99e" name="SP_FS_PREFETCH_CNTL">
+               <!-- unknown bits 0x7fc0 always set -->
+               <bitfield name="COUNT" low="0" high="2" type="uint"/>
+               <!-- b3 set if no other use of varyings in the shader itself.. maybe alternative to dummy bary.f? -->
+               <bitfield name="UNK3" pos="3" type="boolean"/>
+               <bitfield name="UNK4" low="4" high="11" type="a3xx_regid"/>
+       </reg32>
+       <array offset="0xa99f" name="SP_FS_PREFETCH" stride="1" length="4">
+               <reg32 offset="0" name="CMD">
+                       <bitfield name="SRC" low="0" high="6" type="uint"/>
+                       <bitfield name="SAMP_ID" low="7" high="10" type="uint"/>
+                       <bitfield name="TEX_ID" low="11" high="15" type="uint"/>
+                       <bitfield name="DST" low="16" high="21" type="a3xx_regid"/>
+                       <bitfield name="WRMASK" low="22" high="25" type="hex"/>
+                       <bitfield name="HALF" pos="26" type="boolean"/>
+                       <!--
+                       CMD seems always 0x4??  3d, textureProj, textureLod seem to
+                       skip pre-fetch.. TODO test texelFetch
+                        CMD is 0x6 when the Vulkan mode is enabled, and
+                        TEX_ID/SAMP_ID refer to the descriptor sets while the
+                        indices come from SP_FS_BINDLESS_PREFETCH[n]
+                        -->
+                       <bitfield name="CMD" low="27" high="31"/>
+               </reg32>
+       </array>
+
+       <!-- TODO confirm that this is actually an array -->
+       <array offset="0xa9a3" name="SP_FS_BINDLESS_PREFETCH" stride="1" length="4">
+               <reg32 offset="0" name="CMD">
+                       <bitfield name="SAMP_ID" low="0" high="7" type="uint"/>
+                       <bitfield name="TEX_ID" low="16" high="23" type="uint"/>
+               </reg32>
+       </array>
+
+       <reg32 offset="0xa9a7" name="SP_FS_TEX_COUNT" type="uint"/>
+
+       <!-- always 0x0 ? -->
+       <reg32 offset="0xa9a8" name="SP_UNKNOWN_A9A8"/>
+
+       <!-- set for compute shaders, always 0x41 -->
+       <reg32 offset="0xa9b1" name="SP_CS_UNKNOWN_A9B1" type="uint">
+               <doc>
+                       bit 0 seems to toggle between 2k and 32k of shared storage
+                       the ldl/stl offset seems to be rewritten to 0 when it is beyond
+                       this limit. This is different from ldlw/stlw, which wraps at
+                       64k (and has 36k of storage on A640 - reads between 36k-64k
+                       always return 0)
+               </doc>
+               <bitfield name="SHARED_SIZE_2K" pos="0" type="uint"/>
+       </reg32>
+
+       <!-- set for compute shaders, always 0x0 -->
+       <reg32 offset="0xa9b3" name="SP_CS_UNKNOWN_A9B3" type="uint"/>
+
+       <reg32 offset="0xa9ba" name="SP_CS_TEX_COUNT" type="uint"/>
+
+       <reg32 offset="0xa9e0" name="SP_FS_TEX_SAMP_LO"/>
+       <reg32 offset="0xa9e1" name="SP_FS_TEX_SAMP_HI"/>
+       <reg32 offset="0xa9e2" name="SP_CS_TEX_SAMP_LO"/>
+       <reg32 offset="0xa9e3" name="SP_CS_TEX_SAMP_HI"/>
+       <reg32 offset="0xa9e4" name="SP_FS_TEX_CONST_LO"/>
+       <reg32 offset="0xa9e5" name="SP_FS_TEX_CONST_HI"/>
+       <reg32 offset="0xa9e6" name="SP_CS_TEX_CONST_LO"/>
+       <reg32 offset="0xa9e7" name="SP_CS_TEX_CONST_HI"/>
+
+       <array offset="0xa9e8" name="SP_CS_BINDLESS_BASE" stride="2" length="5">
+               <reg64 offset="0" name="ADDR" type="waddress"/>
+       </array>
+
+       <array offset="0xa98e" name="SP_FS_OUTPUT" stride="1" length="8">
+               <doc>per MRT</doc>
+               <reg32 offset="0x0" name="REG">
+                       <bitfield name="REGID" low="0" high="7" type="a3xx_regid"/>
+                       <bitfield name="HALF_PRECISION" pos="8" type="boolean"/>
+               </reg32>
+       </array>
+
+       <reg32 offset="0xa9b0" name="SP_CS_CTRL_REG0" type="a6xx_sp_xs_ctrl_reg0"/>
+       <reg32 offset="0xa9b4" name="SP_CS_OBJ_START_LO"/>
+       <reg32 offset="0xa9b5" name="SP_CS_OBJ_START_HI"/>
+       <reg32 offset="0xa9bb" name="SP_CS_CONFIG" type="a6xx_sp_xs_config"/>
+       <reg32 offset="0xa9bc" name="SP_CS_INSTRLEN" type="uint"/>
+
+       <!--
+       IBO state for compute shader:
+        -->
+       <reg32 offset="0xa9f2" name="SP_CS_IBO_LO"/>
+       <reg32 offset="0xa9f3" name="SP_CS_IBO_HI"/>
+       <reg32 offset="0xaa00" name="SP_CS_IBO_COUNT" type="uint"/>
+
+       <!-- always 0x5 ? -->
+       <reg32 offset="0xab00" name="SP_UNKNOWN_AB00"/>
+
+       <reg32 offset="0xab04" name="SP_FS_CONFIG" type="a6xx_sp_xs_config"/>
+       <reg32 offset="0xab05" name="SP_FS_INSTRLEN" type="uint"/>
+
+       <array offset="0xab10" name="SP_BINDLESS_BASE" stride="2" length="5">
+               <reg64 offset="0" name="ADDR" type="waddress"/>
+       </array>
+
+       <!--
+       Combined IBO state for 3d pipe, used for Image and SSBO write/atomic
+       instructions VS/HS/DS/GS/FS.  See SP_CS_IBO_* for compute shaders.
+        -->
+       <reg32 offset="0xab1a" name="SP_IBO_LO"/>
+       <reg32 offset="0xab1b" name="SP_IBO_HI"/>
+       <reg32 offset="0xab20" name="SP_IBO_COUNT" type="uint"/>
+
+       <reg32 offset="0xacc0" name="SP_2D_DST_FORMAT">
+               <bitfield name="NORM" pos="0" type="boolean"/>
+               <bitfield name="SINT" pos="1" type="boolean"/>
+               <bitfield name="UINT" pos="2" type="boolean"/>
+               <!-- looks like HW only cares about the base type of this format,
+                    which matches the ifmt? -->
+               <bitfield name="COLOR_FORMAT" low="3" high="10" type="a6xx_format"/>
+               <!-- set when ifmt is R2D_UNORM8_SRGB -->
+               <bitfield name="SRGB" pos="11" type="boolean"/>
+               <!-- some sort of channel mask, not sure what it is for -->
+               <bitfield name="MASK" low="12" high="15"/>
+       </reg32>
+
+       <!-- always 0x0 -->
+       <reg32 offset="0xae00" name="SP_UNKNOWN_AE00"/>
+
+       <reg32 offset="0xae03" name="SP_UNKNOWN_AE03"/>
+       <reg32 offset="0xae04" name="SP_UNKNOWN_AE04"/>
+
+       <!-- always 0x3f ? -->
+       <reg32 offset="0xae0f" name="SP_UNKNOWN_AE0F"/>
+
+       <!--
+       The downstream kernel calls the debug cluster of registers
+       "a6xx_sp_ps_tp_cluster" but this actually specifies the border
+       color base for compute shaders.
+       -->
+       <reg64 offset="0xb180" name="SP_PS_TP_BORDER_COLOR_BASE_ADDR" type="address"/>
+       <!-- always 0x0 ? -->
+       <reg32 offset="0xb182" name="SP_UNKNOWN_B182"/>
+       <reg32 offset="0xb183" name="SP_UNKNOWN_B183"/>
+
+       <!-- could be all the stuff below here is actually TPL1?? -->
+
+       <reg32 offset="0xb300" name="SP_TP_RAS_MSAA_CNTL">
+               <bitfield name="SAMPLES" low="0" high="1" type="a3xx_msaa_samples"/>
+       </reg32>
+       <reg32 offset="0xb301" name="SP_TP_DEST_MSAA_CNTL">
+               <bitfield name="SAMPLES" low="0" high="1" type="a3xx_msaa_samples"/>
+               <bitfield name="MSAA_DISABLE" pos="2" type="boolean"/>
+       </reg32>
+
+       <!-- looks to work in the same way as a5xx: -->
+       <reg64 offset="0xb302" name="SP_TP_BORDER_COLOR_BASE_ADDR" type="address"/>
+       <reg32 offset="0xb302" name="SP_TP_BORDER_COLOR_BASE_ADDR_LO"/>
+       <reg32 offset="0xb303" name="SP_TP_BORDER_COLOR_BASE_ADDR_HI"/>
+       <reg32 offset="0xb304" name="SP_TP_SAMPLE_CONFIG" type="a6xx_sample_config"/>
+       <reg32 offset="0xb305" name="SP_TP_SAMPLE_LOCATION_0" type="a6xx_sample_locations"/>
+       <reg32 offset="0xb306" name="SP_TP_SAMPLE_LOCATION_1" type="a6xx_sample_locations"/>
+
+       <reg32 offset="0xb309" name="SP_TP_UNKNOWN_B309"/>
+
+       <!--
+       Equiv to corresponding RB_2D_SRC_* regs on a5xx.. which were either
+       badly named or the functionality moved in a6xx.  But downstream kernel
+       calls this "a6xx_sp_ps_tp_2d_cluster"
+        -->
+       <reg32 offset="0xb4c0" name="SP_PS_2D_SRC_INFO" type="a6xx_2d_surf_info"/>
+       <reg32 offset="0xb4c1" name="SP_PS_2D_SRC_SIZE">
+               <bitfield name="WIDTH" low="0" high="14" type="uint"/>
+               <bitfield name="HEIGHT" low="15" high="29" type="uint"/>
+       </reg32>
+       <reg32 offset="0xb4c2" name="SP_PS_2D_SRC_LO"/>
+       <reg32 offset="0xb4c3" name="SP_PS_2D_SRC_HI"/>
+       <reg64 offset="0xb4c2" name="SP_PS_2D_SRC" type="waddress"/>
+       <reg32 offset="0xb4c4" name="SP_PS_2D_SRC_PITCH">
+          <bitfield name="PITCH" low="9" high="24" shr="6" type="uint"/>
+       </reg32>
+
+       <reg32 offset="0xb4ca" name="SP_PS_2D_SRC_FLAGS_LO"/>
+       <reg32 offset="0xb4cb" name="SP_PS_2D_SRC_FLAGS_HI"/>
+       <reg64 offset="0xb4ca" name="SP_PS_2D_SRC_FLAGS" type="waddress"/>
+       <reg32 offset="0xb4cc" name="SP_PS_2D_SRC_FLAGS_PITCH">
+               <bitfield name="PITCH" low="0" high="10" shr="6" type="uint"/>
+               <bitfield name="ARRAY_PITCH" low="11" high="21" shr="7" type="uint"/>
+       </reg32>
+
+       <!-- always 0x00100000 ? -->
+       <reg32 offset="0xb600" name="SP_UNKNOWN_B600"/>
+
+       <!-- always 0x44 ? -->
+       <reg32 offset="0xb605" name="SP_UNKNOWN_B605"/>
+
+       <bitset name="a6xx_hlsq_xs_cntl" inline="yes">
+               <bitfield name="CONSTLEN" low="0" high="7" shr="2" type="uint"/>
+               <bitfield name="ENABLED" pos="8" type="boolean"/>
+       </bitset>
+
+       <reg32 offset="0xb800" name="HLSQ_VS_CNTL" type="a6xx_hlsq_xs_cntl"/>
+       <reg32 offset="0xb801" name="HLSQ_HS_CNTL" type="a6xx_hlsq_xs_cntl"/>
+       <reg32 offset="0xb802" name="HLSQ_DS_CNTL" type="a6xx_hlsq_xs_cntl"/>
+       <reg32 offset="0xb803" name="HLSQ_GS_CNTL" type="a6xx_hlsq_xs_cntl"/>
+
+       <reg32 offset="0xb820" name="HLSQ_LOAD_STATE_GEOM_CMD"/>
+       <reg64 offset="0xb821" name="HLSQ_LOAD_STATE_GEOM_EXT_SRC_ADDR"/>
+       <reg32 offset="0xb823" name="HLSQ_LOAD_STATE_GEOM_DATA"/>
+
+       <reg32 offset="0xb980" name="HLSQ_UNKNOWN_B980"/>
+
+       <reg32 offset="0xb982" name="HLSQ_CONTROL_1_REG">
+               <!-- always 0x7 ? -->
+       </reg32>
+       <reg32 offset="0xb983" name="HLSQ_CONTROL_2_REG">
+               <bitfield name="FACEREGID" low="0" high="7" type="a3xx_regid"/>
+               <!-- SAMPLEID is loaded into a half-precision register: -->
+               <bitfield name="SAMPLEID" low="8" high="15" type="a3xx_regid"/>
+               <bitfield name="SAMPLEMASK" low="16" high="23" type="a3xx_regid"/>
+               <!--
+               SIZE is the "size" of the primitive, ie. what the i/j coords need
+               to be divided by to scale to a single fragment.  It is probably
+               the longer of the two lines that form the tri (ie v0v1 and v0v2)?
+                -->
+               <bitfield name="SIZE" low="24" high="31" type="a3xx_regid"/>
+       </reg32>
+       <reg32 offset="0xb984" name="HLSQ_CONTROL_3_REG">
+               <!-- register loaded with position (bary.f) -->
+               <bitfield name="IJ_PERSP_PIXEL" low="0" high="7" type="a3xx_regid"/>
+               <bitfield name="IJ_LINEAR_PIXEL" low="8" high="15" type="a3xx_regid"/>
+               <bitfield name="IJ_PERSP_CENTROID" low="16" high="23" type="a3xx_regid"/>
+               <bitfield name="IJ_LINEAR_CENTROID" low="24" high="31" type="a3xx_regid"/>
+       </reg32>
+       <reg32 offset="0xb985" name="HLSQ_CONTROL_4_REG">
+               <bitfield name="IJ_PERSP_SAMPLE" low="0" high="7" type="a3xx_regid"/>
+               <bitfield name="IJ_LINEAR_SAMPLE" low="8" high="15" type="a3xx_regid"/>
+               <bitfield name="XYCOORDREGID" low="16" high="23" type="a3xx_regid"/>
+               <bitfield name="ZWCOORDREGID" low="24" high="31" type="a3xx_regid"/>
+       </reg32>
+       <reg32 offset="0xb986" name="HLSQ_CONTROL_5_REG">
+               <!-- unknown regid in low 8b -->
+       </reg32>
+       <reg32 offset="0xb987" name="HLSQ_CS_CNTL" type="a6xx_hlsq_xs_cntl"/>
+
+       <reg32 offset="0xb990" name="HLSQ_CS_NDRANGE_0">
+               <bitfield name="KERNELDIM" low="0" high="1" type="uint"/>
+               <!-- localsize is value minus one: -->
+               <bitfield name="LOCALSIZEX" low="2" high="11" type="uint"/>
+               <bitfield name="LOCALSIZEY" low="12" high="21" type="uint"/>
+               <bitfield name="LOCALSIZEZ" low="22" high="31" type="uint"/>
+       </reg32>
+       <reg32 offset="0xb991" name="HLSQ_CS_NDRANGE_1">
+               <bitfield name="GLOBALSIZE_X" low="0" high="31" type="uint"/>
+       </reg32>
+       <reg32 offset="0xb992" name="HLSQ_CS_NDRANGE_2">
+               <bitfield name="GLOBALOFF_X" low="0" high="31" type="uint"/>
+       </reg32>
+       <reg32 offset="0xb993" name="HLSQ_CS_NDRANGE_3">
+               <bitfield name="GLOBALSIZE_Y" low="0" high="31" type="uint"/>
+       </reg32>
+       <reg32 offset="0xb994" name="HLSQ_CS_NDRANGE_4">
+               <bitfield name="GLOBALOFF_Y" low="0" high="31" type="uint"/>
+       </reg32>
+       <reg32 offset="0xb995" name="HLSQ_CS_NDRANGE_5">
+               <bitfield name="GLOBALSIZE_Z" low="0" high="31" type="uint"/>
+       </reg32>
+       <reg32 offset="0xb996" name="HLSQ_CS_NDRANGE_6">
+               <bitfield name="GLOBALOFF_Z" low="0" high="31" type="uint"/>
+       </reg32>
+       <reg32 offset="0xb997" name="HLSQ_CS_CNTL_0">
+               <bitfield name="WGIDCONSTID" low="0" high="7" type="a3xx_regid"/>
+               <bitfield name="UNK0" low="8" high="15" type="a3xx_regid"/>
+               <bitfield name="UNK1" low="16" high="23" type="a3xx_regid"/>
+               <bitfield name="LOCALIDREGID" low="24" high="31" type="a3xx_regid"/>
+       </reg32>
+       <reg32 offset="0xb998" name="HLSQ_CS_UNKNOWN_B998"/> <!-- always 0x2fc -->
+       <reg32 offset="0xb999" name="HLSQ_CS_KERNEL_GROUP_X"/>
+       <reg32 offset="0xb99a" name="HLSQ_CS_KERNEL_GROUP_Y"/>
+       <reg32 offset="0xb99b" name="HLSQ_CS_KERNEL_GROUP_Z"/>
+
+       <reg32 offset="0xb9a0" name="HLSQ_LOAD_STATE_FRAG_CMD"/>
+       <reg64 offset="0xb9a1" name="HLSQ_LOAD_STATE_FRAG_EXT_SRC_ADDR"/>
+       <reg32 offset="0xb9a3" name="HLSQ_LOAD_STATE_FRAG_DATA"/>
+
+       <!-- mirror of SP_CS_BINDLESS_BASE -->
+       <array offset="0xb9c0" name="HLSQ_CS_BINDLESS_BASE" stride="2" length="5">
+               <reg64 offset="0" name="ADDR" type="waddress"/>
+       </array>
+
+       <reg32 offset="0xbb00" name="HLSQ_DRAW_CMD">
+               <bitfield name="STATE_ID" low="0" high="7"/>
+       </reg32>
+
+       <reg32 offset="0xbb01" name="HLSQ_DISPATCH_CMD">
+               <bitfield name="STATE_ID" low="0" high="7"/>
+       </reg32>
+
+       <reg32 offset="0xbb02" name="HLSQ_EVENT_CMD">
+               <!-- I think only the low bit is actually used? -->
+               <bitfield name="STATE_ID" low="16" high="23"/>
+               <bitfield name="EVENT" low="0" high="6" type="vgt_event_type"/>
+       </reg32>
+
+       <reg32 offset="0xbb08" name="HLSQ_INVALIDATE_CMD">
+               <doc>
+                       This register clears pending loads queued up by
+                       CP_LOAD_STATE6. Each bit resets a particular kind(s) of
+                       CP_LOAD_STATE6.
+               </doc>
+
+               <!-- per-stage state: shader, non-bindless UBO, textures, and samplers -->
+               <bitfield name="VS_STATE" pos="0" type="boolean"/>
+               <bitfield name="HS_STATE" pos="1" type="boolean"/>
+               <bitfield name="DS_STATE" pos="2" type="boolean"/>
+               <bitfield name="GS_STATE" pos="3" type="boolean"/>
+               <bitfield name="FS_STATE" pos="4" type="boolean"/>
+               <bitfield name="CS_STATE" pos="5" type="boolean"/>
+
+               <bitfield name="CS_IBO" pos="6" type="boolean"/>
+               <bitfield name="GFX_IBO" pos="7" type="boolean"/>
+
+               <!-- Note: these only do something when HLSQ_SHARED_CONSTS is set to 1 -->
+               <bitfield name="CS_SHARED_CONST" pos="19" type="boolean"/>
+               <bitfield name="GFX_SHARED_CONST" pos="8" type="boolean"/>
+
+               <!-- SS6_BINDLESS: one bit per bindless base -->
+               <bitfield name="CS_BINDLESS" low="9" high="13" type="hex"/>
+               <bitfield name="GFX_BINDLESS" low="14" high="18" type="hex"/>
+       </reg32>
+
+       <reg32 offset="0xbb10" name="HLSQ_FS_CNTL" type="a6xx_hlsq_xs_cntl"/>
+
+       <reg32 offset="0xbb11" name="HLSQ_SHARED_CONSTS">
+               <doc>
+                       Shared constants are intended to be used for Vulkan push
+                       constants. When enabled, 8 vec4's are reserved in the FS
+                       const pool and 16 in the geometry const pool although
+                       only 8 are actually used (why?) and they are mapped to
+                       c504-c511 in each stage. Both VS and FS shared consts
+                       are written using ST6_CONSTANTS/SB6_IBO, so that both
+                       the geometry and FS shared consts can be written at once
+                       by using CP_LOAD_STATE6 rather than
+                       CP_LOAD_STATE6_FRAG/CP_LOAD_STATE6_GEOM. In addition
+                       DST_OFF and NUM_UNIT are in units of dwords instead of
+                       vec4's.
+
+                       There is also a separate shared constant pool for CS,
+                       which is loaded through CP_LOAD_STATE6_FRAG with
+                       ST6_UBO/ST6_IBO. However the only real difference for CS
+                       is the dword units.
+               </doc>
+               <bitfield name="ENABLE" pos="0" type="boolean"/>
+       </reg32>
+
+       <!-- mirror of SP_BINDLESS_BASE -->
+       <array offset="0xbb20" name="HLSQ_BINDLESS_BASE" stride="2" length="5">
+               <reg64 offset="0" name="ADDR" type="waddress"/>
+       </array>
+
+       <reg32 offset="0xbd80" name="HLSQ_2D_EVENT_CMD">
+               <bitfield name="STATE_ID" low="8" high="15"/>
+               <bitfield name="EVENT" low="0" high="6" type="vgt_event_type"/>
+       </reg32>
+
+       <!-- always 0x80 ? -->
+       <reg32 offset="0xbe00" name="HLSQ_UNKNOWN_BE00"/>
+       <!-- always 0x0 ? -->
+       <reg32 offset="0xbe01" name="HLSQ_UNKNOWN_BE01"/>
+       <!-- always 0x0 ? -->
+       <reg32 offset="0xbe04" name="HLSQ_UNKNOWN_BE04"/>
+
+       <!--
+               These special registers signal the beginning/end of an event
+               sequence. The sequence used internally for an event looks like:
+               - write EVENT_CMD pipe register
+               - write CP_EVENT_START
+               - write HLSQ_EVENT_CMD with event or HLSQ_DRAW_CMD
+               - write PC_EVENT_CMD with event or PC_DRAW_CMD
+               - write HLSQ_EVENT_CMD(CONTEXT_DONE)
+               - write PC_EVENT_CMD(CONTEXT_DONE)
+               - write CP_EVENT_END
+               Writing to CP_EVENT_END seems to actually trigger the context roll
+       -->
+       <reg32 offset="0xd600" name="CP_EVENT_START">
+               <bitfield name="STATE_ID" low="0" high="7"/>
+       </reg32>
+       <reg32 offset="0xd601" name="CP_EVENT_END">
+               <bitfield name="STATE_ID" low="0" high="7"/>
+       </reg32>
+       <reg32 offset="0xd700" name="CP_2D_EVENT_START">
+               <bitfield name="STATE_ID" low="0" high="7"/>
+       </reg32>
+       <reg32 offset="0xd701" name="CP_2D_EVENT_END">
+               <bitfield name="STATE_ID" low="0" high="7"/>
+       </reg32>
+</domain>
+
+<!-- Seems basically the same as a5xx, maybe move to common.xml.. -->
+<domain name="A6XX_TEX_SAMP" width="32">
+       <doc>Texture sampler dwords</doc>
+       <enum name="a6xx_tex_filter"> <!-- same as a4xx? -->
+               <value name="A6XX_TEX_NEAREST" value="0"/>
+               <value name="A6XX_TEX_LINEAR" value="1"/>
+               <value name="A6XX_TEX_ANISO" value="2"/>
+               <value name="A6XX_TEX_CUBIC" value="3"/> <!-- a650 only -->
+       </enum>
+       <enum name="a6xx_tex_clamp"> <!-- same as a4xx? -->
+               <value name="A6XX_TEX_REPEAT" value="0"/>
+               <value name="A6XX_TEX_CLAMP_TO_EDGE" value="1"/>
+               <value name="A6XX_TEX_MIRROR_REPEAT" value="2"/>
+               <value name="A6XX_TEX_CLAMP_TO_BORDER" value="3"/>
+               <value name="A6XX_TEX_MIRROR_CLAMP" value="4"/>
+       </enum>
+       <enum name="a6xx_tex_aniso"> <!-- same as a4xx? -->
+               <value name="A6XX_TEX_ANISO_1" value="0"/>
+               <value name="A6XX_TEX_ANISO_2" value="1"/>
+               <value name="A6XX_TEX_ANISO_4" value="2"/>
+               <value name="A6XX_TEX_ANISO_8" value="3"/>
+               <value name="A6XX_TEX_ANISO_16" value="4"/>
+       </enum>
+       <enum name="a6xx_reduction_mode">
+               <value name="A6XX_REDUCTION_MODE_AVERAGE" value="0"/>
+               <value name="A6XX_REDUCTION_MODE_MIN" value="1"/>
+               <value name="A6XX_REDUCTION_MODE_MAX" value="2"/>
+       </enum>
+
+       <reg32 offset="0" name="0">
+               <bitfield name="MIPFILTER_LINEAR_NEAR" pos="0" type="boolean"/>
+               <bitfield name="XY_MAG" low="1" high="2" type="a6xx_tex_filter"/>
+               <bitfield name="XY_MIN" low="3" high="4" type="a6xx_tex_filter"/>
+               <bitfield name="WRAP_S" low="5" high="7" type="a6xx_tex_clamp"/>
+               <bitfield name="WRAP_T" low="8" high="10" type="a6xx_tex_clamp"/>
+               <bitfield name="WRAP_R" low="11" high="13" type="a6xx_tex_clamp"/>
+               <bitfield name="ANISO" low="14" high="16" type="a6xx_tex_aniso"/>
+               <bitfield name="LOD_BIAS" low="19" high="31" type="fixed" radix="8"/><!-- no idea how many bits for real -->
+       </reg32>
+       <reg32 offset="1" name="1">
+               <!-- bit 0 always set with vulkan? -->
+               <bitfield name="UNK0" pos="0" type="boolean"/>
+               <bitfield name="COMPARE_FUNC" low="1" high="3" type="adreno_compare_func"/>
+               <bitfield name="CUBEMAPSEAMLESSFILTOFF" pos="4" type="boolean"/>
+               <bitfield name="UNNORM_COORDS" pos="5" type="boolean"/>
+               <bitfield name="MIPFILTER_LINEAR_FAR" pos="6" type="boolean"/>
+               <bitfield name="MAX_LOD" low="8" high="19" type="ufixed" radix="8"/>
+               <bitfield name="MIN_LOD" low="20" high="31" type="ufixed" radix="8"/>
+       </reg32>
+       <reg32 offset="2" name="2">
+               <bitfield name="REDUCTION_MODE" low="0" high="1" type="a6xx_reduction_mode"/>
+               <bitfield name="CHROMA_LINEAR" pos="5" type="boolean"/>
+               <bitfield name="BCOLOR_OFFSET" low="7" high="31" shr="7"/>
+       </reg32>
+       <reg32 offset="3" name="3"/>
+</domain>
+
+<domain name="A6XX_TEX_CONST" width="32">
+       <doc>Texture constant dwords</doc>
+       <enum name="a6xx_tex_swiz"> <!-- same as a4xx? -->
+               <value name="A6XX_TEX_X" value="0"/>
+               <value name="A6XX_TEX_Y" value="1"/>
+               <value name="A6XX_TEX_Z" value="2"/>
+               <value name="A6XX_TEX_W" value="3"/>
+               <value name="A6XX_TEX_ZERO" value="4"/>
+               <value name="A6XX_TEX_ONE" value="5"/>
+       </enum>
+       <enum name="a6xx_tex_type"> <!-- same as a4xx? -->
+               <value name="A6XX_TEX_1D" value="0"/>
+               <value name="A6XX_TEX_2D" value="1"/>
+               <value name="A6XX_TEX_CUBE" value="2"/>
+               <value name="A6XX_TEX_3D" value="3"/>
+       </enum>
+       <reg32 offset="0" name="0">
+               <bitfield name="TILE_MODE" low="0" high="1" type="a6xx_tile_mode"/>
+               <bitfield name="SRGB" pos="2" type="boolean"/>
+               <bitfield name="SWIZ_X" low="4" high="6" type="a6xx_tex_swiz"/>
+               <bitfield name="SWIZ_Y" low="7" high="9" type="a6xx_tex_swiz"/>
+               <bitfield name="SWIZ_Z" low="10" high="12" type="a6xx_tex_swiz"/>
+               <bitfield name="SWIZ_W" low="13" high="15" type="a6xx_tex_swiz"/>
+               <bitfield name="MIPLVLS" low="16" high="19" type="uint"/>
+               <!-- overlaps with MIPLVLS -->
+               <bitfield name="CHROMA_MIDPOINT_X" pos="16" type="boolean"/>
+               <bitfield name="CHROMA_MIDPOINT_Y" pos="18" type="boolean"/>
+               <bitfield name="SAMPLES" low="20" high="21" type="a3xx_msaa_samples"/>
+               <bitfield name="FMT" low="22" high="29" type="a6xx_format"/>
+               <bitfield name="SWAP" low="30" high="31" type="a3xx_color_swap"/>
+       </reg32>
+       <reg32 offset="1" name="1">
+               <bitfield name="WIDTH" low="0" high="14" type="uint"/>
+               <bitfield name="HEIGHT" low="15" high="29" type="uint"/>
+       </reg32>
+       <reg32 offset="2" name="2">
+               <!--
+               b4 and b31 set for buffer/ssbo case, in which case low 15 bits
+               of size encoded in WIDTH, and high 15 bits encoded in HEIGHT
+
+               b31 is probably the 'BUFFER' bit.. it is the one that changes
+               behavior of texture in dEQP-GLES31.functional.texture.texture_buffer.render.as_fragment_texture.buffer_size_131071
+                -->
+               <bitfield name="UNK4" pos="4" type="boolean"/>
+                <!-- minimum pitch (for mipmap levels): log2(pitchalign / 64) -->
+               <bitfield name="PITCHALIGN" low="0" high="3" type="uint"/>
+               <doc>Pitch in bytes (so actually stride)</doc>
+               <bitfield name="PITCH" low="7" high="28" type="uint"/>
+               <bitfield name="TYPE" low="29" high="30" type="a6xx_tex_type"/>
+               <bitfield name="UNK31" pos="31" type="boolean"/>
+       </reg32>
+       <reg32 offset="3" name="3">
+               <!--
+               ARRAY_PITCH is basically LAYERSZ for the first mipmap level, and
+               for 3d textures (laid out mipmap level first) MIN_LAYERSZ is the
+               layer size at the point that it stops being reduced moving to
+               higher (smaller) mipmap levels
+                -->
+               <bitfield name="ARRAY_PITCH" low="0" high="13" shr="12" type="uint"/>
+               <bitfield name="MIN_LAYERSZ" low="23" high="26" shr="12"/>
+               <!--
+               by default levels with w < 16 are linear
+               TILE_ALL makes all levels have tiling
+               seems required when using UBWC, since all levels have UBWC (can possibly be disabled?)
+                -->
+               <bitfield name="TILE_ALL" pos="27" type="boolean"/>
+               <bitfield name="FLAG" pos="28" type="boolean"/>
+       </reg32>
+       <!-- for 2-3 plane format, BASE is flag buffer address (if enabled)
+            the address of the non-flag base buffer is determined automatically,
+            and must follow the flag buffer
+        -->
+       <reg32 offset="4" name="4">
+               <bitfield name="BASE_LO" low="5" high="31" shr="5"/>
+       </reg32>
+       <reg32 offset="5" name="5">
+               <bitfield name="BASE_HI" low="0" high="16"/>
+               <bitfield name="DEPTH" low="17" high="29" type="uint"/>
+       </reg32>
+       <reg32 offset="6" name="6">
+               <!-- pitch for plane 2 / plane 3 -->
+               <bitfield name="PLANE_PITCH" low="8" high="31" type="uint"/>
+       </reg32>
+       <!-- 7/8 is plane 2 address for planar formats -->
+       <reg32 offset="7" name="7">
+               <bitfield name="FLAG_LO" low="5" high="31" shr="5"/>
+       </reg32>
+       <reg32 offset="8" name="8">
+               <bitfield name="FLAG_HI" low="0" high="16"/>
+       </reg32>
+       <!-- 9/10 is plane 3 address for planar formats -->
+       <reg32 offset="9" name="9">
+               <bitfield name="FLAG_BUFFER_ARRAY_PITCH" low="0" high="16" shr="4" type="uint"/>
+       </reg32>
+       <reg32 offset="10" name="10">
+               <bitfield name="FLAG_BUFFER_PITCH" low="0" high="6" shr="6" type="uint"/>
+               <!-- log2 size of the first level, required for mipmapping -->
+               <bitfield name="FLAG_BUFFER_LOGW" low="8" high="11" type="uint"/>
+               <bitfield name="FLAG_BUFFER_LOGH" low="12" high="15" type="uint"/>
+       </reg32>
+       <reg32 offset="11" name="11"/>
+       <reg32 offset="12" name="12"/>
+       <reg32 offset="13" name="13"/>
+       <reg32 offset="14" name="14"/>
+       <reg32 offset="15" name="15"/>
+</domain>
+
+<!--
+Note the "SSBO" state blocks are actually used for both images and SSBOs,
+naming is just because I r/e'd SSBOs first.  I should probably come up
+with a better name.
+-->
+<domain name="A6XX_IBO" width="32">
+       <reg32 offset="0" name="0">
+               <!--
+               NOTE: same position as in TEX_CONST state.. I don't see other bits
+               used but if they are good chance position is same as TEX_CONST
+                -->
+               <bitfield name="TILE_MODE" low="0" high="1" type="a6xx_tile_mode"/>
+               <bitfield name="FMT" low="22" high="29" type="a6xx_format"/>
+       </reg32>
+       <reg32 offset="1" name="1">
+               <bitfield name="WIDTH" low="0" high="14" type="uint"/>
+               <bitfield name="HEIGHT" low="15" high="29" type="uint"/>
+       </reg32>
+       <reg32 offset="2" name="2">
+               <!--
+               b4 and b31 set for buffer/ssbo case, in which case low 15 bits
+               of size encoded in WIDTH, and high 15 bits encoded in HEIGHT
+                -->
+               <bitfield name="UNK4" pos="4" type="boolean"/>
+               <doc>Pitch in bytes (so actually stride)</doc>
+               <bitfield name="PITCH" low="7" high="28" type="uint"/>
+               <bitfield name="TYPE" low="29" high="30" type="a6xx_tex_type"/>
+               <bitfield name="UNK31" pos="31" type="boolean"/>
+       </reg32>
+       <reg32 offset="3" name="3">
+               <!--
+               ARRAY_PITCH is basically LAYERSZ for the first mipmap level, and
+               for 3d textures (laid out mipmap level first) MIN_LAYERSZ is the
+               layer size at the point that it stops being reduced moving to
+               higher (smaller) mipmap levels
+                -->
+               <bitfield name="ARRAY_PITCH" low="0" high="13" shr="12" type="uint"/>
+               <bitfield name="UNK27" pos="27" type="boolean"/>
+               <bitfield name="FLAG" pos="28" type="boolean"/>
+       </reg32>
+       <reg32 offset="4" name="4">
+               <bitfield name="BASE_LO" low="0" high="31"/>
+       </reg32>
+       <reg32 offset="5" name="5">
+               <bitfield name="BASE_HI" low="0" high="16"/>
+               <bitfield name="DEPTH" low="17" high="29" type="uint"/>
+       </reg32>
+       <reg32 offset="6" name="6">
+       </reg32>
+       <reg32 offset="7" name="7">
+       </reg32>
+       <reg32 offset="8" name="8">
+       </reg32>
+       <reg32 offset="9" name="9">
+               <bitfield name="FLAG_BUFFER_ARRAY_PITCH" low="0" high="16" shr="4" type="uint"/>
+       </reg32>
+       <reg32 offset="10" name="10">
+               <!--
+               I see some other bits set by blob above FLAG_BUFFER_PITCH, but they
+               don't seem to be particularly sensible... or needed for UBWC to work
+                -->
+               <bitfield name="FLAG_BUFFER_PITCH" low="0" high="6" shr="6" type="uint"/>
+       </reg32>
+</domain>
+
+<domain name="A6XX_UBO" width="32">
+       <reg32 offset="0" name="0">
+               <bitfield name="BASE_LO" low="0" high="31"/>
+       </reg32>
+       <reg32 offset="1" name="1">
+               <bitfield name="BASE_HI" low="0" high="16"/>
+               <bitfield name="SIZE" low="17" high="31"/> <!-- size in vec4 (4xDWORD) units -->
+       </reg32>
+</domain>
+
+<domain name="A6XX_PDC" width="32">
+       <reg32 offset="0x1140" name="GPU_ENABLE_PDC"/>
+       <reg32 offset="0x1148" name="GPU_SEQ_START_ADDR"/>
+       <reg32 offset="0x1540" name="GPU_TCS0_CONTROL"/>
+       <reg32 offset="0x1541" name="GPU_TCS0_CMD_ENABLE_BANK"/>
+       <reg32 offset="0x1542" name="GPU_TCS0_CMD_WAIT_FOR_CMPL_BANK"/>
+       <reg32 offset="0x1543" name="GPU_TCS0_CMD0_MSGID"/>
+       <reg32 offset="0x1544" name="GPU_TCS0_CMD0_ADDR"/>
+       <reg32 offset="0x1545" name="GPU_TCS0_CMD0_DATA"/>
+       <reg32 offset="0x1572" name="GPU_TCS1_CONTROL"/>
+       <reg32 offset="0x1573" name="GPU_TCS1_CMD_ENABLE_BANK"/>
+       <reg32 offset="0x1574" name="GPU_TCS1_CMD_WAIT_FOR_CMPL_BANK"/>
+       <reg32 offset="0x1575" name="GPU_TCS1_CMD0_MSGID"/>
+       <reg32 offset="0x1576" name="GPU_TCS1_CMD0_ADDR"/>
+       <reg32 offset="0x1577" name="GPU_TCS1_CMD0_DATA"/>
+       <reg32 offset="0x15A4" name="GPU_TCS2_CONTROL"/>
+       <reg32 offset="0x15A5" name="GPU_TCS2_CMD_ENABLE_BANK"/>
+       <reg32 offset="0x15A6" name="GPU_TCS2_CMD_WAIT_FOR_CMPL_BANK"/>
+       <reg32 offset="0x15A7" name="GPU_TCS2_CMD0_MSGID"/>
+       <reg32 offset="0x15A8" name="GPU_TCS2_CMD0_ADDR"/>
+       <reg32 offset="0x15A9" name="GPU_TCS2_CMD0_DATA"/>
+       <reg32 offset="0x15D6" name="GPU_TCS3_CONTROL"/>
+       <reg32 offset="0x15D7" name="GPU_TCS3_CMD_ENABLE_BANK"/>
+       <reg32 offset="0x15D8" name="GPU_TCS3_CMD_WAIT_FOR_CMPL_BANK"/>
+       <reg32 offset="0x15D9" name="GPU_TCS3_CMD0_MSGID"/>
+       <reg32 offset="0x15DA" name="GPU_TCS3_CMD0_ADDR"/>
+       <reg32 offset="0x15DB" name="GPU_TCS3_CMD0_DATA"/>
+</domain>
+
+<domain name="A6XX_PDC_GPU_SEQ" width="32">
+       <reg32 offset="0x0" name="MEM_0"/>
+</domain>
+
+<domain name="A6XX_CX_DBGC" width="32">
+       <reg32 offset="0x0000" name="CFG_DBGBUS_SEL_A">
+               <bitfield high="7" low="0" name="PING_INDEX"/>
+               <bitfield high="15" low="8" name="PING_BLK_SEL"/>
+       </reg32>
+       <reg32 offset="0x0001" name="CFG_DBGBUS_SEL_B"/>
+       <reg32 offset="0x0002" name="CFG_DBGBUS_SEL_C"/>
+       <reg32 offset="0x0003" name="CFG_DBGBUS_SEL_D"/>
+       <reg32 offset="0x0004" name="CFG_DBGBUS_CNTLT">
+               <bitfield high="5" low="0" name="TRACEEN"/>
+               <bitfield high="14" low="12" name="GRANU"/>
+               <bitfield high="31" low="28" name="SEGT"/>
+       </reg32>
+       <reg32 offset="0x0005" name="CFG_DBGBUS_CNTLM">
+               <bitfield high="27" low="24" name="ENABLE"/>
+       </reg32>
+       <reg32 offset="0x0008" name="CFG_DBGBUS_IVTL_0"/>
+       <reg32 offset="0x0009" name="CFG_DBGBUS_IVTL_1"/>
+       <reg32 offset="0x000a" name="CFG_DBGBUS_IVTL_2"/>
+       <reg32 offset="0x000b" name="CFG_DBGBUS_IVTL_3"/>
+       <reg32 offset="0x000c" name="CFG_DBGBUS_MASKL_0"/>
+       <reg32 offset="0x000d" name="CFG_DBGBUS_MASKL_1"/>
+       <reg32 offset="0x000e" name="CFG_DBGBUS_MASKL_2"/>
+       <reg32 offset="0x000f" name="CFG_DBGBUS_MASKL_3"/>
+       <reg32 offset="0x0010" name="CFG_DBGBUS_BYTEL_0">
+               <bitfield high="3" low="0" name="BYTEL0"/>
+               <bitfield high="7" low="4" name="BYTEL1"/>
+               <bitfield high="11" low="8" name="BYTEL2"/>
+               <bitfield high="15" low="12" name="BYTEL3"/>
+               <bitfield high="19" low="16" name="BYTEL4"/>
+               <bitfield high="23" low="20" name="BYTEL5"/>
+               <bitfield high="27" low="24" name="BYTEL6"/>
+               <bitfield high="31" low="28" name="BYTEL7"/>
+       </reg32>
+       <reg32 offset="0x0011" name="CFG_DBGBUS_BYTEL_1">
+               <bitfield high="3" low="0" name="BYTEL8"/>
+               <bitfield high="7" low="4" name="BYTEL9"/>
+               <bitfield high="11" low="8" name="BYTEL10"/>
+               <bitfield high="15" low="12" name="BYTEL11"/>
+               <bitfield high="19" low="16" name="BYTEL12"/>
+               <bitfield high="23" low="20" name="BYTEL13"/>
+               <bitfield high="27" low="24" name="BYTEL14"/>
+               <bitfield high="31" low="28" name="BYTEL15"/>
+       </reg32>
+
+       <reg32 offset="0x002f" name="CFG_DBGBUS_TRACE_BUF1"/>
+       <reg32 offset="0x0030" name="CFG_DBGBUS_TRACE_BUF2"/>
+</domain>
+
+<domain name="A6XX_CX_MISC" width="32">
+       <reg32 offset="0x0001" name="SYSTEM_CACHE_CNTL_0"/>
+       <reg32 offset="0x0002" name="SYSTEM_CACHE_CNTL_1"/>
+</domain>
+
+</database>
diff --git a/src/freedreno/registers/adreno/a6xx_gmu.xml b/src/freedreno/registers/adreno/a6xx_gmu.xml
new file mode 100644 (file)
index 0000000..dbefd0c
--- /dev/null
@@ -0,0 +1,218 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<database xmlns="http://nouveau.freedesktop.org/"
+xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+xsi:schemaLocation="http://nouveau.freedesktop.org/ rules-ng.xsd">
+<import file="freedreno_copyright.xml"/>
+
+<domain name="A6XX" width="32">
+
+       <bitset name="A6XX_GMU_GPU_IDLE_STATUS">
+               <bitfield name="BUSY_IGN_AHB" pos="23"/>
+               <bitfield name="CX_GX_CPU_BUSY_IGN_AHB" pos="30"/>
+       </bitset>
+
+       <bitset name="A6XX_GMU_OOB">
+               <bitfield name="BOOT_SLUMBER_SET_MASK" pos="22"/>
+               <bitfield name="BOOT_SLUMBER_CHECK_MASK" pos="30"/>
+               <bitfield name="BOOT_SLUMBER_CLEAR_MASK" pos="30"/>
+               <bitfield name="DCVS_SET_MASK" pos="23"/>
+               <bitfield name="DCVS_CHECK_MASK" pos="31"/>
+               <bitfield name="DCVS_CLEAR_MASK" pos="31"/>
+               <bitfield name="GPU_SET_MASK" pos="18"/>
+               <bitfield name="GPU_CHECK_MASK" pos="26"/>
+               <bitfield name="GPU_CLEAR_MASK" pos="26"/>
+               <bitfield name="PERFCNTR_SET_MASK" pos="17"/>
+               <bitfield name="PERFCNTR_CHECK_MASK" pos="25"/>
+               <bitfield name="PERFCNTR_CLEAR_MASK" pos="25"/>
+       </bitset>
+
+       <bitset name="A6XX_HFI_IRQ">
+               <bitfield name="MSGQ_MASK" pos="0" />
+               <bitfield name="DSGQ_MASK" pos="1"/>
+               <bitfield name="BLOCKED_MSG_MASK" pos="2"/>
+               <bitfield name="CM3_FAULT_MASK" pos="23"/>
+               <bitfield name="GMU_ERR_MASK" low="16" high="22"/>
+               <bitfield name="OOB_MASK" low="24" high="31"/>
+       </bitset>
+
+       <bitset name="A6XX_HFI_H2F">
+               <bitfield name="IRQ_MASK_BIT" pos="0" />
+       </bitset>
+
+       <reg32 offset="0x80" name="GPU_GMU_GX_SPTPRAC_CLOCK_CONTROL"/>
+       <reg32 offset="0x81" name="GMU_GX_SPTPRAC_POWER_CONTROL"/>
+       <reg32 offset="0xc00" name="GMU_CM3_ITCM_START"/>
+       <reg32 offset="0x1c00" name="GMU_CM3_DTCM_START"/>
+       <reg32 offset="0x23f0" name="GMU_NMI_CONTROL_STATUS"/>
+       <reg32 offset="0x23f8" name="GMU_BOOT_SLUMBER_OPTION"/>
+       <reg32 offset="0x23f9" name="GMU_GX_VOTE_IDX"/>
+       <reg32 offset="0x23fa" name="GMU_MX_VOTE_IDX"/>
+       <reg32 offset="0x23fc" name="GMU_DCVS_ACK_OPTION"/>
+       <reg32 offset="0x23fd" name="GMU_DCVS_PERF_SETTING"/>
+       <reg32 offset="0x23fe" name="GMU_DCVS_BW_SETTING"/>
+       <reg32 offset="0x23ff" name="GMU_DCVS_RETURN"/>
+       <reg32 offset="0x4c00" name="GMU_ICACHE_CONFIG"/>
+       <reg32 offset="0x4c01" name="GMU_DCACHE_CONFIG"/>
+       <reg32 offset="0x4c0f" name="GMU_SYS_BUS_CONFIG"/>
+       <reg32 offset="0x5000" name="GMU_CM3_SYSRESET"/>
+       <reg32 offset="0x5001" name="GMU_CM3_BOOT_CONFIG"/>
+       <reg32 offset="0x501a" name="GMU_CM3_FW_BUSY"/>
+       <reg32 offset="0x501c" name="GMU_CM3_FW_INIT_RESULT"/>
+       <reg32 offset="0x502d" name="GMU_CM3_CFG"/>
+       <reg32 offset="0x5040" name="GMU_CX_GMU_POWER_COUNTER_ENABLE"/>
+       <reg32 offset="0x5041" name="GMU_CX_GMU_POWER_COUNTER_SELECT_0"/>
+       <reg32 offset="0x5042" name="GMU_CX_GMU_POWER_COUNTER_SELECT_1"/>
+       <reg32 offset="0x5044" name="GMU_CX_GMU_POWER_COUNTER_XOCLK_0_L"/>
+       <reg32 offset="0x5045" name="GMU_CX_GMU_POWER_COUNTER_XOCLK_0_H"/>
+       <reg32 offset="0x5046" name="GMU_CX_GMU_POWER_COUNTER_XOCLK_1_L"/>
+       <reg32 offset="0x5047" name="GMU_CX_GMU_POWER_COUNTER_XOCLK_1_H"/>
+       <reg32 offset="0x5048" name="GMU_CX_GMU_POWER_COUNTER_XOCLK_2_L"/>
+       <reg32 offset="0x5049" name="GMU_CX_GMU_POWER_COUNTER_XOCLK_2_H"/>
+       <reg32 offset="0x504a" name="GMU_CX_GMU_POWER_COUNTER_XOCLK_3_L"/>
+       <reg32 offset="0x504b" name="GMU_CX_GMU_POWER_COUNTER_XOCLK_3_H"/>
+       <reg32 offset="0x504c" name="GMU_CX_GMU_POWER_COUNTER_XOCLK_4_L"/>
+       <reg32 offset="0x504d" name="GMU_CX_GMU_POWER_COUNTER_XOCLK_4_H"/>
+       <reg32 offset="0x504e" name="GMU_CX_GMU_POWER_COUNTER_XOCLK_5_L"/>
+       <reg32 offset="0x504f" name="GMU_CX_GMU_POWER_COUNTER_XOCLK_5_H"/>
+       <reg32 offset="0x50c0" name="GMU_PWR_COL_INTER_FRAME_CTRL">
+               <bitfield name="IFPC_ENABLE" pos="0" type="boolean"/>
+               <bitfield name="HM_POWER_COLLAPSE_ENABLE" pos="1" type="boolean"/>
+               <bitfield name="SPTPRAC_POWER_CONTROL_ENABLE" pos="2" type="boolean"/>
+               <bitfield name="NUM_PASS_SKIPS" low="10" high="13"/>
+               <bitfield name="MIN_PASS_LENGTH" low="14" high="31"/>
+       </reg32>
+       <reg32 offset="0x50c1" name="GMU_PWR_COL_INTER_FRAME_HYST"/>
+       <reg32 offset="0x50c2" name="GMU_PWR_COL_SPTPRAC_HYST"/>
+       <reg32 offset="0x50d0" name="GMU_SPTPRAC_PWR_CLK_STATUS">
+               <bitfield name="SPTPRAC_GDSC_POWERING_OFF" pos="0" type="boolean"/>
+               <bitfield name="SPTPRAC_GDSC_POWERING_ON" pos="1" type="boolean"/>
+               <bitfield name="SPTPRAC_GDSC_POWER_OFF" pos="2" type="boolean"/>
+               <bitfield name="SPTPRAC_GDSC_POWER_ON" pos="3" type="boolean"/>
+               <bitfield name="SP_CLOCK_OFF" pos="4" type="boolean"/>
+               <bitfield name="GMU_UP_POWER_STATE" pos="5" type="boolean"/>
+               <bitfield name="GX_HM_GDSC_POWER_OFF" pos="6" type="boolean"/>
+               <bitfield name="GX_HM_CLK_OFF" pos="7" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x50e4" name="GMU_GPU_NAP_CTRL">
+               <bitfield name="HW_NAP_ENABLE" pos="0"/>
+               <bitfield name="SID" low="4" high="8"/>
+       </reg32>
+       <reg32 offset="0x50e8" name="GMU_RPMH_CTRL">
+               <bitfield name="RPMH_INTERFACE_ENABLE" pos="0" type="boolean"/>
+               <bitfield name="LLC_VOTE_ENABLE" pos="4" type="boolean"/>
+               <bitfield name="DDR_VOTE_ENABLE" pos="8" type="boolean"/>
+               <bitfield name="MX_VOTE_ENABLE" pos="9" type="boolean"/>
+               <bitfield name="CX_VOTE_ENABLE" pos="10" type="boolean"/>
+               <bitfield name="GFX_VOTE_ENABLE" pos="11" type="boolean"/>
+               <bitfield name="DDR_MIN_VOTE_ENABLE" pos="12" type="boolean"/>
+               <bitfield name="MX_MIN_VOTE_ENABLE" pos="13" type="boolean"/>
+               <bitfield name="CX_MIN_VOTE_ENABLE" pos="14" type="boolean"/>
+               <bitfield name="GFX_MIN_VOTE_ENABLE" pos="15" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x50e9" name="GMU_RPMH_HYST_CTRL"/>
+       <reg32 offset="0x50ec" name="GPU_GMU_CX_GMU_RPMH_POWER_STATE"/>
+       <reg32 offset="0x50f0" name="GPU_GMU_CX_GMU_CX_FAL_INTF"/>
+       <reg32 offset="0x5100" name="GPU_GMU_CX_GMU_PWR_COL_CP_MSG"/>
+       <reg32 offset="0x5101" name="GPU_GMU_CX_GMU_PWR_COL_CP_RESP"/>
+       <reg32 offset="0x51f0" name="GMU_BOOT_KMD_LM_HANDSHAKE"/>
+       <reg32 offset="0x5157" name="GMU_LLM_GLM_SLEEP_CTRL"/>
+       <reg32 offset="0x5158" name="GMU_LLM_GLM_SLEEP_STATUS"/>
+       <reg32 offset="0x5088" name="GMU_ALWAYS_ON_COUNTER_L"/>
+       <reg32 offset="0x5089" name="GMU_ALWAYS_ON_COUNTER_H"/>
+       <reg32 offset="0x50c3" name="GMU_GMU_PWR_COL_KEEPALIVE"/>
+       <reg32 offset="0x5180" name="GMU_HFI_CTRL_STATUS"/>
+       <reg32 offset="0x5181" name="GMU_HFI_VERSION_INFO"/>
+       <reg32 offset="0x5182" name="GMU_HFI_SFR_ADDR"/>
+       <reg32 offset="0x5183" name="GMU_HFI_MMAP_ADDR"/>
+       <reg32 offset="0x5184" name="GMU_HFI_QTBL_INFO"/>
+       <reg32 offset="0x5185" name="GMU_HFI_QTBL_ADDR"/>
+       <reg32 offset="0x5186" name="GMU_HFI_CTRL_INIT"/>
+       <reg32 offset="0x5190" name="GMU_GMU2HOST_INTR_SET"/>
+       <reg32 offset="0x5191" name="GMU_GMU2HOST_INTR_CLR"/>
+       <reg32 offset="0x5192" name="GMU_GMU2HOST_INTR_INFO">
+               <bitfield name="MSGQ" pos="0" type="boolean"/>
+               <bitfield name="CM3_FAULT" pos="23" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x5193" name="GMU_GMU2HOST_INTR_MASK"/>
+       <reg32 offset="0x5194" name="GMU_HOST2GMU_INTR_SET"/>
+       <reg32 offset="0x5195" name="GMU_HOST2GMU_INTR_CLR"/>
+       <reg32 offset="0x5196" name="GMU_HOST2GMU_INTR_RAW_INFO"/>
+       <reg32 offset="0x5197" name="GMU_HOST2GMU_INTR_EN_0"/>
+       <reg32 offset="0x5198" name="GMU_HOST2GMU_INTR_EN_1"/>
+       <reg32 offset="0x5199" name="GMU_HOST2GMU_INTR_EN_2"/>
+       <reg32 offset="0x519a" name="GMU_HOST2GMU_INTR_EN_3"/>
+       <reg32 offset="0x519b" name="GMU_HOST2GMU_INTR_INFO_0"/>
+       <reg32 offset="0x519c" name="GMU_HOST2GMU_INTR_INFO_1"/>
+       <reg32 offset="0x519d" name="GMU_HOST2GMU_INTR_INFO_2"/>
+       <reg32 offset="0x519e" name="GMU_HOST2GMU_INTR_INFO_3"/>
+       <reg32 offset="0x51c6" name="GMU_GENERAL_1"/>
+       <reg32 offset="0x51cc" name="GMU_GENERAL_7"/>
+       <reg32 offset="0x515d" name="GMU_ISENSE_CTRL"/>
+       <reg32 offset="0x8920" name="GPU_CS_ENABLE_REG"/>
+       <reg32 offset="0x515d" name="GPU_GMU_CX_GMU_ISENSE_CTRL"/>
+       <reg32 offset="0x8578" name="GPU_CS_AMP_CALIBRATION_CONTROL3"/>
+       <reg32 offset="0x8558" name="GPU_CS_AMP_CALIBRATION_CONTROL2"/>
+       <reg32 offset="0x8580" name="GPU_CS_A_SENSOR_CTRL_0"/>
+       <reg32 offset="0x27ada" name="GPU_CS_A_SENSOR_CTRL_2"/>
+       <reg32 offset="0x881a" name="GPU_CS_SENSOR_GENERAL_STATUS"/>
+       <reg32 offset="0x8957" name="GPU_CS_AMP_CALIBRATION_CONTROL1"/>
+       <reg32 offset="0x881a" name="GPU_CS_SENSOR_GENERAL_STATUS"/>
+       <reg32 offset="0x881d" name="GPU_CS_AMP_CALIBRATION_STATUS1_0"/>
+       <reg32 offset="0x881f" name="GPU_CS_AMP_CALIBRATION_STATUS1_2"/>
+       <reg32 offset="0x8821" name="GPU_CS_AMP_CALIBRATION_STATUS1_4"/>
+       <reg32 offset="0x8965" name="GPU_CS_AMP_CALIBRATION_DONE"/>
+       <reg32 offset="0x896d" name="GPU_CS_AMP_PERIOD_CTRL"/>
+       <reg32 offset="0x8965" name="GPU_CS_AMP_CALIBRATION_DONE"/>
+       <reg32 offset="0x514d" name="GPU_GMU_CX_GMU_PWR_THRESHOLD"/>
+       <reg32 offset="0x9303" name="GMU_AO_INTERRUPT_EN"/>
+       <reg32 offset="0x9304" name="GMU_AO_HOST_INTERRUPT_CLR"/>
+       <reg32 offset="0x9305" name="GMU_AO_HOST_INTERRUPT_STATUS">
+               <bitfield name="WDOG_BITE" pos="0" type="boolean"/>
+               <bitfield name="RSCC_COMP" pos="1" type="boolean"/>
+               <bitfield name="VDROOP" pos="2" type="boolean"/>
+               <bitfield name="FENCE_ERR" pos="3" type="boolean"/>
+               <bitfield name="DBD_WAKEUP" pos="4" type="boolean"/>
+               <bitfield name="HOST_AHB_BUS_ERROR" pos="5" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x9306" name="GMU_AO_HOST_INTERRUPT_MASK"/>
+       <reg32 offset="0x9309" name="GPU_GMU_AO_GMU_CGC_MODE_CNTL"/>
+       <reg32 offset="0x930a" name="GPU_GMU_AO_GMU_CGC_DELAY_CNTL"/>
+       <reg32 offset="0x930b" name="GPU_GMU_AO_GMU_CGC_HYST_CNTL"/>
+       <reg32 offset="0x930c" name="GPU_GMU_AO_GPU_CX_BUSY_STATUS">
+               <bitfield name = "GPUBUSYIGNAHB" pos="23" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x930d" name="GPU_GMU_AO_GPU_CX_BUSY_STATUS2"/>
+       <reg32 offset="0x930e" name="GPU_GMU_AO_GPU_CX_BUSY_MASK"/>
+       <reg32 offset="0x9310" name="GMU_AO_AHB_FENCE_CTRL"/>
+       <reg32 offset="0x9313" name="GMU_AHB_FENCE_STATUS"/>
+       <reg32 offset="0x9315" name="GMU_RBBM_INT_UNMASKED_STATUS"/>
+       <reg32 offset="0x9316" name="GMU_AO_SPARE_CNTL"/>
+       <reg32 offset="0x9307" name="GMU_RSCC_CONTROL_REQ"/>
+       <reg32 offset="0x9308" name="GMU_RSCC_CONTROL_ACK"/>
+       <reg32 offset="0x9311" name="GMU_AHB_FENCE_RANGE_0"/>
+       <reg32 offset="0x9312" name="GMU_AHB_FENCE_RANGE_1"/>
+       <reg32 offset="0x9c03" name="GPU_CC_GX_GDSCR"/>
+       <reg32 offset="0x9d42" name="GPU_CC_GX_DOMAIN_MISC"/>
+
+       <!-- starts at offset 0x8c00 on most gpus -->
+       <reg32 offset="0x0004" name="GPU_RSCC_RSC_STATUS0_DRV0"/>
+       <reg32 offset="0x0008" name="RSCC_PDC_SEQ_START_ADDR"/>
+       <reg32 offset="0x0009" name="RSCC_PDC_MATCH_VALUE_LO"/>
+       <reg32 offset="0x000a" name="RSCC_PDC_MATCH_VALUE_HI"/>
+       <reg32 offset="0x000b" name="RSCC_PDC_SLAVE_ID_DRV0"/>
+       <reg32 offset="0x000d" name="RSCC_HIDDEN_TCS_CMD0_ADDR"/>
+       <reg32 offset="0x000e" name="RSCC_HIDDEN_TCS_CMD0_DATA"/>
+       <reg32 offset="0x0082" name="RSCC_TIMESTAMP_UNIT0_TIMESTAMP_L_DRV0"/>
+       <reg32 offset="0x0083" name="RSCC_TIMESTAMP_UNIT0_TIMESTAMP_H_DRV0"/>
+       <reg32 offset="0x0089" name="RSCC_TIMESTAMP_UNIT1_EN_DRV0"/>
+       <reg32 offset="0x008c" name="RSCC_TIMESTAMP_UNIT1_OUTPUT_DRV0"/>
+       <reg32 offset="0x0100" name="RSCC_OVERRIDE_START_ADDR"/>
+       <reg32 offset="0x0101" name="RSCC_SEQ_BUSY_DRV0"/>
+       <reg32 offset="0x0180" name="RSCC_SEQ_MEM_0_DRV0"/>
+       <reg32 offset="0x0346" name="RSCC_TCS0_DRV0_STATUS"/>
+       <reg32 offset="0x03ee" name="RSCC_TCS1_DRV0_STATUS"/>
+       <reg32 offset="0x0496" name="RSCC_TCS2_DRV0_STATUS"/>
+       <reg32 offset="0x053e" name="RSCC_TCS3_DRV0_STATUS"/>
+</domain>
+
+</database>
diff --git a/src/freedreno/registers/adreno/adreno_common.xml b/src/freedreno/registers/adreno/adreno_common.xml
new file mode 100644 (file)
index 0000000..d70fbaf
--- /dev/null
@@ -0,0 +1,370 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<database xmlns="http://nouveau.freedesktop.org/"
+xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+xsi:schemaLocation="http://nouveau.freedesktop.org/ rules-ng.xsd">
+
+<enum name="chip" bare="yes">
+       <value name="A2XX"/>
+       <value name="A3XX"/>
+       <value name="A4XX"/>
+       <value name="A5XX"/>
+       <value name="A6XX"/>
+</enum>
+
+<enum name="adreno_pa_su_sc_draw">
+       <value name="PC_DRAW_POINTS" value="0"/>
+       <value name="PC_DRAW_LINES" value="1"/>
+       <value name="PC_DRAW_TRIANGLES" value="2"/>
+</enum>
+
+<enum name="adreno_compare_func">
+       <value name="FUNC_NEVER" value="0"/>
+       <value name="FUNC_LESS" value="1"/>
+       <value name="FUNC_EQUAL" value="2"/>
+       <value name="FUNC_LEQUAL" value="3"/>
+       <value name="FUNC_GREATER" value="4"/>
+       <value name="FUNC_NOTEQUAL" value="5"/>
+       <value name="FUNC_GEQUAL" value="6"/>
+       <value name="FUNC_ALWAYS" value="7"/>
+</enum>
+
+<enum name="adreno_stencil_op">
+       <value name="STENCIL_KEEP" value="0"/>
+       <value name="STENCIL_ZERO" value="1"/>
+       <value name="STENCIL_REPLACE" value="2"/>
+       <value name="STENCIL_INCR_CLAMP" value="3"/>
+       <value name="STENCIL_DECR_CLAMP" value="4"/>
+       <value name="STENCIL_INVERT" value="5"/>
+       <value name="STENCIL_INCR_WRAP" value="6"/>
+       <value name="STENCIL_DECR_WRAP" value="7"/>
+</enum>
+
+<enum name="adreno_rb_blend_factor">
+       <value name="FACTOR_ZERO" value="0"/>
+       <value name="FACTOR_ONE" value="1"/>
+       <value name="FACTOR_SRC_COLOR" value="4"/>
+       <value name="FACTOR_ONE_MINUS_SRC_COLOR" value="5"/>
+       <value name="FACTOR_SRC_ALPHA" value="6"/>
+       <value name="FACTOR_ONE_MINUS_SRC_ALPHA" value="7"/>
+       <value name="FACTOR_DST_COLOR" value="8"/>
+       <value name="FACTOR_ONE_MINUS_DST_COLOR" value="9"/>
+       <value name="FACTOR_DST_ALPHA" value="10"/>
+       <value name="FACTOR_ONE_MINUS_DST_ALPHA" value="11"/>
+       <value name="FACTOR_CONSTANT_COLOR" value="12"/>
+       <value name="FACTOR_ONE_MINUS_CONSTANT_COLOR" value="13"/>
+       <value name="FACTOR_CONSTANT_ALPHA" value="14"/>
+       <value name="FACTOR_ONE_MINUS_CONSTANT_ALPHA" value="15"/>
+       <value name="FACTOR_SRC_ALPHA_SATURATE" value="16"/>
+       <value name="FACTOR_SRC1_COLOR" value="20"/>
+       <value name="FACTOR_ONE_MINUS_SRC1_COLOR" value="21"/>
+       <value name="FACTOR_SRC1_ALPHA" value="22"/>
+       <value name="FACTOR_ONE_MINUS_SRC1_ALPHA" value="23"/>
+</enum>
+
+<bitset name="adreno_rb_stencilrefmask" inline="yes">
+       <bitfield name="STENCILREF" low="0" high="7" type="hex"/>
+       <bitfield name="STENCILMASK" low="8" high="15" type="hex"/>
+       <bitfield name="STENCILWRITEMASK" low="16" high="23" type="hex"/>
+</bitset>
+
+<enum name="adreno_rb_surface_endian">
+       <value name="ENDIAN_NONE" value="0"/>
+       <value name="ENDIAN_8IN16" value="1"/>
+       <value name="ENDIAN_8IN32" value="2"/>
+       <value name="ENDIAN_16IN32" value="3"/>
+       <value name="ENDIAN_8IN64" value="4"/>
+       <value name="ENDIAN_8IN128" value="5"/>
+</enum>
+
+<enum name="adreno_rb_dither_mode">
+       <value name="DITHER_DISABLE" value="0"/>
+       <value name="DITHER_ALWAYS" value="1"/>
+       <value name="DITHER_IF_ALPHA_OFF" value="2"/>
+</enum>
+
+<enum name="adreno_rb_depth_format">
+       <value name="DEPTHX_16" value="0"/>
+       <value name="DEPTHX_24_8" value="1"/>
+       <value name="DEPTHX_32" value="2"/>
+</enum>
+
+<enum name="adreno_rb_copy_control_mode">
+       <value name="RB_COPY_RESOLVE" value="1"/>
+       <value name="RB_COPY_CLEAR" value="2"/>
+       <value name="RB_COPY_DEPTH_STENCIL" value="5"/>  <!-- not sure if this is part of MODE or another bitfield?? -->
+</enum>
+
+<bitset name="adreno_reg_xy" inline="yes">
+       <bitfield name="WINDOW_OFFSET_DISABLE" pos="31" type="boolean"/>
+       <bitfield name="X" low="0" high="14" type="uint"/>
+       <bitfield name="Y" low="16" high="30" type="uint"/>
+</bitset>
+
+<bitset name="adreno_cp_protect" inline="yes">
+       <bitfield name="BASE_ADDR" low="0" high="16"/>
+       <bitfield name="MASK_LEN" low="24" high="28"/>
+       <bitfield name="TRAP_WRITE" pos="29"/>
+       <bitfield name="TRAP_READ" pos="30"/>
+</bitset>
+
+<domain name="AXXX" width="32">
+       <brief>Registers in common between a2xx and a3xx</brief>
+
+       <reg32 offset="0x01c0" name="CP_RB_BASE"/>
+       <reg32 offset="0x01c1" name="CP_RB_CNTL">
+               <bitfield name="BUFSZ" low="0" high="5"/>
+               <bitfield name="BLKSZ" low="8" high="13"/>
+               <bitfield name="BUF_SWAP" low="16" high="17"/>
+               <bitfield name="POLL_EN" pos="20" type="boolean"/>
+               <bitfield name="NO_UPDATE" pos="27" type="boolean"/>
+               <bitfield name="RPTR_WR_EN" pos="31" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x01c3" name="CP_RB_RPTR_ADDR">
+               <bitfield name="SWAP" low="0" high="1" type="uint"/>
+               <bitfield name="ADDR" low="2" high="31" shr="2"/>
+       </reg32>
+       <reg32 offset="0x01c4" name="CP_RB_RPTR" type="uint"/>
+       <reg32 offset="0x01c5" name="CP_RB_WPTR" type="uint"/>
+       <reg32 offset="0x01c6" name="CP_RB_WPTR_DELAY"/>
+       <reg32 offset="0x01c7" name="CP_RB_RPTR_WR"/>
+       <reg32 offset="0x01c8" name="CP_RB_WPTR_BASE"/>
+       <reg32 offset="0x01d5" name="CP_QUEUE_THRESHOLDS">
+               <bitfield name="CSQ_IB1_START" low="0" high="3" type="uint"/>
+               <bitfield name="CSQ_IB2_START" low="8" high="11" type="uint"/>
+               <bitfield name="CSQ_ST_START" low="16" high="19" type="uint"/>
+       </reg32>
+       <reg32 offset="0x01d6" name="CP_MEQ_THRESHOLDS">
+               <bitfield name="MEQ_END" low="16" high="20" type="uint"/>
+               <bitfield name="ROQ_END" low="24" high="28" type="uint"/>
+       </reg32>
+       <reg32 offset="0x01d7" name="CP_CSQ_AVAIL">
+               <bitfield name="RING" low="0" high="6" type="uint"/>
+               <bitfield name="IB1" low="8" high="14" type="uint"/>
+               <bitfield name="IB2" low="16" high="22" type="uint"/>
+       </reg32>
+       <reg32 offset="0x01d8" name="CP_STQ_AVAIL">
+               <bitfield name="ST" low="0" high="6" type="uint"/>
+       </reg32>
+       <reg32 offset="0x01d9" name="CP_MEQ_AVAIL">
+               <bitfield name="MEQ" low="0" high="4" type="uint"/>
+       </reg32>
+       <reg32 offset="0x01dc" name="SCRATCH_UMSK">
+               <bitfield name="UMSK" low="0" high="7" type="uint"/>
+               <bitfield name="SWAP" low="16" high="17" type="uint"/>
+       </reg32>
+       <reg32 offset="0x01dd" name="SCRATCH_ADDR"/>
+       <reg32 offset="0x01ea" name="CP_ME_RDADDR"/>
+
+       <reg32 offset="0x01ec" name="CP_STATE_DEBUG_INDEX"/>
+       <reg32 offset="0x01ed" name="CP_STATE_DEBUG_DATA"/>
+       <reg32 offset="0x01f2" name="CP_INT_CNTL">
+               <bitfield name="SW_INT_MASK" pos="19" type="boolean"/>
+               <bitfield name="T0_PACKET_IN_IB_MASK" pos="23" type="boolean"/>
+               <bitfield name="OPCODE_ERROR_MASK" pos="24" type="boolean"/>
+               <bitfield name="PROTECTED_MODE_ERROR_MASK" pos="25" type="boolean"/>
+               <bitfield name="RESERVED_BIT_ERROR_MASK" pos="26" type="boolean"/>
+               <bitfield name="IB_ERROR_MASK" pos="27" type="boolean"/>
+               <bitfield name="IB2_INT_MASK" pos="29" type="boolean"/>
+               <bitfield name="IB1_INT_MASK" pos="30" type="boolean"/>
+               <bitfield name="RB_INT_MASK" pos="31" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x01f3" name="CP_INT_STATUS"/>
+       <reg32 offset="0x01f4" name="CP_INT_ACK"/>
+       <reg32 offset="0x01f6" name="CP_ME_CNTL">
+               <bitfield name="BUSY" pos="29" type="boolean"/>
+               <bitfield name="HALT" pos="28" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x01f7" name="CP_ME_STATUS"/>
+       <reg32 offset="0x01f8" name="CP_ME_RAM_WADDR"/>
+       <reg32 offset="0x01f9" name="CP_ME_RAM_RADDR"/>
+       <reg32 offset="0x01fa" name="CP_ME_RAM_DATA"/>
+       <reg32 offset="0x01fc" name="CP_DEBUG">
+               <bitfield name="PREDICATE_DISABLE" pos="23" type="boolean"/>
+               <bitfield name="PROG_END_PTR_ENABLE" pos="24" type="boolean"/>
+               <bitfield name="MIU_128BIT_WRITE_ENABLE" pos="25" type="boolean"/>
+               <bitfield name="PREFETCH_PASS_NOPS" pos="26" type="boolean"/>
+               <bitfield name="DYNAMIC_CLK_DISABLE" pos="27" type="boolean"/>
+               <bitfield name="PREFETCH_MATCH_DISABLE" pos="28" type="boolean"/>
+               <bitfield name="SIMPLE_ME_FLOW_CONTROL" pos="30" type="boolean"/>
+               <bitfield name="MIU_WRITE_PACK_DISABLE" pos="31" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x01fd" name="CP_CSQ_RB_STAT">
+               <bitfield name="RPTR" low="0" high="6" type="uint"/>
+               <bitfield name="WPTR" low="16" high="22" type="uint"/>
+       </reg32>
+       <reg32 offset="0x01fe" name="CP_CSQ_IB1_STAT">
+               <bitfield name="RPTR" low="0" high="6" type="uint"/>
+               <bitfield name="WPTR" low="16" high="22" type="uint"/>
+       </reg32>
+       <reg32 offset="0x01ff" name="CP_CSQ_IB2_STAT">
+               <bitfield name="RPTR" low="0" high="6" type="uint"/>
+               <bitfield name="WPTR" low="16" high="22" type="uint"/>
+       </reg32>
+
+       <reg32 offset="0x0440" name="CP_NON_PREFETCH_CNTRS"/>
+       <reg32 offset="0x0443" name="CP_STQ_ST_STAT"/>
+       <reg32 offset="0x044d" name="CP_ST_BASE"/>
+       <reg32 offset="0x044e" name="CP_ST_BUFSZ"/>
+       <reg32 offset="0x044f" name="CP_MEQ_STAT"/>
+       <reg32 offset="0x0452" name="CP_MIU_TAG_STAT"/>
+       <reg32 offset="0x0454" name="CP_BIN_MASK_LO"/>
+       <reg32 offset="0x0455" name="CP_BIN_MASK_HI"/>
+       <reg32 offset="0x0456" name="CP_BIN_SELECT_LO"/>
+       <reg32 offset="0x0457" name="CP_BIN_SELECT_HI"/>
+       <reg32 offset="0x0458" name="CP_IB1_BASE"/>
+       <reg32 offset="0x0459" name="CP_IB1_BUFSZ"/>
+       <reg32 offset="0x045a" name="CP_IB2_BASE"/>
+       <reg32 offset="0x045b" name="CP_IB2_BUFSZ"/>
+       <reg32 offset="0x047f" name="CP_STAT">
+               <bitfield pos="31" name="CP_BUSY"/>
+               <bitfield pos="30" name="VS_EVENT_FIFO_BUSY"/>
+               <bitfield pos="29" name="PS_EVENT_FIFO_BUSY"/>
+               <bitfield pos="28" name="CF_EVENT_FIFO_BUSY"/>
+               <bitfield pos="27" name="RB_EVENT_FIFO_BUSY"/>
+               <bitfield pos="26" name="ME_BUSY"/>
+               <bitfield pos="25" name="MIU_WR_C_BUSY"/>
+               <bitfield pos="23" name="CP_3D_BUSY"/>
+               <bitfield pos="22" name="CP_NRT_BUSY"/>
+               <bitfield pos="21" name="RBIU_SCRATCH_BUSY"/>
+               <bitfield pos="20" name="RCIU_ME_BUSY"/>
+               <bitfield pos="19" name="RCIU_PFP_BUSY"/>
+               <bitfield pos="18" name="MEQ_RING_BUSY"/>
+               <bitfield pos="17" name="PFP_BUSY"/>
+               <bitfield pos="16" name="ST_QUEUE_BUSY"/>
+               <bitfield pos="13" name="INDIRECT2_QUEUE_BUSY"/>
+               <bitfield pos="12" name="INDIRECTS_QUEUE_BUSY"/>
+               <bitfield pos="11" name="RING_QUEUE_BUSY"/>
+               <bitfield pos="10" name="CSF_BUSY"/>
+               <bitfield pos="9"  name="CSF_ST_BUSY"/>
+               <bitfield pos="8"  name="EVENT_BUSY"/>
+               <bitfield pos="7"  name="CSF_INDIRECT2_BUSY"/>
+               <bitfield pos="6"  name="CSF_INDIRECTS_BUSY"/>
+               <bitfield pos="5"  name="CSF_RING_BUSY"/>
+               <bitfield pos="4"  name="RCIU_BUSY"/>
+               <bitfield pos="3"  name="RBIU_BUSY"/>
+               <bitfield pos="2"  name="MIU_RD_RETURN_BUSY"/>
+               <bitfield pos="1"  name="MIU_RD_REQ_BUSY"/>
+               <bitfield pos="0"  name="MIU_WR_BUSY"/>
+       </reg32>
+       <reg32 offset="0x0578" name="CP_SCRATCH_REG0" type="uint"/>
+       <reg32 offset="0x0579" name="CP_SCRATCH_REG1" type="uint"/>
+       <reg32 offset="0x057a" name="CP_SCRATCH_REG2" type="uint"/>
+       <reg32 offset="0x057b" name="CP_SCRATCH_REG3" type="uint"/>
+       <reg32 offset="0x057c" name="CP_SCRATCH_REG4" type="uint"/>
+       <reg32 offset="0x057d" name="CP_SCRATCH_REG5" type="uint"/>
+       <reg32 offset="0x057e" name="CP_SCRATCH_REG6" type="uint"/>
+       <reg32 offset="0x057f" name="CP_SCRATCH_REG7" type="uint"/>
+
+       <reg32 offset="0x0600" name="CP_ME_VS_EVENT_SRC"/>
+       <reg32 offset="0x0601" name="CP_ME_VS_EVENT_ADDR"/>
+       <reg32 offset="0x0602" name="CP_ME_VS_EVENT_DATA"/>
+       <reg32 offset="0x0603" name="CP_ME_VS_EVENT_ADDR_SWM"/>
+       <reg32 offset="0x0604" name="CP_ME_VS_EVENT_DATA_SWM"/>
+       <reg32 offset="0x0605" name="CP_ME_PS_EVENT_SRC"/>
+       <reg32 offset="0x0606" name="CP_ME_PS_EVENT_ADDR"/>
+       <reg32 offset="0x0607" name="CP_ME_PS_EVENT_DATA"/>
+       <reg32 offset="0x0608" name="CP_ME_PS_EVENT_ADDR_SWM"/>
+       <reg32 offset="0x0609" name="CP_ME_PS_EVENT_DATA_SWM"/>
+       <reg32 offset="0x060a" name="CP_ME_CF_EVENT_SRC"/>
+       <reg32 offset="0x060b" name="CP_ME_CF_EVENT_ADDR"/>
+       <reg32 offset="0x060c" name="CP_ME_CF_EVENT_DATA" type="uint"/>
+       <reg32 offset="0x060d" name="CP_ME_NRT_ADDR"/>
+       <reg32 offset="0x060e" name="CP_ME_NRT_DATA"/>
+       <reg32 offset="0x0612" name="CP_ME_VS_FETCH_DONE_SRC"/>
+       <reg32 offset="0x0613" name="CP_ME_VS_FETCH_DONE_ADDR"/>
+       <reg32 offset="0x0614" name="CP_ME_VS_FETCH_DONE_DATA"/>
+
+</domain>
+
+<!--
+       Common between A3xx and A4xx:
+ -->
+
+<enum name="a3xx_rop_code">
+       <value name="ROP_CLEAR"         value="0"/>
+       <value name="ROP_NOR"           value="1"/>
+       <value name="ROP_AND_INVERTED"  value="2"/>
+       <value name="ROP_COPY_INVERTED" value="3"/>
+       <value name="ROP_AND_REVERSE"   value="4"/>
+       <value name="ROP_INVERT"        value="5"/>
+       <value name="ROP_XOR"           value="6"/>
+       <value name="ROP_NAND"          value="7"/>
+       <value name="ROP_AND"           value="8"/>
+       <value name="ROP_EQUIV"         value="9"/>
+       <value name="ROP_NOOP"          value="10"/>
+       <value name="ROP_OR_INVERTED"   value="11"/>
+       <value name="ROP_COPY"          value="12"/>
+       <value name="ROP_OR_REVERSE"    value="13"/>
+       <value name="ROP_OR"            value="14"/>
+       <value name="ROP_SET"           value="15"/>
+</enum>
+
+<enum name="a3xx_render_mode">
+       <value name="RB_RENDERING_PASS" value="0"/>
+       <value name="RB_TILING_PASS" value="1"/>
+       <value name="RB_RESOLVE_PASS" value="2"/>
+       <value name="RB_COMPUTE_PASS" value="3"/>
+</enum>
+
+<enum name="a3xx_msaa_samples">
+       <value name="MSAA_ONE" value="0"/>
+       <value name="MSAA_TWO" value="1"/>
+       <value name="MSAA_FOUR" value="2"/>
+       <value name="MSAA_EIGHT" value="3"/>
+</enum>
+
+<enum name="a3xx_threadmode">
+       <value value="0" name="MULTI"/>
+       <value value="1" name="SINGLE"/>
+</enum>
+
+<enum name="a3xx_instrbuffermode">
+       <!--
+       When shader size goes above ~128 or so, blob switches to '0'
+       and doesn't emit shader in cmdstream.  When either is '0' it
+       doesn't get emitted via CP_LOAD_STATE.  When only one is
+       '0' the other gets size 256-others_size.  So I think that:
+               BUFFER => execute out of state memory
+               CACHE  => use available state memory as local cache
+       NOTE that when CACHE mode, also set CACHEINVALID flag!
+
+       TODO check if that 256 size is same for all a3xx
+        -->
+       <value value="0" name="CACHE"/>
+       <value value="1" name="BUFFER"/>
+</enum>
+
+<enum name="a3xx_threadsize">
+       <value value="0" name="TWO_QUADS"/>
+       <value value="1" name="FOUR_QUADS"/>
+</enum>
+
+<enum name="a3xx_color_swap">
+       <value name="WZYX" value="0"/>
+       <value name="WXYZ" value="1"/>
+       <value name="ZYXW" value="2"/>
+       <value name="XYZW" value="3"/>
+</enum>
+
+<enum name="a3xx_rb_blend_opcode">
+       <value name="BLEND_DST_PLUS_SRC" value="0"/>
+       <value name="BLEND_SRC_MINUS_DST" value="1"/>
+       <value name="BLEND_DST_MINUS_SRC" value="2"/>
+       <value name="BLEND_MIN_DST_SRC" value="3"/>
+       <value name="BLEND_MAX_DST_SRC" value="4"/>
+</enum>
+
+<enum name="a4xx_tess_spacing">
+       <value name="EQUAL_SPACING" value="0"/>
+       <value name="ODD_SPACING" value="2"/>
+       <value name="EVEN_SPACING" value="3"/>
+</enum>
+
+<doc>Address mode for a5xx+</doc>
+<enum name="a5xx_address_mode">
+       <value name="ADDR_32B" value="0"/>
+       <value name="ADDR_64B" value="1"/>
+</enum>
+
+</database>
+
diff --git a/src/freedreno/registers/adreno/adreno_control_regs.xml b/src/freedreno/registers/adreno/adreno_control_regs.xml
new file mode 100644 (file)
index 0000000..ed7c86b
--- /dev/null
@@ -0,0 +1,131 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<database xmlns="http://nouveau.freedesktop.org/"
+xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+xsi:schemaLocation="http://nouveau.freedesktop.org/ rules-ng.xsd">
+
+<!--
+       This documents the internal register space used by the CP firmware since
+       the afuc instruction set was introduced.
+-->
+
+<domain name="A5XX_CONTROL_REG" width="32">
+       <reg64 name="IB1_BASE" offset="0x0b0"/>
+       <reg32 name="IB1_DWORDS" offset="0x0b2"/>
+       <reg64 name="IB2_BASE" offset="0x0b4"/>
+       <reg32 name="IB2_DWORDS" offset="0x0b6"/>
+
+       <doc>
+               To use these, write the address and number of dwords, then read
+               the result from $addr.
+       </doc>
+       <reg64 name="MEM_READ_ADDR" offset="0x0b8"/>
+       <reg32 name="MEM_READ_DWORDS" offset="0x0ba"/>
+</domain>
+
+<domain name="A6XX_CONTROL_REG" width="32">
+       <reg32 name="RB_RPTR" offset="0x001"/>
+       <doc>
+               Instruction to jump to when the CP is preempted to perform a
+               context switch, initialized to entry 15 of the jump table at
+               bootup.
+       </doc>
+       <reg32 name="PREEMPT_INSTR" offset="0x004"/>
+
+       <reg64 name="IB1_BASE" offset="0x010"/>
+       <reg32 name="IB1_DWORDS" offset="0x012"/>
+       <reg64 name="IB2_BASE" offset="0x014"/>
+       <reg32 name="IB2_DWORDS" offset="0x016"/>
+
+       <reg64 name="MEM_READ_ADDR" offset="0x018"/>
+       <reg32 name="MEM_READ_DWORDS" offset="0x01a"/>
+
+       <reg32 name="REG_WRITE_ADDR" offset="0x024"/>
+       <doc>
+               Writing to this triggers a register write and auto-increments
+               REG_WRITE_ADDR.
+       </doc>
+       <reg32 name="REG_WRITE" offset="0x025"/>
+
+       <doc> After setting these, read result from $addr2 </doc>
+       <reg32 name="REG_READ_DWORDS" offset="0x026"/>
+       <reg32 name="REG_READ_ADDR" offset="0x027"/>
+
+        <doc>
+                Write to increase WFI_PEND_CTR, decremented by WFI_PEND_DECR
+                pipe register.
+        </doc>
+       <reg32 name="WFI_PEND_INCR" offset="0x030"/>
+       <reg32 name="QUERY_PEND_INCR" offset="0x031"/>
+       <reg32 name="CACHE_FLUSH_PEND_INCR" offset="0x031"/>
+
+       <reg32 name="WFI_PEND_CTR" offset="0x038"/>
+       <reg32 name="QUERY_PEND_CTR" offset="0x039"/>
+       <reg32 name="CACHE_FLUSH_PEND_CTR" offset="0x03a"/>
+
+       <reg32 name="DRAW_STATE_SEL" offset="0x041"/>
+       <reg32 name="DRAW_STATE_ACTIVE_BITMASK" offset="0x049"/>
+       <reg32 name="DRAW_STATE_SET" offset="0x04a"/>
+
+       <doc> Controls whether RB, IB1, or IB2 is executed </doc>
+       <reg32 name="IB_LEVEL" offset="0x054"/>
+
+       <doc> Controls high 32 bits used by load and store afuc instructions </doc>
+       <reg32 name="LOAD_STORE_HI" offset="0x058"/>
+
+       <doc> Used to initialize the jump table for handling packets at bootup </doc>
+       <reg32 name="PACKET_TABLE_WRITE_ADDR" offset="0x060"/>
+       <reg32 name="PACKET_TABLE_WRITE" offset="0x061"/>
+
+       <reg32 name="PREEMPT_ENABLE" offset="0x071"/>
+       <reg32 name="SECURE_MODE" offset="0x075"/>
+
+       <!--
+               Note: I think that registers above 0x100 are actually just a
+               scratch space which can be used by firmware however it wants,
+               so these might change if the the firmware is updated.
+        -->
+
+       <doc>
+               These are addresses of various preemption records for the
+               current context. When context switching, the CP will save the
+               current state into these buffers, restore the state of the
+               next context from the buffers in the corresponding
+               CP_CONTEXT_SWITCH_PRIV_* registers written by the kernel,
+               then set these internal registers to the contents of
+               those registers. The kernel sets the initial values via
+               CP_SET_PSEUDO_REG on startup, and from then on the firmware
+               keeps track of them.
+       </doc>
+       <reg64 name="SAVE_REGISTER_SMMU_INFO" offset="0x110"/>
+       <reg64 name="SAVE_REGISTER_PRIV_NON_SECURE" offset="0x112"/>
+       <reg64 name="SAVE_REGISTER_PRIV_SECURE" offset="0x114"/>
+       <reg64 name="SAVE_REGISTER_NON_PRIV" offset="0x116"/>
+       <reg64 name="SAVE_REGISTER_COUNTER" offset="0x118"/>
+
+       <doc>
+               Used only during preemption, saved and restored from the "info"
+               field of a6xx_preemption_record. From the downstream kernel:
+
+               "Type of record. Written non-zero (usually) by CP.
+               we must set to zero for all ringbuffers."
+       </doc>
+
+       <reg32 name="PREEMPTION_INFO" offset="0x126"/>
+
+       <doc>
+               Set by SET_MARKER, used to conditionally execute
+               CP_COND_REG_EXEC and draw states.
+       </doc>
+       <reg32 name="MODE_BITMASK" offset="0x12b"/>
+
+       <reg32 name="SCRATCH_REG0" offset="0x170"/>
+       <reg32 name="SCRATCH_REG1" offset="0x171"/>
+       <reg32 name="SCRATCH_REG2" offset="0x172"/>
+       <reg32 name="SCRATCH_REG3" offset="0x173"/>
+       <reg32 name="SCRATCH_REG4" offset="0x174"/>
+       <reg32 name="SCRATCH_REG5" offset="0x175"/>
+       <reg32 name="SCRATCH_REG6" offset="0x176"/>
+       <reg32 name="SCRATCH_REG7" offset="0x177"/>
+</domain>
+
+</database>
diff --git a/src/freedreno/registers/adreno/adreno_pipe_regs.xml b/src/freedreno/registers/adreno/adreno_pipe_regs.xml
new file mode 100644 (file)
index 0000000..d529269
--- /dev/null
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<database xmlns="http://nouveau.freedesktop.org/"
+xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+xsi:schemaLocation="http://nouveau.freedesktop.org/ rules-ng.xsd">
+
+<!--
+       Pipe registers are a special kind of registers used by SQE on a6xxx, and
+       on a5xx by the ME, to control the CP. They only exist inside the CP, can
+       only be written to, and use the high 8 bits of the $addr register. For
+       example, this is how CP_WAIT_MEM_WRITES is implemented on a6xx:
+
+CP_WAIT_MEM_WRITES:
+       053b: 8b1d0084  mov $addr, 0x0084 << 24
+       053c: d8000000  waitin
+       053d: 981f0806  mov $01, $data
+
+       and on a5xx ME:
+
+CP_WAIT_MEM_WRITES:
+       05c3: 8b1d00c4  mov $addr, 0x00c4 << 24
+       05c4: d8000000  waitin
+       05c5: 981f0806  mov $01, $data
+
+       This writes to pipe register 0x84, or 0xc4 on a5xx. In this case the
+       value written is ignored, but for other registers it isn't.
+
+       Note that on a6xx, pipe register writes are pipelined together with
+       regular register writes in what replaced the MEQ.
+-->
+
+<bitset name="void" inline="yes">
+       <doc>Special type to mark registers with no payload.</doc>
+</bitset>
+
+<domain name="A6XX_PIPE_REG" width="32">
+       <!-- This replaces CP_WFI_PEND_CTR on a3xx-a5xx -->
+       <reg32 name="WFI_PEND_DECR" offset="0x81" type="void"/>
+       <!-- This is only used for WRITE_PRIMITIVE_COUNTS/ZPASS_DONE events -->
+       <reg32 name="QUERY_PEND_DECR" offset="0x82" type="void"/>
+       <reg32 name="WAIT_MEM_WRITES" offset="0x84" type="void"/>
+
+       <!-- Replaces CP_ME_NRT_ADDR/DATA on a3xx-a5xx -->
+       <reg64 name="NRT_ADDR" offset="0xa0"/>
+       <reg32 name="NRT_DATA" offset="0xa2"/>
+
+       <reg32 name="EVENT_CMD" offset="0xe7">
+               <enum name="a6xx_event_type">
+                       <value value="0" name="UNK_EVENT"/> <!-- sometimes used with binning draws? -->
+                       <value value="1" name="EVENT"/>
+                       <value value="2" name="DRAW"/>
+                       <value value="3" name="DISPATCH"/>
+               </enum>
+               <bitfield name="EVENT_TYPE" low="0" high="1" type="a6xx_event_type"/>
+               <!-- set for all *_TS events (i.e. ones that write something) -->
+               <bitfield name="TS_WRITE" pos="2" type="boolean"/>
+               <!-- Decrement CACHE_FLUSH_PEND_CTR when event happens -->
+               <bitfield name="CACHE_FLUSH_PEND_DECR" pos="3" type="boolean"/>
+       </reg32>
+       <reg64 name="EVENT_TS_ADDR" offset="0xe8"/>
+       <reg32 name="EVENT_TS_CTRL" offset="0xea">
+               <bitfield name="TIMESTAMP" pos="1" type="boolean"/>
+               <bitfield name="INTERRUPT" pos="2" type="boolean"/>
+               <enum name="a6xx_ts_event">
+                       <value value="1" name="CACHE_FLUSH"/>
+                       <value value="2" name="WT_DONE"/>
+                       <value value="3" name="RB_DONE"/>
+                       <value value="4" name="CCU_FLUSH_DEPTH"/>
+                       <value value="5" name="CCU_FLUSH_COLOR"/>
+                       <value value="6" name="CCU_RESOLVE"/>
+               </enum>
+               <bitfield name="EVENT" low="8" high="10" type="a6xx_ts_event"/>
+       </reg32>
+       <!-- data to write when !EVENT_TS_CTRL::TIMESTAMP -->
+       <reg32 name="EVENT_TS_DATA" offset="0xeb"/>
+</domain>
+
+</database>
diff --git a/src/freedreno/registers/adreno/adreno_pm4.xml b/src/freedreno/registers/adreno/adreno_pm4.xml
new file mode 100644 (file)
index 0000000..f16793b
--- /dev/null
@@ -0,0 +1,1705 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<database xmlns="http://nouveau.freedesktop.org/"
+xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+xsi:schemaLocation="http://nouveau.freedesktop.org/ rules-ng.xsd">
+
+<enum name="vgt_event_type">
+       <value name="VS_DEALLOC" value="0"/>
+       <value name="PS_DEALLOC" value="1"/>
+       <value name="VS_DONE_TS" value="2"/>
+       <value name="PS_DONE_TS" value="3"/>
+       <value name="CACHE_FLUSH_TS" value="4"/>
+       <value name="CONTEXT_DONE" value="5"/>
+       <value name="CACHE_FLUSH" value="6"/>
+       <value name="VIZQUERY_START" value="7" varset="chip" variants="A2XX"/>
+       <value name="HLSQ_FLUSH" value="7" varset="chip" variants="A3XX-A4XX"/>
+       <value name="VIZQUERY_END" value="8" varset="chip" variants="A2XX"/>
+       <value name="SC_WAIT_WC" value="9"/>
+       <value name="WRITE_PRIMITIVE_COUNTS" value="9" varset="chip" variants="A6XX"/>
+       <value name="START_PRIMITIVE_CTRS" value="11" varset="chip" variants="A6XX"/>
+       <value name="STOP_PRIMITIVE_CTRS" value="12" varset="chip" variants="A6XX"/>
+       <value name="RST_PIX_CNT" value="13"/>
+       <value name="RST_VTX_CNT" value="14"/>
+       <value name="TILE_FLUSH" value="15"/>
+       <value name="STAT_EVENT" value="16"/>
+       <value name="CACHE_FLUSH_AND_INV_TS_EVENT" value="20" varset="chip" variants="A2XX-A4XX"/>
+       <value name="ZPASS_DONE" value="21"/>
+       <value name="CACHE_FLUSH_AND_INV_EVENT" value="22" varset="chip" variants="A2XX"/>
+       <value name="RB_DONE_TS" value="22" varset="chip" variants="A3XX-"/>
+       <value name="PERFCOUNTER_START" value="23" varset="chip" variants="A2XX-A4XX"/>
+       <value name="PERFCOUNTER_STOP" value="24" varset="chip" variants="A2XX-A4XX"/>
+       <value name="VS_FETCH_DONE" value="27"/>
+       <value name="FACENESS_FLUSH" value="28" varset="chip" variants="A2XX-A4XX"/>
+
+       <!-- a5xx events -->
+       <value name="WT_DONE_TS" value="8" varset="chip" variants="A5XX-"/>
+       <value name="FLUSH_SO_0" value="17" varset="chip" variants="A5XX-"/>
+       <value name="FLUSH_SO_1" value="18" varset="chip" variants="A5XX-"/>
+       <value name="FLUSH_SO_2" value="19" varset="chip" variants="A5XX-"/>
+       <value name="FLUSH_SO_3" value="20" varset="chip" variants="A5XX-"/>
+       <value name="PC_CCU_INVALIDATE_DEPTH" value="24" varset="chip" variants="A5XX-"/>
+       <value name="PC_CCU_INVALIDATE_COLOR" value="25" varset="chip" variants="A5XX-"/>
+       <value name="PC_CCU_RESOLVE_TS" value="26" varset="chip" variants="A6XX"/>
+       <value name="PC_CCU_FLUSH_DEPTH_TS" value="28" varset="chip" variants="A5XX-"/>
+       <value name="PC_CCU_FLUSH_COLOR_TS" value="29" varset="chip" variants="A5XX-"/>
+       <value name="BLIT" value="30" varset="chip" variants="A5XX-"/>
+       <value name="UNK_25" value="37" varset="chip" variants="A5XX"/>
+       <value name="LRZ_FLUSH" value="38" varset="chip" variants="A5XX-"/>
+       <value name="BLIT_OP_FILL_2D" value="39" varset="chip" variants="A5XX-"/>
+       <value name="BLIT_OP_COPY_2D" value="40" varset="chip" variants="A5XX-"/>
+       <value name="BLIT_OP_SCALE_2D" value="42" varset="chip" variants="A5XX-"/>
+       <value name="CONTEXT_DONE_2D" value="43" varset="chip" variants="A5XX-"/>
+       <value name="UNK_2C" value="44" varset="chip" variants="A5XX-"/>
+       <value name="UNK_2D" value="45" varset="chip" variants="A5XX-"/>
+
+       <!-- a6xx events -->
+       <value name="CACHE_INVALIDATE" value="49" varset="chip" variants="A6XX"/>
+</enum>
+
+<enum name="pc_di_primtype">
+       <value name="DI_PT_NONE" value="0"/>
+       <!-- POINTLIST_PSIZE is used on a3xx/a4xx when gl_PointSize is written: -->
+       <value name="DI_PT_POINTLIST_PSIZE" value="1"/>
+       <value name="DI_PT_LINELIST" value="2"/>
+       <value name="DI_PT_LINESTRIP" value="3"/>
+       <value name="DI_PT_TRILIST" value="4"/>
+       <value name="DI_PT_TRIFAN" value="5"/>
+       <value name="DI_PT_TRISTRIP" value="6"/>
+       <value name="DI_PT_LINELOOP" value="7"/>  <!-- a22x, a3xx -->
+       <value name="DI_PT_RECTLIST" value="8"/>
+       <value name="DI_PT_POINTLIST" value="9"/>
+       <value name="DI_PT_LINE_ADJ" value="0xa"/>
+       <value name="DI_PT_LINESTRIP_ADJ" value="0xb"/>
+       <value name="DI_PT_TRI_ADJ" value="0xc"/>
+       <value name="DI_PT_TRISTRIP_ADJ" value="0xd"/>
+
+       <value name="DI_PT_PATCHES0" value="0x1f"/>
+       <value name="DI_PT_PATCHES1" value="0x20"/>
+       <value name="DI_PT_PATCHES2" value="0x21"/>
+       <value name="DI_PT_PATCHES3" value="0x22"/>
+       <value name="DI_PT_PATCHES4" value="0x23"/>
+       <value name="DI_PT_PATCHES5" value="0x24"/>
+       <value name="DI_PT_PATCHES6" value="0x25"/>
+       <value name="DI_PT_PATCHES7" value="0x26"/>
+       <value name="DI_PT_PATCHES8" value="0x27"/>
+       <value name="DI_PT_PATCHES9" value="0x28"/>
+       <value name="DI_PT_PATCHES10" value="0x29"/>
+       <value name="DI_PT_PATCHES11" value="0x2a"/>
+       <value name="DI_PT_PATCHES12" value="0x2b"/>
+       <value name="DI_PT_PATCHES13" value="0x2c"/>
+       <value name="DI_PT_PATCHES14" value="0x2d"/>
+       <value name="DI_PT_PATCHES15" value="0x2e"/>
+       <value name="DI_PT_PATCHES16" value="0x2f"/>
+       <value name="DI_PT_PATCHES17" value="0x30"/>
+       <value name="DI_PT_PATCHES18" value="0x31"/>
+       <value name="DI_PT_PATCHES19" value="0x32"/>
+       <value name="DI_PT_PATCHES20" value="0x33"/>
+       <value name="DI_PT_PATCHES21" value="0x34"/>
+       <value name="DI_PT_PATCHES22" value="0x35"/>
+       <value name="DI_PT_PATCHES23" value="0x36"/>
+       <value name="DI_PT_PATCHES24" value="0x37"/>
+       <value name="DI_PT_PATCHES25" value="0x38"/>
+       <value name="DI_PT_PATCHES26" value="0x39"/>
+       <value name="DI_PT_PATCHES27" value="0x3a"/>
+       <value name="DI_PT_PATCHES28" value="0x3b"/>
+       <value name="DI_PT_PATCHES29" value="0x3c"/>
+       <value name="DI_PT_PATCHES30" value="0x3d"/>
+       <value name="DI_PT_PATCHES31" value="0x3e"/>
+</enum>
+
+<enum name="pc_di_src_sel">
+       <value name="DI_SRC_SEL_DMA" value="0"/>
+       <value name="DI_SRC_SEL_IMMEDIATE" value="1"/>
+       <value name="DI_SRC_SEL_AUTO_INDEX" value="2"/>
+       <value name="DI_SRC_SEL_AUTO_XFB" value="3"/>
+</enum>
+
+<enum name="pc_di_face_cull_sel">
+       <value name="DI_FACE_CULL_NONE" value="0"/>
+       <value name="DI_FACE_CULL_FETCH" value="1"/>
+       <value name="DI_FACE_BACKFACE_CULL" value="2"/>
+       <value name="DI_FACE_FRONTFACE_CULL" value="3"/>
+</enum>
+
+<enum name="pc_di_index_size">
+       <value name="INDEX_SIZE_IGN" value="0"/>
+       <value name="INDEX_SIZE_16_BIT" value="0"/>
+       <value name="INDEX_SIZE_32_BIT" value="1"/>
+       <value name="INDEX_SIZE_8_BIT" value="2"/>
+       <value name="INDEX_SIZE_INVALID"/>
+</enum>
+
+<enum name="pc_di_vis_cull_mode">
+       <value name="IGNORE_VISIBILITY" value="0"/>
+       <value name="USE_VISIBILITY" value="1"/>
+</enum>
+
+<enum name="adreno_pm4_packet_type">
+       <value name="CP_TYPE0_PKT" value="0x00000000"/>
+       <value name="CP_TYPE1_PKT" value="0x40000000"/>
+       <value name="CP_TYPE2_PKT" value="0x80000000"/>
+       <value name="CP_TYPE3_PKT" value="0xc0000000"/>
+       <value name="CP_TYPE4_PKT" value="0x40000000"/>
+       <value name="CP_TYPE7_PKT" value="0x70000000"/>
+</enum>
+
+<!--
+   Note that in some cases, the same packet id is recycled on a later
+   generation, so variants attribute is used to distinguish.   They
+   may not be completely accurate, we would probably have to analyze
+   the pfp and me/pm4 firmware to verify the packet is actually
+   handled on a particular generation.  But it is at least enough to
+   disambiguate the packet-id's that were re-used for different
+   packets starting with a5xx.
+ -->
+<enum name="adreno_pm4_type3_packets">
+       <doc>initialize CP's micro-engine</doc>
+       <value name="CP_ME_INIT" value="0x48"/>
+       <doc>skip N 32-bit words to get to the next packet</doc>
+       <value name="CP_NOP" value="0x10"/>
+       <doc>
+               indirect buffer dispatch.  prefetch parser uses this packet
+               type to determine whether to pre-fetch the IB
+       </doc>
+       <value name="CP_PREEMPT_ENABLE" value="0x1c"/>
+       <value name="CP_PREEMPT_TOKEN" value="0x1e"/>
+       <value name="CP_INDIRECT_BUFFER" value="0x3f"/>
+       <doc>
+               Takes the same arguments as CP_INDIRECT_BUFFER, but jumps to
+               another buffer at the same level. Must be at the end of IB, and
+               doesn't work with draw state IB's.
+       </doc>
+       <value name="CP_INDIRECT_BUFFER_CHAIN" value="0x57" varset="chip" variants="A5XX-"/>
+       <doc>indirect buffer dispatch.  same as IB, but init is pipelined</doc>
+       <value name="CP_INDIRECT_BUFFER_PFD" value="0x37"/>
+       <doc>wait for the IDLE state of the engine</doc>
+       <value name="CP_WAIT_FOR_IDLE" value="0x26"/>
+       <doc>wait until a register or memory location is a specific value</doc>
+       <value name="CP_WAIT_REG_MEM" value="0x3c"/>
+       <doc>wait until a register location is equal to a specific value</doc>
+       <value name="CP_WAIT_REG_EQ" value="0x52"/>
+       <doc>wait until a register location is >= a specific value</doc>
+       <value name="CP_WAIT_REG_GTE" value="0x53" varset="chip" variants="A2XX-A4XX"/>
+       <doc>wait until a read completes</doc>
+       <value name="CP_WAIT_UNTIL_READ" value="0x5c" varset="chip" variants="A2XX-A4XX"/>
+       <doc>wait until all base/size writes from an IB_PFD packet have completed</doc>
+       <value name="CP_WAIT_IB_PFD_COMPLETE" value="0x5d"/>
+       <doc>register read/modify/write</doc>
+       <value name="CP_REG_RMW" value="0x21"/>
+       <doc>Set binning configuration registers</doc>
+       <value name="CP_SET_BIN_DATA" value="0x2f" varset="chip" variants="A2XX-A4XX"/>
+       <value name="CP_SET_BIN_DATA5" value="0x2f" varset="chip" variants="A5XX-"/>
+       <doc>reads register in chip and writes to memory</doc>
+       <value name="CP_REG_TO_MEM" value="0x3e"/>
+       <doc>write N 32-bit words to memory</doc>
+       <value name="CP_MEM_WRITE" value="0x3d"/>
+       <doc>write CP_PROG_COUNTER value to memory</doc>
+       <value name="CP_MEM_WRITE_CNTR" value="0x4f"/>
+       <doc>conditional execution of a sequence of packets</doc>
+       <value name="CP_COND_EXEC" value="0x44"/>
+       <doc>conditional write to memory or register</doc>
+       <value name="CP_COND_WRITE" value="0x45" varset="chip" variants="A2XX-A4XX"/>
+       <value name="CP_COND_WRITE5" value="0x45" varset="chip" variants="A5XX-"/>
+       <doc>generate an event that creates a write to memory when completed</doc>
+       <value name="CP_EVENT_WRITE" value="0x46"/>
+       <doc>generate a VS|PS_done event</doc>
+       <value name="CP_EVENT_WRITE_SHD" value="0x58"/>
+       <doc>generate a cache flush done event</doc>
+       <value name="CP_EVENT_WRITE_CFL" value="0x59"/>
+       <doc>generate a z_pass done event</doc>
+       <value name="CP_EVENT_WRITE_ZPD" value="0x5b"/>
+       <doc>
+               not sure the real name, but this seems to be what is used for
+               opencl, instead of CP_DRAW_INDX..
+       </doc>
+       <value name="CP_RUN_OPENCL" value="0x31"/>
+       <doc>initiate fetch of index buffer and draw</doc>
+       <value name="CP_DRAW_INDX" value="0x22"/>
+       <doc>draw using supplied indices in packet</doc>
+       <value name="CP_DRAW_INDX_2" value="0x36" varset="chip" variants="A2XX-A4XX"/>  <!-- this is something different on a6xx and unused on a5xx -->
+       <doc>initiate fetch of index buffer and binIDs and draw</doc>
+       <value name="CP_DRAW_INDX_BIN" value="0x34" varset="chip" variants="A2XX-A4XX"/>
+       <doc>initiate fetch of bin IDs and draw using supplied indices</doc>
+       <value name="CP_DRAW_INDX_2_BIN" value="0x35" varset="chip" variants="A2XX-A4XX"/>
+       <doc>begin/end initiator for viz query extent processing</doc>
+       <value name="CP_VIZ_QUERY" value="0x23" varset="chip" variants="A2XX-A4XX"/>
+       <doc>fetch state sub-blocks and initiate shader code DMAs</doc>
+       <value name="CP_SET_STATE" value="0x25"/>
+       <doc>load constant into chip and to memory</doc>
+       <value name="CP_SET_CONSTANT" value="0x2d"/>
+       <doc>load sequencer instruction memory (pointer-based)</doc>
+       <value name="CP_IM_LOAD" value="0x27"/>
+       <doc>load sequencer instruction memory (code embedded in packet)</doc>
+       <value name="CP_IM_LOAD_IMMEDIATE" value="0x2b"/>
+       <doc>load constants from a location in memory</doc>
+       <value name="CP_LOAD_CONSTANT_CONTEXT" value="0x2e" varset="chip" variants="A2XX"/>
+       <doc>selective invalidation of state pointers</doc>
+       <value name="CP_INVALIDATE_STATE" value="0x3b"/>
+       <doc>dynamically changes shader instruction memory partition</doc>
+       <value name="CP_SET_SHADER_BASES" value="0x4a" varset="chip" variants="A2XX-A4XX"/>
+       <doc>sets the 64-bit BIN_MASK register in the PFP</doc>
+       <value name="CP_SET_BIN_MASK" value="0x50" varset="chip" variants="A2XX-A4XX"/>
+       <doc>sets the 64-bit BIN_SELECT register in the PFP</doc>
+       <value name="CP_SET_BIN_SELECT" value="0x51"/>
+       <doc>updates the current context, if needed</doc>
+       <value name="CP_CONTEXT_UPDATE" value="0x5e"/>
+       <doc>generate interrupt from the command stream</doc>
+       <value name="CP_INTERRUPT" value="0x40"/>
+       <doc>copy sequencer instruction memory to system memory</doc>
+       <value name="CP_IM_STORE" value="0x2c" varset="chip" variants="A2XX"/>
+
+       <!-- For a20x -->
+<!-- TODO handle variants..
+       <doc>
+               Program an offset that will added to the BIN_BASE value of
+               the 3D_DRAW_INDX_BIN packet
+       </doc>
+       <value name="CP_SET_BIN_BASE_OFFSET" value="0x4b"/>
+ -->
+
+       <!-- for a22x -->
+       <doc>
+               sets draw initiator flags register in PFP, gets bitwise-ORed into
+               every draw initiator
+       </doc>
+       <value name="CP_SET_DRAW_INIT_FLAGS" value="0x4b"/>
+       <doc>sets the register protection mode</doc>
+       <value name="CP_SET_PROTECTED_MODE" value="0x5f"/>
+
+       <value name="CP_BOOTSTRAP_UCODE" value="0x6f"/>
+
+       <!-- for a3xx -->
+       <doc>load high level sequencer command</doc>
+       <value name="CP_LOAD_STATE" value="0x30" varset="chip" variants="A3XX"/>
+       <value name="CP_LOAD_STATE4" value="0x30" varset="chip" variants="A4XX-A5XX"/>
+       <doc>Conditionally load a IB based on a flag, prefetch enabled</doc>
+       <value name="CP_COND_INDIRECT_BUFFER_PFE" value="0x3a"/>
+       <doc>Conditionally load a IB based on a flag, prefetch disabled</doc>
+       <value name="CP_COND_INDIRECT_BUFFER_PFD" value="0x32" varset="chip" variants="A3XX"/>
+       <doc>Load a buffer with pre-fetch enabled</doc>
+       <value name="CP_INDIRECT_BUFFER_PFE" value="0x3f" varset="chip" variants="A5XX"/>
+       <doc>Set bin (?)</doc>
+       <value name="CP_SET_BIN" value="0x4c" varset="chip" variants="A2XX"/>
+
+       <doc>test 2 memory locations to dword values specified</doc>
+       <value name="CP_TEST_TWO_MEMS" value="0x71"/>
+
+       <doc>Write register, ignoring context state for context sensitive registers</doc>
+       <value name="CP_REG_WR_NO_CTXT" value="0x78"/>
+
+       <doc>Record the real-time when this packet is processed by PFP</doc>
+       <value name="CP_RECORD_PFP_TIMESTAMP" value="0x11"/>
+
+       <!-- Used to switch GPU between secure and non-secure modes -->
+       <value name="CP_SET_SECURE_MODE" value="0x66"/>
+
+       <doc>PFP waits until the FIFO between the PFP and the ME is empty</doc>
+       <value name="CP_WAIT_FOR_ME" value="0x13"/>
+
+       <!-- for a4xx -->
+       <doc>
+               Used a bit like CP_SET_CONSTANT on a2xx, but can write multiple
+               groups of registers.  Looks like it can be used to create state
+               objects in GPU memory, and on state change only emit pointer
+               (via CP_SET_DRAW_STATE), which should be nice for reducing CPU
+               overhead:
+
+               (A4x) save PM4 stream pointers to execute upon a visible draw
+       </doc>
+       <value name="CP_SET_DRAW_STATE" value="0x43" varset="chip" variants="A4XX-"/>
+       <value name="CP_DRAW_INDX_OFFSET" value="0x38"/>
+       <value name="CP_DRAW_INDIRECT" value="0x28" varset="chip" variants="A4XX-"/>
+       <value name="CP_DRAW_INDX_INDIRECT" value="0x29" varset="chip" variants="A4XX-"/>
+       <value name="CP_DRAW_INDIRECT_MULTI" value="0x2a" varset="chip" variants="A6XX"/>
+       <value name="CP_DRAW_AUTO" value="0x24"/>
+
+       <value name="CP_UNKNOWN_19" value="0x19"/>
+
+       <doc>set to 1 for fastclear..:</doc>
+       <value name="CP_UNKNOWN_1A" value="0x1a"/>
+
+       <value name="CP_UNKNOWN_4E" value="0x4e"/>
+
+       <doc>
+               for A4xx
+               Write to register with address that does not fit into type-0 pkt
+       </doc>
+       <value name="CP_WIDE_REG_WRITE" value="0x74" varset="chip" variants="A4XX"/>
+
+       <doc>copy from ME scratch RAM to a register</doc>
+       <value name="CP_SCRATCH_TO_REG" value="0x4d"/>
+
+       <doc>Copy from REG to ME scratch RAM</doc>
+       <value name="CP_REG_TO_SCRATCH" value="0x4a"/>
+
+       <doc>Wait for memory writes to complete</doc>
+       <value name="CP_WAIT_MEM_WRITES" value="0x12"/>
+
+       <doc>Conditional execution based on register comparison</doc>
+       <value name="CP_COND_REG_EXEC" value="0x47"/>
+
+       <doc>Memory to REG copy</doc>
+       <value name="CP_MEM_TO_REG" value="0x42"/>
+
+       <value name="CP_EXEC_CS_INDIRECT" value="0x41" varset="chip" variants="A4XX-"/>
+       <value name="CP_EXEC_CS" value="0x33"/>
+
+       <doc>
+               for a5xx
+       </doc>
+       <value name="CP_PERFCOUNTER_ACTION" value="0x50" varset="chip" variants="A5XX"/>
+       <!-- switches SMMU pagetable, used on a5xx+ only -->
+       <value name="CP_SMMU_TABLE_UPDATE" value="0x53" varset="chip" variants="A5XX-"/>
+       <!-- for a6xx -->
+       <doc>Tells CP the current mode of GPU operation</doc>
+       <value name="CP_SET_MARKER" value="0x65" varset="chip" variants="A6XX"/>
+       <doc>Instruct CP to set a few internal CP registers</doc>
+       <value name="CP_SET_PSEUDO_REG" value="0x56" varset="chip" variants="A6XX"/>
+       <!--
+       pairs of regid and value.. seems to be used to program some TF
+       related regs:
+        -->
+       <value name="CP_CONTEXT_REG_BUNCH" value="0x5c" varset="chip" variants="A5XX-"/>
+       <!-- A5XX Enable yield in RB only -->
+       <value name="CP_YIELD_ENABLE" value="0x1c" varset="chip" variants="A5XX"/>
+       <value name="CP_SKIP_IB2_ENABLE_GLOBAL" value="0x1d" varset="chip" variants="A5XX-"/>
+       <value name="CP_SKIP_IB2_ENABLE_LOCAL" value="0x23" varset="chip" variants="A5XX-"/>
+       <value name="CP_SET_SUBDRAW_SIZE" value="0x35" varset="chip" variants="A5XX-"/>
+       <value name="CP_SET_VISIBILITY_OVERRIDE" value="0x64" varset="chip" variants="A5XX-"/>
+       <!-- Enable/Disable/Defer A5x global preemption model -->
+       <value name="CP_PREEMPT_ENABLE_GLOBAL" value="0x69" varset="chip" variants="A5XX"/>
+       <!-- Enable/Disable A5x local preemption model -->
+       <value name="CP_PREEMPT_ENABLE_LOCAL" value="0x6a" varset="chip" variants="A5XX"/>
+       <!-- Yield token on a5xx similar to CP_PREEMPT on a4xx -->
+       <value name="CP_CONTEXT_SWITCH_YIELD" value="0x6b" varset="chip" variants="A5XX"/>
+       <!-- Inform CP about current render mode (needed for a5xx preemption) -->
+       <value name="CP_SET_RENDER_MODE" value="0x6c" varset="chip" variants="A5XX"/>
+       <value name="CP_COMPUTE_CHECKPOINT" value="0x6e" varset="chip" variants="A5XX"/>
+       <!-- check if this works on earlier.. -->
+       <value name="CP_MEM_TO_MEM" value="0x73" varset="chip" variants="A5XX-"/>
+       <value name="CP_BLIT" value="0x2c" varset="chip" variants="A5XX-"/>
+
+       <!-- Test specified bit in specified register and set predicate -->
+       <value name="CP_REG_TEST" value="0x39" varset="chip" variants="A5XX-"/>
+
+       <!--
+       Seems to set the mode flags which control which CP_SET_DRAW_STATE
+       packets are executed, based on their ENABLE_MASK values
+       
+       CP_SET_MODE w/ payload of 0x1 seems to cause CP_SET_DRAW_STATE
+       packets w/ ENABLE_MASK & 0x6 to execute immediately
+        -->
+       <value name="CP_SET_MODE" value="0x63" varset="chip" variants="A6XX"/>
+
+       <!--
+       Seems like there are now separate blocks of state for VS vs FS/CS
+       (probably these amounts to geometry vs fragments so that geometry
+       stage of the pipeline for next draw can start while fragment stage
+       of current draw is still running.  The format of the payload of the
+       packets is the same, the only difference is the offsets of the regs
+       the firmware code that handles the packet writes.
+
+       Note that for CL, starting with a6xx, the preferred # of local
+       threads is no longer the same as the max, implying that the shader
+       core can now run warps from unrelated shaders (ie.
+       CL_KERNEL_PREFERRED_WORK_GROUP_SIZE_MULTIPLE vs
+       CL_KERNEL_WORK_GROUP_SIZE)
+        -->
+       <value name="CP_LOAD_STATE6_GEOM" value="0x32" varset="chip" variants="A6XX"/>
+       <value name="CP_LOAD_STATE6_FRAG" value="0x34" varset="chip" variants="A6XX"/>
+       <!--
+       Note: For IBO state (Image/SSBOs) which have shared state across
+       shader stages, for 3d pipeline CP_LOAD_STATE6 is used.  But for
+       compute shaders, CP_LOAD_STATE6_FRAG is used.  Possibly they are
+       interchangable.
+        -->
+       <value name="CP_LOAD_STATE6" value="0x36" varset="chip" variants="A6XX"/>
+
+       <!-- internal packets: -->
+       <value name="IN_IB_PREFETCH_END" value="0x17" varset="chip" variants="A2XX"/>
+       <value name="IN_SUBBLK_PREFETCH" value="0x1f" varset="chip" variants="A2XX"/>
+       <value name="IN_INSTR_PREFETCH" value="0x20" varset="chip" variants="A2XX"/>
+       <value name="IN_INSTR_MATCH" value="0x47" varset="chip" variants="A2XX"/>
+       <value name="IN_CONST_PREFETCH" value="0x49" varset="chip" variants="A2XX"/>
+       <value name="IN_INCR_UPDT_STATE" value="0x55" varset="chip" variants="A2XX"/>
+       <value name="IN_INCR_UPDT_CONST" value="0x56" varset="chip" variants="A2XX"/>
+       <value name="IN_INCR_UPDT_INSTR" value="0x57" varset="chip" variants="A2XX"/>
+
+       <!-- jmptable entry used to handle type4 packet on a5xx+: -->
+       <value name="PKT4" value="0x04" varset="chip" variants="A5XX-"/>
+
+       <!-- TODO do these exist on A5xx? -->
+       <value name="CP_SCRATCH_WRITE" value="0x4c" varset="chip" variants="A6XX"/>
+       <value name="CP_REG_TO_MEM_OFFSET_MEM" value="0x74" varset="chip" variants="A6XX"/>
+       <value name="CP_REG_TO_MEM_OFFSET_REG" value="0x72" varset="chip" variants="A6XX"/>
+       <value name="CP_WAIT_MEM_GTE" value="0x14" varset="chip" variants="A6XX"/>
+       <value name="CP_WAIT_TWO_REGS" value="0x70" varset="chip" variants="A6XX"/>
+       <value name="CP_MEMCPY" value="0x75" varset="chip" variants="A6XX"/>
+       <value name="CP_SET_BIN_DATA5_OFFSET" value="0x2e" varset="chip" variants="A6XX"/>
+       <value name="CP_SET_CTXSWITCH_IB" value="0x55" varset="chip" variants="A6XX"/>
+
+       <!--
+       Seems to always have the payload:
+         00000002 00008801 00004010
+       or:
+         00000002 00008801 00004090
+       or:
+         00000002 00008801 00000010
+         00000002 00008801 00010010
+         00000002 00008801 00d64010
+         ...
+       Note set for compute shaders..
+       Is 0x8801 a register offset?
+       This appears to be a special sort of register write packet
+       more or less, but the firmware has some special handling..
+       Seems like it intercepts/modifies certain register offsets,
+       but others are treated like a normal PKT4 reg write.  I
+       guess there are some registers that the fw controls certain
+       bits.
+        -->
+       <value name="CP_REG_WRITE" value="0x6d" varset="chip" variants="A6XX"/>
+
+</enum>
+
+
+<domain name="CP_LOAD_STATE" width="32">
+       <doc>Load state, a3xx (and later?)</doc>
+       <enum name="adreno_state_block">
+               <value name="SB_VERT_TEX" value="0"/>
+               <value name="SB_VERT_MIPADDR" value="1"/>
+               <value name="SB_FRAG_TEX" value="2"/>
+               <value name="SB_FRAG_MIPADDR" value="3"/>
+               <value name="SB_VERT_SHADER" value="4"/>
+               <value name="SB_GEOM_SHADER" value="5"/>
+               <value name="SB_FRAG_SHADER" value="6"/>
+               <value name="SB_COMPUTE_SHADER" value="7"/>
+       </enum>
+       <enum name="adreno_state_type">
+               <value name="ST_SHADER" value="0"/>
+               <value name="ST_CONSTANTS" value="1"/>
+       </enum>
+       <enum name="adreno_state_src">
+               <value name="SS_DIRECT" value="0">
+                       <doc>inline with the CP_LOAD_STATE packet</doc>
+               </value>
+               <value name="SS_INVALID_ALL_IC" value="2"/>
+               <value name="SS_INVALID_PART_IC" value="3"/>
+               <value name="SS_INDIRECT" value="4">
+                       <doc>in buffer pointed to by EXT_SRC_ADDR</doc>
+               </value>
+               <value name="SS_INDIRECT_TCM" value="5"/>
+               <value name="SS_INDIRECT_STM" value="6"/>
+       </enum>
+       <reg32 offset="0" name="0">
+               <bitfield name="DST_OFF" low="0" high="15" type="uint"/>
+               <bitfield name="STATE_SRC" low="16" high="18" type="adreno_state_src"/>
+               <bitfield name="STATE_BLOCK" low="19" high="21" type="adreno_state_block"/>
+               <bitfield name="NUM_UNIT" low="22" high="31" type="uint"/>
+       </reg32>
+       <reg32 offset="1" name="1">
+               <bitfield name="STATE_TYPE" low="0" high="1" type="adreno_state_type"/>
+               <bitfield name="EXT_SRC_ADDR" low="2" high="31" shr="2"/>
+       </reg32>
+</domain>
+
+<domain name="CP_LOAD_STATE4" width="32" varset="chip">
+       <doc>Load state, a4xx+</doc>
+       <enum name="a4xx_state_block">
+               <!--
+               unknown: 0x7 and 0xf <- seen in compute shader
+
+               STATE_BLOCK = 0x6, STATE_TYPE = 0x2 possibly used for preemption?
+               Seen in some GL shaders.  Payload is NUM_UNIT dwords, and it contains
+               the gpuaddr of the following shader constants block.  DST_OFF seems
+               to specify which shader stage:
+
+                   16 -> vert
+                   36 -> tcs
+                   56 -> tes
+                   76 -> geom
+                   96 -> frag
+
+               Example:
+
+opcode: CP_LOAD_STATE4 (30) (12 dwords)
+        { DST_OFF = 16 | STATE_SRC = SS4_DIRECT | STATE_BLOCK = 0x6 | NUM_UNIT = 4 }
+        { STATE_TYPE = 0x2 | EXT_SRC_ADDR = 0 }
+        { EXT_SRC_ADDR_HI = 0 }
+                        0000: c0264100 00000000 00000000 00000000
+                0000: 70b0000b 01180010 00000002 00000000 c0264100 00000000 00000000 00000000
+
+opcode: CP_LOAD_STATE4 (30) (4 dwords)
+        { DST_OFF = 16 | STATE_SRC = SS4_INDIRECT | STATE_BLOCK = SB4_VS_SHADER | NUM_UNIT = 4 }
+        { STATE_TYPE = ST4_CONSTANTS | EXT_SRC_ADDR = 0xc0264100 }
+        { EXT_SRC_ADDR_HI = 0 }
+                        0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
+                        0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
+                        0000: 00000040 0000000c 00000000 00000000 00000000 00000000 00000000 00000000
+
+               STATE_BLOCK = 0x6, STATE_TYPE = 0x1, seen in compute shader.  NUM_UNITS * 2 dwords.
+
+                -->
+               <value name="SB4_VS_TEX"    value="0x0"/>
+               <value name="SB4_HS_TEX"    value="0x1"/>    <!-- aka. TCS -->
+               <value name="SB4_DS_TEX"    value="0x2"/>    <!-- aka. TES -->
+               <value name="SB4_GS_TEX"    value="0x3"/>
+               <value name="SB4_FS_TEX"    value="0x4"/>
+               <value name="SB4_CS_TEX"    value="0x5"/>
+               <value name="SB4_VS_SHADER" value="0x8"/>
+               <value name="SB4_HS_SHADER" value="0x9"/>
+               <value name="SB4_DS_SHADER" value="0xa"/>
+               <value name="SB4_GS_SHADER" value="0xb"/>
+               <value name="SB4_FS_SHADER" value="0xc"/>
+               <value name="SB4_CS_SHADER" value="0xd"/>
+               <!--
+               for SSBO, STATE_TYPE=0 appears to be addresses (four dwords each),
+               STATE_TYPE=1 sizes, STATE_TYPE=2 addresses again (two dwords each)
+
+               Compute has it's own dedicated SSBO state, it seems, but the rest
+               of the stages share state
+                -->
+               <value name="SB4_SSBO"   value="0xe"/>
+               <value name="SB4_CS_SSBO"   value="0xf"/>
+       </enum>
+       <enum name="a4xx_state_type">
+               <value name="ST4_SHADER" value="0"/>
+               <value name="ST4_CONSTANTS" value="1"/>
+               <value name="ST4_UBO" value="2"/>
+       </enum>
+       <enum name="a4xx_state_src">
+               <value name="SS4_DIRECT" value="0"/>
+               <value name="SS4_INDIRECT" value="2"/>
+       </enum>
+       <reg32 offset="0" name="0">
+               <bitfield name="DST_OFF" low="0" high="13" type="uint"/>
+               <bitfield name="STATE_SRC" low="16" high="17" type="a4xx_state_src"/>
+               <bitfield name="STATE_BLOCK" low="18" high="21" type="a4xx_state_block"/>
+               <bitfield name="NUM_UNIT" low="22" high="31" type="uint"/>
+       </reg32>
+       <reg32 offset="1" name="1">
+               <bitfield name="STATE_TYPE" low="0" high="1" type="a4xx_state_type"/>
+               <bitfield name="EXT_SRC_ADDR" low="2" high="31" shr="2"/>
+       </reg32>
+       <reg32 offset="2" name="2" varset="chip" variants="A5XX-">
+               <bitfield name="EXT_SRC_ADDR_HI" low="0" high="31" shr="0"/>
+       </reg32>
+</domain>
+
+<!-- looks basically same CP_LOAD_STATE4 -->
+<domain name="CP_LOAD_STATE6" width="32" varset="chip">
+       <doc>Load state, a6xx+</doc>
+       <enum name="a6xx_state_block">
+               <value name="SB6_VS_TEX"    value="0x0"/>
+               <value name="SB6_HS_TEX"    value="0x1"/>    <!-- aka. TCS -->
+               <value name="SB6_DS_TEX"    value="0x2"/>    <!-- aka. TES -->
+               <value name="SB6_GS_TEX"    value="0x3"/>
+               <value name="SB6_FS_TEX"    value="0x4"/>
+               <value name="SB6_CS_TEX"    value="0x5"/>
+               <value name="SB6_VS_SHADER" value="0x8"/>
+               <value name="SB6_HS_SHADER" value="0x9"/>
+               <value name="SB6_DS_SHADER" value="0xa"/>
+               <value name="SB6_GS_SHADER" value="0xb"/>
+               <value name="SB6_FS_SHADER" value="0xc"/>
+               <value name="SB6_CS_SHADER" value="0xd"/>
+               <value name="SB6_IBO"       value="0xe"/>
+               <value name="SB6_CS_IBO"    value="0xf"/>
+       </enum>
+       <enum name="a6xx_state_type">
+               <value name="ST6_SHADER" value="0"/>
+               <value name="ST6_CONSTANTS" value="1"/>
+               <value name="ST6_UBO" value="2"/>
+               <value name="ST6_IBO" value="3"/>
+       </enum>
+       <enum name="a6xx_state_src">
+               <value name="SS6_DIRECT" value="0"/>
+               <value name="SS6_BINDLESS" value="1"/> <!-- TODO does this exist on a4xx/a5xx? -->
+               <value name="SS6_INDIRECT" value="2"/>
+               <doc>
+               SS6_UBO used by the a6xx vulkan blob with tesselation constants
+               in this case, EXT_SRC_ADDR is (ubo_id shl 16 | offset)
+               to load constants from a UBO loaded with DST_OFF = 14 and offset 0,
+               EXT_SRC_ADDR = 0xe0000
+               (offset is a guess, should be in bytes given that maxUniformBufferRange=64k)
+               </doc>
+               <value name="SS6_UBO" value="3"/>
+       </enum>
+       <reg32 offset="0" name="0">
+               <bitfield name="DST_OFF" low="0" high="13" type="uint"/>
+               <bitfield name="STATE_TYPE" low="14" high="15" type="a6xx_state_type"/>
+               <bitfield name="STATE_SRC" low="16" high="17" type="a6xx_state_src"/>
+               <bitfield name="STATE_BLOCK" low="18" high="21" type="a6xx_state_block"/>
+               <bitfield name="NUM_UNIT" low="22" high="31" type="uint"/>
+       </reg32>
+       <reg32 offset="1" name="1">
+               <bitfield name="EXT_SRC_ADDR" low="2" high="31" shr="2"/>
+       </reg32>
+       <reg32 offset="2" name="2">
+               <bitfield name="EXT_SRC_ADDR_HI" low="0" high="31" shr="0"/>
+       </reg32>
+       <reg64 offset="1" name="EXT_SRC_ADDR" type="address"/>
+</domain>
+
+<bitset name="vgt_draw_initiator" inline="yes">
+       <bitfield name="PRIM_TYPE" low="0" high="5" type="pc_di_primtype"/>
+       <bitfield name="SOURCE_SELECT" low="6" high="7" type="pc_di_src_sel"/>
+       <bitfield name="VIS_CULL" low="9" high="10" type="pc_di_vis_cull_mode"/>
+       <bitfield name="INDEX_SIZE" pos="11" type="pc_di_index_size"/>
+       <bitfield name="NOT_EOP" pos="12" type="boolean"/>
+       <bitfield name="SMALL_INDEX" pos="13" type="boolean"/>
+       <bitfield name="PRE_DRAW_INITIATOR_ENABLE" pos="14" type="boolean"/>
+       <bitfield name="NUM_INSTANCES" low="24" high="31" type="uint"/>
+</bitset>
+
+<!-- changed on a4xx: -->
+<enum name="a4xx_index_size">
+       <value name="INDEX4_SIZE_8_BIT" value="0"/>
+       <value name="INDEX4_SIZE_16_BIT" value="1"/>
+       <value name="INDEX4_SIZE_32_BIT" value="2"/>
+</enum>
+
+<enum name="a6xx_patch_type">
+  <value name="TESS_QUADS" value="0"/>
+  <value name="TESS_TRIANGLES" value="1"/>
+  <value name="TESS_ISOLINES" value="2"/>
+</enum>
+
+<bitset name="vgt_draw_initiator_a4xx" inline="yes">
+       <!-- When the 0x20 bit is set, it's the number of patch vertices - 1 -->
+       <bitfield name="PRIM_TYPE" low="0" high="5" type="pc_di_primtype"/>
+       <bitfield name="SOURCE_SELECT" low="6" high="7" type="pc_di_src_sel"/>
+       <bitfield name="VIS_CULL" low="8" high="9" type="pc_di_vis_cull_mode"/>
+       <bitfield name="INDEX_SIZE" low="10" high="11" type="a4xx_index_size"/>
+       <bitfield name="PATCH_TYPE" low="12" high="13" type="a6xx_patch_type"/>
+       <bitfield name="GS_ENABLE" pos="16" type="boolean"/>
+       <bitfield name="TESS_ENABLE" pos="17" type="boolean"/>
+</bitset>
+
+<domain name="CP_DRAW_INDX" width="32">
+       <reg32 offset="0" name="0">
+               <bitfield name="VIZ_QUERY" low="0" high="31"/>
+       </reg32>
+       <reg32 offset="1" name="1" type="vgt_draw_initiator"/>
+       <reg32 offset="2" name="2">
+               <bitfield name="NUM_INDICES" low="0" high="31" type="uint"/>
+       </reg32>
+       <reg32 offset="3" name="3">
+               <bitfield name="INDX_BASE" low="0" high="31"/>
+       </reg32>
+       <reg32 offset="4" name="4">
+               <bitfield name="INDX_SIZE" low="0" high="31"/>
+       </reg32>
+</domain>
+
+<domain name="CP_DRAW_INDX_2" width="32">
+       <reg32 offset="0" name="0">
+               <bitfield name="VIZ_QUERY" low="0" high="31"/>
+       </reg32>
+       <reg32 offset="1" name="1" type="vgt_draw_initiator"/>
+       <reg32 offset="2" name="2">
+               <bitfield name="NUM_INDICES" low="0" high="31" type="uint"/>
+       </reg32>
+       <!-- followed by NUM_INDICES indices.. -->
+</domain>
+
+<domain name="CP_DRAW_INDX_OFFSET" width="32">
+       <reg32 offset="0" name="0" type="vgt_draw_initiator_a4xx"/>
+       <reg32 offset="1" name="1">
+               <bitfield name="NUM_INSTANCES" low="0" high="31" type="uint"/>
+       </reg32>
+       <reg32 offset="2" name="2">
+               <bitfield name="NUM_INDICES" low="0" high="31" type="uint"/>
+       </reg32>
+       <reg32 offset="3" name="3">
+               <bitfield name="FIRST_INDX" low="0" high="31"/>
+       </reg32>
+
+       <stripe varset="chip" variants="A5XX-">
+               <reg32 offset="4" name="4">
+                       <bitfield name="INDX_BASE_LO" low="0" high="31"/>
+               </reg32>
+               <reg32 offset="5" name="5">
+                       <bitfield name="INDX_BASE_HI" low="0" high="31"/>
+               </reg32>
+               <reg64 offset="4" name="INDX_BASE" type="address"/>
+               <reg32 offset="6" name="6">
+                       <!-- max # of elements in index buffer -->
+                       <bitfield name="MAX_INDICES" low="0" high="31"/>
+               </reg32>
+       </stripe>
+
+       <reg32 offset="4" name="4">
+               <bitfield name="INDX_BASE" low="0" high="31" type="address"/>
+       </reg32>
+
+       <reg32 offset="5" name="5">
+               <bitfield name="INDX_SIZE" low="0" high="31" type="uint"/>
+       </reg32>
+</domain>
+
+<domain name="CP_DRAW_INDIRECT" width="32" varset="chip" prefix="chip" variants="A4XX-">
+       <reg32 offset="0" name="0" type="vgt_draw_initiator_a4xx"/>
+       <stripe varset="chip" variants="A4XX">
+               <reg32 offset="1" name="1">
+                       <bitfield name="INDIRECT" low="0" high="31"/>
+               </reg32>
+       </stripe>
+       <stripe varset="chip" variants="A5XX-">
+               <reg32 offset="1" name="1">
+                       <bitfield name="INDIRECT_LO" low="0" high="31"/>
+               </reg32>
+               <reg32 offset="2" name="2">
+                       <bitfield name="INDIRECT_HI" low="0" high="31"/>
+               </reg32>
+               <reg64 offset="1" name="INDIRECT" type="address"/>
+       </stripe>
+</domain>
+
+<domain name="CP_DRAW_INDX_INDIRECT" width="32" varset="chip" prefix="chip" variants="A4XX-">
+       <reg32 offset="0" name="0" type="vgt_draw_initiator_a4xx"/>
+       <stripe varset="chip" variants="A4XX">
+               <reg32 offset="1" name="1">
+                       <bitfield name="INDX_BASE" low="0" high="31"/>
+               </reg32>
+               <reg32 offset="2" name="2">
+                       <!-- max # of bytes in index buffer -->
+                       <bitfield name="INDX_SIZE" low="0" high="31" type="uint"/>
+               </reg32>
+               <reg32 offset="3" name="3">
+                       <bitfield name="INDIRECT" low="0" high="31"/>
+               </reg32>
+       </stripe>
+       <stripe varset="chip" variants="A5XX-">
+               <reg32 offset="1" name="1">
+                       <bitfield name="INDX_BASE_LO" low="0" high="31"/>
+               </reg32>
+               <reg32 offset="2" name="2">
+                       <bitfield name="INDX_BASE_HI" low="0" high="31"/>
+               </reg32>
+               <reg64 offset="1" name="INDX_BASE" type="address"/>
+               <reg32 offset="3" name="3">
+                       <!-- max # of elements in index buffer -->
+                       <bitfield name="MAX_INDICES" low="0" high="31" type="uint"/>
+               </reg32>
+               <reg32 offset="4" name="4">
+                       <bitfield name="INDIRECT_LO" low="0" high="31"/>
+               </reg32>
+               <reg32 offset="5" name="5">
+                       <bitfield name="INDIRECT_HI" low="0" high="31"/>
+               </reg32>
+               <reg64 offset="4" name="INDIRECT" type="address"/>
+       </stripe>
+</domain>
+
+<domain name="CP_DRAW_INDIRECT_MULTI" width="32" varset="chip" prefix="chip" variants="A6XX-">
+       <enum name="a6xx_draw_indirect_opcode">
+               <value name="INDIRECT_OP_NORMAL"  value="0x2"/>
+               <value name="INDIRECT_OP_INDEXED" value="0x4"/>
+               <value name="INDIRECT_OP_INDIRECT_COUNT" value="0x6"/>
+               <value name="INDIRECT_OP_INDIRECT_COUNT_INDEXED" value="0x7"/>
+       </enum>
+       <reg32 offset="0" name="0" type="vgt_draw_initiator_a4xx"/>
+       <reg32 offset="1" name="1">
+               <bitfield name="OPCODE" low="0" high="3" type="a6xx_draw_indirect_opcode" addvariant="yes"/>
+               <doc>
+               DST_OFF same as in CP_LOAD_STATE6 - vec4 VS const at this offset will
+               be updated for each draw to {draw_id, first_vertex, first_instance, 0}
+               value of 0 disables it
+               </doc>
+               <bitfield name="DST_OFF" low="8" high="21" type="hex"/>
+       </reg32>
+       <reg32 offset="2" name="DRAW_COUNT" type="uint"/>
+       <stripe varset="a6xx_draw_indirect_opcode" variants="INDIRECT_OP_NORMAL">
+               <reg64 offset="3" name="INDIRECT" type="address"/>
+               <reg32 offset="5" name="STRIDE" type="uint"/>
+       </stripe>
+       <stripe varset="a6xx_draw_indirect_opcode" variants="INDIRECT_OP_INDEXED">
+               <reg64 offset="3" name="INDEX" type="address"/>
+               <reg32 offset="5" name="MAX_INDICES" type="uint"/>
+               <reg64 offset="6" name="INDIRECT" type="address"/>
+               <reg32 offset="8" name="STRIDE" type="uint"/>
+       </stripe>
+       <stripe varset="a6xx_draw_indirect_opcode" variants="INDIRECT_OP_INDIRECT_COUNT">
+               <reg64 offset="3" name="INDIRECT" type="address"/>
+               <reg64 offset="5" name="INDIRECT_COUNT" type="address"/>
+               <reg32 offset="7" name="STRIDE" type="uint"/>
+       </stripe>
+       <stripe varset="a6xx_draw_indirect_opcode" variants="INDIRECT_OP_INDIRECT_COUNT_INDEXED">
+               <reg64 offset="3" name="INDEX" type="address"/>
+               <reg32 offset="5" name="MAX_INDICES" type="uint"/>
+               <reg64 offset="6" name="INDIRECT" type="address"/>
+               <reg64 offset="8" name="INDIRECT_COUNT" type="address"/>
+               <reg32 offset="10" name="STRIDE" type="uint"/>
+       </stripe>
+</domain>
+
+<domain name="CP_SET_DRAW_STATE" width="32" varset="chip" variants="A4XX-">
+       <array offset="0" name="" stride="3" length="100">
+               <reg32 offset="0" name="0">
+                       <bitfield name="COUNT" low="0" high="15" type="uint"/>
+                       <bitfield name="DIRTY" pos="16" type="boolean"/>
+                       <bitfield name="DISABLE" pos="17" type="boolean"/>
+                       <bitfield name="DISABLE_ALL_GROUPS" pos="18" type="boolean"/>
+                       <bitfield name="LOAD_IMMED" pos="19" type="boolean"/>
+                       <bitfield name="BINNING" pos="20" varset="chip" variants="A6XX-" type="boolean"/>
+                       <bitfield name="GMEM" pos="21" varset="chip" variants="A6XX-" type="boolean"/>
+                       <bitfield name="SYSMEM" pos="22" varset="chip" variants="A6XX-" type="boolean"/>
+                       <bitfield name="GROUP_ID" low="24" high="28" type="uint"/>
+               </reg32>
+               <reg32 offset="1" name="1">
+                       <bitfield name="ADDR_LO" low="0" high="31" type="hex"/>
+               </reg32>
+               <reg32 offset="2" name="2" varset="chip" variants="A5XX-">
+                       <bitfield name="ADDR_HI" low="0" high="31" type="hex"/>
+               </reg32>
+       </array>
+</domain>
+
+<domain name="CP_SET_BIN" width="32">
+       <doc>value at offset 0 always seems to be 0x00000000..</doc>
+       <reg32 offset="0" name="0"/>
+       <reg32 offset="1" name="1">
+               <bitfield name="X1" low="0" high="15" type="uint"/>
+               <bitfield name="Y1" low="16" high="31" type="uint"/>
+       </reg32>
+       <reg32 offset="2" name="2">
+               <bitfield name="X2" low="0" high="15" type="uint"/>
+               <bitfield name="Y2" low="16" high="31" type="uint"/>
+       </reg32>
+</domain>
+
+<domain name="CP_SET_BIN_DATA" width="32">
+       <reg32 offset="0" name="0">
+               <!-- corresponds to VSC_PIPE[n].DATA_ADDR -->
+               <bitfield name="BIN_DATA_ADDR" low="0" high="31" type="hex"/>
+       </reg32>
+       <reg32 offset="1" name="1">
+               <!-- seesm to correspond to VSC_SIZE_ADDRESS -->
+               <bitfield name="BIN_SIZE_ADDRESS" low="0" high="31"/>
+       </reg32>
+</domain>
+
+<domain name="CP_SET_BIN_DATA5" width="32">
+       <reg32 offset="0" name="0">
+               <!-- equiv to PC_VSTREAM_CONTROL.SIZE on a3xx/a4xx: -->
+               <bitfield name="VSC_SIZE" low="16" high="21" type="uint"/>
+               <!-- equiv to PC_VSTREAM_CONTROL.N on a3xx/a4xx: -->
+               <bitfield name="VSC_N" low="22" high="26" type="uint"/>
+       </reg32>
+       <!-- BIN_DATA_ADDR -> VSC_PIPE[p].DATA_ADDRESS -->
+       <reg32 offset="1" name="1">
+               <bitfield name="BIN_DATA_ADDR_LO" low="0" high="31" type="hex"/>
+       </reg32>
+       <reg32 offset="2" name="2">
+               <bitfield name="BIN_DATA_ADDR_HI" low="0" high="31" type="hex"/>
+       </reg32>
+       <!-- BIN_SIZE_ADDRESS -> VSC_SIZE_ADDRESS + (p * 4)-->
+       <reg32 offset="3" name="3">
+               <bitfield name="BIN_SIZE_ADDRESS_LO" low="0" high="31"/>
+       </reg32>
+       <reg32 offset="4" name="4">
+               <bitfield name="BIN_SIZE_ADDRESS_HI" low="0" high="31"/>
+       </reg32>
+       <!-- new on a6xx, where BIN_DATA_ADDR is the DRAW_STRM: -->
+       <reg32 offset="5" name="5">
+               <bitfield name="BIN_PRIM_STRM_LO" low="0" high="31"/>
+       </reg32>
+       <reg32 offset="6" name="6">
+               <bitfield name="BIN_PRIM_STRM_HI" low="0" high="31"/>
+       </reg32>
+</domain>
+
+<domain name="CP_SET_BIN_DATA5_OFFSET" width="32">
+       <doc>
+                Like CP_SET_BIN_DATA5, but set the pointers as offsets from the
+                pointers stored in VSC_PIPE_{DATA,DATA2,SIZE}_ADDRESS. Useful
+                for Vulkan where these values aren't known when the command
+                stream is recorded.
+       </doc>
+       <reg32 offset="0" name="0">
+               <!-- equiv to PC_VSTREAM_CONTROL.SIZE on a3xx/a4xx: -->
+               <bitfield name="VSC_SIZE" low="16" high="21" type="uint"/>
+               <!-- equiv to PC_VSTREAM_CONTROL.N on a3xx/a4xx: -->
+               <bitfield name="VSC_N" low="22" high="26" type="uint"/>
+       </reg32>
+       <!-- BIN_DATA_ADDR -> VSC_PIPE[p].DATA_ADDRESS -->
+       <reg32 offset="1" name="1">
+               <bitfield name="BIN_DATA_OFFSET" low="0" high="31" type="uint"/>
+       </reg32>
+       <!-- BIN_SIZE_ADDRESS -> VSC_SIZE_ADDRESS + (p * 4)-->
+       <reg32 offset="2" name="2">
+               <bitfield name="BIN_SIZE_OFFSET" low="0" high="31" type="uint"/>
+       </reg32>
+       <!-- BIN_DATA2_ADDR -> VSC_PIPE[p].DATA2_ADDRESS -->
+       <reg32 offset="3" name="3">
+               <bitfield name="BIN_DATA2_OFFSET" low="0" high="31" type="uint"/>
+       </reg32>
+</domain>
+
+<domain name="CP_REG_RMW" width="32">
+       <doc>
+                Modifies DST_REG using two sources that can either be registers
+                or immediates. If SRC1_ADD is set, then do the following:
+
+                       $dst = (($dst &amp; $src0) rot $rotate) + $src1
+
+               Otherwise:
+
+                       $dst = (($dst &amp; $src0) rot $rotate) | $src1
+
+               Here "rot" means rotate left.
+       </doc>
+       <reg32 offset="0" name="0">
+               <bitfield name="DST_REG" low="0" high="17" type="hex"/>
+               <bitfield name="ROTATE" low="24" high="28" type="uint"/>
+               <bitfield name="SRC1_ADD" pos="29" type="boolean"/>
+               <bitfield name="SRC1_IS_REG" pos="30" type="boolean"/>
+               <bitfield name="SRC0_IS_REG" pos="31" type="boolean"/>
+       </reg32>
+       <reg32 offset="1" name="1">
+               <bitfield name="SRC0" low="0" high="31" type="uint"/>
+       </reg32>
+       <reg32 offset="2" name="2">
+               <bitfield name="SRC1" low="0" high="31" type="uint"/>
+       </reg32>
+</domain>
+
+<domain name="CP_REG_TO_MEM" width="32">
+       <reg32 offset="0" name="0">
+               <bitfield name="REG" low="0" high="17" type="hex"/>
+               <!-- number of registers/dwords copied is max(CNT, 1). -->
+               <bitfield name="CNT" low="18" high="29" type="uint"/>
+               <bitfield name="64B" pos="30" type="boolean"/>
+               <bitfield name="ACCUMULATE" pos="31" type="boolean"/>
+       </reg32>
+       <reg32 offset="1" name="1">
+               <bitfield name="DEST" low="0" high="31"/>
+       </reg32>
+       <reg32 offset="2" name="2" varset="chip" variants="A5XX-">
+               <bitfield name="DEST_HI" low="0" high="31"/>
+       </reg32>
+</domain>
+
+<domain name="CP_REG_TO_MEM_OFFSET_REG" width="32">
+       <doc>
+                Like CP_REG_TO_MEM, but the memory address to write to can be
+                offsetted using either one or two registers or scratch
+                registers.
+       </doc>
+       <reg32 offset="0" name="0">
+               <bitfield name="REG" low="0" high="17" type="hex"/>
+               <!-- number of registers/dwords copied is max(CNT, 1). -->
+               <bitfield name="CNT" low="18" high="29" type="uint"/>
+               <bitfield name="64B" pos="30" type="boolean"/>
+               <bitfield name="ACCUMULATE" pos="31" type="boolean"/>
+       </reg32>
+       <reg32 offset="1" name="1">
+               <bitfield name="DEST" low="0" high="31"/>
+       </reg32>
+       <reg32 offset="2" name="2" varset="chip" variants="A5XX-">
+               <bitfield name="DEST_HI" low="0" high="31"/>
+       </reg32>
+       <reg32 offset="3" name="3">
+               <bitfield name="OFFSET0" low="0" high="17" type="hex"/>
+               <bitfield name="OFFSET0_SCRATCH" pos="19" type="boolean"/>
+       </reg32>
+       <!-- followed by an optional identical OFFSET1 dword -->
+</domain>
+
+<domain name="CP_REG_TO_MEM_OFFSET_MEM" width="32">
+       <doc>
+                Like CP_REG_TO_MEM, but the memory address to write to can be
+                offsetted using a DWORD in memory.
+       </doc>
+       <reg32 offset="0" name="0">
+               <bitfield name="REG" low="0" high="17" type="hex"/>
+               <!-- number of registers/dwords copied is max(CNT, 1). -->
+               <bitfield name="CNT" low="18" high="29" type="uint"/>
+               <bitfield name="64B" pos="30" type="boolean"/>
+               <bitfield name="ACCUMULATE" pos="31" type="boolean"/>
+       </reg32>
+       <reg32 offset="1" name="1">
+               <bitfield name="DEST" low="0" high="31"/>
+       </reg32>
+       <reg32 offset="2" name="2" varset="chip" variants="A5XX-">
+               <bitfield name="DEST_HI" low="0" high="31"/>
+       </reg32>
+       <reg32 offset="3" name="3">
+               <bitfield name="OFFSET_LO" low="0" high="31" type="hex"/>
+       </reg32>
+       <reg32 offset="4" name="4">
+               <bitfield name="OFFSET_HI" low="0" high="31" type="hex"/>
+       </reg32>
+</domain>
+
+<domain name="CP_MEM_TO_REG" width="32">
+       <reg32 offset="0" name="0">
+               <bitfield name="REG" low="0" high="17" type="hex"/>
+               <!-- number of registers/dwords copied is max(CNT, 1). -->
+               <bitfield name="CNT" low="19" high="29" type="uint"/>
+               <!-- shift each DWORD left by 2 while copying -->
+               <bitfield name="SHIFT_BY_2" pos="30" type="boolean"/>
+               <!-- does the same thing as CP_MEM_TO_MEM::UNK31 -->
+               <bitfield name="UNK31" pos="31" type="boolean"/>
+       </reg32>
+       <reg32 offset="1" name="1">
+               <bitfield name="SRC" low="0" high="31"/>
+       </reg32>
+       <reg32 offset="2" name="2" varset="chip" variants="A5XX-">
+               <bitfield name="SRC_HI" low="0" high="31"/>
+       </reg32>
+</domain>
+
+<domain name="CP_MEM_TO_MEM" width="32">
+       <reg32 offset="0" name="0">
+               <!--
+               not sure how many src operands we have, but the low
+               bits negate the n'th src argument.
+                -->
+               <bitfield name="NEG_A" pos="0" type="boolean"/>
+               <bitfield name="NEG_B" pos="1" type="boolean"/>
+               <bitfield name="NEG_C" pos="2" type="boolean"/>
+
+               <!-- if set treat src/dst as 64bit values -->
+               <bitfield name="DOUBLE" pos="29" type="boolean"/>
+               <!-- execute CP_WAIT_FOR_MEM_WRITES beforehand -->
+               <bitfield name="WAIT_FOR_MEM_WRITES" pos="30" type="boolean"/>
+               <!-- some other kind of wait -->
+               <bitfield name="UNK31" pos="31" type="boolean"/>
+       </reg32>
+       <!--
+       followed by sequence of addresses.. the first is the
+       destination and the rest are N src addresses which are
+       summed (after being negated if NEG_x bit set) allowing
+       to do things like 'result += end - start' (which turns
+       out to be useful for queries and accumulating results
+       across multiple tiles)
+        -->
+</domain>
+
+<domain name="CP_MEMCPY" width="32">
+       <reg32 offset="0" name="0">
+               <bitfield name="DWORDS" low="0" high="31" type="uint"/>
+       </reg32>
+       <reg32 offset="1" name="1">
+               <bitfield name="SRC_LO" low="0" high="31" type="hex"/>
+       </reg32>
+       <reg32 offset="2" name="2">
+               <bitfield name="SRC_HI" low="0" high="31" type="hex"/>
+       </reg32>
+       <reg32 offset="3" name="3">
+               <bitfield name="DST_LO" low="0" high="31" type="hex"/>
+       </reg32>
+       <reg32 offset="4" name="4">
+               <bitfield name="DST_HI" low="0" high="31" type="hex"/>
+       </reg32>
+</domain>
+
+<domain name="CP_REG_TO_SCRATCH" width="32">
+       <reg32 offset="0" name="0">
+               <bitfield name="REG" low="0" high="17" type="hex"/>
+               <bitfield name="SCRATCH" low="20" high="22" type="uint"/>
+               <!-- number of registers/dwords copied is CNT + 1. -->
+               <bitfield name="CNT" low="24" high="26" type="uint"/>
+       </reg32>
+</domain>
+
+<domain name="CP_SCRATCH_TO_REG" width="32">
+       <reg32 offset="0" name="0">
+               <bitfield name="REG" low="0" high="17" type="hex"/>
+               <!-- note: CP_MEM_TO_REG always sets this when writing to the register -->
+               <bitfield name="UNK18" pos="18" type="boolean"/>
+               <bitfield name="SCRATCH" low="20" high="22" type="uint"/>
+               <!-- number of registers/dwords copied is CNT + 1. -->
+               <bitfield name="CNT" low="24" high="26" type="uint"/>
+       </reg32>
+</domain>
+
+<domain name="CP_SCRATCH_WRITE" width="32">
+       <reg32 offset="0" name="0">
+               <bitfield name="SCRATCH" low="20" high="22" type="uint"/>
+       </reg32>
+       <!-- followed by one or more DWORDs to write to scratch registers -->
+</domain>
+
+<domain name="CP_MEM_WRITE" width="32">
+       <reg32 offset="0" name="0">
+               <bitfield name="ADDR_LO" low="0" high="31"/>
+       </reg32>
+       <reg32 offset="1" name="1">
+               <bitfield name="ADDR_HI" low="0" high="31"/>
+       </reg32>
+       <!-- followed by the DWORDs to write -->
+</domain>
+
+<enum name="cp_cond_function">
+       <value value="0" name="WRITE_ALWAYS"/>
+       <value value="1" name="WRITE_LT"/>
+       <value value="2" name="WRITE_LE"/>
+       <value value="3" name="WRITE_EQ"/>
+       <value value="4" name="WRITE_NE"/>
+       <value value="5" name="WRITE_GE"/>
+       <value value="6" name="WRITE_GT"/>
+</enum>
+
+<domain name="CP_COND_WRITE" width="32">
+       <reg32 offset="0" name="0">
+               <bitfield name="FUNCTION" low="0" high="2" type="cp_cond_function"/>
+               <bitfield name="POLL_MEMORY" pos="4" type="boolean"/>
+               <bitfield name="WRITE_MEMORY" pos="8" type="boolean"/>
+       </reg32>
+       <reg32 offset="1" name="1">
+               <bitfield name="POLL_ADDR" low="0" high="31" type="hex"/>
+       </reg32>
+       <reg32 offset="2" name="2">
+               <bitfield name="REF" low="0" high="31"/>
+       </reg32>
+       <reg32 offset="3" name="3">
+               <bitfield name="MASK" low="0" high="31"/>
+       </reg32>
+       <reg32 offset="4" name="4">
+               <bitfield name="WRITE_ADDR" low="0" high="31" type="hex"/>
+       </reg32>
+       <reg32 offset="5" name="5">
+               <bitfield name="WRITE_DATA" low="0" high="31"/>
+       </reg32>
+</domain>
+
+<domain name="CP_COND_WRITE5" width="32">
+       <reg32 offset="0" name="0">
+               <bitfield name="FUNCTION" low="0" high="2" type="cp_cond_function"/>
+               <bitfield name="SIGNED_COMPARE" pos="3" type="boolean"/>
+                <!-- if both POLL_MEMORY and POLL_SCRATCH are false, it polls a register at POLL_ADDR_LO instead. -->
+               <bitfield name="POLL_MEMORY" pos="4" type="boolean"/>
+               <bitfield name="POLL_SCRATCH" pos="5" type="boolean"/>
+               <bitfield name="WRITE_MEMORY" pos="8" type="boolean"/>
+       </reg32>
+       <reg32 offset="1" name="1">
+               <bitfield name="POLL_ADDR_LO" low="0" high="31" type="hex"/>
+       </reg32>
+       <reg32 offset="2" name="2">
+               <bitfield name="POLL_ADDR_HI" low="0" high="31" type="hex"/>
+       </reg32>
+       <reg32 offset="3" name="3">
+               <bitfield name="REF" low="0" high="31"/>
+       </reg32>
+       <reg32 offset="4" name="4">
+               <bitfield name="MASK" low="0" high="31"/>
+       </reg32>
+       <reg32 offset="5" name="5">
+               <bitfield name="WRITE_ADDR_LO" low="0" high="31" type="hex"/>
+       </reg32>
+       <reg32 offset="6" name="6">
+               <bitfield name="WRITE_ADDR_HI" low="0" high="31" type="hex"/>
+       </reg32>
+       <reg32 offset="7" name="7">
+               <bitfield name="WRITE_DATA" low="0" high="31"/>
+       </reg32>
+</domain>
+
+<domain name="CP_WAIT_MEM_GTE" width="32">
+        <doc>
+                Wait until a memory value is greater than or equal to the
+                reference, using signed comparison.
+       </doc>
+       <reg32 offset="0" name="0">
+               <!-- Reserved for flags, presumably? Unused in FW -->
+               <bitfield name="RESERVED" low="0" high="31" type="hex"/>
+       </reg32>
+       <reg32 offset="1" name="1">
+               <bitfield name="POLL_ADDR_LO" low="0" high="31" type="hex"/>
+       </reg32>
+       <reg32 offset="2" name="2">
+               <bitfield name="POLL_ADDR_HI" low="0" high="31" type="hex"/>
+       </reg32>
+       <reg32 offset="3" name="3">
+               <bitfield name="REF" low="0" high="31"/>
+       </reg32>
+</domain>
+
+<domain name="CP_WAIT_REG_MEM" width="32">
+        <doc>
+                This uses the same internal comparison as CP_COND_WRITE,
+                but waits until the comparison is true instead. It busy-loops in
+                the CP for the given number of cycles before trying again.
+       </doc>
+       <reg32 offset="0" name="0">
+               <bitfield name="FUNCTION" low="0" high="2" type="cp_cond_function"/>
+               <bitfield name="SIGNED_COMPARE" pos="3" type="boolean"/>
+               <bitfield name="POLL_MEMORY" pos="4" type="boolean"/>
+               <bitfield name="POLL_SCRATCH" pos="5" type="boolean"/>
+               <bitfield name="WRITE_MEMORY" pos="8" type="boolean"/>
+       </reg32>
+       <reg32 offset="1" name="1">
+               <bitfield name="POLL_ADDR_LO" low="0" high="31" type="hex"/>
+       </reg32>
+       <reg32 offset="2" name="2">
+               <bitfield name="POLL_ADDR_HI" low="0" high="31" type="hex"/>
+       </reg32>
+       <reg32 offset="3" name="3">
+               <bitfield name="REF" low="0" high="31"/>
+       </reg32>
+       <reg32 offset="4" name="4">
+               <bitfield name="MASK" low="0" high="31"/>
+       </reg32>
+       <reg32 offset="5" name="5">
+               <bitfield name="DELAY_LOOP_CYCLES" low="0" high="31"/>
+       </reg32>
+</domain>
+
+<domain name="CP_WAIT_TWO_REGS" width="32">
+       <doc>
+               Waits for REG0 to not be 0 or REG1 to not equal REF
+       </doc>
+       <reg32 offset="0" name="0">
+               <bitfield name="REG0" low="0" high="17" type="hex"/>
+       </reg32>
+       <reg32 offset="1" name="1">
+               <bitfield name="REG1" low="0" high="17" type="hex"/>
+       </reg32>
+       <reg32 offset="2" name="2">
+               <bitfield name="REF" low="0" high="31" type="uint"/>
+       </reg32>
+</domain>
+
+<domain name="CP_DISPATCH_COMPUTE" width="32">
+       <reg32 offset="0" name="0"/>
+       <reg32 offset="1" name="1">
+               <bitfield name="X" low="0" high="31"/>
+       </reg32>
+       <reg32 offset="2" name="2">
+               <bitfield name="Y" low="0" high="31"/>
+       </reg32>
+       <reg32 offset="3" name="3">
+               <bitfield name="Z" low="0" high="31"/>
+       </reg32>
+</domain>
+
+<domain name="CP_SET_RENDER_MODE" width="32">
+       <enum name="render_mode_cmd">
+               <value value="1" name="BYPASS"/>
+               <value value="2" name="BINNING"/>
+               <value value="3" name="GMEM"/>
+               <value value="5" name="BLIT2D"/>
+               <!-- placeholder name.. used when CP_BLIT packets with BLIT_OP_SCALE?? -->
+               <value value="7" name="BLIT2DSCALE"/>
+               <!-- 8 set before going back to BYPASS exiting 2D -->
+               <value value="8" name="END2D"/>
+       </enum>
+       <reg32 offset="0" name="0">
+               <bitfield name="MODE" low="0" high="8" type="render_mode_cmd"/>
+               <!--
+               normally 0x1/0x3, sometimes see 0x5/0x8 with unknown registers in
+               0x21xx range.. possibly (at least some) a5xx variants have a
+               2d core?
+                -->
+       </reg32>
+       <!-- I think first buffer is for GPU to save context in case of ctx switch? -->
+       <reg32 offset="1" name="1">
+               <bitfield name="ADDR_0_LO" low="0" high="31"/>
+       </reg32>
+       <reg32 offset="2" name="2">
+               <bitfield name="ADDR_0_HI" low="0" high="31"/>
+       </reg32>
+       <reg32 offset="3" name="3">
+               <!--
+               set when in GMEM.. maybe indicates GMEM contents need to be
+               preserved on ctx switch?
+                -->
+               <bitfield name="VSC_ENABLE" pos="3" type="boolean"/>
+               <bitfield name="GMEM_ENABLE" pos="4" type="boolean"/>
+       </reg32>
+       <reg32 offset="4" name="4"/>
+       <!-- second buffer looks like some cmdstream.. length in dwords: -->
+       <reg32 offset="5" name="5">
+               <bitfield name="ADDR_1_LEN" low="0" high="31" type="uint"/>
+       </reg32>
+       <reg32 offset="6" name="6">
+               <bitfield name="ADDR_1_LO" low="0" high="31"/>
+       </reg32>
+       <reg32 offset="7" name="7">
+               <bitfield name="ADDR_1_HI" low="0" high="31"/>"
+       </reg32>
+</domain>
+
+<!-- this looks fairly similar to CP_SET_RENDER_MODE minus first dword -->
+<domain name="CP_COMPUTE_CHECKPOINT" width="32">
+       <!-- I think first buffer is for GPU to save context in case of ctx switch? -->
+       <reg32 offset="0" name="0">
+               <bitfield name="ADDR_0_LO" low="0" high="31"/>
+       </reg32>
+       <reg32 offset="1" name="1">
+               <bitfield name="ADDR_0_HI" low="0" high="31"/>
+       </reg32>
+       <reg32 offset="2" name="2">
+       </reg32>
+       <!-- second buffer looks like some cmdstream.. length in dwords: -->
+       <reg32 offset="3" name="3">
+               <bitfield name="ADDR_1_LEN" low="0" high="31" type="uint"/>
+       </reg32>
+       <reg32 offset="4" name="4"/>
+       <reg32 offset="5" name="5">
+               <bitfield name="ADDR_1_LO" low="0" high="31"/>
+       </reg32>
+       <reg32 offset="6" name="6">
+               <bitfield name="ADDR_1_HI" low="0" high="31"/>"
+       </reg32>
+       <reg32 offset="7" name="7"/>
+</domain>
+
+<domain name="CP_PERFCOUNTER_ACTION" width="32">
+       <reg32 offset="0" name="0">
+       </reg32>
+       <reg32 offset="1" name="1">
+               <bitfield name="ADDR_0_LO" low="0" high="31"/>
+       </reg32>
+       <reg32 offset="2" name="2">
+               <bitfield name="ADDR_0_HI" low="0" high="31"/>
+       </reg32>
+</domain>
+
+<domain name="CP_EVENT_WRITE" width="32">
+       <reg32 offset="0" name="0">
+               <bitfield name="EVENT" low="0" high="7" type="vgt_event_type"/>
+               <!-- when set, write back timestamp instead of value from packet: -->
+               <bitfield name="TIMESTAMP" pos="30" type="boolean"/>
+               <bitfield name="IRQ" pos="31" type="boolean"/>
+       </reg32>
+       <!--
+       TODO what is gpuaddr for, seems to be all 0's.. maybe needed for
+       context switch?
+        -->
+       <reg32 offset="1" name="1">
+               <bitfield name="ADDR_0_LO" low="0" high="31"/>
+       </reg32>
+       <reg32 offset="2" name="2">
+               <bitfield name="ADDR_0_HI" low="0" high="31"/>
+       </reg32>
+       <reg32 offset="3" name="3">
+               <!-- ??? -->
+       </reg32>
+</domain>
+
+<domain name="CP_BLIT" width="32">
+       <enum name="cp_blit_cmd">
+               <value value="0" name="BLIT_OP_FILL"/>
+               <value value="1" name="BLIT_OP_COPY"/>
+               <value value="3" name="BLIT_OP_SCALE"/> <!-- used for mipmap generation -->
+       </enum>
+       <reg32 offset="0" name="0">
+               <bitfield name="OP" low="0" high="3" type="cp_blit_cmd"/>
+       </reg32>
+       <reg32 offset="1" name="1">
+               <bitfield name="SRC_X1" low="0" high="13" type="uint"/>
+               <bitfield name="SRC_Y1" low="16" high="29" type="uint"/>
+       </reg32>
+       <reg32 offset="2" name="2">
+               <bitfield name="SRC_X2" low="0" high="13" type="uint"/>
+               <bitfield name="SRC_Y2" low="16" high="29" type="uint"/>
+       </reg32>
+       <reg32 offset="3" name="3">
+               <bitfield name="DST_X1" low="0" high="13" type="uint"/>
+               <bitfield name="DST_Y1" low="16" high="29" type="uint"/>
+       </reg32>
+       <reg32 offset="4" name="4">
+               <bitfield name="DST_X2" low="0" high="13" type="uint"/>
+               <bitfield name="DST_Y2" low="16" high="29" type="uint"/>
+       </reg32>
+</domain>
+
+<domain name="CP_EXEC_CS" width="32">
+       <reg32 offset="0" name="0">
+       </reg32>
+       <reg32 offset="1" name="1">
+               <bitfield name="NGROUPS_X" low="0" high="31" type="uint"/>
+       </reg32>
+       <reg32 offset="2" name="2">
+               <bitfield name="NGROUPS_Y" low="0" high="31" type="uint"/>
+       </reg32>
+       <reg32 offset="3" name="3">
+               <bitfield name="NGROUPS_Z" low="0" high="31" type="uint"/>
+       </reg32>
+</domain>
+
+<domain name="CP_EXEC_CS_INDIRECT" width="32" varset="chip" prefix="chip" variants="A4XX-">
+       <reg32 offset="0" name="0">
+       </reg32>
+       <stripe varset="chip" variants="A4XX">
+               <reg32 offset="1" name="1">
+                       <bitfield name="ADDR" low="0" high="31"/>
+               </reg32>
+               <reg32 offset="2" name="2">
+                       <!-- localsize is value minus one: -->
+                       <bitfield name="LOCALSIZEX" low="2" high="11" type="uint"/>
+                       <bitfield name="LOCALSIZEY" low="12" high="21" type="uint"/>
+                       <bitfield name="LOCALSIZEZ" low="22" high="31" type="uint"/>
+               </reg32>
+       </stripe>
+       <stripe varset="chip" variants="A5XX-">
+               <reg32 offset="1" name="1">
+                       <bitfield name="ADDR_LO" low="0" high="31"/>
+               </reg32>
+               <reg32 offset="2" name="2">
+                       <bitfield name="ADDR_HI" low="0" high="31"/>
+               </reg32>
+               <reg32 offset="3" name="3">
+                       <!-- localsize is value minus one: -->
+                       <bitfield name="LOCALSIZEX" low="2" high="11" type="uint"/>
+                       <bitfield name="LOCALSIZEY" low="12" high="21" type="uint"/>
+                       <bitfield name="LOCALSIZEZ" low="22" high="31" type="uint"/>
+               </reg32>
+       </stripe>
+</domain>
+
+<domain name="CP_SET_MARKER" width="32" varset="chip" prefix="chip" variants="A6XX-">
+       <doc>Tell CP the current operation mode, indicates save and restore procedure</doc>
+       <enum name="a6xx_render_mode">
+               <value value="1" name="RM6_BYPASS"/>
+               <value value="2" name="RM6_BINNING"/>
+               <value value="4" name="RM6_GMEM"/>
+               <value value="5" name="RM6_ENDVIS"/>
+               <value value="6" name="RM6_RESOLVE"/>
+               <value value="7" name="RM6_YIELD"/>
+               <value value="8" name="RM6_COMPUTE"/>
+               <value value="0xc" name="RM6_BLIT2DSCALE"/>  <!-- no-op (at least on current sqe fw) -->
+
+               <!--
+                       These values come from a6xx_set_marker() in the
+                       downstream kernel, and they can only be set by the kernel
+               -->
+               <value value="0xd" name="RM6_IB1LIST_START"/>
+               <value value="0xe" name="RM6_IB1LIST_END"/>
+               <!-- IFPC - inter-frame power collapse -->
+               <value value="0x100" name="RM6_IFPC_ENABLE"/>
+               <value value="0x101" name="RM6_IFPC_DISABLE"/>
+       </enum>
+       <reg32 offset="0" name="0">
+               <!--
+                       NOTE: blob driver and some versions of freedreno/turnip set
+                       b4, which is unused (at least by current sqe fw), but interferes
+                       with parsing if we extend the size of the bitfield to include
+                       b8 (only sent by kernel mode driver).  Really, the way the
+                       parsing works in the firmware, only b0-b3 are considered, but
+                       if b8 is set, the low bits are interpreted differently.  To
+                       model this, without getting confused by spurious b4, this is
+                       described as two overlapping bitfields:
+                -->
+               <bitfield name="MODE" low="0" high="8" type="a6xx_render_mode"/>
+               <bitfield name="MARKER" low="0" high="3" type="a6xx_render_mode"/>
+       </reg32>
+</domain>
+
+<domain name="CP_SET_PSEUDO_REG" width="32" varset="chip" prefix="chip" variants="A6XX-">
+       <doc>Set internal CP registers, used to indicate context save data addresses</doc>
+       <enum name="pseudo_reg">
+               <value value="0" name="SMMU_INFO"/>
+               <value value="1" name="NON_SECURE_SAVE_ADDR"/>
+               <value value="2" name="SECURE_SAVE_ADDR"/>
+               <value value="3" name="NON_PRIV_SAVE_ADDR"/>
+               <value value="4" name="COUNTER"/>
+       </enum>
+       <array offset="0" name="" stride="3" length="100">
+               <reg32 offset="0" name="0">
+                       <bitfield name="PSEUDO_REG" low="0" high="2" type="pseudo_reg"/>
+               </reg32>
+               <reg32 offset="1" name="1">
+                       <bitfield name="LO" low="0" high="31"/>
+               </reg32>
+               <reg32 offset="2" name="2">
+                       <bitfield name="HI" low="0" high="31"/>
+               </reg32>
+       </array>
+</domain>
+
+<domain name="CP_REG_TEST" width="32" varset="chip" prefix="chip" variants="A6XX-">
+       <doc>
+               Tests bit in specified register and sets predicate for CP_COND_REG_EXEC.
+               So:
+
+                       opcode: CP_REG_TEST (39) (2 dwords)
+                               { REG = 0xc10 | BIT = 0 }
+                                      0000: 70b90001 00000c10
+                       opcode: CP_COND_REG_EXEC (47) (3 dwords)
+                                      0000: 70c70002 10000000 00000004
+                       opcode: CP_INDIRECT_BUFFER (3f) (4 dwords)
+
+               Will execute the CP_INDIRECT_BUFFER only if b0 in the register at
+               offset 0x0c10 is 1
+       </doc>
+       <reg32 offset="0" name="0">
+               <!-- the register to test -->
+               <bitfield name="REG" low="0" high="17"/>
+               <!-- the bit to test -->
+               <bitfield name="BIT" low="20" high="24" type="uint"/>
+               <!-- execute CP_WAIT_FOR_ME beforehand -->
+               <bitfield name="WAIT_FOR_ME" pos="25" type="boolean"/>
+       </reg32>
+</domain>
+
+<!-- I *think* this existed at least as far back as a4xx -->
+<domain name="CP_COND_REG_EXEC" width="32">
+       <enum name="compare_mode">
+               <!-- use the predicate bit set by CP_REG_TEST -->
+               <value value="1" name="PRED_TEST"/>
+               <!-- compare two registers directly for equality -->
+               <value value="2" name="REG_COMPARE"/>
+               <!-- test if certain render modes are set via CP_SET_MARKER -->
+               <value value="3" name="RENDER_MODE" varset="chip" variants="A6XX-"/>
+       </enum>
+       <reg32 offset="0" name="0">
+               <bitfield name="REG0" low="0" high="17" type="hex"/>
+
+               <!--
+                       Note: these bits have the same meaning, and use the same
+                       internal mechanism as the bits in CP_SET_DRAW_STATE.
+                       When RENDER_MODE is selected, they're used as
+                       a bitmask of which modes pass the test.
+               -->
+
+               <!-- RM6_BINNING -->
+               <bitfield name="BINNING" pos="25" varset="chip" variants="A6XX-" type="boolean"/>
+               <!-- all others -->
+               <bitfield name="GMEM" pos="26" varset="chip" variants="A6XX-" type="boolean"/>
+               <!-- RM6_BYPASS -->
+               <bitfield name="SYSMEM" pos="27" varset="chip" variants="A6XX-" type="boolean"/>
+
+               <bitfield name="MODE" low="28" high="31" type="compare_mode"/>
+       </reg32>
+
+       <!-- in REG_COMPARE mode, there's an extra DWORD here with REG1 -->
+
+       <reg32 offset="1" name="1">
+               <bitfield name="DWORDS" low="0" high="31" type="uint"/>
+       </reg32>
+</domain>
+
+<domain name="CP_COND_EXEC" width="32">
+       <doc>
+                Executes the following DWORDs of commands if the dword at ADDR0
+                is not equal to 0 and the dword at ADDR1 is less than REF
+                (signed comparison).
+       </doc>
+       <reg32 offset="0" name="0">
+               <bitfield name="ADDR0_LO" low="0" high="31"/>
+       </reg32>
+       <reg32 offset="1" name="1">
+               <bitfield name="ADDR0_HI" low="0" high="31"/>
+       </reg32>
+       <reg32 offset="2" name="2">
+               <bitfield name="ADDR1_LO" low="0" high="31"/>
+       </reg32>
+       <reg32 offset="3" name="3">
+               <bitfield name="ADDR1_HI" low="0" high="31"/>
+       </reg32>
+       <reg32 offset="4" name="4">
+               <bitfield name="REF" low="0" high="31"/>
+       </reg32>
+       <reg32 offset="5" name="5">
+               <bitfield name="DWORDS" low="0" high="31" type="uint"/>
+       </reg32>
+</domain>
+
+<domain name="CP_SET_CTXSWITCH_IB" width="32">
+       <doc>
+                Used by the userspace driver to set various IB's which are
+                executed during context save/restore for handling
+                state that isn't restored by the
+                context switch routine itself.
+       </doc>
+       <enum name="ctxswitch_ib">
+               <value name="RESTORE_IB" value="0">
+                       <doc>Executed unconditionally when switching back to the context.</doc>
+               </value>
+               <value name="YIELD_RESTORE_IB" value="1">
+                        <doc>
+                               Executed when switching back after switching
+                               away during execution of
+                               a CP_SET_MARKER packet with RM6_YIELD as the
+                               payload *and* the normal save routine was
+                               bypassed for a shorter one. I think this is
+                               connected to the "skipsaverestore" bit set by
+                               the kernel when preempting.
+                       </doc>
+               </value>
+               <value name="SAVE_IB" value="2">
+                        <doc>
+                               Executed when switching away from the context,
+                               except for context switches initiated via
+                               CP_YIELD.
+                        </doc>
+               </value>
+               <value name="RB_SAVE_IB" value="3">
+                       <doc>
+                               This can only be set by the RB (i.e. the kernel)
+                               and executes with protected mode off, but
+                               is otherwise similar to SAVE_IB.
+                       </doc>
+               </value>
+       </enum>
+       <reg32 offset="0" name="0">
+               <bitfield name="ADDR_LO" low="0" high="31"/>
+       </reg32>
+       <reg32 offset="1" name="1">
+               <bitfield name="ADDR_HI" low="0" high="31"/>
+       </reg32>
+       <reg32 offset="2" name="2">
+               <bitfield name="DWORDS" low="0" high="19" type="uint"/>
+               <bitfield name="TYPE" low="20" high="21" type="ctxswitch_ib"/>
+       </reg32>
+</domain>
+
+<domain name="CP_REG_WRITE" width="32">
+       <enum name="reg_tracker">
+               <doc>
+                       Keep shadow copies of these registers and only set them
+                       when drawing, avoiding redundant writes:
+                       - VPC_CNTL_0
+                       - HLSQ_CONTROL_1_REG
+                       - HLSQ_UNKNOWN_B980
+               </doc>
+               <value name="TRACK_CNTL_REG" value="0x1"/>
+               <doc>
+                       Track RB_RENDER_CNTL, and insert a WFI in the following
+                       situation:
+                       - There is a write that disables binning
+                       - There was a draw with binning left enabled, but in
+                         BYPASS mode
+                       Presumably this is a hang workaround?
+               </doc>
+               <value name="TRACK_RENDER_CNTL" value="0x2"/>
+               <doc>
+                       Do a mysterious CP_EVENT_WRITE 0x3f when the low bit of
+                       the data to write is 0. Used by the Vulkan blob with
+                       PC_UNKNOWN_9B07, but this isn't predicated on particular
+                       register(s) like the others.
+               </doc>
+               <value name="UNK_EVENT_WRITE" value="0x4"/>
+       </enum>
+       <reg32 offset="0" name="0">
+               <bitfield name="TRACKER" low="0" high="2" type="reg_tracker"/>
+       </reg32>
+</domain>
+
+<domain name="CP_SMMU_TABLE_UPDATE" width="32">
+       <doc>
+               Note that the SMMU's definition of TTBRn can take different forms
+               depending on the pgtable format.  But a5xx+ only uses aarch64
+               format.
+       </doc>
+       <reg32 offset="0" name="0">
+               <bitfield name="TTBR0_LO" low="0" high="31"/>
+       </reg32>
+       <reg32 offset="1" name="1">
+               <bitfield name="TTBR0_HI" low="0" high="15"/>
+               <bitfield name="ASID" low="16" high="31"/>
+       </reg32>
+       <reg32 offset="2" name="2">
+               <doc>Unused, does not apply to aarch64 pgtable format</doc>
+               <bitfield name="CONTEXTIDR" low="0" high="31"/>
+       </reg32>
+       <reg32 offset="3" name="3">
+               <bitfield name="CONTEXTBANK" low="0" high="31"/>
+       </reg32>
+</domain>
+
+</database>
+
diff --git a/src/freedreno/registers/adreno/ocmem.xml b/src/freedreno/registers/adreno/ocmem.xml
new file mode 100644 (file)
index 0000000..7eb3fc8
--- /dev/null
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<database xmlns="http://nouveau.freedesktop.org/"
+xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+xsi:schemaLocation="http://nouveau.freedesktop.org/ rules-ng.xsd">
+<import file="freedreno_copyright.xml"/>
+
+<domain name="OCMEM" width="32">
+       <enum name="ocmem_macro_state">
+               <value name="PASSTHROUGH" value="0"/>
+               <value name="PERI_ON" value="1"/>
+               <value name="CORE_ON" value="2"/>
+               <value name="CLK_OFF" value="4"/>
+       </enum>
+       <reg32 offset="0x00" name="HW_VERSION"/>
+       <reg32 offset="0x04" name="HW_PROFILE">
+               <bitfield name="NUM_PORTS" low="0" high="3" type="uint"/>
+               <bitfield name="NUM_MACROS" low="8" high="13" type="uint"/>
+               <bitfield name="LAST_REGN_HALFSIZE" pos="16" type="boolean"/>
+               <bitfield name="INTERLEAVING" pos="17" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x0c" name="GEN_STATUS"/>
+       <reg32 offset="0x38" name="PSGSC_STATUS"/>
+       <!-- length is 4 for 8084, 3 for 8974/8092, 1 for 8226: -->
+       <array offset="0x3c" name="PSGSC" stride="1" length="4">
+               <reg32 offset="0x0" name="CTL">
+                       <bitfield name="MACRO0_MODE" low="0"  high="2"  type="ocmem_macro_state"/>
+                       <bitfield name="MACRO1_MODE" low="4"  high="6"  type="ocmem_macro_state"/>
+                       <bitfield name="MACRO2_MODE" low="8"  high="10" type="ocmem_macro_state"/>
+                       <bitfield name="MACRO3_MODE" low="12" high="14" type="ocmem_macro_state"/>
+               </reg32>
+       </array>
+       <reg32 offset="0x1000" name="REGION_MODE_CTL">
+               <bitfield name="REG0_THIN" pos="0" type="boolean"/>
+               <bitfield name="REG1_THIN" pos="1" type="boolean"/>
+               <bitfield name="REG2_THIN" pos="2" type="boolean"/>
+               <bitfield name="REG3_THIN" pos="3" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x1004" name="GFX_MPU_START"/>
+       <reg32 offset="0x1008" name="GFX_MPU_END"/>
+</domain>
+
+</database>
diff --git a/src/freedreno/registers/adreno_common.xml b/src/freedreno/registers/adreno_common.xml
deleted file mode 100644 (file)
index d70fbaf..0000000
+++ /dev/null
@@ -1,370 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<database xmlns="http://nouveau.freedesktop.org/"
-xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-xsi:schemaLocation="http://nouveau.freedesktop.org/ rules-ng.xsd">
-
-<enum name="chip" bare="yes">
-       <value name="A2XX"/>
-       <value name="A3XX"/>
-       <value name="A4XX"/>
-       <value name="A5XX"/>
-       <value name="A6XX"/>
-</enum>
-
-<enum name="adreno_pa_su_sc_draw">
-       <value name="PC_DRAW_POINTS" value="0"/>
-       <value name="PC_DRAW_LINES" value="1"/>
-       <value name="PC_DRAW_TRIANGLES" value="2"/>
-</enum>
-
-<enum name="adreno_compare_func">
-       <value name="FUNC_NEVER" value="0"/>
-       <value name="FUNC_LESS" value="1"/>
-       <value name="FUNC_EQUAL" value="2"/>
-       <value name="FUNC_LEQUAL" value="3"/>
-       <value name="FUNC_GREATER" value="4"/>
-       <value name="FUNC_NOTEQUAL" value="5"/>
-       <value name="FUNC_GEQUAL" value="6"/>
-       <value name="FUNC_ALWAYS" value="7"/>
-</enum>
-
-<enum name="adreno_stencil_op">
-       <value name="STENCIL_KEEP" value="0"/>
-       <value name="STENCIL_ZERO" value="1"/>
-       <value name="STENCIL_REPLACE" value="2"/>
-       <value name="STENCIL_INCR_CLAMP" value="3"/>
-       <value name="STENCIL_DECR_CLAMP" value="4"/>
-       <value name="STENCIL_INVERT" value="5"/>
-       <value name="STENCIL_INCR_WRAP" value="6"/>
-       <value name="STENCIL_DECR_WRAP" value="7"/>
-</enum>
-
-<enum name="adreno_rb_blend_factor">
-       <value name="FACTOR_ZERO" value="0"/>
-       <value name="FACTOR_ONE" value="1"/>
-       <value name="FACTOR_SRC_COLOR" value="4"/>
-       <value name="FACTOR_ONE_MINUS_SRC_COLOR" value="5"/>
-       <value name="FACTOR_SRC_ALPHA" value="6"/>
-       <value name="FACTOR_ONE_MINUS_SRC_ALPHA" value="7"/>
-       <value name="FACTOR_DST_COLOR" value="8"/>
-       <value name="FACTOR_ONE_MINUS_DST_COLOR" value="9"/>
-       <value name="FACTOR_DST_ALPHA" value="10"/>
-       <value name="FACTOR_ONE_MINUS_DST_ALPHA" value="11"/>
-       <value name="FACTOR_CONSTANT_COLOR" value="12"/>
-       <value name="FACTOR_ONE_MINUS_CONSTANT_COLOR" value="13"/>
-       <value name="FACTOR_CONSTANT_ALPHA" value="14"/>
-       <value name="FACTOR_ONE_MINUS_CONSTANT_ALPHA" value="15"/>
-       <value name="FACTOR_SRC_ALPHA_SATURATE" value="16"/>
-       <value name="FACTOR_SRC1_COLOR" value="20"/>
-       <value name="FACTOR_ONE_MINUS_SRC1_COLOR" value="21"/>
-       <value name="FACTOR_SRC1_ALPHA" value="22"/>
-       <value name="FACTOR_ONE_MINUS_SRC1_ALPHA" value="23"/>
-</enum>
-
-<bitset name="adreno_rb_stencilrefmask" inline="yes">
-       <bitfield name="STENCILREF" low="0" high="7" type="hex"/>
-       <bitfield name="STENCILMASK" low="8" high="15" type="hex"/>
-       <bitfield name="STENCILWRITEMASK" low="16" high="23" type="hex"/>
-</bitset>
-
-<enum name="adreno_rb_surface_endian">
-       <value name="ENDIAN_NONE" value="0"/>
-       <value name="ENDIAN_8IN16" value="1"/>
-       <value name="ENDIAN_8IN32" value="2"/>
-       <value name="ENDIAN_16IN32" value="3"/>
-       <value name="ENDIAN_8IN64" value="4"/>
-       <value name="ENDIAN_8IN128" value="5"/>
-</enum>
-
-<enum name="adreno_rb_dither_mode">
-       <value name="DITHER_DISABLE" value="0"/>
-       <value name="DITHER_ALWAYS" value="1"/>
-       <value name="DITHER_IF_ALPHA_OFF" value="2"/>
-</enum>
-
-<enum name="adreno_rb_depth_format">
-       <value name="DEPTHX_16" value="0"/>
-       <value name="DEPTHX_24_8" value="1"/>
-       <value name="DEPTHX_32" value="2"/>
-</enum>
-
-<enum name="adreno_rb_copy_control_mode">
-       <value name="RB_COPY_RESOLVE" value="1"/>
-       <value name="RB_COPY_CLEAR" value="2"/>
-       <value name="RB_COPY_DEPTH_STENCIL" value="5"/>  <!-- not sure if this is part of MODE or another bitfield?? -->
-</enum>
-
-<bitset name="adreno_reg_xy" inline="yes">
-       <bitfield name="WINDOW_OFFSET_DISABLE" pos="31" type="boolean"/>
-       <bitfield name="X" low="0" high="14" type="uint"/>
-       <bitfield name="Y" low="16" high="30" type="uint"/>
-</bitset>
-
-<bitset name="adreno_cp_protect" inline="yes">
-       <bitfield name="BASE_ADDR" low="0" high="16"/>
-       <bitfield name="MASK_LEN" low="24" high="28"/>
-       <bitfield name="TRAP_WRITE" pos="29"/>
-       <bitfield name="TRAP_READ" pos="30"/>
-</bitset>
-
-<domain name="AXXX" width="32">
-       <brief>Registers in common between a2xx and a3xx</brief>
-
-       <reg32 offset="0x01c0" name="CP_RB_BASE"/>
-       <reg32 offset="0x01c1" name="CP_RB_CNTL">
-               <bitfield name="BUFSZ" low="0" high="5"/>
-               <bitfield name="BLKSZ" low="8" high="13"/>
-               <bitfield name="BUF_SWAP" low="16" high="17"/>
-               <bitfield name="POLL_EN" pos="20" type="boolean"/>
-               <bitfield name="NO_UPDATE" pos="27" type="boolean"/>
-               <bitfield name="RPTR_WR_EN" pos="31" type="boolean"/>
-       </reg32>
-       <reg32 offset="0x01c3" name="CP_RB_RPTR_ADDR">
-               <bitfield name="SWAP" low="0" high="1" type="uint"/>
-               <bitfield name="ADDR" low="2" high="31" shr="2"/>
-       </reg32>
-       <reg32 offset="0x01c4" name="CP_RB_RPTR" type="uint"/>
-       <reg32 offset="0x01c5" name="CP_RB_WPTR" type="uint"/>
-       <reg32 offset="0x01c6" name="CP_RB_WPTR_DELAY"/>
-       <reg32 offset="0x01c7" name="CP_RB_RPTR_WR"/>
-       <reg32 offset="0x01c8" name="CP_RB_WPTR_BASE"/>
-       <reg32 offset="0x01d5" name="CP_QUEUE_THRESHOLDS">
-               <bitfield name="CSQ_IB1_START" low="0" high="3" type="uint"/>
-               <bitfield name="CSQ_IB2_START" low="8" high="11" type="uint"/>
-               <bitfield name="CSQ_ST_START" low="16" high="19" type="uint"/>
-       </reg32>
-       <reg32 offset="0x01d6" name="CP_MEQ_THRESHOLDS">
-               <bitfield name="MEQ_END" low="16" high="20" type="uint"/>
-               <bitfield name="ROQ_END" low="24" high="28" type="uint"/>
-       </reg32>
-       <reg32 offset="0x01d7" name="CP_CSQ_AVAIL">
-               <bitfield name="RING" low="0" high="6" type="uint"/>
-               <bitfield name="IB1" low="8" high="14" type="uint"/>
-               <bitfield name="IB2" low="16" high="22" type="uint"/>
-       </reg32>
-       <reg32 offset="0x01d8" name="CP_STQ_AVAIL">
-               <bitfield name="ST" low="0" high="6" type="uint"/>
-       </reg32>
-       <reg32 offset="0x01d9" name="CP_MEQ_AVAIL">
-               <bitfield name="MEQ" low="0" high="4" type="uint"/>
-       </reg32>
-       <reg32 offset="0x01dc" name="SCRATCH_UMSK">
-               <bitfield name="UMSK" low="0" high="7" type="uint"/>
-               <bitfield name="SWAP" low="16" high="17" type="uint"/>
-       </reg32>
-       <reg32 offset="0x01dd" name="SCRATCH_ADDR"/>
-       <reg32 offset="0x01ea" name="CP_ME_RDADDR"/>
-
-       <reg32 offset="0x01ec" name="CP_STATE_DEBUG_INDEX"/>
-       <reg32 offset="0x01ed" name="CP_STATE_DEBUG_DATA"/>
-       <reg32 offset="0x01f2" name="CP_INT_CNTL">
-               <bitfield name="SW_INT_MASK" pos="19" type="boolean"/>
-               <bitfield name="T0_PACKET_IN_IB_MASK" pos="23" type="boolean"/>
-               <bitfield name="OPCODE_ERROR_MASK" pos="24" type="boolean"/>
-               <bitfield name="PROTECTED_MODE_ERROR_MASK" pos="25" type="boolean"/>
-               <bitfield name="RESERVED_BIT_ERROR_MASK" pos="26" type="boolean"/>
-               <bitfield name="IB_ERROR_MASK" pos="27" type="boolean"/>
-               <bitfield name="IB2_INT_MASK" pos="29" type="boolean"/>
-               <bitfield name="IB1_INT_MASK" pos="30" type="boolean"/>
-               <bitfield name="RB_INT_MASK" pos="31" type="boolean"/>
-       </reg32>
-       <reg32 offset="0x01f3" name="CP_INT_STATUS"/>
-       <reg32 offset="0x01f4" name="CP_INT_ACK"/>
-       <reg32 offset="0x01f6" name="CP_ME_CNTL">
-               <bitfield name="BUSY" pos="29" type="boolean"/>
-               <bitfield name="HALT" pos="28" type="boolean"/>
-       </reg32>
-       <reg32 offset="0x01f7" name="CP_ME_STATUS"/>
-       <reg32 offset="0x01f8" name="CP_ME_RAM_WADDR"/>
-       <reg32 offset="0x01f9" name="CP_ME_RAM_RADDR"/>
-       <reg32 offset="0x01fa" name="CP_ME_RAM_DATA"/>
-       <reg32 offset="0x01fc" name="CP_DEBUG">
-               <bitfield name="PREDICATE_DISABLE" pos="23" type="boolean"/>
-               <bitfield name="PROG_END_PTR_ENABLE" pos="24" type="boolean"/>
-               <bitfield name="MIU_128BIT_WRITE_ENABLE" pos="25" type="boolean"/>
-               <bitfield name="PREFETCH_PASS_NOPS" pos="26" type="boolean"/>
-               <bitfield name="DYNAMIC_CLK_DISABLE" pos="27" type="boolean"/>
-               <bitfield name="PREFETCH_MATCH_DISABLE" pos="28" type="boolean"/>
-               <bitfield name="SIMPLE_ME_FLOW_CONTROL" pos="30" type="boolean"/>
-               <bitfield name="MIU_WRITE_PACK_DISABLE" pos="31" type="boolean"/>
-       </reg32>
-       <reg32 offset="0x01fd" name="CP_CSQ_RB_STAT">
-               <bitfield name="RPTR" low="0" high="6" type="uint"/>
-               <bitfield name="WPTR" low="16" high="22" type="uint"/>
-       </reg32>
-       <reg32 offset="0x01fe" name="CP_CSQ_IB1_STAT">
-               <bitfield name="RPTR" low="0" high="6" type="uint"/>
-               <bitfield name="WPTR" low="16" high="22" type="uint"/>
-       </reg32>
-       <reg32 offset="0x01ff" name="CP_CSQ_IB2_STAT">
-               <bitfield name="RPTR" low="0" high="6" type="uint"/>
-               <bitfield name="WPTR" low="16" high="22" type="uint"/>
-       </reg32>
-
-       <reg32 offset="0x0440" name="CP_NON_PREFETCH_CNTRS"/>
-       <reg32 offset="0x0443" name="CP_STQ_ST_STAT"/>
-       <reg32 offset="0x044d" name="CP_ST_BASE"/>
-       <reg32 offset="0x044e" name="CP_ST_BUFSZ"/>
-       <reg32 offset="0x044f" name="CP_MEQ_STAT"/>
-       <reg32 offset="0x0452" name="CP_MIU_TAG_STAT"/>
-       <reg32 offset="0x0454" name="CP_BIN_MASK_LO"/>
-       <reg32 offset="0x0455" name="CP_BIN_MASK_HI"/>
-       <reg32 offset="0x0456" name="CP_BIN_SELECT_LO"/>
-       <reg32 offset="0x0457" name="CP_BIN_SELECT_HI"/>
-       <reg32 offset="0x0458" name="CP_IB1_BASE"/>
-       <reg32 offset="0x0459" name="CP_IB1_BUFSZ"/>
-       <reg32 offset="0x045a" name="CP_IB2_BASE"/>
-       <reg32 offset="0x045b" name="CP_IB2_BUFSZ"/>
-       <reg32 offset="0x047f" name="CP_STAT">
-               <bitfield pos="31" name="CP_BUSY"/>
-               <bitfield pos="30" name="VS_EVENT_FIFO_BUSY"/>
-               <bitfield pos="29" name="PS_EVENT_FIFO_BUSY"/>
-               <bitfield pos="28" name="CF_EVENT_FIFO_BUSY"/>
-               <bitfield pos="27" name="RB_EVENT_FIFO_BUSY"/>
-               <bitfield pos="26" name="ME_BUSY"/>
-               <bitfield pos="25" name="MIU_WR_C_BUSY"/>
-               <bitfield pos="23" name="CP_3D_BUSY"/>
-               <bitfield pos="22" name="CP_NRT_BUSY"/>
-               <bitfield pos="21" name="RBIU_SCRATCH_BUSY"/>
-               <bitfield pos="20" name="RCIU_ME_BUSY"/>
-               <bitfield pos="19" name="RCIU_PFP_BUSY"/>
-               <bitfield pos="18" name="MEQ_RING_BUSY"/>
-               <bitfield pos="17" name="PFP_BUSY"/>
-               <bitfield pos="16" name="ST_QUEUE_BUSY"/>
-               <bitfield pos="13" name="INDIRECT2_QUEUE_BUSY"/>
-               <bitfield pos="12" name="INDIRECTS_QUEUE_BUSY"/>
-               <bitfield pos="11" name="RING_QUEUE_BUSY"/>
-               <bitfield pos="10" name="CSF_BUSY"/>
-               <bitfield pos="9"  name="CSF_ST_BUSY"/>
-               <bitfield pos="8"  name="EVENT_BUSY"/>
-               <bitfield pos="7"  name="CSF_INDIRECT2_BUSY"/>
-               <bitfield pos="6"  name="CSF_INDIRECTS_BUSY"/>
-               <bitfield pos="5"  name="CSF_RING_BUSY"/>
-               <bitfield pos="4"  name="RCIU_BUSY"/>
-               <bitfield pos="3"  name="RBIU_BUSY"/>
-               <bitfield pos="2"  name="MIU_RD_RETURN_BUSY"/>
-               <bitfield pos="1"  name="MIU_RD_REQ_BUSY"/>
-               <bitfield pos="0"  name="MIU_WR_BUSY"/>
-       </reg32>
-       <reg32 offset="0x0578" name="CP_SCRATCH_REG0" type="uint"/>
-       <reg32 offset="0x0579" name="CP_SCRATCH_REG1" type="uint"/>
-       <reg32 offset="0x057a" name="CP_SCRATCH_REG2" type="uint"/>
-       <reg32 offset="0x057b" name="CP_SCRATCH_REG3" type="uint"/>
-       <reg32 offset="0x057c" name="CP_SCRATCH_REG4" type="uint"/>
-       <reg32 offset="0x057d" name="CP_SCRATCH_REG5" type="uint"/>
-       <reg32 offset="0x057e" name="CP_SCRATCH_REG6" type="uint"/>
-       <reg32 offset="0x057f" name="CP_SCRATCH_REG7" type="uint"/>
-
-       <reg32 offset="0x0600" name="CP_ME_VS_EVENT_SRC"/>
-       <reg32 offset="0x0601" name="CP_ME_VS_EVENT_ADDR"/>
-       <reg32 offset="0x0602" name="CP_ME_VS_EVENT_DATA"/>
-       <reg32 offset="0x0603" name="CP_ME_VS_EVENT_ADDR_SWM"/>
-       <reg32 offset="0x0604" name="CP_ME_VS_EVENT_DATA_SWM"/>
-       <reg32 offset="0x0605" name="CP_ME_PS_EVENT_SRC"/>
-       <reg32 offset="0x0606" name="CP_ME_PS_EVENT_ADDR"/>
-       <reg32 offset="0x0607" name="CP_ME_PS_EVENT_DATA"/>
-       <reg32 offset="0x0608" name="CP_ME_PS_EVENT_ADDR_SWM"/>
-       <reg32 offset="0x0609" name="CP_ME_PS_EVENT_DATA_SWM"/>
-       <reg32 offset="0x060a" name="CP_ME_CF_EVENT_SRC"/>
-       <reg32 offset="0x060b" name="CP_ME_CF_EVENT_ADDR"/>
-       <reg32 offset="0x060c" name="CP_ME_CF_EVENT_DATA" type="uint"/>
-       <reg32 offset="0x060d" name="CP_ME_NRT_ADDR"/>
-       <reg32 offset="0x060e" name="CP_ME_NRT_DATA"/>
-       <reg32 offset="0x0612" name="CP_ME_VS_FETCH_DONE_SRC"/>
-       <reg32 offset="0x0613" name="CP_ME_VS_FETCH_DONE_ADDR"/>
-       <reg32 offset="0x0614" name="CP_ME_VS_FETCH_DONE_DATA"/>
-
-</domain>
-
-<!--
-       Common between A3xx and A4xx:
- -->
-
-<enum name="a3xx_rop_code">
-       <value name="ROP_CLEAR"         value="0"/>
-       <value name="ROP_NOR"           value="1"/>
-       <value name="ROP_AND_INVERTED"  value="2"/>
-       <value name="ROP_COPY_INVERTED" value="3"/>
-       <value name="ROP_AND_REVERSE"   value="4"/>
-       <value name="ROP_INVERT"        value="5"/>
-       <value name="ROP_XOR"           value="6"/>
-       <value name="ROP_NAND"          value="7"/>
-       <value name="ROP_AND"           value="8"/>
-       <value name="ROP_EQUIV"         value="9"/>
-       <value name="ROP_NOOP"          value="10"/>
-       <value name="ROP_OR_INVERTED"   value="11"/>
-       <value name="ROP_COPY"          value="12"/>
-       <value name="ROP_OR_REVERSE"    value="13"/>
-       <value name="ROP_OR"            value="14"/>
-       <value name="ROP_SET"           value="15"/>
-</enum>
-
-<enum name="a3xx_render_mode">
-       <value name="RB_RENDERING_PASS" value="0"/>
-       <value name="RB_TILING_PASS" value="1"/>
-       <value name="RB_RESOLVE_PASS" value="2"/>
-       <value name="RB_COMPUTE_PASS" value="3"/>
-</enum>
-
-<enum name="a3xx_msaa_samples">
-       <value name="MSAA_ONE" value="0"/>
-       <value name="MSAA_TWO" value="1"/>
-       <value name="MSAA_FOUR" value="2"/>
-       <value name="MSAA_EIGHT" value="3"/>
-</enum>
-
-<enum name="a3xx_threadmode">
-       <value value="0" name="MULTI"/>
-       <value value="1" name="SINGLE"/>
-</enum>
-
-<enum name="a3xx_instrbuffermode">
-       <!--
-       When shader size goes above ~128 or so, blob switches to '0'
-       and doesn't emit shader in cmdstream.  When either is '0' it
-       doesn't get emitted via CP_LOAD_STATE.  When only one is
-       '0' the other gets size 256-others_size.  So I think that:
-               BUFFER => execute out of state memory
-               CACHE  => use available state memory as local cache
-       NOTE that when CACHE mode, also set CACHEINVALID flag!
-
-       TODO check if that 256 size is same for all a3xx
-        -->
-       <value value="0" name="CACHE"/>
-       <value value="1" name="BUFFER"/>
-</enum>
-
-<enum name="a3xx_threadsize">
-       <value value="0" name="TWO_QUADS"/>
-       <value value="1" name="FOUR_QUADS"/>
-</enum>
-
-<enum name="a3xx_color_swap">
-       <value name="WZYX" value="0"/>
-       <value name="WXYZ" value="1"/>
-       <value name="ZYXW" value="2"/>
-       <value name="XYZW" value="3"/>
-</enum>
-
-<enum name="a3xx_rb_blend_opcode">
-       <value name="BLEND_DST_PLUS_SRC" value="0"/>
-       <value name="BLEND_SRC_MINUS_DST" value="1"/>
-       <value name="BLEND_DST_MINUS_SRC" value="2"/>
-       <value name="BLEND_MIN_DST_SRC" value="3"/>
-       <value name="BLEND_MAX_DST_SRC" value="4"/>
-</enum>
-
-<enum name="a4xx_tess_spacing">
-       <value name="EQUAL_SPACING" value="0"/>
-       <value name="ODD_SPACING" value="2"/>
-       <value name="EVEN_SPACING" value="3"/>
-</enum>
-
-<doc>Address mode for a5xx+</doc>
-<enum name="a5xx_address_mode">
-       <value name="ADDR_32B" value="0"/>
-       <value name="ADDR_64B" value="1"/>
-</enum>
-
-</database>
-
diff --git a/src/freedreno/registers/adreno_pm4.xml b/src/freedreno/registers/adreno_pm4.xml
deleted file mode 100644 (file)
index f16793b..0000000
+++ /dev/null
@@ -1,1705 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<database xmlns="http://nouveau.freedesktop.org/"
-xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-xsi:schemaLocation="http://nouveau.freedesktop.org/ rules-ng.xsd">
-
-<enum name="vgt_event_type">
-       <value name="VS_DEALLOC" value="0"/>
-       <value name="PS_DEALLOC" value="1"/>
-       <value name="VS_DONE_TS" value="2"/>
-       <value name="PS_DONE_TS" value="3"/>
-       <value name="CACHE_FLUSH_TS" value="4"/>
-       <value name="CONTEXT_DONE" value="5"/>
-       <value name="CACHE_FLUSH" value="6"/>
-       <value name="VIZQUERY_START" value="7" varset="chip" variants="A2XX"/>
-       <value name="HLSQ_FLUSH" value="7" varset="chip" variants="A3XX-A4XX"/>
-       <value name="VIZQUERY_END" value="8" varset="chip" variants="A2XX"/>
-       <value name="SC_WAIT_WC" value="9"/>
-       <value name="WRITE_PRIMITIVE_COUNTS" value="9" varset="chip" variants="A6XX"/>
-       <value name="START_PRIMITIVE_CTRS" value="11" varset="chip" variants="A6XX"/>
-       <value name="STOP_PRIMITIVE_CTRS" value="12" varset="chip" variants="A6XX"/>
-       <value name="RST_PIX_CNT" value="13"/>
-       <value name="RST_VTX_CNT" value="14"/>
-       <value name="TILE_FLUSH" value="15"/>
-       <value name="STAT_EVENT" value="16"/>
-       <value name="CACHE_FLUSH_AND_INV_TS_EVENT" value="20" varset="chip" variants="A2XX-A4XX"/>
-       <value name="ZPASS_DONE" value="21"/>
-       <value name="CACHE_FLUSH_AND_INV_EVENT" value="22" varset="chip" variants="A2XX"/>
-       <value name="RB_DONE_TS" value="22" varset="chip" variants="A3XX-"/>
-       <value name="PERFCOUNTER_START" value="23" varset="chip" variants="A2XX-A4XX"/>
-       <value name="PERFCOUNTER_STOP" value="24" varset="chip" variants="A2XX-A4XX"/>
-       <value name="VS_FETCH_DONE" value="27"/>
-       <value name="FACENESS_FLUSH" value="28" varset="chip" variants="A2XX-A4XX"/>
-
-       <!-- a5xx events -->
-       <value name="WT_DONE_TS" value="8" varset="chip" variants="A5XX-"/>
-       <value name="FLUSH_SO_0" value="17" varset="chip" variants="A5XX-"/>
-       <value name="FLUSH_SO_1" value="18" varset="chip" variants="A5XX-"/>
-       <value name="FLUSH_SO_2" value="19" varset="chip" variants="A5XX-"/>
-       <value name="FLUSH_SO_3" value="20" varset="chip" variants="A5XX-"/>
-       <value name="PC_CCU_INVALIDATE_DEPTH" value="24" varset="chip" variants="A5XX-"/>
-       <value name="PC_CCU_INVALIDATE_COLOR" value="25" varset="chip" variants="A5XX-"/>
-       <value name="PC_CCU_RESOLVE_TS" value="26" varset="chip" variants="A6XX"/>
-       <value name="PC_CCU_FLUSH_DEPTH_TS" value="28" varset="chip" variants="A5XX-"/>
-       <value name="PC_CCU_FLUSH_COLOR_TS" value="29" varset="chip" variants="A5XX-"/>
-       <value name="BLIT" value="30" varset="chip" variants="A5XX-"/>
-       <value name="UNK_25" value="37" varset="chip" variants="A5XX"/>
-       <value name="LRZ_FLUSH" value="38" varset="chip" variants="A5XX-"/>
-       <value name="BLIT_OP_FILL_2D" value="39" varset="chip" variants="A5XX-"/>
-       <value name="BLIT_OP_COPY_2D" value="40" varset="chip" variants="A5XX-"/>
-       <value name="BLIT_OP_SCALE_2D" value="42" varset="chip" variants="A5XX-"/>
-       <value name="CONTEXT_DONE_2D" value="43" varset="chip" variants="A5XX-"/>
-       <value name="UNK_2C" value="44" varset="chip" variants="A5XX-"/>
-       <value name="UNK_2D" value="45" varset="chip" variants="A5XX-"/>
-
-       <!-- a6xx events -->
-       <value name="CACHE_INVALIDATE" value="49" varset="chip" variants="A6XX"/>
-</enum>
-
-<enum name="pc_di_primtype">
-       <value name="DI_PT_NONE" value="0"/>
-       <!-- POINTLIST_PSIZE is used on a3xx/a4xx when gl_PointSize is written: -->
-       <value name="DI_PT_POINTLIST_PSIZE" value="1"/>
-       <value name="DI_PT_LINELIST" value="2"/>
-       <value name="DI_PT_LINESTRIP" value="3"/>
-       <value name="DI_PT_TRILIST" value="4"/>
-       <value name="DI_PT_TRIFAN" value="5"/>
-       <value name="DI_PT_TRISTRIP" value="6"/>
-       <value name="DI_PT_LINELOOP" value="7"/>  <!-- a22x, a3xx -->
-       <value name="DI_PT_RECTLIST" value="8"/>
-       <value name="DI_PT_POINTLIST" value="9"/>
-       <value name="DI_PT_LINE_ADJ" value="0xa"/>
-       <value name="DI_PT_LINESTRIP_ADJ" value="0xb"/>
-       <value name="DI_PT_TRI_ADJ" value="0xc"/>
-       <value name="DI_PT_TRISTRIP_ADJ" value="0xd"/>
-
-       <value name="DI_PT_PATCHES0" value="0x1f"/>
-       <value name="DI_PT_PATCHES1" value="0x20"/>
-       <value name="DI_PT_PATCHES2" value="0x21"/>
-       <value name="DI_PT_PATCHES3" value="0x22"/>
-       <value name="DI_PT_PATCHES4" value="0x23"/>
-       <value name="DI_PT_PATCHES5" value="0x24"/>
-       <value name="DI_PT_PATCHES6" value="0x25"/>
-       <value name="DI_PT_PATCHES7" value="0x26"/>
-       <value name="DI_PT_PATCHES8" value="0x27"/>
-       <value name="DI_PT_PATCHES9" value="0x28"/>
-       <value name="DI_PT_PATCHES10" value="0x29"/>
-       <value name="DI_PT_PATCHES11" value="0x2a"/>
-       <value name="DI_PT_PATCHES12" value="0x2b"/>
-       <value name="DI_PT_PATCHES13" value="0x2c"/>
-       <value name="DI_PT_PATCHES14" value="0x2d"/>
-       <value name="DI_PT_PATCHES15" value="0x2e"/>
-       <value name="DI_PT_PATCHES16" value="0x2f"/>
-       <value name="DI_PT_PATCHES17" value="0x30"/>
-       <value name="DI_PT_PATCHES18" value="0x31"/>
-       <value name="DI_PT_PATCHES19" value="0x32"/>
-       <value name="DI_PT_PATCHES20" value="0x33"/>
-       <value name="DI_PT_PATCHES21" value="0x34"/>
-       <value name="DI_PT_PATCHES22" value="0x35"/>
-       <value name="DI_PT_PATCHES23" value="0x36"/>
-       <value name="DI_PT_PATCHES24" value="0x37"/>
-       <value name="DI_PT_PATCHES25" value="0x38"/>
-       <value name="DI_PT_PATCHES26" value="0x39"/>
-       <value name="DI_PT_PATCHES27" value="0x3a"/>
-       <value name="DI_PT_PATCHES28" value="0x3b"/>
-       <value name="DI_PT_PATCHES29" value="0x3c"/>
-       <value name="DI_PT_PATCHES30" value="0x3d"/>
-       <value name="DI_PT_PATCHES31" value="0x3e"/>
-</enum>
-
-<enum name="pc_di_src_sel">
-       <value name="DI_SRC_SEL_DMA" value="0"/>
-       <value name="DI_SRC_SEL_IMMEDIATE" value="1"/>
-       <value name="DI_SRC_SEL_AUTO_INDEX" value="2"/>
-       <value name="DI_SRC_SEL_AUTO_XFB" value="3"/>
-</enum>
-
-<enum name="pc_di_face_cull_sel">
-       <value name="DI_FACE_CULL_NONE" value="0"/>
-       <value name="DI_FACE_CULL_FETCH" value="1"/>
-       <value name="DI_FACE_BACKFACE_CULL" value="2"/>
-       <value name="DI_FACE_FRONTFACE_CULL" value="3"/>
-</enum>
-
-<enum name="pc_di_index_size">
-       <value name="INDEX_SIZE_IGN" value="0"/>
-       <value name="INDEX_SIZE_16_BIT" value="0"/>
-       <value name="INDEX_SIZE_32_BIT" value="1"/>
-       <value name="INDEX_SIZE_8_BIT" value="2"/>
-       <value name="INDEX_SIZE_INVALID"/>
-</enum>
-
-<enum name="pc_di_vis_cull_mode">
-       <value name="IGNORE_VISIBILITY" value="0"/>
-       <value name="USE_VISIBILITY" value="1"/>
-</enum>
-
-<enum name="adreno_pm4_packet_type">
-       <value name="CP_TYPE0_PKT" value="0x00000000"/>
-       <value name="CP_TYPE1_PKT" value="0x40000000"/>
-       <value name="CP_TYPE2_PKT" value="0x80000000"/>
-       <value name="CP_TYPE3_PKT" value="0xc0000000"/>
-       <value name="CP_TYPE4_PKT" value="0x40000000"/>
-       <value name="CP_TYPE7_PKT" value="0x70000000"/>
-</enum>
-
-<!--
-   Note that in some cases, the same packet id is recycled on a later
-   generation, so variants attribute is used to distinguish.   They
-   may not be completely accurate, we would probably have to analyze
-   the pfp and me/pm4 firmware to verify the packet is actually
-   handled on a particular generation.  But it is at least enough to
-   disambiguate the packet-id's that were re-used for different
-   packets starting with a5xx.
- -->
-<enum name="adreno_pm4_type3_packets">
-       <doc>initialize CP's micro-engine</doc>
-       <value name="CP_ME_INIT" value="0x48"/>
-       <doc>skip N 32-bit words to get to the next packet</doc>
-       <value name="CP_NOP" value="0x10"/>
-       <doc>
-               indirect buffer dispatch.  prefetch parser uses this packet
-               type to determine whether to pre-fetch the IB
-       </doc>
-       <value name="CP_PREEMPT_ENABLE" value="0x1c"/>
-       <value name="CP_PREEMPT_TOKEN" value="0x1e"/>
-       <value name="CP_INDIRECT_BUFFER" value="0x3f"/>
-       <doc>
-               Takes the same arguments as CP_INDIRECT_BUFFER, but jumps to
-               another buffer at the same level. Must be at the end of IB, and
-               doesn't work with draw state IB's.
-       </doc>
-       <value name="CP_INDIRECT_BUFFER_CHAIN" value="0x57" varset="chip" variants="A5XX-"/>
-       <doc>indirect buffer dispatch.  same as IB, but init is pipelined</doc>
-       <value name="CP_INDIRECT_BUFFER_PFD" value="0x37"/>
-       <doc>wait for the IDLE state of the engine</doc>
-       <value name="CP_WAIT_FOR_IDLE" value="0x26"/>
-       <doc>wait until a register or memory location is a specific value</doc>
-       <value name="CP_WAIT_REG_MEM" value="0x3c"/>
-       <doc>wait until a register location is equal to a specific value</doc>
-       <value name="CP_WAIT_REG_EQ" value="0x52"/>
-       <doc>wait until a register location is >= a specific value</doc>
-       <value name="CP_WAIT_REG_GTE" value="0x53" varset="chip" variants="A2XX-A4XX"/>
-       <doc>wait until a read completes</doc>
-       <value name="CP_WAIT_UNTIL_READ" value="0x5c" varset="chip" variants="A2XX-A4XX"/>
-       <doc>wait until all base/size writes from an IB_PFD packet have completed</doc>
-       <value name="CP_WAIT_IB_PFD_COMPLETE" value="0x5d"/>
-       <doc>register read/modify/write</doc>
-       <value name="CP_REG_RMW" value="0x21"/>
-       <doc>Set binning configuration registers</doc>
-       <value name="CP_SET_BIN_DATA" value="0x2f" varset="chip" variants="A2XX-A4XX"/>
-       <value name="CP_SET_BIN_DATA5" value="0x2f" varset="chip" variants="A5XX-"/>
-       <doc>reads register in chip and writes to memory</doc>
-       <value name="CP_REG_TO_MEM" value="0x3e"/>
-       <doc>write N 32-bit words to memory</doc>
-       <value name="CP_MEM_WRITE" value="0x3d"/>
-       <doc>write CP_PROG_COUNTER value to memory</doc>
-       <value name="CP_MEM_WRITE_CNTR" value="0x4f"/>
-       <doc>conditional execution of a sequence of packets</doc>
-       <value name="CP_COND_EXEC" value="0x44"/>
-       <doc>conditional write to memory or register</doc>
-       <value name="CP_COND_WRITE" value="0x45" varset="chip" variants="A2XX-A4XX"/>
-       <value name="CP_COND_WRITE5" value="0x45" varset="chip" variants="A5XX-"/>
-       <doc>generate an event that creates a write to memory when completed</doc>
-       <value name="CP_EVENT_WRITE" value="0x46"/>
-       <doc>generate a VS|PS_done event</doc>
-       <value name="CP_EVENT_WRITE_SHD" value="0x58"/>
-       <doc>generate a cache flush done event</doc>
-       <value name="CP_EVENT_WRITE_CFL" value="0x59"/>
-       <doc>generate a z_pass done event</doc>
-       <value name="CP_EVENT_WRITE_ZPD" value="0x5b"/>
-       <doc>
-               not sure the real name, but this seems to be what is used for
-               opencl, instead of CP_DRAW_INDX..
-       </doc>
-       <value name="CP_RUN_OPENCL" value="0x31"/>
-       <doc>initiate fetch of index buffer and draw</doc>
-       <value name="CP_DRAW_INDX" value="0x22"/>
-       <doc>draw using supplied indices in packet</doc>
-       <value name="CP_DRAW_INDX_2" value="0x36" varset="chip" variants="A2XX-A4XX"/>  <!-- this is something different on a6xx and unused on a5xx -->
-       <doc>initiate fetch of index buffer and binIDs and draw</doc>
-       <value name="CP_DRAW_INDX_BIN" value="0x34" varset="chip" variants="A2XX-A4XX"/>
-       <doc>initiate fetch of bin IDs and draw using supplied indices</doc>
-       <value name="CP_DRAW_INDX_2_BIN" value="0x35" varset="chip" variants="A2XX-A4XX"/>
-       <doc>begin/end initiator for viz query extent processing</doc>
-       <value name="CP_VIZ_QUERY" value="0x23" varset="chip" variants="A2XX-A4XX"/>
-       <doc>fetch state sub-blocks and initiate shader code DMAs</doc>
-       <value name="CP_SET_STATE" value="0x25"/>
-       <doc>load constant into chip and to memory</doc>
-       <value name="CP_SET_CONSTANT" value="0x2d"/>
-       <doc>load sequencer instruction memory (pointer-based)</doc>
-       <value name="CP_IM_LOAD" value="0x27"/>
-       <doc>load sequencer instruction memory (code embedded in packet)</doc>
-       <value name="CP_IM_LOAD_IMMEDIATE" value="0x2b"/>
-       <doc>load constants from a location in memory</doc>
-       <value name="CP_LOAD_CONSTANT_CONTEXT" value="0x2e" varset="chip" variants="A2XX"/>
-       <doc>selective invalidation of state pointers</doc>
-       <value name="CP_INVALIDATE_STATE" value="0x3b"/>
-       <doc>dynamically changes shader instruction memory partition</doc>
-       <value name="CP_SET_SHADER_BASES" value="0x4a" varset="chip" variants="A2XX-A4XX"/>
-       <doc>sets the 64-bit BIN_MASK register in the PFP</doc>
-       <value name="CP_SET_BIN_MASK" value="0x50" varset="chip" variants="A2XX-A4XX"/>
-       <doc>sets the 64-bit BIN_SELECT register in the PFP</doc>
-       <value name="CP_SET_BIN_SELECT" value="0x51"/>
-       <doc>updates the current context, if needed</doc>
-       <value name="CP_CONTEXT_UPDATE" value="0x5e"/>
-       <doc>generate interrupt from the command stream</doc>
-       <value name="CP_INTERRUPT" value="0x40"/>
-       <doc>copy sequencer instruction memory to system memory</doc>
-       <value name="CP_IM_STORE" value="0x2c" varset="chip" variants="A2XX"/>
-
-       <!-- For a20x -->
-<!-- TODO handle variants..
-       <doc>
-               Program an offset that will added to the BIN_BASE value of
-               the 3D_DRAW_INDX_BIN packet
-       </doc>
-       <value name="CP_SET_BIN_BASE_OFFSET" value="0x4b"/>
- -->
-
-       <!-- for a22x -->
-       <doc>
-               sets draw initiator flags register in PFP, gets bitwise-ORed into
-               every draw initiator
-       </doc>
-       <value name="CP_SET_DRAW_INIT_FLAGS" value="0x4b"/>
-       <doc>sets the register protection mode</doc>
-       <value name="CP_SET_PROTECTED_MODE" value="0x5f"/>
-
-       <value name="CP_BOOTSTRAP_UCODE" value="0x6f"/>
-
-       <!-- for a3xx -->
-       <doc>load high level sequencer command</doc>
-       <value name="CP_LOAD_STATE" value="0x30" varset="chip" variants="A3XX"/>
-       <value name="CP_LOAD_STATE4" value="0x30" varset="chip" variants="A4XX-A5XX"/>
-       <doc>Conditionally load a IB based on a flag, prefetch enabled</doc>
-       <value name="CP_COND_INDIRECT_BUFFER_PFE" value="0x3a"/>
-       <doc>Conditionally load a IB based on a flag, prefetch disabled</doc>
-       <value name="CP_COND_INDIRECT_BUFFER_PFD" value="0x32" varset="chip" variants="A3XX"/>
-       <doc>Load a buffer with pre-fetch enabled</doc>
-       <value name="CP_INDIRECT_BUFFER_PFE" value="0x3f" varset="chip" variants="A5XX"/>
-       <doc>Set bin (?)</doc>
-       <value name="CP_SET_BIN" value="0x4c" varset="chip" variants="A2XX"/>
-
-       <doc>test 2 memory locations to dword values specified</doc>
-       <value name="CP_TEST_TWO_MEMS" value="0x71"/>
-
-       <doc>Write register, ignoring context state for context sensitive registers</doc>
-       <value name="CP_REG_WR_NO_CTXT" value="0x78"/>
-
-       <doc>Record the real-time when this packet is processed by PFP</doc>
-       <value name="CP_RECORD_PFP_TIMESTAMP" value="0x11"/>
-
-       <!-- Used to switch GPU between secure and non-secure modes -->
-       <value name="CP_SET_SECURE_MODE" value="0x66"/>
-
-       <doc>PFP waits until the FIFO between the PFP and the ME is empty</doc>
-       <value name="CP_WAIT_FOR_ME" value="0x13"/>
-
-       <!-- for a4xx -->
-       <doc>
-               Used a bit like CP_SET_CONSTANT on a2xx, but can write multiple
-               groups of registers.  Looks like it can be used to create state
-               objects in GPU memory, and on state change only emit pointer
-               (via CP_SET_DRAW_STATE), which should be nice for reducing CPU
-               overhead:
-
-               (A4x) save PM4 stream pointers to execute upon a visible draw
-       </doc>
-       <value name="CP_SET_DRAW_STATE" value="0x43" varset="chip" variants="A4XX-"/>
-       <value name="CP_DRAW_INDX_OFFSET" value="0x38"/>
-       <value name="CP_DRAW_INDIRECT" value="0x28" varset="chip" variants="A4XX-"/>
-       <value name="CP_DRAW_INDX_INDIRECT" value="0x29" varset="chip" variants="A4XX-"/>
-       <value name="CP_DRAW_INDIRECT_MULTI" value="0x2a" varset="chip" variants="A6XX"/>
-       <value name="CP_DRAW_AUTO" value="0x24"/>
-
-       <value name="CP_UNKNOWN_19" value="0x19"/>
-
-       <doc>set to 1 for fastclear..:</doc>
-       <value name="CP_UNKNOWN_1A" value="0x1a"/>
-
-       <value name="CP_UNKNOWN_4E" value="0x4e"/>
-
-       <doc>
-               for A4xx
-               Write to register with address that does not fit into type-0 pkt
-       </doc>
-       <value name="CP_WIDE_REG_WRITE" value="0x74" varset="chip" variants="A4XX"/>
-
-       <doc>copy from ME scratch RAM to a register</doc>
-       <value name="CP_SCRATCH_TO_REG" value="0x4d"/>
-
-       <doc>Copy from REG to ME scratch RAM</doc>
-       <value name="CP_REG_TO_SCRATCH" value="0x4a"/>
-
-       <doc>Wait for memory writes to complete</doc>
-       <value name="CP_WAIT_MEM_WRITES" value="0x12"/>
-
-       <doc>Conditional execution based on register comparison</doc>
-       <value name="CP_COND_REG_EXEC" value="0x47"/>
-
-       <doc>Memory to REG copy</doc>
-       <value name="CP_MEM_TO_REG" value="0x42"/>
-
-       <value name="CP_EXEC_CS_INDIRECT" value="0x41" varset="chip" variants="A4XX-"/>
-       <value name="CP_EXEC_CS" value="0x33"/>
-
-       <doc>
-               for a5xx
-       </doc>
-       <value name="CP_PERFCOUNTER_ACTION" value="0x50" varset="chip" variants="A5XX"/>
-       <!-- switches SMMU pagetable, used on a5xx+ only -->
-       <value name="CP_SMMU_TABLE_UPDATE" value="0x53" varset="chip" variants="A5XX-"/>
-       <!-- for a6xx -->
-       <doc>Tells CP the current mode of GPU operation</doc>
-       <value name="CP_SET_MARKER" value="0x65" varset="chip" variants="A6XX"/>
-       <doc>Instruct CP to set a few internal CP registers</doc>
-       <value name="CP_SET_PSEUDO_REG" value="0x56" varset="chip" variants="A6XX"/>
-       <!--
-       pairs of regid and value.. seems to be used to program some TF
-       related regs:
-        -->
-       <value name="CP_CONTEXT_REG_BUNCH" value="0x5c" varset="chip" variants="A5XX-"/>
-       <!-- A5XX Enable yield in RB only -->
-       <value name="CP_YIELD_ENABLE" value="0x1c" varset="chip" variants="A5XX"/>
-       <value name="CP_SKIP_IB2_ENABLE_GLOBAL" value="0x1d" varset="chip" variants="A5XX-"/>
-       <value name="CP_SKIP_IB2_ENABLE_LOCAL" value="0x23" varset="chip" variants="A5XX-"/>
-       <value name="CP_SET_SUBDRAW_SIZE" value="0x35" varset="chip" variants="A5XX-"/>
-       <value name="CP_SET_VISIBILITY_OVERRIDE" value="0x64" varset="chip" variants="A5XX-"/>
-       <!-- Enable/Disable/Defer A5x global preemption model -->
-       <value name="CP_PREEMPT_ENABLE_GLOBAL" value="0x69" varset="chip" variants="A5XX"/>
-       <!-- Enable/Disable A5x local preemption model -->
-       <value name="CP_PREEMPT_ENABLE_LOCAL" value="0x6a" varset="chip" variants="A5XX"/>
-       <!-- Yield token on a5xx similar to CP_PREEMPT on a4xx -->
-       <value name="CP_CONTEXT_SWITCH_YIELD" value="0x6b" varset="chip" variants="A5XX"/>
-       <!-- Inform CP about current render mode (needed for a5xx preemption) -->
-       <value name="CP_SET_RENDER_MODE" value="0x6c" varset="chip" variants="A5XX"/>
-       <value name="CP_COMPUTE_CHECKPOINT" value="0x6e" varset="chip" variants="A5XX"/>
-       <!-- check if this works on earlier.. -->
-       <value name="CP_MEM_TO_MEM" value="0x73" varset="chip" variants="A5XX-"/>
-       <value name="CP_BLIT" value="0x2c" varset="chip" variants="A5XX-"/>
-
-       <!-- Test specified bit in specified register and set predicate -->
-       <value name="CP_REG_TEST" value="0x39" varset="chip" variants="A5XX-"/>
-
-       <!--
-       Seems to set the mode flags which control which CP_SET_DRAW_STATE
-       packets are executed, based on their ENABLE_MASK values
-       
-       CP_SET_MODE w/ payload of 0x1 seems to cause CP_SET_DRAW_STATE
-       packets w/ ENABLE_MASK & 0x6 to execute immediately
-        -->
-       <value name="CP_SET_MODE" value="0x63" varset="chip" variants="A6XX"/>
-
-       <!--
-       Seems like there are now separate blocks of state for VS vs FS/CS
-       (probably these amounts to geometry vs fragments so that geometry
-       stage of the pipeline for next draw can start while fragment stage
-       of current draw is still running.  The format of the payload of the
-       packets is the same, the only difference is the offsets of the regs
-       the firmware code that handles the packet writes.
-
-       Note that for CL, starting with a6xx, the preferred # of local
-       threads is no longer the same as the max, implying that the shader
-       core can now run warps from unrelated shaders (ie.
-       CL_KERNEL_PREFERRED_WORK_GROUP_SIZE_MULTIPLE vs
-       CL_KERNEL_WORK_GROUP_SIZE)
-        -->
-       <value name="CP_LOAD_STATE6_GEOM" value="0x32" varset="chip" variants="A6XX"/>
-       <value name="CP_LOAD_STATE6_FRAG" value="0x34" varset="chip" variants="A6XX"/>
-       <!--
-       Note: For IBO state (Image/SSBOs) which have shared state across
-       shader stages, for 3d pipeline CP_LOAD_STATE6 is used.  But for
-       compute shaders, CP_LOAD_STATE6_FRAG is used.  Possibly they are
-       interchangable.
-        -->
-       <value name="CP_LOAD_STATE6" value="0x36" varset="chip" variants="A6XX"/>
-
-       <!-- internal packets: -->
-       <value name="IN_IB_PREFETCH_END" value="0x17" varset="chip" variants="A2XX"/>
-       <value name="IN_SUBBLK_PREFETCH" value="0x1f" varset="chip" variants="A2XX"/>
-       <value name="IN_INSTR_PREFETCH" value="0x20" varset="chip" variants="A2XX"/>
-       <value name="IN_INSTR_MATCH" value="0x47" varset="chip" variants="A2XX"/>
-       <value name="IN_CONST_PREFETCH" value="0x49" varset="chip" variants="A2XX"/>
-       <value name="IN_INCR_UPDT_STATE" value="0x55" varset="chip" variants="A2XX"/>
-       <value name="IN_INCR_UPDT_CONST" value="0x56" varset="chip" variants="A2XX"/>
-       <value name="IN_INCR_UPDT_INSTR" value="0x57" varset="chip" variants="A2XX"/>
-
-       <!-- jmptable entry used to handle type4 packet on a5xx+: -->
-       <value name="PKT4" value="0x04" varset="chip" variants="A5XX-"/>
-
-       <!-- TODO do these exist on A5xx? -->
-       <value name="CP_SCRATCH_WRITE" value="0x4c" varset="chip" variants="A6XX"/>
-       <value name="CP_REG_TO_MEM_OFFSET_MEM" value="0x74" varset="chip" variants="A6XX"/>
-       <value name="CP_REG_TO_MEM_OFFSET_REG" value="0x72" varset="chip" variants="A6XX"/>
-       <value name="CP_WAIT_MEM_GTE" value="0x14" varset="chip" variants="A6XX"/>
-       <value name="CP_WAIT_TWO_REGS" value="0x70" varset="chip" variants="A6XX"/>
-       <value name="CP_MEMCPY" value="0x75" varset="chip" variants="A6XX"/>
-       <value name="CP_SET_BIN_DATA5_OFFSET" value="0x2e" varset="chip" variants="A6XX"/>
-       <value name="CP_SET_CTXSWITCH_IB" value="0x55" varset="chip" variants="A6XX"/>
-
-       <!--
-       Seems to always have the payload:
-         00000002 00008801 00004010
-       or:
-         00000002 00008801 00004090
-       or:
-         00000002 00008801 00000010
-         00000002 00008801 00010010
-         00000002 00008801 00d64010
-         ...
-       Note set for compute shaders..
-       Is 0x8801 a register offset?
-       This appears to be a special sort of register write packet
-       more or less, but the firmware has some special handling..
-       Seems like it intercepts/modifies certain register offsets,
-       but others are treated like a normal PKT4 reg write.  I
-       guess there are some registers that the fw controls certain
-       bits.
-        -->
-       <value name="CP_REG_WRITE" value="0x6d" varset="chip" variants="A6XX"/>
-
-</enum>
-
-
-<domain name="CP_LOAD_STATE" width="32">
-       <doc>Load state, a3xx (and later?)</doc>
-       <enum name="adreno_state_block">
-               <value name="SB_VERT_TEX" value="0"/>
-               <value name="SB_VERT_MIPADDR" value="1"/>
-               <value name="SB_FRAG_TEX" value="2"/>
-               <value name="SB_FRAG_MIPADDR" value="3"/>
-               <value name="SB_VERT_SHADER" value="4"/>
-               <value name="SB_GEOM_SHADER" value="5"/>
-               <value name="SB_FRAG_SHADER" value="6"/>
-               <value name="SB_COMPUTE_SHADER" value="7"/>
-       </enum>
-       <enum name="adreno_state_type">
-               <value name="ST_SHADER" value="0"/>
-               <value name="ST_CONSTANTS" value="1"/>
-       </enum>
-       <enum name="adreno_state_src">
-               <value name="SS_DIRECT" value="0">
-                       <doc>inline with the CP_LOAD_STATE packet</doc>
-               </value>
-               <value name="SS_INVALID_ALL_IC" value="2"/>
-               <value name="SS_INVALID_PART_IC" value="3"/>
-               <value name="SS_INDIRECT" value="4">
-                       <doc>in buffer pointed to by EXT_SRC_ADDR</doc>
-               </value>
-               <value name="SS_INDIRECT_TCM" value="5"/>
-               <value name="SS_INDIRECT_STM" value="6"/>
-       </enum>
-       <reg32 offset="0" name="0">
-               <bitfield name="DST_OFF" low="0" high="15" type="uint"/>
-               <bitfield name="STATE_SRC" low="16" high="18" type="adreno_state_src"/>
-               <bitfield name="STATE_BLOCK" low="19" high="21" type="adreno_state_block"/>
-               <bitfield name="NUM_UNIT" low="22" high="31" type="uint"/>
-       </reg32>
-       <reg32 offset="1" name="1">
-               <bitfield name="STATE_TYPE" low="0" high="1" type="adreno_state_type"/>
-               <bitfield name="EXT_SRC_ADDR" low="2" high="31" shr="2"/>
-       </reg32>
-</domain>
-
-<domain name="CP_LOAD_STATE4" width="32" varset="chip">
-       <doc>Load state, a4xx+</doc>
-       <enum name="a4xx_state_block">
-               <!--
-               unknown: 0x7 and 0xf <- seen in compute shader
-
-               STATE_BLOCK = 0x6, STATE_TYPE = 0x2 possibly used for preemption?
-               Seen in some GL shaders.  Payload is NUM_UNIT dwords, and it contains
-               the gpuaddr of the following shader constants block.  DST_OFF seems
-               to specify which shader stage:
-
-                   16 -> vert
-                   36 -> tcs
-                   56 -> tes
-                   76 -> geom
-                   96 -> frag
-
-               Example:
-
-opcode: CP_LOAD_STATE4 (30) (12 dwords)
-        { DST_OFF = 16 | STATE_SRC = SS4_DIRECT | STATE_BLOCK = 0x6 | NUM_UNIT = 4 }
-        { STATE_TYPE = 0x2 | EXT_SRC_ADDR = 0 }
-        { EXT_SRC_ADDR_HI = 0 }
-                        0000: c0264100 00000000 00000000 00000000
-                0000: 70b0000b 01180010 00000002 00000000 c0264100 00000000 00000000 00000000
-
-opcode: CP_LOAD_STATE4 (30) (4 dwords)
-        { DST_OFF = 16 | STATE_SRC = SS4_INDIRECT | STATE_BLOCK = SB4_VS_SHADER | NUM_UNIT = 4 }
-        { STATE_TYPE = ST4_CONSTANTS | EXT_SRC_ADDR = 0xc0264100 }
-        { EXT_SRC_ADDR_HI = 0 }
-                        0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
-                        0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
-                        0000: 00000040 0000000c 00000000 00000000 00000000 00000000 00000000 00000000
-
-               STATE_BLOCK = 0x6, STATE_TYPE = 0x1, seen in compute shader.  NUM_UNITS * 2 dwords.
-
-                -->
-               <value name="SB4_VS_TEX"    value="0x0"/>
-               <value name="SB4_HS_TEX"    value="0x1"/>    <!-- aka. TCS -->
-               <value name="SB4_DS_TEX"    value="0x2"/>    <!-- aka. TES -->
-               <value name="SB4_GS_TEX"    value="0x3"/>
-               <value name="SB4_FS_TEX"    value="0x4"/>
-               <value name="SB4_CS_TEX"    value="0x5"/>
-               <value name="SB4_VS_SHADER" value="0x8"/>
-               <value name="SB4_HS_SHADER" value="0x9"/>
-               <value name="SB4_DS_SHADER" value="0xa"/>
-               <value name="SB4_GS_SHADER" value="0xb"/>
-               <value name="SB4_FS_SHADER" value="0xc"/>
-               <value name="SB4_CS_SHADER" value="0xd"/>
-               <!--
-               for SSBO, STATE_TYPE=0 appears to be addresses (four dwords each),
-               STATE_TYPE=1 sizes, STATE_TYPE=2 addresses again (two dwords each)
-
-               Compute has it's own dedicated SSBO state, it seems, but the rest
-               of the stages share state
-                -->
-               <value name="SB4_SSBO"   value="0xe"/>
-               <value name="SB4_CS_SSBO"   value="0xf"/>
-       </enum>
-       <enum name="a4xx_state_type">
-               <value name="ST4_SHADER" value="0"/>
-               <value name="ST4_CONSTANTS" value="1"/>
-               <value name="ST4_UBO" value="2"/>
-       </enum>
-       <enum name="a4xx_state_src">
-               <value name="SS4_DIRECT" value="0"/>
-               <value name="SS4_INDIRECT" value="2"/>
-       </enum>
-       <reg32 offset="0" name="0">
-               <bitfield name="DST_OFF" low="0" high="13" type="uint"/>
-               <bitfield name="STATE_SRC" low="16" high="17" type="a4xx_state_src"/>
-               <bitfield name="STATE_BLOCK" low="18" high="21" type="a4xx_state_block"/>
-               <bitfield name="NUM_UNIT" low="22" high="31" type="uint"/>
-       </reg32>
-       <reg32 offset="1" name="1">
-               <bitfield name="STATE_TYPE" low="0" high="1" type="a4xx_state_type"/>
-               <bitfield name="EXT_SRC_ADDR" low="2" high="31" shr="2"/>
-       </reg32>
-       <reg32 offset="2" name="2" varset="chip" variants="A5XX-">
-               <bitfield name="EXT_SRC_ADDR_HI" low="0" high="31" shr="0"/>
-       </reg32>
-</domain>
-
-<!-- looks basically same CP_LOAD_STATE4 -->
-<domain name="CP_LOAD_STATE6" width="32" varset="chip">
-       <doc>Load state, a6xx+</doc>
-       <enum name="a6xx_state_block">
-               <value name="SB6_VS_TEX"    value="0x0"/>
-               <value name="SB6_HS_TEX"    value="0x1"/>    <!-- aka. TCS -->
-               <value name="SB6_DS_TEX"    value="0x2"/>    <!-- aka. TES -->
-               <value name="SB6_GS_TEX"    value="0x3"/>
-               <value name="SB6_FS_TEX"    value="0x4"/>
-               <value name="SB6_CS_TEX"    value="0x5"/>
-               <value name="SB6_VS_SHADER" value="0x8"/>
-               <value name="SB6_HS_SHADER" value="0x9"/>
-               <value name="SB6_DS_SHADER" value="0xa"/>
-               <value name="SB6_GS_SHADER" value="0xb"/>
-               <value name="SB6_FS_SHADER" value="0xc"/>
-               <value name="SB6_CS_SHADER" value="0xd"/>
-               <value name="SB6_IBO"       value="0xe"/>
-               <value name="SB6_CS_IBO"    value="0xf"/>
-       </enum>
-       <enum name="a6xx_state_type">
-               <value name="ST6_SHADER" value="0"/>
-               <value name="ST6_CONSTANTS" value="1"/>
-               <value name="ST6_UBO" value="2"/>
-               <value name="ST6_IBO" value="3"/>
-       </enum>
-       <enum name="a6xx_state_src">
-               <value name="SS6_DIRECT" value="0"/>
-               <value name="SS6_BINDLESS" value="1"/> <!-- TODO does this exist on a4xx/a5xx? -->
-               <value name="SS6_INDIRECT" value="2"/>
-               <doc>
-               SS6_UBO used by the a6xx vulkan blob with tesselation constants
-               in this case, EXT_SRC_ADDR is (ubo_id shl 16 | offset)
-               to load constants from a UBO loaded with DST_OFF = 14 and offset 0,
-               EXT_SRC_ADDR = 0xe0000
-               (offset is a guess, should be in bytes given that maxUniformBufferRange=64k)
-               </doc>
-               <value name="SS6_UBO" value="3"/>
-       </enum>
-       <reg32 offset="0" name="0">
-               <bitfield name="DST_OFF" low="0" high="13" type="uint"/>
-               <bitfield name="STATE_TYPE" low="14" high="15" type="a6xx_state_type"/>
-               <bitfield name="STATE_SRC" low="16" high="17" type="a6xx_state_src"/>
-               <bitfield name="STATE_BLOCK" low="18" high="21" type="a6xx_state_block"/>
-               <bitfield name="NUM_UNIT" low="22" high="31" type="uint"/>
-       </reg32>
-       <reg32 offset="1" name="1">
-               <bitfield name="EXT_SRC_ADDR" low="2" high="31" shr="2"/>
-       </reg32>
-       <reg32 offset="2" name="2">
-               <bitfield name="EXT_SRC_ADDR_HI" low="0" high="31" shr="0"/>
-       </reg32>
-       <reg64 offset="1" name="EXT_SRC_ADDR" type="address"/>
-</domain>
-
-<bitset name="vgt_draw_initiator" inline="yes">
-       <bitfield name="PRIM_TYPE" low="0" high="5" type="pc_di_primtype"/>
-       <bitfield name="SOURCE_SELECT" low="6" high="7" type="pc_di_src_sel"/>
-       <bitfield name="VIS_CULL" low="9" high="10" type="pc_di_vis_cull_mode"/>
-       <bitfield name="INDEX_SIZE" pos="11" type="pc_di_index_size"/>
-       <bitfield name="NOT_EOP" pos="12" type="boolean"/>
-       <bitfield name="SMALL_INDEX" pos="13" type="boolean"/>
-       <bitfield name="PRE_DRAW_INITIATOR_ENABLE" pos="14" type="boolean"/>
-       <bitfield name="NUM_INSTANCES" low="24" high="31" type="uint"/>
-</bitset>
-
-<!-- changed on a4xx: -->
-<enum name="a4xx_index_size">
-       <value name="INDEX4_SIZE_8_BIT" value="0"/>
-       <value name="INDEX4_SIZE_16_BIT" value="1"/>
-       <value name="INDEX4_SIZE_32_BIT" value="2"/>
-</enum>
-
-<enum name="a6xx_patch_type">
-  <value name="TESS_QUADS" value="0"/>
-  <value name="TESS_TRIANGLES" value="1"/>
-  <value name="TESS_ISOLINES" value="2"/>
-</enum>
-
-<bitset name="vgt_draw_initiator_a4xx" inline="yes">
-       <!-- When the 0x20 bit is set, it's the number of patch vertices - 1 -->
-       <bitfield name="PRIM_TYPE" low="0" high="5" type="pc_di_primtype"/>
-       <bitfield name="SOURCE_SELECT" low="6" high="7" type="pc_di_src_sel"/>
-       <bitfield name="VIS_CULL" low="8" high="9" type="pc_di_vis_cull_mode"/>
-       <bitfield name="INDEX_SIZE" low="10" high="11" type="a4xx_index_size"/>
-       <bitfield name="PATCH_TYPE" low="12" high="13" type="a6xx_patch_type"/>
-       <bitfield name="GS_ENABLE" pos="16" type="boolean"/>
-       <bitfield name="TESS_ENABLE" pos="17" type="boolean"/>
-</bitset>
-
-<domain name="CP_DRAW_INDX" width="32">
-       <reg32 offset="0" name="0">
-               <bitfield name="VIZ_QUERY" low="0" high="31"/>
-       </reg32>
-       <reg32 offset="1" name="1" type="vgt_draw_initiator"/>
-       <reg32 offset="2" name="2">
-               <bitfield name="NUM_INDICES" low="0" high="31" type="uint"/>
-       </reg32>
-       <reg32 offset="3" name="3">
-               <bitfield name="INDX_BASE" low="0" high="31"/>
-       </reg32>
-       <reg32 offset="4" name="4">
-               <bitfield name="INDX_SIZE" low="0" high="31"/>
-       </reg32>
-</domain>
-
-<domain name="CP_DRAW_INDX_2" width="32">
-       <reg32 offset="0" name="0">
-               <bitfield name="VIZ_QUERY" low="0" high="31"/>
-       </reg32>
-       <reg32 offset="1" name="1" type="vgt_draw_initiator"/>
-       <reg32 offset="2" name="2">
-               <bitfield name="NUM_INDICES" low="0" high="31" type="uint"/>
-       </reg32>
-       <!-- followed by NUM_INDICES indices.. -->
-</domain>
-
-<domain name="CP_DRAW_INDX_OFFSET" width="32">
-       <reg32 offset="0" name="0" type="vgt_draw_initiator_a4xx"/>
-       <reg32 offset="1" name="1">
-               <bitfield name="NUM_INSTANCES" low="0" high="31" type="uint"/>
-       </reg32>
-       <reg32 offset="2" name="2">
-               <bitfield name="NUM_INDICES" low="0" high="31" type="uint"/>
-       </reg32>
-       <reg32 offset="3" name="3">
-               <bitfield name="FIRST_INDX" low="0" high="31"/>
-       </reg32>
-
-       <stripe varset="chip" variants="A5XX-">
-               <reg32 offset="4" name="4">
-                       <bitfield name="INDX_BASE_LO" low="0" high="31"/>
-               </reg32>
-               <reg32 offset="5" name="5">
-                       <bitfield name="INDX_BASE_HI" low="0" high="31"/>
-               </reg32>
-               <reg64 offset="4" name="INDX_BASE" type="address"/>
-               <reg32 offset="6" name="6">
-                       <!-- max # of elements in index buffer -->
-                       <bitfield name="MAX_INDICES" low="0" high="31"/>
-               </reg32>
-       </stripe>
-
-       <reg32 offset="4" name="4">
-               <bitfield name="INDX_BASE" low="0" high="31" type="address"/>
-       </reg32>
-
-       <reg32 offset="5" name="5">
-               <bitfield name="INDX_SIZE" low="0" high="31" type="uint"/>
-       </reg32>
-</domain>
-
-<domain name="CP_DRAW_INDIRECT" width="32" varset="chip" prefix="chip" variants="A4XX-">
-       <reg32 offset="0" name="0" type="vgt_draw_initiator_a4xx"/>
-       <stripe varset="chip" variants="A4XX">
-               <reg32 offset="1" name="1">
-                       <bitfield name="INDIRECT" low="0" high="31"/>
-               </reg32>
-       </stripe>
-       <stripe varset="chip" variants="A5XX-">
-               <reg32 offset="1" name="1">
-                       <bitfield name="INDIRECT_LO" low="0" high="31"/>
-               </reg32>
-               <reg32 offset="2" name="2">
-                       <bitfield name="INDIRECT_HI" low="0" high="31"/>
-               </reg32>
-               <reg64 offset="1" name="INDIRECT" type="address"/>
-       </stripe>
-</domain>
-
-<domain name="CP_DRAW_INDX_INDIRECT" width="32" varset="chip" prefix="chip" variants="A4XX-">
-       <reg32 offset="0" name="0" type="vgt_draw_initiator_a4xx"/>
-       <stripe varset="chip" variants="A4XX">
-               <reg32 offset="1" name="1">
-                       <bitfield name="INDX_BASE" low="0" high="31"/>
-               </reg32>
-               <reg32 offset="2" name="2">
-                       <!-- max # of bytes in index buffer -->
-                       <bitfield name="INDX_SIZE" low="0" high="31" type="uint"/>
-               </reg32>
-               <reg32 offset="3" name="3">
-                       <bitfield name="INDIRECT" low="0" high="31"/>
-               </reg32>
-       </stripe>
-       <stripe varset="chip" variants="A5XX-">
-               <reg32 offset="1" name="1">
-                       <bitfield name="INDX_BASE_LO" low="0" high="31"/>
-               </reg32>
-               <reg32 offset="2" name="2">
-                       <bitfield name="INDX_BASE_HI" low="0" high="31"/>
-               </reg32>
-               <reg64 offset="1" name="INDX_BASE" type="address"/>
-               <reg32 offset="3" name="3">
-                       <!-- max # of elements in index buffer -->
-                       <bitfield name="MAX_INDICES" low="0" high="31" type="uint"/>
-               </reg32>
-               <reg32 offset="4" name="4">
-                       <bitfield name="INDIRECT_LO" low="0" high="31"/>
-               </reg32>
-               <reg32 offset="5" name="5">
-                       <bitfield name="INDIRECT_HI" low="0" high="31"/>
-               </reg32>
-               <reg64 offset="4" name="INDIRECT" type="address"/>
-       </stripe>
-</domain>
-
-<domain name="CP_DRAW_INDIRECT_MULTI" width="32" varset="chip" prefix="chip" variants="A6XX-">
-       <enum name="a6xx_draw_indirect_opcode">
-               <value name="INDIRECT_OP_NORMAL"  value="0x2"/>
-               <value name="INDIRECT_OP_INDEXED" value="0x4"/>
-               <value name="INDIRECT_OP_INDIRECT_COUNT" value="0x6"/>
-               <value name="INDIRECT_OP_INDIRECT_COUNT_INDEXED" value="0x7"/>
-       </enum>
-       <reg32 offset="0" name="0" type="vgt_draw_initiator_a4xx"/>
-       <reg32 offset="1" name="1">
-               <bitfield name="OPCODE" low="0" high="3" type="a6xx_draw_indirect_opcode" addvariant="yes"/>
-               <doc>
-               DST_OFF same as in CP_LOAD_STATE6 - vec4 VS const at this offset will
-               be updated for each draw to {draw_id, first_vertex, first_instance, 0}
-               value of 0 disables it
-               </doc>
-               <bitfield name="DST_OFF" low="8" high="21" type="hex"/>
-       </reg32>
-       <reg32 offset="2" name="DRAW_COUNT" type="uint"/>
-       <stripe varset="a6xx_draw_indirect_opcode" variants="INDIRECT_OP_NORMAL">
-               <reg64 offset="3" name="INDIRECT" type="address"/>
-               <reg32 offset="5" name="STRIDE" type="uint"/>
-       </stripe>
-       <stripe varset="a6xx_draw_indirect_opcode" variants="INDIRECT_OP_INDEXED">
-               <reg64 offset="3" name="INDEX" type="address"/>
-               <reg32 offset="5" name="MAX_INDICES" type="uint"/>
-               <reg64 offset="6" name="INDIRECT" type="address"/>
-               <reg32 offset="8" name="STRIDE" type="uint"/>
-       </stripe>
-       <stripe varset="a6xx_draw_indirect_opcode" variants="INDIRECT_OP_INDIRECT_COUNT">
-               <reg64 offset="3" name="INDIRECT" type="address"/>
-               <reg64 offset="5" name="INDIRECT_COUNT" type="address"/>
-               <reg32 offset="7" name="STRIDE" type="uint"/>
-       </stripe>
-       <stripe varset="a6xx_draw_indirect_opcode" variants="INDIRECT_OP_INDIRECT_COUNT_INDEXED">
-               <reg64 offset="3" name="INDEX" type="address"/>
-               <reg32 offset="5" name="MAX_INDICES" type="uint"/>
-               <reg64 offset="6" name="INDIRECT" type="address"/>
-               <reg64 offset="8" name="INDIRECT_COUNT" type="address"/>
-               <reg32 offset="10" name="STRIDE" type="uint"/>
-       </stripe>
-</domain>
-
-<domain name="CP_SET_DRAW_STATE" width="32" varset="chip" variants="A4XX-">
-       <array offset="0" name="" stride="3" length="100">
-               <reg32 offset="0" name="0">
-                       <bitfield name="COUNT" low="0" high="15" type="uint"/>
-                       <bitfield name="DIRTY" pos="16" type="boolean"/>
-                       <bitfield name="DISABLE" pos="17" type="boolean"/>
-                       <bitfield name="DISABLE_ALL_GROUPS" pos="18" type="boolean"/>
-                       <bitfield name="LOAD_IMMED" pos="19" type="boolean"/>
-                       <bitfield name="BINNING" pos="20" varset="chip" variants="A6XX-" type="boolean"/>
-                       <bitfield name="GMEM" pos="21" varset="chip" variants="A6XX-" type="boolean"/>
-                       <bitfield name="SYSMEM" pos="22" varset="chip" variants="A6XX-" type="boolean"/>
-                       <bitfield name="GROUP_ID" low="24" high="28" type="uint"/>
-               </reg32>
-               <reg32 offset="1" name="1">
-                       <bitfield name="ADDR_LO" low="0" high="31" type="hex"/>
-               </reg32>
-               <reg32 offset="2" name="2" varset="chip" variants="A5XX-">
-                       <bitfield name="ADDR_HI" low="0" high="31" type="hex"/>
-               </reg32>
-       </array>
-</domain>
-
-<domain name="CP_SET_BIN" width="32">
-       <doc>value at offset 0 always seems to be 0x00000000..</doc>
-       <reg32 offset="0" name="0"/>
-       <reg32 offset="1" name="1">
-               <bitfield name="X1" low="0" high="15" type="uint"/>
-               <bitfield name="Y1" low="16" high="31" type="uint"/>
-       </reg32>
-       <reg32 offset="2" name="2">
-               <bitfield name="X2" low="0" high="15" type="uint"/>
-               <bitfield name="Y2" low="16" high="31" type="uint"/>
-       </reg32>
-</domain>
-
-<domain name="CP_SET_BIN_DATA" width="32">
-       <reg32 offset="0" name="0">
-               <!-- corresponds to VSC_PIPE[n].DATA_ADDR -->
-               <bitfield name="BIN_DATA_ADDR" low="0" high="31" type="hex"/>
-       </reg32>
-       <reg32 offset="1" name="1">
-               <!-- seesm to correspond to VSC_SIZE_ADDRESS -->
-               <bitfield name="BIN_SIZE_ADDRESS" low="0" high="31"/>
-       </reg32>
-</domain>
-
-<domain name="CP_SET_BIN_DATA5" width="32">
-       <reg32 offset="0" name="0">
-               <!-- equiv to PC_VSTREAM_CONTROL.SIZE on a3xx/a4xx: -->
-               <bitfield name="VSC_SIZE" low="16" high="21" type="uint"/>
-               <!-- equiv to PC_VSTREAM_CONTROL.N on a3xx/a4xx: -->
-               <bitfield name="VSC_N" low="22" high="26" type="uint"/>
-       </reg32>
-       <!-- BIN_DATA_ADDR -> VSC_PIPE[p].DATA_ADDRESS -->
-       <reg32 offset="1" name="1">
-               <bitfield name="BIN_DATA_ADDR_LO" low="0" high="31" type="hex"/>
-       </reg32>
-       <reg32 offset="2" name="2">
-               <bitfield name="BIN_DATA_ADDR_HI" low="0" high="31" type="hex"/>
-       </reg32>
-       <!-- BIN_SIZE_ADDRESS -> VSC_SIZE_ADDRESS + (p * 4)-->
-       <reg32 offset="3" name="3">
-               <bitfield name="BIN_SIZE_ADDRESS_LO" low="0" high="31"/>
-       </reg32>
-       <reg32 offset="4" name="4">
-               <bitfield name="BIN_SIZE_ADDRESS_HI" low="0" high="31"/>
-       </reg32>
-       <!-- new on a6xx, where BIN_DATA_ADDR is the DRAW_STRM: -->
-       <reg32 offset="5" name="5">
-               <bitfield name="BIN_PRIM_STRM_LO" low="0" high="31"/>
-       </reg32>
-       <reg32 offset="6" name="6">
-               <bitfield name="BIN_PRIM_STRM_HI" low="0" high="31"/>
-       </reg32>
-</domain>
-
-<domain name="CP_SET_BIN_DATA5_OFFSET" width="32">
-       <doc>
-                Like CP_SET_BIN_DATA5, but set the pointers as offsets from the
-                pointers stored in VSC_PIPE_{DATA,DATA2,SIZE}_ADDRESS. Useful
-                for Vulkan where these values aren't known when the command
-                stream is recorded.
-       </doc>
-       <reg32 offset="0" name="0">
-               <!-- equiv to PC_VSTREAM_CONTROL.SIZE on a3xx/a4xx: -->
-               <bitfield name="VSC_SIZE" low="16" high="21" type="uint"/>
-               <!-- equiv to PC_VSTREAM_CONTROL.N on a3xx/a4xx: -->
-               <bitfield name="VSC_N" low="22" high="26" type="uint"/>
-       </reg32>
-       <!-- BIN_DATA_ADDR -> VSC_PIPE[p].DATA_ADDRESS -->
-       <reg32 offset="1" name="1">
-               <bitfield name="BIN_DATA_OFFSET" low="0" high="31" type="uint"/>
-       </reg32>
-       <!-- BIN_SIZE_ADDRESS -> VSC_SIZE_ADDRESS + (p * 4)-->
-       <reg32 offset="2" name="2">
-               <bitfield name="BIN_SIZE_OFFSET" low="0" high="31" type="uint"/>
-       </reg32>
-       <!-- BIN_DATA2_ADDR -> VSC_PIPE[p].DATA2_ADDRESS -->
-       <reg32 offset="3" name="3">
-               <bitfield name="BIN_DATA2_OFFSET" low="0" high="31" type="uint"/>
-       </reg32>
-</domain>
-
-<domain name="CP_REG_RMW" width="32">
-       <doc>
-                Modifies DST_REG using two sources that can either be registers
-                or immediates. If SRC1_ADD is set, then do the following:
-
-                       $dst = (($dst &amp; $src0) rot $rotate) + $src1
-
-               Otherwise:
-
-                       $dst = (($dst &amp; $src0) rot $rotate) | $src1
-
-               Here "rot" means rotate left.
-       </doc>
-       <reg32 offset="0" name="0">
-               <bitfield name="DST_REG" low="0" high="17" type="hex"/>
-               <bitfield name="ROTATE" low="24" high="28" type="uint"/>
-               <bitfield name="SRC1_ADD" pos="29" type="boolean"/>
-               <bitfield name="SRC1_IS_REG" pos="30" type="boolean"/>
-               <bitfield name="SRC0_IS_REG" pos="31" type="boolean"/>
-       </reg32>
-       <reg32 offset="1" name="1">
-               <bitfield name="SRC0" low="0" high="31" type="uint"/>
-       </reg32>
-       <reg32 offset="2" name="2">
-               <bitfield name="SRC1" low="0" high="31" type="uint"/>
-       </reg32>
-</domain>
-
-<domain name="CP_REG_TO_MEM" width="32">
-       <reg32 offset="0" name="0">
-               <bitfield name="REG" low="0" high="17" type="hex"/>
-               <!-- number of registers/dwords copied is max(CNT, 1). -->
-               <bitfield name="CNT" low="18" high="29" type="uint"/>
-               <bitfield name="64B" pos="30" type="boolean"/>
-               <bitfield name="ACCUMULATE" pos="31" type="boolean"/>
-       </reg32>
-       <reg32 offset="1" name="1">
-               <bitfield name="DEST" low="0" high="31"/>
-       </reg32>
-       <reg32 offset="2" name="2" varset="chip" variants="A5XX-">
-               <bitfield name="DEST_HI" low="0" high="31"/>
-       </reg32>
-</domain>
-
-<domain name="CP_REG_TO_MEM_OFFSET_REG" width="32">
-       <doc>
-                Like CP_REG_TO_MEM, but the memory address to write to can be
-                offsetted using either one or two registers or scratch
-                registers.
-       </doc>
-       <reg32 offset="0" name="0">
-               <bitfield name="REG" low="0" high="17" type="hex"/>
-               <!-- number of registers/dwords copied is max(CNT, 1). -->
-               <bitfield name="CNT" low="18" high="29" type="uint"/>
-               <bitfield name="64B" pos="30" type="boolean"/>
-               <bitfield name="ACCUMULATE" pos="31" type="boolean"/>
-       </reg32>
-       <reg32 offset="1" name="1">
-               <bitfield name="DEST" low="0" high="31"/>
-       </reg32>
-       <reg32 offset="2" name="2" varset="chip" variants="A5XX-">
-               <bitfield name="DEST_HI" low="0" high="31"/>
-       </reg32>
-       <reg32 offset="3" name="3">
-               <bitfield name="OFFSET0" low="0" high="17" type="hex"/>
-               <bitfield name="OFFSET0_SCRATCH" pos="19" type="boolean"/>
-       </reg32>
-       <!-- followed by an optional identical OFFSET1 dword -->
-</domain>
-
-<domain name="CP_REG_TO_MEM_OFFSET_MEM" width="32">
-       <doc>
-                Like CP_REG_TO_MEM, but the memory address to write to can be
-                offsetted using a DWORD in memory.
-       </doc>
-       <reg32 offset="0" name="0">
-               <bitfield name="REG" low="0" high="17" type="hex"/>
-               <!-- number of registers/dwords copied is max(CNT, 1). -->
-               <bitfield name="CNT" low="18" high="29" type="uint"/>
-               <bitfield name="64B" pos="30" type="boolean"/>
-               <bitfield name="ACCUMULATE" pos="31" type="boolean"/>
-       </reg32>
-       <reg32 offset="1" name="1">
-               <bitfield name="DEST" low="0" high="31"/>
-       </reg32>
-       <reg32 offset="2" name="2" varset="chip" variants="A5XX-">
-               <bitfield name="DEST_HI" low="0" high="31"/>
-       </reg32>
-       <reg32 offset="3" name="3">
-               <bitfield name="OFFSET_LO" low="0" high="31" type="hex"/>
-       </reg32>
-       <reg32 offset="4" name="4">
-               <bitfield name="OFFSET_HI" low="0" high="31" type="hex"/>
-       </reg32>
-</domain>
-
-<domain name="CP_MEM_TO_REG" width="32">
-       <reg32 offset="0" name="0">
-               <bitfield name="REG" low="0" high="17" type="hex"/>
-               <!-- number of registers/dwords copied is max(CNT, 1). -->
-               <bitfield name="CNT" low="19" high="29" type="uint"/>
-               <!-- shift each DWORD left by 2 while copying -->
-               <bitfield name="SHIFT_BY_2" pos="30" type="boolean"/>
-               <!-- does the same thing as CP_MEM_TO_MEM::UNK31 -->
-               <bitfield name="UNK31" pos="31" type="boolean"/>
-       </reg32>
-       <reg32 offset="1" name="1">
-               <bitfield name="SRC" low="0" high="31"/>
-       </reg32>
-       <reg32 offset="2" name="2" varset="chip" variants="A5XX-">
-               <bitfield name="SRC_HI" low="0" high="31"/>
-       </reg32>
-</domain>
-
-<domain name="CP_MEM_TO_MEM" width="32">
-       <reg32 offset="0" name="0">
-               <!--
-               not sure how many src operands we have, but the low
-               bits negate the n'th src argument.
-                -->
-               <bitfield name="NEG_A" pos="0" type="boolean"/>
-               <bitfield name="NEG_B" pos="1" type="boolean"/>
-               <bitfield name="NEG_C" pos="2" type="boolean"/>
-
-               <!-- if set treat src/dst as 64bit values -->
-               <bitfield name="DOUBLE" pos="29" type="boolean"/>
-               <!-- execute CP_WAIT_FOR_MEM_WRITES beforehand -->
-               <bitfield name="WAIT_FOR_MEM_WRITES" pos="30" type="boolean"/>
-               <!-- some other kind of wait -->
-               <bitfield name="UNK31" pos="31" type="boolean"/>
-       </reg32>
-       <!--
-       followed by sequence of addresses.. the first is the
-       destination and the rest are N src addresses which are
-       summed (after being negated if NEG_x bit set) allowing
-       to do things like 'result += end - start' (which turns
-       out to be useful for queries and accumulating results
-       across multiple tiles)
-        -->
-</domain>
-
-<domain name="CP_MEMCPY" width="32">
-       <reg32 offset="0" name="0">
-               <bitfield name="DWORDS" low="0" high="31" type="uint"/>
-       </reg32>
-       <reg32 offset="1" name="1">
-               <bitfield name="SRC_LO" low="0" high="31" type="hex"/>
-       </reg32>
-       <reg32 offset="2" name="2">
-               <bitfield name="SRC_HI" low="0" high="31" type="hex"/>
-       </reg32>
-       <reg32 offset="3" name="3">
-               <bitfield name="DST_LO" low="0" high="31" type="hex"/>
-       </reg32>
-       <reg32 offset="4" name="4">
-               <bitfield name="DST_HI" low="0" high="31" type="hex"/>
-       </reg32>
-</domain>
-
-<domain name="CP_REG_TO_SCRATCH" width="32">
-       <reg32 offset="0" name="0">
-               <bitfield name="REG" low="0" high="17" type="hex"/>
-               <bitfield name="SCRATCH" low="20" high="22" type="uint"/>
-               <!-- number of registers/dwords copied is CNT + 1. -->
-               <bitfield name="CNT" low="24" high="26" type="uint"/>
-       </reg32>
-</domain>
-
-<domain name="CP_SCRATCH_TO_REG" width="32">
-       <reg32 offset="0" name="0">
-               <bitfield name="REG" low="0" high="17" type="hex"/>
-               <!-- note: CP_MEM_TO_REG always sets this when writing to the register -->
-               <bitfield name="UNK18" pos="18" type="boolean"/>
-               <bitfield name="SCRATCH" low="20" high="22" type="uint"/>
-               <!-- number of registers/dwords copied is CNT + 1. -->
-               <bitfield name="CNT" low="24" high="26" type="uint"/>
-       </reg32>
-</domain>
-
-<domain name="CP_SCRATCH_WRITE" width="32">
-       <reg32 offset="0" name="0">
-               <bitfield name="SCRATCH" low="20" high="22" type="uint"/>
-       </reg32>
-       <!-- followed by one or more DWORDs to write to scratch registers -->
-</domain>
-
-<domain name="CP_MEM_WRITE" width="32">
-       <reg32 offset="0" name="0">
-               <bitfield name="ADDR_LO" low="0" high="31"/>
-       </reg32>
-       <reg32 offset="1" name="1">
-               <bitfield name="ADDR_HI" low="0" high="31"/>
-       </reg32>
-       <!-- followed by the DWORDs to write -->
-</domain>
-
-<enum name="cp_cond_function">
-       <value value="0" name="WRITE_ALWAYS"/>
-       <value value="1" name="WRITE_LT"/>
-       <value value="2" name="WRITE_LE"/>
-       <value value="3" name="WRITE_EQ"/>
-       <value value="4" name="WRITE_NE"/>
-       <value value="5" name="WRITE_GE"/>
-       <value value="6" name="WRITE_GT"/>
-</enum>
-
-<domain name="CP_COND_WRITE" width="32">
-       <reg32 offset="0" name="0">
-               <bitfield name="FUNCTION" low="0" high="2" type="cp_cond_function"/>
-               <bitfield name="POLL_MEMORY" pos="4" type="boolean"/>
-               <bitfield name="WRITE_MEMORY" pos="8" type="boolean"/>
-       </reg32>
-       <reg32 offset="1" name="1">
-               <bitfield name="POLL_ADDR" low="0" high="31" type="hex"/>
-       </reg32>
-       <reg32 offset="2" name="2">
-               <bitfield name="REF" low="0" high="31"/>
-       </reg32>
-       <reg32 offset="3" name="3">
-               <bitfield name="MASK" low="0" high="31"/>
-       </reg32>
-       <reg32 offset="4" name="4">
-               <bitfield name="WRITE_ADDR" low="0" high="31" type="hex"/>
-       </reg32>
-       <reg32 offset="5" name="5">
-               <bitfield name="WRITE_DATA" low="0" high="31"/>
-       </reg32>
-</domain>
-
-<domain name="CP_COND_WRITE5" width="32">
-       <reg32 offset="0" name="0">
-               <bitfield name="FUNCTION" low="0" high="2" type="cp_cond_function"/>
-               <bitfield name="SIGNED_COMPARE" pos="3" type="boolean"/>
-                <!-- if both POLL_MEMORY and POLL_SCRATCH are false, it polls a register at POLL_ADDR_LO instead. -->
-               <bitfield name="POLL_MEMORY" pos="4" type="boolean"/>
-               <bitfield name="POLL_SCRATCH" pos="5" type="boolean"/>
-               <bitfield name="WRITE_MEMORY" pos="8" type="boolean"/>
-       </reg32>
-       <reg32 offset="1" name="1">
-               <bitfield name="POLL_ADDR_LO" low="0" high="31" type="hex"/>
-       </reg32>
-       <reg32 offset="2" name="2">
-               <bitfield name="POLL_ADDR_HI" low="0" high="31" type="hex"/>
-       </reg32>
-       <reg32 offset="3" name="3">
-               <bitfield name="REF" low="0" high="31"/>
-       </reg32>
-       <reg32 offset="4" name="4">
-               <bitfield name="MASK" low="0" high="31"/>
-       </reg32>
-       <reg32 offset="5" name="5">
-               <bitfield name="WRITE_ADDR_LO" low="0" high="31" type="hex"/>
-       </reg32>
-       <reg32 offset="6" name="6">
-               <bitfield name="WRITE_ADDR_HI" low="0" high="31" type="hex"/>
-       </reg32>
-       <reg32 offset="7" name="7">
-               <bitfield name="WRITE_DATA" low="0" high="31"/>
-       </reg32>
-</domain>
-
-<domain name="CP_WAIT_MEM_GTE" width="32">
-        <doc>
-                Wait until a memory value is greater than or equal to the
-                reference, using signed comparison.
-       </doc>
-       <reg32 offset="0" name="0">
-               <!-- Reserved for flags, presumably? Unused in FW -->
-               <bitfield name="RESERVED" low="0" high="31" type="hex"/>
-       </reg32>
-       <reg32 offset="1" name="1">
-               <bitfield name="POLL_ADDR_LO" low="0" high="31" type="hex"/>
-       </reg32>
-       <reg32 offset="2" name="2">
-               <bitfield name="POLL_ADDR_HI" low="0" high="31" type="hex"/>
-       </reg32>
-       <reg32 offset="3" name="3">
-               <bitfield name="REF" low="0" high="31"/>
-       </reg32>
-</domain>
-
-<domain name="CP_WAIT_REG_MEM" width="32">
-        <doc>
-                This uses the same internal comparison as CP_COND_WRITE,
-                but waits until the comparison is true instead. It busy-loops in
-                the CP for the given number of cycles before trying again.
-       </doc>
-       <reg32 offset="0" name="0">
-               <bitfield name="FUNCTION" low="0" high="2" type="cp_cond_function"/>
-               <bitfield name="SIGNED_COMPARE" pos="3" type="boolean"/>
-               <bitfield name="POLL_MEMORY" pos="4" type="boolean"/>
-               <bitfield name="POLL_SCRATCH" pos="5" type="boolean"/>
-               <bitfield name="WRITE_MEMORY" pos="8" type="boolean"/>
-       </reg32>
-       <reg32 offset="1" name="1">
-               <bitfield name="POLL_ADDR_LO" low="0" high="31" type="hex"/>
-       </reg32>
-       <reg32 offset="2" name="2">
-               <bitfield name="POLL_ADDR_HI" low="0" high="31" type="hex"/>
-       </reg32>
-       <reg32 offset="3" name="3">
-               <bitfield name="REF" low="0" high="31"/>
-       </reg32>
-       <reg32 offset="4" name="4">
-               <bitfield name="MASK" low="0" high="31"/>
-       </reg32>
-       <reg32 offset="5" name="5">
-               <bitfield name="DELAY_LOOP_CYCLES" low="0" high="31"/>
-       </reg32>
-</domain>
-
-<domain name="CP_WAIT_TWO_REGS" width="32">
-       <doc>
-               Waits for REG0 to not be 0 or REG1 to not equal REF
-       </doc>
-       <reg32 offset="0" name="0">
-               <bitfield name="REG0" low="0" high="17" type="hex"/>
-       </reg32>
-       <reg32 offset="1" name="1">
-               <bitfield name="REG1" low="0" high="17" type="hex"/>
-       </reg32>
-       <reg32 offset="2" name="2">
-               <bitfield name="REF" low="0" high="31" type="uint"/>
-       </reg32>
-</domain>
-
-<domain name="CP_DISPATCH_COMPUTE" width="32">
-       <reg32 offset="0" name="0"/>
-       <reg32 offset="1" name="1">
-               <bitfield name="X" low="0" high="31"/>
-       </reg32>
-       <reg32 offset="2" name="2">
-               <bitfield name="Y" low="0" high="31"/>
-       </reg32>
-       <reg32 offset="3" name="3">
-               <bitfield name="Z" low="0" high="31"/>
-       </reg32>
-</domain>
-
-<domain name="CP_SET_RENDER_MODE" width="32">
-       <enum name="render_mode_cmd">
-               <value value="1" name="BYPASS"/>
-               <value value="2" name="BINNING"/>
-               <value value="3" name="GMEM"/>
-               <value value="5" name="BLIT2D"/>
-               <!-- placeholder name.. used when CP_BLIT packets with BLIT_OP_SCALE?? -->
-               <value value="7" name="BLIT2DSCALE"/>
-               <!-- 8 set before going back to BYPASS exiting 2D -->
-               <value value="8" name="END2D"/>
-       </enum>
-       <reg32 offset="0" name="0">
-               <bitfield name="MODE" low="0" high="8" type="render_mode_cmd"/>
-               <!--
-               normally 0x1/0x3, sometimes see 0x5/0x8 with unknown registers in
-               0x21xx range.. possibly (at least some) a5xx variants have a
-               2d core?
-                -->
-       </reg32>
-       <!-- I think first buffer is for GPU to save context in case of ctx switch? -->
-       <reg32 offset="1" name="1">
-               <bitfield name="ADDR_0_LO" low="0" high="31"/>
-       </reg32>
-       <reg32 offset="2" name="2">
-               <bitfield name="ADDR_0_HI" low="0" high="31"/>
-       </reg32>
-       <reg32 offset="3" name="3">
-               <!--
-               set when in GMEM.. maybe indicates GMEM contents need to be
-               preserved on ctx switch?
-                -->
-               <bitfield name="VSC_ENABLE" pos="3" type="boolean"/>
-               <bitfield name="GMEM_ENABLE" pos="4" type="boolean"/>
-       </reg32>
-       <reg32 offset="4" name="4"/>
-       <!-- second buffer looks like some cmdstream.. length in dwords: -->
-       <reg32 offset="5" name="5">
-               <bitfield name="ADDR_1_LEN" low="0" high="31" type="uint"/>
-       </reg32>
-       <reg32 offset="6" name="6">
-               <bitfield name="ADDR_1_LO" low="0" high="31"/>
-       </reg32>
-       <reg32 offset="7" name="7">
-               <bitfield name="ADDR_1_HI" low="0" high="31"/>"
-       </reg32>
-</domain>
-
-<!-- this looks fairly similar to CP_SET_RENDER_MODE minus first dword -->
-<domain name="CP_COMPUTE_CHECKPOINT" width="32">
-       <!-- I think first buffer is for GPU to save context in case of ctx switch? -->
-       <reg32 offset="0" name="0">
-               <bitfield name="ADDR_0_LO" low="0" high="31"/>
-       </reg32>
-       <reg32 offset="1" name="1">
-               <bitfield name="ADDR_0_HI" low="0" high="31"/>
-       </reg32>
-       <reg32 offset="2" name="2">
-       </reg32>
-       <!-- second buffer looks like some cmdstream.. length in dwords: -->
-       <reg32 offset="3" name="3">
-               <bitfield name="ADDR_1_LEN" low="0" high="31" type="uint"/>
-       </reg32>
-       <reg32 offset="4" name="4"/>
-       <reg32 offset="5" name="5">
-               <bitfield name="ADDR_1_LO" low="0" high="31"/>
-       </reg32>
-       <reg32 offset="6" name="6">
-               <bitfield name="ADDR_1_HI" low="0" high="31"/>"
-       </reg32>
-       <reg32 offset="7" name="7"/>
-</domain>
-
-<domain name="CP_PERFCOUNTER_ACTION" width="32">
-       <reg32 offset="0" name="0">
-       </reg32>
-       <reg32 offset="1" name="1">
-               <bitfield name="ADDR_0_LO" low="0" high="31"/>
-       </reg32>
-       <reg32 offset="2" name="2">
-               <bitfield name="ADDR_0_HI" low="0" high="31"/>
-       </reg32>
-</domain>
-
-<domain name="CP_EVENT_WRITE" width="32">
-       <reg32 offset="0" name="0">
-               <bitfield name="EVENT" low="0" high="7" type="vgt_event_type"/>
-               <!-- when set, write back timestamp instead of value from packet: -->
-               <bitfield name="TIMESTAMP" pos="30" type="boolean"/>
-               <bitfield name="IRQ" pos="31" type="boolean"/>
-       </reg32>
-       <!--
-       TODO what is gpuaddr for, seems to be all 0's.. maybe needed for
-       context switch?
-        -->
-       <reg32 offset="1" name="1">
-               <bitfield name="ADDR_0_LO" low="0" high="31"/>
-       </reg32>
-       <reg32 offset="2" name="2">
-               <bitfield name="ADDR_0_HI" low="0" high="31"/>
-       </reg32>
-       <reg32 offset="3" name="3">
-               <!-- ??? -->
-       </reg32>
-</domain>
-
-<domain name="CP_BLIT" width="32">
-       <enum name="cp_blit_cmd">
-               <value value="0" name="BLIT_OP_FILL"/>
-               <value value="1" name="BLIT_OP_COPY"/>
-               <value value="3" name="BLIT_OP_SCALE"/> <!-- used for mipmap generation -->
-       </enum>
-       <reg32 offset="0" name="0">
-               <bitfield name="OP" low="0" high="3" type="cp_blit_cmd"/>
-       </reg32>
-       <reg32 offset="1" name="1">
-               <bitfield name="SRC_X1" low="0" high="13" type="uint"/>
-               <bitfield name="SRC_Y1" low="16" high="29" type="uint"/>
-       </reg32>
-       <reg32 offset="2" name="2">
-               <bitfield name="SRC_X2" low="0" high="13" type="uint"/>
-               <bitfield name="SRC_Y2" low="16" high="29" type="uint"/>
-       </reg32>
-       <reg32 offset="3" name="3">
-               <bitfield name="DST_X1" low="0" high="13" type="uint"/>
-               <bitfield name="DST_Y1" low="16" high="29" type="uint"/>
-       </reg32>
-       <reg32 offset="4" name="4">
-               <bitfield name="DST_X2" low="0" high="13" type="uint"/>
-               <bitfield name="DST_Y2" low="16" high="29" type="uint"/>
-       </reg32>
-</domain>
-
-<domain name="CP_EXEC_CS" width="32">
-       <reg32 offset="0" name="0">
-       </reg32>
-       <reg32 offset="1" name="1">
-               <bitfield name="NGROUPS_X" low="0" high="31" type="uint"/>
-       </reg32>
-       <reg32 offset="2" name="2">
-               <bitfield name="NGROUPS_Y" low="0" high="31" type="uint"/>
-       </reg32>
-       <reg32 offset="3" name="3">
-               <bitfield name="NGROUPS_Z" low="0" high="31" type="uint"/>
-       </reg32>
-</domain>
-
-<domain name="CP_EXEC_CS_INDIRECT" width="32" varset="chip" prefix="chip" variants="A4XX-">
-       <reg32 offset="0" name="0">
-       </reg32>
-       <stripe varset="chip" variants="A4XX">
-               <reg32 offset="1" name="1">
-                       <bitfield name="ADDR" low="0" high="31"/>
-               </reg32>
-               <reg32 offset="2" name="2">
-                       <!-- localsize is value minus one: -->
-                       <bitfield name="LOCALSIZEX" low="2" high="11" type="uint"/>
-                       <bitfield name="LOCALSIZEY" low="12" high="21" type="uint"/>
-                       <bitfield name="LOCALSIZEZ" low="22" high="31" type="uint"/>
-               </reg32>
-       </stripe>
-       <stripe varset="chip" variants="A5XX-">
-               <reg32 offset="1" name="1">
-                       <bitfield name="ADDR_LO" low="0" high="31"/>
-               </reg32>
-               <reg32 offset="2" name="2">
-                       <bitfield name="ADDR_HI" low="0" high="31"/>
-               </reg32>
-               <reg32 offset="3" name="3">
-                       <!-- localsize is value minus one: -->
-                       <bitfield name="LOCALSIZEX" low="2" high="11" type="uint"/>
-                       <bitfield name="LOCALSIZEY" low="12" high="21" type="uint"/>
-                       <bitfield name="LOCALSIZEZ" low="22" high="31" type="uint"/>
-               </reg32>
-       </stripe>
-</domain>
-
-<domain name="CP_SET_MARKER" width="32" varset="chip" prefix="chip" variants="A6XX-">
-       <doc>Tell CP the current operation mode, indicates save and restore procedure</doc>
-       <enum name="a6xx_render_mode">
-               <value value="1" name="RM6_BYPASS"/>
-               <value value="2" name="RM6_BINNING"/>
-               <value value="4" name="RM6_GMEM"/>
-               <value value="5" name="RM6_ENDVIS"/>
-               <value value="6" name="RM6_RESOLVE"/>
-               <value value="7" name="RM6_YIELD"/>
-               <value value="8" name="RM6_COMPUTE"/>
-               <value value="0xc" name="RM6_BLIT2DSCALE"/>  <!-- no-op (at least on current sqe fw) -->
-
-               <!--
-                       These values come from a6xx_set_marker() in the
-                       downstream kernel, and they can only be set by the kernel
-               -->
-               <value value="0xd" name="RM6_IB1LIST_START"/>
-               <value value="0xe" name="RM6_IB1LIST_END"/>
-               <!-- IFPC - inter-frame power collapse -->
-               <value value="0x100" name="RM6_IFPC_ENABLE"/>
-               <value value="0x101" name="RM6_IFPC_DISABLE"/>
-       </enum>
-       <reg32 offset="0" name="0">
-               <!--
-                       NOTE: blob driver and some versions of freedreno/turnip set
-                       b4, which is unused (at least by current sqe fw), but interferes
-                       with parsing if we extend the size of the bitfield to include
-                       b8 (only sent by kernel mode driver).  Really, the way the
-                       parsing works in the firmware, only b0-b3 are considered, but
-                       if b8 is set, the low bits are interpreted differently.  To
-                       model this, without getting confused by spurious b4, this is
-                       described as two overlapping bitfields:
-                -->
-               <bitfield name="MODE" low="0" high="8" type="a6xx_render_mode"/>
-               <bitfield name="MARKER" low="0" high="3" type="a6xx_render_mode"/>
-       </reg32>
-</domain>
-
-<domain name="CP_SET_PSEUDO_REG" width="32" varset="chip" prefix="chip" variants="A6XX-">
-       <doc>Set internal CP registers, used to indicate context save data addresses</doc>
-       <enum name="pseudo_reg">
-               <value value="0" name="SMMU_INFO"/>
-               <value value="1" name="NON_SECURE_SAVE_ADDR"/>
-               <value value="2" name="SECURE_SAVE_ADDR"/>
-               <value value="3" name="NON_PRIV_SAVE_ADDR"/>
-               <value value="4" name="COUNTER"/>
-       </enum>
-       <array offset="0" name="" stride="3" length="100">
-               <reg32 offset="0" name="0">
-                       <bitfield name="PSEUDO_REG" low="0" high="2" type="pseudo_reg"/>
-               </reg32>
-               <reg32 offset="1" name="1">
-                       <bitfield name="LO" low="0" high="31"/>
-               </reg32>
-               <reg32 offset="2" name="2">
-                       <bitfield name="HI" low="0" high="31"/>
-               </reg32>
-       </array>
-</domain>
-
-<domain name="CP_REG_TEST" width="32" varset="chip" prefix="chip" variants="A6XX-">
-       <doc>
-               Tests bit in specified register and sets predicate for CP_COND_REG_EXEC.
-               So:
-
-                       opcode: CP_REG_TEST (39) (2 dwords)
-                               { REG = 0xc10 | BIT = 0 }
-                                      0000: 70b90001 00000c10
-                       opcode: CP_COND_REG_EXEC (47) (3 dwords)
-                                      0000: 70c70002 10000000 00000004
-                       opcode: CP_INDIRECT_BUFFER (3f) (4 dwords)
-
-               Will execute the CP_INDIRECT_BUFFER only if b0 in the register at
-               offset 0x0c10 is 1
-       </doc>
-       <reg32 offset="0" name="0">
-               <!-- the register to test -->
-               <bitfield name="REG" low="0" high="17"/>
-               <!-- the bit to test -->
-               <bitfield name="BIT" low="20" high="24" type="uint"/>
-               <!-- execute CP_WAIT_FOR_ME beforehand -->
-               <bitfield name="WAIT_FOR_ME" pos="25" type="boolean"/>
-       </reg32>
-</domain>
-
-<!-- I *think* this existed at least as far back as a4xx -->
-<domain name="CP_COND_REG_EXEC" width="32">
-       <enum name="compare_mode">
-               <!-- use the predicate bit set by CP_REG_TEST -->
-               <value value="1" name="PRED_TEST"/>
-               <!-- compare two registers directly for equality -->
-               <value value="2" name="REG_COMPARE"/>
-               <!-- test if certain render modes are set via CP_SET_MARKER -->
-               <value value="3" name="RENDER_MODE" varset="chip" variants="A6XX-"/>
-       </enum>
-       <reg32 offset="0" name="0">
-               <bitfield name="REG0" low="0" high="17" type="hex"/>
-
-               <!--
-                       Note: these bits have the same meaning, and use the same
-                       internal mechanism as the bits in CP_SET_DRAW_STATE.
-                       When RENDER_MODE is selected, they're used as
-                       a bitmask of which modes pass the test.
-               -->
-
-               <!-- RM6_BINNING -->
-               <bitfield name="BINNING" pos="25" varset="chip" variants="A6XX-" type="boolean"/>
-               <!-- all others -->
-               <bitfield name="GMEM" pos="26" varset="chip" variants="A6XX-" type="boolean"/>
-               <!-- RM6_BYPASS -->
-               <bitfield name="SYSMEM" pos="27" varset="chip" variants="A6XX-" type="boolean"/>
-
-               <bitfield name="MODE" low="28" high="31" type="compare_mode"/>
-       </reg32>
-
-       <!-- in REG_COMPARE mode, there's an extra DWORD here with REG1 -->
-
-       <reg32 offset="1" name="1">
-               <bitfield name="DWORDS" low="0" high="31" type="uint"/>
-       </reg32>
-</domain>
-
-<domain name="CP_COND_EXEC" width="32">
-       <doc>
-                Executes the following DWORDs of commands if the dword at ADDR0
-                is not equal to 0 and the dword at ADDR1 is less than REF
-                (signed comparison).
-       </doc>
-       <reg32 offset="0" name="0">
-               <bitfield name="ADDR0_LO" low="0" high="31"/>
-       </reg32>
-       <reg32 offset="1" name="1">
-               <bitfield name="ADDR0_HI" low="0" high="31"/>
-       </reg32>
-       <reg32 offset="2" name="2">
-               <bitfield name="ADDR1_LO" low="0" high="31"/>
-       </reg32>
-       <reg32 offset="3" name="3">
-               <bitfield name="ADDR1_HI" low="0" high="31"/>
-       </reg32>
-       <reg32 offset="4" name="4">
-               <bitfield name="REF" low="0" high="31"/>
-       </reg32>
-       <reg32 offset="5" name="5">
-               <bitfield name="DWORDS" low="0" high="31" type="uint"/>
-       </reg32>
-</domain>
-
-<domain name="CP_SET_CTXSWITCH_IB" width="32">
-       <doc>
-                Used by the userspace driver to set various IB's which are
-                executed during context save/restore for handling
-                state that isn't restored by the
-                context switch routine itself.
-       </doc>
-       <enum name="ctxswitch_ib">
-               <value name="RESTORE_IB" value="0">
-                       <doc>Executed unconditionally when switching back to the context.</doc>
-               </value>
-               <value name="YIELD_RESTORE_IB" value="1">
-                        <doc>
-                               Executed when switching back after switching
-                               away during execution of
-                               a CP_SET_MARKER packet with RM6_YIELD as the
-                               payload *and* the normal save routine was
-                               bypassed for a shorter one. I think this is
-                               connected to the "skipsaverestore" bit set by
-                               the kernel when preempting.
-                       </doc>
-               </value>
-               <value name="SAVE_IB" value="2">
-                        <doc>
-                               Executed when switching away from the context,
-                               except for context switches initiated via
-                               CP_YIELD.
-                        </doc>
-               </value>
-               <value name="RB_SAVE_IB" value="3">
-                       <doc>
-                               This can only be set by the RB (i.e. the kernel)
-                               and executes with protected mode off, but
-                               is otherwise similar to SAVE_IB.
-                       </doc>
-               </value>
-       </enum>
-       <reg32 offset="0" name="0">
-               <bitfield name="ADDR_LO" low="0" high="31"/>
-       </reg32>
-       <reg32 offset="1" name="1">
-               <bitfield name="ADDR_HI" low="0" high="31"/>
-       </reg32>
-       <reg32 offset="2" name="2">
-               <bitfield name="DWORDS" low="0" high="19" type="uint"/>
-               <bitfield name="TYPE" low="20" high="21" type="ctxswitch_ib"/>
-       </reg32>
-</domain>
-
-<domain name="CP_REG_WRITE" width="32">
-       <enum name="reg_tracker">
-               <doc>
-                       Keep shadow copies of these registers and only set them
-                       when drawing, avoiding redundant writes:
-                       - VPC_CNTL_0
-                       - HLSQ_CONTROL_1_REG
-                       - HLSQ_UNKNOWN_B980
-               </doc>
-               <value name="TRACK_CNTL_REG" value="0x1"/>
-               <doc>
-                       Track RB_RENDER_CNTL, and insert a WFI in the following
-                       situation:
-                       - There is a write that disables binning
-                       - There was a draw with binning left enabled, but in
-                         BYPASS mode
-                       Presumably this is a hang workaround?
-               </doc>
-               <value name="TRACK_RENDER_CNTL" value="0x2"/>
-               <doc>
-                       Do a mysterious CP_EVENT_WRITE 0x3f when the low bit of
-                       the data to write is 0. Used by the Vulkan blob with
-                       PC_UNKNOWN_9B07, but this isn't predicated on particular
-                       register(s) like the others.
-               </doc>
-               <value name="UNK_EVENT_WRITE" value="0x4"/>
-       </enum>
-       <reg32 offset="0" name="0">
-               <bitfield name="TRACKER" low="0" high="2" type="reg_tracker"/>
-       </reg32>
-</domain>
-
-<domain name="CP_SMMU_TABLE_UPDATE" width="32">
-       <doc>
-               Note that the SMMU's definition of TTBRn can take different forms
-               depending on the pgtable format.  But a5xx+ only uses aarch64
-               format.
-       </doc>
-       <reg32 offset="0" name="0">
-               <bitfield name="TTBR0_LO" low="0" high="31"/>
-       </reg32>
-       <reg32 offset="1" name="1">
-               <bitfield name="TTBR0_HI" low="0" high="15"/>
-               <bitfield name="ASID" low="16" high="31"/>
-       </reg32>
-       <reg32 offset="2" name="2">
-               <doc>Unused, does not apply to aarch64 pgtable format</doc>
-               <bitfield name="CONTEXTIDR" low="0" high="31"/>
-       </reg32>
-       <reg32 offset="3" name="3">
-               <bitfield name="CONTEXTBANK" low="0" high="31"/>
-       </reg32>
-</domain>
-
-</database>
-
diff --git a/src/freedreno/registers/dsi/dsi.xml b/src/freedreno/registers/dsi/dsi.xml
new file mode 100644 (file)
index 0000000..a1ebee7
--- /dev/null
@@ -0,0 +1,997 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<database xmlns="http://nouveau.freedesktop.org/"
+xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+xsi:schemaLocation="http://nouveau.freedesktop.org/ rules-ng.xsd">
+<import file="freedreno_copyright.xml"/>
+
+<domain name="DSI" width="32">
+       <enum name="dsi_traffic_mode">
+               <value name="NON_BURST_SYNCH_PULSE" value="0"/>
+               <value name="NON_BURST_SYNCH_EVENT" value="1"/>
+               <value name="BURST_MODE" value="2"/>
+       </enum>
+       <enum name="dsi_vid_dst_format">
+               <value name="VID_DST_FORMAT_RGB565" value="0"/>
+               <value name="VID_DST_FORMAT_RGB666" value="1"/>
+               <value name="VID_DST_FORMAT_RGB666_LOOSE" value="2"/>
+               <value name="VID_DST_FORMAT_RGB888" value="3"/>
+       </enum>
+       <enum name="dsi_rgb_swap">
+               <value name="SWAP_RGB" value="0"/>
+               <value name="SWAP_RBG" value="1"/>
+               <value name="SWAP_BGR" value="2"/>
+               <value name="SWAP_BRG" value="3"/>
+               <value name="SWAP_GRB" value="4"/>
+               <value name="SWAP_GBR" value="5"/>
+       </enum>
+       <enum name="dsi_cmd_trigger">
+               <value name="TRIGGER_NONE" value="0"/>
+               <value name="TRIGGER_SEOF" value="1"/>
+               <value name="TRIGGER_TE" value="2"/>
+               <value name="TRIGGER_SW" value="4"/>
+               <value name="TRIGGER_SW_SEOF" value="5"/>
+               <value name="TRIGGER_SW_TE" value="6"/>
+       </enum>
+       <enum name="dsi_cmd_dst_format">
+               <value name="CMD_DST_FORMAT_RGB111" value="0"/>
+               <value name="CMD_DST_FORMAT_RGB332" value="3"/>
+               <value name="CMD_DST_FORMAT_RGB444" value="4"/>
+               <value name="CMD_DST_FORMAT_RGB565" value="6"/>
+               <value name="CMD_DST_FORMAT_RGB666" value="7"/>
+               <value name="CMD_DST_FORMAT_RGB888" value="8"/>
+       </enum>
+       <enum name="dsi_lane_swap">
+               <value name="LANE_SWAP_0123" value="0"/>
+               <value name="LANE_SWAP_3012" value="1"/>
+               <value name="LANE_SWAP_2301" value="2"/>
+               <value name="LANE_SWAP_1230" value="3"/>
+               <value name="LANE_SWAP_0321" value="4"/>
+               <value name="LANE_SWAP_1032" value="5"/>
+               <value name="LANE_SWAP_2103" value="6"/>
+               <value name="LANE_SWAP_3210" value="7"/>
+       </enum>
+       <bitset name="DSI_IRQ">
+               <bitfield name="CMD_DMA_DONE" pos="0" type="boolean"/>
+               <bitfield name="MASK_CMD_DMA_DONE" pos="1" type="boolean"/>
+               <bitfield name="CMD_MDP_DONE" pos="8" type="boolean"/>
+               <bitfield name="MASK_CMD_MDP_DONE" pos="9" type="boolean"/>
+               <bitfield name="VIDEO_DONE" pos="16" type="boolean"/>
+               <bitfield name="MASK_VIDEO_DONE" pos="17" type="boolean"/>
+               <bitfield name="BTA_DONE" pos="20" type="boolean"/>
+               <bitfield name="MASK_BTA_DONE" pos="21" type="boolean"/>
+               <bitfield name="ERROR" pos="24" type="boolean"/>
+               <bitfield name="MASK_ERROR" pos="25" type="boolean"/>
+       </bitset>
+
+       <reg32 offset="0x00000" name="6G_HW_VERSION">
+               <bitfield name="MAJOR" low="28" high="31" type="uint"/>
+               <bitfield name="MINOR" low="16" high="27" type="uint"/>
+               <bitfield name="STEP" low="0" high="15" type="uint"/>
+       </reg32>
+
+       <reg32 offset="0x00000" name="CTRL">
+               <bitfield name="ENABLE" pos="0" type="boolean"/>
+               <bitfield name="VID_MODE_EN" pos="1" type="boolean"/>
+               <bitfield name="CMD_MODE_EN" pos="2" type="boolean"/>
+               <bitfield name="LANE0" pos="4" type="boolean"/>
+               <bitfield name="LANE1" pos="5" type="boolean"/>
+               <bitfield name="LANE2" pos="6" type="boolean"/>
+               <bitfield name="LANE3" pos="7" type="boolean"/>
+               <bitfield name="CLK_EN" pos="8" type="boolean"/>
+               <bitfield name="ECC_CHECK" pos="20" type="boolean"/>
+               <bitfield name="CRC_CHECK" pos="24" type="boolean"/>
+       </reg32>
+
+       <reg32 offset="0x00004" name="STATUS0">
+               <bitfield name="CMD_MODE_ENGINE_BUSY" pos="0" type="boolean"/>
+               <bitfield name="CMD_MODE_DMA_BUSY" pos="1" type="boolean"/>
+               <bitfield name="CMD_MODE_MDP_BUSY" pos="2" type="boolean"/>
+               <bitfield name="VIDEO_MODE_ENGINE_BUSY" pos="3" type="boolean"/>
+               <bitfield name="DSI_BUSY" pos="4" type="boolean"/>  <!-- see mipi_dsi_cmd_bta_sw_trigger() -->
+               <bitfield name="INTERLEAVE_OP_CONTENTION" pos="31" type="boolean"/>
+       </reg32>
+
+       <reg32 offset="0x00008" name="FIFO_STATUS">
+               <bitfield name="VIDEO_MDP_FIFO_OVERFLOW" pos="0" type="boolean"/>
+               <bitfield name="VIDEO_MDP_FIFO_UNDERFLOW" pos="3" type="boolean"/>
+               <bitfield name="CMD_MDP_FIFO_UNDERFLOW" pos="7" type="boolean"/>
+               <bitfield name="CMD_DMA_FIFO_RD_WATERMARK_REACH" pos="8" type="boolean"/>
+               <bitfield name="CMD_DMA_FIFO_WR_WATERMARK_REACH" pos="9" type="boolean"/>
+               <bitfield name="CMD_DMA_FIFO_UNDERFLOW" pos="10" type="boolean"/>
+               <bitfield name="DLN0_LP_FIFO_EMPTY"     pos="12" type="boolean"/>
+               <bitfield name="DLN0_LP_FIFO_FULL"      pos="13" type="boolean"/>
+               <bitfield name="DLN0_LP_FIFO_OVERFLOW"  pos="14" type="boolean"/>
+               <bitfield name="DLN0_HS_FIFO_EMPTY"     pos="16" type="boolean"/>
+               <bitfield name="DLN0_HS_FIFO_FULL"      pos="17" type="boolean"/>
+               <bitfield name="DLN0_HS_FIFO_OVERFLOW"  pos="18" type="boolean"/>
+               <bitfield name="DLN0_HS_FIFO_UNDERFLOW" pos="19" type="boolean"/>
+               <bitfield name="DLN1_HS_FIFO_EMPTY"     pos="20" type="boolean"/>
+               <bitfield name="DLN1_HS_FIFO_FULL"      pos="21" type="boolean"/>
+               <bitfield name="DLN1_HS_FIFO_OVERFLOW"  pos="22" type="boolean"/>
+               <bitfield name="DLN1_HS_FIFO_UNDERFLOW" pos="23" type="boolean"/>
+               <bitfield name="DLN2_HS_FIFO_EMPTY"     pos="24" type="boolean"/>
+               <bitfield name="DLN2_HS_FIFO_FULL"      pos="25" type="boolean"/>
+               <bitfield name="DLN2_HS_FIFO_OVERFLOW"  pos="26" type="boolean"/>
+               <bitfield name="DLN2_HS_FIFO_UNDERFLOW" pos="27" type="boolean"/>
+               <bitfield name="DLN3_HS_FIFO_EMPTY"     pos="28" type="boolean"/>
+               <bitfield name="DLN3_HS_FIFO_FULL"      pos="29" type="boolean"/>
+               <bitfield name="DLN3_HS_FIFO_OVERFLOW"  pos="30" type="boolean"/>
+               <bitfield name="DLN3_HS_FIFO_UNDERFLOW" pos="31" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x0000c" name="VID_CFG0">
+               <bitfield name="VIRT_CHANNEL" low="0" high="1" type="uint"/>  <!-- always zero? -->
+               <bitfield name="DST_FORMAT" low="4" high="5" type="dsi_vid_dst_format"/>
+               <bitfield name="TRAFFIC_MODE" low="8" high="9" type="dsi_traffic_mode"/>
+               <bitfield name="BLLP_POWER_STOP" pos="12" type="boolean"/>
+               <bitfield name="EOF_BLLP_POWER_STOP" pos="15" type="boolean"/>
+               <bitfield name="HSA_POWER_STOP" pos="16" type="boolean"/>
+               <bitfield name="HBP_POWER_STOP" pos="20" type="boolean"/>
+               <bitfield name="HFP_POWER_STOP" pos="24" type="boolean"/>
+               <bitfield name="PULSE_MODE_HSA_HE" pos="28" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x0001c" name="VID_CFG1">
+               <bitfield name="R_SEL" pos="0" type="boolean"/>
+               <bitfield name="G_SEL" pos="4" type="boolean"/>
+               <bitfield name="B_SEL" pos="8" type="boolean"/>
+               <bitfield name="RGB_SWAP" low="12" high="14" type="dsi_rgb_swap"/>
+       </reg32>
+       <reg32 offset="0x00020" name="ACTIVE_H">
+               <bitfield name="START" low="0" high="11" type="uint"/>
+               <bitfield name="END" low="16" high="27" type="uint"/>
+       </reg32>
+       <reg32 offset="0x00024" name="ACTIVE_V">
+               <bitfield name="START" low="0" high="11" type="uint"/>
+               <bitfield name="END" low="16" high="27" type="uint"/>
+       </reg32>
+       <reg32 offset="0x00028" name="TOTAL">
+               <bitfield name="H_TOTAL" low="0" high="11" type="uint"/>
+               <bitfield name="V_TOTAL" low="16" high="27" type="uint"/>
+       </reg32>
+       <reg32 offset="0x0002c" name="ACTIVE_HSYNC">
+               <bitfield name="START" low="0" high="11" type="uint"/>
+               <bitfield name="END" low="16" high="27" type="uint"/>
+       </reg32>
+       <reg32 offset="0x00030" name="ACTIVE_VSYNC_HPOS">
+               <bitfield name="START" low="0" high="11" type="uint"/>
+               <bitfield name="END" low="16" high="27" type="uint"/>
+       </reg32>
+       <reg32 offset="0x00034" name="ACTIVE_VSYNC_VPOS">
+               <bitfield name="START" low="0" high="11" type="uint"/>
+               <bitfield name="END" low="16" high="27" type="uint"/>
+       </reg32>
+
+       <reg32 offset="0x00038" name="CMD_DMA_CTRL">
+               <bitfield name="BROADCAST_EN" pos="31" type="boolean"/>
+               <bitfield name="FROM_FRAME_BUFFER" pos="28" type="boolean"/>
+               <bitfield name="LOW_POWER" pos="26" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x0003c" name="CMD_CFG0">
+               <bitfield name="DST_FORMAT" low="0" high="3" type="dsi_cmd_dst_format"/>
+               <bitfield name="R_SEL" pos="4" type="boolean"/>
+               <bitfield name="G_SEL" pos="8" type="boolean"/>
+               <bitfield name="B_SEL" pos="12" type="boolean"/>
+               <bitfield name="INTERLEAVE_MAX" low="20" high="23" type="uint"/>
+               <bitfield name="RGB_SWAP" low="16" high="18" type="dsi_rgb_swap"/>
+       </reg32>
+       <reg32 offset="0x00040" name="CMD_CFG1">
+               <bitfield name="WR_MEM_START" low="0" high="7" type="uint"/>
+               <bitfield name="WR_MEM_CONTINUE" low="8" high="15" type="uint"/>
+               <bitfield name="INSERT_DCS_COMMAND" pos="16" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x00044" name="DMA_BASE"/>
+       <reg32 offset="0x00048" name="DMA_LEN"/>
+       <reg32 offset="0x00054" name="CMD_MDP_STREAM0_CTRL">
+               <bitfield name="DATA_TYPE" low="0" high="5" type="uint"/>
+               <bitfield name="VIRTUAL_CHANNEL" low="8" high="9" type="uint"/>
+               <bitfield name="WORD_COUNT" low="16" high="31" type="uint"/>
+       </reg32>
+       <reg32 offset="0x00058" name="CMD_MDP_STREAM0_TOTAL">
+               <bitfield name="H_TOTAL" low="0" high="11" type="uint"/>
+               <bitfield name="V_TOTAL" low="16" high="27" type="uint"/>
+       </reg32>
+       <reg32 offset="0x0005c" name="CMD_MDP_STREAM1_CTRL">
+               <bitfield name="DATA_TYPE" low="0" high="5" type="uint"/>
+               <bitfield name="VIRTUAL_CHANNEL" low="8" high="9" type="uint"/>
+               <bitfield name="WORD_COUNT" low="16" high="31" type="uint"/>
+       </reg32>
+       <reg32 offset="0x00060" name="CMD_MDP_STREAM1_TOTAL">
+               <bitfield name="H_TOTAL" low="0" high="15" type="uint"/>
+               <bitfield name="V_TOTAL" low="16" high="31" type="uint"/>
+       </reg32>
+       <reg32 offset="0x00064" name="ACK_ERR_STATUS"/>
+       <array offset="0x00068" name="RDBK" length="4" stride="4">
+               <reg32 offset="0x0" name="DATA"/>
+       </array>
+       <reg32 offset="0x00080" name="TRIG_CTRL">
+               <bitfield name="DMA_TRIGGER" low="0" high="2" type="dsi_cmd_trigger"/>
+               <bitfield name="MDP_TRIGGER" low="4" high="6" type="dsi_cmd_trigger"/>
+               <bitfield name="STREAM" low="8" high="9" type="uint"/>
+               <bitfield name="BLOCK_DMA_WITHIN_FRAME" pos="12" type="boolean"/>
+               <bitfield name="TE" pos="31" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x0008c" name="TRIG_DMA"/>
+       <reg32 offset="0x000b0" name="DLN0_PHY_ERR">
+               <bitfield name="DLN0_ERR_ESC" pos="0" type="boolean"/>
+               <bitfield name="DLN0_ERR_SYNC_ESC" pos="4" type="boolean"/>
+               <bitfield name="DLN0_ERR_CONTROL" pos="8" type="boolean"/>
+               <bitfield name="DLN0_ERR_CONTENTION_LP0" pos="12" type="boolean"/>
+               <bitfield name="DLN0_ERR_CONTENTION_LP1" pos="16" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x000b4" name="LP_TIMER_CTRL">
+               <bitfield name="LP_RX_TO" low="0" high="15" type="uint"/>
+               <bitfield name="BTA_TO" low="16" high="31" type="uint"/>
+       </reg32>
+       <reg32 offset="0x000b8" name="HS_TIMER_CTRL">
+               <bitfield name="HS_TX_TO" low="0" high="15" type="uint"/>
+               <bitfield name="TIMER_RESOLUTION" low="16" high="19" type="uint"/>
+               <bitfield name="HS_TX_TO_STOP_EN" pos="28" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x000bc" name="TIMEOUT_STATUS"/>
+       <reg32 offset="0x000c0" name="CLKOUT_TIMING_CTRL">
+               <bitfield name="T_CLK_PRE" low="0" high="5" type="uint"/>
+               <bitfield name="T_CLK_POST" low="8" high="13" type="uint"/>
+       </reg32>
+       <reg32 offset="0x000c8" name="EOT_PACKET_CTRL">
+               <bitfield name="TX_EOT_APPEND" pos="0" type="boolean"/>
+               <bitfield name="RX_EOT_IGNORE" pos="4" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x000a4" name="LANE_STATUS">
+               <bitfield name="DLN0_STOPSTATE" pos="0" type="boolean"/>
+               <bitfield name="DLN1_STOPSTATE" pos="1" type="boolean"/>
+               <bitfield name="DLN2_STOPSTATE" pos="2" type="boolean"/>
+               <bitfield name="DLN3_STOPSTATE" pos="3" type="boolean"/>
+               <bitfield name="CLKLN_STOPSTATE" pos="4" type="boolean"/>
+               <bitfield name="DLN0_ULPS_ACTIVE_NOT" pos="8" type="boolean"/>
+               <bitfield name="DLN1_ULPS_ACTIVE_NOT" pos="9" type="boolean"/>
+               <bitfield name="DLN2_ULPS_ACTIVE_NOT" pos="10" type="boolean"/>
+               <bitfield name="DLN3_ULPS_ACTIVE_NOT" pos="11" type="boolean"/>
+               <bitfield name="CLKLN_ULPS_ACTIVE_NOT" pos="12" type="boolean"/>
+               <bitfield name="DLN0_DIRECTION" pos="16" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x000a8" name="LANE_CTRL">
+               <bitfield name="CLKLN_HS_FORCE_REQUEST" pos="28" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x000ac" name="LANE_SWAP_CTRL">
+               <bitfield name="DLN_SWAP_SEL" low="0" high="2" type="dsi_lane_swap"/>
+       </reg32>
+       <reg32 offset="0x00108" name="ERR_INT_MASK0"/>
+       <reg32 offset="0x0010c" name="INTR_CTRL" type="DSI_IRQ"/>
+       <reg32 offset="0x00114" name="RESET"/>
+       <reg32 offset="0x00118" name="CLK_CTRL">
+               <bitfield name="AHBS_HCLK_ON" pos="0" type="boolean"/>
+               <bitfield name="AHBM_SCLK_ON" pos="1" type="boolean"/>
+               <bitfield name="PCLK_ON" pos="2" type="boolean"/>
+               <bitfield name="DSICLK_ON" pos="3" type="boolean"/>
+               <bitfield name="BYTECLK_ON" pos="4" type="boolean"/>
+               <bitfield name="ESCCLK_ON" pos="5" type="boolean"/>
+               <bitfield name="FORCE_ON_DYN_AHBM_HCLK" pos="9" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x0011c" name="CLK_STATUS">
+               <bitfield name="DSI_AON_AHBM_HCLK_ACTIVE" pos="0" type="boolean"/>
+               <bitfield name="DSI_DYN_AHBM_HCLK_ACTIVE" pos="1" type="boolean"/>
+               <bitfield name="DSI_AON_AHBS_HCLK_ACTIVE" pos="2" type="boolean"/>
+               <bitfield name="DSI_DYN_AHBS_HCLK_ACTIVE" pos="3" type="boolean"/>
+               <bitfield name="DSI_AON_DSICLK_ACTIVE" pos="4" type="boolean"/>
+               <bitfield name="DSI_DYN_DSICLK_ACTIVE" pos="5" type="boolean"/>
+               <bitfield name="DSI_AON_BYTECLK_ACTIVE" pos="6" type="boolean"/>
+               <bitfield name="DSI_DYN_BYTECLK_ACTIVE" pos="7" type="boolean"/>
+               <bitfield name="DSI_AON_ESCCLK_ACTIVE" pos="8" type="boolean"/>
+               <bitfield name="DSI_AON_PCLK_ACTIVE" pos="9" type="boolean"/>
+               <bitfield name="DSI_DYN_PCLK_ACTIVE" pos="10" type="boolean"/>
+               <bitfield name="DSI_DYN_CMD_PCLK_ACTIVE" pos="12" type="boolean"/>
+               <bitfield name="DSI_CMD_PCLK_ACTIVE" pos="13" type="boolean"/>
+               <bitfield name="DSI_VID_PCLK_ACTIVE" pos="14" type="boolean"/>
+               <bitfield name="DSI_CAM_BIST_PCLK_ACT" pos="15" type="boolean"/>
+               <bitfield name="PLL_UNLOCKED" pos="16" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x00128" name="PHY_RESET">
+               <bitfield name="RESET" pos="0" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x0017c" name="T_CLK_PRE_EXTEND">
+               <bitfield name="INC_BY_2_BYTECLK" pos="0" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x001b4" name="CMD_MODE_MDP_CTRL2">
+               <bitfield name="DST_FORMAT2" low="0" high="3" type="dsi_cmd_dst_format"/>
+               <bitfield name="R_SEL" pos="4" type="boolean"/>
+               <bitfield name="G_SEL" pos="5" type="boolean"/>
+               <bitfield name="B_SEL" pos="6" type="boolean"/>
+               <bitfield name="BYTE_MSB_LSB_FLIP" pos="7" type="boolean"/>
+               <bitfield name="RGB_SWAP" low="8" high="10" type="dsi_rgb_swap"/>
+               <bitfield name="INPUT_RGB_SWAP" low="12" high="14" type="dsi_rgb_swap"/>
+               <bitfield name="BURST_MODE" pos="16" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x001b8" name="CMD_MODE_MDP_STREAM2_CTRL">
+               <bitfield name="DATA_TYPE" low="0" high="5" type="uint"/>
+               <bitfield name="VIRTUAL_CHANNEL" low="8" high="9" type="uint"/>
+               <bitfield name="WORD_COUNT" low="16" high="31" type="uint"/>
+       </reg32>
+       <reg32 offset="0x001d0" name="RDBK_DATA_CTRL">
+               <bitfield name="COUNT" low="16" high="23" type="uint"/>
+               <bitfield name="CLR" pos="0" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x001f0" name="VERSION">
+               <bitfield name="MAJOR" low="24" high="31" type="uint"/>
+       </reg32>
+
+       <reg32 offset="0x00200" name="PHY_PLL_CTRL_0">
+               <bitfield name="ENABLE" pos="0" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x00204" name="PHY_PLL_CTRL_1"/>
+       <reg32 offset="0x00208" name="PHY_PLL_CTRL_2"/>
+       <reg32 offset="0x0020c" name="PHY_PLL_CTRL_3"/>
+       <reg32 offset="0x00210" name="PHY_PLL_CTRL_4"/>
+       <reg32 offset="0x00214" name="PHY_PLL_CTRL_5"/>
+       <reg32 offset="0x00218" name="PHY_PLL_CTRL_6"/>
+       <reg32 offset="0x0021c" name="PHY_PLL_CTRL_7"/>
+       <reg32 offset="0x00220" name="PHY_PLL_CTRL_8"/>
+       <reg32 offset="0x00224" name="PHY_PLL_CTRL_9"/>
+       <reg32 offset="0x00228" name="PHY_PLL_CTRL_10"/>
+       <reg32 offset="0x0022c" name="PHY_PLL_CTRL_11"/>
+       <reg32 offset="0x00230" name="PHY_PLL_CTRL_12"/>
+       <reg32 offset="0x00234" name="PHY_PLL_CTRL_13"/>
+       <reg32 offset="0x00238" name="PHY_PLL_CTRL_14"/>
+       <reg32 offset="0x0023c" name="PHY_PLL_CTRL_15"/>
+       <reg32 offset="0x00240" name="PHY_PLL_CTRL_16"/>
+       <reg32 offset="0x00244" name="PHY_PLL_CTRL_17"/>
+       <reg32 offset="0x00248" name="PHY_PLL_CTRL_18"/>
+       <reg32 offset="0x0024c" name="PHY_PLL_CTRL_19"/>
+       <reg32 offset="0x00250" name="PHY_PLL_CTRL_20"/>
+
+       <reg32 offset="0x00280" name="PHY_PLL_STATUS">
+               <bitfield name="PLL_BUSY" pos="0" type="boolean"/>
+       </reg32>
+</domain>
+
+<domain name="DSI_8x60" width="32">
+       <reg32 offset="0x00258" name="PHY_TPA_CTRL_1"/>
+       <reg32 offset="0x0025c" name="PHY_TPA_CTRL_2"/>
+       <reg32 offset="0x00260" name="PHY_TIMING_CTRL_0"/>
+       <reg32 offset="0x00264" name="PHY_TIMING_CTRL_1"/>
+       <reg32 offset="0x00268" name="PHY_TIMING_CTRL_2"/>
+       <reg32 offset="0x0026c" name="PHY_TIMING_CTRL_3"/>
+       <reg32 offset="0x00270" name="PHY_TIMING_CTRL_4"/>
+       <reg32 offset="0x00274" name="PHY_TIMING_CTRL_5"/>
+       <reg32 offset="0x00278" name="PHY_TIMING_CTRL_6"/>
+       <reg32 offset="0x0027c" name="PHY_TIMING_CTRL_7"/>
+       <reg32 offset="0x00280" name="PHY_TIMING_CTRL_8"/>
+       <reg32 offset="0x00284" name="PHY_TIMING_CTRL_9"/>
+       <reg32 offset="0x00288" name="PHY_TIMING_CTRL_10"/>
+       <reg32 offset="0x0028c" name="PHY_TIMING_CTRL_11"/>
+       <reg32 offset="0x00290" name="PHY_CTRL_0"/>
+       <reg32 offset="0x00294" name="PHY_CTRL_1"/>
+       <reg32 offset="0x00298" name="PHY_CTRL_2"/>
+       <reg32 offset="0x0029c" name="PHY_CTRL_3"/>
+       <reg32 offset="0x002a0" name="PHY_STRENGTH_0"/>
+       <reg32 offset="0x002a4" name="PHY_STRENGTH_1"/>
+       <reg32 offset="0x002a8" name="PHY_STRENGTH_2"/>
+       <reg32 offset="0x002ac" name="PHY_STRENGTH_3"/>
+       <reg32 offset="0x002cc" name="PHY_REGULATOR_CTRL_0"/>
+       <reg32 offset="0x002d0" name="PHY_REGULATOR_CTRL_1"/>
+       <reg32 offset="0x002d4" name="PHY_REGULATOR_CTRL_2"/>
+       <reg32 offset="0x002d8" name="PHY_REGULATOR_CTRL_3"/>
+       <reg32 offset="0x002dc" name="PHY_REGULATOR_CTRL_4"/>
+
+       <reg32 offset="0x000f0" name="PHY_CAL_HW_TRIGGER"/>
+       <reg32 offset="0x000f4" name="PHY_CAL_CTRL"/>
+       <reg32 offset="0x000fc" name="PHY_CAL_STATUS">
+               <bitfield name="CAL_BUSY" pos="28" type="boolean"/>
+       </reg32>
+</domain>
+
+<domain name="DSI_28nm_8960_PHY" width="32">
+
+       <array offset="0x00000" name="LN" length="4" stride="0x40">
+               <reg32 offset="0x00" name="CFG_0"/>
+               <reg32 offset="0x04" name="CFG_1"/>
+               <reg32 offset="0x08" name="CFG_2"/>
+               <reg32 offset="0x0c" name="TEST_DATAPATH"/>
+               <reg32 offset="0x14" name="TEST_STR_0"/>
+               <reg32 offset="0x18" name="TEST_STR_1"/>
+       </array>
+
+       <reg32 offset="0x00100" name="LNCK_CFG_0"/>
+       <reg32 offset="0x00104" name="LNCK_CFG_1"/>
+       <reg32 offset="0x00108" name="LNCK_CFG_2"/>
+
+       <reg32 offset="0x0010c" name="LNCK_TEST_DATAPATH"/>
+       <reg32 offset="0x00114" name="LNCK_TEST_STR0"/>
+       <reg32 offset="0x00118" name="LNCK_TEST_STR1"/>
+
+       <reg32 offset="0x00140" name="TIMING_CTRL_0">
+               <bitfield name="CLK_ZERO" low="0" high="7" type="uint"/>
+       </reg32>
+       <reg32 offset="0x00144" name="TIMING_CTRL_1">
+               <bitfield name="CLK_TRAIL" low="0" high="7" type="uint"/>
+       </reg32>
+       <reg32 offset="0x00148" name="TIMING_CTRL_2">
+               <bitfield name="CLK_PREPARE" low="0" high="7" type="uint"/>
+       </reg32>
+
+       <reg32 offset="0x0014c" name="TIMING_CTRL_3"/>
+
+       <reg32 offset="0x00150" name="TIMING_CTRL_4">
+               <bitfield name="HS_EXIT" low="0" high="7" type="uint"/>
+       </reg32>
+       <reg32 offset="0x00154" name="TIMING_CTRL_5">
+               <bitfield name="HS_ZERO" low="0" high="7" type="uint"/>
+       </reg32>
+       <reg32 offset="0x00158" name="TIMING_CTRL_6">
+               <bitfield name="HS_PREPARE" low="0" high="7" type="uint"/>
+       </reg32>
+       <reg32 offset="0x0015c" name="TIMING_CTRL_7">
+               <bitfield name="HS_TRAIL" low="0" high="7" type="uint"/>
+       </reg32>
+       <reg32 offset="0x00160" name="TIMING_CTRL_8">
+               <bitfield name="HS_RQST" low="0" high="7" type="uint"/>
+       </reg32>
+       <reg32 offset="0x00164" name="TIMING_CTRL_9">
+               <bitfield name="TA_GO" low="0" high="2" type="uint"/>
+               <bitfield name="TA_SURE" low="4" high="6" type="uint"/>
+       </reg32>
+       <reg32 offset="0x00168" name="TIMING_CTRL_10">
+               <bitfield name="TA_GET" low="0" high="2" type="uint"/>
+       </reg32>
+       <reg32 offset="0x0016c" name="TIMING_CTRL_11">
+               <bitfield name="TRIG3_CMD" low="0" high="7" type="uint"/>
+       </reg32>
+
+       <reg32 offset="0x00170" name="CTRL_0"/>
+       <reg32 offset="0x00174" name="CTRL_1"/>
+       <reg32 offset="0x00178" name="CTRL_2"/>
+       <reg32 offset="0x0017c" name="CTRL_3"/>
+
+       <reg32 offset="0x00180" name="STRENGTH_0"/>
+       <reg32 offset="0x00184" name="STRENGTH_1"/>
+       <reg32 offset="0x00188" name="STRENGTH_2"/>
+
+       <reg32 offset="0x0018c" name="BIST_CTRL_0"/>
+       <reg32 offset="0x00190" name="BIST_CTRL_1"/>
+       <reg32 offset="0x00194" name="BIST_CTRL_2"/>
+       <reg32 offset="0x00198" name="BIST_CTRL_3"/>
+       <reg32 offset="0x0019c" name="BIST_CTRL_4"/>
+
+       <reg32 offset="0x001b0" name="LDO_CTRL"/>
+</domain>
+
+<domain name="DSI_28nm_8960_PHY_MISC" width="32">
+       <reg32 offset="0x00000" name="REGULATOR_CTRL_0"/>
+       <reg32 offset="0x00004" name="REGULATOR_CTRL_1"/>
+       <reg32 offset="0x00008" name="REGULATOR_CTRL_2"/>
+       <reg32 offset="0x0000c" name="REGULATOR_CTRL_3"/>
+       <reg32 offset="0x00010" name="REGULATOR_CTRL_4"/>
+       <reg32 offset="0x00014" name="REGULATOR_CTRL_5"/>
+       <reg32 offset="0x00018" name="REGULATOR_CAL_PWR_CFG"/>
+       <reg32 offset="0x00028" name="CAL_HW_TRIGGER"/>
+       <reg32 offset="0x0002c" name="CAL_SW_CFG_0"/>
+       <reg32 offset="0x00030" name="CAL_SW_CFG_1"/>
+       <reg32 offset="0x00034" name="CAL_SW_CFG_2"/>
+       <reg32 offset="0x00038" name="CAL_HW_CFG_0"/>
+       <reg32 offset="0x0003c" name="CAL_HW_CFG_1"/>
+       <reg32 offset="0x00040" name="CAL_HW_CFG_2"/>
+       <reg32 offset="0x00044" name="CAL_HW_CFG_3"/>
+       <reg32 offset="0x00048" name="CAL_HW_CFG_4"/>
+       <reg32 offset="0x00050" name="CAL_STATUS">
+               <bitfield name="CAL_BUSY" pos="4" type="boolean"/>
+       </reg32>
+</domain>
+
+<domain name="DSI_28nm_8960_PHY_PLL" width="32">
+       <reg32 offset="0x00000" name="CTRL_0">
+               <bitfield name="ENABLE" pos="0" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x00004" name="CTRL_1"/>
+       <reg32 offset="0x00008" name="CTRL_2"/>
+       <reg32 offset="0x0000c" name="CTRL_3"/>
+       <reg32 offset="0x00010" name="CTRL_4"/>
+       <reg32 offset="0x00014" name="CTRL_5"/>
+       <reg32 offset="0x00018" name="CTRL_6"/>
+       <reg32 offset="0x0001c" name="CTRL_7"/>
+       <reg32 offset="0x00020" name="CTRL_8"/>
+       <reg32 offset="0x00024" name="CTRL_9"/>
+       <reg32 offset="0x00028" name="CTRL_10"/>
+       <reg32 offset="0x0002c" name="CTRL_11"/>
+       <reg32 offset="0x00030" name="CTRL_12"/>
+       <reg32 offset="0x00034" name="CTRL_13"/>
+       <reg32 offset="0x00038" name="CTRL_14"/>
+       <reg32 offset="0x0003c" name="CTRL_15"/>
+       <reg32 offset="0x00040" name="CTRL_16"/>
+       <reg32 offset="0x00044" name="CTRL_17"/>
+       <reg32 offset="0x00048" name="CTRL_18"/>
+       <reg32 offset="0x0004c" name="CTRL_19"/>
+       <reg32 offset="0x00050" name="CTRL_20"/>
+
+       <reg32 offset="0x00080" name="RDY">
+               <bitfield name="PLL_RDY" pos="0" type="boolean"/>
+       </reg32>
+</domain>
+
+<domain name="DSI_28nm_PHY" width="32">
+       <array offset="0x00000" name="LN" length="4" stride="0x40">
+               <reg32 offset="0x00" name="CFG_0"/>
+               <reg32 offset="0x04" name="CFG_1"/>
+               <reg32 offset="0x08" name="CFG_2"/>
+               <reg32 offset="0x0c" name="CFG_3"/>
+               <reg32 offset="0x10" name="CFG_4"/>
+               <reg32 offset="0x14" name="TEST_DATAPATH"/>
+               <reg32 offset="0x18" name="DEBUG_SEL"/>
+               <reg32 offset="0x1c" name="TEST_STR_0"/>
+               <reg32 offset="0x20" name="TEST_STR_1"/>
+       </array>
+
+       <reg32 offset="0x00100" name="LNCK_CFG_0"/>
+       <reg32 offset="0x00104" name="LNCK_CFG_1"/>
+       <reg32 offset="0x00108" name="LNCK_CFG_2"/>
+       <reg32 offset="0x0010c" name="LNCK_CFG_3"/>
+       <reg32 offset="0x00110" name="LNCK_CFG_4"/>
+       <reg32 offset="0x00114" name="LNCK_TEST_DATAPATH"/>
+       <reg32 offset="0x00118" name="LNCK_DEBUG_SEL"/>
+       <reg32 offset="0x0011c" name="LNCK_TEST_STR0"/>
+       <reg32 offset="0x00120" name="LNCK_TEST_STR1"/>
+
+       <reg32 offset="0x00140" name="TIMING_CTRL_0">
+               <bitfield name="CLK_ZERO" low="0" high="7" type="uint"/>
+       </reg32>
+       <reg32 offset="0x00144" name="TIMING_CTRL_1">
+               <bitfield name="CLK_TRAIL" low="0" high="7" type="uint"/>
+       </reg32>
+       <reg32 offset="0x00148" name="TIMING_CTRL_2">
+               <bitfield name="CLK_PREPARE" low="0" high="7" type="uint"/>
+       </reg32>
+       <reg32 offset="0x0014c" name="TIMING_CTRL_3">
+               <bitfield name="CLK_ZERO_8" pos="0" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x00150" name="TIMING_CTRL_4">
+               <bitfield name="HS_EXIT" low="0" high="7" type="uint"/>
+       </reg32>
+       <reg32 offset="0x00154" name="TIMING_CTRL_5">
+               <bitfield name="HS_ZERO" low="0" high="7" type="uint"/>
+       </reg32>
+       <reg32 offset="0x00158" name="TIMING_CTRL_6">
+               <bitfield name="HS_PREPARE" low="0" high="7" type="uint"/>
+       </reg32>
+       <reg32 offset="0x0015c" name="TIMING_CTRL_7">
+               <bitfield name="HS_TRAIL" low="0" high="7" type="uint"/>
+       </reg32>
+       <reg32 offset="0x00160" name="TIMING_CTRL_8">
+               <bitfield name="HS_RQST" low="0" high="7" type="uint"/>
+       </reg32>
+       <reg32 offset="0x00164" name="TIMING_CTRL_9">
+               <bitfield name="TA_GO" low="0" high="2" type="uint"/>
+               <bitfield name="TA_SURE" low="4" high="6" type="uint"/>
+       </reg32>
+       <reg32 offset="0x00168" name="TIMING_CTRL_10">
+               <bitfield name="TA_GET" low="0" high="2" type="uint"/>
+       </reg32>
+       <reg32 offset="0x0016c" name="TIMING_CTRL_11">
+               <bitfield name="TRIG3_CMD" low="0" high="7" type="uint"/>
+       </reg32>
+
+       <reg32 offset="0x00170" name="CTRL_0"/>
+       <reg32 offset="0x00174" name="CTRL_1"/>
+       <reg32 offset="0x00178" name="CTRL_2"/>
+       <reg32 offset="0x0017c" name="CTRL_3"/>
+       <reg32 offset="0x00180" name="CTRL_4"/>
+
+       <reg32 offset="0x00184" name="STRENGTH_0"/>
+       <reg32 offset="0x00188" name="STRENGTH_1"/>
+
+       <reg32 offset="0x001b4" name="BIST_CTRL_0"/>
+       <reg32 offset="0x001b8" name="BIST_CTRL_1"/>
+       <reg32 offset="0x001bc" name="BIST_CTRL_2"/>
+       <reg32 offset="0x001c0" name="BIST_CTRL_3"/>
+       <reg32 offset="0x001c4" name="BIST_CTRL_4"/>
+       <reg32 offset="0x001c8" name="BIST_CTRL_5"/>
+
+       <reg32 offset="0x001d4" name="GLBL_TEST_CTRL">
+               <bitfield name="BITCLK_HS_SEL" pos="0" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x001dc" name="LDO_CNTRL"/>
+</domain>
+
+<domain name="DSI_28nm_PHY_REGULATOR" width="32">
+       <reg32 offset="0x00000" name="CTRL_0"/>
+       <reg32 offset="0x00004" name="CTRL_1"/>
+       <reg32 offset="0x00008" name="CTRL_2"/>
+       <reg32 offset="0x0000c" name="CTRL_3"/>
+       <reg32 offset="0x00010" name="CTRL_4"/>
+       <reg32 offset="0x00014" name="CTRL_5"/>
+       <reg32 offset="0x00018" name="CAL_PWR_CFG"/>
+</domain>
+
+<domain name="DSI_28nm_PHY_PLL" width="32">
+       <reg32 offset="0x00000" name="REFCLK_CFG">
+               <bitfield name="DBLR" pos="0" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x00004" name="POSTDIV1_CFG"/>
+       <reg32 offset="0x00008" name="CHGPUMP_CFG"/>
+       <reg32 offset="0x0000C" name="VCOLPF_CFG"/>
+       <reg32 offset="0x00010" name="VREG_CFG">
+               <bitfield name="POSTDIV1_BYPASS_B" pos="1" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x00014" name="PWRGEN_CFG"/>
+       <reg32 offset="0x00018" name="DMUX_CFG"/>
+       <reg32 offset="0x0001C" name="AMUX_CFG"/>
+       <reg32 offset="0x00020" name="GLB_CFG">
+               <bitfield name="PLL_PWRDN_B" pos="0" type="boolean"/>
+               <bitfield name="PLL_LDO_PWRDN_B" pos="1" type="boolean"/>
+               <bitfield name="PLL_PWRGEN_PWRDN_B" pos="2" type="boolean"/>
+               <bitfield name="PLL_ENABLE" pos="3" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x00024" name="POSTDIV2_CFG"/>
+       <reg32 offset="0x00028" name="POSTDIV3_CFG"/>
+       <reg32 offset="0x0002C" name="LPFR_CFG"/>
+       <reg32 offset="0x00030" name="LPFC1_CFG"/>
+       <reg32 offset="0x00034" name="LPFC2_CFG"/>
+       <reg32 offset="0x00038" name="SDM_CFG0">
+               <bitfield name="BYP_DIV" low="0" high="5" type="uint"/>
+               <bitfield name="BYP" pos="6" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x0003C" name="SDM_CFG1">
+               <bitfield name="DC_OFFSET" low="0" high="5" type="uint"/>
+               <bitfield name="DITHER_EN" pos="6" type="uint"/>
+       </reg32>
+       <reg32 offset="0x00040" name="SDM_CFG2">
+               <bitfield name="FREQ_SEED_7_0" low="0" high="7" type="uint"/>
+       </reg32>
+       <reg32 offset="0x00044" name="SDM_CFG3">
+               <bitfield name="FREQ_SEED_15_8" low="0" high="7" type="uint"/>
+       </reg32>
+       <reg32 offset="0x00048" name="SDM_CFG4"/>
+       <reg32 offset="0x0004C" name="SSC_CFG0"/>
+       <reg32 offset="0x00050" name="SSC_CFG1"/>
+       <reg32 offset="0x00054" name="SSC_CFG2"/>
+       <reg32 offset="0x00058" name="SSC_CFG3"/>
+       <reg32 offset="0x0005C" name="LKDET_CFG0"/>
+       <reg32 offset="0x00060" name="LKDET_CFG1"/>
+       <reg32 offset="0x00064" name="LKDET_CFG2"/>
+       <reg32 offset="0x00068" name="TEST_CFG">
+               <bitfield name="PLL_SW_RESET" pos="0" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x0006C" name="CAL_CFG0"/>
+       <reg32 offset="0x00070" name="CAL_CFG1"/>
+       <reg32 offset="0x00074" name="CAL_CFG2"/>
+       <reg32 offset="0x00078" name="CAL_CFG3"/>
+       <reg32 offset="0x0007C" name="CAL_CFG4"/>
+       <reg32 offset="0x00080" name="CAL_CFG5"/>
+       <reg32 offset="0x00084" name="CAL_CFG6"/>
+       <reg32 offset="0x00088" name="CAL_CFG7"/>
+       <reg32 offset="0x0008C" name="CAL_CFG8"/>
+       <reg32 offset="0x00090" name="CAL_CFG9"/>
+       <reg32 offset="0x00094" name="CAL_CFG10"/>
+       <reg32 offset="0x00098" name="CAL_CFG11"/>
+       <reg32 offset="0x0009C" name="EFUSE_CFG"/>
+       <reg32 offset="0x000A0" name="DEBUG_BUS_SEL"/>
+       <reg32 offset="0x000A4" name="CTRL_42"/>
+       <reg32 offset="0x000A8" name="CTRL_43"/>
+       <reg32 offset="0x000AC" name="CTRL_44"/>
+       <reg32 offset="0x000B0" name="CTRL_45"/>
+       <reg32 offset="0x000B4" name="CTRL_46"/>
+       <reg32 offset="0x000B8" name="CTRL_47"/>
+       <reg32 offset="0x000BC" name="CTRL_48"/>
+       <reg32 offset="0x000C0" name="STATUS">
+               <bitfield name="PLL_RDY" pos="0" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x000C4" name="DEBUG_BUS0"/>
+       <reg32 offset="0x000C8" name="DEBUG_BUS1"/>
+       <reg32 offset="0x000CC" name="DEBUG_BUS2"/>
+       <reg32 offset="0x000D0" name="DEBUG_BUS3"/>
+       <reg32 offset="0x000D4" name="CTRL_54"/>
+</domain>
+
+<domain name="DSI_20nm_PHY" width="32">
+       <array offset="0x00000" name="LN" length="4" stride="0x40">
+               <reg32 offset="0x00" name="CFG_0"/>
+               <reg32 offset="0x04" name="CFG_1"/>
+               <reg32 offset="0x08" name="CFG_2"/>
+               <reg32 offset="0x0c" name="CFG_3"/>
+               <reg32 offset="0x10" name="CFG_4"/>
+               <reg32 offset="0x14" name="TEST_DATAPATH"/>
+               <reg32 offset="0x18" name="DEBUG_SEL"/>
+               <reg32 offset="0x1c" name="TEST_STR_0"/>
+               <reg32 offset="0x20" name="TEST_STR_1"/>
+       </array>
+
+       <reg32 offset="0x00100" name="LNCK_CFG_0"/>
+       <reg32 offset="0x00104" name="LNCK_CFG_1"/>
+       <reg32 offset="0x00108" name="LNCK_CFG_2"/>
+       <reg32 offset="0x0010c" name="LNCK_CFG_3"/>
+       <reg32 offset="0x00110" name="LNCK_CFG_4"/>
+       <reg32 offset="0x00114" name="LNCK_TEST_DATAPATH"/>
+       <reg32 offset="0x00118" name="LNCK_DEBUG_SEL"/>
+       <reg32 offset="0x0011c" name="LNCK_TEST_STR0"/>
+       <reg32 offset="0x00120" name="LNCK_TEST_STR1"/>
+
+       <reg32 offset="0x00140" name="TIMING_CTRL_0">
+               <bitfield name="CLK_ZERO" low="0" high="7" type="uint"/>
+       </reg32>
+       <reg32 offset="0x00144" name="TIMING_CTRL_1">
+               <bitfield name="CLK_TRAIL" low="0" high="7" type="uint"/>
+       </reg32>
+       <reg32 offset="0x00148" name="TIMING_CTRL_2">
+               <bitfield name="CLK_PREPARE" low="0" high="7" type="uint"/>
+       </reg32>
+       <reg32 offset="0x0014c" name="TIMING_CTRL_3">
+               <bitfield name="CLK_ZERO_8" pos="0" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x00150" name="TIMING_CTRL_4">
+               <bitfield name="HS_EXIT" low="0" high="7" type="uint"/>
+       </reg32>
+       <reg32 offset="0x00154" name="TIMING_CTRL_5">
+               <bitfield name="HS_ZERO" low="0" high="7" type="uint"/>
+       </reg32>
+       <reg32 offset="0x00158" name="TIMING_CTRL_6">
+               <bitfield name="HS_PREPARE" low="0" high="7" type="uint"/>
+       </reg32>
+       <reg32 offset="0x0015c" name="TIMING_CTRL_7">
+               <bitfield name="HS_TRAIL" low="0" high="7" type="uint"/>
+       </reg32>
+       <reg32 offset="0x00160" name="TIMING_CTRL_8">
+               <bitfield name="HS_RQST" low="0" high="7" type="uint"/>
+       </reg32>
+       <reg32 offset="0x00164" name="TIMING_CTRL_9">
+               <bitfield name="TA_GO" low="0" high="2" type="uint"/>
+               <bitfield name="TA_SURE" low="4" high="6" type="uint"/>
+       </reg32>
+       <reg32 offset="0x00168" name="TIMING_CTRL_10">
+               <bitfield name="TA_GET" low="0" high="2" type="uint"/>
+       </reg32>
+       <reg32 offset="0x0016c" name="TIMING_CTRL_11">
+               <bitfield name="TRIG3_CMD" low="0" high="7" type="uint"/>
+       </reg32>
+
+       <reg32 offset="0x00170" name="CTRL_0"/>
+       <reg32 offset="0x00174" name="CTRL_1"/>
+       <reg32 offset="0x00178" name="CTRL_2"/>
+       <reg32 offset="0x0017c" name="CTRL_3"/>
+       <reg32 offset="0x00180" name="CTRL_4"/>
+
+       <reg32 offset="0x00184" name="STRENGTH_0"/>
+       <reg32 offset="0x00188" name="STRENGTH_1"/>
+
+       <reg32 offset="0x001b4" name="BIST_CTRL_0"/>
+       <reg32 offset="0x001b8" name="BIST_CTRL_1"/>
+       <reg32 offset="0x001bc" name="BIST_CTRL_2"/>
+       <reg32 offset="0x001c0" name="BIST_CTRL_3"/>
+       <reg32 offset="0x001c4" name="BIST_CTRL_4"/>
+       <reg32 offset="0x001c8" name="BIST_CTRL_5"/>
+
+       <reg32 offset="0x001d4" name="GLBL_TEST_CTRL">
+               <bitfield name="BITCLK_HS_SEL" pos="0" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x001dc" name="LDO_CNTRL"/>
+</domain>
+
+<domain name="DSI_20nm_PHY_REGULATOR" width="32">
+       <reg32 offset="0x00000" name="CTRL_0"/>
+       <reg32 offset="0x00004" name="CTRL_1"/>
+       <reg32 offset="0x00008" name="CTRL_2"/>
+       <reg32 offset="0x0000c" name="CTRL_3"/>
+       <reg32 offset="0x00010" name="CTRL_4"/>
+       <reg32 offset="0x00014" name="CTRL_5"/>
+       <reg32 offset="0x00018" name="CAL_PWR_CFG"/>
+</domain>
+
+<domain name="DSI_14nm_PHY_CMN" width="32">
+       <reg32 offset="0x00000" name="REVISION_ID0"/>
+       <reg32 offset="0x00004" name="REVISION_ID1"/>
+       <reg32 offset="0x00008" name="REVISION_ID2"/>
+       <reg32 offset="0x0000c" name="REVISION_ID3"/>
+       <reg32 offset="0x00010" name="CLK_CFG0">
+               <bitfield name="DIV_CTRL_3_0" low="4" high="7" type="uint"/>
+               <bitfield name="DIV_CTRL_7_4" low="4" high="7" type="uint"/>
+       </reg32>
+       <reg32 offset="0x00014" name="CLK_CFG1">
+               <bitfield name="DSICLK_SEL" pos="0" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x00018" name="GLBL_TEST_CTRL">
+               <bitfield name="BITCLK_HS_SEL" pos="2" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x0001C" name="CTRL_0"/>
+       <reg32 offset="0x00020" name="CTRL_1">
+       </reg32>
+       <reg32 offset="0x00024" name="HW_TRIGGER"/>
+       <reg32 offset="0x00028" name="SW_CFG0"/>
+       <reg32 offset="0x0002C" name="SW_CFG1"/>
+       <reg32 offset="0x00030" name="SW_CFG2"/>
+       <reg32 offset="0x00034" name="HW_CFG0"/>
+       <reg32 offset="0x00038" name="HW_CFG1"/>
+       <reg32 offset="0x0003C" name="HW_CFG2"/>
+       <reg32 offset="0x00040" name="HW_CFG3"/>
+       <reg32 offset="0x00044" name="HW_CFG4"/>
+       <reg32 offset="0x00048" name="PLL_CNTRL">
+               <bitfield name="PLL_START" pos="0" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x0004C" name="LDO_CNTRL">
+               <bitfield name="VREG_CTRL" low="0" high="5" type="uint"/>
+       </reg32>
+</domain>
+
+<domain name="DSI_14nm_PHY" width="32">
+       <array offset="0x00000" name="LN" length="5" stride="0x80">
+               <reg32 offset="0x00" name="CFG0">
+                       <bitfield name="PREPARE_DLY" low="6" high="7" type="uint"/>
+               </reg32>
+               <reg32 offset="0x04" name="CFG1">
+                       <bitfield name="HALFBYTECLK_EN" pos="0" type="boolean"/>
+               </reg32>
+               <reg32 offset="0x08" name="CFG2"/>
+               <reg32 offset="0x0c" name="CFG3"/>
+               <reg32 offset="0x10" name="TEST_DATAPATH"/>
+               <reg32 offset="0x14" name="TEST_STR"/>
+               <reg32 offset="0x18" name="TIMING_CTRL_4">
+                       <bitfield name="HS_EXIT" low="0" high="7" type="uint"/>
+               </reg32>
+               <reg32 offset="0x1c" name="TIMING_CTRL_5">
+                       <bitfield name="HS_ZERO" low="0" high="7" type="uint"/>
+               </reg32>
+               <reg32 offset="0x20" name="TIMING_CTRL_6">
+                       <bitfield name="HS_PREPARE" low="0" high="7" type="uint"/>
+               </reg32>
+               <reg32 offset="0x24" name="TIMING_CTRL_7">
+                       <bitfield name="HS_TRAIL" low="0" high="7" type="uint"/>
+               </reg32>
+               <reg32 offset="0x28" name="TIMING_CTRL_8">
+                       <bitfield name="HS_RQST" low="0" high="7" type="uint"/>
+               </reg32>
+               <reg32 offset="0x2c" name="TIMING_CTRL_9">
+                       <bitfield name="TA_GO" low="0" high="2" type="uint"/>
+                       <bitfield name="TA_SURE" low="4" high="6" type="uint"/>
+               </reg32>
+               <reg32 offset="0x30" name="TIMING_CTRL_10">
+                       <bitfield name="TA_GET" low="0" high="2" type="uint"/>
+               </reg32>
+               <reg32 offset="0x34" name="TIMING_CTRL_11">
+                       <bitfield name="TRIG3_CMD" low="0" high="7" type="uint"/>
+               </reg32>
+               <reg32 offset="0x38" name="STRENGTH_CTRL_0"/>
+               <reg32 offset="0x3c" name="STRENGTH_CTRL_1"/>
+               <reg32 offset="0x64" name="VREG_CNTRL"/>
+       </array>
+</domain>
+
+<domain name="DSI_14nm_PHY_PLL" width="32">
+       <reg32 offset="0x000" name="IE_TRIM"/>
+       <reg32 offset="0x004" name="IP_TRIM"/>
+       <reg32 offset="0x010" name="IPTAT_TRIM"/>
+       <reg32 offset="0x01c" name="CLKBUFLR_EN"/>
+       <reg32 offset="0x028" name="SYSCLK_EN_RESET"/>
+       <reg32 offset="0x02c" name="RESETSM_CNTRL"/>
+       <reg32 offset="0x030" name="RESETSM_CNTRL2"/>
+       <reg32 offset="0x034" name="RESETSM_CNTRL3"/>
+       <reg32 offset="0x038" name="RESETSM_CNTRL4"/>
+       <reg32 offset="0x03c" name="RESETSM_CNTRL5"/>
+       <reg32 offset="0x040" name="KVCO_DIV_REF1"/>
+       <reg32 offset="0x044" name="KVCO_DIV_REF2"/>
+       <reg32 offset="0x048" name="KVCO_COUNT1"/>
+       <reg32 offset="0x04c" name="KVCO_COUNT2"/>
+       <reg32 offset="0x05c" name="VREF_CFG1"/>
+       <reg32 offset="0x058" name="KVCO_CODE"/>
+       <reg32 offset="0x06c" name="VCO_DIV_REF1"/>
+       <reg32 offset="0x070" name="VCO_DIV_REF2"/>
+       <reg32 offset="0x074" name="VCO_COUNT1"/>
+       <reg32 offset="0x078" name="VCO_COUNT2"/>
+       <reg32 offset="0x07c" name="PLLLOCK_CMP1"/>
+       <reg32 offset="0x080" name="PLLLOCK_CMP2"/>
+       <reg32 offset="0x084" name="PLLLOCK_CMP3"/>
+       <reg32 offset="0x088" name="PLLLOCK_CMP_EN"/>
+       <reg32 offset="0x08c" name="PLL_VCO_TUNE"/>
+       <reg32 offset="0x090" name="DEC_START"/>
+       <reg32 offset="0x094" name="SSC_EN_CENTER"/>
+       <reg32 offset="0x098" name="SSC_ADJ_PER1"/>
+       <reg32 offset="0x09c" name="SSC_ADJ_PER2"/>
+       <reg32 offset="0x0a0" name="SSC_PER1"/>
+       <reg32 offset="0x0a4" name="SSC_PER2"/>
+       <reg32 offset="0x0a8" name="SSC_STEP_SIZE1"/>
+       <reg32 offset="0x0ac" name="SSC_STEP_SIZE2"/>
+       <reg32 offset="0x0b4" name="DIV_FRAC_START1"/>
+       <reg32 offset="0x0b8" name="DIV_FRAC_START2"/>
+       <reg32 offset="0x0bc" name="DIV_FRAC_START3"/>
+       <reg32 offset="0x0c0" name="TXCLK_EN"/>
+       <reg32 offset="0x0c4" name="PLL_CRCTRL"/>
+       <reg32 offset="0x0cc" name="RESET_SM_READY_STATUS"/>
+       <reg32 offset="0x0e8" name="PLL_MISC1"/>
+       <reg32 offset="0x0f0" name="CP_SET_CUR"/>
+       <reg32 offset="0x0f4" name="PLL_ICPMSET"/>
+       <reg32 offset="0x0f8" name="PLL_ICPCSET"/>
+       <reg32 offset="0x0fc" name="PLL_ICP_SET"/>
+       <reg32 offset="0x100" name="PLL_LPF1"/>
+       <reg32 offset="0x104" name="PLL_LPF2_POSTDIV"/>
+       <reg32 offset="0x108" name="PLL_BANDGAP"/>
+</domain>
+
+<domain name="DSI_10nm_PHY_CMN" width="32">
+       <reg32 offset="0x00000" name="REVISION_ID0"/>
+       <reg32 offset="0x00004" name="REVISION_ID1"/>
+       <reg32 offset="0x00008" name="REVISION_ID2"/>
+       <reg32 offset="0x0000c" name="REVISION_ID3"/>
+       <reg32 offset="0x00010" name="CLK_CFG0"/>
+       <reg32 offset="0x00014" name="CLK_CFG1"/>
+       <reg32 offset="0x00018" name="GLBL_CTRL"/>
+       <reg32 offset="0x0001c" name="RBUF_CTRL"/>
+       <reg32 offset="0x00020" name="VREG_CTRL"/>
+       <reg32 offset="0x00024" name="CTRL_0"/>
+       <reg32 offset="0x00028" name="CTRL_1"/>
+       <reg32 offset="0x0002c" name="CTRL_2"/>
+       <reg32 offset="0x00030" name="LANE_CFG0"/>
+       <reg32 offset="0x00034" name="LANE_CFG1"/>
+       <reg32 offset="0x00038" name="PLL_CNTRL"/>
+       <reg32 offset="0x00098" name="LANE_CTRL0"/>
+       <reg32 offset="0x0009c" name="LANE_CTRL1"/>
+       <reg32 offset="0x000a0" name="LANE_CTRL2"/>
+       <reg32 offset="0x000a4" name="LANE_CTRL3"/>
+       <reg32 offset="0x000a8" name="LANE_CTRL4"/>
+       <reg32 offset="0x000ac" name="TIMING_CTRL_0"/>
+       <reg32 offset="0x000b0" name="TIMING_CTRL_1"/>
+       <reg32 offset="0x000b4" name="TIMING_CTRL_2"/>
+       <reg32 offset="0x000b8" name="TIMING_CTRL_3"/>
+       <reg32 offset="0x000bc" name="TIMING_CTRL_4"/>
+       <reg32 offset="0x000c0" name="TIMING_CTRL_5"/>
+       <reg32 offset="0x000c4" name="TIMING_CTRL_6"/>
+       <reg32 offset="0x000c8" name="TIMING_CTRL_7"/>
+       <reg32 offset="0x000cc" name="TIMING_CTRL_8"/>
+       <reg32 offset="0x000d0" name="TIMING_CTRL_9"/>
+       <reg32 offset="0x000d4" name="TIMING_CTRL_10"/>
+       <reg32 offset="0x000d8" name="TIMING_CTRL_11"/>
+       <reg32 offset="0x000ec" name="PHY_STATUS"/>
+       <reg32 offset="0x000f4" name="LANE_STATUS0"/>
+       <reg32 offset="0x000f8" name="LANE_STATUS1"/>
+</domain>
+
+<domain name="DSI_10nm_PHY" width="32">
+       <array offset="0x00000" name="LN" length="5" stride="0x80">
+               <reg32 offset="0x00" name="CFG0"/>
+               <reg32 offset="0x04" name="CFG1"/>
+               <reg32 offset="0x08" name="CFG2"/>
+               <reg32 offset="0x0c" name="CFG3"/>
+               <reg32 offset="0x10" name="TEST_DATAPATH"/>
+               <reg32 offset="0x14" name="PIN_SWAP"/>
+               <reg32 offset="0x18" name="HSTX_STR_CTRL"/>
+               <reg32 offset="0x1c" name="OFFSET_TOP_CTRL"/>
+               <reg32 offset="0x20" name="OFFSET_BOT_CTRL"/>
+               <reg32 offset="0x24" name="LPTX_STR_CTRL"/>
+               <reg32 offset="0x28" name="LPRX_CTRL"/>
+               <reg32 offset="0x2c" name="TX_DCTRL"/>
+       </array>
+</domain>
+
+<domain name="DSI_10nm_PHY_PLL" width="32">
+       <reg32 offset="0x0000" name="ANALOG_CONTROLS_ONE"/>
+       <reg32 offset="0x0004" name="ANALOG_CONTROLS_TWO"/>
+       <reg32 offset="0x0010" name="ANALOG_CONTROLS_THREE"/>
+       <reg32 offset="0x001c" name="DSM_DIVIDER"/>
+       <reg32 offset="0x0020" name="FEEDBACK_DIVIDER"/>
+       <reg32 offset="0x0024" name="SYSTEM_MUXES"/>
+       <reg32 offset="0x002c" name="CMODE"/>
+       <reg32 offset="0x0030" name="CALIBRATION_SETTINGS"/>
+       <reg32 offset="0x0054" name="BAND_SEL_CAL_SETTINGS_THREE"/>
+       <reg32 offset="0x0064" name="FREQ_DETECT_SETTINGS_ONE"/>
+       <reg32 offset="0x007c" name="PFILT"/>
+       <reg32 offset="0x0080" name="IFILT"/>
+       <reg32 offset="0x0094" name="OUTDIV"/>
+       <reg32 offset="0x00a4" name="CORE_OVERRIDE"/>
+       <reg32 offset="0x00a8" name="CORE_INPUT_OVERRIDE"/>
+       <reg32 offset="0x00b4" name="PLL_DIGITAL_TIMERS_TWO"/>
+       <reg32 offset="0x00cc" name="DECIMAL_DIV_START_1"/>
+       <reg32 offset="0x00d0" name="FRAC_DIV_START_LOW_1"/>
+       <reg32 offset="0x00d4" name="FRAC_DIV_START_MID_1"/>
+       <reg32 offset="0x00d8" name="FRAC_DIV_START_HIGH_1"/>
+       <reg32 offset="0x010c" name="SSC_STEPSIZE_LOW_1"/>
+       <reg32 offset="0x0110" name="SSC_STEPSIZE_HIGH_1"/>
+       <reg32 offset="0x0114" name="SSC_DIV_PER_LOW_1"/>
+       <reg32 offset="0x0118" name="SSC_DIV_PER_HIGH_1"/>
+       <reg32 offset="0x011c" name="SSC_DIV_ADJPER_LOW_1"/>
+       <reg32 offset="0x0120" name="SSC_DIV_ADJPER_HIGH_1"/>
+       <reg32 offset="0x013c" name="SSC_CONTROL"/>
+       <reg32 offset="0x0140" name="PLL_OUTDIV_RATE"/>
+       <reg32 offset="0x0144" name="PLL_LOCKDET_RATE_1"/>
+       <reg32 offset="0x014c" name="PLL_PROP_GAIN_RATE_1"/>
+       <reg32 offset="0x0154" name="PLL_BAND_SET_RATE_1"/>
+       <reg32 offset="0x015c" name="PLL_INT_GAIN_IFILT_BAND_1"/>
+       <reg32 offset="0x0164" name="PLL_FL_INT_GAIN_PFILT_BAND_1"/>
+       <reg32 offset="0x0180" name="PLL_LOCK_OVERRIDE"/>
+       <reg32 offset="0x0184" name="PLL_LOCK_DELAY"/>
+       <reg32 offset="0x018c" name="CLOCK_INVERTERS"/>
+       <reg32 offset="0x01a0" name="COMMON_STATUS_ONE"/>
+</domain>
+
+</database>
diff --git a/src/freedreno/registers/dsi/mmss_cc.xml b/src/freedreno/registers/dsi/mmss_cc.xml
new file mode 100644 (file)
index 0000000..ccd4083
--- /dev/null
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<database xmlns="http://nouveau.freedesktop.org/"
+xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+xsi:schemaLocation="http://nouveau.freedesktop.org/ rules-ng.xsd">
+<import file="freedreno_copyright.xml"/>
+
+<domain name="MMSS_CC" width="32">
+       <brief>
+               Multimedia sub-system clock control.. appears to be used by DSI
+               for clocks..
+       </brief>
+
+       <reg32 offset="0x0008" name="AHB"/>
+
+       <enum name="mmss_cc_clk">
+               <value name="CLK" value="0"/>
+               <value name="PCLK" value="1"/>
+       </enum>
+
+       <!--
+               possibly these sequences of registers are same, except pre_div_func
+               is shifted by 12 in pclk and 14 in clk..  I'm going to guess that
+               the register is same and they just multiply value by 4..
+        -->
+       <array offsets="0x004c,0x0130" name="CLK" length="2" stride="0x10" index="mmss_cc_clk">
+               <reg32 offset="0x00" name="CC">
+                       <bitfield name="CLK_EN" pos="0" type="boolean"/>
+                       <bitfield name="ROOT_EN" pos="2" type="boolean"/>
+                       <bitfield name="MND_EN" pos="5" type="boolean"/>
+                       <bitfield name="MND_MODE" low="6" high="7"/>
+                       <bitfield name="PMXO_SEL" low="8" high="9"/> <!-- not sure high -->
+               </reg32>
+               <reg32 offset="0x04" name="MD">
+                       <bitfield name="D" low="0" high="7"/>
+                       <bitfield name="M" low="8" high="15"/>
+               </reg32>
+               <reg32 offset="0x08" name="NS">
+                       <bitfield name="SRC" low="0" high="3"/> <!-- not sure high, but it is >= 1 -->
+                       <bitfield name="PRE_DIV_FUNC" low="12" high="23"/>
+                       <bitfield name="VAL" low="24" high="31"></bitfield>
+               </reg32>
+       </array>
+       <reg32 offset="0x0094" name="DSI2_PIXEL_CC"/>
+       <reg32 offset="0x00e4" name="DSI2_PIXEL_NS"/>
+       <reg32 offset="0x0264" name="DSI2_PIXEL_CC2"/>
+</domain>
+
+</database>
diff --git a/src/freedreno/registers/dsi/sfpb.xml b/src/freedreno/registers/dsi/sfpb.xml
new file mode 100644 (file)
index 0000000..a08c82f
--- /dev/null
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<database xmlns="http://nouveau.freedesktop.org/"
+xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+xsi:schemaLocation="http://nouveau.freedesktop.org/ rules-ng.xsd">
+<import file="freedreno_copyright.xml"/>
+
+<domain name="SFPB" width="32">
+       <enum name="sfpb_ahb_arb_master_port_en">
+               <value name="SFPB_MASTER_PORT_ENABLE" value="3"/>
+               <value name="SFPB_MASTER_PORT_DISABLE" value="0"/>
+       </enum>
+       <reg32 offset="0x0058" name="GPREG">
+               <bitfield name="MASTER_PORT_EN" low="11" high="12" type="sfpb_ahb_arb_master_port_en"/>
+       </reg32>
+</domain>
+
+</database>
diff --git a/src/freedreno/registers/edp/edp.xml b/src/freedreno/registers/edp/edp.xml
new file mode 100644 (file)
index 0000000..00fc611
--- /dev/null
@@ -0,0 +1,239 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<database xmlns="http://nouveau.freedesktop.org/"
+xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+xsi:schemaLocation="http://nouveau.freedesktop.org/ rules-ng.xsd">
+<import file="freedreno_copyright.xml"/>
+
+<domain name="EDP" width="32">
+       <enum name="edp_color_depth">
+               <value name="EDP_6BIT"  value="0"/>
+               <value name="EDP_8BIT"  value="1"/>
+               <value name="EDP_10BIT" value="2"/>
+               <value name="EDP_12BIT" value="3"/>
+               <value name="EDP_16BIT" value="4"/>
+       </enum>
+
+       <enum name="edp_component_format">
+               <value name="EDP_RGB" value="0"/>
+               <value name="EDP_YUV422" value="1"/>
+               <value name="EDP_YUV444" value="2"/>
+       </enum>
+
+       <reg32 offset="0x0004" name="MAINLINK_CTRL">
+               <bitfield name="ENABLE" pos="0" type="boolean"/>
+               <bitfield name="RESET"  pos="1" type="boolean"/>
+       </reg32>
+
+       <reg32 offset="0x0008" name="STATE_CTRL">
+               <bitfield name="TRAIN_PATTERN_1"       pos="0" type="boolean"/>
+               <bitfield name="TRAIN_PATTERN_2"       pos="1" type="boolean"/>
+               <bitfield name="TRAIN_PATTERN_3"       pos="2" type="boolean"/>
+               <bitfield name="SYMBOL_ERR_RATE_MEAS"  pos="3" type="boolean"/>
+               <bitfield name="PRBS7"                 pos="4" type="boolean"/>
+               <bitfield name="CUSTOM_80_BIT_PATTERN" pos="5" type="boolean"/>
+               <bitfield name="SEND_VIDEO"            pos="6" type="boolean"/>
+               <bitfield name="PUSH_IDLE"             pos="7" type="boolean"/>
+       </reg32>
+
+       <reg32 offset="0x000c" name="CONFIGURATION_CTRL">
+               <!-- next two may be swapped? -->
+               <bitfield name="SYNC_CLK" pos="0" type="boolean"/>
+               <bitfield name="STATIC_MVID" pos="1" type="boolean"/>
+               <bitfield name="PROGRESSIVE" pos="2" type="boolean"/>
+               <!-- # of lanes minus one: -->
+               <bitfield name="LANES" low="4" high="5" type="uint"/>
+               <bitfield name="ENHANCED_FRAMING" pos="6" type="boolean"/>
+               <!--
+                  NOTE: only 6bit and 8bit valid
+                -->
+               <bitfield name="COLOR" pos="8" type="edp_color_depth"/>
+       </reg32>
+
+       <reg32 offset="0x0014" name="SOFTWARE_MVID" type="uint"/>
+       <reg32 offset="0x0018" name="SOFTWARE_NVID" type="uint"/>
+
+       <reg32 offset="0x001c" name="TOTAL_HOR_VER">
+               <bitfield name="HORIZ" low="0" high="15" type="uint"/>
+               <bitfield name="VERT"  low="16" high="31" type="uint"/>
+       </reg32>
+
+       <reg32 offset="0x0020" name="START_HOR_VER_FROM_SYNC">
+               <bitfield name="HORIZ" low="0" high="15" type="uint"/>
+               <bitfield name="VERT"  low="16" high="31" type="uint"/>
+       </reg32>
+
+       <reg32 offset="0x0024" name="HSYNC_VSYNC_WIDTH_POLARITY">
+               <bitfield name="HORIZ"  low="0" high="14" type="uint"/>
+               <bitfield name="NHSYNC" pos="15" type="boolean"/>
+               <bitfield name="VERT"   low="16" high="30" type="uint"/>
+               <bitfield name="NVSYNC" pos="31" type="boolean"/>
+       </reg32>
+
+       <reg32 offset="0x0028" name="ACTIVE_HOR_VER">
+               <bitfield name="HORIZ" low="0" high="15" type="uint"/>
+               <bitfield name="VERT"  low="16" high="31" type="uint"/>
+       </reg32>
+
+       <reg32 offset="0x002c" name="MISC1_MISC0">
+               <!-- MISC0 from DisplayPort v1.2 spec: -->
+               <bitfield name="MISC0" low="0" high="7"/>
+               <!-- aliased MISC0 bitfields: -->
+               <bitfield name="SYNC" pos="0" type="boolean"/>
+               <bitfield name="COMPONENT_FORMAT" low="1" high="2" type="edp_component_format"/>
+               <!-- CEA (vs VESA) color range: -->
+               <bitfield name="CEA" pos="3" type="boolean"/>
+               <!-- YCbCr Colorimetry ITU-R BT709-5 (vs ITU-R BT601-5): -->
+               <bitfield name="BT709_5" pos="4" type="boolean"/>
+               <bitfield name="COLOR" low="5" high="7" type="edp_color_depth"/>
+
+               <!-- MISC1 from DisplayPort v1.2 spec: -->
+               <bitfield name="MISC1" low="8" high="15"/>
+               <!-- aliased MISC1 bitfields: -->
+               <bitfield name="INTERLACED_ODD" pos="8" type="boolean"/>
+               <bitfield name="STEREO" low="9" high="10" type="uint"/>
+       </reg32>
+
+       <reg32 offset="0x0074" name="PHY_CTRL">
+               <bitfield name="SW_RESET_PLL" pos="0" type="boolean"/>
+               <bitfield name="SW_RESET" pos="2" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x0084" name="MAINLINK_READY">
+               <bitfield name="TRAIN_PATTERN_1_READY" pos="3" type="boolean"/>
+               <bitfield name="TRAIN_PATTERN_2_READY" pos="4" type="boolean"/>
+               <bitfield name="TRAIN_PATTERN_3_READY" pos="5" type="boolean"/>
+       </reg32>
+
+       <reg32 offset="0x0300" name="AUX_CTRL">
+               <bitfield name="ENABLE" pos="0" type="boolean"/>
+               <bitfield name="RESET"  pos="1" type="boolean"/>
+       </reg32>
+
+       <!-- interrupt registers come in sets of 3 bits, status/ack/en -->
+       <reg32 offset="0x0308" name="INTERRUPT_REG_1">
+               <bitfield name="HPD"                    pos="0"  type="boolean"/>
+               <bitfield name="HPD_ACK"                pos="1"  type="boolean"/>
+               <bitfield name="HPD_EN"                 pos="2"  type="boolean"/>
+               <bitfield name="AUX_I2C_DONE"           pos="3"  type="boolean"/>
+               <bitfield name="AUX_I2C_DONE_ACK"       pos="4"  type="boolean"/>
+               <bitfield name="AUX_I2C_DONE_EN"        pos="5"  type="boolean"/>
+               <bitfield name="WRONG_ADDR"             pos="6"  type="boolean"/>
+               <bitfield name="WRONG_ADDR_ACK"         pos="7"  type="boolean"/>
+               <bitfield name="WRONG_ADDR_EN"          pos="8"  type="boolean"/>
+               <bitfield name="TIMEOUT"                pos="9"  type="boolean"/>
+               <bitfield name="TIMEOUT_ACK"            pos="10" type="boolean"/>
+               <bitfield name="TIMEOUT_EN"             pos="11" type="boolean"/>
+               <bitfield name="NACK_DEFER"             pos="12" type="boolean"/>
+               <bitfield name="NACK_DEFER_ACK"         pos="13" type="boolean"/>
+               <bitfield name="NACK_DEFER_EN"          pos="14" type="boolean"/>
+               <bitfield name="WRONG_DATA_CNT"         pos="15" type="boolean"/>
+               <bitfield name="WRONG_DATA_CNT_ACK"     pos="16" type="boolean"/>
+               <bitfield name="WRONG_DATA_CNT_EN"      pos="17" type="boolean"/>
+               <bitfield name="I2C_NACK"               pos="18" type="boolean"/>
+               <bitfield name="I2C_NACK_ACK"           pos="19" type="boolean"/>
+               <bitfield name="I2C_NACK_EN"            pos="20" type="boolean"/>
+               <bitfield name="I2C_DEFER"              pos="21" type="boolean"/>
+               <bitfield name="I2C_DEFER_ACK"          pos="22" type="boolean"/>
+               <bitfield name="I2C_DEFER_EN"           pos="23" type="boolean"/>
+               <bitfield name="PLL_UNLOCK"             pos="24" type="boolean"/>
+               <bitfield name="PLL_UNLOCK_ACK"         pos="25" type="boolean"/>
+               <bitfield name="PLL_UNLOCK_EN"          pos="26" type="boolean"/>
+               <bitfield name="AUX_ERROR"              pos="27" type="boolean"/>
+               <bitfield name="AUX_ERROR_ACK"          pos="28" type="boolean"/>
+               <bitfield name="AUX_ERROR_EN"           pos="29" type="boolean"/>
+       </reg32>
+
+       <reg32 offset="0x030c" name="INTERRUPT_REG_2">
+               <bitfield name="READY_FOR_VIDEO"        pos="0"  type="boolean"/>
+               <bitfield name="READY_FOR_VIDEO_ACK"    pos="1"  type="boolean"/>
+               <bitfield name="READY_FOR_VIDEO_EN"     pos="2"  type="boolean"/>
+               <bitfield name="IDLE_PATTERNs_SENT"     pos="3"  type="boolean"/>
+               <bitfield name="IDLE_PATTERNs_SENT_ACK" pos="4"  type="boolean"/>
+               <bitfield name="IDLE_PATTERNs_SENT_EN"  pos="5"  type="boolean"/>
+               <bitfield name="FRAME_END"              pos="9"  type="boolean"/>
+               <bitfield name="FRAME_END_ACK"          pos="7"  type="boolean"/>
+               <bitfield name="FRAME_END_EN"           pos="8"  type="boolean"/>
+               <bitfield name="CRC_UPDATED"            pos="9"  type="boolean"/>
+               <bitfield name="CRC_UPDATED_ACK"        pos="10" type="boolean"/>
+               <bitfield name="CRC_UPDATED_EN"         pos="11" type="boolean"/>
+       </reg32>
+
+       <reg32 offset="0x0310" name="INTERRUPT_TRANS_NUM"/>
+       <reg32 offset="0x0314" name="AUX_DATA">
+               <bitfield name="READ" pos="0" type="boolean"/>
+               <bitfield name="DATA" low="8" high="15"/>
+               <bitfield name="INDEX" low="16" high="23"/>
+               <bitfield name="INDEX_WRITE" pos="31" type="boolean"/>
+       </reg32>
+
+       <reg32 offset="0x0318" name="AUX_TRANS_CTRL">
+               <bitfield name="I2C" pos="8" type="boolean"/>
+               <bitfield name="GO"  pos="9" type="boolean"/>
+       </reg32>
+
+       <reg32 offset="0x0324" name="AUX_STATUS"/>
+</domain>
+
+<domain name="EDP_PHY" width="32">
+       <array offset="0x0400" name="LN" length="4" stride="0x40">
+               <reg32 offset="0x04" name="PD_CTL"/>
+       </array>
+       <reg32 offset="0x0510" name="GLB_VM_CFG0"/>
+       <reg32 offset="0x0514" name="GLB_VM_CFG1"/>
+       <reg32 offset="0x0518" name="GLB_MISC9"/>
+       <reg32 offset="0x0528" name="GLB_CFG"/>
+       <reg32 offset="0x052c" name="GLB_PD_CTL"/>
+       <reg32 offset="0x0598" name="GLB_PHY_STATUS"/>
+</domain>
+
+<domain name="EDP_28nm_PHY_PLL" width="32">
+       <reg32 offset="0x00000" name="REFCLK_CFG"/>
+       <reg32 offset="0x00004" name="POSTDIV1_CFG"/>
+       <reg32 offset="0x00008" name="CHGPUMP_CFG"/>
+       <reg32 offset="0x0000C" name="VCOLPF_CFG"/>
+       <reg32 offset="0x00010" name="VREG_CFG"/>
+       <reg32 offset="0x00014" name="PWRGEN_CFG"/>
+       <reg32 offset="0x00018" name="DMUX_CFG"/>
+       <reg32 offset="0x0001C" name="AMUX_CFG"/>
+       <reg32 offset="0x00020" name="GLB_CFG">
+               <bitfield name="PLL_PWRDN_B" pos="0" type="boolean"/>
+               <bitfield name="PLL_LDO_PWRDN_B" pos="1" type="boolean"/>
+               <bitfield name="PLL_PWRGEN_PWRDN_B" pos="2" type="boolean"/>
+               <bitfield name="PLL_ENABLE" pos="3" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x00024" name="POSTDIV2_CFG"/>
+       <reg32 offset="0x00028" name="POSTDIV3_CFG"/>
+       <reg32 offset="0x0002C" name="LPFR_CFG"/>
+       <reg32 offset="0x00030" name="LPFC1_CFG"/>
+       <reg32 offset="0x00034" name="LPFC2_CFG"/>
+       <reg32 offset="0x00038" name="SDM_CFG0"/>
+       <reg32 offset="0x0003C" name="SDM_CFG1"/>
+       <reg32 offset="0x00040" name="SDM_CFG2"/>
+       <reg32 offset="0x00044" name="SDM_CFG3"/>
+       <reg32 offset="0x00048" name="SDM_CFG4"/>
+       <reg32 offset="0x0004C" name="SSC_CFG0"/>
+       <reg32 offset="0x00050" name="SSC_CFG1"/>
+       <reg32 offset="0x00054" name="SSC_CFG2"/>
+       <reg32 offset="0x00058" name="SSC_CFG3"/>
+       <reg32 offset="0x0005C" name="LKDET_CFG0"/>
+       <reg32 offset="0x00060" name="LKDET_CFG1"/>
+       <reg32 offset="0x00064" name="LKDET_CFG2"/>
+       <reg32 offset="0x00068" name="TEST_CFG">
+               <bitfield name="PLL_SW_RESET" pos="0" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x0006C" name="CAL_CFG0"/>
+       <reg32 offset="0x00070" name="CAL_CFG1"/>
+       <reg32 offset="0x00074" name="CAL_CFG2"/>
+       <reg32 offset="0x00078" name="CAL_CFG3"/>
+       <reg32 offset="0x0007C" name="CAL_CFG4"/>
+       <reg32 offset="0x00080" name="CAL_CFG5"/>
+       <reg32 offset="0x00084" name="CAL_CFG6"/>
+       <reg32 offset="0x00088" name="CAL_CFG7"/>
+       <reg32 offset="0x0008C" name="CAL_CFG8"/>
+       <reg32 offset="0x00090" name="CAL_CFG9"/>
+       <reg32 offset="0x00094" name="CAL_CFG10"/>
+       <reg32 offset="0x00098" name="CAL_CFG11"/>
+       <reg32 offset="0x0009C" name="EFUSE_CFG"/>
+       <reg32 offset="0x000A0" name="DEBUG_BUS_SEL"/>
+</domain>
+
+</database>
diff --git a/src/freedreno/registers/hdmi/hdmi.xml b/src/freedreno/registers/hdmi/hdmi.xml
new file mode 100644 (file)
index 0000000..af22313
--- /dev/null
@@ -0,0 +1,964 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<database xmlns="http://nouveau.freedesktop.org/"
+xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+xsi:schemaLocation="http://nouveau.freedesktop.org/ rules-ng.xsd">
+<import file="freedreno_copyright.xml"/>
+
+<!--
+       NOTE: also see mdss_hdmi_util.h.. newer devices using MDSS appear
+       to have the same HDMI block (or maybe a newer version?) but for
+       some reason duplicate the code under drivers/video/msm/mdss
+ -->
+
+<domain name="HDMI" width="32">
+       <enum name="hdmi_hdcp_key_state">
+               <value name="HDCP_KEYS_STATE_NO_KEYS" value="0"/>
+               <value name="HDCP_KEYS_STATE_NOT_CHECKED" value="1"/>
+               <value name="HDCP_KEYS_STATE_CHECKING" value="2"/>
+               <value name="HDCP_KEYS_STATE_VALID" value="3"/>
+               <value name="HDCP_KEYS_STATE_AKSV_NOT_VALID" value="4"/>
+               <value name="HDCP_KEYS_STATE_CHKSUM_MISMATCH" value="5"/>
+               <value name="HDCP_KEYS_STATE_PROD_AKSV" value="6"/>
+               <value name="HDCP_KEYS_STATE_RESERVED" value="7"/>
+       </enum>
+       <enum name="hdmi_ddc_read_write">
+               <value name="DDC_WRITE" value="0"/>
+               <value name="DDC_READ" value="1"/>
+       </enum>
+       <enum name="hdmi_acr_cts">
+               <value name="ACR_NONE" value="0"/>
+               <value name="ACR_32" value="1"/>
+               <value name="ACR_44" value="2"/>
+               <value name="ACR_48" value="3"/>
+       </enum>
+
+       <reg32 offset="0x00000" name="CTRL">
+               <bitfield name="ENABLE" pos="0" type="boolean"/>
+               <bitfield name="HDMI" pos="1" type="boolean"/>
+               <bitfield name="ENCRYPTED" pos="2" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x00020" name="AUDIO_PKT_CTRL1">
+               <bitfield name="AUDIO_SAMPLE_SEND" pos="0" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x00024" name="ACR_PKT_CTRL">
+               <!--
+                       Guessing on order of bitfields from these comments:
+                               /* AUDIO_PRIORITY | SOURCE */
+                               acr_pck_ctrl_reg |= 0x80000100;
+                               /* N_MULTIPLE(multiplier) */
+                               acr_pck_ctrl_reg |= (multiplier & 7) << 16;
+                               /* SEND | CONT */
+                               acr_pck_ctrl_reg |= 0x00000003;
+                -->
+               <bitfield name="CONT" pos="0" type="boolean"/>
+               <bitfield name="SEND" pos="1" type="boolean"/>
+               <bitfield name="SELECT" low="4" high="5" type="hdmi_acr_cts"/>
+               <bitfield name="SOURCE" pos="8" type="boolean"/>
+               <bitfield name="N_MULTIPLIER" low="16" high="18" type="uint"/>
+               <bitfield name="AUDIO_PRIORITY" pos="31" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x0028" name="VBI_PKT_CTRL">
+               <!--
+                       Guessing on the order of bits from:
+                               /* GC packet enable (every frame) */
+                               /* HDMI_VBI_PKT_CTRL[0x0028] */
+                               hdmi_msm_rmw32or(0x0028, 3 << 4);
+                               /* HDMI_VBI_PKT_CTRL[0x0028] */
+                               /* ISRC Send + Continuous */
+                               hdmi_msm_rmw32or(0x0028, 3 << 8);
+                               /* HDMI_VBI_PKT_CTRL[0x0028] */
+                               /* ACP send, s/w source */
+                               hdmi_msm_rmw32or(0x0028, 3 << 12);
+                -->
+               <bitfield name="GC_ENABLE" pos="4" type="boolean"/>
+               <bitfield name="GC_EVERY_FRAME" pos="5" type="boolean"/>
+               <bitfield name="ISRC_SEND" pos="8" type="boolean"/>
+               <bitfield name="ISRC_CONTINUOUS" pos="9" type="boolean"/>
+               <bitfield name="ACP_SEND" pos="12" type="boolean"/>
+               <bitfield name="ACP_SRC_SW" pos="13" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x0002c" name="INFOFRAME_CTRL0">
+               <!--
+                       Guessing on the order of these flags, from this comment:
+                               /* Set these flags */
+                               /* AUDIO_INFO_UPDATE | AUDIO_INFO_SOURCE | AUDIO_INFO_CONT
+                                | AUDIO_INFO_SEND */
+                               audio_info_ctrl_reg |= 0x000000F0;
+                               /* 0x3 for AVI InfFrame enable (every frame) */
+                               HDMI_OUTP(0x002C, HDMI_INP(0x002C) | 0x00000003L);
+                -->
+               <bitfield name="AVI_SEND" pos="0" type="boolean"/>
+               <bitfield name="AVI_CONT" pos="1" type="boolean"/>           <!-- every frame -->
+               <bitfield name="AUDIO_INFO_SEND" pos="4" type="boolean"/>
+               <bitfield name="AUDIO_INFO_CONT" pos="5" type="boolean"/>    <!-- every frame -->
+               <bitfield name="AUDIO_INFO_SOURCE" pos="6" type="boolean"/>
+               <bitfield name="AUDIO_INFO_UPDATE" pos="7" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x00030" name="INFOFRAME_CTRL1">
+               <bitfield name="AVI_INFO_LINE" low="0" high="5" type="uint"/>
+               <bitfield name="AUDIO_INFO_LINE" low="8" high="13" type="uint"/>
+               <bitfield name="MPEG_INFO_LINE" low="16" high="21" type="uint"/>
+               <bitfield name="VENSPEC_INFO_LINE" low="24" high="29" type="uint"/>
+       </reg32>
+       <reg32 offset="0x00034" name="GEN_PKT_CTRL">
+               <!--
+                       0x0034 GEN_PKT_CTRL
+                         GENERIC0_SEND   0      0 = Disable Generic0 Packet Transmission
+                                                1 = Enable Generic0 Packet Transmission
+                         GENERIC0_CONT   1      0 = Send Generic0 Packet on next frame only
+                                                1 = Send Generic0 Packet on every frame
+                         GENERIC0_UPDATE 2      NUM
+                         GENERIC1_SEND   4      0 = Disable Generic1 Packet Transmission
+                                                1 = Enable Generic1 Packet Transmission
+                         GENERIC1_CONT   5      0 = Send Generic1 Packet on next frame only
+                                                1 = Send Generic1 Packet on every frame
+                         GENERIC0_LINE   21:16  NUM
+                         GENERIC1_LINE   29:24  NUM
+                       
+                       GENERIC0_LINE | GENERIC0_UPDATE | GENERIC0_CONT | GENERIC0_SEND
+                       Setup HDMI TX generic packet control
+                       Enable this packet to transmit every frame
+                       Enable this packet to transmit every frame
+                       Enable HDMI TX engine to transmit Generic packet 0
+                         HDMI_OUTP(0x0034, (1 << 16) | (1 << 2) | BIT(1) | BIT(0));
+                -->
+               <bitfield name="GENERIC0_SEND" pos="0" type="boolean"/>
+               <bitfield name="GENERIC0_CONT" pos="1" type="boolean"/>
+               <bitfield name="GENERIC0_UPDATE" low="2" high="3" type="uint"/> <!-- ??? -->
+               <bitfield name="GENERIC1_SEND" pos="4" type="boolean"/>
+               <bitfield name="GENERIC1_CONT" pos="5" type="boolean"/>
+               <bitfield name="GENERIC0_LINE" low="16" high="21" type="uint"/>
+               <bitfield name="GENERIC1_LINE" low="24" high="29" type="uint"/>
+       </reg32>
+       <reg32 offset="0x00040" name="GC">
+               <bitfield name="MUTE" pos="0" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x00044" name="AUDIO_PKT_CTRL2">
+               <bitfield name="OVERRIDE" pos="0" type="boolean"/>
+               <bitfield name="LAYOUT" pos="1" type="boolean"/> <!-- 1 for >2 channels -->
+       </reg32>
+
+       <!--
+               AVI_INFO appears to be the infoframe in a slightly weird order..
+               starts with PB0 (checksum), and ends with version..
+       -->
+       <reg32 offset="0x0006c" name="AVI_INFO" stride="4" length="4"/>
+
+       <reg32 offset="0x00084" name="GENERIC0_HDR"/>
+       <reg32 offset="0x00088" name="GENERIC0" stride="4" length="7"/>
+
+       <reg32 offset="0x000a4" name="GENERIC1_HDR"/>
+       <reg32 offset="0x000a8" name="GENERIC1" stride="4" length="7"/>
+
+       <!--
+               TODO add a way to show symbolic offsets into array: hdmi_acr_cts-1
+        -->
+       <array offset="0x00c4" name="ACR" length="3" stride="8" index="hdmi_acr_cts">
+               <reg32 offset="0" name="0">
+                       <bitfield name="CTS" low="12" high="31" type="uint"/>
+               </reg32>
+               <reg32 offset="4" name="1">
+                       <!-- not sure the actual # of bits.. -->
+                       <bitfield name="N" low="0" high="31" type="uint"/>
+               </reg32>
+       </array>
+
+       <reg32 offset="0x000e4" name="AUDIO_INFO0">
+               <bitfield name="CHECKSUM" low="0" high="7"/>
+               <bitfield name="CC" low="8" high="10" type="uint"/> <!-- channel count -->
+       </reg32>
+       <reg32 offset="0x000e8" name="AUDIO_INFO1">
+               <bitfield name="CA" low="0" high="7"/>        <!-- Channel Allocation -->
+               <bitfield name="LSV" low="11" high="14"/>     <!-- Level Shift -->
+               <bitfield name="DM_INH" pos="15" type="boolean"/>  <!-- down-mix inhibit flag -->
+       </reg32>
+       <reg32 offset="0x00110" name="HDCP_CTRL">
+               <bitfield name="ENABLE" pos="0" type="boolean"/>
+               <bitfield name="ENCRYPTION_ENABLE" pos="8" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x00114" name="HDCP_DEBUG_CTRL">
+               <bitfield name="RNG_CIPHER" pos="2" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x00118" name="HDCP_INT_CTRL">
+               <bitfield name="AUTH_SUCCESS_INT" pos="0" type="boolean"/>
+               <bitfield name="AUTH_SUCCESS_ACK" pos="1" type="boolean"/>
+               <bitfield name="AUTH_SUCCESS_MASK" pos="2" type="boolean"/>
+               <bitfield name="AUTH_FAIL_INT" pos="4" type="boolean"/>
+               <bitfield name="AUTH_FAIL_ACK" pos="5" type="boolean"/>
+               <bitfield name="AUTH_FAIL_MASK" pos="6" type="boolean"/>
+               <bitfield name="AUTH_FAIL_INFO_ACK" pos="7" type="boolean"/>
+               <bitfield name="AUTH_XFER_REQ_INT" pos="8" type="boolean"/>
+               <bitfield name="AUTH_XFER_REQ_ACK" pos="9" type="boolean"/>
+               <bitfield name="AUTH_XFER_REQ_MASK" pos="10" type="boolean"/>
+               <bitfield name="AUTH_XFER_DONE_INT" pos="12" type="boolean"/>
+               <bitfield name="AUTH_XFER_DONE_ACK" pos="13" type="boolean"/>
+               <bitfield name="AUTH_XFER_DONE_MASK" pos="14" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x0011c" name="HDCP_LINK0_STATUS">
+               <bitfield name="AN_0_READY" pos="8" type="boolean"/>
+               <bitfield name="AN_1_READY" pos="9" type="boolean"/>
+               <bitfield name="RI_MATCHES" pos="12" type="boolean"/>
+               <bitfield name="V_MATCHES" pos="20" type="boolean"/>
+               <bitfield name="KEY_STATE" low="28" high="30" type="hdmi_hdcp_key_state"/>
+       </reg32>
+       <reg32 offset="0x00120" name="HDCP_DDC_CTRL_0">
+               <bitfield name="DISABLE" pos="0" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x00124" name="HDCP_DDC_CTRL_1">
+               <bitfield name="FAILED_ACK" pos="0" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x00128" name="HDCP_DDC_STATUS">
+               <bitfield name="XFER_REQ" pos="4" type="boolean"/>
+               <bitfield name="XFER_DONE" pos="10" type="boolean"/>
+               <bitfield name="ABORTED" pos="12" type="boolean"/>
+               <bitfield name="TIMEOUT" pos="13" type="boolean"/>
+               <bitfield name="NACK0" pos="14" type="boolean"/>
+               <bitfield name="NACK1" pos="15" type="boolean"/>
+               <bitfield name="FAILED" pos="16" type="boolean"/>
+       </reg32>
+
+       <reg32 offset="0x0012c" name="HDCP_ENTROPY_CTRL0"/>
+       <reg32 offset="0x0025c" name="HDCP_ENTROPY_CTRL1"/>
+
+       <reg32 offset="0x00130" name="HDCP_RESET">
+               <bitfield name="LINK0_DEAUTHENTICATE" pos="0" type="boolean"/>
+       </reg32>
+
+       <reg32 offset="0x00134" name="HDCP_RCVPORT_DATA0"/>
+       <reg32 offset="0x00138" name="HDCP_RCVPORT_DATA1"/>
+       <reg32 offset="0x0013C" name="HDCP_RCVPORT_DATA2_0"/>
+       <reg32 offset="0x00140" name="HDCP_RCVPORT_DATA2_1"/>
+       <reg32 offset="0x00144" name="HDCP_RCVPORT_DATA3"/>
+       <reg32 offset="0x00148" name="HDCP_RCVPORT_DATA4"/>
+       <reg32 offset="0x0014c" name="HDCP_RCVPORT_DATA5"/>
+       <reg32 offset="0x00150" name="HDCP_RCVPORT_DATA6"/>
+       <reg32 offset="0x00154" name="HDCP_RCVPORT_DATA7"/>
+       <reg32 offset="0x00158" name="HDCP_RCVPORT_DATA8"/>
+       <reg32 offset="0x0015c" name="HDCP_RCVPORT_DATA9"/>
+       <reg32 offset="0x00160" name="HDCP_RCVPORT_DATA10"/>
+       <reg32 offset="0x00164" name="HDCP_RCVPORT_DATA11"/>
+       <reg32 offset="0x00168" name="HDCP_RCVPORT_DATA12"/>
+
+       <reg32 offset="0x0016c" name="VENSPEC_INFO0"/>
+       <reg32 offset="0x00170" name="VENSPEC_INFO1"/>
+       <reg32 offset="0x00174" name="VENSPEC_INFO2"/>
+       <reg32 offset="0x00178" name="VENSPEC_INFO3"/>
+       <reg32 offset="0x0017c" name="VENSPEC_INFO4"/>
+       <reg32 offset="0x00180" name="VENSPEC_INFO5"/>
+       <reg32 offset="0x00184" name="VENSPEC_INFO6"/>
+
+       <reg32 offset="0x001d0" name="AUDIO_CFG">
+               <bitfield name="ENGINE_ENABLE" pos="0" type="boolean"/>
+               <bitfield name="FIFO_WATERMARK" low="4" high="7" type="uint"/>
+       </reg32>
+
+       <reg32 offset="0x00208" name="USEC_REFTIMER"/>
+       <reg32 offset="0x0020c" name="DDC_CTRL">
+               <!--
+                        0x020C HDMI_DDC_CTRL
+                       [21:20] TRANSACTION_CNT
+                               Number of transactions to be done in current transfer.
+                               * 0x0: transaction0 only
+                               * 0x1: transaction0, transaction1
+                               * 0x2: transaction0, transaction1, transaction2
+                               * 0x3: transaction0, transaction1, transaction2, transaction3
+                       [3] SW_STATUS_RESET
+                               Write 1 to reset HDMI_DDC_SW_STATUS flags, will reset SW_DONE,
+                               ABORTED, TIMEOUT, SW_INTERRUPTED, BUFFER_OVERFLOW,
+                               STOPPED_ON_NACK, NACK0, NACK1, NACK2, NACK3
+                       [2] SEND_RESET Set to 1 to send reset sequence (9 clocks with no
+                               data) at start of transfer.  This sequence is sent after GO is
+                               written to 1, before the first transaction only.
+                       [1] SOFT_RESET Write 1 to reset DDC controller
+                       [0] GO WRITE ONLY. Write 1 to start DDC transfer.
+                -->
+               <bitfield name="GO" pos="0" type="boolean"/>
+               <bitfield name="SOFT_RESET" pos="1" type="boolean"/>
+               <bitfield name="SEND_RESET" pos="2" type="boolean"/>
+               <bitfield name="SW_STATUS_RESET" pos="3" type="boolean"/>
+               <bitfield name="TRANSACTION_CNT" low="20" high="21" type="uint"/>
+       </reg32>
+       <reg32 offset="0x00210" name="DDC_ARBITRATION">
+               <bitfield name="HW_ARBITRATION" pos="4" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x00214" name="DDC_INT_CTRL">
+               <!--
+                       HDMI_DDC_INT_CTRL[0x0214]
+                          [2] SW_DONE_MK Mask bit for SW_DONE_INT. Set to 1 to enable
+                              interrupt.
+                          [1] SW_DONE_ACK WRITE ONLY. Acknowledge bit for SW_DONE_INT.
+                              Write 1 to clear interrupt.
+                          [0] SW_DONE_INT READ ONLY. SW_DONE interrupt status */
+                -->
+               <bitfield name="SW_DONE_INT" pos="0" type="boolean"/>
+               <bitfield name="SW_DONE_ACK" pos="1" type="boolean"/>
+               <bitfield name="SW_DONE_MASK" pos="2" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x00218" name="DDC_SW_STATUS">
+               <bitfield name="NACK0" pos="12" type="boolean"/>
+               <bitfield name="NACK1" pos="13" type="boolean"/>
+               <bitfield name="NACK2" pos="14" type="boolean"/>
+               <bitfield name="NACK3" pos="15" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x0021c" name="DDC_HW_STATUS">
+               <bitfield name="DONE" pos="3" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x00220" name="DDC_SPEED">
+               <!--
+                  0x0220 HDMI_DDC_SPEED
+                  [31:16] PRESCALE prescale = (m * xtal_frequency) /
+                       (desired_i2c_speed), where m is multiply
+                       factor, default: m = 1
+                  [1:0]   THRESHOLD Select threshold to use to determine whether value
+                       sampled on SDA is a 1 or 0. Specified in terms of the ratio
+                       between the number of sampled ones and the total number of times
+                       SDA is sampled.
+                       * 0x0: >0
+                       * 0x1: 1/4 of total samples
+                       * 0x2: 1/2 of total samples
+                       * 0x3: 3/4 of total samples */
+                -->
+               <bitfield name="THRESHOLD" low="0" high="1" type="uint"/>
+               <bitfield name="PRESCALE" low="16" high="31" type="uint"/>
+       </reg32>
+       <reg32 offset="0x00224" name="DDC_SETUP">
+               <!--
+                        * 0x0224 HDMI_DDC_SETUP
+                        * Setting 31:24 bits : Time units to wait before timeout
+                        * when clock is being stalled by external sink device
+                -->
+               <bitfield name="TIMEOUT" low="24" high="31" type="uint"/>
+       </reg32>
+       <!-- Guessing length is 4, as elsewhere the are references to trans0 thru trans3 -->
+       <array offset="0x00228" name="I2C_TRANSACTION" length="4" stride="4">
+               <reg32 offset="0" name="REG">
+                       <!--
+                               0x0228 HDMI_DDC_TRANS0
+                               [23:16] CNT0 Byte count for first transaction (excluding the first
+                                       byte, which is usually the address).
+                               [13] STOP0 Determines whether a stop bit will be sent after the first
+                                       transaction
+                                       * 0: NO STOP
+                                       * 1: STOP
+                               [12] START0 Determines whether a start bit will be sent before the
+                                       first transaction
+                                       * 0: NO START
+                                       * 1: START
+                               [8] STOP_ON_NACK0 Determines whether the current transfer will stop
+                                       if a NACK is received during the first transaction (current
+                                       transaction always stops).
+                                       * 0: STOP CURRENT TRANSACTION, GO TO NEXT TRANSACTION
+                                       * 1: STOP ALL TRANSACTIONS, SEND STOP BIT
+                               [0] RW0 Read/write indicator for first transaction - set to 0 for
+                                       write, 1 for read. This bit only controls HDMI_DDC behaviour -
+                                       the R/W bit in the transaction is programmed into the DDC buffer
+                                       as the LSB of the address byte.
+                                       * 0: WRITE
+                                       * 1: READ
+                        -->
+                       <bitfield name="RW" pos="0" type="hdmi_ddc_read_write"/>
+                       <bitfield name="STOP_ON_NACK" pos="8" type="boolean"/>
+                       <bitfield name="START" pos="12" type="boolean"/>
+                       <bitfield name="STOP" pos="13" type="boolean"/>
+                       <bitfield name="CNT" low="16" high="23" type="uint"/>
+               </reg32>
+       </array>
+       <reg32 offset="0x00238" name="DDC_DATA">
+               <!--
+                       0x0238 HDMI_DDC_DATA
+                       [31] INDEX_WRITE WRITE ONLY. To write index field, set this bit to
+                               1 while writing HDMI_DDC_DATA.
+                       [23:16] INDEX Use to set index into DDC buffer for next read or
+                               current write, or to read index of current read or next write.
+                               Writable only when INDEX_WRITE=1.
+                       [15:8] DATA Use to fill or read the DDC buffer
+                       [0] DATA_RW Select whether buffer access will be a read or write.
+                               For writes, address auto-increments on write to HDMI_DDC_DATA.
+                               For reads, address autoincrements on reads to HDMI_DDC_DATA.
+                               * 0: Write
+                               * 1: Read
+                -->
+               <bitfield name="DATA_RW" pos="0" type="hdmi_ddc_read_write"/>
+               <bitfield name="DATA" low="8" high="15" type="uint"/>
+               <bitfield name="INDEX" low="16" high="23" type="uint"/>
+               <bitfield name="INDEX_WRITE" pos="31" type="boolean"/>
+       </reg32>
+
+       <reg32 offset="0x0023c" name="HDCP_SHA_CTRL"/>
+       <reg32 offset="0x00240" name="HDCP_SHA_STATUS">
+               <bitfield name="BLOCK_DONE" pos="0" type="boolean"/>
+               <bitfield name="COMP_DONE" pos="4" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x00244" name="HDCP_SHA_DATA">
+               <bitfield name="DONE" pos="0" type="boolean"/>
+       </reg32>
+
+       <reg32 offset="0x00250" name="HPD_INT_STATUS">
+               <bitfield name="INT" pos="0" type="boolean"/>  <!-- an irq has occurred -->
+               <bitfield name="CABLE_DETECTED" pos="1" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x00254" name="HPD_INT_CTRL">
+               <!-- (this useful comment was removed in df6b645.. git archaeology is fun)
+                       HPD_INT_CTRL[0x0254]
+                       31:10 Reserved
+                       9     RCV_PLUGIN_DET_MASK  receiver plug in interrupt mask.
+                                                  When programmed to 1,
+                                                  RCV_PLUGIN_DET_INT will toggle
+                                                  the interrupt line
+                       8:6   Reserved
+                       5     RX_INT_EN            Panel RX interrupt enable
+                             0: Disable
+                             1: Enable
+                       4     RX_INT_ACK           WRITE ONLY. Panel RX interrupt
+                                                  ack
+                       3     Reserved
+                       2     INT_EN               Panel interrupt control
+                             0: Disable
+                             1: Enable
+                       1     INT_POLARITY         Panel interrupt polarity
+                             0: generate interrupt on disconnect
+                             1: generate interrupt on connect
+                       0     INT_ACK              WRITE ONLY. Panel interrupt ack
+                -->
+               <bitfield name="INT_ACK" pos="0" type="boolean"/>
+               <bitfield name="INT_CONNECT" pos="1" type="boolean"/>
+               <bitfield name="INT_EN" pos="2" type="boolean"/>
+               <bitfield name="RX_INT_ACK" pos="4" type="boolean"/>
+               <bitfield name="RX_INT_EN" pos="5" type="boolean"/>
+               <bitfield name="RCV_PLUGIN_DET_MASK" pos="9" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x00258" name="HPD_CTRL">
+               <bitfield name="TIMEOUT" low="0" high="12" type="uint"/>
+               <bitfield name="ENABLE" pos="28" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x0027c" name="DDC_REF">
+               <!--
+                       0x027C HDMI_DDC_REF
+                       [16] REFTIMER_ENABLE    Enable the timer
+                               * 0: Disable
+                               * 1: Enable
+                       [15:0] REFTIMER Value to set the register in order to generate
+                               DDC strobe. This register counts on HDCP application clock
+
+                       /* Enable reference timer
+                        * 27 micro-seconds */
+                       HDMI_OUTP_ND(0x027C, (1 << 16) | (27 << 0));
+                -->
+               <bitfield name="REFTIMER_ENABLE" pos="16" type="boolean"/>
+               <bitfield name="REFTIMER" low="0" high="15" type="uint"/>
+       </reg32>
+
+       <reg32 offset="0x00284" name="HDCP_SW_UPPER_AKSV"/>
+       <reg32 offset="0x00288" name="HDCP_SW_LOWER_AKSV"/>
+
+       <reg32 offset="0x0028c" name="CEC_CTRL"/>
+       <reg32 offset="0x00290" name="CEC_WR_DATA"/>
+       <reg32 offset="0x00294" name="CEC_CEC_RETRANSMIT"/>
+       <reg32 offset="0x00298" name="CEC_STATUS"/>
+       <reg32 offset="0x0029c" name="CEC_INT"/>
+       <reg32 offset="0x002a0" name="CEC_ADDR"/>
+       <reg32 offset="0x002a4" name="CEC_TIME"/>
+       <reg32 offset="0x002a8" name="CEC_REFTIMER"/>
+       <reg32 offset="0x002ac" name="CEC_RD_DATA"/>
+       <reg32 offset="0x002b0" name="CEC_RD_FILTER"/>
+
+       <reg32 offset="0x002b4" name="ACTIVE_HSYNC">
+               <bitfield name="START" low="0" high="12" type="uint"/>
+               <bitfield name="END" low="16" high="27" type="uint"/>
+       </reg32>
+       <reg32 offset="0x002b8" name="ACTIVE_VSYNC">
+               <bitfield name="START" low="0" high="12" type="uint"/>
+               <bitfield name="END" low="16" high="28" type="uint"/>
+       </reg32>
+       <reg32 offset="0x002bc" name="VSYNC_ACTIVE_F2">
+               <!-- interlaced, frame 2 -->
+               <bitfield name="START" low="0" high="12" type="uint"/>
+               <bitfield name="END" low="16" high="28" type="uint"/>
+       </reg32>
+       <reg32 offset="0x002c0" name="TOTAL">
+               <bitfield name="H_TOTAL" low="0" high="12" type="uint"/>
+               <bitfield name="V_TOTAL" low="16" high="28" type="uint"/>
+       </reg32>
+       <reg32 offset="0x002c4" name="VSYNC_TOTAL_F2">
+               <!-- interlaced, frame 2 -->
+               <bitfield name="V_TOTAL" low="0" high="12" type="uint"/>
+       </reg32>
+       <reg32 offset="0x002c8" name="FRAME_CTRL">
+               <bitfield name="RGB_MUX_SEL_BGR" pos="12" type="boolean"/>
+               <bitfield name="VSYNC_LOW" pos="28" type="boolean"/>
+               <bitfield name="HSYNC_LOW" pos="29" type="boolean"/>
+               <bitfield name="INTERLACED_EN" pos="31" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x002cc" name="AUD_INT">
+               <!--
+                       HDMI_AUD_INT[0x02CC]
+                       [3] AUD_SAM_DROP_MASK [R/W]
+                       [2] AUD_SAM_DROP_ACK [W], AUD_SAM_DROP_INT [R]
+                       [1] AUD_FIFO_URUN_MASK [R/W]
+                       [0] AUD_FIFO_URUN_ACK [W], AUD_FIFO_URUN_INT [R]
+                -->
+               <bitfield name="AUD_FIFO_URUN_INT" pos="0" type="boolean"/>  <!-- write to ack irq -->
+               <bitfield name="AUD_FIFO_URAN_MASK" pos="1" type="boolean"/> <!-- r/w, enables irq -->
+               <bitfield name="AUD_SAM_DROP_INT" pos="2" type="boolean"/>   <!-- write to ack irq -->
+               <bitfield name="AUD_SAM_DROP_MASK" pos="3" type="boolean"/>  <!-- r/w, enables irq -->
+       </reg32>
+       <reg32 offset="0x002d4" name="PHY_CTRL">
+               <!--
+                       in hdmi_phy_reset() it appears to be toggling SW_RESET/
+                       SW_RESET_PLL based on the value of the bit above, so
+                       I'm guessing the bit above is a polarit bit
+                -->
+               <bitfield name="SW_RESET_PLL" pos="0" type="boolean"/>
+               <bitfield name="SW_RESET_PLL_LOW" pos="1" type="boolean"/>
+               <bitfield name="SW_RESET" pos="2" type="boolean"/>
+               <bitfield name="SW_RESET_LOW" pos="3" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x002dc" name="CEC_WR_RANGE"/>
+       <reg32 offset="0x002e0" name="CEC_RD_RANGE"/>
+       <reg32 offset="0x002e4" name="VERSION"/>
+       <reg32 offset="0x00360" name="CEC_COMPL_CTL"/>
+       <reg32 offset="0x00364" name="CEC_RD_START_RANGE"/>
+       <reg32 offset="0x00368" name="CEC_RD_TOTAL_RANGE"/>
+       <reg32 offset="0x0036c" name="CEC_RD_ERR_RESP_LO"/>
+       <reg32 offset="0x00370" name="CEC_WR_CHECK_CONFIG"/>
+
+</domain>
+
+<domain name="HDMI_8x60" width="32">
+       <reg32 offset="0x00000" name="PHY_REG0">
+               <bitfield name="DESER_DEL_CTRL" low="2" high="4" type="uint"/>
+       </reg32>
+       <reg32 offset="0x00004" name="PHY_REG1">
+               <bitfield name="DTEST_MUX_SEL" low="4" high="7" type="uint"/>
+               <bitfield name="OUTVOL_SWING_CTRL" low="0" high="3" type="uint"/>
+       </reg32>
+       <reg32 offset="0x00008" name="PHY_REG2">
+               <bitfield name="PD_DESER" pos="0" type="boolean"/>
+               <bitfield name="PD_DRIVE_1" pos="1" type="boolean"/>
+               <bitfield name="PD_DRIVE_2" pos="2" type="boolean"/>
+               <bitfield name="PD_DRIVE_3" pos="3" type="boolean"/>
+               <bitfield name="PD_DRIVE_4" pos="4" type="boolean"/>
+               <bitfield name="PD_PLL" pos="5" type="boolean"/>
+               <bitfield name="PD_PWRGEN" pos="6" type="boolean"/>
+               <bitfield name="RCV_SENSE_EN" pos="7" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x0000c" name="PHY_REG3">
+               <bitfield name="PLL_ENABLE" pos="0" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x00010" name="PHY_REG4"/>
+       <reg32 offset="0x00014" name="PHY_REG5"/>
+       <reg32 offset="0x00018" name="PHY_REG6"/>
+       <reg32 offset="0x0001c" name="PHY_REG7"/>
+       <reg32 offset="0x00020" name="PHY_REG8"/>
+       <reg32 offset="0x00024" name="PHY_REG9"/>
+       <reg32 offset="0x00028" name="PHY_REG10"/>
+       <reg32 offset="0x0002c" name="PHY_REG11"/>
+       <reg32 offset="0x00030" name="PHY_REG12">
+               <bitfield name="RETIMING_EN" pos="0" type="boolean"/>
+               <bitfield name="PLL_LOCK_DETECT_EN" pos="1" type="boolean"/>
+               <bitfield name="FORCE_LOCK" pos="4" type="boolean"/>
+       </reg32>
+</domain>
+
+<domain name="HDMI_8960" width="32">
+       <!--
+               some of the bitfields may be same as 8x60.. but no helpful comments
+               in msm_dss_io_8960.c
+        -->
+       <reg32 offset="0x00000" name="PHY_REG0"/>
+       <reg32 offset="0x00004" name="PHY_REG1"/>
+       <reg32 offset="0x00008" name="PHY_REG2"/>
+       <reg32 offset="0x0000c" name="PHY_REG3"/>
+       <reg32 offset="0x00010" name="PHY_REG4"/>
+       <reg32 offset="0x00014" name="PHY_REG5"/>
+       <reg32 offset="0x00018" name="PHY_REG6"/>
+       <reg32 offset="0x0001c" name="PHY_REG7"/>
+       <reg32 offset="0x00020" name="PHY_REG8"/>
+       <reg32 offset="0x00024" name="PHY_REG9"/>
+       <reg32 offset="0x00028" name="PHY_REG10"/>
+       <reg32 offset="0x0002c" name="PHY_REG11"/>
+       <reg32 offset="0x00030" name="PHY_REG12">
+               <bitfield name="SW_RESET" pos="5" type="boolean"/>
+               <bitfield name="PWRDN_B" pos="7" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x00034" name="PHY_REG_BIST_CFG"/>
+       <reg32 offset="0x00038" name="PHY_DEBUG_BUS_SEL"/>
+       <reg32 offset="0x0003c" name="PHY_REG_MISC0"/>
+       <reg32 offset="0x00040" name="PHY_REG13"/>
+       <reg32 offset="0x00044" name="PHY_REG14"/>
+       <reg32 offset="0x00048" name="PHY_REG15"/>
+</domain>
+
+<domain name="HDMI_8960_PHY_PLL" width="32">
+       <reg32 offset="0x00000" name="REFCLK_CFG"/>
+       <reg32 offset="0x00004" name="CHRG_PUMP_CFG"/>
+       <reg32 offset="0x00008" name="LOOP_FLT_CFG0"/>
+       <reg32 offset="0x0000c" name="LOOP_FLT_CFG1"/>
+       <reg32 offset="0x00010" name="IDAC_ADJ_CFG"/>
+       <reg32 offset="0x00014" name="I_VI_KVCO_CFG"/>
+       <reg32 offset="0x00018" name="PWRDN_B">
+               <bitfield name="PD_PLL" pos="1" type="boolean"/>
+               <bitfield name="PLL_PWRDN_B" pos="3" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x0001c" name="SDM_CFG0"/>
+       <reg32 offset="0x00020" name="SDM_CFG1"/>
+       <reg32 offset="0x00024" name="SDM_CFG2"/>
+       <reg32 offset="0x00028" name="SDM_CFG3"/>
+       <reg32 offset="0x0002c" name="SDM_CFG4"/>
+       <reg32 offset="0x00030" name="SSC_CFG0"/>
+       <reg32 offset="0x00034" name="SSC_CFG1"/>
+       <reg32 offset="0x00038" name="SSC_CFG2"/>
+       <reg32 offset="0x0003c" name="SSC_CFG3"/>
+       <reg32 offset="0x00040" name="LOCKDET_CFG0"/>
+       <reg32 offset="0x00044" name="LOCKDET_CFG1"/>
+       <reg32 offset="0x00048" name="LOCKDET_CFG2"/>
+       <reg32 offset="0x0004c" name="VCOCAL_CFG0"/>
+       <reg32 offset="0x00050" name="VCOCAL_CFG1"/>
+       <reg32 offset="0x00054" name="VCOCAL_CFG2"/>
+       <reg32 offset="0x00058" name="VCOCAL_CFG3"/>
+       <reg32 offset="0x0005c" name="VCOCAL_CFG4"/>
+       <reg32 offset="0x00060" name="VCOCAL_CFG5"/>
+       <reg32 offset="0x00064" name="VCOCAL_CFG6"/>
+       <reg32 offset="0x00068" name="VCOCAL_CFG7"/>
+       <reg32 offset="0x0006c" name="DEBUG_SEL"/>
+       <reg32 offset="0x00070" name="MISC0"/>
+       <reg32 offset="0x00074" name="MISC1"/>
+       <reg32 offset="0x00078" name="MISC2"/>
+       <reg32 offset="0x0007c" name="MISC3"/>
+       <reg32 offset="0x00080" name="MISC4"/>
+       <reg32 offset="0x00084" name="MISC5"/>
+       <reg32 offset="0x00088" name="MISC6"/>
+       <reg32 offset="0x0008c" name="DEBUG_BUS0"/>
+       <reg32 offset="0x00090" name="DEBUG_BUS1"/>
+       <reg32 offset="0x00094" name="DEBUG_BUS2"/>
+       <reg32 offset="0x00098" name="STATUS0">
+               <bitfield name="PLL_LOCK" pos="0" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x0009c" name="STATUS1"/>
+</domain>
+
+<domain name="HDMI_8x74" width="32">
+       <!--
+               seems to be all mdp5+ have same?
+        -->
+       <reg32 offset="0x00000" name="ANA_CFG0"/>
+       <reg32 offset="0x00004" name="ANA_CFG1"/>
+       <reg32 offset="0x00010" name="PD_CTRL0"/>
+       <reg32 offset="0x00014" name="PD_CTRL1"/>
+       <reg32 offset="0x00034" name="BIST_CFG0"/>
+       <reg32 offset="0x0003c" name="BIST_PATN0"/>
+       <reg32 offset="0x00040" name="BIST_PATN1"/>
+       <reg32 offset="0x00044" name="BIST_PATN2"/>
+       <reg32 offset="0x00048" name="BIST_PATN3"/>
+</domain>
+
+<domain name="HDMI_28nm_PHY_PLL" width="32">
+       <reg32 offset="0x00000" name="REFCLK_CFG"/>
+       <reg32 offset="0x00004" name="POSTDIV1_CFG"/>
+       <reg32 offset="0x00008" name="CHGPUMP_CFG"/>
+       <reg32 offset="0x0000C" name="VCOLPF_CFG"/>
+       <reg32 offset="0x00010" name="VREG_CFG"/>
+       <reg32 offset="0x00014" name="PWRGEN_CFG"/>
+       <reg32 offset="0x00018" name="DMUX_CFG"/>
+       <reg32 offset="0x0001C" name="AMUX_CFG"/>
+       <reg32 offset="0x00020" name="GLB_CFG">
+               <bitfield name="PLL_PWRDN_B" pos="0" type="boolean"/>
+               <bitfield name="PLL_LDO_PWRDN_B" pos="1" type="boolean"/>
+               <bitfield name="PLL_PWRGEN_PWRDN_B" pos="2" type="boolean"/>
+               <bitfield name="PLL_ENABLE" pos="3" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x00024" name="POSTDIV2_CFG"/>
+       <reg32 offset="0x00028" name="POSTDIV3_CFG"/>
+       <reg32 offset="0x0002C" name="LPFR_CFG"/>
+       <reg32 offset="0x00030" name="LPFC1_CFG"/>
+       <reg32 offset="0x00034" name="LPFC2_CFG"/>
+       <reg32 offset="0x00038" name="SDM_CFG0"/>
+       <reg32 offset="0x0003C" name="SDM_CFG1"/>
+       <reg32 offset="0x00040" name="SDM_CFG2"/>
+       <reg32 offset="0x00044" name="SDM_CFG3"/>
+       <reg32 offset="0x00048" name="SDM_CFG4"/>
+       <reg32 offset="0x0004C" name="SSC_CFG0"/>
+       <reg32 offset="0x00050" name="SSC_CFG1"/>
+       <reg32 offset="0x00054" name="SSC_CFG2"/>
+       <reg32 offset="0x00058" name="SSC_CFG3"/>
+       <reg32 offset="0x0005C" name="LKDET_CFG0"/>
+       <reg32 offset="0x00060" name="LKDET_CFG1"/>
+       <reg32 offset="0x00064" name="LKDET_CFG2"/>
+       <reg32 offset="0x00068" name="TEST_CFG">
+               <bitfield name="PLL_SW_RESET" pos="0" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x0006C" name="CAL_CFG0"/>
+       <reg32 offset="0x00070" name="CAL_CFG1"/>
+       <reg32 offset="0x00074" name="CAL_CFG2"/>
+       <reg32 offset="0x00078" name="CAL_CFG3"/>
+       <reg32 offset="0x0007C" name="CAL_CFG4"/>
+       <reg32 offset="0x00080" name="CAL_CFG5"/>
+       <reg32 offset="0x00084" name="CAL_CFG6"/>
+       <reg32 offset="0x00088" name="CAL_CFG7"/>
+       <reg32 offset="0x0008C" name="CAL_CFG8"/>
+       <reg32 offset="0x00090" name="CAL_CFG9"/>
+       <reg32 offset="0x00094" name="CAL_CFG10"/>
+       <reg32 offset="0x00098" name="CAL_CFG11"/>
+       <reg32 offset="0x0009C" name="EFUSE_CFG"/>
+       <reg32 offset="0x000A0" name="DEBUG_BUS_SEL"/>
+</domain>
+
+<domain name="HDMI_8996_PHY" width="32">
+       <reg32 offset="0x00000" name="CFG"/>
+       <reg32 offset="0x00004" name="PD_CTL"/>
+       <reg32 offset="0x00008" name="MODE"/>
+       <reg32 offset="0x0000C" name="MISR_CLEAR"/>
+       <reg32 offset="0x00010" name="TX0_TX1_BIST_CFG0"/>
+       <reg32 offset="0x00014" name="TX0_TX1_BIST_CFG1"/>
+       <reg32 offset="0x00018" name="TX0_TX1_PRBS_SEED_BYTE0"/>
+       <reg32 offset="0x0001C" name="TX0_TX1_PRBS_SEED_BYTE1"/>
+       <reg32 offset="0x00020" name="TX0_TX1_BIST_PATTERN0"/>
+       <reg32 offset="0x00024" name="TX0_TX1_BIST_PATTERN1"/>
+       <reg32 offset="0x00028" name="TX2_TX3_BIST_CFG0"/>
+       <reg32 offset="0x0002C" name="TX2_TX3_BIST_CFG1"/>
+       <reg32 offset="0x00030" name="TX2_TX3_PRBS_SEED_BYTE0"/>
+       <reg32 offset="0x00034" name="TX2_TX3_PRBS_SEED_BYTE1"/>
+       <reg32 offset="0x00038" name="TX2_TX3_BIST_PATTERN0"/>
+       <reg32 offset="0x0003C" name="TX2_TX3_BIST_PATTERN1"/>
+       <reg32 offset="0x00040" name="DEBUG_BUS_SEL"/>
+       <reg32 offset="0x00044" name="TXCAL_CFG0"/>
+       <reg32 offset="0x00048" name="TXCAL_CFG1"/>
+       <reg32 offset="0x0004C" name="TX0_TX1_LANE_CTL"/>
+       <reg32 offset="0x00050" name="TX2_TX3_LANE_CTL"/>
+       <reg32 offset="0x00054" name="LANE_BIST_CONFIG"/>
+       <reg32 offset="0x00058" name="CLOCK"/>
+       <reg32 offset="0x0005C" name="MISC1"/>
+       <reg32 offset="0x00060" name="MISC2"/>
+       <reg32 offset="0x00064" name="TX0_TX1_BIST_STATUS0"/>
+       <reg32 offset="0x00068" name="TX0_TX1_BIST_STATUS1"/>
+       <reg32 offset="0x0006C" name="TX0_TX1_BIST_STATUS2"/>
+       <reg32 offset="0x00070" name="TX2_TX3_BIST_STATUS0"/>
+       <reg32 offset="0x00074" name="TX2_TX3_BIST_STATUS1"/>
+       <reg32 offset="0x00078" name="TX2_TX3_BIST_STATUS2"/>
+       <reg32 offset="0x0007C" name="PRE_MISR_STATUS0"/>
+       <reg32 offset="0x00080" name="PRE_MISR_STATUS1"/>
+       <reg32 offset="0x00084" name="PRE_MISR_STATUS2"/>
+       <reg32 offset="0x00088" name="PRE_MISR_STATUS3"/>
+       <reg32 offset="0x0008C" name="POST_MISR_STATUS0"/>
+       <reg32 offset="0x00090" name="POST_MISR_STATUS1"/>
+       <reg32 offset="0x00094" name="POST_MISR_STATUS2"/>
+       <reg32 offset="0x00098" name="POST_MISR_STATUS3"/>
+       <reg32 offset="0x0009C" name="STATUS"/>
+       <reg32 offset="0x000A0" name="MISC3_STATUS"/>
+       <reg32 offset="0x000A4" name="MISC4_STATUS"/>
+       <reg32 offset="0x000A8" name="DEBUG_BUS0"/>
+       <reg32 offset="0x000AC" name="DEBUG_BUS1"/>
+       <reg32 offset="0x000B0" name="DEBUG_BUS2"/>
+       <reg32 offset="0x000B4" name="DEBUG_BUS3"/>
+       <reg32 offset="0x000B8" name="PHY_REVISION_ID0"/>
+       <reg32 offset="0x000BC" name="PHY_REVISION_ID1"/>
+       <reg32 offset="0x000C0" name="PHY_REVISION_ID2"/>
+       <reg32 offset="0x000C4" name="PHY_REVISION_ID3"/>
+</domain>
+
+<domain name="HDMI_PHY_QSERDES_COM" width="32">
+       <reg32 offset="0x00000" name="ATB_SEL1"/>
+       <reg32 offset="0x00004" name="ATB_SEL2"/>
+       <reg32 offset="0x00008" name="FREQ_UPDATE"/>
+       <reg32 offset="0x0000C" name="BG_TIMER"/>
+       <reg32 offset="0x00010" name="SSC_EN_CENTER"/>
+       <reg32 offset="0x00014" name="SSC_ADJ_PER1"/>
+       <reg32 offset="0x00018" name="SSC_ADJ_PER2"/>
+       <reg32 offset="0x0001C" name="SSC_PER1"/>
+       <reg32 offset="0x00020" name="SSC_PER2"/>
+       <reg32 offset="0x00024" name="SSC_STEP_SIZE1"/>
+       <reg32 offset="0x00028" name="SSC_STEP_SIZE2"/>
+       <reg32 offset="0x0002C" name="POST_DIV"/>
+       <reg32 offset="0x00030" name="POST_DIV_MUX"/>
+       <reg32 offset="0x00034" name="BIAS_EN_CLKBUFLR_EN"/>
+       <reg32 offset="0x00038" name="CLK_ENABLE1"/>
+       <reg32 offset="0x0003C" name="SYS_CLK_CTRL"/>
+       <reg32 offset="0x00040" name="SYSCLK_BUF_ENABLE"/>
+       <reg32 offset="0x00044" name="PLL_EN"/>
+       <reg32 offset="0x00048" name="PLL_IVCO"/>
+       <reg32 offset="0x0004C" name="LOCK_CMP1_MODE0"/>
+       <reg32 offset="0x00050" name="LOCK_CMP2_MODE0"/>
+       <reg32 offset="0x00054" name="LOCK_CMP3_MODE0"/>
+       <reg32 offset="0x00058" name="LOCK_CMP1_MODE1"/>
+       <reg32 offset="0x0005C" name="LOCK_CMP2_MODE1"/>
+       <reg32 offset="0x00060" name="LOCK_CMP3_MODE1"/>
+       <reg32 offset="0x00064" name="LOCK_CMP1_MODE2"/>
+       <reg32 offset="0x00064" name="CMN_RSVD0"/>
+       <reg32 offset="0x00068" name="LOCK_CMP2_MODE2"/>
+       <reg32 offset="0x00068" name="EP_CLOCK_DETECT_CTRL"/>
+       <reg32 offset="0x0006C" name="LOCK_CMP3_MODE2"/>
+       <reg32 offset="0x0006C" name="SYSCLK_DET_COMP_STATUS"/>
+       <reg32 offset="0x00070" name="BG_TRIM"/>
+       <reg32 offset="0x00074" name="CLK_EP_DIV"/>
+       <reg32 offset="0x00078" name="CP_CTRL_MODE0"/>
+       <reg32 offset="0x0007C" name="CP_CTRL_MODE1"/>
+       <reg32 offset="0x00080" name="CP_CTRL_MODE2"/>
+       <reg32 offset="0x00080" name="CMN_RSVD1"/>
+       <reg32 offset="0x00084" name="PLL_RCTRL_MODE0"/>
+       <reg32 offset="0x00088" name="PLL_RCTRL_MODE1"/>
+       <reg32 offset="0x0008C" name="PLL_RCTRL_MODE2"/>
+       <reg32 offset="0x0008C" name="CMN_RSVD2"/>
+       <reg32 offset="0x00090" name="PLL_CCTRL_MODE0"/>
+       <reg32 offset="0x00094" name="PLL_CCTRL_MODE1"/>
+       <reg32 offset="0x00098" name="PLL_CCTRL_MODE2"/>
+       <reg32 offset="0x00098" name="CMN_RSVD3"/>
+       <reg32 offset="0x0009C" name="PLL_CNTRL"/>
+       <reg32 offset="0x000A0" name="PHASE_SEL_CTRL"/>
+       <reg32 offset="0x000A4" name="PHASE_SEL_DC"/>
+       <reg32 offset="0x000A8" name="CORE_CLK_IN_SYNC_SEL"/>
+       <reg32 offset="0x000A8" name="BIAS_EN_CTRL_BY_PSM"/>
+       <reg32 offset="0x000AC" name="SYSCLK_EN_SEL"/>
+       <reg32 offset="0x000B0" name="CML_SYSCLK_SEL"/>
+       <reg32 offset="0x000B4" name="RESETSM_CNTRL"/>
+       <reg32 offset="0x000B8" name="RESETSM_CNTRL2"/>
+       <reg32 offset="0x000BC" name="RESTRIM_CTRL"/>
+       <reg32 offset="0x000C0" name="RESTRIM_CTRL2"/>
+       <reg32 offset="0x000C4" name="RESCODE_DIV_NUM"/>
+       <reg32 offset="0x000C8" name="LOCK_CMP_EN"/>
+       <reg32 offset="0x000CC" name="LOCK_CMP_CFG"/>
+       <reg32 offset="0x000D0" name="DEC_START_MODE0"/>
+       <reg32 offset="0x000D4" name="DEC_START_MODE1"/>
+       <reg32 offset="0x000D8" name="DEC_START_MODE2"/>
+       <reg32 offset="0x000D8" name="VCOCAL_DEADMAN_CTRL"/>
+       <reg32 offset="0x000DC" name="DIV_FRAC_START1_MODE0"/>
+       <reg32 offset="0x000E0" name="DIV_FRAC_START2_MODE0"/>
+       <reg32 offset="0x000E4" name="DIV_FRAC_START3_MODE0"/>
+       <reg32 offset="0x000E8" name="DIV_FRAC_START1_MODE1"/>
+       <reg32 offset="0x000EC" name="DIV_FRAC_START2_MODE1"/>
+       <reg32 offset="0x000F0" name="DIV_FRAC_START3_MODE1"/>
+       <reg32 offset="0x000F4" name="DIV_FRAC_START1_MODE2"/>
+       <reg32 offset="0x000F4" name="VCO_TUNE_MINVAL1"/>
+       <reg32 offset="0x000F8" name="DIV_FRAC_START2_MODE2"/>
+       <reg32 offset="0x000F8" name="VCO_TUNE_MINVAL2"/>
+       <reg32 offset="0x000FC" name="DIV_FRAC_START3_MODE2"/>
+       <reg32 offset="0x000FC" name="CMN_RSVD4"/>
+       <reg32 offset="0x00100" name="INTEGLOOP_INITVAL"/>
+       <reg32 offset="0x00104" name="INTEGLOOP_EN"/>
+       <reg32 offset="0x00108" name="INTEGLOOP_GAIN0_MODE0"/>
+       <reg32 offset="0x0010C" name="INTEGLOOP_GAIN1_MODE0"/>
+       <reg32 offset="0x00110" name="INTEGLOOP_GAIN0_MODE1"/>
+       <reg32 offset="0x00114" name="INTEGLOOP_GAIN1_MODE1"/>
+       <reg32 offset="0x00118" name="INTEGLOOP_GAIN0_MODE2"/>
+       <reg32 offset="0x00118" name="VCO_TUNE_MAXVAL1"/>
+       <reg32 offset="0x0011C" name="INTEGLOOP_GAIN1_MODE2"/>
+       <reg32 offset="0x0011C" name="VCO_TUNE_MAXVAL2"/>
+       <reg32 offset="0x00120" name="RES_TRIM_CONTROL2"/>
+       <reg32 offset="0x00124" name="VCO_TUNE_CTRL"/>
+       <reg32 offset="0x00128" name="VCO_TUNE_MAP"/>
+       <reg32 offset="0x0012C" name="VCO_TUNE1_MODE0"/>
+       <reg32 offset="0x00130" name="VCO_TUNE2_MODE0"/>
+       <reg32 offset="0x00134" name="VCO_TUNE1_MODE1"/>
+       <reg32 offset="0x00138" name="VCO_TUNE2_MODE1"/>
+       <reg32 offset="0x0013C" name="VCO_TUNE1_MODE2"/>
+       <reg32 offset="0x0013C" name="VCO_TUNE_INITVAL1"/>
+       <reg32 offset="0x00140" name="VCO_TUNE2_MODE2"/>
+       <reg32 offset="0x00140" name="VCO_TUNE_INITVAL2"/>
+       <reg32 offset="0x00144" name="VCO_TUNE_TIMER1"/>
+       <reg32 offset="0x00148" name="VCO_TUNE_TIMER2"/>
+       <reg32 offset="0x0014C" name="SAR"/>
+       <reg32 offset="0x00150" name="SAR_CLK"/>
+       <reg32 offset="0x00154" name="SAR_CODE_OUT_STATUS"/>
+       <reg32 offset="0x00158" name="SAR_CODE_READY_STATUS"/>
+       <reg32 offset="0x0015C" name="CMN_STATUS"/>
+       <reg32 offset="0x00160" name="RESET_SM_STATUS"/>
+       <reg32 offset="0x00164" name="RESTRIM_CODE_STATUS"/>
+       <reg32 offset="0x00168" name="PLLCAL_CODE1_STATUS"/>
+       <reg32 offset="0x0016C" name="PLLCAL_CODE2_STATUS"/>
+       <reg32 offset="0x00170" name="BG_CTRL"/>
+       <reg32 offset="0x00174" name="CLK_SELECT"/>
+       <reg32 offset="0x00178" name="HSCLK_SEL"/>
+       <reg32 offset="0x0017C" name="INTEGLOOP_BINCODE_STATUS"/>
+       <reg32 offset="0x00180" name="PLL_ANALOG"/>
+       <reg32 offset="0x00184" name="CORECLK_DIV"/>
+       <reg32 offset="0x00188" name="SW_RESET"/>
+       <reg32 offset="0x0018C" name="CORE_CLK_EN"/>
+       <reg32 offset="0x00190" name="C_READY_STATUS"/>
+       <reg32 offset="0x00194" name="CMN_CONFIG"/>
+       <reg32 offset="0x00198" name="CMN_RATE_OVERRIDE"/>
+       <reg32 offset="0x0019C" name="SVS_MODE_CLK_SEL"/>
+       <reg32 offset="0x001A0" name="DEBUG_BUS0"/>
+       <reg32 offset="0x001A4" name="DEBUG_BUS1"/>
+       <reg32 offset="0x001A8" name="DEBUG_BUS2"/>
+       <reg32 offset="0x001AC" name="DEBUG_BUS3"/>
+       <reg32 offset="0x001B0" name="DEBUG_BUS_SEL"/>
+       <reg32 offset="0x001B4" name="CMN_MISC1"/>
+       <reg32 offset="0x001B8" name="CMN_MISC2"/>
+       <reg32 offset="0x001BC" name="CORECLK_DIV_MODE1"/>
+       <reg32 offset="0x001C0" name="CORECLK_DIV_MODE2"/>
+       <reg32 offset="0x001C4" name="CMN_RSVD5"/>
+</domain>
+
+
+<domain name="HDMI_PHY_QSERDES_TX_LX" width="32">
+               <reg32 offset="0x00000" name="BIST_MODE_LANENO"/>
+               <reg32 offset="0x00004" name="BIST_INVERT"/>
+               <reg32 offset="0x00008" name="CLKBUF_ENABLE"/>
+               <reg32 offset="0x0000C" name="CMN_CONTROL_ONE"/>
+               <reg32 offset="0x00010" name="CMN_CONTROL_TWO"/>
+               <reg32 offset="0x00014" name="CMN_CONTROL_THREE"/>
+               <reg32 offset="0x00018" name="TX_EMP_POST1_LVL"/>
+               <reg32 offset="0x0001C" name="TX_POST2_EMPH"/>
+               <reg32 offset="0x00020" name="TX_BOOST_LVL_UP_DN"/>
+               <reg32 offset="0x00024" name="HP_PD_ENABLES"/>
+               <reg32 offset="0x00028" name="TX_IDLE_LVL_LARGE_AMP"/>
+               <reg32 offset="0x0002C" name="TX_DRV_LVL"/>
+               <reg32 offset="0x00030" name="TX_DRV_LVL_OFFSET"/>
+               <reg32 offset="0x00034" name="RESET_TSYNC_EN"/>
+               <reg32 offset="0x00038" name="PRE_STALL_LDO_BOOST_EN"/>
+               <reg32 offset="0x0003C" name="TX_BAND"/>
+               <reg32 offset="0x00040" name="SLEW_CNTL"/>
+               <reg32 offset="0x00044" name="INTERFACE_SELECT"/>
+               <reg32 offset="0x00048" name="LPB_EN"/>
+               <reg32 offset="0x0004C" name="RES_CODE_LANE_TX"/>
+               <reg32 offset="0x00050" name="RES_CODE_LANE_RX"/>
+               <reg32 offset="0x00054" name="RES_CODE_LANE_OFFSET"/>
+               <reg32 offset="0x00058" name="PERL_LENGTH1"/>
+               <reg32 offset="0x0005C" name="PERL_LENGTH2"/>
+               <reg32 offset="0x00060" name="SERDES_BYP_EN_OUT"/>
+               <reg32 offset="0x00064" name="DEBUG_BUS_SEL"/>
+               <reg32 offset="0x00068" name="HIGHZ_TRANSCEIVEREN_BIAS_DRVR_EN"/>
+               <reg32 offset="0x0006C" name="TX_POL_INV"/>
+               <reg32 offset="0x00070" name="PARRATE_REC_DETECT_IDLE_EN"/>
+               <reg32 offset="0x00074" name="BIST_PATTERN1"/>
+               <reg32 offset="0x00078" name="BIST_PATTERN2"/>
+               <reg32 offset="0x0007C" name="BIST_PATTERN3"/>
+               <reg32 offset="0x00080" name="BIST_PATTERN4"/>
+               <reg32 offset="0x00084" name="BIST_PATTERN5"/>
+               <reg32 offset="0x00088" name="BIST_PATTERN6"/>
+               <reg32 offset="0x0008C" name="BIST_PATTERN7"/>
+               <reg32 offset="0x00090" name="BIST_PATTERN8"/>
+               <reg32 offset="0x00094" name="LANE_MODE"/>
+               <reg32 offset="0x00098" name="IDAC_CAL_LANE_MODE"/>
+               <reg32 offset="0x0009C" name="IDAC_CAL_LANE_MODE_CONFIGURATION"/>
+               <reg32 offset="0x000A0" name="ATB_SEL1"/>
+               <reg32 offset="0x000A4" name="ATB_SEL2"/>
+               <reg32 offset="0x000A8" name="RCV_DETECT_LVL"/>
+               <reg32 offset="0x000AC" name="RCV_DETECT_LVL_2"/>
+               <reg32 offset="0x000B0" name="PRBS_SEED1"/>
+               <reg32 offset="0x000B4" name="PRBS_SEED2"/>
+               <reg32 offset="0x000B8" name="PRBS_SEED3"/>
+               <reg32 offset="0x000BC" name="PRBS_SEED4"/>
+               <reg32 offset="0x000C0" name="RESET_GEN"/>
+               <reg32 offset="0x000C4" name="RESET_GEN_MUXES"/>
+               <reg32 offset="0x000C8" name="TRAN_DRVR_EMP_EN"/>
+               <reg32 offset="0x000CC" name="TX_INTERFACE_MODE"/>
+               <reg32 offset="0x000D0" name="PWM_CTRL"/>
+               <reg32 offset="0x000D4" name="PWM_ENCODED_OR_DATA"/>
+               <reg32 offset="0x000D8" name="PWM_GEAR_1_DIVIDER_BAND2"/>
+               <reg32 offset="0x000DC" name="PWM_GEAR_2_DIVIDER_BAND2"/>
+               <reg32 offset="0x000E0" name="PWM_GEAR_3_DIVIDER_BAND2"/>
+               <reg32 offset="0x000E4" name="PWM_GEAR_4_DIVIDER_BAND2"/>
+               <reg32 offset="0x000E8" name="PWM_GEAR_1_DIVIDER_BAND0_1"/>
+               <reg32 offset="0x000EC" name="PWM_GEAR_2_DIVIDER_BAND0_1"/>
+               <reg32 offset="0x000F0" name="PWM_GEAR_3_DIVIDER_BAND0_1"/>
+               <reg32 offset="0x000F4" name="PWM_GEAR_4_DIVIDER_BAND0_1"/>
+               <reg32 offset="0x000F8" name="VMODE_CTRL1"/>
+               <reg32 offset="0x000FC" name="VMODE_CTRL2"/>
+               <reg32 offset="0x00100" name="TX_ALOG_INTF_OBSV_CNTL"/>
+               <reg32 offset="0x00104" name="BIST_STATUS"/>
+               <reg32 offset="0x00108" name="BIST_ERROR_COUNT1"/>
+               <reg32 offset="0x0010C" name="BIST_ERROR_COUNT2"/>
+               <reg32 offset="0x00110" name="TX_ALOG_INTF_OBSV"/>
+</domain>
+
+</database>
diff --git a/src/freedreno/registers/hdmi/qfprom.xml b/src/freedreno/registers/hdmi/qfprom.xml
new file mode 100644 (file)
index 0000000..4ae1221
--- /dev/null
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<database xmlns="http://nouveau.freedesktop.org/"
+xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+xsi:schemaLocation="http://nouveau.freedesktop.org/ rules-ng.xsd">
+<import file="freedreno_copyright.xml"/>
+
+<domain name="QFPROM" width="32">
+       <doc>
+               seems to be something external to display block, for finding
+               what features are enabled/supported?
+       </doc>
+       <reg32 offset="0x0238" name="CONFIG_ROW0_LSB">
+               <bitfield name="HDMI_DISABLE" pos="21" type="boolean"/>
+               <bitfield name="HDCP_DISABLE" pos="22" type="boolean"/>
+       </reg32>
+</domain>
+
+</database>
diff --git a/src/freedreno/registers/mdp/mdp4.xml b/src/freedreno/registers/mdp/mdp4.xml
new file mode 100644 (file)
index 0000000..a84f530
--- /dev/null
@@ -0,0 +1,480 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<database xmlns="http://nouveau.freedesktop.org/"
+xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+xsi:schemaLocation="http://nouveau.freedesktop.org/ rules-ng.xsd">
+<import file="freedreno_copyright.xml"/>
+<import file="mdp/mdp_common.xml"/>
+
+<domain name="MDP4" width="32">
+       <enum name="mdp4_pipe">
+               <brief>pipe names, index into PIPE[]</brief>
+               <value name="VG1" value="0"/>
+               <value name="VG2" value="1"/>
+               <value name="RGB1" value="2"/>
+               <value name="RGB2" value="3"/>
+               <value name="RGB3" value="4"/>
+               <value name="VG3" value="5"/>
+               <value name="VG4" value="6"/>
+       </enum>
+
+       <enum name="mdp4_mixer">
+               <value name="MIXER0" value="0"/>
+               <value name="MIXER1" value="1"/>
+               <value name="MIXER2" value="2"/>
+       </enum>
+
+       <enum name="mdp4_intf">
+               <!--
+                       A bit confusing the enums for interface selection:
+                               enum {
+                                       LCDC_RGB_INTF,                  /* 0 */
+                                       DTV_INTF = LCDC_RGB_INTF,       /* 0 */
+                                       MDDI_LCDC_INTF,                 /* 1 */
+                                       MDDI_INTF,                      /* 2 */
+                                       EBI2_INTF,                      /* 3 */
+                                       TV_INTF = EBI2_INTF,            /* 3 */
+                                       DSI_VIDEO_INTF,
+                                       DSI_CMD_INTF
+                               };
+                       there is some overlap, and not all the values end up getting
+                       written to hw (mdp4_display_intf_sel() remaps the last two
+                       values to MDDI_LCDC_INTF/MDDI_INTF with extra bits set).. so
+                       taking some liberties in guessing the actual meanings/names:
+                -->
+               <value name="INTF_LCDC_DTV" value="0"/>  <!-- LCDC RGB or DTV (external) -->
+               <value name="INTF_DSI_VIDEO" value="1"/>
+               <value name="INTF_DSI_CMD" value="2"/>
+               <value name="INTF_EBI2_TV" value="3"/>   <!-- EBI2 or TV (external) -->
+       </enum>
+       <enum name="mdp4_cursor_format">
+               <value name="CURSOR_ARGB" value="1"/>
+               <value name="CURSOR_XRGB" value="2"/>
+       </enum>
+       <enum name="mdp4_frame_format">
+               <value name="FRAME_LINEAR" value="0"/>
+               <value name="FRAME_TILE_ARGB_4X4" value="1"/>
+               <value name="FRAME_TILE_YCBCR_420" value="2"/>
+       </enum>
+       <enum name="mdp4_scale_unit">
+               <value name="SCALE_FIR" value="0"/>
+               <value name="SCALE_MN_PHASE" value="1"/>
+               <value name="SCALE_PIXEL_RPT" value="2"/>
+       </enum>
+
+       <bitset name="mdp4_layermixer_in_cfg" inline="yes">
+               <brief>appears to map pipe to mixer stage</brief>
+               <bitfield name="PIPE0" low="0"  high="2"  type="mdp_mixer_stage_id"/>
+               <bitfield name="PIPE0_MIXER1" pos="3" type="boolean"/>
+               <bitfield name="PIPE1" low="4"  high="6"  type="mdp_mixer_stage_id"/>
+               <bitfield name="PIPE1_MIXER1" pos="7" type="boolean"/>
+               <bitfield name="PIPE2" low="8"  high="10" type="mdp_mixer_stage_id"/>
+               <bitfield name="PIPE2_MIXER1" pos="11" type="boolean"/>
+               <bitfield name="PIPE3" low="12" high="14" type="mdp_mixer_stage_id"/>
+               <bitfield name="PIPE3_MIXER1" pos="15" type="boolean"/>
+               <bitfield name="PIPE4" low="16" high="18" type="mdp_mixer_stage_id"/>
+               <bitfield name="PIPE4_MIXER1" pos="19" type="boolean"/>
+               <bitfield name="PIPE5" low="20" high="22" type="mdp_mixer_stage_id"/>
+               <bitfield name="PIPE5_MIXER1" pos="23" type="boolean"/>
+               <bitfield name="PIPE6" low="24" high="26" type="mdp_mixer_stage_id"/>
+               <bitfield name="PIPE6_MIXER1" pos="27" type="boolean"/>
+               <bitfield name="PIPE7" low="28" high="30" type="mdp_mixer_stage_id"/>
+               <bitfield name="PIPE7_MIXER1" pos="31" type="boolean"/>
+       </bitset>
+
+       <bitset name="MDP4_IRQ">
+               <bitfield name="OVERLAY0_DONE" pos="0" type="boolean"/>
+               <bitfield name="OVERLAY1_DONE" pos="1" type="boolean"/>
+               <bitfield name="DMA_S_DONE" pos="2" type="boolean"/>
+               <bitfield name="DMA_E_DONE" pos="3" type="boolean"/>
+               <bitfield name="DMA_P_DONE" pos="4" type="boolean"/>
+               <bitfield name="VG1_HISTOGRAM" pos="5" type="boolean"/>
+               <bitfield name="VG2_HISTOGRAM" pos="6" type="boolean"/>
+               <bitfield name="PRIMARY_VSYNC" pos="7" type="boolean"/>
+               <bitfield name="PRIMARY_INTF_UDERRUN" pos="8" type="boolean"/>
+               <bitfield name="EXTERNAL_VSYNC" pos="9" type="boolean"/>
+               <bitfield name="EXTERNAL_INTF_UDERRUN" pos="10" type="boolean"/>
+               <bitfield name="PRIMARY_RDPTR" pos="11" type="boolean"/>  <!-- read pointer -->
+               <bitfield name="DMA_P_HISTOGRAM" pos="17" type="boolean"/>
+               <bitfield name="DMA_S_HISTOGRAM" pos="26" type="boolean"/>
+               <bitfield name="OVERLAY2_DONE" pos="30" type="boolean"/>
+       </bitset>
+
+       <group name="mdp4_csc">
+               <array offset="0x400" name="MV" length="9" stride="4">
+                       <reg32 offset="0" name="VAL"/>
+               </array>
+               <array offset="0x500" name="PRE_BV" length="3" stride="4">
+                       <reg32 offset="0" name="VAL"/>
+               </array>
+               <array offset="0x580" name="POST_BV" length="3" stride="4">
+                       <reg32 offset="0" name="VAL"/>
+               </array>
+               <array offset="0x600" name="PRE_LV" length="6" stride="4">
+                       <reg32 offset="0" name="VAL"/>
+               </array>
+               <array offset="0x680" name="POST_LV" length="6" stride="4">
+                       <reg32 offset="0" name="VAL"/>
+               </array>
+       </group>
+
+       <reg32 offset="0x00000" name="VERSION">
+               <!--
+                       from mdp_probe() we can see minor rev starts at 16.. assume
+                       major is above that.. not sure the rest of bits but doesn't
+                       really seem to matter
+                -->
+               <bitfield name="MINOR" low="16" high="23" type="uint"/>
+               <bitfield name="MAJOR" low="24" high="31" type="uint"/>
+       </reg32>
+       <reg32 offset="0x00004" name="OVLP0_KICK"/>
+       <reg32 offset="0x00008" name="OVLP1_KICK"/>
+       <reg32 offset="0x000d0" name="OVLP2_KICK"/>
+       <reg32 offset="0x0000c" name="DMA_P_KICK"/>
+       <reg32 offset="0x00010" name="DMA_S_KICK"/>
+       <reg32 offset="0x00014" name="DMA_E_KICK"/>
+       <reg32 offset="0x00018" name="DISP_STATUS"/>
+
+       <reg32 offset="0x00038" name="DISP_INTF_SEL">
+               <bitfield name="PRIM" low="0" high="1" type="mdp4_intf"/>
+               <bitfield name="SEC" low="2" high="3" type="mdp4_intf"/>
+               <bitfield name="EXT" low="4" high="5" type="mdp4_intf"/>
+               <bitfield name="DSI_VIDEO" pos="6" type="boolean"/>
+               <bitfield name="DSI_CMD" pos="7" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x0003c" name="RESET_STATUS"/>  <!-- only mdp4 >v2.1 -->
+       <reg32 offset="0x0004c" name="READ_CNFG"/>  <!-- something about # of pending requests.. -->
+       <reg32 offset="0x00050" name="INTR_ENABLE" type="MDP4_IRQ"/>
+       <reg32 offset="0x00054" name="INTR_STATUS" type="MDP4_IRQ"/>
+       <reg32 offset="0x00058" name="INTR_CLEAR" type="MDP4_IRQ"/>
+       <reg32 offset="0x00060" name="EBI2_LCD0"/>
+       <reg32 offset="0x00064" name="EBI2_LCD1"/>
+       <reg32 offset="0x00070" name="PORTMAP_MODE"/>
+
+       <!-- mdp chip-select controller: -->
+       <reg32 offset="0x000c0" name="CS_CONTROLLER0"/>
+       <reg32 offset="0x000c4" name="CS_CONTROLLER1"/>
+
+       <reg32 offset="0x100f0" name="LAYERMIXER2_IN_CFG" type="mdp4_layermixer_in_cfg"/>
+       <reg32 offset="0x100fc" name="LAYERMIXER_IN_CFG_UPDATE_METHOD"/>
+       <reg32 offset="0x10100" name="LAYERMIXER_IN_CFG" type="mdp4_layermixer_in_cfg"/>
+
+       <reg32 offset="0x30050" name="VG2_SRC_FORMAT"/>
+       <reg32 offset="0x31008" name="VG2_CONST_COLOR"/>
+
+       <reg32 offset="0x18000" name="OVERLAY_FLUSH">
+               <bitfield name="OVLP0" pos="0" type="boolean"/>
+               <bitfield name="OVLP1" pos="1" type="boolean"/>
+               <bitfield name="VG1" pos="2" type="boolean"/>
+               <bitfield name="VG2" pos="3" type="boolean"/>
+               <bitfield name="RGB1" pos="4" type="boolean"/>
+               <bitfield name="RGB2" pos="5" type="boolean"/>
+       </reg32>
+
+       <array offsets="0x10000,0x18000,0x88000" name="OVLP" length="3" stride="0x8000">
+               <reg32 offset="0x0004" name="CFG"/>
+               <reg32 offset="0x0008" name="SIZE" type="reg_wh"/>
+               <reg32 offset="0x000c" name="BASE"/>
+               <reg32 offset="0x0010" name="STRIDE" type="uint"/>
+               <reg32 offset="0x0014" name="OPMODE"/>
+
+               <array offsets="0x0104,0x0124,0x0144,0x0160" name="STAGE" length="4" stride="0x1c">
+                       <reg32 offset="0x00" name="OP">
+                               <bitfield name="FG_ALPHA" low="0" high="1" type="mdp_alpha_type"/>
+                               <bitfield name="FG_INV_ALPHA" pos="2" type="boolean"/>
+                               <bitfield name="FG_MOD_ALPHA" pos="3" type="boolean"/>
+                               <bitfield name="BG_ALPHA" low="4" high="5" type="mdp_alpha_type"/>
+                               <bitfield name="BG_INV_ALPHA" pos="6" type="boolean"/>
+                               <bitfield name="BG_MOD_ALPHA" pos="7" type="boolean"/>
+                               <bitfield name="FG_TRANSP" pos="8" type="boolean"/>
+                               <bitfield name="BG_TRANSP" pos="9" type="boolean"/>
+                       </reg32>
+                       <reg32 offset="0x04" name="FG_ALPHA"/>
+                       <reg32 offset="0x08" name="BG_ALPHA"/>
+                       <reg32 offset="0x0c" name="TRANSP_LOW0"/>
+                       <reg32 offset="0x10" name="TRANSP_LOW1"/>
+                       <reg32 offset="0x14" name="TRANSP_HIGH0"/>
+                       <reg32 offset="0x18" name="TRANSP_HIGH1"/>
+               </array>
+
+               <array offsets="0x1004,0x1404,0x1804,0x1b84" name="STAGE_CO3" length="4" stride="4">
+                       <reg32 offset="0" name="SEL">
+                               <bitfield name="FG_ALPHA" pos="0" type="boolean"/> <!-- otherwise bg alpha -->
+                       </reg32>
+               </array>
+
+               <reg32 offset="0x0180" name="TRANSP_LOW0"/>
+               <reg32 offset="0x0184" name="TRANSP_LOW1"/>
+               <reg32 offset="0x0188" name="TRANSP_HIGH0"/>
+               <reg32 offset="0x018c" name="TRANSP_HIGH1"/>
+
+               <reg32 offset="0x0200" name="CSC_CONFIG"/>
+
+               <array offset="0x2000" name="CSC" length="1" stride="0x700">
+                       <use-group name="mdp4_csc"/>
+               </array>
+       </array>
+
+       <enum name="mdp4_dma">
+               <value name="DMA_P" value="0"/>
+               <value name="DMA_S" value="1"/>
+               <value name="DMA_E" value="2"/>
+       </enum>
+       <reg32 offset="0x90070" name="DMA_P_OP_MODE"/>
+       <array offset="0x94800" name="LUTN" length="2" stride="0x400">
+               <array offset="0" name="LUT" length="0x100" stride="4">
+                       <reg32 offset="0" name="VAL"/>
+               </array>
+       </array>
+       <reg32 offset="0xa0028" name="DMA_S_OP_MODE"/>
+       <!-- I guess if DMA_S has an OP_MODE, it must have a LUT too.. -->
+       <reg32 offset="0xb0070" name="DMA_E_QUANT" length="3" stride="4"/>
+       <array offsets="0x90000,0xa0000,0xb0000" name="DMA" length="3" stride="0x10000" index="mdp4_dma">
+               <reg32 offset="0x0000" name="CONFIG">
+                       <bitfield name="G_BPC" low="0" high="1" type="mdp_bpc"/>
+                       <bitfield name="B_BPC" low="2" high="3" type="mdp_bpc"/>
+                       <bitfield name="R_BPC" low="4" high="5" type="mdp_bpc"/>
+                       <bitfield name="PACK_ALIGN_MSB" pos="7" type="boolean"/>
+                       <bitfield name="PACK" low="8" high="15"/>
+                       <!-- bit 24 is DITHER_EN on DMA_P, DEFLKR_EN on DMA_E -->
+                       <bitfield name="DEFLKR_EN" pos="24" type="boolean"/>
+                       <bitfield name="DITHER_EN" pos="24" type="boolean"/>
+               </reg32>
+               <reg32 offset="0x0004" name="SRC_SIZE" type="reg_wh"/>
+               <reg32 offset="0x0008" name="SRC_BASE"/>
+               <reg32 offset="0x000c" name="SRC_STRIDE" type="uint"/>
+               <reg32 offset="0x0010" name="DST_SIZE" type="reg_wh"/>
+
+               <reg32 offset="0x0044" name="CURSOR_SIZE">
+                       <!-- seems the limit is 64x64: -->
+                       <bitfield name="WIDTH" low="0" high="6" type="uint"/>
+                       <bitfield name="HEIGHT" low="16" high="22" type="uint"/>
+               </reg32>
+               <reg32 offset="0x0048" name="CURSOR_BASE"/>
+               <reg32 offset="0x004c" name="CURSOR_POS">
+                       <bitfield name="X" low="0" high="15" type="uint"/>
+                       <bitfield name="Y" low="16" high="31" type="uint"/>
+               </reg32>
+               <reg32 offset="0x0060" name="CURSOR_BLEND_CONFIG">
+                       <bitfield name="CURSOR_EN" pos="0" type="boolean"/>
+                       <bitfield name="FORMAT" low="1" high="2" type="mdp4_cursor_format"/>
+                       <bitfield name="TRANSP_EN" pos="3" type="boolean"/>
+               </reg32>
+               <reg32 offset="0x0064" name="CURSOR_BLEND_PARAM"/>
+               <reg32 offset="0x0068" name="BLEND_TRANS_LOW"/>
+               <reg32 offset="0x006c" name="BLEND_TRANS_HIGH"/>
+
+               <reg32 offset="0x1004" name="FETCH_CONFIG"/>
+               <array offset="0x3000" name="CSC" length="1" stride="0x700">
+                       <use-group name="mdp4_csc"/>
+               </array>
+       </array>
+
+       <!--
+               TODO length should be 7, but that would collide w/ OVLP2..!?!
+               this register map is a bit strange..
+        -->
+       <array offset="0x20000" name="PIPE" length="6" stride="0x10000" index="mdp4_pipe">
+               <reg32 offset="0x0000" name="SRC_SIZE" type="reg_wh"/>
+               <reg32 offset="0x0004" name="SRC_XY" type="reg_xy"/>
+               <reg32 offset="0x0008" name="DST_SIZE" type="reg_wh"/>
+               <reg32 offset="0x000c" name="DST_XY" type="reg_xy"/>
+               <reg32 offset="0x0010" name="SRCP0_BASE"/>
+               <reg32 offset="0x0014" name="SRCP1_BASE"/>
+               <reg32 offset="0x0018" name="SRCP2_BASE"/>
+               <reg32 offset="0x001c" name="SRCP3_BASE"/>
+               <reg32 offset="0x0040" name="SRC_STRIDE_A">
+                       <bitfield name="P0" low="0" high="15" type="uint"/>
+                       <bitfield name="P1" low="16" high="31" type="uint"/>
+               </reg32>
+               <reg32 offset="0x0044" name="SRC_STRIDE_B">
+                       <bitfield name="P2" low="0" high="15" type="uint"/>
+                       <bitfield name="P3" low="16" high="31" type="uint"/>
+               </reg32>
+               <reg32 offset="0x0048" name="SSTILE_FRAME_SIZE" type="reg_wh"/>
+               <reg32 offset="0x0050" name="SRC_FORMAT">
+                       <bitfield name="G_BPC" low="0" high="1" type="mdp_bpc"/>
+                       <bitfield name="B_BPC" low="2" high="3" type="mdp_bpc"/>
+                       <bitfield name="R_BPC" low="4" high="5" type="mdp_bpc"/>
+                       <bitfield name="A_BPC" low="6" high="7" type="mdp_bpc_alpha"/>
+                       <bitfield name="ALPHA_ENABLE" pos="8" type="boolean"/>
+                       <bitfield name="CPP" low="9" high="10" type="uint">
+                               <brief>8bit characters per pixel minus 1</brief>
+                       </bitfield>
+                       <bitfield name="ROTATED_90" pos="12" type="boolean"/>
+                       <bitfield name="UNPACK_COUNT" low="13" high="14" type="uint"/>
+                       <bitfield name="UNPACK_TIGHT" pos="17" type="boolean"/>
+                       <bitfield name="UNPACK_ALIGN_MSB" pos="18" type="boolean"/>
+                       <bitfield name="FETCH_PLANES" low="19" high="20" type="uint"/>
+                       <bitfield name="SOLID_FILL" pos="22" type="boolean"/>
+                       <bitfield name="CHROMA_SAMP" low="26" high="27" type="mdp_chroma_samp_type"/>
+                       <bitfield name="FRAME_FORMAT" low="29" high="30" type="mdp4_frame_format"/>
+               </reg32>
+               <reg32 offset="0x0054" name="SRC_UNPACK" type="mdp_unpack_pattern"/>
+               <reg32 offset="0x0058" name="OP_MODE">
+                       <bitfield name="SCALEX_EN" pos="0" type="boolean"/>
+                       <bitfield name="SCALEY_EN" pos="1" type="boolean"/>
+                       <bitfield name="SCALEX_UNIT_SEL" low="2" high="3" type="mdp4_scale_unit"/>
+                       <bitfield name="SCALEY_UNIT_SEL" low="4" high="5" type="mdp4_scale_unit"/>
+                       <bitfield name="SRC_YCBCR" pos="9" type="boolean"/>
+                       <bitfield name="DST_YCBCR" pos="10" type="boolean"/>
+                       <bitfield name="CSC_EN" pos="11" type="boolean"/>
+                       <bitfield name="FLIP_LR" pos="13" type="boolean"/>
+                       <bitfield name="FLIP_UD" pos="14" type="boolean"/>
+                       <bitfield name="DITHER_EN" pos="15" type="boolean"/>
+                       <bitfield name="IGC_LUT_EN" pos="16" type="boolean"/>
+                       <bitfield name="DEINT_EN" pos="18" type="boolean"/>
+                       <bitfield name="DEINT_ODD_REF" pos="19" type="boolean"/>
+               </reg32>
+               <reg32 offset="0x005c" name="PHASEX_STEP"/>
+               <reg32 offset="0x0060" name="PHASEY_STEP"/>
+               <reg32 offset="0x1004" name="FETCH_CONFIG"/>
+               <reg32 offset="0x1008" name="SOLID_COLOR"/>
+
+               <array offset="0x4000" name="CSC" length="1" stride="0x700">
+                       <use-group name="mdp4_csc"/>
+               </array>
+       </array>
+
+       <!--
+               ENCODERS
+                       LCDC and DSI seem the same, DTV is just slightly different..
+        -->
+
+       <bitset name="mdp4_ctrl_polarity" inline="yes">
+               <!-- not entirely sure if these bits mean hi or low.. -->
+               <bitfield name="HSYNC_LOW" pos="0" type="boolean"/>
+               <bitfield name="VSYNC_LOW" pos="1" type="boolean"/>
+               <bitfield name="DATA_EN_LOW" pos="2" type="boolean"/>
+       </bitset>
+
+       <bitset name="mdp4_active_hctl" inline="yes">
+               <bitfield name="START" low="0" high="14" type="uint"/>
+               <bitfield name="END" low="16" high="30" type="uint"/>
+               <bitfield name="ACTIVE_START_X" pos="31" type="boolean"/>
+       </bitset>
+
+       <bitset name="mdp4_display_hctl" inline="yes">
+               <bitfield name="START" low="0" high="15" type="uint"/>
+               <bitfield name="END" low="16" high="31" type="uint"/>
+       </bitset>
+
+       <bitset name="mdp4_hsync_ctrl" inline="yes">
+               <bitfield name="PULSEW" low="0" high="15" type="uint"/>
+               <bitfield name="PERIOD" low="16" high="31" type="uint"/>
+       </bitset>
+
+       <bitset name="mdp4_underflow_clr" inline="yes">
+               <bitfield name="COLOR" low="0" high="23"/>
+               <bitfield name="ENABLE_RECOVERY" pos="31" type="boolean"/>
+       </bitset>
+
+       <!-- offset is 0xe0000 on !mdp4.. -->
+       <array offset="0xc0000" name="LCDC" length="1" stride="0x1000">
+               <reg32 offset="0x0000" name="ENABLE"/>
+               <reg32 offset="0x0004" name="HSYNC_CTRL" type="mdp4_hsync_ctrl"/>
+               <reg32 offset="0x0008" name="VSYNC_PERIOD" type="uint"/>
+               <reg32 offset="0x000c" name="VSYNC_LEN" type="uint"/>
+               <reg32 offset="0x0010" name="DISPLAY_HCTRL" type="mdp4_display_hctl"/>
+               <reg32 offset="0x0014" name="DISPLAY_VSTART" type="uint"/>
+               <reg32 offset="0x0018" name="DISPLAY_VEND" type="uint"/>
+               <reg32 offset="0x001c" name="ACTIVE_HCTL" type="mdp4_active_hctl"/>
+               <reg32 offset="0x0020" name="ACTIVE_VSTART" type="uint"/>
+               <reg32 offset="0x0024" name="ACTIVE_VEND" type="uint"/>
+               <reg32 offset="0x0028" name="BORDER_CLR"/>
+               <reg32 offset="0x002c" name="UNDERFLOW_CLR" type="mdp4_underflow_clr"/>
+               <reg32 offset="0x0030" name="HSYNC_SKEW"/>
+               <reg32 offset="0x0034" name="TEST_CNTL"/>
+               <reg32 offset="0x0038" name="CTRL_POLARITY" type="mdp4_ctrl_polarity"/>
+       </array>
+
+       <reg32 offset="0xc2000" name="LCDC_LVDS_INTF_CTL">
+               <bitfield name="MODE_SEL"           pos="2"  type="boolean"/>
+               <bitfield name="RGB_OUT"            pos="3"  type="boolean"/>
+               <bitfield name="CH_SWAP"            pos="4"  type="boolean"/>
+               <bitfield name="CH1_RES_BIT"        pos="5"  type="boolean"/>
+               <bitfield name="CH2_RES_BIT"        pos="6"  type="boolean"/>
+               <bitfield name="ENABLE"             pos="7"  type="boolean"/>
+               <bitfield name="CH1_DATA_LANE0_EN"  pos="8"  type="boolean"/>
+               <bitfield name="CH1_DATA_LANE1_EN"  pos="9"  type="boolean"/>
+               <bitfield name="CH1_DATA_LANE2_EN"  pos="10" type="boolean"/>
+               <bitfield name="CH1_DATA_LANE3_EN"  pos="11" type="boolean"/>
+               <bitfield name="CH2_DATA_LANE0_EN"  pos="12" type="boolean"/>
+               <bitfield name="CH2_DATA_LANE1_EN"  pos="13" type="boolean"/>
+               <bitfield name="CH2_DATA_LANE2_EN"  pos="14" type="boolean"/>
+               <bitfield name="CH2_DATA_LANE3_EN"  pos="15" type="boolean"/>
+               <bitfield name="CH1_CLK_LANE_EN"    pos="16" type="boolean"/>
+               <bitfield name="CH2_CLK_LANE_EN"    pos="17" type="boolean"/>
+       </reg32>
+
+       <array offset="0xc2014" name="LCDC_LVDS_MUX_CTL" length="4" stride="0x8">
+               <reg32 offset="0x0" name="3_TO_0">
+                       <bitfield name="BIT0" low="0"  high="7"/>
+                       <bitfield name="BIT1" low="8"  high="15"/>
+                       <bitfield name="BIT2" low="16" high="23"/>
+                       <bitfield name="BIT3" low="24" high="31"/>
+               </reg32>
+               <reg32 offset="0x4" name="6_TO_4">
+                       <bitfield name="BIT4" low="0"  high="7"/>
+                       <bitfield name="BIT5" low="8"  high="15"/>
+                       <bitfield name="BIT6" low="16" high="23"/>
+               </reg32>
+       </array>
+
+       <reg32 offset="0xc2034" name="LCDC_LVDS_PHY_RESET"/>
+
+       <reg32 offset="0xc3000" name="LVDS_PHY_PLL_CTRL_0"/>
+       <reg32 offset="0xc3004" name="LVDS_PHY_PLL_CTRL_1"/>
+       <reg32 offset="0xc3008" name="LVDS_PHY_PLL_CTRL_2"/>
+       <reg32 offset="0xc300c" name="LVDS_PHY_PLL_CTRL_3"/>
+       <reg32 offset="0xc3014" name="LVDS_PHY_PLL_CTRL_5"/>
+       <reg32 offset="0xc3018" name="LVDS_PHY_PLL_CTRL_6"/>
+       <reg32 offset="0xc301c" name="LVDS_PHY_PLL_CTRL_7"/>
+       <reg32 offset="0xc3020" name="LVDS_PHY_PLL_CTRL_8"/>
+       <reg32 offset="0xc3024" name="LVDS_PHY_PLL_CTRL_9"/>
+       <reg32 offset="0xc3080" name="LVDS_PHY_PLL_LOCKED"/>
+       <reg32 offset="0xc3108" name="LVDS_PHY_CFG2"/>
+
+       <reg32 offset="0xc3100" name="LVDS_PHY_CFG0">
+               <bitfield name="SERIALIZATION_ENBLE" pos="4" type="boolean"/>
+               <bitfield name="CHANNEL0" pos="6" type="boolean"/>
+               <bitfield name="CHANNEL1" pos="7" type="boolean"/>
+       </reg32>
+
+       <array offset="0xd0000" name="DTV" length="1" stride="0x1000">
+               <reg32 offset="0x0000" name="ENABLE"/>
+               <reg32 offset="0x0004" name="HSYNC_CTRL" type="mdp4_hsync_ctrl"/>
+               <reg32 offset="0x0008" name="VSYNC_PERIOD" type="uint"/>
+               <reg32 offset="0x000c" name="VSYNC_LEN" type="uint"/>
+               <reg32 offset="0x0018" name="DISPLAY_HCTRL" type="mdp4_display_hctl"/>
+               <reg32 offset="0x001c" name="DISPLAY_VSTART" type="uint"/>
+               <reg32 offset="0x0020" name="DISPLAY_VEND" type="uint"/>
+               <reg32 offset="0x002c" name="ACTIVE_HCTL" type="mdp4_active_hctl"/>
+               <reg32 offset="0x0030" name="ACTIVE_VSTART" type="uint"/>
+               <reg32 offset="0x0038" name="ACTIVE_VEND" type="uint"/>
+               <reg32 offset="0x0040" name="BORDER_CLR"/>
+               <reg32 offset="0x0044" name="UNDERFLOW_CLR" type="mdp4_underflow_clr"/>
+               <reg32 offset="0x0048" name="HSYNC_SKEW"/>
+               <reg32 offset="0x004c" name="TEST_CNTL"/>
+               <reg32 offset="0x0050" name="CTRL_POLARITY" type="mdp4_ctrl_polarity"/>
+       </array>
+
+       <array offset="0xe0000" name="DSI" length="1" stride="0x1000">
+               <reg32 offset="0x0000" name="ENABLE"/>
+               <reg32 offset="0x0004" name="HSYNC_CTRL" type="mdp4_hsync_ctrl"/>
+               <reg32 offset="0x0008" name="VSYNC_PERIOD" type="uint"/>
+               <reg32 offset="0x000c" name="VSYNC_LEN" type="uint"/>
+               <reg32 offset="0x0010" name="DISPLAY_HCTRL" type="mdp4_display_hctl"/>
+               <reg32 offset="0x0014" name="DISPLAY_VSTART" type="uint"/>
+               <reg32 offset="0x0018" name="DISPLAY_VEND" type="uint"/>
+               <reg32 offset="0x001c" name="ACTIVE_HCTL" type="mdp4_active_hctl"/>
+               <reg32 offset="0x0020" name="ACTIVE_VSTART" type="uint"/>
+               <reg32 offset="0x0024" name="ACTIVE_VEND" type="uint"/>
+               <reg32 offset="0x0028" name="BORDER_CLR"/>
+               <reg32 offset="0x002c" name="UNDERFLOW_CLR" type="mdp4_underflow_clr"/>
+               <reg32 offset="0x0030" name="HSYNC_SKEW"/>
+               <reg32 offset="0x0034" name="TEST_CNTL"/>
+               <reg32 offset="0x0038" name="CTRL_POLARITY" type="mdp4_ctrl_polarity"/>
+       </array>
+</domain>
+
+</database>
diff --git a/src/freedreno/registers/mdp/mdp5.xml b/src/freedreno/registers/mdp/mdp5.xml
new file mode 100644 (file)
index 0000000..a5ae1e3
--- /dev/null
@@ -0,0 +1,804 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<database xmlns="http://nouveau.freedesktop.org/"
+xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+xsi:schemaLocation="http://nouveau.freedesktop.org/ rules-ng.xsd">
+<import file="freedreno_copyright.xml"/>
+<import file="mdp/mdp_common.xml"/>
+
+<!-- where does this belong? -->
+<domain name="VBIF" width="32">
+</domain>
+
+<domain name="MDSS" width="32">
+       <reg32 offset="0x00000" name="HW_VERSION">
+               <bitfield name="STEP" low="0" high="15" type="uint"/>
+               <bitfield name="MINOR" low="16" high="27" type="uint"/>
+               <bitfield name="MAJOR" low="28" high="31" type="uint"/>
+       </reg32>
+
+       <reg32 offset="0x00010" name="HW_INTR_STATUS">
+               <bitfield name="INTR_MDP"  pos="0"  type="boolean"/>
+               <bitfield name="INTR_DSI0" pos="4"  type="boolean"/>
+               <bitfield name="INTR_DSI1" pos="5"  type="boolean"/>
+               <bitfield name="INTR_HDMI" pos="8"  type="boolean"/>
+               <bitfield name="INTR_EDP"  pos="12" type="boolean"/>
+       </reg32>
+</domain>
+
+<domain name="MDP5" width="32">
+
+       <enum name="mdp5_intf_type">
+               <value name="INTF_DISABLED" value="0x0"/>
+               <value name="INTF_DSI"  value="0x1"/>
+               <value name="INTF_HDMI" value="0x3"/>
+               <value name="INTF_LCDC" value="0x5"/>
+               <value name="INTF_eDP"  value="0x9"/>
+               <value name="INTF_VIRTUAL"  value="0x64"/>
+               <!-- non-display interfaces are listed below: -->
+               <value name="INTF_WB"  value="0x65"/>
+       </enum>
+
+       <enum name="mdp5_intfnum">
+               <value name="NO_INTF" value="0"/>
+               <value name="INTF0"   value="1"/>
+               <value name="INTF1"   value="2"/>
+               <value name="INTF2"   value="3"/>
+               <value name="INTF3"   value="4"/>
+       </enum>
+
+       <enum name="mdp5_pipe">
+               <value name="SSPP_NONE" value="0"/>
+               <value name="SSPP_VIG0" value="1"/>
+               <value name="SSPP_VIG1" value="2"/>
+               <value name="SSPP_VIG2" value="3"/>
+               <value name="SSPP_RGB0" value="4"/>
+               <value name="SSPP_RGB1" value="5"/>
+               <value name="SSPP_RGB2" value="6"/>
+               <value name="SSPP_DMA0" value="7"/>
+               <value name="SSPP_DMA1" value="8"/>
+               <value name="SSPP_VIG3" value="9"/>
+               <value name="SSPP_RGB3" value="10"/>
+               <value name="SSPP_CURSOR0" value="11"/>
+               <value name="SSPP_CURSOR1" value="12"/>
+       </enum>
+
+       <enum name="mdp5_format">
+       </enum>
+
+       <enum name="mdp5_ctl_mode">
+               <value name="MODE_NONE" value="0"/>
+               <value name="MODE_WB_0_BLOCK" value="1"/>
+               <value name="MODE_WB_1_BLOCK" value="2"/>
+               <value name="MODE_WB_0_LINE" value="3"/>
+               <value name="MODE_WB_1_LINE" value="4"/>
+               <value name="MODE_WB_2_LINE" value="5"/>
+       </enum>
+
+       <enum name="mdp5_pack_3d">
+               <value name="PACK_3D_FRAME_INT" value="0"/>
+               <value name="PACK_3D_H_ROW_INT" value="1"/>
+               <value name="PACK_3D_V_ROW_INT" value="2"/>
+               <value name="PACK_3D_COL_INT"   value="3"/>
+       </enum>
+
+       <enum name="mdp5_scale_filter">
+               <value name="SCALE_FILTER_NEAREST" value="0"/>
+               <value name="SCALE_FILTER_BIL" value="1"/>
+               <value name="SCALE_FILTER_PCMN" value="2"/>
+               <value name="SCALE_FILTER_CA" value="3"/>
+       </enum>
+
+       <enum name="mdp5_pipe_bwc">
+               <value name="BWC_LOSSLESS" value="0"/>
+               <value name="BWC_Q_HIGH"   value="1"/>
+               <value name="BWC_Q_MED"    value="2"/>
+       </enum>
+
+       <enum name="mdp5_cursor_format">
+               <value name="CURSOR_FMT_ARGB8888" value="0"/>
+               <value name="CURSOR_FMT_ARGB1555" value="2"/>
+               <value name="CURSOR_FMT_ARGB4444" value="4"/>
+       </enum>
+
+       <enum name="mdp5_cursor_alpha">
+               <value name="CURSOR_ALPHA_CONST" value="0"/>
+               <value name="CURSOR_ALPHA_PER_PIXEL" value="2"/>
+       </enum>
+
+       <bitset name="MDP5_IRQ">
+               <bitfield name="WB_0_DONE"                pos="0"  type="boolean"/>
+               <bitfield name="WB_1_DONE"                pos="1"  type="boolean"/>
+               <bitfield name="WB_2_DONE"                pos="4"  type="boolean"/>
+               <bitfield name="PING_PONG_0_DONE"         pos="8"  type="boolean"/>
+               <bitfield name="PING_PONG_1_DONE"         pos="9"  type="boolean"/>
+               <bitfield name="PING_PONG_2_DONE"         pos="10" type="boolean"/>
+               <bitfield name="PING_PONG_3_DONE"         pos="11" type="boolean"/>
+               <bitfield name="PING_PONG_0_RD_PTR"       pos="12" type="boolean"/>
+               <bitfield name="PING_PONG_1_RD_PTR"       pos="13" type="boolean"/>
+               <bitfield name="PING_PONG_2_RD_PTR"       pos="14" type="boolean"/>
+               <bitfield name="PING_PONG_3_RD_PTR"       pos="15" type="boolean"/>
+               <bitfield name="PING_PONG_0_WR_PTR"       pos="16" type="boolean"/>
+               <bitfield name="PING_PONG_1_WR_PTR"       pos="17" type="boolean"/>
+               <bitfield name="PING_PONG_2_WR_PTR"       pos="18" type="boolean"/>
+               <bitfield name="PING_PONG_3_WR_PTR"       pos="19" type="boolean"/>
+               <bitfield name="PING_PONG_0_AUTO_REF"     pos="20" type="boolean"/>
+               <bitfield name="PING_PONG_1_AUTO_REF"     pos="21" type="boolean"/>
+               <bitfield name="PING_PONG_2_AUTO_REF"     pos="22" type="boolean"/>
+               <bitfield name="PING_PONG_3_AUTO_REF"     pos="23" type="boolean"/>
+               <bitfield name="INTF0_UNDER_RUN"          pos="24" type="boolean"/>
+               <bitfield name="INTF0_VSYNC"              pos="25" type="boolean"/>
+               <bitfield name="INTF1_UNDER_RUN"          pos="26" type="boolean"/>
+               <bitfield name="INTF1_VSYNC"              pos="27" type="boolean"/>
+               <bitfield name="INTF2_UNDER_RUN"          pos="28" type="boolean"/>
+               <bitfield name="INTF2_VSYNC"              pos="29" type="boolean"/>
+               <bitfield name="INTF3_UNDER_RUN"          pos="30" type="boolean"/>
+               <bitfield name="INTF3_VSYNC"              pos="31" type="boolean"/>
+       </bitset>
+
+       <bitset name="mdp5_smp_alloc" inline="yes">
+        <!-- Use "mdp5_cfg->mdp.smp.clients[enum mdp5_pipe]" instead -->
+               <bitfield name="CLIENT0" low="0"  high="7"  type="uint"/>
+               <bitfield name="CLIENT1" low="8"  high="15" type="uint"/>
+               <bitfield name="CLIENT2" low="16" high="23" type="uint"/>
+       </bitset>
+
+       <reg32 offset="0x00000" name="HW_VERSION">
+               <bitfield name="STEP" low="0" high="15" type="uint"/>
+               <bitfield name="MINOR" low="16" high="27" type="uint"/>
+               <bitfield name="MAJOR" low="28" high="31" type="uint"/>
+       </reg32>
+
+       <reg32 offset="0x00004" name="DISP_INTF_SEL">
+               <bitfield name="INTF0" low="0"  high="7"  type="mdp5_intf_type"/>
+               <bitfield name="INTF1" low="8"  high="15" type="mdp5_intf_type"/>
+               <bitfield name="INTF2" low="16" high="23" type="mdp5_intf_type"/>
+               <bitfield name="INTF3" low="24" high="31" type="mdp5_intf_type"/>
+       </reg32>
+       <reg32 offset="0x00010" name="INTR_EN" type="MDP5_IRQ"/>
+       <reg32 offset="0x00014" name="INTR_STATUS" type="MDP5_IRQ"/>
+       <reg32 offset="0x00018" name="INTR_CLEAR" type="MDP5_IRQ"/>
+       <reg32 offset="0x0001C" name="HIST_INTR_EN"/>
+       <reg32 offset="0x00020" name="HIST_INTR_STATUS"/>
+       <reg32 offset="0x00024" name="HIST_INTR_CLEAR"/>
+       <reg32 offset="0x00028" name="SPARE_0">
+               <bitfield name="SPLIT_DPL_SINGLE_FLUSH_EN" pos="0"/>
+       </reg32>
+
+       <array offset="0x00080" name="SMP_ALLOC_W" length="8" stride="4">
+               <reg32 offset="0" name="REG" type="mdp5_smp_alloc"/>
+       </array>
+       <array offset="0x00130" name="SMP_ALLOC_R" length="8" stride="4">
+               <reg32 offset="0" name="REG" type="mdp5_smp_alloc"/>
+       </array>
+
+       <enum name="mdp5_igc_type">
+               <value name="IGC_VIG" value="0"/>               <!-- 0x200 -->
+               <value name="IGC_RGB" value="1"/>               <!-- 0x210 -->
+               <value name="IGC_DMA" value="2"/>               <!-- 0x220 -->
+               <value name="IGC_DSPP" value="3"/>              <!-- 0x300 -->
+       </enum>
+       <array offsets="0x00200,0x00210,0x00220,0x00300" name="IGC" length="3" stride="0x10" index="mdp5_igc_type">
+               <array offset="0x00" name="LUT" length="3" stride="4">
+                       <reg32 offset="0" name="REG">
+                               <bitfield name="VAL" low="0" high="11"/>
+                               <bitfield name="INDEX_UPDATE" pos="25" type="boolean"/>
+                               <!--
+                                       not sure about these:
+                                               /* INDEX_UPDATE */
+                                               data = (1 << 25) | (((~(1 << blk_idx)) & 0x7) << 28);
+                                               MDSS_MDP_REG_WRITE(offset, (cfg->c0_c1_data[0] & 0xFFF) | data);
+                               -->
+                               <bitfield name="DISABLE_PIPE_0" pos="28" type="boolean"/>
+                               <bitfield name="DISABLE_PIPE_1" pos="29" type="boolean"/>
+                               <bitfield name="DISABLE_PIPE_2" pos="30" type="boolean"/>
+                       </reg32>
+               </array>
+       </array>
+       <reg32 offset="0x002f4" name="SPLIT_DPL_EN"/>
+       <reg32 offset="0x002f8" name="SPLIT_DPL_UPPER">
+               <bitfield name="SMART_PANEL" pos="1" type="boolean"/>
+               <bitfield name="SMART_PANEL_FREE_RUN" pos="2" type="boolean"/>
+               <bitfield name="INTF1_SW_TRG_MUX" pos="4" type="boolean"/>
+               <bitfield name="INTF2_SW_TRG_MUX" pos="8" type="boolean"/>
+       </reg32>
+       <reg32 offset="0x003f0" name="SPLIT_DPL_LOWER">
+               <bitfield name="SMART_PANEL" pos="1" type="boolean"/>
+               <bitfield name="SMART_PANEL_FREE_RUN" pos="2" type="boolean"/>
+               <bitfield name="INTF1_TG_SYNC" pos="4" type="boolean"/>
+               <bitfield name="INTF2_TG_SYNC" pos="8" type="boolean"/>
+       </reg32>
+
+<!-- check length/index.. -->
+       <array doffsets="mdp5_cfg->ctl.base[0],mdp5_cfg->ctl.base[1],mdp5_cfg->ctl.base[2],mdp5_cfg->ctl.base[3],mdp5_cfg->ctl.base[4]" name="CTL" length="5" stride="0x400">
+               <array offsets="0x000,0x004,0x008,0x00C,0x010,0x024" name="LAYER" length="6" stride="4">
+                       <!--
+                       NOTE: for backwards compat (from when there were fewer stages),
+                       this register has the low three bits of mdp_mixer_stage_id, with
+                       the high bit coming from LAYER_EXT
+                        -->
+                       <reg32 offset="0" name="REG">
+                               <bitfield name="VIG0"  low="0"  high="2"  type="uint"/>
+                               <bitfield name="VIG1"  low="3"  high="5"  type="uint"/>
+                               <bitfield name="VIG2"  low="6"  high="8"  type="uint"/>
+                               <bitfield name="RGB0"  low="9"  high="11" type="uint"/>
+                               <bitfield name="RGB1"  low="12" high="14" type="uint"/>
+                               <bitfield name="RGB2"  low="15" high="17" type="uint"/>
+                               <bitfield name="DMA0"  low="18" high="20" type="uint"/>
+                               <bitfield name="DMA1"  low="21" high="23" type="uint"/>
+                               <bitfield name="BORDER_COLOR" pos="24" type="boolean"/>
+                               <bitfield name="CURSOR_OUT"   pos="25" type="boolean"/>
+                               <bitfield name="VIG3"  low="26"  high="28"  type="uint"/>
+                               <bitfield name="RGB3"  low="29" high="31" type="uint"/>
+                       </reg32>
+               </array>
+               <reg32 offset="0x014" name="OP">
+                       <bitfield name="MODE" low="0" high="3" type="mdp5_ctl_mode"/>
+                       <bitfield name="INTF_NUM" low="4" high="6" type="mdp5_intfnum"/>
+                       <bitfield name="CMD_MODE" pos="17" type="boolean"/>
+                       <bitfield name="PACK_3D_ENABLE" pos="19" type="boolean"/>
+                       <bitfield name="PACK_3D" low="20" high="21" type="mdp5_pack_3d"/>
+               </reg32>
+               <reg32 offset="0x018" name="FLUSH">
+                       <bitfield name="VIG0" pos="0"  type="boolean"/>
+                       <bitfield name="VIG1" pos="1"  type="boolean"/>
+                       <bitfield name="VIG2" pos="2"  type="boolean"/>
+                       <bitfield name="RGB0" pos="3"  type="boolean"/>
+                       <bitfield name="RGB1" pos="4"  type="boolean"/>
+                       <bitfield name="RGB2" pos="5"  type="boolean"/>
+                       <bitfield name="LM0"  pos="6"  type="boolean"/>
+                       <bitfield name="LM1"  pos="7"  type="boolean"/>
+                       <bitfield name="LM2"  pos="8"  type="boolean"/>
+                       <bitfield name="LM3"  pos="9"  type="boolean"/>
+                       <bitfield name="LM4"  pos="10"  type="boolean"/>
+                       <bitfield name="DMA0" pos="11" type="boolean"/>
+                       <bitfield name="DMA1" pos="12" type="boolean"/>
+                       <bitfield name="DSPP0" pos="13" type="boolean"/>
+                       <bitfield name="DSPP1" pos="14" type="boolean"/>
+                       <bitfield name="DSPP2" pos="15" type="boolean"/>
+                       <bitfield name="WB"   pos="16" type="boolean"/>
+                       <bitfield name="CTL"   pos="17" type="boolean"/>
+                       <bitfield name="VIG3" pos="18"  type="boolean"/>
+                       <bitfield name="RGB3" pos="19"  type="boolean"/>
+                       <bitfield name="LM5"  pos="20"  type="boolean"/>
+                       <bitfield name="DSPP3" pos="21" type="boolean"/>
+                       <bitfield name="CURSOR_0" pos="22" type="boolean"/>
+                       <bitfield name="CURSOR_1" pos="23" type="boolean"/>
+                       <bitfield name="CHROMADOWN_0" pos="26" type="boolean"/>
+                       <bitfield name="TIMING_3" pos="28" type="boolean"/>
+                       <bitfield name="TIMING_2" pos="29" type="boolean"/>
+                       <bitfield name="TIMING_1" pos="30" type="boolean"/>
+                       <bitfield name="TIMING_0" pos="31" type="boolean"/>
+               </reg32>
+               <reg32 offset="0x01C" name="START"/>
+               <reg32 offset="0x020" name="PACK_3D"/>
+               <array offsets="0x040,0x044,0x048,0x04C,0x050,0x054" name="LAYER_EXT" length="6" stride="4">
+                       <reg32 offset="0" name="REG">
+                               <bitfield name="VIG0_BIT3"  pos="0"  type="boolean"/>
+                               <bitfield name="VIG1_BIT3"  pos="2"  type="boolean"/>
+                               <bitfield name="VIG2_BIT3"  pos="4"  type="boolean"/>
+                               <bitfield name="VIG3_BIT3"  pos="6"  type="boolean"/>
+                               <bitfield name="RGB0_BIT3"  pos="8"  type="boolean"/>
+                               <bitfield name="RGB1_BIT3"  pos="10"  type="boolean"/>
+                               <bitfield name="RGB2_BIT3"  pos="12"  type="boolean"/>
+                               <bitfield name="RGB3_BIT3"  pos="14"  type="boolean"/>
+                               <bitfield name="DMA0_BIT3"  pos="16"  type="boolean"/>
+                               <bitfield name="DMA1_BIT3"  pos="18"  type="boolean"/>
+                               <bitfield name="CURSOR0" low="20"  high="23"  type="mdp_mixer_stage_id"/>
+                               <bitfield name="CURSOR1" low="26"  high="29"  type="mdp_mixer_stage_id"/>
+                       </reg32>
+               </array>
+       </array>
+
+       <enum name="mdp5_data_format">
+               <value name="DATA_FORMAT_RGB" value="0"/>
+               <value name="DATA_FORMAT_YUV" value="1"/>
+       </enum>
+
+       <array doffsets="INVALID_IDX(idx),mdp5_cfg->pipe_vig.base[0],mdp5_cfg->pipe_vig.base[1],mdp5_cfg->pipe_vig.base[2],mdp5_cfg->pipe_rgb.base[0],mdp5_cfg->pipe_rgb.base[1],mdp5_cfg->pipe_rgb.base[2],mdp5_cfg->pipe_dma.base[0],mdp5_cfg->pipe_dma.base[1],mdp5_cfg->pipe_vig.base[3],mdp5_cfg->pipe_rgb.base[3],mdp5_cfg->pipe_cursor.base[0],mdp5_cfg->pipe_cursor.base[1]" name="PIPE" length="10" stride="0x400" index="mdp5_pipe">
+               <reg32 offset="0x200" name="OP_MODE">
+                       <bitfield name="CSC_DST_DATA_FORMAT" pos="19" type="mdp5_data_format"/>
+                       <bitfield name="CSC_SRC_DATA_FORMAT" pos="18" type="mdp5_data_format"/>
+                       <bitfield name="CSC_1_EN" pos="17" type="boolean"/>
+               </reg32>
+               <reg32 offset="0x2C4" name="HIST_CTL_BASE"/>
+               <reg32 offset="0x2F0" name="HIST_LUT_BASE"/>
+               <reg32 offset="0x300" name="HIST_LUT_SWAP"/>
+               <reg32 offset="0x320" name="CSC_1_MATRIX_COEFF_0">
+                       <bitfield name="COEFF_11" low="0" high="12" type="uint"/>
+                       <bitfield name="COEFF_12" low="16" high="28" type="uint"/>
+               </reg32>
+               <reg32 offset="0x324" name="CSC_1_MATRIX_COEFF_1">
+                       <bitfield name="COEFF_13" low="0" high="12" type="uint"/>
+                       <bitfield name="COEFF_21" low="16" high="28" type="uint"/>
+               </reg32>
+               <reg32 offset="0x328" name="CSC_1_MATRIX_COEFF_2">
+                       <bitfield name="COEFF_22" low="0" high="12" type="uint"/>
+                       <bitfield name="COEFF_23" low="16" high="28" type="uint"/>
+               </reg32>
+               <reg32 offset="0x32c" name="CSC_1_MATRIX_COEFF_3">
+                       <bitfield name="COEFF_31" low="0" high="12" type="uint"/>
+                       <bitfield name="COEFF_32" low="16" high="28" type="uint"/>
+               </reg32>
+               <reg32 offset="0x330" name="CSC_1_MATRIX_COEFF_4">
+                       <bitfield name="COEFF_33" low="0" high="12" type="uint"/>
+               </reg32>
+               <array offset="0x334" name="CSC_1_PRE_CLAMP" length="3" stride="4">
+                       <reg32 offset="0" name="REG">
+                               <bitfield name="HIGH"  low="0"  high="7"  type="uint"/>
+                               <bitfield name="LOW"  low="8"  high="15"  type="uint"/>
+                       </reg32>
+               </array>
+               <array offset="0x340" name="CSC_1_POST_CLAMP" length="3" stride="4">
+                       <reg32 offset="0" name="REG">
+                               <bitfield name="HIGH"  low="0"  high="7"  type="uint"/>
+                               <bitfield name="LOW"  low="8"  high="15"  type="uint"/>
+                       </reg32>
+               </array>
+               <array offset="0x34c" name="CSC_1_PRE_BIAS" length="3" stride="4">
+                       <reg32 offset="0" name="REG">
+                               <bitfield name="VALUE"  low="0"  high="8"  type="uint"/>
+                       </reg32>
+               </array>
+               <array offset="0x358" name="CSC_1_POST_BIAS" length="3" stride="4">
+                       <reg32 offset="0" name="REG">
+                               <bitfield name="VALUE"  low="0"  high="8"  type="uint"/>
+                       </reg32>
+               </array>
+               <!-- SSPP: -->
+               <reg32 offset="0x000" name="SRC_SIZE" type="reg_wh"/>
+               <reg32 offset="0x004" name="SRC_IMG_SIZE" type="reg_wh"/>
+               <reg32 offset="0x008" name="SRC_XY" type="reg_xy"/>
+               <reg32 offset="0x00C" name="OUT_SIZE" type="reg_wh"/>
+               <reg32 offset="0x010" name="OUT_XY" type="reg_xy"/>
+               <reg32 offset="0x014" name="SRC0_ADDR"/>
+               <reg32 offset="0x018" name="SRC1_ADDR"/>
+               <reg32 offset="0x01C" name="SRC2_ADDR"/>
+               <reg32 offset="0x020" name="SRC3_ADDR"/>
+               <reg32 offset="0x024" name="SRC_STRIDE_A">
+                       <bitfield name="P0" low="0" high="15" type="uint"/>
+                       <bitfield name="P1" low="16" high="31" type="uint"/>
+               </reg32>
+               <reg32 offset="0x028" name="SRC_STRIDE_B">
+                       <bitfield name="P2" low="0" high="15" type="uint"/>
+                       <bitfield name="P3" low="16" high="31" type="uint"/>
+               </reg32>
+               <reg32 offset="0x02C" name="STILE_FRAME_SIZE"/>
+               <reg32 offset="0x030" name="SRC_FORMAT">
+                       <bitfield name="G_BPC" low="0" high="1" type="mdp_bpc"/>
+                       <bitfield name="B_BPC" low="2" high="3" type="mdp_bpc"/>
+                       <bitfield name="R_BPC" low="4" high="5" type="mdp_bpc"/>
+                       <bitfield name="A_BPC" low="6" high="7" type="mdp_bpc_alpha"/>
+                       <bitfield name="ALPHA_ENABLE" pos="8" type="boolean"/>
+                       <bitfield name="CPP" low="9" high="10" type="uint">
+                               <brief>8bit characters per pixel minus 1</brief>
+                       </bitfield>
+                       <bitfield name="ROT90" pos="11" type="boolean"/>
+                       <bitfield name="UNPACK_COUNT" low="12" high="13" type="uint"/>
+                       <bitfield name="UNPACK_TIGHT" pos="17" type="boolean"/>
+                       <bitfield name="UNPACK_ALIGN_MSB" pos="18" type="boolean"/>
+                       <bitfield name="FETCH_TYPE" low="19" high="20" type="mdp_fetch_type"/>
+                       <bitfield name="CHROMA_SAMP" low="23" high="24" type="mdp_chroma_samp_type"/>
+               </reg32>
+               <reg32 offset="0x034" name="SRC_UNPACK" type="mdp_unpack_pattern"/>
+               <reg32 offset="0x038" name="SRC_OP_MODE">
+                       <bitfield name="BWC_EN" pos="0" type="boolean"/>
+                       <bitfield name="BWC" low="1" high="2" type="mdp5_pipe_bwc"/>
+                       <bitfield name="FLIP_LR" pos="13" type="boolean"/>
+                       <bitfield name="FLIP_UD" pos="14" type="boolean"/>
+                       <bitfield name="IGC_EN" pos="16" type="boolean"/>
+                       <bitfield name="IGC_ROM_0" pos="17" type="boolean"/>
+                       <bitfield name="IGC_ROM_1" pos="18" type="boolean"/>
+                       <bitfield name="DEINTERLACE" pos="22" type="boolean"/>
+                       <bitfield name="DEINTERLACE_ODD" pos="23" type="boolean"/>
+                       <bitfield name="SW_PIX_EXT_OVERRIDE" pos="31" type="boolean"/>
+               </reg32>
+               <reg32 offset="0x03c" name="SRC_CONSTANT_COLOR"/>
+               <reg32 offset="0x048" name="FETCH_CONFIG"/>
+               <reg32 offset="0x04c" name="VC1_RANGE"/>
+               <reg32 offset="0x050" name="REQPRIO_FIFO_WM_0"/>
+               <reg32 offset="0x054" name="REQPRIO_FIFO_WM_1"/>
+               <reg32 offset="0x058" name="REQPRIO_FIFO_WM_2"/>
+               <reg32 offset="0x070" name="SRC_ADDR_SW_STATUS"/>
+               <reg32 offset="0x0a4" name="CURRENT_SRC0_ADDR"/>
+               <reg32 offset="0x0a8" name="CURRENT_SRC1_ADDR"/>
+               <reg32 offset="0x0ac" name="CURRENT_SRC2_ADDR"/>
+               <reg32 offset="0x0b0" name="CURRENT_SRC3_ADDR"/>
+               <reg32 offset="0x0b4" name="DECIMATION">
+                       <bitfield name="VERT" low="0" high="7" type="uint"/>
+                       <bitfield name="HORZ" low="8" high="15" type="uint"/>
+               </reg32>
+               <array offsets="0x100,0x110,0x120" name="SW_PIX_EXT" length="3" stride="0x10" index="mdp_component_type">
+                       <!--
+                               Notes:
+                               o These value only take effect if SW_PIX_EXT_OVERRIDE is set in SRC_OP_MODE register
+                               o For signed values (int): + indicates overfetch, - indicates line drop
+                       -->
+                        <reg32 offset="0x00" name="LR">
+                               <bitfield name="LEFT_RPT" low="0" high="7" type="uint"/>
+                               <bitfield name="LEFT_OVF" low="8" high="15" type="int"/>
+                               <bitfield name="RIGHT_RPT" low="16" high="23" type="uint"/>
+                               <bitfield name="RIGHT_OVF" low="24" high="31" type="int"/>
+                       </reg32>
+                       <reg32 offset="0x04" name="TB">
+                               <bitfield name="TOP_RPT" low="0" high="7" type="uint"/>
+                               <bitfield name="TOP_OVF" low="8" high="15" type="int"/>
+                               <bitfield name="BOTTOM_RPT" low="16" high="23" type="uint"/>
+                               <bitfield name="BOTTOM_OVF" low="24" high="31" type="int"/>
+                       </reg32>
+                       <reg32 offset="0x08" name="REQ_PIXELS">
+                               <bitfield name="LEFT_RIGHT" low="0" high="15" type="uint"/>
+                               <bitfield name="TOP_BOTTOM" low="16" high="31" type="uint"/>
+                       </reg32>
+               </array>
+               <reg32 offset="0x204" name="SCALE_CONFIG">
+                       <bitfield name="SCALEX_EN" pos="0" type="boolean"/>
+                       <bitfield name="SCALEY_EN" pos="1" type="boolean"/>
+                       <bitfield name="SCALEX_FILTER_COMP_0" low="8"  high="9"  type="mdp5_scale_filter"/>
+                       <bitfield name="SCALEY_FILTER_COMP_0" low="10" high="11" type="mdp5_scale_filter"/>
+                       <bitfield name="SCALEX_FILTER_COMP_1_2"  low="12" high="13" type="mdp5_scale_filter"/>
+                       <bitfield name="SCALEY_FILTER_COMP_1_2"  low="14" high="15" type="mdp5_scale_filter"/>
+                       <bitfield name="SCALEX_FILTER_COMP_3" low="16" high="17" type="mdp5_scale_filter"/>
+                       <bitfield name="SCALEY_FILTER_COMP_3" low="18" high="19" type="mdp5_scale_filter"/>
+               </reg32>
+               <reg32 offset="0x210" name="SCALE_PHASE_STEP_X"/>
+               <reg32 offset="0x214" name="SCALE_PHASE_STEP_Y"/>
+               <reg32 offset="0x218" name="SCALE_CR_PHASE_STEP_X"/>
+               <reg32 offset="0x21c" name="SCALE_CR_PHASE_STEP_Y"/>
+               <reg32 offset="0x220" name="SCALE_INIT_PHASE_X"/>
+               <reg32 offset="0x224" name="SCALE_INIT_PHASE_Y"/>
+       </array>
+
+       <array doffsets="mdp5_cfg->lm.base[0],mdp5_cfg->lm.base[1],mdp5_cfg->lm.base[2],mdp5_cfg->lm.base[3],mdp5_cfg->lm.base[4],mdp5_cfg->lm.base[5]" name="LM" length="6" stride="0x400">
+               <reg32 offset="0x000" name="BLEND_COLOR_OUT">
+                       <bitfield name="STAGE0_FG_ALPHA" pos="1" type="boolean"/>
+                       <bitfield name="STAGE1_FG_ALPHA" pos="2" type="boolean"/>
+                       <bitfield name="STAGE2_FG_ALPHA" pos="3" type="boolean"/>
+                       <bitfield name="STAGE3_FG_ALPHA" pos="4" type="boolean"/>
+                       <bitfield name="STAGE4_FG_ALPHA" pos="5" type="boolean"/>
+                       <bitfield name="STAGE5_FG_ALPHA" pos="6" type="boolean"/>
+                       <bitfield name="STAGE6_FG_ALPHA" pos="7" type="boolean"/>
+                       <bitfield name="SPLIT_LEFT_RIGHT" pos="31" type="boolean"/>
+               </reg32>
+               <reg32 offset="0x004" name="OUT_SIZE" type="reg_wh"/>
+               <reg32 offset="0x008" name="BORDER_COLOR_0"/>
+               <reg32 offset="0x010" name="BORDER_COLOR_1"/>
+               <array offsets="0x020,0x050,0x080,0x0B0,0x230,0x260,0x290" name="BLEND" length="7" stride="0x30">
+                       <reg32 offset="0x00" name="OP_MODE">
+                               <bitfield name="FG_ALPHA" low="0" high="1" type="mdp_alpha_type"/>
+                               <bitfield name="FG_INV_ALPHA"     pos="2"  type="boolean"/>
+                               <bitfield name="FG_MOD_ALPHA"     pos="3"  type="boolean"/>
+                               <bitfield name="FG_INV_MOD_ALPHA" pos="4"  type="boolean"/>
+                               <bitfield name="FG_TRANSP_EN"     pos="5"  type="boolean"/>
+                               <bitfield name="BG_ALPHA" low="8" high="9" type="mdp_alpha_type"/>
+                               <bitfield name="BG_INV_ALPHA"     pos="10" type="boolean"/>
+                               <bitfield name="BG_MOD_ALPHA"     pos="11" type="boolean"/>
+                               <bitfield name="BG_INV_MOD_ALPHA" pos="12" type="boolean"/>
+                               <bitfield name="BG_TRANSP_EN"     pos="13" type="boolean"/>
+                       </reg32>
+                       <reg32 offset="0x04" name="FG_ALPHA"/>
+                       <reg32 offset="0x08" name="BG_ALPHA"/>
+                       <reg32 offset="0x0c" name="FG_TRANSP_LOW0"/>
+                       <reg32 offset="0x10" name="FG_TRANSP_LOW1"/>
+                       <reg32 offset="0x14" name="FG_TRANSP_HIGH0"/>
+                       <reg32 offset="0x18" name="FG_TRANSP_HIGH1"/>
+                       <reg32 offset="0x1c" name="BG_TRANSP_LOW0"/>
+                       <reg32 offset="0x20" name="BG_TRANSP_LOW1"/>
+                       <reg32 offset="0x24" name="BG_TRANSP_HIGH0"/>
+                       <reg32 offset="0x28" name="BG_TRANSP_HIGH1"/>
+               </array>
+               <reg32 offset="0x0e0" name="CURSOR_IMG_SIZE">
+                       <bitfield name="SRC_W" low="0" high="15" type="uint"/>
+                       <bitfield name="SRC_H" low="16" high="31" type="uint"/>
+               </reg32>
+               <reg32 offset="0x0e4" name="CURSOR_SIZE">
+                       <bitfield name="ROI_W" low="0" high="15" type="uint"/>
+                       <bitfield name="ROI_H" low="16" high="31" type="uint"/>
+               </reg32>
+               <reg32 offset="0x0e8" name="CURSOR_XY">
+                       <bitfield name="SRC_X" low="0" high="15" type="uint"/>
+                       <bitfield name="SRC_Y" low="16" high="31" type="uint"/>
+               </reg32>
+               <reg32 offset="0x0dc" name="CURSOR_STRIDE">
+                       <bitfield name="STRIDE" low="0"  high="15"  type="uint"/>
+               </reg32>
+               <reg32 offset="0x0ec" name="CURSOR_FORMAT">
+                       <bitfield name="FORMAT" low="0"  high="2"  type="mdp5_cursor_format"/>
+               </reg32>
+               <reg32 offset="0x0f0" name="CURSOR_BASE_ADDR"/>
+               <reg32 offset="0x0f4" name="CURSOR_START_XY">
+                       <bitfield name="X_START" low="0" high="15" type="uint"/>
+                       <bitfield name="Y_START" low="16" high="31" type="uint"/>
+               </reg32>
+               <reg32 offset="0x0f8" name="CURSOR_BLEND_CONFIG">
+                       <bitfield name="BLEND_EN" pos="0" type="boolean"/>
+                       <bitfield name="BLEND_ALPHA_SEL" low="1"  high="2"  type="mdp5_cursor_alpha"/>
+                       <bitfield name="BLEND_TRANSP_EN" pos="3" type="boolean"/>
+               </reg32>
+               <reg32 offset="0x0fc" name="CURSOR_BLEND_PARAM"/>
+               <reg32 offset="0x100" name="CURSOR_BLEND_TRANSP_LOW0"/>
+               <reg32 offset="0x104" name="CURSOR_BLEND_TRANSP_LOW1"/>
+               <reg32 offset="0x108" name="CURSOR_BLEND_TRANSP_HIGH0"/>
+               <reg32 offset="0x10c" name="CURSOR_BLEND_TRANSP_HIGH1"/>
+               <reg32 offset="0x110" name="GC_LUT_BASE"/>
+       </array>
+
+       <array doffsets="mdp5_cfg->dspp.base[0],mdp5_cfg->dspp.base[1],mdp5_cfg->dspp.base[2],mdp5_cfg->dspp.base[3]" name="DSPP" length="4" stride="0x400">
+               <reg32 offset="0x000" name="OP_MODE">
+                       <bitfield name="IGC_LUT_EN" pos="0" type="boolean"/>
+                       <bitfield name="IGC_TBL_IDX" low="1" high="3" type="uint"/>
+                       <bitfield name="PCC_EN" pos="4" type="boolean"/>
+                       <bitfield name="DITHER_EN" pos="8" type="boolean"/>
+                       <bitfield name="HIST_EN" pos="16" type="boolean"/>
+                       <bitfield name="AUTO_CLEAR" pos="17" type="boolean"/>
+                       <bitfield name="HIST_LUT_EN" pos="19" type="boolean"/>
+                       <bitfield name="PA_EN" pos="20" type="boolean"/>
+                       <bitfield name="GAMUT_EN" pos="23" type="boolean"/>
+                       <bitfield name="GAMUT_ORDER" pos="24" type="boolean"/>
+               </reg32>
+               <reg32 offset="0x030" name="PCC_BASE"/>
+               <reg32 offset="0x150" name="DITHER_DEPTH"/>
+               <reg32 offset="0x210" name="HIST_CTL_BASE"/>
+               <reg32 offset="0x230" name="HIST_LUT_BASE"/>
+               <reg32 offset="0x234" name="HIST_LUT_SWAP"/>
+               <reg32 offset="0x238" name="PA_BASE"/>
+               <reg32 offset="0x2dc" name="GAMUT_BASE"/>
+               <reg32 offset="0x2b0" name="GC_BASE"/>
+       </array>
+
+       <array doffsets="mdp5_cfg->pp.base[0],mdp5_cfg->pp.base[1],mdp5_cfg->pp.base[2],mdp5_cfg->pp.base[3]" name="PP" length="4" stride="0x100">
+               <reg32 offset="0x000" name="TEAR_CHECK_EN"/>
+               <reg32 offset="0x004" name="SYNC_CONFIG_VSYNC">
+                       <bitfield name="COUNT" low="0" high="18" type="uint"/>
+                       <bitfield name="COUNTER_EN" pos="19" type="boolean"/>
+                       <bitfield name="IN_EN" pos="20" type="boolean"/>
+               </reg32>
+               <reg32 offset="0x008" name="SYNC_CONFIG_HEIGHT"/>
+               <reg32 offset="0x00c" name="SYNC_WRCOUNT">
+                       <bitfield name="LINE_COUNT" low="0" high="15" type="uint"/>
+                       <bitfield name="FRAME_COUNT" low="16" high="31" type="uint"/>
+               </reg32>
+               <reg32 offset="0x010" name="VSYNC_INIT_VAL"/>
+               <reg32 offset="0x014" name="INT_COUNT_VAL">
+                       <bitfield name="LINE_COUNT" low="0" high="15" type="uint"/>
+                       <bitfield name="FRAME_COUNT" low="16" high="31" type="uint"/>
+               </reg32>
+               <reg32 offset="0x018" name="SYNC_THRESH">
+                       <bitfield name="START" low="0" high="15" type="uint"/>
+                       <bitfield name="CONTINUE" low="16" high="31" type="uint"/>
+               </reg32>
+               <reg32 offset="0x01c" name="START_POS"/>
+               <reg32 offset="0x020" name="RD_PTR_IRQ"/>
+               <reg32 offset="0x024" name="WR_PTR_IRQ"/>
+               <reg32 offset="0x028" name="OUT_LINE_COUNT"/>
+               <reg32 offset="0x02c" name="PP_LINE_COUNT"/>
+               <reg32 offset="0x030" name="AUTOREFRESH_CONFIG"/>
+               <reg32 offset="0x034" name="FBC_MODE"/>
+               <reg32 offset="0x038" name="FBC_BUDGET_CTL"/>
+               <reg32 offset="0x03c" name="FBC_LOSSY_MODE"/>
+       </array>
+
+       <enum name="mdp5_block_size">
+               <value name="BLOCK_SIZE_64" value="0"/>
+               <value name="BLOCK_SIZE_128" value="1"/>
+       </enum>
+
+       <enum name="mdp5_rotate_mode">
+               <value name="ROTATE_0" value="0"/>
+               <value name="ROTATE_90" value="1"/>
+       </enum>
+
+       <enum name="mdp5_chroma_downsample_method">
+               <value name="DS_MTHD_NO_PIXEL_DROP" value="0"/>
+               <value name="DS_MTHD_PIXEL_DROP" value="1"/>
+       </enum>
+
+       <array doffsets="mdp5_cfg->wb.base[0],mdp5_cfg->wb.base[1],mdp5_cfg->wb.base[2],mdp5_cfg->wb.base[3],,mdp5_cfg->wb.base[4]" name="WB" length="5" stride="0x400">
+               <reg32 offset="0x000" name="DST_FORMAT">
+                       <bitfield name="DSTC0_OUT" low="0" high="1" type="uint"/>
+                       <bitfield name="DSTC1_OUT" low="2" high="3" type="uint"/>
+                       <bitfield name="DSTC2_OUT" low="4" high="5" type="uint"/>
+                       <bitfield name="DSTC3_OUT" low="6" high="7" type="uint"/>
+                       <bitfield name="DSTC3_EN" pos="8" type="boolean"/>
+                       <bitfield name="DST_BPP" low="9" high="10" type="uint"/>
+                       <bitfield name="PACK_COUNT" low="12" high="13" type="uint"/>
+                       <bitfield name="DST_ALPHA_X" pos="14" type="boolean"/>
+                       <bitfield name="PACK_TIGHT" pos="17" type="boolean"/>
+                       <bitfield name="PACK_ALIGN_MSB" pos="18" type="boolean"/>
+                       <bitfield name="WRITE_PLANES" low="19" high="20" type="uint"/>
+                       <bitfield name="DST_DITHER_EN" pos="22" type="boolean"/>
+                       <bitfield name="DST_CHROMA_SAMP" low="23" high="25" type="uint"/>
+                       <bitfield name="DST_CHROMA_SITE" low="26" high="29" type="uint"/>
+                       <bitfield name="FRAME_FORMAT" low="30" high="31" type="uint"/>
+               </reg32>
+               <reg32 offset="0x004" name="DST_OP_MODE">
+                       <bitfield name="BWC_ENC_EN" pos="0" type="boolean"/>
+                       <bitfield name="BWC_ENC_OP" low="1" high="2" type="uint"/>
+                       <bitfield name="BLOCK_SIZE" low="4" high="4" type="uint"/>
+                       <bitfield name="ROT_MODE" low="5" high="5" type="uint"/>
+                       <bitfield name="ROT_EN" pos="6" type="boolean"/>
+                       <bitfield name="CSC_EN" pos="8" type="boolean"/>
+                       <bitfield name="CSC_SRC_DATA_FORMAT" low="9" high="9" type="uint"/>
+                       <bitfield name="CSC_DST_DATA_FORMAT" low="10" high="10" type="uint"/>
+                       <bitfield name="CHROMA_DWN_SAMPLE_EN" pos="11" type="boolean"/>
+                       <bitfield name="CHROMA_DWN_SAMPLE_FORMAT" low="12" high="12" type="uint"/>
+                       <bitfield name="CHROMA_DWN_SAMPLE_H_MTHD" low="13" high="13" type="uint"/>
+                       <bitfield name="CHROMA_DWN_SAMPLE_V_MTHD" low="14" high="14" type="uint"/>
+               </reg32>
+               <reg32 offset="0x008" name="DST_PACK_PATTERN">
+                       <bitfield name="ELEMENT0" low="0" high="1" type="uint"/>
+                       <bitfield name="ELEMENT1" low="8" high="9" type="uint"/>
+                       <bitfield name="ELEMENT2" low="16" high="17" type="uint"/>
+                       <bitfield name="ELEMENT3" low="24" high="25" type="uint"/>
+               </reg32>
+               <reg32 offset="0x00c" name="DST0_ADDR"/>
+               <reg32 offset="0x010" name="DST1_ADDR"/>
+               <reg32 offset="0x014" name="DST2_ADDR"/>
+               <reg32 offset="0x018" name="DST3_ADDR"/>
+               <reg32 offset="0x01c" name="DST_YSTRIDE0">
+                       <bitfield name="DST0_YSTRIDE" low="0" high="15" type="uint"/>
+                       <bitfield name="DST1_YSTRIDE" low="16" high="31" type="uint"/>
+               </reg32>
+               <reg32 offset="0x020" name="DST_YSTRIDE1">
+                       <bitfield name="DST2_YSTRIDE" low="0" high="15" type="uint"/>
+                       <bitfield name="DST3_YSTRIDE" low="16" high="31" type="uint"/>
+               </reg32>
+               <reg32 offset="0x024" name="DST_DITHER_BITDEPTH"/>
+               <reg32 offset="0x030" name="DITHER_MATRIX_ROW0"/>
+               <reg32 offset="0x034" name="DITHER_MATRIX_ROW1"/>
+               <reg32 offset="0x038" name="DITHER_MATRIX_ROW2"/>
+               <reg32 offset="0x03c" name="DITHER_MATRIX_ROW3"/>
+               <reg32 offset="0x048" name="DST_WRITE_CONFIG"/>
+               <reg32 offset="0x050" name="ROTATION_DNSCALER"/>
+               <reg32 offset="0x060" name="N16_INIT_PHASE_X_0_3"/>
+               <reg32 offset="0x064" name="N16_INIT_PHASE_X_1_2"/>
+               <reg32 offset="0x068" name="N16_INIT_PHASE_Y_0_3"/>
+               <reg32 offset="0x06c" name="N16_INIT_PHASE_Y_1_2"/>
+               <reg32 offset="0x074" name="OUT_SIZE">
+                       <bitfield name="DST_W" low="0" high="15" type="uint"/>
+                       <bitfield name="DST_H" low="16" high="31" type="uint"/>
+               </reg32>
+               <reg32 offset="0x078" name="ALPHA_X_VALUE"/>
+               <reg32 offset="0x260" name="CSC_MATRIX_COEFF_0">
+                       <bitfield name="COEFF_11" low="0" high="12" type="uint"/>
+                       <bitfield name="COEFF_12" low="16" high="28" type="uint"/>
+               </reg32>
+               <reg32 offset="0x264" name="CSC_MATRIX_COEFF_1">
+                       <bitfield name="COEFF_13" low="0" high="12" type="uint"/>
+                       <bitfield name="COEFF_21" low="16" high="28" type="uint"/>
+               </reg32>
+               <reg32 offset="0x268" name="CSC_MATRIX_COEFF_2">
+                       <bitfield name="COEFF_22" low="0" high="12" type="uint"/>
+                       <bitfield name="COEFF_23" low="16" high="28" type="uint"/>
+               </reg32>
+               <reg32 offset="0x26c" name="CSC_MATRIX_COEFF_3">
+                       <bitfield name="COEFF_31" low="0" high="12" type="uint"/>
+                       <bitfield name="COEFF_32" low="16" high="28" type="uint"/>
+               </reg32>
+               <reg32 offset="0x270" name="CSC_MATRIX_COEFF_4">
+                       <bitfield name="COEFF_33" low="0" high="12" type="uint"/>
+               </reg32>
+               <array offset="0x274" name="CSC_COMP_PRECLAMP" length="3" stride="4">
+                       <reg32 offset="0" name="REG">
+                               <bitfield name="HIGH"  low="0"  high="7"  type="uint"/>
+                               <bitfield name="LOW"  low="8"  high="15"  type="uint"/>
+                       </reg32>
+               </array>
+               <array offset="0x280" name="CSC_COMP_POSTCLAMP" length="3" stride="4">
+                       <reg32 offset="0" name="REG">
+                               <bitfield name="HIGH"  low="0"  high="7"  type="uint"/>
+                               <bitfield name="LOW"  low="8"  high="15"  type="uint"/>
+                       </reg32>
+               </array>
+               <array offset="0x28c" name="CSC_COMP_PREBIAS" length="3" stride="4">
+                       <reg32 offset="0" name="REG">
+                               <bitfield name="VALUE"  low="0"  high="8"  type="uint"/>
+                       </reg32>
+               </array>
+               <array offset="0x298" name="CSC_COMP_POSTBIAS" length="3" stride="4">
+                       <reg32 offset="0" name="REG">
+                               <bitfield name="VALUE"  low="0"  high="8"  type="uint"/>
+                       </reg32>
+               </array>
+       </array>
+
+       <array doffsets="mdp5_cfg->intf.base[0],mdp5_cfg->intf.base[1],mdp5_cfg->intf.base[2],mdp5_cfg->intf.base[3],mdp5_cfg->intf.base[4]" name="INTF" length="5" stride="0x200">
+               <reg32 offset="0x000" name="TIMING_ENGINE_EN"/>
+               <reg32 offset="0x004" name="CONFIG"/>
+               <reg32 offset="0x008" name="HSYNC_CTL">
+                       <bitfield name="PULSEW" low="0" high="15" type="uint"/>
+                       <bitfield name="PERIOD" low="16" high="31" type="uint"/>
+               </reg32>
+               <reg32 offset="0x00c" name="VSYNC_PERIOD_F0" type="uint"/>
+               <reg32 offset="0x010" name="VSYNC_PERIOD_F1" type="uint"/>
+               <reg32 offset="0x014" name="VSYNC_LEN_F0" type="uint"/>
+               <reg32 offset="0x018" name="VSYNC_LEN_F1" type="uint"/>
+               <reg32 offset="0x01c" name="DISPLAY_VSTART_F0" type="uint"/>
+               <reg32 offset="0x020" name="DISPLAY_VSTART_F1" type="uint"/>
+               <reg32 offset="0x024" name="DISPLAY_VEND_F0" type="uint"/>
+               <reg32 offset="0x028" name="DISPLAY_VEND_F1" type="uint"/>
+               <reg32 offset="0x02c" name="ACTIVE_VSTART_F0">
+                       <bitfield name="VAL" low="0" high="30" type="uint"/>
+                       <bitfield name="ACTIVE_V_ENABLE" pos="31" type="boolean"/>
+               </reg32>
+               <reg32 offset="0x030" name="ACTIVE_VSTART_F1">
+                       <bitfield name="VAL" low="0" high="30" type="uint"/>
+               </reg32>
+               <reg32 offset="0x034" name="ACTIVE_VEND_F0" type="uint"/>
+               <reg32 offset="0x038" name="ACTIVE_VEND_F1" type="uint"/>
+               <reg32 offset="0x03c" name="DISPLAY_HCTL">
+                       <bitfield name="START" low="0"  high="15" type="uint"/>
+                       <bitfield name="END"   low="16" high="31" type="uint"/>
+               </reg32>
+               <reg32 offset="0x040" name="ACTIVE_HCTL">
+                       <bitfield name="START" low="0"  high="14" type="uint"/>
+                       <bitfield name="END"   low="16" high="30" type="uint"/>
+                       <bitfield name="ACTIVE_H_ENABLE" pos="31" type="boolean"/>
+               </reg32>
+               <reg32 offset="0x044" name="BORDER_COLOR"/>
+               <reg32 offset="0x048" name="UNDERFLOW_COLOR"/>
+               <reg32 offset="0x04c" name="HSYNC_SKEW"/>
+               <reg32 offset="0x050" name="POLARITY_CTL">
+                       <bitfield name="HSYNC_LOW" pos="0" type="boolean"/>
+                       <bitfield name="VSYNC_LOW" pos="1" type="boolean"/>
+                       <bitfield name="DATA_EN_LOW" pos="2" type="boolean"/>
+               </reg32>
+               <reg32 offset="0x054" name="TEST_CTL"/>
+               <reg32 offset="0x058" name="TP_COLOR0"/>
+               <reg32 offset="0x05c" name="TP_COLOR1"/>
+               <reg32 offset="0x084" name="DSI_CMD_MODE_TRIGGER_EN"/>
+               <reg32 offset="0x090" name="PANEL_FORMAT" type="mdp5_format"/>
+               <reg32 offset="0x0a8" name="FRAME_LINE_COUNT_EN"/>
+               <reg32 offset="0x0ac" name="FRAME_COUNT"/>
+               <reg32 offset="0x0b0" name="LINE_COUNT"/>
+               <reg32 offset="0x0f0" name="DEFLICKER_CONFIG"/>
+               <reg32 offset="0x0f4" name="DEFLICKER_STRNG_COEFF"/>
+               <reg32 offset="0x0f8" name="DEFLICKER_WEAK_COEFF"/>
+               <reg32 offset="0x100" name="TPG_ENABLE"/>
+               <reg32 offset="0x104" name="TPG_MAIN_CONTROL"/>
+               <reg32 offset="0x108" name="TPG_VIDEO_CONFIG"/>
+               <reg32 offset="0x10c" name="TPG_COMPONENT_LIMITS"/>
+               <reg32 offset="0x110" name="TPG_RECTANGLE"/>
+               <reg32 offset="0x114" name="TPG_INITIAL_VALUE"/>
+               <reg32 offset="0x118" name="TPG_BLK_WHITE_PATTERN_FRAME"/>
+               <reg32 offset="0x11c" name="TPG_RGB_MAPPING"/>
+       </array>
+
+       <array doffsets="mdp5_cfg->ad.base[0],mdp5_cfg->ad.base[1]" name="AD" length="2" stride="0x200">
+               <reg32 offset="0x000" name="BYPASS"/>
+               <reg32 offset="0x004" name="CTRL_0"/>
+               <reg32 offset="0x008" name="CTRL_1"/>
+               <reg32 offset="0x00c" name="FRAME_SIZE"/>
+               <reg32 offset="0x010" name="CON_CTRL_0"/>
+               <reg32 offset="0x014" name="CON_CTRL_1"/>
+               <reg32 offset="0x018" name="STR_MAN"/>
+               <reg32 offset="0x01c" name="VAR"/>
+               <reg32 offset="0x020" name="DITH"/>
+               <reg32 offset="0x024" name="DITH_CTRL"/>
+               <reg32 offset="0x028" name="AMP_LIM"/>
+               <reg32 offset="0x02c" name="SLOPE"/>
+               <reg32 offset="0x030" name="BW_LVL"/>
+               <reg32 offset="0x034" name="LOGO_POS"/>
+               <reg32 offset="0x038" name="LUT_FI"/>
+               <reg32 offset="0x07c" name="LUT_CC"/>
+               <reg32 offset="0x0c8" name="STR_LIM"/>
+               <reg32 offset="0x0cc" name="CALIB_AB"/>
+               <reg32 offset="0x0d0" name="CALIB_CD"/>
+               <reg32 offset="0x0d4" name="MODE_SEL"/>
+               <reg32 offset="0x0d8" name="TFILT_CTRL"/>
+               <reg32 offset="0x0dc" name="BL_MINMAX"/>
+               <reg32 offset="0x0e0" name="BL"/>
+               <reg32 offset="0x0e8" name="BL_MAX"/>
+               <reg32 offset="0x0ec" name="AL"/>
+               <reg32 offset="0x0f0" name="AL_MIN"/>
+               <reg32 offset="0x0f4" name="AL_FILT"/>
+               <reg32 offset="0x0f8" name="CFG_BUF"/>
+               <reg32 offset="0x100" name="LUT_AL"/>
+               <reg32 offset="0x144" name="TARG_STR"/>
+               <reg32 offset="0x148" name="START_CALC"/>
+               <reg32 offset="0x14c" name="STR_OUT"/>
+               <reg32 offset="0x154" name="BL_OUT"/>
+               <reg32 offset="0x158" name="CALC_DONE"/>
+       </array>
+</domain>
+
+</database>
diff --git a/src/freedreno/registers/mdp/mdp_common.xml b/src/freedreno/registers/mdp/mdp_common.xml
new file mode 100644 (file)
index 0000000..226596a
--- /dev/null
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<database xmlns="http://nouveau.freedesktop.org/"
+xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+xsi:schemaLocation="http://nouveau.freedesktop.org/ rules-ng.xsd">
+
+
+<!-- random bits that seem same between mdp4 and mdp5 (ie. not much) -->
+
+<enum name="mdp_chroma_samp_type">
+    <value name="CHROMA_FULL"  value="0"/>
+    <value name="CHROMA_H2V1" value="1"/>
+    <value name="CHROMA_H1V2" value="2"/>
+    <value name="CHROMA_420"  value="3"/>
+</enum>
+
+<enum name="mdp_fetch_type">
+    <value name="MDP_PLANE_INTERLEAVED"   value="0"/>
+    <value name="MDP_PLANE_PLANAR"        value="1"/>
+    <value name="MDP_PLANE_PSEUDO_PLANAR" value="2"/>
+</enum>
+
+<enum name="mdp_mixer_stage_id">
+       <value name="STAGE_UNUSED" value="0"/>
+       <value name="STAGE_BASE" value="1"/>
+       <value name="STAGE0" value="2"/>   <!-- zorder 0 -->
+       <value name="STAGE1" value="3"/>   <!-- zorder 1 -->
+       <value name="STAGE2" value="4"/>   <!-- zorder 2 -->
+       <value name="STAGE3" value="5"/>   <!-- zorder 3 -->
+       <value name="STAGE4" value="6"/>   <!-- zorder 4 -->
+       <value name="STAGE5" value="7"/>   <!-- zorder 5 -->
+       <value name="STAGE6" value="8"/>   <!-- zorder 6 -->
+       <value name="STAGE_MAX" value="8"/> <!-- maximum zorder -->
+</enum>
+
+<enum name="mdp_alpha_type">
+       <value name="FG_CONST" value="0"/>
+       <value name="BG_CONST" value="1"/>
+       <value name="FG_PIXEL" value="2"/>
+       <value name="BG_PIXEL" value="3"/>
+</enum>
+
+<enum name="mdp_component_type">
+        <value name="COMP_0" value="0"/>       <!-- Y component -->
+        <value name="COMP_1_2" value="1"/>     <!-- Cb/Cr comp. -->
+        <value name="COMP_3" value="2"/>       <!-- Trans comp. -->
+        <value name="COMP_MAX" value="3"/>
+</enum>
+
+<enum name="mdp_bpc">
+       <brief>bits per component (non-alpha channel)</brief>
+       <value name="BPC1" value="0"/> <!-- 1 bit -->
+       <value name="BPC5" value="1"/> <!-- 2 bits -->
+       <value name="BPC6" value="2"/> <!-- 6 bits -->
+       <value name="BPC8" value="3"/> <!-- 8 bits -->
+</enum>
+
+<enum name="mdp_bpc_alpha">
+       <brief>bits per component (alpha channel)</brief>
+       <value name="BPC1A" value="0"/> <!-- 1 bit -->
+       <value name="BPC4A" value="1"/> <!-- 2 bits -->
+       <value name="BPC6A" value="2"/> <!-- 6 bits -->
+       <value name="BPC8A" value="3"/> <!-- 8 bits -->
+</enum>
+
+<bitset name="reg_wh" inline="yes">
+    <bitfield name="HEIGHT" low="16" high="31" type="uint"/>
+    <bitfield name="WIDTH" low="0" high="15" type="uint"/>
+</bitset>
+
+<bitset name="reg_xy" inline="yes">
+    <bitfield name="Y" low="16" high="31" type="uint"/>
+    <bitfield name="X" low="0" high="15" type="uint"/>
+</bitset>
+
+<bitset name="mdp_unpack_pattern" inline="yes">
+       <bitfield name="ELEM0" low="0"  high="7"/>
+       <bitfield name="ELEM1" low="8"  high="15"/>
+       <bitfield name="ELEM2" low="16" high="23"/>
+       <bitfield name="ELEM3" low="24" high="31"/>
+</bitset>
+
+</database>
+
index 26335ce608d3a9e8e23653d4d855faf08ab77979..d38e16612626eb247ae6753d433cff5ba591d2be 100644 (file)
@@ -33,7 +33,7 @@ foreach f : xml_files
   _name = f + '.h'
   freedreno_xml_header_files += custom_target(
     _name,
-    input : ['gen_header.py', f],
+    input : ['gen_header.py', 'adreno/' + f],
     output : _name,
     command : [prog_python, '@INPUT@'],
     capture : true,
@@ -42,14 +42,14 @@ endforeach
 
 freedreno_xml_header_files += custom_target(
     'a6xx-pack.xml.h',
-    input : ['gen_header.py', 'a6xx.xml'],
+    input : ['gen_header.py', 'adreno/a6xx.xml'],
     output : 'a6xx-pack.xml.h',
     command : [prog_python, '@INPUT@', '--pack-structs'],
     capture : true,
   )
 freedreno_xml_header_files += custom_target(
     'adreno-pm4-pack.xml.h',
-     input : ['gen_header.py', 'adreno_pm4.xml'],
+     input : ['gen_header.py', 'adreno/adreno_pm4.xml'],
      output : 'adreno-pm4-pack.xml.h',
      command : [prog_python, '@INPUT@', '--pack-structs'],
      capture : true,
diff --git a/src/freedreno/registers/msm.xml b/src/freedreno/registers/msm.xml
new file mode 100644 (file)
index 0000000..2fbf5d0
--- /dev/null
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<database xmlns="http://nouveau.freedesktop.org/"
+xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+xsi:schemaLocation="http://nouveau.freedesktop.org/ rules-ng.xsd">
+<import file="freedreno_copyright.xml"/>
+
+<doc>
+       Register definitions for the display related hw blocks on
+       msm/snapdragon
+</doc>
+
+<enum name="chipset">
+       <value name="MDP40"/>
+       <value name="MDP50"/>
+</enum>
+
+<import file="mdp/mdp4.xml"/>
+<import file="mdp/mdp5.xml"/>
+<import file="dsi/dsi.xml"/>
+<import file="dsi/sfpb.xml"/>
+<import file="dsi/mmss_cc.xml"/>
+<import file="hdmi/qfprom.xml"/>
+<import file="hdmi/hdmi.xml"/>
+<import file="edp/edp.xml"/>
+
+</database>
diff --git a/src/freedreno/registers/rules-ng-ng.txt b/src/freedreno/registers/rules-ng-ng.txt
new file mode 100644 (file)
index 0000000..8b1de10
--- /dev/null
@@ -0,0 +1,703 @@
+1. Introduction
+
+rules-ng is a package consisting of a database of nvidia GPU registers in XML
+format, and tools made to parse this database and do useful work with it. It
+is in mostly usable state, but there are some annoyances that prevent its
+adoption as the home of all nouveau documentation.
+
+Note that this document and rules-ng understands "register" quite liberally as
+"anything that has an address and can have a value in it, written to it, or
+read to it". This includes conventional MMIO registers, as well as fields of
+memory structures and grobj methods.
+
+Its parsable XML format is supposed to solve three problems:
+
+ - serve as actual documentation for the known registers: supports attaching
+   arbitrary text in <doc> tags and generating HTML for easy reading.
+ - name -> hex translation: supports generating C headers that #define all
+   known registers, bitfields and enum values as C constants.
+ - hex -> name translation: you tell it the address or address+value of a
+   register, and it decodes the address to its symbolic name, and the value to
+   its constituting bitfields, if any. Useful for decoding mmio-traces /
+   renouveau dumps, as well as standalone use.
+
+What's non-trivial about all this [ie. why rules-ng is not a long series of
+plain address - name - documentation tuples]:
+
+ - The registers may be split into bitfields, each with a different purpose
+   and name [and separate documentation].
+ - The registers/bitfields may accept values from a predefined set [enum],
+   each with a different meaning. Each value also has a name and
+   documentation.
+ - The registers may come in multiple copies, forming arrays. They can also
+   form logical groups. And these groups can also come in multiple copies,
+   forming larger arrays... and you get a hierarchical structure.
+ - There are multiple different GPU chipsets. The available register set
+   changed between these chipsets - sometimes only a few registers, sometimes
+   half the card was remade from scratch. More annoyingly, sometimes some
+   registers move from one place to another, but are otherwise unchanged.
+   Also [nvidia-specific], new grobj classes are sometimes really just new
+   revisions of a base class with a few methods changed. In both of these
+   cases, we want to avoid duplication as much as possible.
+
+2. Proposed new XML format
+
+2.1. General tags
+
+Root tag is <database>. There is one per the whole file and it should contain
+everything else.
+
+<brief> and <doc> are tags that can appear inside any other tag, and document
+whatever it defines. <brief> is supposed to be a short one-line description
+giving a rough idea what a given item is for if no sufficiently descriptive
+name was used. <doc> can be of any length, can contain some html and html-like
+tags, and is supposed to describe a given item in as much detail as needed.
+There should be at most one <doc> and at most one <brief> tag for any parent.
+
+Tags that define top-level entities include:
+
+ <domain>: Declares an addressing space containing registers
+ <group>: Declares a block of registers, expected to be included by one or
+          more <domain>s
+ <bitset>: Declares a list of applicable bitfields for some register
+ <enum>: Declares a list of related symbolic values. Can describe params to
+         a register/bitfield, or discriminate between card variants.
+
+Each of these has an associated global name used to refer to them from other
+parts of database. As a convenience, and to allow related stuff to be kept
+together, the top-level entities are allowed to occur pretty much anywhere
+inside the XML file except inside <doc> tags. This implies no scoping,
+however: the effect is the same as putting the entity right below <database>.
+If two top-level elements of the same type and name are defined, they'll be
+merged into a single one, as if contents of one were written right after
+contents of the other. All attributes of the merged tags need to match.
+
+Another top-level tag that can be used anywhere is the <import> tag. It's used
+like <import file="foo.xml"/> and makes all of foo.xml's definitions available
+to the containing file. If a single file is <import>ed more than one time, all
+<import>s other than the first are ignored.
+
+2.2. Domains
+
+All register definitions ultimately belong to a <domain>. <domain> is
+basically just a single address space. So we'll have a domain for the MMIO
+BAR, one for each type of memory structure we need to describe, a domain for
+the grobj/FIFO methods, and a domain for each indirect index-data pair used to
+access something useful. <domain> can have the following attributes:
+
+ - name [required]: The name of the domain.
+ - width [optional]: the size, in bits, of a single addressable unit. This is
+   8 by default for usual byte-addressable memory, but 32 can be useful
+   occasionally for indexed spaces of 32-bit cells. Values sane enough to
+   support for now include 8, 16, 32, 64.
+ - size [optional]: total number of addressable units it spans. Can be
+   undefined if you don't know it or it doesn't make sense. As a special
+   exception to the merging rules, size attribute need not be specified on all
+   tags that will result in a merged domain: tags with size can be merged with
+   tags without size, resulting in merged domain that has size. Error only
+   happens when the merged domains both have sizes, and the sizes differ.
+ - bare [optional]: if set to "no", all children items will have the domain
+   name prepended to their names. If set to "yes", such prefixing doesn't
+   happen. Default is "no".
+ - prefix [optional]: selects the string that should be prepended to name
+   of every child item. The special value "none" means no prefix, and is the
+   default. All other values are looked up as <enum> names and, for each child
+   item, its name is prefixed with name of the earliest variant in the given
+   enum that supports given item.
+
+<domain name="NV_MMIO" size="0x1000000" prefix="chipset" bare="yes">
+       <reg32 offset="0" name="PMC_BOOT_0" />
+       <reg32 offset="4" name="PMC_BOOT_1" varset="chipset" variants="NV10-" />
+       <reg32 offset="0x100" name="PMC_INTR" />
+</domain>
+
+Describes a space with 0x1000000 of 8-bit addressable cells. Cells 0-3 belong
+to NV04_PMC_BOOT_0 register, 4-7 belong to NV10_PMC_BOOT_1 register,
+0x100-0x103 belong to NV04_PMC_INTR register, and remaining cells are either
+unused or unknown. The generated .h definitions are:
+
+#define NV_MMIO__SIZE          0x1000000
+#define NV04_PMC_BOOT_0                0
+#define NV10_PMC_BOOT_1                4
+#define NV04_PMC_INTR          0x100
+
+<domain name="NV50_PFB_VM_TRAP" width="32" size="6">
+       <reg32 offset="0" name="STATUS" />
+       <reg32 offset="1" name="CHANNEL" />
+       <reg32 offset="2" name="UNK2" />
+       <reg32 offset="3" name="ADDRLOW" />
+       <reg32 offset="4" name="ADDRMID" />
+       <reg32 offset="5" name="ADDRHIGH" />
+</domain>
+
+Defines a 6-cell address space with each cell 32 bits in size and
+corresponding to a single register. Definitions are:
+
+#define NV50_PFB_VM_TRAP__SIZE         6
+#define NV50_PFB_VM_TRAP_STATUS                0
+#define NV50_PFB_VM_TRAP_CHANNEL       1
+#define NV50_PFB_VM_TRAP_UNK2          2
+#define NV50_PFB_VM_TRAP_ADDRLOW       3
+#define NV50_PFB_VM_TRAP_ADDRMID       4
+#define NV50_PFB_VM_TRAP_ADDRHIGH      5
+
+2.3. Registers
+
+What we really want all the time is defining registers. This is done with
+<reg8>, <reg16>, <reg32> or <reg64> tags. The register of course takes
+reg_width / domain_width cells in the domain. It's an error to define a
+register with smaller width than the domain it's in. The <reg*> attributes
+are:
+
+ - name [required]: the name of the register
+ - offset [required]: the offset of the register
+ - access [optional]: "rw" [default], "r", or "w" to mark the register as
+   read-write, read-only, or write-only. Only makes sense for real MMIO
+   domains.
+ - varset [optional]: the <enum> to choose from by the variant attribute.
+   Defaults to first <enum> used in currently active prefix.
+ - variants [optional]: space-separated list of and variant ranges that this
+   register is present on. The items of this list can be:
+    - var1: a single variant
+    - var1-var2: all variants starting with var1 up to and including var2
+    - var1:var2: all variants starting with var1 up to, but not including var2
+    - :var1: all variants before var1
+    - -var1: all variants up to and including var1
+    - var1-: all variants starting from var1
+ - type [optional]: How to interpret the contents of this register.
+    - "uint": unsigned decimal integer
+    - "int": signed decimal integer
+    - "hex": unsigned hexadecimal integer
+    - "float" IEEE 16-bit, 32-bit or 64-bit floating point format, depending
+      on register/bitfield size
+    - "boolean": a boolean value: 0 is false, 1 is true
+    - any defined enum name: value from that anum
+    - "enum": value from the inline <value> tags in this <reg*>
+    - any defined bitset name: value decoded further according to that bitset
+    - "bitset": value decoded further according to the inline <bitfield>
+      tags
+    - any defined domain name: value decoded as an offset in that domain
+   The default is "bitset" if there are inline <bitfield> tags present,
+   otherwise "enum" if there are inline <value> tags present, otherwise
+   "boolean" if this is a bitfield with width 1, otherwise "hex".
+ - shr [optional]: the value in this register is the real value shifted right
+   by this many bits. Ie. for register with shr="12", register value 0x1234
+   should be interpreted as 0x1234000. May sound too specific, but happens
+   quite often in nvidia hardware.
+ - length [optional]: if specified to be other than 1, the register is treated
+   as if it was enclosed in an anonymous <stripe> with corresponding length
+   and stride attributes, except the __ESIZE and __LEN stripe defines are
+   emitted with the register's name. If not specified, defaults to 1.
+ - stride [optional]: the stride value to use if length is non-1. Defaults to
+   the register's size in cells.
+
+The definitions emitted for a non-stripe register include only its offset and
+shr value. Other informations are generally expected to be a part of code
+logic anyway:
+
+<reg32 offset="0x400784" name="PGRAPH_CTXCTL_SWAP" shr="12" />
+
+results in
+
+#define PGRAPH_CTXCTL_SWAP     0x400784
+#define PGRAPH_CTXCTL_SWAP__SHR        12
+
+For striped registers, __LEN and __ESIZE definitions like <stripe> are emitted
+too:
+
+<!-- in a 8-bit domain -->
+<reg32 offset="0x0600" name="NV50_COMPUTE_USER_PARAM" length="64" />
+
+results in
+
+#define NV50_COMPUTE_USER_PARAM(i)     (0x600 + (i)*4)
+#define NV50_COMPUTE_USER_PARAM__LEN   64
+#define NV50_COMPUTE_USER_PARAM__ESIZE 4
+
+The <reg*> tags can also contain either bitfield definitions, or enum value
+definitions.
+
+2.4. Enums and variants
+
+Enum is, basically, a set of values. They're defined by <enum> tag with the
+following attributes:
+
+ - name [required]: an identifying name.
+ - inline [optional]: "yes" or "no", with "no" being the default. Selects if
+   this enum should emit its own definitions in .h file, or be inlined into
+   any <reg*> / <bitfield> definitions that reference it.
+ - bare [optional]: only for no-inline enums, behaves like bare attribute
+   to <domain>
+ - prefix [optional]: only for no-inline enums, behaves like prefix attribute
+   to <domain>.
+
+The <enum> tag contains <value> tags with the following attributes:
+
+ - name [required]: the name of the value
+ - value [optional]: the value
+ - varset [optional]: like in <reg*>
+ - variants [optional]: like in <reg*>
+
+The <enum>s are referenced from inside <reg*> and <bitfield> tags by setting
+the type attribute to the name of the enum. For single-use enums, the <value>
+tags can also be written directly inside <reg*> tag.
+
+<enum name="SURFACE_FORMAT" prefix="chipset">
+       <value value="6" name="A8R8G8B8" />
+       <value value="0x12" name="A8R8G8B8_RECT" variants="NV10-" />
+</enum>
+
+<enum name="gl_shade_model" inline="yes">
+       <value value="0x1d00" name="FLAT" />
+       <value value="0x1d01" name="SMOOTH" />
+</enum>
+
+<reg32 offset="0x1234" name="TEXTURE_FORMAT" type="SURFACE_FORMAT" />
+<reg32 offset="0x1238" name="SHADE_MODEL" type="gl_shade_model" />
+<reg32 offset="0x123c" name="PATTERN_SELECT">
+       <value value="1" name="MONO" />
+       <value value="2" name="COLOR" />
+</reg32>
+
+Result:
+
+#define NV04_SURFACE_FORMAT_A8R8G8B8           6
+#define NV04_SURFACE_FORMAT_A8R8G8B8_RECT      0x12
+#define TEXTURE_FORMAT                         0x1234
+#define SHADE_MODEL                            0x1238
+#define     SHADE_MODEL_FLAT                   0x1d00
+#define     SHADE_MODEL_SMOOTH                 0x1d01
+#define PATTERN_SELECT                         0x123c
+#define     PATTERN_SELECT_MONO                        1
+#define     PATTERN_SELECT_COLOR               2
+
+Another use for enums is describing variants: slightly different versions of
+cards, objects, etc. The varset and variant attributes of most tags allow
+defining items that are only present when you're dealing with something of the
+matching variant. The variant space is "multidimensional" - so you can have
+a variant "dimension" representing what GPU chipset you're using at the
+moment, and another dimension representing what grobj class you're dealing
+with [taken from another enum]. Both of these can be independent.
+
+<enum name="chipset">
+       <brief>The chipset of the card</brief>
+       <value name="NV04">
+               <brief>RIVA TNT</brief>
+       </value>
+       <value name="NV05">
+               <brief>RIVA TNT2</brief>
+       </value>
+       <value name="NV10">
+               <brief>GeForce 256</brief>
+       </value>
+       <value name="NV50">
+               <brief>G80: GeForce 8800 GTX, Tesla *870, ...</brief>
+       </value>
+       <value name="NV84">
+               <brief>G84: GeForce 8600 GT, ...</brief>
+       </value>
+       <value name="NVA0">
+               <brief>G200: GeForce 260 GTX, Tesla C1060, ...</brief>
+       </value>
+       <value name="NVA5">
+               <brief>GT216: GeForce GT 220</brief>
+       </value>
+</enum>
+
+If enabled for a given domain, the name of the earliest variant to support
+a given register / bitfield / value / whatever will be automatically prepended
+to its name. For this purpose, "earliest" is defined as "comes first in the
+XML file".
+
+<enum>s used for this purpose can still be used as normal enums. And can even
+have variant-specific values referencing another <enum>. Example:
+
+<enum name="grobj-class" bare="yes" prefix="chipset">
+       <value name="MEMORY_TO_MEMORY_FORMAT" value="0x0039" variants=":NV50" />
+       <value name="MEMORY_TO_MEMORY_FORMAT" value="0x5039" variants="NV50-" />
+       <value name="2D" value="0x502d" variants="NV50-" />
+       <value name="TCL" value="0x5097" variants="NV50:NVA0" />
+       <value name="TCL" value="0x8297" variants="NV84" />
+       <value name="COMPUTE" value="0x50c0" variants="NV50-" />
+</enum>
+
+In generated .h file, this will result in:
+
+#define NV04_MEMORY_TO_MEMORY_FORMAT   0x0039
+#define NV50_MEMORY_TO_MEMORY_FORMAT   0x5039
+#define NV50_2D                                0x502d
+#define NV50_TCL                       0x5097
+#define NV84_TCL                       0x8297
+#define NV50_COMPUTE                   0x50c0
+
+2.5. Bitfields
+
+Often, registers store not a single full-width value, but are split into
+bitfields. Like values can be grouped in enums, bitfields can be called in
+bitsets. The <bitset> tag has the same set of attributes as <enum> tag, and
+contains <bitfield> tags with the following attributes:
+
+ - name [required]: name of the bitfield
+ - low [required]: index of the lowest bit belonging to this bitfield. bits
+   are counted from 0, LSB-first.
+ - high [required]: index of the highest bit belonging to this bitfield.
+ - varset [optional]: like in <reg*>
+ - variants [optional]: like in <reg*>
+ - type [optional]: like in <reg*>
+ - shr [optional]: like in <reg*>
+
+Like <value>s, <bitfield>s are also allowed to be written directly inside
+<reg*> tags.
+
+<bitfield>s themselves can contain <value>s. The defines generated for
+<bitfield>s include "name__MASK" equal to the bitmask corresponding to given
+bitfield, "name__SHIFT" equal to the low attribute, "name__SHR" equal to
+the shr attribute [if defined]. Single-bit bitfields with type "boolean" are
+treated specially, and get "name" defined to the bitmask instead. If the
+bitfield contains any <value>s, <bitfield>s, or references an inlined
+enum/bitset, defines for them are also generated, pre-shifted to the correct
+position. Example:
+
+<enum name="nv03_operation" inline="yes">
+       <value value="0" name="SRCCOPY_AND" />  
+       <value value="1" name="ROP_AND" />      
+       <value value="2" name="BLEND_AND" />    
+       <value value="3" name="SRCCOPY" />      
+       <value value="4" name="SRCCOPY_PRE" />
+       <value value="5" name="BLEND_PRE" />
+</enum>
+
+<bitset name="NV04_GROBJ_1">
+       <bitfield high="7" low="0" name="GRCLASS" />
+       <bitfield high="12" low="12" name="CHROMA_KEY" />
+       <bitfield high="13" low="13" name="USER_CLIP" />
+       <bitfield high="14" low="14" name="SWIZZLE" />
+       <bitfield high="17" low="15" name="PATCH_CONFIG" type="nv03_operation" />
+       <!-- ... -->
+</bitset>
+
+<bitset name="xy16" inline="yes">
+       <bitfield high="15" low="0" name="X" />
+       <bitfield high="31" low="16" name="Y" />
+</bitset>
+
+<bitset name="nv50_vic" inline="yes">
+       <bitfield high="0" low="0" name="X"/>
+       <bitfield high="1" low="1" name="Y"/>
+       <bitfield high="2" low="2" name="Z"/>
+       <bitfield high="3" low="3" name="W"/>
+</bitset>
+
+<reg32 offset="0x40014c" name="PGRAPH_CTX_SWITCH_1" type="NV04_GROBJ_1" />
+
+<reg32 offset="0x0404" name="FORMAT">
+       <bitfield high="15" low="0" name="PITCH" />
+       <bitfield high="23" low="16" name="ORIGIN" />
+       <bitfield high="31" low="24" name="FILTER" />
+</reg32>
+
+<reg32 offset="0x040c" name="POINT" type="xy16" />
+
+<reg32 offset="0x1988" name="FP_INTERPOLANT_CTRL">
+       <bitfield name="UMASK" high="31" low="24" type="nv50_vic"/>
+       <bitfield name="COUNT_NONFLAT" high="23" low="16" type="int"/>
+       <bitfield name="OFFSET" high="15" low="8" type="int"/>
+       <bitfield name="COUNT" high="7" low="0" type="int"/>
+</reg32>
+
+Result:
+
+#define NV04_GROBJ_1_GRCLASS__MASK             0x000000ff
+#define NV04_GROBJ_1_GRCLASS__SHIFT            0
+#define NV04_GROBJ_1_CHROMA_KEY                        0x00001000
+#define NV04_GROBJ_1_USER_CLIP                 0x00002000
+#define NV04_GROBJ_1_SWIZZLE                   0x00004000
+#define NV04_GROBJ_1_PATCH_CONFIG__MASK                0x00038000
+#define NV04_GROBJ_1_PATCH_CONFIG__SHIFT       15
+#define NV04_GROBJ_1_PATCH_CONFIG_SRCCOPY_AND  0x00000000
+#define NV04_GROBJ_1_PATCH_CONFIG_ROP_AND      0x00008000
+#define NV04_GROBJ_1_PATCH_CONFIG_BLEND_AND    0x00010000
+#define NV04_GROBJ_1_PATCH_CONFIG_SRCCOPY      0x00018000
+#define NV04_GROBJ_1_PATCH_CONFIG_SRCCOPY_PRE  0x00020000
+#define NV04_GROBJ_1_PATCH_CONFIG_BLEND_PRE    0x00028000
+
+#define PGRAPH_CTX_SWITCH_1                    0x40014c
+
+#define FORMAT                 0x0404
+#define FORMAT_PITCH__MASK     0x0000ffff
+#define FORMAT_PITCH__SHIFT    0
+#define FORMAT_ORIGIN__MASM    0x00ff0000
+#define FORMAT_ORIGIN__SHIFT   16
+#define FORMAT_FILTER__MASK    0xff000000
+#define FORMAT_FILTER__SHIFT   24
+
+#define POINT          0x040c
+#define POINT_X                0x0000ffff
+#define POINT_X__SHIFT         0
+#define POINT_Y                0xffff0000
+#define POINT_Y__SHIFT         16
+
+#define FP_INTERPOLANT_CTRL                            0x00001988
+#define FP_INTERPOLANT_CTRL_UMASK__MASK                        0xff000000
+#define FP_INTERPOLANT_CTRL_UMASK__SHIFT               24
+#define FP_INTERPOLANT_CTRL_UMASK_X                    0x01000000
+#define FP_INTERPOLANT_CTRL_UMASK_Y                    0x02000000
+#define FP_INTERPOLANT_CTRL_UMASK_Z                    0x04000000
+#define FP_INTERPOLANT_CTRL_UMASK_W                    0x08000000
+#define FP_INTERPOLANT_CTRL_COUNT_NONFLAT__MASK                0x00ff0000
+#define FP_INTERPOLANT_CTRL_COUNT_NONFLAT__SHIFT       16
+#define FP_INTERPOLANT_CTRL_OFFSET__MASK               0x0000ff00
+#define FP_INTERPOLANT_CTRL_OFFSET__SHIFT              8
+#define FP_INTERPOLANT_CTRL_COUNT__MASK                        0x000000ff
+#define FP_INTERPOLANT_CTRL_COUNT__SHIFT               0
+
+2.6. Arrays and stripes.
+
+Sometimes you have multiple copies of a register. Sometimes you actually have
+multiple copies of a whole set of registers. And sometimes this set itself
+contains multiple copies of something. This is what <array>s are for. The
+<array> represents "length" units, each of size "stride" packed next to each
+other starting at "offset". Offsets of everything inside the array are
+relative to start of an element of the array. The <array> attributes include:
+
+ - name [required]: name of the array, also used as prefix for all items
+   inside it
+ - offset [required]: starting offset of the array.
+ - stride [required]: size of a single element of the array, as well as the
+   difference between offsets of two neighboring elements
+ - length [required]: Number of elements in the array
+ - varset [optional]: As in <reg*>
+ - variants [optional]: As in <reg*>
+
+The definitions emitted for an array include:
+ - name(i) defined to be the starting offset of element i, if length > 1
+ - name defined to be the starting offset of arrayi, if length == 1
+ - name__LEN defined to be the length of array
+ - name__ESIZE defined to be the stride of array
+
+Also, if length is not 1, definitions for all items inside the array that
+involve offsets become parameter-taking C macros that calculate the offset
+based on array index. For nested arrays, this macro takes as many arguments
+as there are indices involved.
+
+It's an error if an item inside an array doesn't fit inside the array element.
+
+<array offset="0x408000" name="PGRAPH_TP" stride="0x1000" length="8">
+       <array offset="0x200" name="MP" stride="0x80" length="2">
+               <!-- ... -->
+               <reg64 offset="0x70" name="TRAPPED_OPCODE" />
+               <!-- ... -->
+       </array>
+       <reg32 offset="0x314" name="MP_TRAP />
+       <!-- ... -->
+</array>
+
+#define PGRAPH_TP(i)                           (0x408000+(i)*0x1000)
+#define PGRAPH_TP__LEN                         8
+#define PGRAPH_TP__ESIZE                       0x1000
+#define PGRAPH_TP_MP(i,j)                      (0x408200+(i)*0x1000+(j)*0x80)
+#define PGRAPH_TP__LEN                         2
+#define PGRAPH_TP__ESIZE                       0x80
+#define PGRAPH_TP_MP_TRAPPED_OPCODE(i,j)       (0x408270+(i)*0x1000+(j)*0x80)
+
+<stripe>s are somewhat similar to arrays, but don't reserve space, merely say
+that all items inside come in "length" copies "stride" cells apart. As opposed
+to <array>s, items can have offsets larger than stride, and offsets aren't
+automatically assumed to be a part of <stripe> unless a <reg*> explicitely
+hits that particular offset for some index. Also, <stripe>s of length 1 and
+stride 0 can be used as generic container, for example to apply a variant set
+or a prefix to a bigger set of elements. Attributes:
+
+ - name [optional]: like in <array>. If not given, no prefixing happens, and
+   the defines for <stripe> itself aren't emitted.
+ - offset [optional]: like <array>. Defaults to 0 if unspecified.
+ - stride [optional]: the difference between offsets of items with indices i
+   and i+1. Or size of the <stripe> if it makes sense in that particular
+   context. Defaults to 0.
+ - length [optional]: like in array. Defaults to 1.
+ - varset [optional]: as in <reg*>
+ - variants [optional]: as in <reg*>
+ - prefix [optional]: as in <domain>, overrides parent's prefix option.
+
+Definitions are emitted like for arrays, but:
+ - if no name is given, the definitions for stripe itself won't be emitted
+ - if length is 0, the length is assumed to be unknown or undefined. No __LEN
+   is emitted in this case.
+ - if stride is 0, __ESIZE is not emitted
+ - it's an error to have stride 0 with length different than 1
+
+
+Examples:
+
+<stripe name="PGRAPH" offset="0x400000" variants="NV04-NV05">
+       <reg32 offset="0x100" name="INTR" />
+       <reg32 offset="0x140" name="INTR_EN" />
+</stripe>
+
+<stripe name="PGRAPH" offset="0x400000" variants="NV50-">
+       <reg32 offset="0x100" name="INTR" />
+       <reg32 offset="0x108" name="TRAP" />
+       <reg32 offset="0x138" name="TRAP_EN" />
+       <reg32 offset="0x13c" name="INTR_EN" />
+</stripe>
+
+Results in:
+
+#define NV04_PGRAPH            0x400000
+#define NV04_PGRAPH_INTR       0x400100
+#define NV04_PGRAPH_INTR_EN    0x400140
+#define NV50_PGRAPH            0x400000
+#define NV50_PGRAPH_INTR       0x400100
+#define NV50_PGRAPH_TRAP       0x400108
+#define NV50_PGRAPH_TRAP_EN    0x400138
+#define NV50_PGRAPH_INTR_EN    0x40013c
+
+<stripe name="PVIDEO" offset="0x8000">
+       <stripe offset="0x900" stride="4" length="2">
+               <reg32 offset="0" name="BASE" />
+               <reg32 offset="8" name="LIMIT" />
+               <reg32 offset="0x10" name="LUMINANCE" />
+               <reg32 offset="0x18" name="CHROMINANCE" />
+               <!-- ... -->
+       </stripe>
+</stripe>
+
+Results in:
+
+#define PVIDEO_BASE            (0x8900+(i)*4)
+#define PVIDEO_LIMIT           (0x8908+(i)*4)
+#define PVIDEO_LUMINANCE       (0x8910+(i)*4)
+#define PVIDEO_CHROMINANCE     (0x8918+(i)*4)
+
+<domain name="NV_OBJECT" bare="yes">
+       <stripe name="OBJECT" prefix="chipset">
+               <reg32 offset="0x00" name="NAME" />
+               <reg32 offset="0x10" name="FENCE_ADDRESS_HIGH" variants="NV50-" />
+               <!-- more PFIFO methods -->
+       </stripe>
+       <stripe prefix="grobj-class">
+               <stripe variants="NV04_MEMORY_TO_MEMORY_FORMAT-NV05_MEMORY_TO_MEMORY_FORMAT">
+                       <reg32 offset="0x200" name="LINEAR_IN" variants="NV50_MEMORY_TO_MEMORY_FORMAT" />
+                       <reg32 offset="0x328" name="BUFFER_NOTIFY" />
+                       <!-- more m2mf methods -->
+               </stripe>
+               <stripe variants="NV50_COMPUTE">
+                       <reg32 offset="0x368" name="LAUNCH" />
+                       <stripe name="GLOBAL" offset="0x400" stride="0x20" length="16">
+                               <reg32 offset="0" name="ADDRESS_HIGH" />
+                               <reg32 offset="4" name="ADDRESS_LOW" />
+                               <reg32 offset="8" name="PITCH" />
+                               <reg32 offset="0xc" name="LIMIT" />
+                               <reg32 offset="0x10" name="MODE" />
+                       </stripe>
+                       <!-- more NV50_COMPUTE methods -->
+                       <reg32 offset="0x0600" name="USER_PARAM" length="64" />
+               </stripe>
+       </stripe>
+</domain>
+
+Results in:
+
+#define NV01_OBJECT_NAME                               0x00
+#define        NV50_OBJECT_FENCE_ADDRESS_HIGH                  0x10
+#define NV50_MEMORY_TO_MEMORY_FORMAT_LINEAR_IN         0x200
+#define NV04_MEMORY_TO_MEMORY_FORMAT_BUFFER_NOTIFY     0x328
+#define NV50_COMPUTE_LAUNCH                            0x368
+#define NV50_COMPUTE_GLOBAL                            0x400
+#define NV50_COMPUTE_GLOBAL__LEN                       16
+#define NV50_COMPUTE_GLOBAL__ESIZE                     0x20
+#define NV50_COMPUTE_GLOBAL_ADDRESS_HIGH               (0x400 + (i)*0x20)
+#define NV50_COMPUTE_GLOBAL_ADDRESS_LOW                        (0x404 + (i)*0x20)
+#define NV50_COMPUTE_GLOBAL_PITCH                      (0x408 + (i)*0x20)
+#define NV50_COMPUTE_GLOBAL_LIMIT                      (0x40c + (i)*0x20)
+#define NV50_COMPUTE_GLOBAL_MODE                       (0x410 + (i)*0x20)
+#define NV50_COMPUTE_USER_PARAM(i)                     (0x600 + (i)*4)
+#define NV50_COMPUTE_USER_PARAM__LEN                   64
+#define NV50_COMPUTE_USER_PARAM__ESIZE                 4
+
+2.7. Groups
+
+Groups are just sets of registers and/or arrays that can be copied-and-pasted
+together, when they're duplicated in several places in the same <domain>,
+two different <domain>s, or have different offsets for different variants.
+<group> and <use-group> only have the name attribute. <use-group> can appear
+wherever <reg*> can, including inside a <group>.
+
+<group name="nv50_mp">
+       <!-- ... -->
+       <reg64 offset="0x70" name="TRAPPED_OPCODE" />
+       <!-- ... -->
+</group>
+
+<array offset="0x408000" name="PGRAPH_TP" stride="0x1000" length="8" variants="NV50:NVA0">
+       <array offset="0x200" name="MP" stride="0x80" length="2">
+               <use-group name="nv50_mp" />
+       </array>
+       <!-- ... -->
+</array>
+<array offset="0x408000" name="PGRAPH_TP" stride="0x800" length="10" variants="NVA0-">
+       <array offset="0x100" name="MP" stride="0x80" length="4">
+               <use-group name="nv50_mp" />
+       </array>
+       <!-- ... -->
+</array>
+
+Will get you:
+
+#define NV50_PGRAPH_TP_MP_TRAPPED_OPCODE(i, j)         (0x408270 + (i)*0x1000 + (j)*0x80)
+#define NVA0_PGRAPH_TP_MP_TRAPPED_OPCODE(i, j)         (0x408170 + (i)*0x800 + (j)*0x80)
+
+3. The utilities.
+
+The header generation utility will take a set of XML files and generate .h
+file with all of their definitions, as defined above.
+
+The HTML generation utilty will take an XML file and generate HTML
+documentation out of it. The documentation will include the <brief> and <doc>
+tags in some way, as well as information from all the attributes, in some easy
+to read format. Some naming scheme for the HTML files should be decided, so
+that cross-refs to HTML documentation generated for <import>ed files will work
+correctly if the generator is run in both.
+
+The lookup utility will perform database lookups of the following types:
+
+ - domain name, offset, access type, variant type[s] -> register name + array
+   indices if applicable
+ - the above + register value -> same as above + decoded value. For registers
+   with bitfields, print all bitfields, and indicate if any bits not covered
+   by the bitfields are set to 1. For registers/bitfields with enum values,
+   print the matching one if any. For remaining registers/bitfields, print
+   according to type attribute.
+ - bitset name + value -> decoded value, as above
+ - enum name + value -> decoded value, as above
+
+The mmio-parse utility will parse a mmio-trace file and apply the second kind
+of database lookups to all memory accesses matching a given range. Some
+nv-specific hacks will be in order to automate the parsing: extract the
+chipset from PMC_BOOT_0, figure out the mmio base from PCI config, etc.
+
+The renouveau-parse utility will take contents of a PFIFO pushbuffer and
+decode them. The splitting to method,data pair will be done by nv-specific
+code, then the pair will be handed over to generic rules-ng lookup.
+
+4. Issues
+
+ - Random typing-saving feature for bitfields: make high default to same value
+   as low, to have one less attribute for single-bit bitfields?
+
+ - What about allowing nameless registers and/or bitfields? These are
+   supported by renouveau.xml and are used commonly to signify an unknown
+   register.
+
+ - How about cross-ref links in <doc> tags?
+
+ - <translation>: do we need them? Sounds awesome and useful, but as defined
+   by the old spec, they're quite limited. The only examples of straight
+   translations that I know of are the legacy VGA registers and
+   NV50_PFB_VM_TRAP. And NV01_PDAC, but I doubt anybody gives a damn about it.
+   This list is small enough to be just handled by nv-specific hacks in
+   mmio-trace parser if really needed.
+
+ - Another thing that renouveau.xml does is disassembling NV20-NV40 shaders.
+   Do we want that in rules-ng? IMO we'd be better off hacking nv50dis to
+   support it...
diff --git a/src/freedreno/registers/rules-ng-ng.xsd b/src/freedreno/registers/rules-ng-ng.xsd
new file mode 100644 (file)
index 0000000..10b5f37
--- /dev/null
@@ -0,0 +1,388 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<schema xmlns="http://www.w3.org/2001/XMLSchema"\r
+       targetNamespace="http://nouveau.freedesktop.org/"\r
+       xmlns:rng="http://nouveau.freedesktop.org/"\r
+       elementFormDefault="qualified">\r
+\r
+       <annotation>\r
+               <documentation>\r
+                       An updated version of the old rules.xml file from the\r
+                       RivaTV project. Specifications by Pekka Paalanen,\r
+                       preliminary attempt by KoalaBR,\r
+                       first working version by Jakob Bornecrantz.\r
+                       For specifications, see the file rules-ng-format.txt\r
+                       in Nouveau CVS module 'rules-ng'.\r
+               </documentation>\r
+               <documentation>Version 0.1</documentation>\r
+       </annotation>\r
+\r
+\r
+       <!-- Elements -->\r
+\r
+       <element name="database"       type="rng:databaseType" />\r
+       <element name="import"         type="rng:importType" />\r
+       <element name="domain"         type="rng:domainType" />\r
+       <element name="group"          type="rng:groupType" />\r
+       <element name="use-group"      type="rng:refType" />\r
+       <element name="array"          type="rng:arrayType" />\r
+       <element name="stripe"         type="rng:stripeType" />\r
+       <element name="reg64"          type="rng:registerType" />\r
+       <element name="reg32"          type="rng:registerType" />\r
+       <element name="reg16"          type="rng:registerType" />\r
+       <element name="reg8"           type="rng:registerType" />\r
+       <element name="bitset"         type="rng:bitsetType" />\r
+       <element name="bitfield"       type="rng:bitfieldType" />\r
+       <element name="enum"           type="rng:enumType" />\r
+       <element name="value"          type="rng:valueType" />\r
+       \r
+       <!-- Documentation elements -->\r
+       \r
+       <!-- FIXME: allowed only one  per parent element -->\r
+       <element name="brief" type="rng:briefType" />\r
+       \r
+       <element name="doc"  type="rng:docType" />\r
+       <element name="b"    type="rng:textformatType" />\r
+       <element name="i"    type="rng:textformatType" />\r
+       <element name="u"    type="rng:textformatType" />\r
+       <element name="code" type="rng:textcodeType" />\r
+       <element name="ul"   type="rng:listType" />\r
+       <element name="ol"   type="rng:listType" />\r
+       <element name="li"   type="rng:listitemType" />\r
+\r
+\r
+\r
+       <!-- Database element types -->\r
+\r
+       <complexType name="databaseType">\r
+               <annotation>\r
+                       <documentation>databaseType</documentation>\r
+               </annotation>\r
+               <choice minOccurs="0" maxOccurs="unbounded">\r
+                       <group ref="rng:docGroup" />\r
+                       <group ref="rng:topGroup" />\r
+               </choice>\r
+       </complexType>\r
+\r
+       <complexType name="importType">\r
+               <annotation>\r
+                       <documentation>importType</documentation>\r
+               </annotation>\r
+               <attribute name="file" type="string" use="required" />\r
+       </complexType>\r
+\r
+       <complexType name="domainType">\r
+               <annotation>\r
+                       <documentation>domainType</documentation>\r
+               </annotation>\r
+               <choice minOccurs="0" maxOccurs="unbounded">\r
+                       <group ref="rng:docGroup" />\r
+                       <group ref="rng:topGroup" />\r
+                       <group ref="rng:regarrayGroup" />\r
+               </choice>\r
+               <attribute name="name" type="NMTOKEN" use="required" />\r
+               <attribute name="bare" type="boolean" use="optional" />\r
+               <attribute name="prefix" type="NMTOKENS" use="optional" />\r
+               <attribute name="width" type="rng:DomainWidth" use="optional" />\r
+               <attribute name="size" type="rng:Hexadecimal" use="optional" />\r
+       </complexType>\r
+\r
+       <complexType name="groupType">\r
+               <annotation>\r
+                       <documentation>groupType</documentation>\r
+               </annotation>\r
+               <choice minOccurs="0" maxOccurs="unbounded">\r
+                       <group ref="rng:docGroup" />\r
+                       <group ref="rng:topGroup" />\r
+                       <group ref="rng:regarrayGroup" />\r
+               </choice>\r
+               <attribute name="name" type="NMTOKEN" use="required" />\r
+       </complexType>\r
+\r
+       <complexType name="arrayType">\r
+               <annotation>\r
+                       <documentation>arrayType</documentation>\r
+               </annotation>\r
+               <choice minOccurs="0" maxOccurs="unbounded">\r
+                       <group ref="rng:docGroup" />\r
+                       <group ref="rng:topGroup" />\r
+                       <group ref="rng:regarrayGroup" />\r
+               </choice>\r
+               <attribute name="name" type="NMTOKEN" use="required" />\r
+               <attribute name="offset" type="rng:Hexadecimal" use="required" />\r
+               <attribute name="stride" type="rng:HexOrNumber" use="required" />\r
+               <attribute name="length" type="rng:HexOrNumber" use="required" />\r
+               <attribute name="varset" type="NMTOKEN" use="optional" />\r
+               <attribute name="variants" type="string" use="optional" />\r
+       </complexType>\r
+\r
+       <complexType name="stripeType">\r
+               <annotation>\r
+                       <documentation>stripeType</documentation>\r
+               </annotation>\r
+               <choice minOccurs="0" maxOccurs="unbounded">\r
+                       <group ref="rng:docGroup" />\r
+                       <group ref="rng:topGroup" />\r
+                       <group ref="rng:regarrayGroup" minOccurs="0" />\r
+               </choice>\r
+               <attribute name="name" type="NMTOKEN" use="optional" />\r
+               <attribute name="offset" type="rng:Hexadecimal" use="optional" />\r
+               <attribute name="stride" type="rng:HexOrNumber" use="optional" />\r
+               <attribute name="length" type="rng:HexOrNumber" use="optional" />\r
+               <attribute name="varset" type="NMTOKEN" use="optional" />\r
+               <attribute name="variants" type="string" use="optional" />\r
+               <attribute name="prefix" type="NMTOKENS" use="optional" />\r
+       </complexType>\r
+\r
+       <complexType name="registerType">\r
+               <annotation>\r
+                       <documentation>\r
+                               registerType used by reg8, reg16, reg32, reg64\r
+                       </documentation>\r
+               </annotation>\r
+               <choice minOccurs="0" maxOccurs="unbounded">\r
+                       <group ref="rng:docGroup" />\r
+                       <group ref="rng:topGroup" />\r
+                       <element ref="rng:value" />\r
+                       <element ref="rng:bitfield" />\r
+               </choice>\r
+               <attribute name="name" type="NMTOKEN" use="required" />\r
+               <attribute name="offset" type="rng:Hexadecimal" use="required" />\r
+               <attribute name="access" type="rng:Access" default="rw" use="optional" />\r
+               <attribute name="type" type="NMTOKENS" use="optional" />\r
+               <attribute name="shr" type="nonNegativeInteger" use="optional" />\r
+               <attribute name="varset" type="NMTOKEN" use="optional" />\r
+               <attribute name="variants" type="string" use="optional" />\r
+               <attribute name="stride" type="rng:HexOrNumber" use="optional" />\r
+               <attribute name="length" type="rng:HexOrNumber" use="optional" />\r
+       </complexType>\r
+\r
+       <complexType name="bitsetType">\r
+               <annotation>\r
+                       <documentation>bitsetType</documentation>\r
+               </annotation>\r
+               <choice maxOccurs="unbounded">\r
+                       <element ref="rng:bitfield" />\r
+                       <group ref="rng:docGroup" />\r
+                       <group ref="rng:topGroup" />\r
+               </choice>\r
+               <attribute name="name" type="NMTOKEN" use="required" />\r
+               <attribute name="inline" type="boolean" use="optional" />\r
+               <attribute name="bare" type="boolean" use="optional" />\r
+               <attribute name="prefix" type="NMTOKENS" use="optional" />\r
+       </complexType>\r
+\r
+       <complexType name="bitfieldType">\r
+               <annotation>\r
+                       <documentation>bitfieldType</documentation>\r
+               </annotation>\r
+               <choice minOccurs="0" maxOccurs="unbounded">\r
+                       <element ref="rng:value" maxOccurs="unbounded" />\r
+                       <group ref="rng:docGroup" />\r
+                       <group ref="rng:topGroup" />\r
+               </choice>\r
+               <attribute name="name" type="NMTOKEN" use="required" />\r
+               <attribute name="high" type="nonNegativeInteger" use="required" />\r
+               <attribute name="low" type="nonNegativeInteger" use="required" />\r
+               <attribute name="type" type="NMTOKENS" use="optional" />\r
+               <attribute name="varset" type="NMTOKEN" use="optional" />\r
+               <attribute name="variants" type="string" use="optional" />\r
+               <attribute name="shr" type="nonNegativeInteger" use="optional" />\r
+       </complexType>\r
+\r
+       <complexType name="enumType">\r
+               <annotation>\r
+                       <documentation>enumType</documentation>\r
+               </annotation>\r
+               <choice maxOccurs="unbounded">\r
+                       <element ref="rng:value" />\r
+                       <group ref="rng:docGroup" />\r
+                       <group ref="rng:topGroup" />\r
+               </choice>\r
+               <attribute name="name" type="NMTOKEN" use="required" />\r
+               <attribute name="inline" type="boolean" use="optional" />\r
+               <attribute name="bare" type="boolean" use="optional" />\r
+               <attribute name="prefix" type="NMTOKENS" use="optional" />\r
+       </complexType>\r
+\r
+       <complexType name="valueType">\r
+               <annotation>\r
+                       <documentation>valueType</documentation>\r
+               </annotation>\r
+               <choice minOccurs="0" maxOccurs="unbounded">\r
+                       <group ref="rng:docGroup" />\r
+                       <group ref="rng:topGroup" />\r
+               </choice>\r
+               <attribute name="name" type="NMTOKEN" use="required" />\r
+               <attribute name="value" type="string" use="optional" />\r
+               <attribute name="varset" type="NMTOKEN" use="optional" />\r
+               <attribute name="variants" type="string" use="optional" />\r
+       </complexType>\r
+\r
+       <complexType name="refType">\r
+               <annotation>\r
+                       <documentation>refType</documentation>\r
+               </annotation>\r
+               <attribute name="ref" type="NMTOKEN" use="required" />\r
+       </complexType>\r
+\r
+\r
+       <!-- Documentation element types -->\r
+\r
+       <complexType name="briefType">\r
+               <annotation>\r
+                       <documentation>\r
+                               brief documentation, no markup\r
+                       </documentation>\r
+               </annotation>\r
+               <simpleContent>\r
+                       <extension base="string" />\r
+               </simpleContent>\r
+       </complexType>\r
+       \r
+       <complexType name="docType" mixed="true">\r
+               <annotation>\r
+                       <documentation>\r
+                               root element of documentation sub-tree\r
+                       </documentation>\r
+               </annotation>\r
+               <choice minOccurs="0" maxOccurs="unbounded">\r
+                       <group ref="rng:textformatGroup" />\r
+                       <group ref="rng:listGroup" />\r
+                       <element ref="rng:code" />\r
+               </choice>\r
+       </complexType>\r
+       \r
+       <complexType name="textformatType" mixed="true">\r
+               <annotation>\r
+                       <documentation>\r
+                               for bold, underline, italics\r
+                       </documentation>\r
+               </annotation>\r
+               <choice minOccurs="0" maxOccurs="unbounded">\r
+                       <group ref="rng:textformatGroup" />\r
+               </choice>\r
+       </complexType>\r
+       \r
+       <complexType name="textcodeType">\r
+               <simpleContent>\r
+                       <extension base="string">\r
+                               <attribute name="title" type="string" />\r
+                       </extension>\r
+               </simpleContent>\r
+       </complexType>\r
+       \r
+       <complexType name="listType">\r
+               <annotation>\r
+                       <documentation>\r
+                               definition of a list, ordered or unordered\r
+                       </documentation>\r
+               </annotation>\r
+               <choice minOccurs="0" maxOccurs="unbounded">\r
+                       <element ref="rng:li" />\r
+               </choice>\r
+       </complexType>\r
+       \r
+       <complexType name="listitemType" mixed="true">\r
+               <annotation>\r
+                       <documentation>\r
+                               items of a list\r
+                       </documentation>\r
+               </annotation>\r
+               <choice minOccurs="0" maxOccurs="unbounded">\r
+                       <group ref="rng:textformatGroup" />\r
+                       <group ref="rng:listGroup" />\r
+                       <element ref="rng:code" />\r
+               </choice>\r
+       </complexType>\r
+\r
+\r
+\r
+       <!-- Attribute value types -->\r
+\r
+       <simpleType name="Hexadecimal">\r
+               <restriction base="string">\r
+                       <pattern value="0x[0-9a-f]+" />\r
+                       <pattern value="0x[0-9A-F]+" />\r
+                       <pattern value="[0-9]" />\r
+               </restriction>\r
+       </simpleType>\r
+\r
+       <simpleType name="HexOrNumber">\r
+               <annotation>\r
+                       <documentation>HexOrNumber</documentation>\r
+               </annotation>\r
+               <union memberTypes="rng:Hexadecimal nonNegativeInteger" />\r
+       </simpleType>\r
+\r
+       <simpleType name="Access">\r
+               <annotation>\r
+                       <documentation>Access</documentation>\r
+               </annotation>\r
+               <restriction base="string">\r
+                       <enumeration value="r" />\r
+                       <enumeration value="w" />\r
+                       <enumeration value="rw" />\r
+               </restriction>\r
+       </simpleType>\r
+\r
+       <simpleType name="DomainWidth">\r
+               <annotation>\r
+                       <documentation>DomainWidth</documentation>\r
+               </annotation>\r
+               <restriction base="string">\r
+                       <enumeration value="8" />\r
+                       <enumeration value="16" />\r
+                       <enumeration value="32" />\r
+                       <enumeration value="64" />\r
+               </restriction>\r
+       </simpleType>\r
+\r
+\r
+\r
+       <!-- Element groups -->\r
+\r
+       <group name="topGroup">\r
+               <choice>\r
+                       <element ref="rng:domain" />\r
+                       <element ref="rng:enum" />\r
+                       <element ref="rng:group" />\r
+                       <element ref="rng:bitset" />\r
+                       <element ref="rng:import" />\r
+               </choice>\r
+       </group>\r
+       \r
+       <group name="regarrayGroup">\r
+               <choice>\r
+                       <element ref="rng:reg64" />\r
+                       <element ref="rng:reg32" />\r
+                       <element ref="rng:reg16" />\r
+                       <element ref="rng:reg8" />\r
+                       <element ref="rng:array" />\r
+                       <element ref="rng:stripe" />\r
+                       <element ref="rng:use-group" />\r
+               </choice>\r
+       </group>\r
+       \r
+       <group name="docGroup">\r
+               <choice>\r
+                       <element ref="rng:brief" />\r
+                       <element ref="rng:doc" />\r
+               </choice>\r
+       </group>\r
+       \r
+       <group name="textformatGroup">\r
+               <choice>\r
+                       <element ref="rng:b" />\r
+                       <element ref="rng:i" />\r
+                       <element ref="rng:u" />\r
+               </choice>\r
+       </group>\r
+       \r
+       <group name="listGroup">\r
+               <choice>\r
+                       <element ref="rng:ul" />\r
+                       <element ref="rng:ol" />\r
+               </choice>\r
+       </group>\r
+\r
+</schema>\r
diff --git a/src/freedreno/registers/text-format.txt b/src/freedreno/registers/text-format.txt
new file mode 100644 (file)
index 0000000..8e4343f
--- /dev/null
@@ -0,0 +1,101 @@
+1. Introduction to rules-ng-ng text format
+
+This-specification defines a text format that can be converted to and from rules-ng-ng XML.
+It is intended to allow to create rules-ng-ng files with much less typing and with a more readable text.
+xml2text can convert rules-ng-ng XML to this text format
+text2xml can convert this text format to rules-ng-ng XML
+
+This specification is an addendum to the rules-ng-ng specification and assumes familiarity with it.
+
+2. Format
+
+2.1. Line format
+
+The initial indentation of a line is divided by 8 and the result determines the position in the document structure (similar to the Python language).
+A "//" anywhere in the line causes the rest to be converted to an XML comment (like C++)
+A line starting with ":" creates a <doc> tag with the rest of the line (excluding anything starting with //).
+The content of multiple lines starting with ":" is merged in a single <doc> tag.
+
+2.2. Tokenization
+
+The line is then tokenized.
+Token are generally continuous strings on non-whitespace characters, with some exceptions
+Some characters (such as ":", "=" and "-") form a single-character token.
+Text within double quotes generates a <brief> tag.
+Any token formatted as ATTR(VALUE) generates an ATTR="VALUE" attribute. No whitespace allowed between ATTR and the '(' character.
+Any token formatted as (VALUE) generates a variants="VALUE" attribute.
+Any token formatted as (VARSET=VALUE) generates a varset="VARSET" variants="VALUE" attribute.
+
+2.3. Special token sequences
+
+These sequences are recognized and extracted before matching the line format:
+
+: NUM
+       set REGLIKE to regNUM
+       you must specify a type if the reg is anonymous
+       the : is recognized only if it is the third or successive token (and not the last) to avoid ambiguity with bitfields and generic tags
+
+{ STRIDE }
+       stride="STRIDE" attribute
+
+[ LENGTH ]
+       length="LENGTH" attribute
+
+!FLAGS
+       access="FLAGS"
+       no whitespace allowed after '!'
+
+:=
+       at the end of the line
+       set REGLIKE to "stripe"
+
+=
+       at the end of the line
+       set REGLIKE to "array"
+
+inline
+       at the beginning of the line
+       inline="yes" attribute
+
+2.4. Line patterns
+
+The following line patterns are understood.
+Only word tokens are used to match lines.
+All tokens with special meaning are treated separately as described above.
+[FOO] means that FOO is optional
+
+#import "FILE"
+       <import file="FILE"/>
+
+#pragma regNUM
+       REGLIKE is now set by default to regNUM instead of reg32
+
+@TAG [NAME]
+       <TAG name="NAME"/>
+       use this if there are no children
+
+TAG [NAME] :
+       <TAG name="NAME">
+       use this if there are children
+
+TOKEN
+       <value value="TOKEN" /> if inside a reg or enum and TOKEN starts with a digit
+       <value name="TOKEN" /> if inside a reg or enum and TOKEN does not start with a digit
+       <REGLIKE offset="TOKEN" /> otherwise
+
+POS NAME
+       <bitfield low="POS" high="POS" name="NAME"/> if inside a reg or bitset
+       <REGLIKE offset="POS" name="NAME"> otherwise
+
+LOW - HIGH NAME [TYPE]
+       <bitfield low="LOW" high="HIGH" name="NAME" type="TYPE"/>
+
+VALUE = NAME
+       <value value="VALUE" name="NAME"/>
+
+use WHAT NAME
+       <use-WHAT name="NAME" />
+
+OFFSET NAME [TYPE]
+       <REGLIKE offset="OFFSET" name="NAME" type="TYPE">
+
diff --git a/src/freedreno/registers/update-headers.sh b/src/freedreno/registers/update-headers.sh
deleted file mode 100755 (executable)
index 4e521e8..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/bin/sh
-
-d=$(dirname $0)
-
-rnndb=$1
-
-if [ ! -f $rnndb/rnndb/adreno/adreno_common.xml ]; then
-       echo directory does not look like envytools: $rnndb
-       exit 1
-fi
-
-for f in $d/*.xml.h; do
-       cp -v $rnndb/rnndb/adreno/$(basename $f) $d
-done