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>

27 files changed:
src/freedreno/registers/adreno.xml [new file with mode: 0644]
src/freedreno/registers/adreno/a2xx.xml [moved from src/freedreno/registers/a2xx.xml with 100% similarity]
src/freedreno/registers/adreno/a3xx.xml [moved from src/freedreno/registers/a3xx.xml with 100% similarity]
src/freedreno/registers/adreno/a4xx.xml [moved from src/freedreno/registers/a4xx.xml with 100% similarity]
src/freedreno/registers/adreno/a5xx.xml [moved from src/freedreno/registers/a5xx.xml with 100% similarity]
src/freedreno/registers/adreno/a6xx.xml [moved from src/freedreno/registers/a6xx.xml with 100% similarity]
src/freedreno/registers/adreno/a6xx_gmu.xml [new file with mode: 0644]
src/freedreno/registers/adreno/adreno_common.xml [moved from src/freedreno/registers/adreno_common.xml with 100% similarity]
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 [moved from src/freedreno/registers/adreno_pm4.xml with 100% similarity]
src/freedreno/registers/adreno/ocmem.xml [new file with mode: 0644]
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/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/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_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/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/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 26335ce..d38e166 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