Mesa (main): freedreno/registers: Add a few a6xx regs and notes
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Tue Jun 1 00:30:14 UTC 2021
Module: Mesa
Branch: main
Commit: c2f8c98d56f8bfa12ce34be2b38ebc093be91d75
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=c2f8c98d56f8bfa12ce34be2b38ebc093be91d75
Author: Rob Clark <robdclark at chromium.org>
Date: Sun May 23 10:46:07 2021 -0700
freedreno/registers: Add a few a6xx regs and notes
A few things I noticed while playing with the emulator.
Signed-off-by: Rob Clark <robdclark at chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10944>
---
src/freedreno/.gitlab-ci/reference/crash.log | 22 +++++-----
src/freedreno/registers/adreno/a6xx.xml | 28 ++++++++++++-
.../registers/adreno/adreno_control_regs.xml | 49 +++++++++++++++++++++-
3 files changed, 85 insertions(+), 14 deletions(-)
diff --git a/src/freedreno/.gitlab-ci/reference/crash.log b/src/freedreno/.gitlab-ci/reference/crash.log
index fe1ef58c0a9..bf9eba41180 100644
--- a/src/freedreno/.gitlab-ci/reference/crash.log
+++ b/src/freedreno/.gitlab-ci/reference/crash.log
@@ -634,8 +634,8 @@ registers:
00000000 CP_PROTECT_STATUS: 0
00000707 0x826: 00000707
00000001 0x827: 00000001
- 00009000 CP_SQE_INSTR_BASE_LO: 0x9000
- 00010000 CP_SQE_INSTR_BASE_HI: 0x10000
+ 00009000 CP_SQE_INSTR_BASE: 0x9000
+ 00010000 CP_SQE_INSTR_BASE+0x1: 0x10000
00000000 0x832: 00000000
00000000 0x833: 00000000
00000000 CP_MISC_CNTL: 0
@@ -1125,16 +1125,16 @@ registers:
00180000 PC_DBG_ECO_CNTL: 0x180000
00000001 PC_ADDR_MODE_CNTL: ADDR_64B
00000000 0x9e03: 00000000
- 00000000 0x9e04: 00000000
- 00000000 0x9e05: 00000000
- 00000000 0x9e06: 00000000
- 00000000 0x9e07: 00000000
+ 00000000 PC_DRAW_INDX_BASE: 0
+ 00000000 PC_DRAW_INDX_BASE+0x1: 0
+ 00000000 PC_DRAW_FIRST_INDX: 0
+ 00000000 PC_DRAW_MAX_INDICES: 0
00000000 PC_TESSFACTOR_ADDR: 0
00000000 PC_TESSFACTOR_ADDR_HI: 0
00000001 0x9e0a: 00000001
- 00004080 0x9e0b: 00004080
- 00000000 0x9e0c: 00000000
- 00000003 0x9e0d: 00000003
+ 00004080 PC_DRAW_INITIATOR: { PRIM_TYPE = DI_PT_NONE | SOURCE_SELECT = DI_SRC_SEL_AUTO_INDEX | VIS_CULL = IGNORE_VISIBILITY | INDEX_SIZE = INDEX4_SIZE_8_BIT | PATCH_TYPE = TESS_QUADS | 0x4000 }
+ 00000000 PC_DRAW_NUM_INSTANCES: 0
+ 00000003 PC_DRAW_NUM_INDICES: 3
00000000 0x9e0e: 00000000
00010000 PC_VSTREAM_CONTROL: { VSC_SIZE = 1 | VSC_N = 0 }
00000000 PC_BIN_PRIM_STRM: 0
@@ -1143,7 +1143,7 @@ registers:
00000000 PC_BIN_DRAW_STRM_HI: 0
00000000 0x9e16: 00000000
00000000 0x9e19: 00000000
- 00000000 0x9e1c: 00000000
+ 00000000 PC_VISIBILITY_OVERRIDE: { 0 }
00000000 0x9e20: 00000000
00000000 0x9e21: 00000000
00000000 0x9e22: 00000000
@@ -2993,7 +2993,7 @@ indexed-registers:
00000000 0x127: 00000000
00000000 0x128: 00000000
00000000 0x129: 00000000
- 00000101 0x12a: 00000101
+ 00000101 MARKER: 0x101
00000004 MODE_BITMASK: 0x4
00000000 0x12c: 00000000
00000000 0x12d: 00000000
diff --git a/src/freedreno/registers/adreno/a6xx.xml b/src/freedreno/registers/adreno/a6xx.xml
index 43eb469adda..67e78bd0ae2 100644
--- a/src/freedreno/registers/adreno/a6xx.xml
+++ b/src/freedreno/registers/adreno/a6xx.xml
@@ -978,8 +978,7 @@ to upconvert to 32b float internally?
<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"/>
+ <reg64 offset="0x0830" name="CP_SQE_INSTR_BASE"/>
<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: -->
@@ -1095,6 +1094,7 @@ to upconvert to 32b float internally?
<reg32 offset="0x0A00" name="CP_APERTURE_CNTL_HOST"/>
<reg32 offset="0x0A03" name="CP_APERTURE_CNTL_CD"/>
<reg32 offset="0x0B34" name="CP_LPAC_PROG_FIFO_SIZE"/>
+ <reg64 offset="0x0b82" name="CP_LPAC_SQE_INSTR_BASE"/>
<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">
@@ -2492,6 +2492,13 @@ to upconvert to 32b float internally?
<bitfield name="EVENT" low="0" high="6" type="vgt_event_type"/>
</reg32>
+ <!--
+ 0x9880 written in a lot of places by SQE, same value gets written
+ to control reg 0x12a. Set by CP_SET_MARKER, so lets name it after
+ that
+ -->
+ <reg32 offset="0x9880" name="PC_MARKER"/>
+
<!-- 0x9843-0x997f invalid -->
<reg32 offset="0x9981" name="PC_POLYGON_MODE">
@@ -2580,8 +2587,20 @@ to upconvert to 32b float internally?
<!-- 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"/>
+ <reg64 offset="0x9e04" name="PC_DRAW_INDX_BASE"/>
+ <reg32 offset="0x9e06" name="PC_DRAW_FIRST_INDX" type="uint"/>
+ <reg32 offset="0x9e07" name="PC_DRAW_MAX_INDICES" type="uint"/>
<reg64 offset="0x9e08" name="PC_TESSFACTOR_ADDR" type="waddress" align="32"/>
+ <reg32 offset="0x9e0b" name="PC_DRAW_INITIATOR" type="vgt_draw_initiator_a4xx">
+ <doc>
+ Possibly not really "initiating" the draw but the layout is similar
+ to VGT_DRAW_INITIATOR on older gens
+ </doc>
+ </reg32>
+ <reg32 offset="0x9e0c" name="PC_DRAW_NUM_INSTANCES" type="uint"/>
+ <reg32 offset="0x9e0d" name="PC_DRAW_NUM_INDICES" type="uint"/>
+
<!-- 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"/>
@@ -2591,6 +2610,11 @@ to upconvert to 32b float internally?
<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="0x9e1c" name="PC_VISIBILITY_OVERRIDE">
+ <doc>Written by CP_SET_VISIBILITY_OVERRIDE handler</doc>
+ <bitfield name="OVERRIDE" pos="0" type="boolean"/>
+ </reg32>
+
<array offset="0x9e34" name="PC_PERFCTR_PC_SEL" stride="1" length="8"/>
<!-- always 0x0 -->
diff --git a/src/freedreno/registers/adreno/adreno_control_regs.xml b/src/freedreno/registers/adreno/adreno_control_regs.xml
index ed7c86b7700..24ce699c69f 100644
--- a/src/freedreno/registers/adreno/adreno_control_regs.xml
+++ b/src/freedreno/registers/adreno/adreno_control_regs.xml
@@ -43,6 +43,17 @@ xsi:schemaLocation="http://nouveau.freedesktop.org/ rules-ng.xsd">
<doc>
Writing to this triggers a register write and auto-increments
REG_WRITE_ADDR.
+
+ Note that there seems to be some upper bits that are possilby
+ flags, ie:
+
+ l284: 0d12: 8a8c0003 mov $0c, 0x0003 << 20
+ GPR: $0c: 00300000
+ 0d13: 318c9e0b or $0c, $0c, 0x9e0b
+ GPR: $0c: 00309e0b
+ 0d14: a80c0024 cwrite $0c, [$00 + @REG_WRITE_ADDR], 0x0
+ CTRL: @REG_WRITE_ADDR: 00309e0b
+
</doc>
<reg32 name="REG_WRITE" offset="0x025"/>
@@ -62,7 +73,38 @@ xsi:schemaLocation="http://nouveau.freedesktop.org/ rules-ng.xsd">
<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_SEL" offset="0x041">
+ <doc>
+ SQE writes DRAW_STATE_SEL to select the SDS state group, and
+ then reads out the SDS header (DRAW_STATE_HDR), ie. the first
+ dword in the state group entry (see CP_SET_DRAW_STATE), and
+ base address of the state group cmdstream (DRAW_STATE_BASE)
+ </doc>
+ </reg32>
+ <reg64 name="SDS_BASE" offset="0x042">
+ <doc>
+ base address for executing draw state group when IB_LEVEL
+ is set to 3 (ie. it's a bit like IB3 equiv of IBn_BASE)
+
+ Note that SDS_BASE/SDS_DWORDS seem to be per-state-group,
+ the values reflected switch when DRAW_STATE_SEL is written.
+ </doc>
+ </reg64>
+ <reg32 name="SDS_DWORDS" offset="0x044">
+ <doc>
+ state group equiv of IBn_DWORDS
+ </doc>
+ </reg32>
+
+ <reg64 name="DRAW_STATE_BASE" offset="0x045"/>
+ <reg32 name="DRAW_STATE_HDR" offset="0x047">
+ <doc>
+ Contains information from the first dword of the state group
+ entry in CP_SET_DRAW_STATE, but format isn't exactly the
+ same. The # of dwords is in low 16b, and mode mask is in
+ high 16 bits
+ </doc>
+ </reg32>
<reg32 name="DRAW_STATE_ACTIVE_BITMASK" offset="0x049"/>
<reg32 name="DRAW_STATE_SET" offset="0x04a"/>
@@ -112,6 +154,11 @@ xsi:schemaLocation="http://nouveau.freedesktop.org/ rules-ng.xsd">
<reg32 name="PREEMPTION_INFO" offset="0x126"/>
+ <doc>
+ Seems to be a shadow for PC_MARKER
+ </doc>
+ <reg32 name="MARKER" offset="0x12a"/>
+
<doc>
Set by SET_MARKER, used to conditionally execute
CP_COND_REG_EXEC and draw states.
More information about the mesa-commit
mailing list