Merge branch 'upstream' of git://lost.foo-projects.org/~ahkok/git/netdev-2.6 into...
[pandora-kernel.git] / Documentation / video4linux / cx2341x / fw-memory.txt
1 This document describes the cx2341x memory map and documents some of the register
2 space.
3
4 Warning! This information was figured out from searching through the memory and
5 registers, this information may not be correct and is certainly not complete, and
6 was not derived from anything more than searching through the memory space with
7 commands like:
8
9         ivtvctl -O min=0x02000000,max=0x020000ff
10
11 So take this as is, I'm always searching for more stuff, it's a large
12 register space :-).
13
14 Memory Map
15 ==========
16
17 The cx2341x exposes its entire 64M memory space to the PCI host via the PCI BAR0
18 (Base Address Register 0). The addresses here are offsets relative to the
19 address held in BAR0.
20
21 0x00000000-0x00ffffff Encoder memory space
22 0x00000000-0x0003ffff Encode.rom
23       ???-???         MPEG buffer(s)
24       ???-???         Raw video capture buffer(s)
25       ???-???         Raw audio capture buffer(s)
26       ???-???         Display buffers (6 or 9)
27
28 0x01000000-0x01ffffff Decoder memory space
29 0x01000000-0x0103ffff Decode.rom
30       ???-???         MPEG buffers(s)
31 0x0114b000-0x0115afff Audio.rom (deprecated?)
32
33 0x02000000-0x0200ffff Register Space
34
35 Registers
36 =========
37
38 The registers occupy the 64k space starting at the 0x02000000 offset from BAR0.
39 All of these registers are 32 bits wide.
40
41 DMA Registers 0x000-0xff:
42
43  0x00 - Control:
44         0=reset/cancel, 1=read, 2=write, 4=stop
45  0x04 - DMA status:
46         1=read busy, 2=write busy, 4=read error, 8=write error, 16=link list error
47  0x08 - pci DMA pointer for read link list
48  0x0c - pci DMA pointer for write link list
49  0x10 - read/write DMA enable:
50         1=read enable, 2=write enable
51  0x14 - always 0xffffffff, if set any lower instability occurs, 0x00 crashes
52  0x18 - ??
53  0x1c - always 0x20 or 32, smaller values slow down DMA transactions
54  0x20 - always value of 0x780a010a
55  0x24-0x3c - usually just random values???
56  0x40 - Interrupt status
57  0x44 - Write a bit here and shows up in Interrupt status 0x40
58  0x48 - Interrupt Mask
59  0x4C - always value of 0xfffdffff,
60         if changed to 0xffffffff DMA write interrupts break.
61  0x50 - always 0xffffffff
62  0x54 - always 0xffffffff (0x4c, 0x50, 0x54 seem like interrupt masks, are
63         3 processors on chip, Java ones, VPU, SPU, APU, maybe these are the
64         interrupt masks???).
65  0x60-0x7C - random values
66  0x80 - first write linked list reg, for Encoder Memory addr
67  0x84 - first write linked list reg, for pci memory addr
68  0x88 - first write linked list reg, for length of buffer in memory addr
69         (|0x80000000 or this for last link)
70  0x8c-0xcc - rest of write linked list reg, 8 sets of 3 total, DMA goes here
71         from linked list addr in reg 0x0c, firmware must push through or
72         something.
73  0xe0 - first (and only) read linked list reg, for pci memory addr
74  0xe4 - first (and only) read linked list reg, for Decoder memory addr
75  0xe8 - first (and only) read linked list reg, for length of buffer
76  0xec-0xff - Nothing seems to be in these registers, 0xec-f4 are 0x00000000.
77
78 Memory locations for Encoder Buffers 0x700-0x7ff:
79
80 These registers show offsets of memory locations pertaining to each
81 buffer area used for encoding, have to shift them by <<1 first.
82
83 0x07F8: Encoder SDRAM refresh
84 0x07FC: Encoder SDRAM pre-charge
85
86 Memory locations for Decoder Buffers 0x800-0x8ff:
87
88 These registers show offsets of memory locations pertaining to each
89 buffer area used for decoding, have to shift them by <<1 first.
90
91 0x08F8: Decoder SDRAM refresh
92 0x08FC: Decoder SDRAM pre-charge
93
94 Other memory locations:
95
96 0x2800: Video Display Module control
97 0x2D00: AO (audio output?) control
98 0x2D24: Bytes Flushed
99 0x7000: LSB I2C write clock bit (inverted)
100 0x7004: LSB I2C write data bit (inverted)
101 0x7008: LSB I2C read clock bit
102 0x700c: LSB I2C read data bit
103 0x9008: GPIO get input state
104 0x900c: GPIO set output state
105 0x9020: GPIO direction (Bit7 (GPIO 0..7) - 0:input, 1:output)
106 0x9050: SPU control
107 0x9054: Reset HW blocks
108 0x9058: VPU control
109 0xA018: Bit6: interrupt pending?
110 0xA064: APU command
111
112
113 Interrupt Status Register
114 =========================
115
116 The definition of the bits in the interrupt status register 0x0040, and the
117 interrupt mask 0x0048. If a bit is cleared in the mask, then we want our ISR to
118 execute.
119
120 Bit
121 31 Encoder Start Capture
122 30 Encoder EOS
123 29 Encoder VBI capture
124 28 Encoder Video Input Module reset event
125 27 Encoder DMA complete
126 26
127 25 Decoder copy protect detection event
128 24 Decoder audio mode change detection event
129 23
130 22 Decoder data request
131 21 Decoder I-Frame? done
132 20 Decoder DMA complete
133 19 Decoder VBI re-insertion
134 18 Decoder DMA err (linked-list bad)
135
136 Missing
137 Encoder API call completed
138 Decoder API call completed
139 Encoder API post(?)
140 Decoder API post(?)
141 Decoder VTRACE event