[Nouveau] [PATCH] Import EVO commands into envytools
Maxim Levitsky
maximlevitsky at gmail.com
Sun Oct 9 15:40:04 PDT 2011
---
rnndb/nv_evo.xml | 311 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 311 insertions(+), 0 deletions(-)
create mode 100644 rnndb/nv_evo.xml
diff --git a/rnndb/nv_evo.xml b/rnndb/nv_evo.xml
new file mode 100644
index 0000000..d776dbd
--- /dev/null
+++ b/rnndb/nv_evo.xml
@@ -0,0 +1,311 @@
+<?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="copyright.xml"/>
+<import file="nvchipsets.xml"/>
+<import file="nv_defs.xml"/>
+
+<!-- main EVO channel -->
+<domain name="NV_EVO_MASTER" bare="yes" prefix="chipset">
+
+ <!-- write 0 here executes all evo commands pending in PDISPLAY fifo -->
+ <reg32 offset="0x80" name="FLUSH_COMMANDS"/>
+
+ <reg32 offset="0x84" name="FLUSH2">
+ <bitfield pos="2" name="FLUSH_CLUT_CRTC0"/>
+ <bitfield pos="3" name="FLUSH_CLUT_CRTC1"/>
+ <bitfield pos="30" name="NOTIFY_ENABLED"/> <!--???-->
+ <bitfield pos="31" name="FLUSH_MAIN"/>
+ </reg32>
+
+ <!-- dma object that PDISPLAY needs when it uses display sync channels
+ maybe that stores its state to
+ when PDISPLAY executes non-main channel?...-->
+ <reg32 offset="0x88" name="DMA_NOTIFY"/>
+
+ <array name="DAC" offset="0x400" stride="0x80" length="2">
+
+ <reg32 offset="0x0" name="MODE_CTL">
+ <bitfield pos="0" name="CRTC0"/>
+ <bitfield pos="1" name="CRTC1"/>
+ <bitfield pos="6" name="ENABLED"/>
+
+ <bitfield low="8" high="13" name="PROTOCOL">
+ <value name="VGA" value="0x0"/>
+ <value name="NTSC-M" value="0x1"/>
+ <value name="NTSC-J" value="0x2"/>
+ <value name="PAL" value="0x3"/>
+ <value name="PAL-M" value="0x4"/>
+ <value name="PAL-N" value="0x5"/>
+ <value name="PAL-NC" value="0x6"/>
+
+ <!-- HD480I/HD576I doesn't work with blob,
+ maybe hw doesn't support it? -->
+ <value name="HD480P" value="0xd"/>
+ <value name="HD576p" value="0xe"/>
+
+ <value name="HD720p" value="0x10"/>
+ <value name="HD1080i" value="0x12"/>
+ <value name="HD1080p" value="0x3F"/>
+ </bitfield>
+
+ <bitfield pos="14" name="SUB_CARR_FREQ">
+ <value name="3_57MHZ" value="0"/>
+
+ <!-- PAL and PAL-NC use this -->
+ <value name="4_42MHZ" value="1"/>
+ </bitfield>
+ </reg32>
+
+ <reg32 offset="0x04" name="MODE_CTL2">
+ <bitfield pos="0" name="NEG_HSYNC" type="boolean"/>
+ <bitfield pos="1" name="NEG_VSYNC" type="boolean"/>
+ </reg32>
+
+ <!-- TODO: always set to 0x10000 on TV-out -->
+ <reg32 offset="0x20" name="UNK20"/>
+ </array>
+
+ <array name="SOR" offset="0x600" stride="0x40" length="2">
+
+ <reg32 offset="0x0" name="MODE_CTL">
+ <bitfield pos="0" name="CRTC0"/>
+ <bitfield pos="1" name="CRTC1"/>
+
+ <bitfield pos="6" name="ENABLED"/>
+
+ <bitfield low="8" high="11" name="PROTOCOL">
+ <value name="LVDS" value="0"/>
+ <value name="TMDS_SINGLE_A" value="1"/>
+ <value name="TMDS_SINGLE_B" value="2"/>
+ <value name="TMDS_DUAL" value="5"/>
+ <value name="DP_A" value="8"/>
+ <value name="DP_B" value="9"/>
+ </bitfield>
+
+ <bitfield pos="12" name="NEG_HSYNC" type="boolean"/>
+ <bitfield pos="13" name="NEG_VSYNC" type="boolean"/>
+ </reg32>
+ </array>
+
+
+ <array name="CRTC" offset="0x800" stride="0x400" length="2">
+
+ <reg32 offset="0x004" name="CLOCK">
+ <bitfield low="0" high="22" name="CLK_KHZ" type="uint"/>
+ <bitfield pos="23" name="ENABLED"/>
+ </reg32>
+
+ <reg32 offset="0x008" name="INTERLACE">
+ <bitfield pos="1" name="ENABLED"/>
+ </reg32>
+
+ <reg32 offset="0x010" name="BACKGROUND_COLOR">
+ <bitfield low="0" high="9" name="RED" type="uint"/>
+ <bitfield low="10" high="19" name="GREEN" type="uint"/>
+ <bitfield low="20" high="29" name="BLUE" type="uint"/>
+ </reg32>
+
+ <!-- start of sync pulse is the reference, so: -->
+
+ <!-- totat scanlines of display -->
+ <reg32 offset="0x014" name="DISPLAY_TOTAL" type="wh16"/>
+
+ <!-- from start of sync to end of sync -->
+ <reg32 offset="0x018" name="SYNC_DURATION" type="wh16"/>
+
+ <!-- from start of sync to start of visible portion (end of back porch) -->
+ <reg32 offset="0x01c" name="SYNC_START_TO_DISP_START" type="wh16"/>
+
+ <!-- from start of sync to end of visible portion (start of front porch) -->
+ <reg32 offset="0x020" name="SYNC_START_TO_DISP_END" type="wh16"/>
+
+
+ <reg32 offset="0x024" name="INTERLACE_TIMINGS">
+ <!-- from start of sync to end of visible portion of next field (start of front porch) -->
+ <bitfield low="0" high="15" name="VSYNC_TO_END_DISP_NEXTFIELD" type="uint" />
+ <!-- from start of sync to start of visible portion of the next field (end of back porch) -->
+ <bitfield low="16" high="31" name="VSYNC_TO_START_DISP_NEXTFIELD" type="uint" />
+ </reg32>
+
+ <!-- TODO: (!) very related to scale/mode. Large values cause flicker on LVDS/DVI/VGA, clock?-->
+ <reg32 offset="0x028" name="UNK828">
+ <bitfield low="0" high="11" name="UNK" type="uint" />
+ </reg32>
+
+ <reg32 offset="0x02C" name="UNK82C"/> <!-- set always to 0 -->
+
+
+ <reg32 offset="0x040" name="CLUT">
+ <bitfield pos="31" name="ENABLED">
+ <value value="1" name="YES"/>
+ <value value="0" name="NO"/>
+ </bitfield>
+
+ <!-- in reduced mode, first and last 64 entries of LUT
+ are ignored, and middle 128 entries are interpolated
+ into 256 entries. Used by blob for 8-bit framebuffers -->
+ <bitfield pos="30" name="MODE">
+ <value value="0" name="REDUCED"/>
+ <value value="1" name="NORMAL"/>
+ </bitfield>
+ </reg32>
+
+ <reg32 offset="0x044" name="CLUT_ADDRESS"/>
+ <reg32 offset="0x05c" name="CLUT_DMA_HANDLE" variants="NV84-"/>
+
+ <group name="nv50_evo_fb_settings">
+ <reg32 offset="0x00" name="FB_OFFSET"/>
+
+ <reg32 offset="0x08" name="FB_SIZE"/>
+
+ <reg32 offset="0x0c" name="FB_CONFIG">
+ <bitfield pos="20" name="MODE">
+ <value value="0" name="TILE"/>
+ <value value="1" name="PITCH"/>
+ </bitfield>
+
+ <bitfield high="19" low="4" shr="4" name="PITCH"/>
+ <bitfield high="3" low="0" name="TILE_FLAGS"/>
+ </reg32>
+ <reg32 offset="0x010" name="FB_DEPTH" >
+ <bitfield high="15" low="8" name="DEPTH">
+ <value value="0x1e" name="8BPP"/>
+ <value value="0xe9" name="15BPP"/>
+ <value value="0xe8" name="16BPP"/>
+ <value value="0xcf" name="24BPP"/>
+ <value value="0xd1" name="30BPP"/>
+ </bitfield>
+ </reg32>
+ </group>
+
+ <stripe offset="0x060">
+ <use-group name="nv50_evo_fb_settings" />
+ </stripe>
+
+ <reg32 offset="0x074" name="FB_DMA_HANDLE"/>
+
+
+ <reg32 offset="0x080" name="CURSOR_CTL">
+ <bitfield pos="31" name="SHOW" type="boolean"/>
+ </reg32>
+ <reg32 offset="0x084" name="CURSOR_ADDRESS"/>
+ <reg32 offset="0x09c" name="CURSOR_DMA_HANDLE" variants="NV84-"/>
+
+ <reg32 offset="0x0a0" name="DITHER_CTRL">
+ <bitfield low="0" high="2" name="DEPTH">
+ <value value="0" name="DISABLED"/>
+ <value value="1" name="6BPP"/>
+ <value value="3" name="8BPP"/>
+ </bitfield>
+
+ <bitfield low="3" high="5" name="MODE">
+ <value value="0" name="OFF"/>
+ <value value="3" name="STATIC_2X2"/>
+ <value value="2" name="DYNAMIC_2X2"/>
+ </bitfield>
+ </reg32>
+
+ <reg32 offset="0x0a4" name="BLUR_CTRL">
+ <!-- BLUR_ENABLE + UNK1 = black screen + hung card,
+ no way to fix by setting back the old value -->
+ <bitfield low="0" high="1" name="UNK1"/>
+ <bitfield pos="2" name="ENABLE"/>
+ <bitfield pos="3" name="UNK3"/>
+
+ <!-- set to same values as BLUR1, but seems to do nothing -->
+ <bitfield low="16" high="23" name="BLUR2" type="int"/>
+
+ <!-- Blur value, (negative == sharpness) -->
+ <bitfield low="24" high="31" name="BLUR1" type="int"/>
+ </reg32>
+
+ <reg32 offset="0x0a8" name="COLOR_CTL">
+ <!-- TV_COLORS used on most TV modes,
+ applies proper black/white levels -->
+ <bitfield pos="0" name="TV_COLORS"/>
+ <!-- ALT_TV_COLORS used in PAL-N and 720P/1080P/1080I modes,
+ slightly different colors that with TV_COLORS -->
+ <bitfield pos="1" name="ALT_TV_COLORS"/>
+
+ <!-- draws on left and right of the screen two
+ thin/thick violet lines -->
+ <bitfield pos="3" name="LEFTRIGHT_THIN_BORDER"/>
+ <bitfield pos="4" name="LEFTRIGHT_THICK_BORDER"/>
+
+ <bitfield low="8" high="19" name="SATURATION" type="int"/>
+ <bitfield low="20" high="31" name="TINT" type="int"/>
+ </reg32>
+
+ <!-- offset of CRTC window in framebuffer texture -->
+ <reg32 offset="0x0c0" name="FB_POS" type="xy16"/>
+
+ <!-- size of CRTC window in framebuffer texture -->
+ <reg32 offset="0x0c8" name="FB_REAL_RES" type="wh16"/>
+
+ <!-- offset to move CRTC window before output to physical screen -->
+ <reg32 offset="0x0d4" name="FB_SCREEN_POS" type="xy16"/>
+
+ <!-- size to scale CRTC window (which size is given in FB_REAL_RES)
+ before output to physical screen -->
+ <reg32 offset="0x0d8" name="FB_SCALE_RES1" type="wh16" />
+ <!-- this value doesn't do anything, but must be same/lower that first
+ its sort of bottom limit/optimization. 0 seems to work -->
+ <reg32 offset="0x0dc" name="FB_SCALE_RES2" type="wh16" />
+
+ <!-- darktama: required to make display sync channels not hate life.
+ UNK900 set to 0, UNK904 to 0x100 by blob -->
+ <reg32 offset="0x100" name="UNK900"/>
+ <reg32 offset="0x104" name="UNK904"/>
+
+ <!-- blob seeems to set that to 0x10000 -->
+ <reg32 offset="0x3a8" name="UNK3A8"/>
+
+ </array>
+</domain>
+
+<!-- display sync EVO channels, one per CRTC -->
+<domain name="NV_EVO_SYNC" bare="yes" prefix="chipset">
+
+ <!-- same as on main EVO channel -->
+ <reg32 offset="0x80" name="FLUSH_COMMANDS"/>
+
+ <!-- TODO: different values depends on whenever sync semaphore is used -->
+ <reg32 offset="0x84" name="SYNC_CTRL">
+ <bitfield pos="4" name="NOT_USE_SEM"/>
+ <bitfield pos="8" name="USE_SEM"/>
+ </reg32>
+
+ <!-- Semaphore support to sync against PGRAPH -->
+ <reg32 offset="0x88" name="SEM_OFFSET"/>
+ <reg32 offset="0x8c" name="SEM_WAIT_VALUE"/>
+ <reg32 offset="0x90" name="SEM_WRITE_VALUE"/>
+ <reg32 offset="0x94" name="SEM_DMAOBJ"/>
+
+ <!-- 0 written on pageflip-->
+ <reg32 offset="0xa0" name="UNKA0"/>
+ <reg32 offset="0xa5" name="UNKA4"/>
+
+
+ <reg32 offset="0xc0" name="FB_DMAOBJ"/>
+
+ <!-- darktama: allows gamma somehow, PDISP will bitch at you if
+ * you don't wait for vblank before changing this..
+ nouveau write 0x40000000 here-->
+ <reg32 offset="0xe0" name="UNKe0"/>
+
+ <!-- set to 0xfffe0000 on page flip -->
+ <reg32 offset="0x100" name="UNK100"/>
+
+ <!-- 0 written on pageflip -->
+ <reg32 offset="0x110" name="UNK110"/>
+ <reg32 offset="0x114" name="UNK114"/>
+
+ <!-- new framebuffer settings to apply. Same as in main evo channel-->
+ <stripe offset="0x800">
+ <use-group name="nv50_evo_fb_settings" />
+ </stripe>
+</domain>
+
+</database>
--
1.7.4.1
More information about the Nouveau
mailing list