diff options
author | Linus Torvalds <torvalds@g5.osdl.org> | 2005-11-02 00:49:07 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2005-11-02 00:49:07 -0500 |
commit | d8762748cae4f85b3201c0304969d993b42d5258 (patch) | |
tree | 559819d9b17e5ee305d705cf9f31ac5de2aab54a /drivers/char/drm/radeon_cp.c | |
parent | ce4633704038f9bf39f20c10691747d6fc127bf4 (diff) | |
parent | a4e62fa031a9681477207b08391c3a5c5c831ce7 (diff) |
Merge master.kernel.org:/pub/scm/linux/kernel/git/airlied/drm-2.6
Manual fixups for some clashes due to re-indenting.
Diffstat (limited to 'drivers/char/drm/radeon_cp.c')
-rw-r--r-- | drivers/char/drm/radeon_cp.c | 2483 |
1 files changed, 1280 insertions, 1203 deletions
diff --git a/drivers/char/drm/radeon_cp.c b/drivers/char/drm/radeon_cp.c index 12ef13ff04ca..03839ea31092 100644 --- a/drivers/char/drm/radeon_cp.c +++ b/drivers/char/drm/radeon_cp.c | |||
@@ -36,788 +36,787 @@ | |||
36 | 36 | ||
37 | #define RADEON_FIFO_DEBUG 0 | 37 | #define RADEON_FIFO_DEBUG 0 |
38 | 38 | ||
39 | static int radeon_do_cleanup_cp( drm_device_t *dev ); | 39 | static int radeon_do_cleanup_cp(drm_device_t * dev); |
40 | 40 | ||
41 | /* CP microcode (from ATI) */ | 41 | /* CP microcode (from ATI) */ |
42 | static u32 R200_cp_microcode[][2] = { | 42 | static u32 R200_cp_microcode[][2] = { |
43 | { 0x21007000, 0000000000 }, | 43 | {0x21007000, 0000000000}, |
44 | { 0x20007000, 0000000000 }, | 44 | {0x20007000, 0000000000}, |
45 | { 0x000000ab, 0x00000004 }, | 45 | {0x000000ab, 0x00000004}, |
46 | { 0x000000af, 0x00000004 }, | 46 | {0x000000af, 0x00000004}, |
47 | { 0x66544a49, 0000000000 }, | 47 | {0x66544a49, 0000000000}, |
48 | { 0x49494174, 0000000000 }, | 48 | {0x49494174, 0000000000}, |
49 | { 0x54517d83, 0000000000 }, | 49 | {0x54517d83, 0000000000}, |
50 | { 0x498d8b64, 0000000000 }, | 50 | {0x498d8b64, 0000000000}, |
51 | { 0x49494949, 0000000000 }, | 51 | {0x49494949, 0000000000}, |
52 | { 0x49da493c, 0000000000 }, | 52 | {0x49da493c, 0000000000}, |
53 | { 0x49989898, 0000000000 }, | 53 | {0x49989898, 0000000000}, |
54 | { 0xd34949d5, 0000000000 }, | 54 | {0xd34949d5, 0000000000}, |
55 | { 0x9dc90e11, 0000000000 }, | 55 | {0x9dc90e11, 0000000000}, |
56 | { 0xce9b9b9b, 0000000000 }, | 56 | {0xce9b9b9b, 0000000000}, |
57 | { 0x000f0000, 0x00000016 }, | 57 | {0x000f0000, 0x00000016}, |
58 | { 0x352e232c, 0000000000 }, | 58 | {0x352e232c, 0000000000}, |
59 | { 0x00000013, 0x00000004 }, | 59 | {0x00000013, 0x00000004}, |
60 | { 0x000f0000, 0x00000016 }, | 60 | {0x000f0000, 0x00000016}, |
61 | { 0x352e272c, 0000000000 }, | 61 | {0x352e272c, 0000000000}, |
62 | { 0x000f0001, 0x00000016 }, | 62 | {0x000f0001, 0x00000016}, |
63 | { 0x3239362f, 0000000000 }, | 63 | {0x3239362f, 0000000000}, |
64 | { 0x000077ef, 0x00000002 }, | 64 | {0x000077ef, 0x00000002}, |
65 | { 0x00061000, 0x00000002 }, | 65 | {0x00061000, 0x00000002}, |
66 | { 0x00000020, 0x0000001a }, | 66 | {0x00000020, 0x0000001a}, |
67 | { 0x00004000, 0x0000001e }, | 67 | {0x00004000, 0x0000001e}, |
68 | { 0x00061000, 0x00000002 }, | 68 | {0x00061000, 0x00000002}, |
69 | { 0x00000020, 0x0000001a }, | 69 | {0x00000020, 0x0000001a}, |
70 | { 0x00004000, 0x0000001e }, | 70 | {0x00004000, 0x0000001e}, |
71 | { 0x00061000, 0x00000002 }, | 71 | {0x00061000, 0x00000002}, |
72 | { 0x00000020, 0x0000001a }, | 72 | {0x00000020, 0x0000001a}, |
73 | { 0x00004000, 0x0000001e }, | 73 | {0x00004000, 0x0000001e}, |
74 | { 0x00000016, 0x00000004 }, | 74 | {0x00000016, 0x00000004}, |
75 | { 0x0003802a, 0x00000002 }, | 75 | {0x0003802a, 0x00000002}, |
76 | { 0x040067e0, 0x00000002 }, | 76 | {0x040067e0, 0x00000002}, |
77 | { 0x00000016, 0x00000004 }, | 77 | {0x00000016, 0x00000004}, |
78 | { 0x000077e0, 0x00000002 }, | 78 | {0x000077e0, 0x00000002}, |
79 | { 0x00065000, 0x00000002 }, | 79 | {0x00065000, 0x00000002}, |
80 | { 0x000037e1, 0x00000002 }, | 80 | {0x000037e1, 0x00000002}, |
81 | { 0x040067e1, 0x00000006 }, | 81 | {0x040067e1, 0x00000006}, |
82 | { 0x000077e0, 0x00000002 }, | 82 | {0x000077e0, 0x00000002}, |
83 | { 0x000077e1, 0x00000002 }, | 83 | {0x000077e1, 0x00000002}, |
84 | { 0x000077e1, 0x00000006 }, | 84 | {0x000077e1, 0x00000006}, |
85 | { 0xffffffff, 0000000000 }, | 85 | {0xffffffff, 0000000000}, |
86 | { 0x10000000, 0000000000 }, | 86 | {0x10000000, 0000000000}, |
87 | { 0x0003802a, 0x00000002 }, | 87 | {0x0003802a, 0x00000002}, |
88 | { 0x040067e0, 0x00000006 }, | 88 | {0x040067e0, 0x00000006}, |
89 | { 0x00007675, 0x00000002 }, | 89 | {0x00007675, 0x00000002}, |
90 | { 0x00007676, 0x00000002 }, | 90 | {0x00007676, 0x00000002}, |
91 | { 0x00007677, 0x00000002 }, | 91 | {0x00007677, 0x00000002}, |
92 | { 0x00007678, 0x00000006 }, | 92 | {0x00007678, 0x00000006}, |
93 | { 0x0003802b, 0x00000002 }, | 93 | {0x0003802b, 0x00000002}, |
94 | { 0x04002676, 0x00000002 }, | 94 | {0x04002676, 0x00000002}, |
95 | { 0x00007677, 0x00000002 }, | 95 | {0x00007677, 0x00000002}, |
96 | { 0x00007678, 0x00000006 }, | 96 | {0x00007678, 0x00000006}, |
97 | { 0x0000002e, 0x00000018 }, | 97 | {0x0000002e, 0x00000018}, |
98 | { 0x0000002e, 0x00000018 }, | 98 | {0x0000002e, 0x00000018}, |
99 | { 0000000000, 0x00000006 }, | 99 | {0000000000, 0x00000006}, |
100 | { 0x0000002f, 0x00000018 }, | 100 | {0x0000002f, 0x00000018}, |
101 | { 0x0000002f, 0x00000018 }, | 101 | {0x0000002f, 0x00000018}, |
102 | { 0000000000, 0x00000006 }, | 102 | {0000000000, 0x00000006}, |
103 | { 0x01605000, 0x00000002 }, | 103 | {0x01605000, 0x00000002}, |
104 | { 0x00065000, 0x00000002 }, | 104 | {0x00065000, 0x00000002}, |
105 | { 0x00098000, 0x00000002 }, | 105 | {0x00098000, 0x00000002}, |
106 | { 0x00061000, 0x00000002 }, | 106 | {0x00061000, 0x00000002}, |
107 | { 0x64c0603d, 0x00000004 }, | 107 | {0x64c0603d, 0x00000004}, |
108 | { 0x00080000, 0x00000016 }, | 108 | {0x00080000, 0x00000016}, |
109 | { 0000000000, 0000000000 }, | 109 | {0000000000, 0000000000}, |
110 | { 0x0400251d, 0x00000002 }, | 110 | {0x0400251d, 0x00000002}, |
111 | { 0x00007580, 0x00000002 }, | 111 | {0x00007580, 0x00000002}, |
112 | { 0x00067581, 0x00000002 }, | 112 | {0x00067581, 0x00000002}, |
113 | { 0x04002580, 0x00000002 }, | 113 | {0x04002580, 0x00000002}, |
114 | { 0x00067581, 0x00000002 }, | 114 | {0x00067581, 0x00000002}, |
115 | { 0x00000046, 0x00000004 }, | 115 | {0x00000046, 0x00000004}, |
116 | { 0x00005000, 0000000000 }, | 116 | {0x00005000, 0000000000}, |
117 | { 0x00061000, 0x00000002 }, | 117 | {0x00061000, 0x00000002}, |
118 | { 0x0000750e, 0x00000002 }, | 118 | {0x0000750e, 0x00000002}, |
119 | { 0x00019000, 0x00000002 }, | 119 | {0x00019000, 0x00000002}, |
120 | { 0x00011055, 0x00000014 }, | 120 | {0x00011055, 0x00000014}, |
121 | { 0x00000055, 0x00000012 }, | 121 | {0x00000055, 0x00000012}, |
122 | { 0x0400250f, 0x00000002 }, | 122 | {0x0400250f, 0x00000002}, |
123 | { 0x0000504a, 0x00000004 }, | 123 | {0x0000504a, 0x00000004}, |
124 | { 0x00007565, 0x00000002 }, | 124 | {0x00007565, 0x00000002}, |
125 | { 0x00007566, 0x00000002 }, | 125 | {0x00007566, 0x00000002}, |
126 | { 0x00000051, 0x00000004 }, | 126 | {0x00000051, 0x00000004}, |
127 | { 0x01e655b4, 0x00000002 }, | 127 | {0x01e655b4, 0x00000002}, |
128 | { 0x4401b0dc, 0x00000002 }, | 128 | {0x4401b0dc, 0x00000002}, |
129 | { 0x01c110dc, 0x00000002 }, | 129 | {0x01c110dc, 0x00000002}, |
130 | { 0x2666705d, 0x00000018 }, | 130 | {0x2666705d, 0x00000018}, |
131 | { 0x040c2565, 0x00000002 }, | 131 | {0x040c2565, 0x00000002}, |
132 | { 0x0000005d, 0x00000018 }, | 132 | {0x0000005d, 0x00000018}, |
133 | { 0x04002564, 0x00000002 }, | 133 | {0x04002564, 0x00000002}, |
134 | { 0x00007566, 0x00000002 }, | 134 | {0x00007566, 0x00000002}, |
135 | { 0x00000054, 0x00000004 }, | 135 | {0x00000054, 0x00000004}, |
136 | { 0x00401060, 0x00000008 }, | 136 | {0x00401060, 0x00000008}, |
137 | { 0x00101000, 0x00000002 }, | 137 | {0x00101000, 0x00000002}, |
138 | { 0x000d80ff, 0x00000002 }, | 138 | {0x000d80ff, 0x00000002}, |
139 | { 0x00800063, 0x00000008 }, | 139 | {0x00800063, 0x00000008}, |
140 | { 0x000f9000, 0x00000002 }, | 140 | {0x000f9000, 0x00000002}, |
141 | { 0x000e00ff, 0x00000002 }, | 141 | {0x000e00ff, 0x00000002}, |
142 | { 0000000000, 0x00000006 }, | 142 | {0000000000, 0x00000006}, |
143 | { 0x00000080, 0x00000018 }, | 143 | {0x00000080, 0x00000018}, |
144 | { 0x00000054, 0x00000004 }, | 144 | {0x00000054, 0x00000004}, |
145 | { 0x00007576, 0x00000002 }, | 145 | {0x00007576, 0x00000002}, |
146 | { 0x00065000, 0x00000002 }, | 146 | {0x00065000, 0x00000002}, |
147 | { 0x00009000, 0x00000002 }, | 147 | {0x00009000, 0x00000002}, |
148 | { 0x00041000, 0x00000002 }, | 148 | {0x00041000, 0x00000002}, |
149 | { 0x0c00350e, 0x00000002 }, | 149 | {0x0c00350e, 0x00000002}, |
150 | { 0x00049000, 0x00000002 }, | 150 | {0x00049000, 0x00000002}, |
151 | { 0x00051000, 0x00000002 }, | 151 | {0x00051000, 0x00000002}, |
152 | { 0x01e785f8, 0x00000002 }, | 152 | {0x01e785f8, 0x00000002}, |
153 | { 0x00200000, 0x00000002 }, | 153 | {0x00200000, 0x00000002}, |
154 | { 0x00600073, 0x0000000c }, | 154 | {0x00600073, 0x0000000c}, |
155 | { 0x00007563, 0x00000002 }, | 155 | {0x00007563, 0x00000002}, |
156 | { 0x006075f0, 0x00000021 }, | 156 | {0x006075f0, 0x00000021}, |
157 | { 0x20007068, 0x00000004 }, | 157 | {0x20007068, 0x00000004}, |
158 | { 0x00005068, 0x00000004 }, | 158 | {0x00005068, 0x00000004}, |
159 | { 0x00007576, 0x00000002 }, | 159 | {0x00007576, 0x00000002}, |
160 | { 0x00007577, 0x00000002 }, | 160 | {0x00007577, 0x00000002}, |
161 | { 0x0000750e, 0x00000002 }, | 161 | {0x0000750e, 0x00000002}, |
162 | { 0x0000750f, 0x00000002 }, | 162 | {0x0000750f, 0x00000002}, |
163 | { 0x00a05000, 0x00000002 }, | 163 | {0x00a05000, 0x00000002}, |
164 | { 0x00600076, 0x0000000c }, | 164 | {0x00600076, 0x0000000c}, |
165 | { 0x006075f0, 0x00000021 }, | 165 | {0x006075f0, 0x00000021}, |
166 | { 0x000075f8, 0x00000002 }, | 166 | {0x000075f8, 0x00000002}, |
167 | { 0x00000076, 0x00000004 }, | 167 | {0x00000076, 0x00000004}, |
168 | { 0x000a750e, 0x00000002 }, | 168 | {0x000a750e, 0x00000002}, |
169 | { 0x0020750f, 0x00000002 }, | 169 | {0x0020750f, 0x00000002}, |
170 | { 0x00600079, 0x00000004 }, | 170 | {0x00600079, 0x00000004}, |
171 | { 0x00007570, 0x00000002 }, | 171 | {0x00007570, 0x00000002}, |
172 | { 0x00007571, 0x00000002 }, | 172 | {0x00007571, 0x00000002}, |
173 | { 0x00007572, 0x00000006 }, | 173 | {0x00007572, 0x00000006}, |
174 | { 0x00005000, 0x00000002 }, | 174 | {0x00005000, 0x00000002}, |
175 | { 0x00a05000, 0x00000002 }, | 175 | {0x00a05000, 0x00000002}, |
176 | { 0x00007568, 0x00000002 }, | 176 | {0x00007568, 0x00000002}, |
177 | { 0x00061000, 0x00000002 }, | 177 | {0x00061000, 0x00000002}, |
178 | { 0x00000084, 0x0000000c }, | 178 | {0x00000084, 0x0000000c}, |
179 | { 0x00058000, 0x00000002 }, | 179 | {0x00058000, 0x00000002}, |
180 | { 0x0c607562, 0x00000002 }, | 180 | {0x0c607562, 0x00000002}, |
181 | { 0x00000086, 0x00000004 }, | 181 | {0x00000086, 0x00000004}, |
182 | { 0x00600085, 0x00000004 }, | 182 | {0x00600085, 0x00000004}, |
183 | { 0x400070dd, 0000000000 }, | 183 | {0x400070dd, 0000000000}, |
184 | { 0x000380dd, 0x00000002 }, | 184 | {0x000380dd, 0x00000002}, |
185 | { 0x00000093, 0x0000001c }, | 185 | {0x00000093, 0x0000001c}, |
186 | { 0x00065095, 0x00000018 }, | 186 | {0x00065095, 0x00000018}, |
187 | { 0x040025bb, 0x00000002 }, | 187 | {0x040025bb, 0x00000002}, |
188 | { 0x00061096, 0x00000018 }, | 188 | {0x00061096, 0x00000018}, |
189 | { 0x040075bc, 0000000000 }, | 189 | {0x040075bc, 0000000000}, |
190 | { 0x000075bb, 0x00000002 }, | 190 | {0x000075bb, 0x00000002}, |
191 | { 0x000075bc, 0000000000 }, | 191 | {0x000075bc, 0000000000}, |
192 | { 0x00090000, 0x00000006 }, | 192 | {0x00090000, 0x00000006}, |
193 | { 0x00090000, 0x00000002 }, | 193 | {0x00090000, 0x00000002}, |
194 | { 0x000d8002, 0x00000006 }, | 194 | {0x000d8002, 0x00000006}, |
195 | { 0x00005000, 0x00000002 }, | 195 | {0x00005000, 0x00000002}, |
196 | { 0x00007821, 0x00000002 }, | 196 | {0x00007821, 0x00000002}, |
197 | { 0x00007800, 0000000000 }, | 197 | {0x00007800, 0000000000}, |
198 | { 0x00007821, 0x00000002 }, | 198 | {0x00007821, 0x00000002}, |
199 | { 0x00007800, 0000000000 }, | 199 | {0x00007800, 0000000000}, |
200 | { 0x01665000, 0x00000002 }, | 200 | {0x01665000, 0x00000002}, |
201 | { 0x000a0000, 0x00000002 }, | 201 | {0x000a0000, 0x00000002}, |
202 | { 0x000671cc, 0x00000002 }, | 202 | {0x000671cc, 0x00000002}, |
203 | { 0x0286f1cd, 0x00000002 }, | 203 | {0x0286f1cd, 0x00000002}, |
204 | { 0x000000a3, 0x00000010 }, | 204 | {0x000000a3, 0x00000010}, |
205 | { 0x21007000, 0000000000 }, | 205 | {0x21007000, 0000000000}, |
206 | { 0x000000aa, 0x0000001c }, | 206 | {0x000000aa, 0x0000001c}, |
207 | { 0x00065000, 0x00000002 }, | 207 | {0x00065000, 0x00000002}, |
208 | { 0x000a0000, 0x00000002 }, | 208 | {0x000a0000, 0x00000002}, |
209 | { 0x00061000, 0x00000002 }, | 209 | {0x00061000, 0x00000002}, |
210 | { 0x000b0000, 0x00000002 }, | 210 | {0x000b0000, 0x00000002}, |
211 | { 0x38067000, 0x00000002 }, | 211 | {0x38067000, 0x00000002}, |
212 | { 0x000a00a6, 0x00000004 }, | 212 | {0x000a00a6, 0x00000004}, |
213 | { 0x20007000, 0000000000 }, | 213 | {0x20007000, 0000000000}, |
214 | { 0x01200000, 0x00000002 }, | 214 | {0x01200000, 0x00000002}, |
215 | { 0x20077000, 0x00000002 }, | 215 | {0x20077000, 0x00000002}, |
216 | { 0x01200000, 0x00000002 }, | 216 | {0x01200000, 0x00000002}, |
217 | { 0x20007000, 0000000000 }, | 217 | {0x20007000, 0000000000}, |
218 | { 0x00061000, 0x00000002 }, | 218 | {0x00061000, 0x00000002}, |
219 | { 0x0120751b, 0x00000002 }, | 219 | {0x0120751b, 0x00000002}, |
220 | { 0x8040750a, 0x00000002 }, | 220 | {0x8040750a, 0x00000002}, |
221 | { 0x8040750b, 0x00000002 }, | 221 | {0x8040750b, 0x00000002}, |
222 | { 0x00110000, 0x00000002 }, | 222 | {0x00110000, 0x00000002}, |
223 | { 0x000380dd, 0x00000002 }, | 223 | {0x000380dd, 0x00000002}, |
224 | { 0x000000bd, 0x0000001c }, | 224 | {0x000000bd, 0x0000001c}, |
225 | { 0x00061096, 0x00000018 }, | 225 | {0x00061096, 0x00000018}, |
226 | { 0x844075bd, 0x00000002 }, | 226 | {0x844075bd, 0x00000002}, |
227 | { 0x00061095, 0x00000018 }, | 227 | {0x00061095, 0x00000018}, |
228 | { 0x840075bb, 0x00000002 }, | 228 | {0x840075bb, 0x00000002}, |
229 | { 0x00061096, 0x00000018 }, | 229 | {0x00061096, 0x00000018}, |
230 | { 0x844075bc, 0x00000002 }, | 230 | {0x844075bc, 0x00000002}, |
231 | { 0x000000c0, 0x00000004 }, | 231 | {0x000000c0, 0x00000004}, |
232 | { 0x804075bd, 0x00000002 }, | 232 | {0x804075bd, 0x00000002}, |
233 | { 0x800075bb, 0x00000002 }, | 233 | {0x800075bb, 0x00000002}, |
234 | { 0x804075bc, 0x00000002 }, | 234 | {0x804075bc, 0x00000002}, |
235 | { 0x00108000, 0x00000002 }, | 235 | {0x00108000, 0x00000002}, |
236 | { 0x01400000, 0x00000002 }, | 236 | {0x01400000, 0x00000002}, |
237 | { 0x006000c4, 0x0000000c }, | 237 | {0x006000c4, 0x0000000c}, |
238 | { 0x20c07000, 0x00000020 }, | 238 | {0x20c07000, 0x00000020}, |
239 | { 0x000000c6, 0x00000012 }, | 239 | {0x000000c6, 0x00000012}, |
240 | { 0x00800000, 0x00000006 }, | 240 | {0x00800000, 0x00000006}, |
241 | { 0x0080751d, 0x00000006 }, | 241 | {0x0080751d, 0x00000006}, |
242 | { 0x000025bb, 0x00000002 }, | 242 | {0x000025bb, 0x00000002}, |
243 | { 0x000040c0, 0x00000004 }, | 243 | {0x000040c0, 0x00000004}, |
244 | { 0x0000775c, 0x00000002 }, | 244 | {0x0000775c, 0x00000002}, |
245 | { 0x00a05000, 0x00000002 }, | 245 | {0x00a05000, 0x00000002}, |
246 | { 0x00661000, 0x00000002 }, | 246 | {0x00661000, 0x00000002}, |
247 | { 0x0460275d, 0x00000020 }, | 247 | {0x0460275d, 0x00000020}, |
248 | { 0x00004000, 0000000000 }, | 248 | {0x00004000, 0000000000}, |
249 | { 0x00007999, 0x00000002 }, | 249 | {0x00007999, 0x00000002}, |
250 | { 0x00a05000, 0x00000002 }, | 250 | {0x00a05000, 0x00000002}, |
251 | { 0x00661000, 0x00000002 }, | 251 | {0x00661000, 0x00000002}, |
252 | { 0x0460299b, 0x00000020 }, | 252 | {0x0460299b, 0x00000020}, |
253 | { 0x00004000, 0000000000 }, | 253 | {0x00004000, 0000000000}, |
254 | { 0x01e00830, 0x00000002 }, | 254 | {0x01e00830, 0x00000002}, |
255 | { 0x21007000, 0000000000 }, | 255 | {0x21007000, 0000000000}, |
256 | { 0x00005000, 0x00000002 }, | 256 | {0x00005000, 0x00000002}, |
257 | { 0x00038042, 0x00000002 }, | 257 | {0x00038042, 0x00000002}, |
258 | { 0x040025e0, 0x00000002 }, | 258 | {0x040025e0, 0x00000002}, |
259 | { 0x000075e1, 0000000000 }, | 259 | {0x000075e1, 0000000000}, |
260 | { 0x00000001, 0000000000 }, | 260 | {0x00000001, 0000000000}, |
261 | { 0x000380d9, 0x00000002 }, | 261 | {0x000380d9, 0x00000002}, |
262 | { 0x04007394, 0000000000 }, | 262 | {0x04007394, 0000000000}, |
263 | { 0000000000, 0000000000 }, | 263 | {0000000000, 0000000000}, |
264 | { 0000000000, 0000000000 }, | 264 | {0000000000, 0000000000}, |
265 | { 0000000000, 0000000000 }, | 265 | {0000000000, 0000000000}, |
266 | { 0000000000, 0000000000 }, | 266 | {0000000000, 0000000000}, |
267 | { 0000000000, 0000000000 }, | 267 | {0000000000, 0000000000}, |
268 | { 0000000000, 0000000000 }, | 268 | {0000000000, 0000000000}, |
269 | { 0000000000, 0000000000 }, | 269 | {0000000000, 0000000000}, |
270 | { 0000000000, 0000000000 }, | 270 | {0000000000, 0000000000}, |
271 | { 0000000000, 0000000000 }, | 271 | {0000000000, 0000000000}, |
272 | { 0000000000, 0000000000 }, | 272 | {0000000000, 0000000000}, |
273 | { 0000000000, 0000000000 }, | 273 | {0000000000, 0000000000}, |
274 | { 0000000000, 0000000000 }, | 274 | {0000000000, 0000000000}, |
275 | { 0000000000, 0000000000 }, | 275 | {0000000000, 0000000000}, |
276 | { 0000000000, 0000000000 }, | 276 | {0000000000, 0000000000}, |
277 | { 0000000000, 0000000000 }, | 277 | {0000000000, 0000000000}, |
278 | { 0000000000, 0000000000 }, | 278 | {0000000000, 0000000000}, |
279 | { 0000000000, 0000000000 }, | 279 | {0000000000, 0000000000}, |
280 | { 0000000000, 0000000000 }, | 280 | {0000000000, 0000000000}, |
281 | { 0000000000, 0000000000 }, | 281 | {0000000000, 0000000000}, |
282 | { 0000000000, 0000000000 }, | 282 | {0000000000, 0000000000}, |
283 | { 0000000000, 0000000000 }, | 283 | {0000000000, 0000000000}, |
284 | { 0000000000, 0000000000 }, | 284 | {0000000000, 0000000000}, |
285 | { 0000000000, 0000000000 }, | 285 | {0000000000, 0000000000}, |
286 | { 0000000000, 0000000000 }, | 286 | {0000000000, 0000000000}, |
287 | { 0000000000, 0000000000 }, | 287 | {0000000000, 0000000000}, |
288 | { 0000000000, 0000000000 }, | 288 | {0000000000, 0000000000}, |
289 | { 0000000000, 0000000000 }, | 289 | {0000000000, 0000000000}, |
290 | { 0000000000, 0000000000 }, | 290 | {0000000000, 0000000000}, |
291 | { 0000000000, 0000000000 }, | 291 | {0000000000, 0000000000}, |
292 | { 0000000000, 0000000000 }, | 292 | {0000000000, 0000000000}, |
293 | { 0000000000, 0000000000 }, | 293 | {0000000000, 0000000000}, |
294 | { 0000000000, 0000000000 }, | 294 | {0000000000, 0000000000}, |
295 | { 0000000000, 0000000000 }, | 295 | {0000000000, 0000000000}, |
296 | { 0000000000, 0000000000 }, | 296 | {0000000000, 0000000000}, |
297 | { 0000000000, 0000000000 }, | 297 | {0000000000, 0000000000}, |
298 | { 0000000000, 0000000000 }, | 298 | {0000000000, 0000000000}, |
299 | }; | 299 | }; |
300 | 300 | ||
301 | |||
302 | static u32 radeon_cp_microcode[][2] = { | 301 | static u32 radeon_cp_microcode[][2] = { |
303 | { 0x21007000, 0000000000 }, | 302 | {0x21007000, 0000000000}, |
304 | { 0x20007000, 0000000000 }, | 303 | {0x20007000, 0000000000}, |
305 | { 0x000000b4, 0x00000004 }, | 304 | {0x000000b4, 0x00000004}, |
306 | { 0x000000b8, 0x00000004 }, | 305 | {0x000000b8, 0x00000004}, |
307 | { 0x6f5b4d4c, 0000000000 }, | 306 | {0x6f5b4d4c, 0000000000}, |
308 | { 0x4c4c427f, 0000000000 }, | 307 | {0x4c4c427f, 0000000000}, |
309 | { 0x5b568a92, 0000000000 }, | 308 | {0x5b568a92, 0000000000}, |
310 | { 0x4ca09c6d, 0000000000 }, | 309 | {0x4ca09c6d, 0000000000}, |
311 | { 0xad4c4c4c, 0000000000 }, | 310 | {0xad4c4c4c, 0000000000}, |
312 | { 0x4ce1af3d, 0000000000 }, | 311 | {0x4ce1af3d, 0000000000}, |
313 | { 0xd8afafaf, 0000000000 }, | 312 | {0xd8afafaf, 0000000000}, |
314 | { 0xd64c4cdc, 0000000000 }, | 313 | {0xd64c4cdc, 0000000000}, |
315 | { 0x4cd10d10, 0000000000 }, | 314 | {0x4cd10d10, 0000000000}, |
316 | { 0x000f0000, 0x00000016 }, | 315 | {0x000f0000, 0x00000016}, |
317 | { 0x362f242d, 0000000000 }, | 316 | {0x362f242d, 0000000000}, |
318 | { 0x00000012, 0x00000004 }, | 317 | {0x00000012, 0x00000004}, |
319 | { 0x000f0000, 0x00000016 }, | 318 | {0x000f0000, 0x00000016}, |
320 | { 0x362f282d, 0000000000 }, | 319 | {0x362f282d, 0000000000}, |
321 | { 0x000380e7, 0x00000002 }, | 320 | {0x000380e7, 0x00000002}, |
322 | { 0x04002c97, 0x00000002 }, | 321 | {0x04002c97, 0x00000002}, |
323 | { 0x000f0001, 0x00000016 }, | 322 | {0x000f0001, 0x00000016}, |
324 | { 0x333a3730, 0000000000 }, | 323 | {0x333a3730, 0000000000}, |
325 | { 0x000077ef, 0x00000002 }, | 324 | {0x000077ef, 0x00000002}, |
326 | { 0x00061000, 0x00000002 }, | 325 | {0x00061000, 0x00000002}, |
327 | { 0x00000021, 0x0000001a }, | 326 | {0x00000021, 0x0000001a}, |
328 | { 0x00004000, 0x0000001e }, | 327 | {0x00004000, 0x0000001e}, |
329 | { 0x00061000, 0x00000002 }, | 328 | {0x00061000, 0x00000002}, |
330 | { 0x00000021, 0x0000001a }, | 329 | {0x00000021, 0x0000001a}, |
331 | { 0x00004000, 0x0000001e }, | 330 | {0x00004000, 0x0000001e}, |
332 | { 0x00061000, 0x00000002 }, | 331 | {0x00061000, 0x00000002}, |
333 | { 0x00000021, 0x0000001a }, | 332 | {0x00000021, 0x0000001a}, |
334 | { 0x00004000, 0x0000001e }, | 333 | {0x00004000, 0x0000001e}, |
335 | { 0x00000017, 0x00000004 }, | 334 | {0x00000017, 0x00000004}, |
336 | { 0x0003802b, 0x00000002 }, | 335 | {0x0003802b, 0x00000002}, |
337 | { 0x040067e0, 0x00000002 }, | 336 | {0x040067e0, 0x00000002}, |
338 | { 0x00000017, 0x00000004 }, | 337 | {0x00000017, 0x00000004}, |
339 | { 0x000077e0, 0x00000002 }, | 338 | {0x000077e0, 0x00000002}, |
340 | { 0x00065000, 0x00000002 }, | 339 | {0x00065000, 0x00000002}, |
341 | { 0x000037e1, 0x00000002 }, | 340 | {0x000037e1, 0x00000002}, |
342 | { 0x040067e1, 0x00000006 }, | 341 | {0x040067e1, 0x00000006}, |
343 | { 0x000077e0, 0x00000002 }, | 342 | {0x000077e0, 0x00000002}, |
344 | { 0x000077e1, 0x00000002 }, | 343 | {0x000077e1, 0x00000002}, |
345 | { 0x000077e1, 0x00000006 }, | 344 | {0x000077e1, 0x00000006}, |
346 | { 0xffffffff, 0000000000 }, | 345 | {0xffffffff, 0000000000}, |
347 | { 0x10000000, 0000000000 }, | 346 | {0x10000000, 0000000000}, |
348 | { 0x0003802b, 0x00000002 }, | 347 | {0x0003802b, 0x00000002}, |
349 | { 0x040067e0, 0x00000006 }, | 348 | {0x040067e0, 0x00000006}, |
350 | { 0x00007675, 0x00000002 }, | 349 | {0x00007675, 0x00000002}, |
351 | { 0x00007676, 0x00000002 }, | 350 | {0x00007676, 0x00000002}, |
352 | { 0x00007677, 0x00000002 }, | 351 | {0x00007677, 0x00000002}, |
353 | { 0x00007678, 0x00000006 }, | 352 | {0x00007678, 0x00000006}, |
354 | { 0x0003802c, 0x00000002 }, | 353 | {0x0003802c, 0x00000002}, |
355 | { 0x04002676, 0x00000002 }, | 354 | {0x04002676, 0x00000002}, |
356 | { 0x00007677, 0x00000002 }, | 355 | {0x00007677, 0x00000002}, |
357 | { 0x00007678, 0x00000006 }, | 356 | {0x00007678, 0x00000006}, |
358 | { 0x0000002f, 0x00000018 }, | 357 | {0x0000002f, 0x00000018}, |
359 | { 0x0000002f, 0x00000018 }, | 358 | {0x0000002f, 0x00000018}, |
360 | { 0000000000, 0x00000006 }, | 359 | {0000000000, 0x00000006}, |
361 | { 0x00000030, 0x00000018 }, | 360 | {0x00000030, 0x00000018}, |
362 | { 0x00000030, 0x00000018 }, | 361 | {0x00000030, 0x00000018}, |
363 | { 0000000000, 0x00000006 }, | 362 | {0000000000, 0x00000006}, |
364 | { 0x01605000, 0x00000002 }, | 363 | {0x01605000, 0x00000002}, |
365 | { 0x00065000, 0x00000002 }, | 364 | {0x00065000, 0x00000002}, |
366 | { 0x00098000, 0x00000002 }, | 365 | {0x00098000, 0x00000002}, |
367 | { 0x00061000, 0x00000002 }, | 366 | {0x00061000, 0x00000002}, |
368 | { 0x64c0603e, 0x00000004 }, | 367 | {0x64c0603e, 0x00000004}, |
369 | { 0x000380e6, 0x00000002 }, | 368 | {0x000380e6, 0x00000002}, |
370 | { 0x040025c5, 0x00000002 }, | 369 | {0x040025c5, 0x00000002}, |
371 | { 0x00080000, 0x00000016 }, | 370 | {0x00080000, 0x00000016}, |
372 | { 0000000000, 0000000000 }, | 371 | {0000000000, 0000000000}, |
373 | { 0x0400251d, 0x00000002 }, | 372 | {0x0400251d, 0x00000002}, |
374 | { 0x00007580, 0x00000002 }, | 373 | {0x00007580, 0x00000002}, |
375 | { 0x00067581, 0x00000002 }, | 374 | {0x00067581, 0x00000002}, |
376 | { 0x04002580, 0x00000002 }, | 375 | {0x04002580, 0x00000002}, |
377 | { 0x00067581, 0x00000002 }, | 376 | {0x00067581, 0x00000002}, |
378 | { 0x00000049, 0x00000004 }, | 377 | {0x00000049, 0x00000004}, |
379 | { 0x00005000, 0000000000 }, | 378 | {0x00005000, 0000000000}, |
380 | { 0x000380e6, 0x00000002 }, | 379 | {0x000380e6, 0x00000002}, |
381 | { 0x040025c5, 0x00000002 }, | 380 | {0x040025c5, 0x00000002}, |
382 | { 0x00061000, 0x00000002 }, | 381 | {0x00061000, 0x00000002}, |
383 | { 0x0000750e, 0x00000002 }, | 382 | {0x0000750e, 0x00000002}, |
384 | { 0x00019000, 0x00000002 }, | 383 | {0x00019000, 0x00000002}, |
385 | { 0x00011055, 0x00000014 }, | 384 | {0x00011055, 0x00000014}, |
386 | { 0x00000055, 0x00000012 }, | 385 | {0x00000055, 0x00000012}, |
387 | { 0x0400250f, 0x00000002 }, | 386 | {0x0400250f, 0x00000002}, |
388 | { 0x0000504f, 0x00000004 }, | 387 | {0x0000504f, 0x00000004}, |
389 | { 0x000380e6, 0x00000002 }, | 388 | {0x000380e6, 0x00000002}, |
390 | { 0x040025c5, 0x00000002 }, | 389 | {0x040025c5, 0x00000002}, |
391 | { 0x00007565, 0x00000002 }, | 390 | {0x00007565, 0x00000002}, |
392 | { 0x00007566, 0x00000002 }, | 391 | {0x00007566, 0x00000002}, |
393 | { 0x00000058, 0x00000004 }, | 392 | {0x00000058, 0x00000004}, |
394 | { 0x000380e6, 0x00000002 }, | 393 | {0x000380e6, 0x00000002}, |
395 | { 0x040025c5, 0x00000002 }, | 394 | {0x040025c5, 0x00000002}, |
396 | { 0x01e655b4, 0x00000002 }, | 395 | {0x01e655b4, 0x00000002}, |
397 | { 0x4401b0e4, 0x00000002 }, | 396 | {0x4401b0e4, 0x00000002}, |
398 | { 0x01c110e4, 0x00000002 }, | 397 | {0x01c110e4, 0x00000002}, |
399 | { 0x26667066, 0x00000018 }, | 398 | {0x26667066, 0x00000018}, |
400 | { 0x040c2565, 0x00000002 }, | 399 | {0x040c2565, 0x00000002}, |
401 | { 0x00000066, 0x00000018 }, | 400 | {0x00000066, 0x00000018}, |
402 | { 0x04002564, 0x00000002 }, | 401 | {0x04002564, 0x00000002}, |
403 | { 0x00007566, 0x00000002 }, | 402 | {0x00007566, 0x00000002}, |
404 | { 0x0000005d, 0x00000004 }, | 403 | {0x0000005d, 0x00000004}, |
405 | { 0x00401069, 0x00000008 }, | 404 | {0x00401069, 0x00000008}, |
406 | { 0x00101000, 0x00000002 }, | 405 | {0x00101000, 0x00000002}, |
407 | { 0x000d80ff, 0x00000002 }, | 406 | {0x000d80ff, 0x00000002}, |
408 | { 0x0080006c, 0x00000008 }, | 407 | {0x0080006c, 0x00000008}, |
409 | { 0x000f9000, 0x00000002 }, | 408 | {0x000f9000, 0x00000002}, |
410 | { 0x000e00ff, 0x00000002 }, | 409 | {0x000e00ff, 0x00000002}, |
411 | { 0000000000, 0x00000006 }, | 410 | {0000000000, 0x00000006}, |
412 | { 0x0000008f, 0x00000018 }, | 411 | {0x0000008f, 0x00000018}, |
413 | { 0x0000005b, 0x00000004 }, | 412 | {0x0000005b, 0x00000004}, |
414 | { 0x000380e6, 0x00000002 }, | 413 | {0x000380e6, 0x00000002}, |
415 | { 0x040025c5, 0x00000002 }, | 414 | {0x040025c5, 0x00000002}, |
416 | { 0x00007576, 0x00000002 }, | 415 | {0x00007576, 0x00000002}, |
417 | { 0x00065000, 0x00000002 }, | 416 | {0x00065000, 0x00000002}, |
418 | { 0x00009000, 0x00000002 }, | 417 | {0x00009000, 0x00000002}, |
419 | { 0x00041000, 0x00000002 }, | 418 | {0x00041000, 0x00000002}, |
420 | { 0x0c00350e, 0x00000002 }, | 419 | {0x0c00350e, 0x00000002}, |
421 | { 0x00049000, 0x00000002 }, | 420 | {0x00049000, 0x00000002}, |
422 | { 0x00051000, 0x00000002 }, | 421 | {0x00051000, 0x00000002}, |
423 | { 0x01e785f8, 0x00000002 }, | 422 | {0x01e785f8, 0x00000002}, |
424 | { 0x00200000, 0x00000002 }, | 423 | {0x00200000, 0x00000002}, |
425 | { 0x0060007e, 0x0000000c }, | 424 | {0x0060007e, 0x0000000c}, |
426 | { 0x00007563, 0x00000002 }, | 425 | {0x00007563, 0x00000002}, |
427 | { 0x006075f0, 0x00000021 }, | 426 | {0x006075f0, 0x00000021}, |
428 | { 0x20007073, 0x00000004 }, | 427 | {0x20007073, 0x00000004}, |
429 | { 0x00005073, 0x00000004 }, | 428 | {0x00005073, 0x00000004}, |
430 | { 0x000380e6, 0x00000002 }, | 429 | {0x000380e6, 0x00000002}, |
431 | { 0x040025c5, 0x00000002 }, | 430 | {0x040025c5, 0x00000002}, |
432 | { 0x00007576, 0x00000002 }, | 431 | {0x00007576, 0x00000002}, |
433 | { 0x00007577, 0x00000002 }, | 432 | {0x00007577, 0x00000002}, |
434 | { 0x0000750e, 0x00000002 }, | 433 | {0x0000750e, 0x00000002}, |
435 | { 0x0000750f, 0x00000002 }, | 434 | {0x0000750f, 0x00000002}, |
436 | { 0x00a05000, 0x00000002 }, | 435 | {0x00a05000, 0x00000002}, |
437 | { 0x00600083, 0x0000000c }, | 436 | {0x00600083, 0x0000000c}, |
438 | { 0x006075f0, 0x00000021 }, | 437 | {0x006075f0, 0x00000021}, |
439 | { 0x000075f8, 0x00000002 }, | 438 | {0x000075f8, 0x00000002}, |
440 | { 0x00000083, 0x00000004 }, | 439 | {0x00000083, 0x00000004}, |
441 | { 0x000a750e, 0x00000002 }, | 440 | {0x000a750e, 0x00000002}, |
442 | { 0x000380e6, 0x00000002 }, | 441 | {0x000380e6, 0x00000002}, |
443 | { 0x040025c5, 0x00000002 }, | 442 | {0x040025c5, 0x00000002}, |
444 | { 0x0020750f, 0x00000002 }, | 443 | {0x0020750f, 0x00000002}, |
445 | { 0x00600086, 0x00000004 }, | 444 | {0x00600086, 0x00000004}, |
446 | { 0x00007570, 0x00000002 }, | 445 | {0x00007570, 0x00000002}, |
447 | { 0x00007571, 0x00000002 }, | 446 | {0x00007571, 0x00000002}, |
448 | { 0x00007572, 0x00000006 }, | 447 | {0x00007572, 0x00000006}, |
449 | { 0x000380e6, 0x00000002 }, | 448 | {0x000380e6, 0x00000002}, |
450 | { 0x040025c5, 0x00000002 }, | 449 | {0x040025c5, 0x00000002}, |
451 | { 0x00005000, 0x00000002 }, | 450 | {0x00005000, 0x00000002}, |
452 | { 0x00a05000, 0x00000002 }, | 451 | {0x00a05000, 0x00000002}, |
453 | { 0x00007568, 0x00000002 }, | 452 | {0x00007568, 0x00000002}, |
454 | { 0x00061000, 0x00000002 }, | 453 | {0x00061000, 0x00000002}, |
455 | { 0x00000095, 0x0000000c }, | 454 | {0x00000095, 0x0000000c}, |
456 | { 0x00058000, 0x00000002 }, | 455 | {0x00058000, 0x00000002}, |
457 | { 0x0c607562, 0x00000002 }, | 456 | {0x0c607562, 0x00000002}, |
458 | { 0x00000097, 0x00000004 }, | 457 | {0x00000097, 0x00000004}, |
459 | { 0x000380e6, 0x00000002 }, | 458 | {0x000380e6, 0x00000002}, |
460 | { 0x040025c5, 0x00000002 }, | 459 | {0x040025c5, 0x00000002}, |
461 | { 0x00600096, 0x00000004 }, | 460 | {0x00600096, 0x00000004}, |
462 | { 0x400070e5, 0000000000 }, | 461 | {0x400070e5, 0000000000}, |
463 | { 0x000380e6, 0x00000002 }, | 462 | {0x000380e6, 0x00000002}, |
464 | { 0x040025c5, 0x00000002 }, | 463 | {0x040025c5, 0x00000002}, |
465 | { 0x000380e5, 0x00000002 }, | 464 | {0x000380e5, 0x00000002}, |
466 | { 0x000000a8, 0x0000001c }, | 465 | {0x000000a8, 0x0000001c}, |
467 | { 0x000650aa, 0x00000018 }, | 466 | {0x000650aa, 0x00000018}, |
468 | { 0x040025bb, 0x00000002 }, | 467 | {0x040025bb, 0x00000002}, |
469 | { 0x000610ab, 0x00000018 }, | 468 | {0x000610ab, 0x00000018}, |
470 | { 0x040075bc, 0000000000 }, | 469 | {0x040075bc, 0000000000}, |
471 | { 0x000075bb, 0x00000002 }, | 470 | {0x000075bb, 0x00000002}, |
472 | { 0x000075bc, 0000000000 }, | 471 | {0x000075bc, 0000000000}, |
473 | { 0x00090000, 0x00000006 }, | 472 | {0x00090000, 0x00000006}, |
474 | { 0x00090000, 0x00000002 }, | 473 | {0x00090000, 0x00000002}, |
475 | { 0x000d8002, 0x00000006 }, | 474 | {0x000d8002, 0x00000006}, |
476 | { 0x00007832, 0x00000002 }, | 475 | {0x00007832, 0x00000002}, |
477 | { 0x00005000, 0x00000002 }, | 476 | {0x00005000, 0x00000002}, |
478 | { 0x000380e7, 0x00000002 }, | 477 | {0x000380e7, 0x00000002}, |
479 | { 0x04002c97, 0x00000002 }, | 478 | {0x04002c97, 0x00000002}, |
480 | { 0x00007820, 0x00000002 }, | 479 | {0x00007820, 0x00000002}, |
481 | { 0x00007821, 0x00000002 }, | 480 | {0x00007821, 0x00000002}, |
482 | { 0x00007800, 0000000000 }, | 481 | {0x00007800, 0000000000}, |
483 | { 0x01200000, 0x00000002 }, | 482 | {0x01200000, 0x00000002}, |
484 | { 0x20077000, 0x00000002 }, | 483 | {0x20077000, 0x00000002}, |
485 | { 0x01200000, 0x00000002 }, | 484 | {0x01200000, 0x00000002}, |
486 | { 0x20007000, 0x00000002 }, | 485 | {0x20007000, 0x00000002}, |
487 | { 0x00061000, 0x00000002 }, | 486 | {0x00061000, 0x00000002}, |
488 | { 0x0120751b, 0x00000002 }, | 487 | {0x0120751b, 0x00000002}, |
489 | { 0x8040750a, 0x00000002 }, | 488 | {0x8040750a, 0x00000002}, |
490 | { 0x8040750b, 0x00000002 }, | 489 | {0x8040750b, 0x00000002}, |
491 | { 0x00110000, 0x00000002 }, | 490 | {0x00110000, 0x00000002}, |
492 | { 0x000380e5, 0x00000002 }, | 491 | {0x000380e5, 0x00000002}, |
493 | { 0x000000c6, 0x0000001c }, | 492 | {0x000000c6, 0x0000001c}, |
494 | { 0x000610ab, 0x00000018 }, | 493 | {0x000610ab, 0x00000018}, |
495 | { 0x844075bd, 0x00000002 }, | 494 | {0x844075bd, 0x00000002}, |
496 | { 0x000610aa, 0x00000018 }, | 495 | {0x000610aa, 0x00000018}, |
497 | { 0x840075bb, 0x00000002 }, | 496 | {0x840075bb, 0x00000002}, |
498 | { 0x000610ab, 0x00000018 }, | 497 | {0x000610ab, 0x00000018}, |
499 | { 0x844075bc, 0x00000002 }, | 498 | {0x844075bc, 0x00000002}, |
500 | { 0x000000c9, 0x00000004 }, | 499 | {0x000000c9, 0x00000004}, |
501 | { 0x804075bd, 0x00000002 }, | 500 | {0x804075bd, 0x00000002}, |
502 | { 0x800075bb, 0x00000002 }, | 501 | {0x800075bb, 0x00000002}, |
503 | { 0x804075bc, 0x00000002 }, | 502 | {0x804075bc, 0x00000002}, |
504 | { 0x00108000, 0x00000002 }, | 503 | {0x00108000, 0x00000002}, |
505 | { 0x01400000, 0x00000002 }, | 504 | {0x01400000, 0x00000002}, |
506 | { 0x006000cd, 0x0000000c }, | 505 | {0x006000cd, 0x0000000c}, |
507 | { 0x20c07000, 0x00000020 }, | 506 | {0x20c07000, 0x00000020}, |
508 | { 0x000000cf, 0x00000012 }, | 507 | {0x000000cf, 0x00000012}, |
509 | { 0x00800000, 0x00000006 }, | 508 | {0x00800000, 0x00000006}, |
510 | { 0x0080751d, 0x00000006 }, | 509 | {0x0080751d, 0x00000006}, |
511 | { 0000000000, 0000000000 }, | 510 | {0000000000, 0000000000}, |
512 | { 0x0000775c, 0x00000002 }, | 511 | {0x0000775c, 0x00000002}, |
513 | { 0x00a05000, 0x00000002 }, | 512 | {0x00a05000, 0x00000002}, |
514 | { 0x00661000, 0x00000002 }, | 513 | {0x00661000, 0x00000002}, |
515 | { 0x0460275d, 0x00000020 }, | 514 | {0x0460275d, 0x00000020}, |
516 | { 0x00004000, 0000000000 }, | 515 | {0x00004000, 0000000000}, |
517 | { 0x01e00830, 0x00000002 }, | 516 | {0x01e00830, 0x00000002}, |
518 | { 0x21007000, 0000000000 }, | 517 | {0x21007000, 0000000000}, |
519 | { 0x6464614d, 0000000000 }, | 518 | {0x6464614d, 0000000000}, |
520 | { 0x69687420, 0000000000 }, | 519 | {0x69687420, 0000000000}, |
521 | { 0x00000073, 0000000000 }, | 520 | {0x00000073, 0000000000}, |
522 | { 0000000000, 0000000000 }, | 521 | {0000000000, 0000000000}, |
523 | { 0x00005000, 0x00000002 }, | 522 | {0x00005000, 0x00000002}, |
524 | { 0x000380d0, 0x00000002 }, | 523 | {0x000380d0, 0x00000002}, |
525 | { 0x040025e0, 0x00000002 }, | 524 | {0x040025e0, 0x00000002}, |
526 | { 0x000075e1, 0000000000 }, | 525 | {0x000075e1, 0000000000}, |
527 | { 0x00000001, 0000000000 }, | 526 | {0x00000001, 0000000000}, |
528 | { 0x000380e0, 0x00000002 }, | 527 | {0x000380e0, 0x00000002}, |
529 | { 0x04002394, 0x00000002 }, | 528 | {0x04002394, 0x00000002}, |
530 | { 0x00005000, 0000000000 }, | 529 | {0x00005000, 0000000000}, |
531 | { 0000000000, 0000000000 }, | 530 | {0000000000, 0000000000}, |
532 | { 0000000000, 0000000000 }, | 531 | {0000000000, 0000000000}, |
533 | { 0x00000008, 0000000000 }, | 532 | {0x00000008, 0000000000}, |
534 | { 0x00000004, 0000000000 }, | 533 | {0x00000004, 0000000000}, |
535 | { 0000000000, 0000000000 }, | 534 | {0000000000, 0000000000}, |
536 | { 0000000000, 0000000000 }, | 535 | {0000000000, 0000000000}, |
537 | { 0000000000, 0000000000 }, | 536 | {0000000000, 0000000000}, |
538 | { 0000000000, 0000000000 }, | 537 | {0000000000, 0000000000}, |
539 | { 0000000000, 0000000000 }, | 538 | {0000000000, 0000000000}, |
540 | { 0000000000, 0000000000 }, | 539 | {0000000000, 0000000000}, |
541 | { 0000000000, 0000000000 }, | 540 | {0000000000, 0000000000}, |
542 | { 0000000000, 0000000000 }, | 541 | {0000000000, 0000000000}, |
543 | { 0000000000, 0000000000 }, | 542 | {0000000000, 0000000000}, |
544 | { 0000000000, 0000000000 }, | 543 | {0000000000, 0000000000}, |
545 | { 0000000000, 0000000000 }, | 544 | {0000000000, 0000000000}, |
546 | { 0000000000, 0000000000 }, | 545 | {0000000000, 0000000000}, |
547 | { 0000000000, 0000000000 }, | 546 | {0000000000, 0000000000}, |
548 | { 0000000000, 0000000000 }, | 547 | {0000000000, 0000000000}, |
549 | { 0000000000, 0000000000 }, | 548 | {0000000000, 0000000000}, |
550 | { 0000000000, 0000000000 }, | 549 | {0000000000, 0000000000}, |
551 | { 0000000000, 0000000000 }, | 550 | {0000000000, 0000000000}, |
552 | { 0000000000, 0000000000 }, | 551 | {0000000000, 0000000000}, |
553 | { 0000000000, 0000000000 }, | 552 | {0000000000, 0000000000}, |
554 | { 0000000000, 0000000000 }, | 553 | {0000000000, 0000000000}, |
555 | { 0000000000, 0000000000 }, | 554 | {0000000000, 0000000000}, |
556 | { 0000000000, 0000000000 }, | 555 | {0000000000, 0000000000}, |
557 | { 0000000000, 0000000000 }, | 556 | {0000000000, 0000000000}, |
558 | { 0000000000, 0000000000 }, | 557 | {0000000000, 0000000000}, |
559 | }; | 558 | }; |
560 | 559 | ||
561 | static u32 R300_cp_microcode[][2] = { | 560 | static u32 R300_cp_microcode[][2] = { |
562 | { 0x4200e000, 0000000000 }, | 561 | {0x4200e000, 0000000000}, |
563 | { 0x4000e000, 0000000000 }, | 562 | {0x4000e000, 0000000000}, |
564 | { 0x000000af, 0x00000008 }, | 563 | {0x000000af, 0x00000008}, |
565 | { 0x000000b3, 0x00000008 }, | 564 | {0x000000b3, 0x00000008}, |
566 | { 0x6c5a504f, 0000000000 }, | 565 | {0x6c5a504f, 0000000000}, |
567 | { 0x4f4f497a, 0000000000 }, | 566 | {0x4f4f497a, 0000000000}, |
568 | { 0x5a578288, 0000000000 }, | 567 | {0x5a578288, 0000000000}, |
569 | { 0x4f91906a, 0000000000 }, | 568 | {0x4f91906a, 0000000000}, |
570 | { 0x4f4f4f4f, 0000000000 }, | 569 | {0x4f4f4f4f, 0000000000}, |
571 | { 0x4fe24f44, 0000000000 }, | 570 | {0x4fe24f44, 0000000000}, |
572 | { 0x4f9c9c9c, 0000000000 }, | 571 | {0x4f9c9c9c, 0000000000}, |
573 | { 0xdc4f4fde, 0000000000 }, | 572 | {0xdc4f4fde, 0000000000}, |
574 | { 0xa1cd4f4f, 0000000000 }, | 573 | {0xa1cd4f4f, 0000000000}, |
575 | { 0xd29d9d9d, 0000000000 }, | 574 | {0xd29d9d9d, 0000000000}, |
576 | { 0x4f0f9fd7, 0000000000 }, | 575 | {0x4f0f9fd7, 0000000000}, |
577 | { 0x000ca000, 0x00000004 }, | 576 | {0x000ca000, 0x00000004}, |
578 | { 0x000d0012, 0x00000038 }, | 577 | {0x000d0012, 0x00000038}, |
579 | { 0x0000e8b4, 0x00000004 }, | 578 | {0x0000e8b4, 0x00000004}, |
580 | { 0x000d0014, 0x00000038 }, | 579 | {0x000d0014, 0x00000038}, |
581 | { 0x0000e8b6, 0x00000004 }, | 580 | {0x0000e8b6, 0x00000004}, |
582 | { 0x000d0016, 0x00000038 }, | 581 | {0x000d0016, 0x00000038}, |
583 | { 0x0000e854, 0x00000004 }, | 582 | {0x0000e854, 0x00000004}, |
584 | { 0x000d0018, 0x00000038 }, | 583 | {0x000d0018, 0x00000038}, |
585 | { 0x0000e855, 0x00000004 }, | 584 | {0x0000e855, 0x00000004}, |
586 | { 0x000d001a, 0x00000038 }, | 585 | {0x000d001a, 0x00000038}, |
587 | { 0x0000e856, 0x00000004 }, | 586 | {0x0000e856, 0x00000004}, |
588 | { 0x000d001c, 0x00000038 }, | 587 | {0x000d001c, 0x00000038}, |
589 | { 0x0000e857, 0x00000004 }, | 588 | {0x0000e857, 0x00000004}, |
590 | { 0x000d001e, 0x00000038 }, | 589 | {0x000d001e, 0x00000038}, |
591 | { 0x0000e824, 0x00000004 }, | 590 | {0x0000e824, 0x00000004}, |
592 | { 0x000d0020, 0x00000038 }, | 591 | {0x000d0020, 0x00000038}, |
593 | { 0x0000e825, 0x00000004 }, | 592 | {0x0000e825, 0x00000004}, |
594 | { 0x000d0022, 0x00000038 }, | 593 | {0x000d0022, 0x00000038}, |
595 | { 0x0000e830, 0x00000004 }, | 594 | {0x0000e830, 0x00000004}, |
596 | { 0x000d0024, 0x00000038 }, | 595 | {0x000d0024, 0x00000038}, |
597 | { 0x0000f0c0, 0x00000004 }, | 596 | {0x0000f0c0, 0x00000004}, |
598 | { 0x000d0026, 0x00000038 }, | 597 | {0x000d0026, 0x00000038}, |
599 | { 0x0000f0c1, 0x00000004 }, | 598 | {0x0000f0c1, 0x00000004}, |
600 | { 0x000d0028, 0x00000038 }, | 599 | {0x000d0028, 0x00000038}, |
601 | { 0x0000f041, 0x00000004 }, | 600 | {0x0000f041, 0x00000004}, |
602 | { 0x000d002a, 0x00000038 }, | 601 | {0x000d002a, 0x00000038}, |
603 | { 0x0000f184, 0x00000004 }, | 602 | {0x0000f184, 0x00000004}, |
604 | { 0x000d002c, 0x00000038 }, | 603 | {0x000d002c, 0x00000038}, |
605 | { 0x0000f185, 0x00000004 }, | 604 | {0x0000f185, 0x00000004}, |
606 | { 0x000d002e, 0x00000038 }, | 605 | {0x000d002e, 0x00000038}, |
607 | { 0x0000f186, 0x00000004 }, | 606 | {0x0000f186, 0x00000004}, |
608 | { 0x000d0030, 0x00000038 }, | 607 | {0x000d0030, 0x00000038}, |
609 | { 0x0000f187, 0x00000004 }, | 608 | {0x0000f187, 0x00000004}, |
610 | { 0x000d0032, 0x00000038 }, | 609 | {0x000d0032, 0x00000038}, |
611 | { 0x0000f180, 0x00000004 }, | 610 | {0x0000f180, 0x00000004}, |
612 | { 0x000d0034, 0x00000038 }, | 611 | {0x000d0034, 0x00000038}, |
613 | { 0x0000f393, 0x00000004 }, | 612 | {0x0000f393, 0x00000004}, |
614 | { 0x000d0036, 0x00000038 }, | 613 | {0x000d0036, 0x00000038}, |
615 | { 0x0000f38a, 0x00000004 }, | 614 | {0x0000f38a, 0x00000004}, |
616 | { 0x000d0038, 0x00000038 }, | 615 | {0x000d0038, 0x00000038}, |
617 | { 0x0000f38e, 0x00000004 }, | 616 | {0x0000f38e, 0x00000004}, |
618 | { 0x0000e821, 0x00000004 }, | 617 | {0x0000e821, 0x00000004}, |
619 | { 0x0140a000, 0x00000004 }, | 618 | {0x0140a000, 0x00000004}, |
620 | { 0x00000043, 0x00000018 }, | 619 | {0x00000043, 0x00000018}, |
621 | { 0x00cce800, 0x00000004 }, | 620 | {0x00cce800, 0x00000004}, |
622 | { 0x001b0001, 0x00000004 }, | 621 | {0x001b0001, 0x00000004}, |
623 | { 0x08004800, 0x00000004 }, | 622 | {0x08004800, 0x00000004}, |
624 | { 0x001b0001, 0x00000004 }, | 623 | {0x001b0001, 0x00000004}, |
625 | { 0x08004800, 0x00000004 }, | 624 | {0x08004800, 0x00000004}, |
626 | { 0x001b0001, 0x00000004 }, | 625 | {0x001b0001, 0x00000004}, |
627 | { 0x08004800, 0x00000004 }, | 626 | {0x08004800, 0x00000004}, |
628 | { 0x0000003a, 0x00000008 }, | 627 | {0x0000003a, 0x00000008}, |
629 | { 0x0000a000, 0000000000 }, | 628 | {0x0000a000, 0000000000}, |
630 | { 0x02c0a000, 0x00000004 }, | 629 | {0x02c0a000, 0x00000004}, |
631 | { 0x000ca000, 0x00000004 }, | 630 | {0x000ca000, 0x00000004}, |
632 | { 0x00130000, 0x00000004 }, | 631 | {0x00130000, 0x00000004}, |
633 | { 0x000c2000, 0x00000004 }, | 632 | {0x000c2000, 0x00000004}, |
634 | { 0xc980c045, 0x00000008 }, | 633 | {0xc980c045, 0x00000008}, |
635 | { 0x2000451d, 0x00000004 }, | 634 | {0x2000451d, 0x00000004}, |
636 | { 0x0000e580, 0x00000004 }, | 635 | {0x0000e580, 0x00000004}, |
637 | { 0x000ce581, 0x00000004 }, | 636 | {0x000ce581, 0x00000004}, |
638 | { 0x08004580, 0x00000004 }, | 637 | {0x08004580, 0x00000004}, |
639 | { 0x000ce581, 0x00000004 }, | 638 | {0x000ce581, 0x00000004}, |
640 | { 0x0000004c, 0x00000008 }, | 639 | {0x0000004c, 0x00000008}, |
641 | { 0x0000a000, 0000000000 }, | 640 | {0x0000a000, 0000000000}, |
642 | { 0x000c2000, 0x00000004 }, | 641 | {0x000c2000, 0x00000004}, |
643 | { 0x0000e50e, 0x00000004 }, | 642 | {0x0000e50e, 0x00000004}, |
644 | { 0x00032000, 0x00000004 }, | 643 | {0x00032000, 0x00000004}, |
645 | { 0x00022056, 0x00000028 }, | 644 | {0x00022056, 0x00000028}, |
646 | { 0x00000056, 0x00000024 }, | 645 | {0x00000056, 0x00000024}, |
647 | { 0x0800450f, 0x00000004 }, | 646 | {0x0800450f, 0x00000004}, |
648 | { 0x0000a050, 0x00000008 }, | 647 | {0x0000a050, 0x00000008}, |
649 | { 0x0000e565, 0x00000004 }, | 648 | {0x0000e565, 0x00000004}, |
650 | { 0x0000e566, 0x00000004 }, | 649 | {0x0000e566, 0x00000004}, |
651 | { 0x00000057, 0x00000008 }, | 650 | {0x00000057, 0x00000008}, |
652 | { 0x03cca5b4, 0x00000004 }, | 651 | {0x03cca5b4, 0x00000004}, |
653 | { 0x05432000, 0x00000004 }, | 652 | {0x05432000, 0x00000004}, |
654 | { 0x00022000, 0x00000004 }, | 653 | {0x00022000, 0x00000004}, |
655 | { 0x4ccce063, 0x00000030 }, | 654 | {0x4ccce063, 0x00000030}, |
656 | { 0x08274565, 0x00000004 }, | 655 | {0x08274565, 0x00000004}, |
657 | { 0x00000063, 0x00000030 }, | 656 | {0x00000063, 0x00000030}, |
658 | { 0x08004564, 0x00000004 }, | 657 | {0x08004564, 0x00000004}, |
659 | { 0x0000e566, 0x00000004 }, | 658 | {0x0000e566, 0x00000004}, |
660 | { 0x0000005a, 0x00000008 }, | 659 | {0x0000005a, 0x00000008}, |
661 | { 0x00802066, 0x00000010 }, | 660 | {0x00802066, 0x00000010}, |
662 | { 0x00202000, 0x00000004 }, | 661 | {0x00202000, 0x00000004}, |
663 | { 0x001b00ff, 0x00000004 }, | 662 | {0x001b00ff, 0x00000004}, |
664 | { 0x01000069, 0x00000010 }, | 663 | {0x01000069, 0x00000010}, |
665 | { 0x001f2000, 0x00000004 }, | 664 | {0x001f2000, 0x00000004}, |
666 | { 0x001c00ff, 0x00000004 }, | 665 | {0x001c00ff, 0x00000004}, |
667 | { 0000000000, 0x0000000c }, | 666 | {0000000000, 0x0000000c}, |
668 | { 0x00000085, 0x00000030 }, | 667 | {0x00000085, 0x00000030}, |
669 | { 0x0000005a, 0x00000008 }, | 668 | {0x0000005a, 0x00000008}, |
670 | { 0x0000e576, 0x00000004 }, | 669 | {0x0000e576, 0x00000004}, |
671 | { 0x000ca000, 0x00000004 }, | 670 | {0x000ca000, 0x00000004}, |
672 | { 0x00012000, 0x00000004 }, | 671 | {0x00012000, 0x00000004}, |
673 | { 0x00082000, 0x00000004 }, | 672 | {0x00082000, 0x00000004}, |
674 | { 0x1800650e, 0x00000004 }, | 673 | {0x1800650e, 0x00000004}, |
675 | { 0x00092000, 0x00000004 }, | 674 | {0x00092000, 0x00000004}, |
676 | { 0x000a2000, 0x00000004 }, | 675 | {0x000a2000, 0x00000004}, |
677 | { 0x000f0000, 0x00000004 }, | 676 | {0x000f0000, 0x00000004}, |
678 | { 0x00400000, 0x00000004 }, | 677 | {0x00400000, 0x00000004}, |
679 | { 0x00000079, 0x00000018 }, | 678 | {0x00000079, 0x00000018}, |
680 | { 0x0000e563, 0x00000004 }, | 679 | {0x0000e563, 0x00000004}, |
681 | { 0x00c0e5f9, 0x000000c2 }, | 680 | {0x00c0e5f9, 0x000000c2}, |
682 | { 0x0000006e, 0x00000008 }, | 681 | {0x0000006e, 0x00000008}, |
683 | { 0x0000a06e, 0x00000008 }, | 682 | {0x0000a06e, 0x00000008}, |
684 | { 0x0000e576, 0x00000004 }, | 683 | {0x0000e576, 0x00000004}, |
685 | { 0x0000e577, 0x00000004 }, | 684 | {0x0000e577, 0x00000004}, |
686 | { 0x0000e50e, 0x00000004 }, | 685 | {0x0000e50e, 0x00000004}, |
687 | { 0x0000e50f, 0x00000004 }, | 686 | {0x0000e50f, 0x00000004}, |
688 | { 0x0140a000, 0x00000004 }, | 687 | {0x0140a000, 0x00000004}, |
689 | { 0x0000007c, 0x00000018 }, | 688 | {0x0000007c, 0x00000018}, |
690 | { 0x00c0e5f9, 0x000000c2 }, | 689 | {0x00c0e5f9, 0x000000c2}, |
691 | { 0x0000007c, 0x00000008 }, | 690 | {0x0000007c, 0x00000008}, |
692 | { 0x0014e50e, 0x00000004 }, | 691 | {0x0014e50e, 0x00000004}, |
693 | { 0x0040e50f, 0x00000004 }, | 692 | {0x0040e50f, 0x00000004}, |
694 | { 0x00c0007f, 0x00000008 }, | 693 | {0x00c0007f, 0x00000008}, |
695 | { 0x0000e570, 0x00000004 }, | 694 | {0x0000e570, 0x00000004}, |
696 | { 0x0000e571, 0x00000004 }, | 695 | {0x0000e571, 0x00000004}, |
697 | { 0x0000e572, 0x0000000c }, | 696 | {0x0000e572, 0x0000000c}, |
698 | { 0x0000a000, 0x00000004 }, | 697 | {0x0000a000, 0x00000004}, |
699 | { 0x0140a000, 0x00000004 }, | 698 | {0x0140a000, 0x00000004}, |
700 | { 0x0000e568, 0x00000004 }, | 699 | {0x0000e568, 0x00000004}, |
701 | { 0x000c2000, 0x00000004 }, | 700 | {0x000c2000, 0x00000004}, |
702 | { 0x00000089, 0x00000018 }, | 701 | {0x00000089, 0x00000018}, |
703 | { 0x000b0000, 0x00000004 }, | 702 | {0x000b0000, 0x00000004}, |
704 | { 0x18c0e562, 0x00000004 }, | 703 | {0x18c0e562, 0x00000004}, |
705 | { 0x0000008b, 0x00000008 }, | 704 | {0x0000008b, 0x00000008}, |
706 | { 0x00c0008a, 0x00000008 }, | 705 | {0x00c0008a, 0x00000008}, |
707 | { 0x000700e4, 0x00000004 }, | 706 | {0x000700e4, 0x00000004}, |
708 | { 0x00000097, 0x00000038 }, | 707 | {0x00000097, 0x00000038}, |
709 | { 0x000ca099, 0x00000030 }, | 708 | {0x000ca099, 0x00000030}, |
710 | { 0x080045bb, 0x00000004 }, | 709 | {0x080045bb, 0x00000004}, |
711 | { 0x000c209a, 0x00000030 }, | 710 | {0x000c209a, 0x00000030}, |
712 | { 0x0800e5bc, 0000000000 }, | 711 | {0x0800e5bc, 0000000000}, |
713 | { 0x0000e5bb, 0x00000004 }, | 712 | {0x0000e5bb, 0x00000004}, |
714 | { 0x0000e5bc, 0000000000 }, | 713 | {0x0000e5bc, 0000000000}, |
715 | { 0x00120000, 0x0000000c }, | 714 | {0x00120000, 0x0000000c}, |
716 | { 0x00120000, 0x00000004 }, | 715 | {0x00120000, 0x00000004}, |
717 | { 0x001b0002, 0x0000000c }, | 716 | {0x001b0002, 0x0000000c}, |
718 | { 0x0000a000, 0x00000004 }, | 717 | {0x0000a000, 0x00000004}, |
719 | { 0x0000e821, 0x00000004 }, | 718 | {0x0000e821, 0x00000004}, |
720 | { 0x0000e800, 0000000000 }, | 719 | {0x0000e800, 0000000000}, |
721 | { 0x0000e821, 0x00000004 }, | 720 | {0x0000e821, 0x00000004}, |
722 | { 0x0000e82e, 0000000000 }, | 721 | {0x0000e82e, 0000000000}, |
723 | { 0x02cca000, 0x00000004 }, | 722 | {0x02cca000, 0x00000004}, |
724 | { 0x00140000, 0x00000004 }, | 723 | {0x00140000, 0x00000004}, |
725 | { 0x000ce1cc, 0x00000004 }, | 724 | {0x000ce1cc, 0x00000004}, |
726 | { 0x050de1cd, 0x00000004 }, | 725 | {0x050de1cd, 0x00000004}, |
727 | { 0x000000a7, 0x00000020 }, | 726 | {0x000000a7, 0x00000020}, |
728 | { 0x4200e000, 0000000000 }, | 727 | {0x4200e000, 0000000000}, |
729 | { 0x000000ae, 0x00000038 }, | 728 | {0x000000ae, 0x00000038}, |
730 | { 0x000ca000, 0x00000004 }, | 729 | {0x000ca000, 0x00000004}, |
731 | { 0x00140000, 0x00000004 }, | 730 | {0x00140000, 0x00000004}, |
732 | { 0x000c2000, 0x00000004 }, | 731 | {0x000c2000, 0x00000004}, |
733 | { 0x00160000, 0x00000004 }, | 732 | {0x00160000, 0x00000004}, |
734 | { 0x700ce000, 0x00000004 }, | 733 | {0x700ce000, 0x00000004}, |
735 | { 0x001400aa, 0x00000008 }, | 734 | {0x001400aa, 0x00000008}, |
736 | { 0x4000e000, 0000000000 }, | 735 | {0x4000e000, 0000000000}, |
737 | { 0x02400000, 0x00000004 }, | 736 | {0x02400000, 0x00000004}, |
738 | { 0x400ee000, 0x00000004 }, | 737 | {0x400ee000, 0x00000004}, |
739 | { 0x02400000, 0x00000004 }, | 738 | {0x02400000, 0x00000004}, |
740 | { 0x4000e000, 0000000000 }, | 739 | {0x4000e000, 0000000000}, |
741 | { 0x000c2000, 0x00000004 }, | 740 | {0x000c2000, 0x00000004}, |
742 | { 0x0240e51b, 0x00000004 }, | 741 | {0x0240e51b, 0x00000004}, |
743 | { 0x0080e50a, 0x00000005 }, | 742 | {0x0080e50a, 0x00000005}, |
744 | { 0x0080e50b, 0x00000005 }, | 743 | {0x0080e50b, 0x00000005}, |
745 | { 0x00220000, 0x00000004 }, | 744 | {0x00220000, 0x00000004}, |
746 | { 0x000700e4, 0x00000004 }, | 745 | {0x000700e4, 0x00000004}, |
747 | { 0x000000c1, 0x00000038 }, | 746 | {0x000000c1, 0x00000038}, |
748 | { 0x000c209a, 0x00000030 }, | 747 | {0x000c209a, 0x00000030}, |
749 | { 0x0880e5bd, 0x00000005 }, | 748 | {0x0880e5bd, 0x00000005}, |
750 | { 0x000c2099, 0x00000030 }, | 749 | {0x000c2099, 0x00000030}, |
751 | { 0x0800e5bb, 0x00000005 }, | 750 | {0x0800e5bb, 0x00000005}, |
752 | { 0x000c209a, 0x00000030 }, | 751 | {0x000c209a, 0x00000030}, |
753 | { 0x0880e5bc, 0x00000005 }, | 752 | {0x0880e5bc, 0x00000005}, |
754 | { 0x000000c4, 0x00000008 }, | 753 | {0x000000c4, 0x00000008}, |
755 | { 0x0080e5bd, 0x00000005 }, | 754 | {0x0080e5bd, 0x00000005}, |
756 | { 0x0000e5bb, 0x00000005 }, | 755 | {0x0000e5bb, 0x00000005}, |
757 | { 0x0080e5bc, 0x00000005 }, | 756 | {0x0080e5bc, 0x00000005}, |
758 | { 0x00210000, 0x00000004 }, | 757 | {0x00210000, 0x00000004}, |
759 | { 0x02800000, 0x00000004 }, | 758 | {0x02800000, 0x00000004}, |
760 | { 0x00c000c8, 0x00000018 }, | 759 | {0x00c000c8, 0x00000018}, |
761 | { 0x4180e000, 0x00000040 }, | 760 | {0x4180e000, 0x00000040}, |
762 | { 0x000000ca, 0x00000024 }, | 761 | {0x000000ca, 0x00000024}, |
763 | { 0x01000000, 0x0000000c }, | 762 | {0x01000000, 0x0000000c}, |
764 | { 0x0100e51d, 0x0000000c }, | 763 | {0x0100e51d, 0x0000000c}, |
765 | { 0x000045bb, 0x00000004 }, | 764 | {0x000045bb, 0x00000004}, |
766 | { 0x000080c4, 0x00000008 }, | 765 | {0x000080c4, 0x00000008}, |
767 | { 0x0000f3ce, 0x00000004 }, | 766 | {0x0000f3ce, 0x00000004}, |
768 | { 0x0140a000, 0x00000004 }, | 767 | {0x0140a000, 0x00000004}, |
769 | { 0x00cc2000, 0x00000004 }, | 768 | {0x00cc2000, 0x00000004}, |
770 | { 0x08c053cf, 0x00000040 }, | 769 | {0x08c053cf, 0x00000040}, |
771 | { 0x00008000, 0000000000 }, | 770 | {0x00008000, 0000000000}, |
772 | { 0x0000f3d2, 0x00000004 }, | 771 | {0x0000f3d2, 0x00000004}, |
773 | { 0x0140a000, 0x00000004 }, | 772 | {0x0140a000, 0x00000004}, |
774 | { 0x00cc2000, 0x00000004 }, | 773 | {0x00cc2000, 0x00000004}, |
775 | { 0x08c053d3, 0x00000040 }, | 774 | {0x08c053d3, 0x00000040}, |
776 | { 0x00008000, 0000000000 }, | 775 | {0x00008000, 0000000000}, |
777 | { 0x0000f39d, 0x00000004 }, | 776 | {0x0000f39d, 0x00000004}, |
778 | { 0x0140a000, 0x00000004 }, | 777 | {0x0140a000, 0x00000004}, |
779 | { 0x00cc2000, 0x00000004 }, | 778 | {0x00cc2000, 0x00000004}, |
780 | { 0x08c0539e, 0x00000040 }, | 779 | {0x08c0539e, 0x00000040}, |
781 | { 0x00008000, 0000000000 }, | 780 | {0x00008000, 0000000000}, |
782 | { 0x03c00830, 0x00000004 }, | 781 | {0x03c00830, 0x00000004}, |
783 | { 0x4200e000, 0000000000 }, | 782 | {0x4200e000, 0000000000}, |
784 | { 0x0000a000, 0x00000004 }, | 783 | {0x0000a000, 0x00000004}, |
785 | { 0x200045e0, 0x00000004 }, | 784 | {0x200045e0, 0x00000004}, |
786 | { 0x0000e5e1, 0000000000 }, | 785 | {0x0000e5e1, 0000000000}, |
787 | { 0x00000001, 0000000000 }, | 786 | {0x00000001, 0000000000}, |
788 | { 0x000700e1, 0x00000004 }, | 787 | {0x000700e1, 0x00000004}, |
789 | { 0x0800e394, 0000000000 }, | 788 | {0x0800e394, 0000000000}, |
790 | { 0000000000, 0000000000 }, | 789 | {0000000000, 0000000000}, |
791 | { 0000000000, 0000000000 }, | 790 | {0000000000, 0000000000}, |
792 | { 0000000000, 0000000000 }, | 791 | {0000000000, 0000000000}, |
793 | { 0000000000, 0000000000 }, | 792 | {0000000000, 0000000000}, |
794 | { 0000000000, 0000000000 }, | 793 | {0000000000, 0000000000}, |
795 | { 0000000000, 0000000000 }, | 794 | {0000000000, 0000000000}, |
796 | { 0000000000, 0000000000 }, | 795 | {0000000000, 0000000000}, |
797 | { 0000000000, 0000000000 }, | 796 | {0000000000, 0000000000}, |
798 | { 0000000000, 0000000000 }, | 797 | {0000000000, 0000000000}, |
799 | { 0000000000, 0000000000 }, | 798 | {0000000000, 0000000000}, |
800 | { 0000000000, 0000000000 }, | 799 | {0000000000, 0000000000}, |
801 | { 0000000000, 0000000000 }, | 800 | {0000000000, 0000000000}, |
802 | { 0000000000, 0000000000 }, | 801 | {0000000000, 0000000000}, |
803 | { 0000000000, 0000000000 }, | 802 | {0000000000, 0000000000}, |
804 | { 0000000000, 0000000000 }, | 803 | {0000000000, 0000000000}, |
805 | { 0000000000, 0000000000 }, | 804 | {0000000000, 0000000000}, |
806 | { 0000000000, 0000000000 }, | 805 | {0000000000, 0000000000}, |
807 | { 0000000000, 0000000000 }, | 806 | {0000000000, 0000000000}, |
808 | { 0000000000, 0000000000 }, | 807 | {0000000000, 0000000000}, |
809 | { 0000000000, 0000000000 }, | 808 | {0000000000, 0000000000}, |
810 | { 0000000000, 0000000000 }, | 809 | {0000000000, 0000000000}, |
811 | { 0000000000, 0000000000 }, | 810 | {0000000000, 0000000000}, |
812 | { 0000000000, 0000000000 }, | 811 | {0000000000, 0000000000}, |
813 | { 0000000000, 0000000000 }, | 812 | {0000000000, 0000000000}, |
814 | { 0000000000, 0000000000 }, | 813 | {0000000000, 0000000000}, |
815 | { 0000000000, 0000000000 }, | 814 | {0000000000, 0000000000}, |
816 | { 0000000000, 0000000000 }, | 815 | {0000000000, 0000000000}, |
817 | { 0000000000, 0000000000 }, | 816 | {0000000000, 0000000000}, |
818 | }; | 817 | }; |
819 | 818 | ||
820 | static int RADEON_READ_PLL(drm_device_t *dev, int addr) | 819 | static int RADEON_READ_PLL(drm_device_t * dev, int addr) |
821 | { | 820 | { |
822 | drm_radeon_private_t *dev_priv = dev->dev_private; | 821 | drm_radeon_private_t *dev_priv = dev->dev_private; |
823 | 822 | ||
@@ -825,145 +824,148 @@ static int RADEON_READ_PLL(drm_device_t *dev, int addr) | |||
825 | return RADEON_READ(RADEON_CLOCK_CNTL_DATA); | 824 | return RADEON_READ(RADEON_CLOCK_CNTL_DATA); |
826 | } | 825 | } |
827 | 826 | ||
827 | static int RADEON_READ_PCIE(drm_radeon_private_t * dev_priv, int addr) | ||
828 | { | ||
829 | RADEON_WRITE8(RADEON_PCIE_INDEX, addr & 0xff); | ||
830 | return RADEON_READ(RADEON_PCIE_DATA); | ||
831 | } | ||
832 | |||
828 | #if RADEON_FIFO_DEBUG | 833 | #if RADEON_FIFO_DEBUG |
829 | static void radeon_status( drm_radeon_private_t *dev_priv ) | 834 | static void radeon_status(drm_radeon_private_t * dev_priv) |
830 | { | 835 | { |
831 | printk( "%s:\n", __FUNCTION__ ); | 836 | printk("%s:\n", __FUNCTION__); |
832 | printk( "RBBM_STATUS = 0x%08x\n", | 837 | printk("RBBM_STATUS = 0x%08x\n", |
833 | (unsigned int)RADEON_READ( RADEON_RBBM_STATUS ) ); | 838 | (unsigned int)RADEON_READ(RADEON_RBBM_STATUS)); |
834 | printk( "CP_RB_RTPR = 0x%08x\n", | 839 | printk("CP_RB_RTPR = 0x%08x\n", |
835 | (unsigned int)RADEON_READ( RADEON_CP_RB_RPTR ) ); | 840 | (unsigned int)RADEON_READ(RADEON_CP_RB_RPTR)); |
836 | printk( "CP_RB_WTPR = 0x%08x\n", | 841 | printk("CP_RB_WTPR = 0x%08x\n", |
837 | (unsigned int)RADEON_READ( RADEON_CP_RB_WPTR ) ); | 842 | (unsigned int)RADEON_READ(RADEON_CP_RB_WPTR)); |
838 | printk( "AIC_CNTL = 0x%08x\n", | 843 | printk("AIC_CNTL = 0x%08x\n", |
839 | (unsigned int)RADEON_READ( RADEON_AIC_CNTL ) ); | 844 | (unsigned int)RADEON_READ(RADEON_AIC_CNTL)); |
840 | printk( "AIC_STAT = 0x%08x\n", | 845 | printk("AIC_STAT = 0x%08x\n", |
841 | (unsigned int)RADEON_READ( RADEON_AIC_STAT ) ); | 846 | (unsigned int)RADEON_READ(RADEON_AIC_STAT)); |
842 | printk( "AIC_PT_BASE = 0x%08x\n", | 847 | printk("AIC_PT_BASE = 0x%08x\n", |
843 | (unsigned int)RADEON_READ( RADEON_AIC_PT_BASE ) ); | 848 | (unsigned int)RADEON_READ(RADEON_AIC_PT_BASE)); |
844 | printk( "TLB_ADDR = 0x%08x\n", | 849 | printk("TLB_ADDR = 0x%08x\n", |
845 | (unsigned int)RADEON_READ( RADEON_AIC_TLB_ADDR ) ); | 850 | (unsigned int)RADEON_READ(RADEON_AIC_TLB_ADDR)); |
846 | printk( "TLB_DATA = 0x%08x\n", | 851 | printk("TLB_DATA = 0x%08x\n", |
847 | (unsigned int)RADEON_READ( RADEON_AIC_TLB_DATA ) ); | 852 | (unsigned int)RADEON_READ(RADEON_AIC_TLB_DATA)); |
848 | } | 853 | } |
849 | #endif | 854 | #endif |
850 | 855 | ||
851 | |||
852 | /* ================================================================ | 856 | /* ================================================================ |
853 | * Engine, FIFO control | 857 | * Engine, FIFO control |
854 | */ | 858 | */ |
855 | 859 | ||
856 | static int radeon_do_pixcache_flush( drm_radeon_private_t *dev_priv ) | 860 | static int radeon_do_pixcache_flush(drm_radeon_private_t * dev_priv) |
857 | { | 861 | { |
858 | u32 tmp; | 862 | u32 tmp; |
859 | int i; | 863 | int i; |
860 | 864 | ||
861 | dev_priv->stats.boxes |= RADEON_BOX_WAIT_IDLE; | 865 | dev_priv->stats.boxes |= RADEON_BOX_WAIT_IDLE; |
862 | 866 | ||
863 | tmp = RADEON_READ( RADEON_RB2D_DSTCACHE_CTLSTAT ); | 867 | tmp = RADEON_READ(RADEON_RB2D_DSTCACHE_CTLSTAT); |
864 | tmp |= RADEON_RB2D_DC_FLUSH_ALL; | 868 | tmp |= RADEON_RB2D_DC_FLUSH_ALL; |
865 | RADEON_WRITE( RADEON_RB2D_DSTCACHE_CTLSTAT, tmp ); | 869 | RADEON_WRITE(RADEON_RB2D_DSTCACHE_CTLSTAT, tmp); |
866 | 870 | ||
867 | for ( i = 0 ; i < dev_priv->usec_timeout ; i++ ) { | 871 | for (i = 0; i < dev_priv->usec_timeout; i++) { |
868 | if ( !(RADEON_READ( RADEON_RB2D_DSTCACHE_CTLSTAT ) | 872 | if (!(RADEON_READ(RADEON_RB2D_DSTCACHE_CTLSTAT) |
869 | & RADEON_RB2D_DC_BUSY) ) { | 873 | & RADEON_RB2D_DC_BUSY)) { |
870 | return 0; | 874 | return 0; |
871 | } | 875 | } |
872 | DRM_UDELAY( 1 ); | 876 | DRM_UDELAY(1); |
873 | } | 877 | } |
874 | 878 | ||
875 | #if RADEON_FIFO_DEBUG | 879 | #if RADEON_FIFO_DEBUG |
876 | DRM_ERROR( "failed!\n" ); | 880 | DRM_ERROR("failed!\n"); |
877 | radeon_status( dev_priv ); | 881 | radeon_status(dev_priv); |
878 | #endif | 882 | #endif |
879 | return DRM_ERR(EBUSY); | 883 | return DRM_ERR(EBUSY); |
880 | } | 884 | } |
881 | 885 | ||
882 | static int radeon_do_wait_for_fifo( drm_radeon_private_t *dev_priv, | 886 | static int radeon_do_wait_for_fifo(drm_radeon_private_t * dev_priv, int entries) |
883 | int entries ) | ||
884 | { | 887 | { |
885 | int i; | 888 | int i; |
886 | 889 | ||
887 | dev_priv->stats.boxes |= RADEON_BOX_WAIT_IDLE; | 890 | dev_priv->stats.boxes |= RADEON_BOX_WAIT_IDLE; |
888 | 891 | ||
889 | for ( i = 0 ; i < dev_priv->usec_timeout ; i++ ) { | 892 | for (i = 0; i < dev_priv->usec_timeout; i++) { |
890 | int slots = ( RADEON_READ( RADEON_RBBM_STATUS ) | 893 | int slots = (RADEON_READ(RADEON_RBBM_STATUS) |
891 | & RADEON_RBBM_FIFOCNT_MASK ); | 894 | & RADEON_RBBM_FIFOCNT_MASK); |
892 | if ( slots >= entries ) return 0; | 895 | if (slots >= entries) |
893 | DRM_UDELAY( 1 ); | 896 | return 0; |
897 | DRM_UDELAY(1); | ||
894 | } | 898 | } |
895 | 899 | ||
896 | #if RADEON_FIFO_DEBUG | 900 | #if RADEON_FIFO_DEBUG |
897 | DRM_ERROR( "failed!\n" ); | 901 | DRM_ERROR("failed!\n"); |
898 | radeon_status( dev_priv ); | 902 | radeon_status(dev_priv); |
899 | #endif | 903 | #endif |
900 | return DRM_ERR(EBUSY); | 904 | return DRM_ERR(EBUSY); |
901 | } | 905 | } |
902 | 906 | ||
903 | static int radeon_do_wait_for_idle( drm_radeon_private_t *dev_priv ) | 907 | static int radeon_do_wait_for_idle(drm_radeon_private_t * dev_priv) |
904 | { | 908 | { |
905 | int i, ret; | 909 | int i, ret; |
906 | 910 | ||
907 | dev_priv->stats.boxes |= RADEON_BOX_WAIT_IDLE; | 911 | dev_priv->stats.boxes |= RADEON_BOX_WAIT_IDLE; |
908 | 912 | ||
909 | ret = radeon_do_wait_for_fifo( dev_priv, 64 ); | 913 | ret = radeon_do_wait_for_fifo(dev_priv, 64); |
910 | if ( ret ) return ret; | 914 | if (ret) |
915 | return ret; | ||
911 | 916 | ||
912 | for ( i = 0 ; i < dev_priv->usec_timeout ; i++ ) { | 917 | for (i = 0; i < dev_priv->usec_timeout; i++) { |
913 | if ( !(RADEON_READ( RADEON_RBBM_STATUS ) | 918 | if (!(RADEON_READ(RADEON_RBBM_STATUS) |
914 | & RADEON_RBBM_ACTIVE) ) { | 919 | & RADEON_RBBM_ACTIVE)) { |
915 | radeon_do_pixcache_flush( dev_priv ); | 920 | radeon_do_pixcache_flush(dev_priv); |
916 | return 0; | 921 | return 0; |
917 | } | 922 | } |
918 | DRM_UDELAY( 1 ); | 923 | DRM_UDELAY(1); |
919 | } | 924 | } |
920 | 925 | ||
921 | #if RADEON_FIFO_DEBUG | 926 | #if RADEON_FIFO_DEBUG |
922 | DRM_ERROR( "failed!\n" ); | 927 | DRM_ERROR("failed!\n"); |
923 | radeon_status( dev_priv ); | 928 | radeon_status(dev_priv); |
924 | #endif | 929 | #endif |
925 | return DRM_ERR(EBUSY); | 930 | return DRM_ERR(EBUSY); |
926 | } | 931 | } |
927 | 932 | ||
928 | |||
929 | /* ================================================================ | 933 | /* ================================================================ |
930 | * CP control, initialization | 934 | * CP control, initialization |
931 | */ | 935 | */ |
932 | 936 | ||
933 | /* Load the microcode for the CP */ | 937 | /* Load the microcode for the CP */ |
934 | static void radeon_cp_load_microcode( drm_radeon_private_t *dev_priv ) | 938 | static void radeon_cp_load_microcode(drm_radeon_private_t * dev_priv) |
935 | { | 939 | { |
936 | int i; | 940 | int i; |
937 | DRM_DEBUG( "\n" ); | 941 | DRM_DEBUG("\n"); |
938 | 942 | ||
939 | radeon_do_wait_for_idle( dev_priv ); | 943 | radeon_do_wait_for_idle(dev_priv); |
940 | 944 | ||
941 | RADEON_WRITE( RADEON_CP_ME_RAM_ADDR, 0 ); | 945 | RADEON_WRITE(RADEON_CP_ME_RAM_ADDR, 0); |
942 | 946 | ||
943 | if (dev_priv->microcode_version==UCODE_R200) { | 947 | if (dev_priv->microcode_version == UCODE_R200) { |
944 | DRM_INFO("Loading R200 Microcode\n"); | 948 | DRM_INFO("Loading R200 Microcode\n"); |
945 | for ( i = 0 ; i < 256 ; i++ ) | 949 | for (i = 0; i < 256; i++) { |
946 | { | 950 | RADEON_WRITE(RADEON_CP_ME_RAM_DATAH, |
947 | RADEON_WRITE( RADEON_CP_ME_RAM_DATAH, | 951 | R200_cp_microcode[i][1]); |
948 | R200_cp_microcode[i][1] ); | 952 | RADEON_WRITE(RADEON_CP_ME_RAM_DATAL, |
949 | RADEON_WRITE( RADEON_CP_ME_RAM_DATAL, | 953 | R200_cp_microcode[i][0]); |
950 | R200_cp_microcode[i][0] ); | ||
951 | } | 954 | } |
952 | } else if (dev_priv->microcode_version==UCODE_R300) { | 955 | } else if (dev_priv->microcode_version == UCODE_R300) { |
953 | DRM_INFO("Loading R300 Microcode\n"); | 956 | DRM_INFO("Loading R300 Microcode\n"); |
954 | for ( i = 0 ; i < 256 ; i++ ) | 957 | for (i = 0; i < 256; i++) { |
955 | { | 958 | RADEON_WRITE(RADEON_CP_ME_RAM_DATAH, |
956 | RADEON_WRITE( RADEON_CP_ME_RAM_DATAH, | 959 | R300_cp_microcode[i][1]); |
957 | R300_cp_microcode[i][1] ); | 960 | RADEON_WRITE(RADEON_CP_ME_RAM_DATAL, |
958 | RADEON_WRITE( RADEON_CP_ME_RAM_DATAL, | 961 | R300_cp_microcode[i][0]); |
959 | R300_cp_microcode[i][0] ); | ||
960 | } | 962 | } |
961 | } else { | 963 | } else { |
962 | for ( i = 0 ; i < 256 ; i++ ) { | 964 | for (i = 0; i < 256; i++) { |
963 | RADEON_WRITE( RADEON_CP_ME_RAM_DATAH, | 965 | RADEON_WRITE(RADEON_CP_ME_RAM_DATAH, |
964 | radeon_cp_microcode[i][1] ); | 966 | radeon_cp_microcode[i][1]); |
965 | RADEON_WRITE( RADEON_CP_ME_RAM_DATAL, | 967 | RADEON_WRITE(RADEON_CP_ME_RAM_DATAL, |
966 | radeon_cp_microcode[i][0] ); | 968 | radeon_cp_microcode[i][0]); |
967 | } | 969 | } |
968 | } | 970 | } |
969 | } | 971 | } |
@@ -972,25 +974,25 @@ static void radeon_cp_load_microcode( drm_radeon_private_t *dev_priv ) | |||
972 | * prior to a wait for idle, as it informs the engine that the command | 974 | * prior to a wait for idle, as it informs the engine that the command |
973 | * stream is ending. | 975 | * stream is ending. |
974 | */ | 976 | */ |
975 | static void radeon_do_cp_flush( drm_radeon_private_t *dev_priv ) | 977 | static void radeon_do_cp_flush(drm_radeon_private_t * dev_priv) |
976 | { | 978 | { |
977 | DRM_DEBUG( "\n" ); | 979 | DRM_DEBUG("\n"); |
978 | #if 0 | 980 | #if 0 |
979 | u32 tmp; | 981 | u32 tmp; |
980 | 982 | ||
981 | tmp = RADEON_READ( RADEON_CP_RB_WPTR ) | (1 << 31); | 983 | tmp = RADEON_READ(RADEON_CP_RB_WPTR) | (1 << 31); |
982 | RADEON_WRITE( RADEON_CP_RB_WPTR, tmp ); | 984 | RADEON_WRITE(RADEON_CP_RB_WPTR, tmp); |
983 | #endif | 985 | #endif |
984 | } | 986 | } |
985 | 987 | ||
986 | /* Wait for the CP to go idle. | 988 | /* Wait for the CP to go idle. |
987 | */ | 989 | */ |
988 | int radeon_do_cp_idle( drm_radeon_private_t *dev_priv ) | 990 | int radeon_do_cp_idle(drm_radeon_private_t * dev_priv) |
989 | { | 991 | { |
990 | RING_LOCALS; | 992 | RING_LOCALS; |
991 | DRM_DEBUG( "\n" ); | 993 | DRM_DEBUG("\n"); |
992 | 994 | ||
993 | BEGIN_RING( 6 ); | 995 | BEGIN_RING(6); |
994 | 996 | ||
995 | RADEON_PURGE_CACHE(); | 997 | RADEON_PURGE_CACHE(); |
996 | RADEON_PURGE_ZCACHE(); | 998 | RADEON_PURGE_ZCACHE(); |
@@ -999,23 +1001,23 @@ int radeon_do_cp_idle( drm_radeon_private_t *dev_priv ) | |||
999 | ADVANCE_RING(); | 1001 | ADVANCE_RING(); |
1000 | COMMIT_RING(); | 1002 | COMMIT_RING(); |
1001 | 1003 | ||
1002 | return radeon_do_wait_for_idle( dev_priv ); | 1004 | return radeon_do_wait_for_idle(dev_priv); |
1003 | } | 1005 | } |
1004 | 1006 | ||
1005 | /* Start the Command Processor. | 1007 | /* Start the Command Processor. |
1006 | */ | 1008 | */ |
1007 | static void radeon_do_cp_start( drm_radeon_private_t *dev_priv ) | 1009 | static void radeon_do_cp_start(drm_radeon_private_t * dev_priv) |
1008 | { | 1010 | { |
1009 | RING_LOCALS; | 1011 | RING_LOCALS; |
1010 | DRM_DEBUG( "\n" ); | 1012 | DRM_DEBUG("\n"); |
1011 | 1013 | ||
1012 | radeon_do_wait_for_idle( dev_priv ); | 1014 | radeon_do_wait_for_idle(dev_priv); |
1013 | 1015 | ||
1014 | RADEON_WRITE( RADEON_CP_CSQ_CNTL, dev_priv->cp_mode ); | 1016 | RADEON_WRITE(RADEON_CP_CSQ_CNTL, dev_priv->cp_mode); |
1015 | 1017 | ||
1016 | dev_priv->cp_running = 1; | 1018 | dev_priv->cp_running = 1; |
1017 | 1019 | ||
1018 | BEGIN_RING( 6 ); | 1020 | BEGIN_RING(6); |
1019 | 1021 | ||
1020 | RADEON_PURGE_CACHE(); | 1022 | RADEON_PURGE_CACHE(); |
1021 | RADEON_PURGE_ZCACHE(); | 1023 | RADEON_PURGE_ZCACHE(); |
@@ -1029,14 +1031,14 @@ static void radeon_do_cp_start( drm_radeon_private_t *dev_priv ) | |||
1029 | * commands, so you must wait for the CP command stream to complete | 1031 | * commands, so you must wait for the CP command stream to complete |
1030 | * before calling this routine. | 1032 | * before calling this routine. |
1031 | */ | 1033 | */ |
1032 | static void radeon_do_cp_reset( drm_radeon_private_t *dev_priv ) | 1034 | static void radeon_do_cp_reset(drm_radeon_private_t * dev_priv) |
1033 | { | 1035 | { |
1034 | u32 cur_read_ptr; | 1036 | u32 cur_read_ptr; |
1035 | DRM_DEBUG( "\n" ); | 1037 | DRM_DEBUG("\n"); |
1036 | 1038 | ||
1037 | cur_read_ptr = RADEON_READ( RADEON_CP_RB_RPTR ); | 1039 | cur_read_ptr = RADEON_READ(RADEON_CP_RB_RPTR); |
1038 | RADEON_WRITE( RADEON_CP_RB_WPTR, cur_read_ptr ); | 1040 | RADEON_WRITE(RADEON_CP_RB_WPTR, cur_read_ptr); |
1039 | SET_RING_HEAD( dev_priv, cur_read_ptr ); | 1041 | SET_RING_HEAD(dev_priv, cur_read_ptr); |
1040 | dev_priv->ring.tail = cur_read_ptr; | 1042 | dev_priv->ring.tail = cur_read_ptr; |
1041 | } | 1043 | } |
1042 | 1044 | ||
@@ -1044,91 +1046,90 @@ static void radeon_do_cp_reset( drm_radeon_private_t *dev_priv ) | |||
1044 | * commands, so you must flush the command stream and wait for the CP | 1046 | * commands, so you must flush the command stream and wait for the CP |
1045 | * to go idle before calling this routine. | 1047 | * to go idle before calling this routine. |
1046 | */ | 1048 | */ |
1047 | static void radeon_do_cp_stop( drm_radeon_private_t *dev_priv ) | 1049 | static void radeon_do_cp_stop(drm_radeon_private_t * dev_priv) |
1048 | { | 1050 | { |
1049 | DRM_DEBUG( "\n" ); | 1051 | DRM_DEBUG("\n"); |
1050 | 1052 | ||
1051 | RADEON_WRITE( RADEON_CP_CSQ_CNTL, RADEON_CSQ_PRIDIS_INDDIS ); | 1053 | RADEON_WRITE(RADEON_CP_CSQ_CNTL, RADEON_CSQ_PRIDIS_INDDIS); |
1052 | 1054 | ||
1053 | dev_priv->cp_running = 0; | 1055 | dev_priv->cp_running = 0; |
1054 | } | 1056 | } |
1055 | 1057 | ||
1056 | /* Reset the engine. This will stop the CP if it is running. | 1058 | /* Reset the engine. This will stop the CP if it is running. |
1057 | */ | 1059 | */ |
1058 | static int radeon_do_engine_reset( drm_device_t *dev ) | 1060 | static int radeon_do_engine_reset(drm_device_t * dev) |
1059 | { | 1061 | { |
1060 | drm_radeon_private_t *dev_priv = dev->dev_private; | 1062 | drm_radeon_private_t *dev_priv = dev->dev_private; |
1061 | u32 clock_cntl_index, mclk_cntl, rbbm_soft_reset; | 1063 | u32 clock_cntl_index, mclk_cntl, rbbm_soft_reset; |
1062 | DRM_DEBUG( "\n" ); | 1064 | DRM_DEBUG("\n"); |
1063 | |||
1064 | radeon_do_pixcache_flush( dev_priv ); | ||
1065 | |||
1066 | clock_cntl_index = RADEON_READ( RADEON_CLOCK_CNTL_INDEX ); | ||
1067 | mclk_cntl = RADEON_READ_PLL( dev, RADEON_MCLK_CNTL ); | ||
1068 | |||
1069 | RADEON_WRITE_PLL( RADEON_MCLK_CNTL, ( mclk_cntl | | ||
1070 | RADEON_FORCEON_MCLKA | | ||
1071 | RADEON_FORCEON_MCLKB | | ||
1072 | RADEON_FORCEON_YCLKA | | ||
1073 | RADEON_FORCEON_YCLKB | | ||
1074 | RADEON_FORCEON_MC | | ||
1075 | RADEON_FORCEON_AIC ) ); | ||
1076 | |||
1077 | rbbm_soft_reset = RADEON_READ( RADEON_RBBM_SOFT_RESET ); | ||
1078 | 1065 | ||
1079 | RADEON_WRITE( RADEON_RBBM_SOFT_RESET, ( rbbm_soft_reset | | 1066 | radeon_do_pixcache_flush(dev_priv); |
1080 | RADEON_SOFT_RESET_CP | | 1067 | |
1068 | clock_cntl_index = RADEON_READ(RADEON_CLOCK_CNTL_INDEX); | ||
1069 | mclk_cntl = RADEON_READ_PLL(dev, RADEON_MCLK_CNTL); | ||
1070 | |||
1071 | RADEON_WRITE_PLL(RADEON_MCLK_CNTL, (mclk_cntl | | ||
1072 | RADEON_FORCEON_MCLKA | | ||
1073 | RADEON_FORCEON_MCLKB | | ||
1074 | RADEON_FORCEON_YCLKA | | ||
1075 | RADEON_FORCEON_YCLKB | | ||
1076 | RADEON_FORCEON_MC | | ||
1077 | RADEON_FORCEON_AIC)); | ||
1078 | |||
1079 | rbbm_soft_reset = RADEON_READ(RADEON_RBBM_SOFT_RESET); | ||
1080 | |||
1081 | RADEON_WRITE(RADEON_RBBM_SOFT_RESET, (rbbm_soft_reset | | ||
1082 | RADEON_SOFT_RESET_CP | | ||
1083 | RADEON_SOFT_RESET_HI | | ||
1084 | RADEON_SOFT_RESET_SE | | ||
1085 | RADEON_SOFT_RESET_RE | | ||
1086 | RADEON_SOFT_RESET_PP | | ||
1087 | RADEON_SOFT_RESET_E2 | | ||
1088 | RADEON_SOFT_RESET_RB)); | ||
1089 | RADEON_READ(RADEON_RBBM_SOFT_RESET); | ||
1090 | RADEON_WRITE(RADEON_RBBM_SOFT_RESET, (rbbm_soft_reset & | ||
1091 | ~(RADEON_SOFT_RESET_CP | | ||
1081 | RADEON_SOFT_RESET_HI | | 1092 | RADEON_SOFT_RESET_HI | |
1082 | RADEON_SOFT_RESET_SE | | 1093 | RADEON_SOFT_RESET_SE | |
1083 | RADEON_SOFT_RESET_RE | | 1094 | RADEON_SOFT_RESET_RE | |
1084 | RADEON_SOFT_RESET_PP | | 1095 | RADEON_SOFT_RESET_PP | |
1085 | RADEON_SOFT_RESET_E2 | | 1096 | RADEON_SOFT_RESET_E2 | |
1086 | RADEON_SOFT_RESET_RB ) ); | 1097 | RADEON_SOFT_RESET_RB))); |
1087 | RADEON_READ( RADEON_RBBM_SOFT_RESET ); | 1098 | RADEON_READ(RADEON_RBBM_SOFT_RESET); |
1088 | RADEON_WRITE( RADEON_RBBM_SOFT_RESET, ( rbbm_soft_reset & | 1099 | |
1089 | ~( RADEON_SOFT_RESET_CP | | 1100 | RADEON_WRITE_PLL(RADEON_MCLK_CNTL, mclk_cntl); |
1090 | RADEON_SOFT_RESET_HI | | 1101 | RADEON_WRITE(RADEON_CLOCK_CNTL_INDEX, clock_cntl_index); |
1091 | RADEON_SOFT_RESET_SE | | 1102 | RADEON_WRITE(RADEON_RBBM_SOFT_RESET, rbbm_soft_reset); |
1092 | RADEON_SOFT_RESET_RE | | ||
1093 | RADEON_SOFT_RESET_PP | | ||
1094 | RADEON_SOFT_RESET_E2 | | ||
1095 | RADEON_SOFT_RESET_RB ) ) ); | ||
1096 | RADEON_READ( RADEON_RBBM_SOFT_RESET ); | ||
1097 | |||
1098 | |||
1099 | RADEON_WRITE_PLL( RADEON_MCLK_CNTL, mclk_cntl ); | ||
1100 | RADEON_WRITE( RADEON_CLOCK_CNTL_INDEX, clock_cntl_index ); | ||
1101 | RADEON_WRITE( RADEON_RBBM_SOFT_RESET, rbbm_soft_reset ); | ||
1102 | 1103 | ||
1103 | /* Reset the CP ring */ | 1104 | /* Reset the CP ring */ |
1104 | radeon_do_cp_reset( dev_priv ); | 1105 | radeon_do_cp_reset(dev_priv); |
1105 | 1106 | ||
1106 | /* The CP is no longer running after an engine reset */ | 1107 | /* The CP is no longer running after an engine reset */ |
1107 | dev_priv->cp_running = 0; | 1108 | dev_priv->cp_running = 0; |
1108 | 1109 | ||
1109 | /* Reset any pending vertex, indirect buffers */ | 1110 | /* Reset any pending vertex, indirect buffers */ |
1110 | radeon_freelist_reset( dev ); | 1111 | radeon_freelist_reset(dev); |
1111 | 1112 | ||
1112 | return 0; | 1113 | return 0; |
1113 | } | 1114 | } |
1114 | 1115 | ||
1115 | static void radeon_cp_init_ring_buffer( drm_device_t *dev, | 1116 | static void radeon_cp_init_ring_buffer(drm_device_t * dev, |
1116 | drm_radeon_private_t *dev_priv ) | 1117 | drm_radeon_private_t * dev_priv) |
1117 | { | 1118 | { |
1118 | u32 ring_start, cur_read_ptr; | 1119 | u32 ring_start, cur_read_ptr; |
1119 | u32 tmp; | 1120 | u32 tmp; |
1120 | 1121 | ||
1121 | /* Initialize the memory controller */ | 1122 | /* Initialize the memory controller */ |
1122 | RADEON_WRITE( RADEON_MC_FB_LOCATION, | 1123 | RADEON_WRITE(RADEON_MC_FB_LOCATION, |
1123 | ( ( dev_priv->gart_vm_start - 1 ) & 0xffff0000 ) | 1124 | ((dev_priv->gart_vm_start - 1) & 0xffff0000) |
1124 | | ( dev_priv->fb_location >> 16 ) ); | 1125 | | (dev_priv->fb_location >> 16)); |
1125 | 1126 | ||
1126 | #if __OS_HAS_AGP | 1127 | #if __OS_HAS_AGP |
1127 | if ( !dev_priv->is_pci ) { | 1128 | if (!dev_priv->is_pci) { |
1128 | RADEON_WRITE( RADEON_MC_AGP_LOCATION, | 1129 | RADEON_WRITE(RADEON_MC_AGP_LOCATION, |
1129 | (((dev_priv->gart_vm_start - 1 + | 1130 | (((dev_priv->gart_vm_start - 1 + |
1130 | dev_priv->gart_size) & 0xffff0000) | | 1131 | dev_priv->gart_size) & 0xffff0000) | |
1131 | (dev_priv->gart_vm_start >> 16)) ); | 1132 | (dev_priv->gart_vm_start >> 16))); |
1132 | 1133 | ||
1133 | ring_start = (dev_priv->cp_ring->offset | 1134 | ring_start = (dev_priv->cp_ring->offset |
1134 | - dev->agp->base | 1135 | - dev->agp->base |
@@ -1139,25 +1140,24 @@ static void radeon_cp_init_ring_buffer( drm_device_t *dev, | |||
1139 | - (unsigned long)dev->sg->virtual | 1140 | - (unsigned long)dev->sg->virtual |
1140 | + dev_priv->gart_vm_start); | 1141 | + dev_priv->gart_vm_start); |
1141 | 1142 | ||
1142 | RADEON_WRITE( RADEON_CP_RB_BASE, ring_start ); | 1143 | RADEON_WRITE(RADEON_CP_RB_BASE, ring_start); |
1143 | 1144 | ||
1144 | /* Set the write pointer delay */ | 1145 | /* Set the write pointer delay */ |
1145 | RADEON_WRITE( RADEON_CP_RB_WPTR_DELAY, 0 ); | 1146 | RADEON_WRITE(RADEON_CP_RB_WPTR_DELAY, 0); |
1146 | 1147 | ||
1147 | /* Initialize the ring buffer's read and write pointers */ | 1148 | /* Initialize the ring buffer's read and write pointers */ |
1148 | cur_read_ptr = RADEON_READ( RADEON_CP_RB_RPTR ); | 1149 | cur_read_ptr = RADEON_READ(RADEON_CP_RB_RPTR); |
1149 | RADEON_WRITE( RADEON_CP_RB_WPTR, cur_read_ptr ); | 1150 | RADEON_WRITE(RADEON_CP_RB_WPTR, cur_read_ptr); |
1150 | SET_RING_HEAD( dev_priv, cur_read_ptr ); | 1151 | SET_RING_HEAD(dev_priv, cur_read_ptr); |
1151 | dev_priv->ring.tail = cur_read_ptr; | 1152 | dev_priv->ring.tail = cur_read_ptr; |
1152 | 1153 | ||
1153 | #if __OS_HAS_AGP | 1154 | #if __OS_HAS_AGP |
1154 | if ( !dev_priv->is_pci ) { | 1155 | if (!dev_priv->is_pci) { |
1155 | /* set RADEON_AGP_BASE here instead of relying on X from user space */ | 1156 | /* set RADEON_AGP_BASE here instead of relying on X from user space */ |
1156 | RADEON_WRITE(RADEON_AGP_BASE, (unsigned int)dev->agp->base); | 1157 | RADEON_WRITE(RADEON_AGP_BASE, (unsigned int)dev->agp->base); |
1157 | RADEON_WRITE( RADEON_CP_RB_RPTR_ADDR, | 1158 | RADEON_WRITE(RADEON_CP_RB_RPTR_ADDR, |
1158 | dev_priv->ring_rptr->offset | 1159 | dev_priv->ring_rptr->offset |
1159 | - dev->agp->base | 1160 | - dev->agp->base + dev_priv->gart_vm_start); |
1160 | + dev_priv->gart_vm_start); | ||
1161 | } else | 1161 | } else |
1162 | #endif | 1162 | #endif |
1163 | { | 1163 | { |
@@ -1168,11 +1168,10 @@ static void radeon_cp_init_ring_buffer( drm_device_t *dev, | |||
1168 | (unsigned long)dev->sg->virtual; | 1168 | (unsigned long)dev->sg->virtual; |
1169 | page_ofs = tmp_ofs >> PAGE_SHIFT; | 1169 | page_ofs = tmp_ofs >> PAGE_SHIFT; |
1170 | 1170 | ||
1171 | RADEON_WRITE( RADEON_CP_RB_RPTR_ADDR, | 1171 | RADEON_WRITE(RADEON_CP_RB_RPTR_ADDR, entry->busaddr[page_ofs]); |
1172 | entry->busaddr[page_ofs]); | 1172 | DRM_DEBUG("ring rptr: offset=0x%08lx handle=0x%08lx\n", |
1173 | DRM_DEBUG( "ring rptr: offset=0x%08lx handle=0x%08lx\n", | 1173 | (unsigned long)entry->busaddr[page_ofs], |
1174 | (unsigned long) entry->busaddr[page_ofs], | 1174 | entry->handle + tmp_ofs); |
1175 | entry->handle + tmp_ofs ); | ||
1176 | } | 1175 | } |
1177 | 1176 | ||
1178 | /* Initialize the scratch register pointer. This will cause | 1177 | /* Initialize the scratch register pointer. This will cause |
@@ -1182,127 +1181,168 @@ static void radeon_cp_init_ring_buffer( drm_device_t *dev, | |||
1182 | * We simply put this behind the ring read pointer, this works | 1181 | * We simply put this behind the ring read pointer, this works |
1183 | * with PCI GART as well as (whatever kind of) AGP GART | 1182 | * with PCI GART as well as (whatever kind of) AGP GART |
1184 | */ | 1183 | */ |
1185 | RADEON_WRITE( RADEON_SCRATCH_ADDR, RADEON_READ( RADEON_CP_RB_RPTR_ADDR ) | 1184 | RADEON_WRITE(RADEON_SCRATCH_ADDR, RADEON_READ(RADEON_CP_RB_RPTR_ADDR) |
1186 | + RADEON_SCRATCH_REG_OFFSET ); | 1185 | + RADEON_SCRATCH_REG_OFFSET); |
1187 | 1186 | ||
1188 | dev_priv->scratch = ((__volatile__ u32 *) | 1187 | dev_priv->scratch = ((__volatile__ u32 *) |
1189 | dev_priv->ring_rptr->handle + | 1188 | dev_priv->ring_rptr->handle + |
1190 | (RADEON_SCRATCH_REG_OFFSET / sizeof(u32))); | 1189 | (RADEON_SCRATCH_REG_OFFSET / sizeof(u32))); |
1191 | 1190 | ||
1192 | RADEON_WRITE( RADEON_SCRATCH_UMSK, 0x7 ); | 1191 | RADEON_WRITE(RADEON_SCRATCH_UMSK, 0x7); |
1193 | 1192 | ||
1194 | /* Writeback doesn't seem to work everywhere, test it first */ | 1193 | /* Writeback doesn't seem to work everywhere, test it first */ |
1195 | DRM_WRITE32( dev_priv->ring_rptr, RADEON_SCRATCHOFF(1), 0 ); | 1194 | DRM_WRITE32(dev_priv->ring_rptr, RADEON_SCRATCHOFF(1), 0); |
1196 | RADEON_WRITE( RADEON_SCRATCH_REG1, 0xdeadbeef ); | 1195 | RADEON_WRITE(RADEON_SCRATCH_REG1, 0xdeadbeef); |
1197 | 1196 | ||
1198 | for ( tmp = 0 ; tmp < dev_priv->usec_timeout ; tmp++ ) { | 1197 | for (tmp = 0; tmp < dev_priv->usec_timeout; tmp++) { |
1199 | if ( DRM_READ32( dev_priv->ring_rptr, RADEON_SCRATCHOFF(1) ) == 0xdeadbeef ) | 1198 | if (DRM_READ32(dev_priv->ring_rptr, RADEON_SCRATCHOFF(1)) == |
1199 | 0xdeadbeef) | ||
1200 | break; | 1200 | break; |
1201 | DRM_UDELAY( 1 ); | 1201 | DRM_UDELAY(1); |
1202 | } | 1202 | } |
1203 | 1203 | ||
1204 | if ( tmp < dev_priv->usec_timeout ) { | 1204 | if (tmp < dev_priv->usec_timeout) { |
1205 | dev_priv->writeback_works = 1; | 1205 | dev_priv->writeback_works = 1; |
1206 | DRM_DEBUG( "writeback test succeeded, tmp=%d\n", tmp ); | 1206 | DRM_DEBUG("writeback test succeeded, tmp=%d\n", tmp); |
1207 | } else { | 1207 | } else { |
1208 | dev_priv->writeback_works = 0; | 1208 | dev_priv->writeback_works = 0; |
1209 | DRM_DEBUG( "writeback test failed\n" ); | 1209 | DRM_DEBUG("writeback test failed\n"); |
1210 | } | ||
1211 | if (radeon_no_wb == 1) { | ||
1212 | dev_priv->writeback_works = 0; | ||
1213 | DRM_DEBUG("writeback forced off\n"); | ||
1210 | } | 1214 | } |
1211 | 1215 | ||
1212 | dev_priv->sarea_priv->last_frame = dev_priv->scratch[0] = 0; | 1216 | dev_priv->sarea_priv->last_frame = dev_priv->scratch[0] = 0; |
1213 | RADEON_WRITE( RADEON_LAST_FRAME_REG, | 1217 | RADEON_WRITE(RADEON_LAST_FRAME_REG, dev_priv->sarea_priv->last_frame); |
1214 | dev_priv->sarea_priv->last_frame ); | ||
1215 | 1218 | ||
1216 | dev_priv->sarea_priv->last_dispatch = dev_priv->scratch[1] = 0; | 1219 | dev_priv->sarea_priv->last_dispatch = dev_priv->scratch[1] = 0; |
1217 | RADEON_WRITE( RADEON_LAST_DISPATCH_REG, | 1220 | RADEON_WRITE(RADEON_LAST_DISPATCH_REG, |
1218 | dev_priv->sarea_priv->last_dispatch ); | 1221 | dev_priv->sarea_priv->last_dispatch); |
1219 | 1222 | ||
1220 | dev_priv->sarea_priv->last_clear = dev_priv->scratch[2] = 0; | 1223 | dev_priv->sarea_priv->last_clear = dev_priv->scratch[2] = 0; |
1221 | RADEON_WRITE( RADEON_LAST_CLEAR_REG, | 1224 | RADEON_WRITE(RADEON_LAST_CLEAR_REG, dev_priv->sarea_priv->last_clear); |
1222 | dev_priv->sarea_priv->last_clear ); | ||
1223 | 1225 | ||
1224 | /* Set ring buffer size */ | 1226 | /* Set ring buffer size */ |
1225 | #ifdef __BIG_ENDIAN | 1227 | #ifdef __BIG_ENDIAN |
1226 | RADEON_WRITE( RADEON_CP_RB_CNTL, dev_priv->ring.size_l2qw | RADEON_BUF_SWAP_32BIT ); | 1228 | RADEON_WRITE(RADEON_CP_RB_CNTL, |
1229 | dev_priv->ring.size_l2qw | RADEON_BUF_SWAP_32BIT); | ||
1227 | #else | 1230 | #else |
1228 | RADEON_WRITE( RADEON_CP_RB_CNTL, dev_priv->ring.size_l2qw ); | 1231 | RADEON_WRITE(RADEON_CP_RB_CNTL, dev_priv->ring.size_l2qw); |
1229 | #endif | 1232 | #endif |
1230 | 1233 | ||
1231 | radeon_do_wait_for_idle( dev_priv ); | 1234 | radeon_do_wait_for_idle(dev_priv); |
1232 | 1235 | ||
1233 | /* Turn on bus mastering */ | 1236 | /* Turn on bus mastering */ |
1234 | tmp = RADEON_READ( RADEON_BUS_CNTL ) & ~RADEON_BUS_MASTER_DIS; | 1237 | tmp = RADEON_READ(RADEON_BUS_CNTL) & ~RADEON_BUS_MASTER_DIS; |
1235 | RADEON_WRITE( RADEON_BUS_CNTL, tmp ); | 1238 | RADEON_WRITE(RADEON_BUS_CNTL, tmp); |
1236 | 1239 | ||
1237 | /* Sync everything up */ | 1240 | /* Sync everything up */ |
1238 | RADEON_WRITE( RADEON_ISYNC_CNTL, | 1241 | RADEON_WRITE(RADEON_ISYNC_CNTL, |
1239 | (RADEON_ISYNC_ANY2D_IDLE3D | | 1242 | (RADEON_ISYNC_ANY2D_IDLE3D | |
1240 | RADEON_ISYNC_ANY3D_IDLE2D | | 1243 | RADEON_ISYNC_ANY3D_IDLE2D | |
1241 | RADEON_ISYNC_WAIT_IDLEGUI | | 1244 | RADEON_ISYNC_WAIT_IDLEGUI | |
1242 | RADEON_ISYNC_CPSCRATCH_IDLEGUI) ); | 1245 | RADEON_ISYNC_CPSCRATCH_IDLEGUI)); |
1246 | } | ||
1247 | |||
1248 | /* Enable or disable PCI-E GART on the chip */ | ||
1249 | static void radeon_set_pciegart(drm_radeon_private_t * dev_priv, int on) | ||
1250 | { | ||
1251 | u32 tmp = RADEON_READ_PCIE(dev_priv, RADEON_PCIE_TX_GART_CNTL); | ||
1252 | if (on) { | ||
1253 | |||
1254 | DRM_DEBUG("programming pcie %08X %08lX %08X\n", | ||
1255 | dev_priv->gart_vm_start, | ||
1256 | (long)dev_priv->gart_info.bus_addr, | ||
1257 | dev_priv->gart_size); | ||
1258 | RADEON_WRITE_PCIE(RADEON_PCIE_TX_DISCARD_RD_ADDR_LO, | ||
1259 | dev_priv->gart_vm_start); | ||
1260 | RADEON_WRITE_PCIE(RADEON_PCIE_TX_GART_BASE, | ||
1261 | dev_priv->gart_info.bus_addr); | ||
1262 | RADEON_WRITE_PCIE(RADEON_PCIE_TX_GART_START_LO, | ||
1263 | dev_priv->gart_vm_start); | ||
1264 | RADEON_WRITE_PCIE(RADEON_PCIE_TX_GART_END_LO, | ||
1265 | dev_priv->gart_vm_start + | ||
1266 | dev_priv->gart_size - 1); | ||
1267 | |||
1268 | RADEON_WRITE(RADEON_MC_AGP_LOCATION, 0xffffffc0); /* ?? */ | ||
1269 | |||
1270 | RADEON_WRITE_PCIE(RADEON_PCIE_TX_GART_CNTL, | ||
1271 | RADEON_PCIE_TX_GART_EN); | ||
1272 | } else { | ||
1273 | RADEON_WRITE_PCIE(RADEON_PCIE_TX_GART_CNTL, | ||
1274 | tmp & ~RADEON_PCIE_TX_GART_EN); | ||
1275 | } | ||
1243 | } | 1276 | } |
1244 | 1277 | ||
1245 | /* Enable or disable PCI GART on the chip */ | 1278 | /* Enable or disable PCI GART on the chip */ |
1246 | static void radeon_set_pcigart( drm_radeon_private_t *dev_priv, int on ) | 1279 | static void radeon_set_pcigart(drm_radeon_private_t * dev_priv, int on) |
1247 | { | 1280 | { |
1248 | u32 tmp = RADEON_READ( RADEON_AIC_CNTL ); | 1281 | u32 tmp = RADEON_READ(RADEON_AIC_CNTL); |
1282 | |||
1283 | if (dev_priv->flags & CHIP_IS_PCIE) { | ||
1284 | radeon_set_pciegart(dev_priv, on); | ||
1285 | return; | ||
1286 | } | ||
1249 | 1287 | ||
1250 | if ( on ) { | 1288 | if (on) { |
1251 | RADEON_WRITE( RADEON_AIC_CNTL, tmp | RADEON_PCIGART_TRANSLATE_EN ); | 1289 | RADEON_WRITE(RADEON_AIC_CNTL, |
1290 | tmp | RADEON_PCIGART_TRANSLATE_EN); | ||
1252 | 1291 | ||
1253 | /* set PCI GART page-table base address | 1292 | /* set PCI GART page-table base address |
1254 | */ | 1293 | */ |
1255 | RADEON_WRITE( RADEON_AIC_PT_BASE, dev_priv->bus_pci_gart ); | 1294 | RADEON_WRITE(RADEON_AIC_PT_BASE, dev_priv->gart_info.bus_addr); |
1256 | 1295 | ||
1257 | /* set address range for PCI address translate | 1296 | /* set address range for PCI address translate |
1258 | */ | 1297 | */ |
1259 | RADEON_WRITE( RADEON_AIC_LO_ADDR, dev_priv->gart_vm_start ); | 1298 | RADEON_WRITE(RADEON_AIC_LO_ADDR, dev_priv->gart_vm_start); |
1260 | RADEON_WRITE( RADEON_AIC_HI_ADDR, dev_priv->gart_vm_start | 1299 | RADEON_WRITE(RADEON_AIC_HI_ADDR, dev_priv->gart_vm_start |
1261 | + dev_priv->gart_size - 1); | 1300 | + dev_priv->gart_size - 1); |
1262 | 1301 | ||
1263 | /* Turn off AGP aperture -- is this required for PCI GART? | 1302 | /* Turn off AGP aperture -- is this required for PCI GART? |
1264 | */ | 1303 | */ |
1265 | RADEON_WRITE( RADEON_MC_AGP_LOCATION, 0xffffffc0 ); /* ?? */ | 1304 | RADEON_WRITE(RADEON_MC_AGP_LOCATION, 0xffffffc0); /* ?? */ |
1266 | RADEON_WRITE( RADEON_AGP_COMMAND, 0 ); /* clear AGP_COMMAND */ | 1305 | RADEON_WRITE(RADEON_AGP_COMMAND, 0); /* clear AGP_COMMAND */ |
1267 | } else { | 1306 | } else { |
1268 | RADEON_WRITE( RADEON_AIC_CNTL, tmp & ~RADEON_PCIGART_TRANSLATE_EN ); | 1307 | RADEON_WRITE(RADEON_AIC_CNTL, |
1308 | tmp & ~RADEON_PCIGART_TRANSLATE_EN); | ||
1269 | } | 1309 | } |
1270 | } | 1310 | } |
1271 | 1311 | ||
1272 | static int radeon_do_init_cp( drm_device_t *dev, drm_radeon_init_t *init ) | 1312 | static int radeon_do_init_cp(drm_device_t * dev, drm_radeon_init_t * init) |
1273 | { | 1313 | { |
1274 | drm_radeon_private_t *dev_priv = dev->dev_private;; | 1314 | drm_radeon_private_t *dev_priv = dev->dev_private;; |
1275 | DRM_DEBUG( "\n" ); | 1315 | DRM_DEBUG("\n"); |
1276 | 1316 | ||
1277 | dev_priv->is_pci = init->is_pci; | 1317 | dev_priv->is_pci = init->is_pci; |
1278 | 1318 | ||
1279 | if ( dev_priv->is_pci && !dev->sg ) { | 1319 | if (dev_priv->is_pci && !dev->sg) { |
1280 | DRM_ERROR( "PCI GART memory not allocated!\n" ); | 1320 | DRM_ERROR("PCI GART memory not allocated!\n"); |
1281 | dev->dev_private = (void *)dev_priv; | 1321 | dev->dev_private = (void *)dev_priv; |
1282 | radeon_do_cleanup_cp(dev); | 1322 | radeon_do_cleanup_cp(dev); |
1283 | return DRM_ERR(EINVAL); | 1323 | return DRM_ERR(EINVAL); |
1284 | } | 1324 | } |
1285 | 1325 | ||
1286 | dev_priv->usec_timeout = init->usec_timeout; | 1326 | dev_priv->usec_timeout = init->usec_timeout; |
1287 | if ( dev_priv->usec_timeout < 1 || | 1327 | if (dev_priv->usec_timeout < 1 || |
1288 | dev_priv->usec_timeout > RADEON_MAX_USEC_TIMEOUT ) { | 1328 | dev_priv->usec_timeout > RADEON_MAX_USEC_TIMEOUT) { |
1289 | DRM_DEBUG( "TIMEOUT problem!\n" ); | 1329 | DRM_DEBUG("TIMEOUT problem!\n"); |
1290 | dev->dev_private = (void *)dev_priv; | 1330 | dev->dev_private = (void *)dev_priv; |
1291 | radeon_do_cleanup_cp(dev); | 1331 | radeon_do_cleanup_cp(dev); |
1292 | return DRM_ERR(EINVAL); | 1332 | return DRM_ERR(EINVAL); |
1293 | } | 1333 | } |
1294 | 1334 | ||
1295 | switch(init->func) { | 1335 | switch (init->func) { |
1296 | case RADEON_INIT_R200_CP: | 1336 | case RADEON_INIT_R200_CP: |
1297 | dev_priv->microcode_version=UCODE_R200; | 1337 | dev_priv->microcode_version = UCODE_R200; |
1298 | break; | 1338 | break; |
1299 | case RADEON_INIT_R300_CP: | 1339 | case RADEON_INIT_R300_CP: |
1300 | dev_priv->microcode_version=UCODE_R300; | 1340 | dev_priv->microcode_version = UCODE_R300; |
1301 | break; | 1341 | break; |
1302 | default: | 1342 | default: |
1303 | dev_priv->microcode_version=UCODE_R100; | 1343 | dev_priv->microcode_version = UCODE_R100; |
1304 | } | 1344 | } |
1305 | 1345 | ||
1306 | dev_priv->do_boxes = 0; | 1346 | dev_priv->do_boxes = 0; |
1307 | dev_priv->cp_mode = init->cp_mode; | 1347 | dev_priv->cp_mode = init->cp_mode; |
1308 | 1348 | ||
@@ -1310,15 +1350,15 @@ static int radeon_do_init_cp( drm_device_t *dev, drm_radeon_init_t *init ) | |||
1310 | * but the ring can be in either AGP or PCI space for the ring | 1350 | * but the ring can be in either AGP or PCI space for the ring |
1311 | * read pointer. | 1351 | * read pointer. |
1312 | */ | 1352 | */ |
1313 | if ( ( init->cp_mode != RADEON_CSQ_PRIBM_INDDIS ) && | 1353 | if ((init->cp_mode != RADEON_CSQ_PRIBM_INDDIS) && |
1314 | ( init->cp_mode != RADEON_CSQ_PRIBM_INDBM ) ) { | 1354 | (init->cp_mode != RADEON_CSQ_PRIBM_INDBM)) { |
1315 | DRM_DEBUG( "BAD cp_mode (%x)!\n", init->cp_mode ); | 1355 | DRM_DEBUG("BAD cp_mode (%x)!\n", init->cp_mode); |
1316 | dev->dev_private = (void *)dev_priv; | 1356 | dev->dev_private = (void *)dev_priv; |
1317 | radeon_do_cleanup_cp(dev); | 1357 | radeon_do_cleanup_cp(dev); |
1318 | return DRM_ERR(EINVAL); | 1358 | return DRM_ERR(EINVAL); |
1319 | } | 1359 | } |
1320 | 1360 | ||
1321 | switch ( init->fb_bpp ) { | 1361 | switch (init->fb_bpp) { |
1322 | case 16: | 1362 | case 16: |
1323 | dev_priv->color_fmt = RADEON_COLOR_FORMAT_RGB565; | 1363 | dev_priv->color_fmt = RADEON_COLOR_FORMAT_RGB565; |
1324 | break; | 1364 | break; |
@@ -1327,12 +1367,12 @@ static int radeon_do_init_cp( drm_device_t *dev, drm_radeon_init_t *init ) | |||
1327 | dev_priv->color_fmt = RADEON_COLOR_FORMAT_ARGB8888; | 1367 | dev_priv->color_fmt = RADEON_COLOR_FORMAT_ARGB8888; |
1328 | break; | 1368 | break; |
1329 | } | 1369 | } |
1330 | dev_priv->front_offset = init->front_offset; | 1370 | dev_priv->front_offset = init->front_offset; |
1331 | dev_priv->front_pitch = init->front_pitch; | 1371 | dev_priv->front_pitch = init->front_pitch; |
1332 | dev_priv->back_offset = init->back_offset; | 1372 | dev_priv->back_offset = init->back_offset; |
1333 | dev_priv->back_pitch = init->back_pitch; | 1373 | dev_priv->back_pitch = init->back_pitch; |
1334 | 1374 | ||
1335 | switch ( init->depth_bpp ) { | 1375 | switch (init->depth_bpp) { |
1336 | case 16: | 1376 | case 16: |
1337 | dev_priv->depth_fmt = RADEON_DEPTH_FORMAT_16BIT_INT_Z; | 1377 | dev_priv->depth_fmt = RADEON_DEPTH_FORMAT_16BIT_INT_Z; |
1338 | break; | 1378 | break; |
@@ -1341,8 +1381,8 @@ static int radeon_do_init_cp( drm_device_t *dev, drm_radeon_init_t *init ) | |||
1341 | dev_priv->depth_fmt = RADEON_DEPTH_FORMAT_24BIT_INT_Z; | 1381 | dev_priv->depth_fmt = RADEON_DEPTH_FORMAT_24BIT_INT_Z; |
1342 | break; | 1382 | break; |
1343 | } | 1383 | } |
1344 | dev_priv->depth_offset = init->depth_offset; | 1384 | dev_priv->depth_offset = init->depth_offset; |
1345 | dev_priv->depth_pitch = init->depth_pitch; | 1385 | dev_priv->depth_pitch = init->depth_pitch; |
1346 | 1386 | ||
1347 | /* Hardware state for depth clears. Remove this if/when we no | 1387 | /* Hardware state for depth clears. Remove this if/when we no |
1348 | * longer clear the depth buffer with a 3D rectangle. Hard-code | 1388 | * longer clear the depth buffer with a 3D rectangle. Hard-code |
@@ -1351,16 +1391,16 @@ static int radeon_do_init_cp( drm_device_t *dev, drm_radeon_init_t *init ) | |||
1351 | */ | 1391 | */ |
1352 | dev_priv->depth_clear.rb3d_cntl = (RADEON_PLANE_MASK_ENABLE | | 1392 | dev_priv->depth_clear.rb3d_cntl = (RADEON_PLANE_MASK_ENABLE | |
1353 | (dev_priv->color_fmt << 10) | | 1393 | (dev_priv->color_fmt << 10) | |
1354 | (dev_priv->microcode_version == UCODE_R100 ? RADEON_ZBLOCK16 : 0)); | 1394 | (dev_priv->microcode_version == |
1395 | UCODE_R100 ? RADEON_ZBLOCK16 : 0)); | ||
1355 | 1396 | ||
1356 | dev_priv->depth_clear.rb3d_zstencilcntl = | 1397 | dev_priv->depth_clear.rb3d_zstencilcntl = |
1357 | (dev_priv->depth_fmt | | 1398 | (dev_priv->depth_fmt | |
1358 | RADEON_Z_TEST_ALWAYS | | 1399 | RADEON_Z_TEST_ALWAYS | |
1359 | RADEON_STENCIL_TEST_ALWAYS | | 1400 | RADEON_STENCIL_TEST_ALWAYS | |
1360 | RADEON_STENCIL_S_FAIL_REPLACE | | 1401 | RADEON_STENCIL_S_FAIL_REPLACE | |
1361 | RADEON_STENCIL_ZPASS_REPLACE | | 1402 | RADEON_STENCIL_ZPASS_REPLACE | |
1362 | RADEON_STENCIL_ZFAIL_REPLACE | | 1403 | RADEON_STENCIL_ZFAIL_REPLACE | RADEON_Z_WRITE_ENABLE); |
1363 | RADEON_Z_WRITE_ENABLE); | ||
1364 | 1404 | ||
1365 | dev_priv->depth_clear.se_cntl = (RADEON_FFACE_CULL_CW | | 1405 | dev_priv->depth_clear.se_cntl = (RADEON_FFACE_CULL_CW | |
1366 | RADEON_BFACE_SOLID | | 1406 | RADEON_BFACE_SOLID | |
@@ -1382,8 +1422,8 @@ static int radeon_do_init_cp( drm_device_t *dev, drm_radeon_init_t *init ) | |||
1382 | dev_priv->ring_rptr_offset = init->ring_rptr_offset; | 1422 | dev_priv->ring_rptr_offset = init->ring_rptr_offset; |
1383 | dev_priv->buffers_offset = init->buffers_offset; | 1423 | dev_priv->buffers_offset = init->buffers_offset; |
1384 | dev_priv->gart_textures_offset = init->gart_textures_offset; | 1424 | dev_priv->gart_textures_offset = init->gart_textures_offset; |
1385 | 1425 | ||
1386 | if(!dev_priv->sarea) { | 1426 | if (!dev_priv->sarea) { |
1387 | DRM_ERROR("could not find sarea!\n"); | 1427 | DRM_ERROR("could not find sarea!\n"); |
1388 | dev->dev_private = (void *)dev_priv; | 1428 | dev->dev_private = (void *)dev_priv; |
1389 | radeon_do_cleanup_cp(dev); | 1429 | radeon_do_cleanup_cp(dev); |
@@ -1391,21 +1431,21 @@ static int radeon_do_init_cp( drm_device_t *dev, drm_radeon_init_t *init ) | |||
1391 | } | 1431 | } |
1392 | 1432 | ||
1393 | dev_priv->mmio = drm_core_findmap(dev, init->mmio_offset); | 1433 | dev_priv->mmio = drm_core_findmap(dev, init->mmio_offset); |
1394 | if(!dev_priv->mmio) { | 1434 | if (!dev_priv->mmio) { |
1395 | DRM_ERROR("could not find mmio region!\n"); | 1435 | DRM_ERROR("could not find mmio region!\n"); |
1396 | dev->dev_private = (void *)dev_priv; | 1436 | dev->dev_private = (void *)dev_priv; |
1397 | radeon_do_cleanup_cp(dev); | 1437 | radeon_do_cleanup_cp(dev); |
1398 | return DRM_ERR(EINVAL); | 1438 | return DRM_ERR(EINVAL); |
1399 | } | 1439 | } |
1400 | dev_priv->cp_ring = drm_core_findmap(dev, init->ring_offset); | 1440 | dev_priv->cp_ring = drm_core_findmap(dev, init->ring_offset); |
1401 | if(!dev_priv->cp_ring) { | 1441 | if (!dev_priv->cp_ring) { |
1402 | DRM_ERROR("could not find cp ring region!\n"); | 1442 | DRM_ERROR("could not find cp ring region!\n"); |
1403 | dev->dev_private = (void *)dev_priv; | 1443 | dev->dev_private = (void *)dev_priv; |
1404 | radeon_do_cleanup_cp(dev); | 1444 | radeon_do_cleanup_cp(dev); |
1405 | return DRM_ERR(EINVAL); | 1445 | return DRM_ERR(EINVAL); |
1406 | } | 1446 | } |
1407 | dev_priv->ring_rptr = drm_core_findmap(dev, init->ring_rptr_offset); | 1447 | dev_priv->ring_rptr = drm_core_findmap(dev, init->ring_rptr_offset); |
1408 | if(!dev_priv->ring_rptr) { | 1448 | if (!dev_priv->ring_rptr) { |
1409 | DRM_ERROR("could not find ring read pointer!\n"); | 1449 | DRM_ERROR("could not find ring read pointer!\n"); |
1410 | dev->dev_private = (void *)dev_priv; | 1450 | dev->dev_private = (void *)dev_priv; |
1411 | radeon_do_cleanup_cp(dev); | 1451 | radeon_do_cleanup_cp(dev); |
@@ -1413,16 +1453,17 @@ static int radeon_do_init_cp( drm_device_t *dev, drm_radeon_init_t *init ) | |||
1413 | } | 1453 | } |
1414 | dev->agp_buffer_token = init->buffers_offset; | 1454 | dev->agp_buffer_token = init->buffers_offset; |
1415 | dev->agp_buffer_map = drm_core_findmap(dev, init->buffers_offset); | 1455 | dev->agp_buffer_map = drm_core_findmap(dev, init->buffers_offset); |
1416 | if(!dev->agp_buffer_map) { | 1456 | if (!dev->agp_buffer_map) { |
1417 | DRM_ERROR("could not find dma buffer region!\n"); | 1457 | DRM_ERROR("could not find dma buffer region!\n"); |
1418 | dev->dev_private = (void *)dev_priv; | 1458 | dev->dev_private = (void *)dev_priv; |
1419 | radeon_do_cleanup_cp(dev); | 1459 | radeon_do_cleanup_cp(dev); |
1420 | return DRM_ERR(EINVAL); | 1460 | return DRM_ERR(EINVAL); |
1421 | } | 1461 | } |
1422 | 1462 | ||
1423 | if ( init->gart_textures_offset ) { | 1463 | if (init->gart_textures_offset) { |
1424 | dev_priv->gart_textures = drm_core_findmap(dev, init->gart_textures_offset); | 1464 | dev_priv->gart_textures = |
1425 | if ( !dev_priv->gart_textures ) { | 1465 | drm_core_findmap(dev, init->gart_textures_offset); |
1466 | if (!dev_priv->gart_textures) { | ||
1426 | DRM_ERROR("could not find GART texture region!\n"); | 1467 | DRM_ERROR("could not find GART texture region!\n"); |
1427 | dev->dev_private = (void *)dev_priv; | 1468 | dev->dev_private = (void *)dev_priv; |
1428 | radeon_do_cleanup_cp(dev); | 1469 | radeon_do_cleanup_cp(dev); |
@@ -1431,17 +1472,17 @@ static int radeon_do_init_cp( drm_device_t *dev, drm_radeon_init_t *init ) | |||
1431 | } | 1472 | } |
1432 | 1473 | ||
1433 | dev_priv->sarea_priv = | 1474 | dev_priv->sarea_priv = |
1434 | (drm_radeon_sarea_t *)((u8 *)dev_priv->sarea->handle + | 1475 | (drm_radeon_sarea_t *) ((u8 *) dev_priv->sarea->handle + |
1435 | init->sarea_priv_offset); | 1476 | init->sarea_priv_offset); |
1436 | 1477 | ||
1437 | #if __OS_HAS_AGP | 1478 | #if __OS_HAS_AGP |
1438 | if ( !dev_priv->is_pci ) { | 1479 | if (!dev_priv->is_pci) { |
1439 | drm_core_ioremap( dev_priv->cp_ring, dev ); | 1480 | drm_core_ioremap(dev_priv->cp_ring, dev); |
1440 | drm_core_ioremap( dev_priv->ring_rptr, dev ); | 1481 | drm_core_ioremap(dev_priv->ring_rptr, dev); |
1441 | drm_core_ioremap( dev->agp_buffer_map, dev ); | 1482 | drm_core_ioremap(dev->agp_buffer_map, dev); |
1442 | if(!dev_priv->cp_ring->handle || | 1483 | if (!dev_priv->cp_ring->handle || |
1443 | !dev_priv->ring_rptr->handle || | 1484 | !dev_priv->ring_rptr->handle || |
1444 | !dev->agp_buffer_map->handle) { | 1485 | !dev->agp_buffer_map->handle) { |
1445 | DRM_ERROR("could not find ioremap agp regions!\n"); | 1486 | DRM_ERROR("could not find ioremap agp regions!\n"); |
1446 | dev->dev_private = (void *)dev_priv; | 1487 | dev->dev_private = (void *)dev_priv; |
1447 | radeon_do_cleanup_cp(dev); | 1488 | radeon_do_cleanup_cp(dev); |
@@ -1450,220 +1491,251 @@ static int radeon_do_init_cp( drm_device_t *dev, drm_radeon_init_t *init ) | |||
1450 | } else | 1491 | } else |
1451 | #endif | 1492 | #endif |
1452 | { | 1493 | { |
1453 | dev_priv->cp_ring->handle = | 1494 | dev_priv->cp_ring->handle = (void *)dev_priv->cp_ring->offset; |
1454 | (void *)dev_priv->cp_ring->offset; | ||
1455 | dev_priv->ring_rptr->handle = | 1495 | dev_priv->ring_rptr->handle = |
1456 | (void *)dev_priv->ring_rptr->offset; | 1496 | (void *)dev_priv->ring_rptr->offset; |
1457 | dev->agp_buffer_map->handle = (void *)dev->agp_buffer_map->offset; | 1497 | dev->agp_buffer_map->handle = |
1458 | 1498 | (void *)dev->agp_buffer_map->offset; | |
1459 | DRM_DEBUG( "dev_priv->cp_ring->handle %p\n", | 1499 | |
1460 | dev_priv->cp_ring->handle ); | 1500 | DRM_DEBUG("dev_priv->cp_ring->handle %p\n", |
1461 | DRM_DEBUG( "dev_priv->ring_rptr->handle %p\n", | 1501 | dev_priv->cp_ring->handle); |
1462 | dev_priv->ring_rptr->handle ); | 1502 | DRM_DEBUG("dev_priv->ring_rptr->handle %p\n", |
1463 | DRM_DEBUG( "dev->agp_buffer_map->handle %p\n", | 1503 | dev_priv->ring_rptr->handle); |
1464 | dev->agp_buffer_map->handle ); | 1504 | DRM_DEBUG("dev->agp_buffer_map->handle %p\n", |
1505 | dev->agp_buffer_map->handle); | ||
1465 | } | 1506 | } |
1466 | 1507 | ||
1467 | dev_priv->fb_location = ( RADEON_READ( RADEON_MC_FB_LOCATION ) | 1508 | dev_priv->fb_location = (RADEON_READ(RADEON_MC_FB_LOCATION) |
1468 | & 0xffff ) << 16; | 1509 | & 0xffff) << 16; |
1469 | 1510 | ||
1470 | dev_priv->front_pitch_offset = (((dev_priv->front_pitch/64) << 22) | | 1511 | dev_priv->front_pitch_offset = (((dev_priv->front_pitch / 64) << 22) | |
1471 | ( ( dev_priv->front_offset | 1512 | ((dev_priv->front_offset |
1472 | + dev_priv->fb_location ) >> 10 ) ); | 1513 | + dev_priv->fb_location) >> 10)); |
1473 | 1514 | ||
1474 | dev_priv->back_pitch_offset = (((dev_priv->back_pitch/64) << 22) | | 1515 | dev_priv->back_pitch_offset = (((dev_priv->back_pitch / 64) << 22) | |
1475 | ( ( dev_priv->back_offset | 1516 | ((dev_priv->back_offset |
1476 | + dev_priv->fb_location ) >> 10 ) ); | 1517 | + dev_priv->fb_location) >> 10)); |
1477 | |||
1478 | dev_priv->depth_pitch_offset = (((dev_priv->depth_pitch/64) << 22) | | ||
1479 | ( ( dev_priv->depth_offset | ||
1480 | + dev_priv->fb_location ) >> 10 ) ); | ||
1481 | 1518 | ||
1519 | dev_priv->depth_pitch_offset = (((dev_priv->depth_pitch / 64) << 22) | | ||
1520 | ((dev_priv->depth_offset | ||
1521 | + dev_priv->fb_location) >> 10)); | ||
1482 | 1522 | ||
1483 | dev_priv->gart_size = init->gart_size; | 1523 | dev_priv->gart_size = init->gart_size; |
1484 | dev_priv->gart_vm_start = dev_priv->fb_location | 1524 | dev_priv->gart_vm_start = dev_priv->fb_location |
1485 | + RADEON_READ( RADEON_CONFIG_APER_SIZE ); | 1525 | + RADEON_READ(RADEON_CONFIG_APER_SIZE); |
1486 | 1526 | ||
1487 | #if __OS_HAS_AGP | 1527 | #if __OS_HAS_AGP |
1488 | if ( !dev_priv->is_pci ) | 1528 | if (!dev_priv->is_pci) |
1489 | dev_priv->gart_buffers_offset = (dev->agp_buffer_map->offset | 1529 | dev_priv->gart_buffers_offset = (dev->agp_buffer_map->offset |
1490 | - dev->agp->base | 1530 | - dev->agp->base |
1491 | + dev_priv->gart_vm_start); | 1531 | + dev_priv->gart_vm_start); |
1492 | else | 1532 | else |
1493 | #endif | 1533 | #endif |
1494 | dev_priv->gart_buffers_offset = (dev->agp_buffer_map->offset | 1534 | dev_priv->gart_buffers_offset = (dev->agp_buffer_map->offset |
1495 | - (unsigned long)dev->sg->virtual | 1535 | - (unsigned long)dev->sg->virtual |
1496 | + dev_priv->gart_vm_start); | 1536 | + dev_priv->gart_vm_start); |
1497 | 1537 | ||
1498 | DRM_DEBUG( "dev_priv->gart_size %d\n", | 1538 | DRM_DEBUG("dev_priv->gart_size %d\n", dev_priv->gart_size); |
1499 | dev_priv->gart_size ); | 1539 | DRM_DEBUG("dev_priv->gart_vm_start 0x%x\n", dev_priv->gart_vm_start); |
1500 | DRM_DEBUG( "dev_priv->gart_vm_start 0x%x\n", | 1540 | DRM_DEBUG("dev_priv->gart_buffers_offset 0x%lx\n", |
1501 | dev_priv->gart_vm_start ); | 1541 | dev_priv->gart_buffers_offset); |
1502 | DRM_DEBUG( "dev_priv->gart_buffers_offset 0x%lx\n", | ||
1503 | dev_priv->gart_buffers_offset ); | ||
1504 | 1542 | ||
1505 | dev_priv->ring.start = (u32 *)dev_priv->cp_ring->handle; | 1543 | dev_priv->ring.start = (u32 *) dev_priv->cp_ring->handle; |
1506 | dev_priv->ring.end = ((u32 *)dev_priv->cp_ring->handle | 1544 | dev_priv->ring.end = ((u32 *) dev_priv->cp_ring->handle |
1507 | + init->ring_size / sizeof(u32)); | 1545 | + init->ring_size / sizeof(u32)); |
1508 | dev_priv->ring.size = init->ring_size; | 1546 | dev_priv->ring.size = init->ring_size; |
1509 | dev_priv->ring.size_l2qw = drm_order( init->ring_size / 8 ); | 1547 | dev_priv->ring.size_l2qw = drm_order(init->ring_size / 8); |
1510 | 1548 | ||
1511 | dev_priv->ring.tail_mask = | 1549 | dev_priv->ring.tail_mask = (dev_priv->ring.size / sizeof(u32)) - 1; |
1512 | (dev_priv->ring.size / sizeof(u32)) - 1; | ||
1513 | 1550 | ||
1514 | dev_priv->ring.high_mark = RADEON_RING_HIGH_MARK; | 1551 | dev_priv->ring.high_mark = RADEON_RING_HIGH_MARK; |
1515 | 1552 | ||
1516 | #if __OS_HAS_AGP | 1553 | #if __OS_HAS_AGP |
1517 | if ( !dev_priv->is_pci ) { | 1554 | if (!dev_priv->is_pci) { |
1518 | /* Turn off PCI GART */ | 1555 | /* Turn off PCI GART */ |
1519 | radeon_set_pcigart( dev_priv, 0 ); | 1556 | radeon_set_pcigart(dev_priv, 0); |
1520 | } else | 1557 | } else |
1521 | #endif | 1558 | #endif |
1522 | { | 1559 | { |
1523 | if (!drm_ati_pcigart_init( dev, &dev_priv->phys_pci_gart, | 1560 | /* if we have an offset set from userspace */ |
1524 | &dev_priv->bus_pci_gart)) { | 1561 | if (dev_priv->pcigart_offset) { |
1525 | DRM_ERROR( "failed to init PCI GART!\n" ); | 1562 | dev_priv->gart_info.bus_addr = |
1563 | dev_priv->pcigart_offset + dev_priv->fb_location; | ||
1564 | dev_priv->gart_info.addr = | ||
1565 | (unsigned long)drm_ioremap(dev_priv->gart_info. | ||
1566 | bus_addr, | ||
1567 | RADEON_PCIGART_TABLE_SIZE, | ||
1568 | dev); | ||
1569 | |||
1570 | dev_priv->gart_info.is_pcie = | ||
1571 | !!(dev_priv->flags & CHIP_IS_PCIE); | ||
1572 | dev_priv->gart_info.gart_table_location = | ||
1573 | DRM_ATI_GART_FB; | ||
1574 | |||
1575 | DRM_DEBUG("Setting phys_pci_gart to %08lX %08lX\n", | ||
1576 | dev_priv->gart_info.addr, | ||
1577 | dev_priv->pcigart_offset); | ||
1578 | } else { | ||
1579 | dev_priv->gart_info.gart_table_location = | ||
1580 | DRM_ATI_GART_MAIN; | ||
1581 | dev_priv->gart_info.addr = | ||
1582 | dev_priv->gart_info.bus_addr = 0; | ||
1583 | if (dev_priv->flags & CHIP_IS_PCIE) { | ||
1584 | DRM_ERROR | ||
1585 | ("Cannot use PCI Express without GART in FB memory\n"); | ||
1586 | radeon_do_cleanup_cp(dev); | ||
1587 | return DRM_ERR(EINVAL); | ||
1588 | } | ||
1589 | } | ||
1590 | |||
1591 | if (!drm_ati_pcigart_init(dev, &dev_priv->gart_info)) { | ||
1592 | DRM_ERROR("failed to init PCI GART!\n"); | ||
1526 | dev->dev_private = (void *)dev_priv; | 1593 | dev->dev_private = (void *)dev_priv; |
1527 | radeon_do_cleanup_cp(dev); | 1594 | radeon_do_cleanup_cp(dev); |
1528 | return DRM_ERR(ENOMEM); | 1595 | return DRM_ERR(ENOMEM); |
1529 | } | 1596 | } |
1530 | 1597 | ||
1531 | /* Turn on PCI GART */ | 1598 | /* Turn on PCI GART */ |
1532 | radeon_set_pcigart( dev_priv, 1 ); | 1599 | radeon_set_pcigart(dev_priv, 1); |
1533 | } | 1600 | } |
1534 | 1601 | ||
1535 | radeon_cp_load_microcode( dev_priv ); | 1602 | radeon_cp_load_microcode(dev_priv); |
1536 | radeon_cp_init_ring_buffer( dev, dev_priv ); | 1603 | radeon_cp_init_ring_buffer(dev, dev_priv); |
1537 | 1604 | ||
1538 | dev_priv->last_buf = 0; | 1605 | dev_priv->last_buf = 0; |
1539 | 1606 | ||
1540 | dev->dev_private = (void *)dev_priv; | 1607 | dev->dev_private = (void *)dev_priv; |
1541 | 1608 | ||
1542 | radeon_do_engine_reset( dev ); | 1609 | radeon_do_engine_reset(dev); |
1543 | 1610 | ||
1544 | return 0; | 1611 | return 0; |
1545 | } | 1612 | } |
1546 | 1613 | ||
1547 | static int radeon_do_cleanup_cp( drm_device_t *dev ) | 1614 | static int radeon_do_cleanup_cp(drm_device_t * dev) |
1548 | { | 1615 | { |
1549 | drm_radeon_private_t *dev_priv = dev->dev_private; | 1616 | drm_radeon_private_t *dev_priv = dev->dev_private; |
1550 | DRM_DEBUG( "\n" ); | 1617 | DRM_DEBUG("\n"); |
1551 | 1618 | ||
1552 | /* Make sure interrupts are disabled here because the uninstall ioctl | 1619 | /* Make sure interrupts are disabled here because the uninstall ioctl |
1553 | * may not have been called from userspace and after dev_private | 1620 | * may not have been called from userspace and after dev_private |
1554 | * is freed, it's too late. | 1621 | * is freed, it's too late. |
1555 | */ | 1622 | */ |
1556 | if ( dev->irq_enabled ) drm_irq_uninstall(dev); | 1623 | if (dev->irq_enabled) |
1624 | drm_irq_uninstall(dev); | ||
1557 | 1625 | ||
1558 | #if __OS_HAS_AGP | 1626 | #if __OS_HAS_AGP |
1559 | if ( !dev_priv->is_pci ) { | 1627 | if (!dev_priv->is_pci) { |
1560 | if ( dev_priv->cp_ring != NULL ) | 1628 | if (dev_priv->cp_ring != NULL) |
1561 | drm_core_ioremapfree( dev_priv->cp_ring, dev ); | 1629 | drm_core_ioremapfree(dev_priv->cp_ring, dev); |
1562 | if ( dev_priv->ring_rptr != NULL ) | 1630 | if (dev_priv->ring_rptr != NULL) |
1563 | drm_core_ioremapfree( dev_priv->ring_rptr, dev ); | 1631 | drm_core_ioremapfree(dev_priv->ring_rptr, dev); |
1564 | if ( dev->agp_buffer_map != NULL ) | 1632 | if (dev->agp_buffer_map != NULL) { |
1565 | { | 1633 | drm_core_ioremapfree(dev->agp_buffer_map, dev); |
1566 | drm_core_ioremapfree( dev->agp_buffer_map, dev ); | ||
1567 | dev->agp_buffer_map = NULL; | 1634 | dev->agp_buffer_map = NULL; |
1568 | } | 1635 | } |
1569 | } else | 1636 | } else |
1570 | #endif | 1637 | #endif |
1571 | { | 1638 | { |
1572 | if (!drm_ati_pcigart_cleanup( dev, | 1639 | if (dev_priv->gart_info.bus_addr) |
1573 | dev_priv->phys_pci_gart, | 1640 | if (!drm_ati_pcigart_cleanup(dev, &dev_priv->gart_info)) |
1574 | dev_priv->bus_pci_gart )) | 1641 | DRM_ERROR("failed to cleanup PCI GART!\n"); |
1575 | DRM_ERROR( "failed to cleanup PCI GART!\n" ); | 1642 | |
1643 | if (dev_priv->gart_info.gart_table_location == DRM_ATI_GART_FB) { | ||
1644 | drm_ioremapfree((void *)dev_priv->gart_info.addr, | ||
1645 | RADEON_PCIGART_TABLE_SIZE, dev); | ||
1646 | dev_priv->gart_info.addr = 0; | ||
1647 | } | ||
1576 | } | 1648 | } |
1577 | 1649 | ||
1578 | /* only clear to the start of flags */ | 1650 | /* only clear to the start of flags */ |
1579 | memset(dev_priv, 0, offsetof(drm_radeon_private_t, flags)); | 1651 | memset(dev_priv, 0, offsetof(drm_radeon_private_t, flags)); |
1580 | 1652 | ||
1581 | return 0; | 1653 | return 0; |
1582 | } | 1654 | } |
1583 | 1655 | ||
1584 | /* This code will reinit the Radeon CP hardware after a resume from disc. | 1656 | /* This code will reinit the Radeon CP hardware after a resume from disc. |
1585 | * AFAIK, it would be very difficult to pickle the state at suspend time, so | 1657 | * AFAIK, it would be very difficult to pickle the state at suspend time, so |
1586 | * here we make sure that all Radeon hardware initialisation is re-done without | 1658 | * here we make sure that all Radeon hardware initialisation is re-done without |
1587 | * affecting running applications. | 1659 | * affecting running applications. |
1588 | * | 1660 | * |
1589 | * Charl P. Botha <http://cpbotha.net> | 1661 | * Charl P. Botha <http://cpbotha.net> |
1590 | */ | 1662 | */ |
1591 | static int radeon_do_resume_cp( drm_device_t *dev ) | 1663 | static int radeon_do_resume_cp(drm_device_t * dev) |
1592 | { | 1664 | { |
1593 | drm_radeon_private_t *dev_priv = dev->dev_private; | 1665 | drm_radeon_private_t *dev_priv = dev->dev_private; |
1594 | 1666 | ||
1595 | if ( !dev_priv ) { | 1667 | if (!dev_priv) { |
1596 | DRM_ERROR( "Called with no initialization\n" ); | 1668 | DRM_ERROR("Called with no initialization\n"); |
1597 | return DRM_ERR( EINVAL ); | 1669 | return DRM_ERR(EINVAL); |
1598 | } | 1670 | } |
1599 | 1671 | ||
1600 | DRM_DEBUG("Starting radeon_do_resume_cp()\n"); | 1672 | DRM_DEBUG("Starting radeon_do_resume_cp()\n"); |
1601 | 1673 | ||
1602 | #if __OS_HAS_AGP | 1674 | #if __OS_HAS_AGP |
1603 | if ( !dev_priv->is_pci ) { | 1675 | if (!dev_priv->is_pci) { |
1604 | /* Turn off PCI GART */ | 1676 | /* Turn off PCI GART */ |
1605 | radeon_set_pcigart( dev_priv, 0 ); | 1677 | radeon_set_pcigart(dev_priv, 0); |
1606 | } else | 1678 | } else |
1607 | #endif | 1679 | #endif |
1608 | { | 1680 | { |
1609 | /* Turn on PCI GART */ | 1681 | /* Turn on PCI GART */ |
1610 | radeon_set_pcigart( dev_priv, 1 ); | 1682 | radeon_set_pcigart(dev_priv, 1); |
1611 | } | 1683 | } |
1612 | 1684 | ||
1613 | radeon_cp_load_microcode( dev_priv ); | 1685 | radeon_cp_load_microcode(dev_priv); |
1614 | radeon_cp_init_ring_buffer( dev, dev_priv ); | 1686 | radeon_cp_init_ring_buffer(dev, dev_priv); |
1615 | 1687 | ||
1616 | radeon_do_engine_reset( dev ); | 1688 | radeon_do_engine_reset(dev); |
1617 | 1689 | ||
1618 | DRM_DEBUG("radeon_do_resume_cp() complete\n"); | 1690 | DRM_DEBUG("radeon_do_resume_cp() complete\n"); |
1619 | 1691 | ||
1620 | return 0; | 1692 | return 0; |
1621 | } | 1693 | } |
1622 | 1694 | ||
1623 | 1695 | int radeon_cp_init(DRM_IOCTL_ARGS) | |
1624 | int radeon_cp_init( DRM_IOCTL_ARGS ) | ||
1625 | { | 1696 | { |
1626 | DRM_DEVICE; | 1697 | DRM_DEVICE; |
1627 | drm_radeon_init_t init; | 1698 | drm_radeon_init_t init; |
1628 | 1699 | ||
1629 | LOCK_TEST_WITH_RETURN( dev, filp ); | 1700 | LOCK_TEST_WITH_RETURN(dev, filp); |
1630 | 1701 | ||
1631 | DRM_COPY_FROM_USER_IOCTL( init, (drm_radeon_init_t __user *)data, sizeof(init) ); | 1702 | DRM_COPY_FROM_USER_IOCTL(init, (drm_radeon_init_t __user *) data, |
1703 | sizeof(init)); | ||
1632 | 1704 | ||
1633 | if(init.func == RADEON_INIT_R300_CP) | 1705 | if (init.func == RADEON_INIT_R300_CP) |
1634 | r300_init_reg_flags(); | 1706 | r300_init_reg_flags(); |
1635 | 1707 | ||
1636 | switch ( init.func ) { | 1708 | switch (init.func) { |
1637 | case RADEON_INIT_CP: | 1709 | case RADEON_INIT_CP: |
1638 | case RADEON_INIT_R200_CP: | 1710 | case RADEON_INIT_R200_CP: |
1639 | case RADEON_INIT_R300_CP: | 1711 | case RADEON_INIT_R300_CP: |
1640 | return radeon_do_init_cp( dev, &init ); | 1712 | return radeon_do_init_cp(dev, &init); |
1641 | case RADEON_CLEANUP_CP: | 1713 | case RADEON_CLEANUP_CP: |
1642 | return radeon_do_cleanup_cp( dev ); | 1714 | return radeon_do_cleanup_cp(dev); |
1643 | } | 1715 | } |
1644 | 1716 | ||
1645 | return DRM_ERR(EINVAL); | 1717 | return DRM_ERR(EINVAL); |
1646 | } | 1718 | } |
1647 | 1719 | ||
1648 | int radeon_cp_start( DRM_IOCTL_ARGS ) | 1720 | int radeon_cp_start(DRM_IOCTL_ARGS) |
1649 | { | 1721 | { |
1650 | DRM_DEVICE; | 1722 | DRM_DEVICE; |
1651 | drm_radeon_private_t *dev_priv = dev->dev_private; | 1723 | drm_radeon_private_t *dev_priv = dev->dev_private; |
1652 | DRM_DEBUG( "\n" ); | 1724 | DRM_DEBUG("\n"); |
1653 | 1725 | ||
1654 | LOCK_TEST_WITH_RETURN( dev, filp ); | 1726 | LOCK_TEST_WITH_RETURN(dev, filp); |
1655 | 1727 | ||
1656 | if ( dev_priv->cp_running ) { | 1728 | if (dev_priv->cp_running) { |
1657 | DRM_DEBUG( "%s while CP running\n", __FUNCTION__ ); | 1729 | DRM_DEBUG("%s while CP running\n", __FUNCTION__); |
1658 | return 0; | 1730 | return 0; |
1659 | } | 1731 | } |
1660 | if ( dev_priv->cp_mode == RADEON_CSQ_PRIDIS_INDDIS ) { | 1732 | if (dev_priv->cp_mode == RADEON_CSQ_PRIDIS_INDDIS) { |
1661 | DRM_DEBUG( "%s called with bogus CP mode (%d)\n", | 1733 | DRM_DEBUG("%s called with bogus CP mode (%d)\n", |
1662 | __FUNCTION__, dev_priv->cp_mode ); | 1734 | __FUNCTION__, dev_priv->cp_mode); |
1663 | return 0; | 1735 | return 0; |
1664 | } | 1736 | } |
1665 | 1737 | ||
1666 | radeon_do_cp_start( dev_priv ); | 1738 | radeon_do_cp_start(dev_priv); |
1667 | 1739 | ||
1668 | return 0; | 1740 | return 0; |
1669 | } | 1741 | } |
@@ -1671,17 +1743,18 @@ int radeon_cp_start( DRM_IOCTL_ARGS ) | |||
1671 | /* Stop the CP. The engine must have been idled before calling this | 1743 | /* Stop the CP. The engine must have been idled before calling this |
1672 | * routine. | 1744 | * routine. |
1673 | */ | 1745 | */ |
1674 | int radeon_cp_stop( DRM_IOCTL_ARGS ) | 1746 | int radeon_cp_stop(DRM_IOCTL_ARGS) |
1675 | { | 1747 | { |
1676 | DRM_DEVICE; | 1748 | DRM_DEVICE; |
1677 | drm_radeon_private_t *dev_priv = dev->dev_private; | 1749 | drm_radeon_private_t *dev_priv = dev->dev_private; |
1678 | drm_radeon_cp_stop_t stop; | 1750 | drm_radeon_cp_stop_t stop; |
1679 | int ret; | 1751 | int ret; |
1680 | DRM_DEBUG( "\n" ); | 1752 | DRM_DEBUG("\n"); |
1681 | 1753 | ||
1682 | LOCK_TEST_WITH_RETURN( dev, filp ); | 1754 | LOCK_TEST_WITH_RETURN(dev, filp); |
1683 | 1755 | ||
1684 | DRM_COPY_FROM_USER_IOCTL( stop, (drm_radeon_cp_stop_t __user *)data, sizeof(stop) ); | 1756 | DRM_COPY_FROM_USER_IOCTL(stop, (drm_radeon_cp_stop_t __user *) data, |
1757 | sizeof(stop)); | ||
1685 | 1758 | ||
1686 | if (!dev_priv->cp_running) | 1759 | if (!dev_priv->cp_running) |
1687 | return 0; | 1760 | return 0; |
@@ -1689,32 +1762,32 @@ int radeon_cp_stop( DRM_IOCTL_ARGS ) | |||
1689 | /* Flush any pending CP commands. This ensures any outstanding | 1762 | /* Flush any pending CP commands. This ensures any outstanding |
1690 | * commands are exectuted by the engine before we turn it off. | 1763 | * commands are exectuted by the engine before we turn it off. |
1691 | */ | 1764 | */ |
1692 | if ( stop.flush ) { | 1765 | if (stop.flush) { |
1693 | radeon_do_cp_flush( dev_priv ); | 1766 | radeon_do_cp_flush(dev_priv); |
1694 | } | 1767 | } |
1695 | 1768 | ||
1696 | /* If we fail to make the engine go idle, we return an error | 1769 | /* If we fail to make the engine go idle, we return an error |
1697 | * code so that the DRM ioctl wrapper can try again. | 1770 | * code so that the DRM ioctl wrapper can try again. |
1698 | */ | 1771 | */ |
1699 | if ( stop.idle ) { | 1772 | if (stop.idle) { |
1700 | ret = radeon_do_cp_idle( dev_priv ); | 1773 | ret = radeon_do_cp_idle(dev_priv); |
1701 | if ( ret ) return ret; | 1774 | if (ret) |
1775 | return ret; | ||
1702 | } | 1776 | } |
1703 | 1777 | ||
1704 | /* Finally, we can turn off the CP. If the engine isn't idle, | 1778 | /* Finally, we can turn off the CP. If the engine isn't idle, |
1705 | * we will get some dropped triangles as they won't be fully | 1779 | * we will get some dropped triangles as they won't be fully |
1706 | * rendered before the CP is shut down. | 1780 | * rendered before the CP is shut down. |
1707 | */ | 1781 | */ |
1708 | radeon_do_cp_stop( dev_priv ); | 1782 | radeon_do_cp_stop(dev_priv); |
1709 | 1783 | ||
1710 | /* Reset the engine */ | 1784 | /* Reset the engine */ |
1711 | radeon_do_engine_reset( dev ); | 1785 | radeon_do_engine_reset(dev); |
1712 | 1786 | ||
1713 | return 0; | 1787 | return 0; |
1714 | } | 1788 | } |
1715 | 1789 | ||
1716 | 1790 | void radeon_do_release(drm_device_t * dev) | |
1717 | void radeon_do_release( drm_device_t *dev ) | ||
1718 | { | 1791 | { |
1719 | drm_radeon_private_t *dev_priv = dev->dev_private; | 1792 | drm_radeon_private_t *dev_priv = dev->dev_private; |
1720 | int i, ret; | 1793 | int i, ret; |
@@ -1722,7 +1795,7 @@ void radeon_do_release( drm_device_t *dev ) | |||
1722 | if (dev_priv) { | 1795 | if (dev_priv) { |
1723 | if (dev_priv->cp_running) { | 1796 | if (dev_priv->cp_running) { |
1724 | /* Stop the cp */ | 1797 | /* Stop the cp */ |
1725 | while ((ret = radeon_do_cp_idle( dev_priv )) != 0) { | 1798 | while ((ret = radeon_do_cp_idle(dev_priv)) != 0) { |
1726 | DRM_DEBUG("radeon_do_cp_idle %d\n", ret); | 1799 | DRM_DEBUG("radeon_do_cp_idle %d\n", ret); |
1727 | #ifdef __linux__ | 1800 | #ifdef __linux__ |
1728 | schedule(); | 1801 | schedule(); |
@@ -1730,47 +1803,49 @@ void radeon_do_release( drm_device_t *dev ) | |||
1730 | tsleep(&ret, PZERO, "rdnrel", 1); | 1803 | tsleep(&ret, PZERO, "rdnrel", 1); |
1731 | #endif | 1804 | #endif |
1732 | } | 1805 | } |
1733 | radeon_do_cp_stop( dev_priv ); | 1806 | radeon_do_cp_stop(dev_priv); |
1734 | radeon_do_engine_reset( dev ); | 1807 | radeon_do_engine_reset(dev); |
1735 | } | 1808 | } |
1736 | 1809 | ||
1737 | /* Disable *all* interrupts */ | 1810 | /* Disable *all* interrupts */ |
1738 | if (dev_priv->mmio) /* remove this after permanent addmaps */ | 1811 | if (dev_priv->mmio) /* remove this after permanent addmaps */ |
1739 | RADEON_WRITE( RADEON_GEN_INT_CNTL, 0 ); | 1812 | RADEON_WRITE(RADEON_GEN_INT_CNTL, 0); |
1740 | 1813 | ||
1741 | if (dev_priv->mmio) {/* remove all surfaces */ | 1814 | if (dev_priv->mmio) { /* remove all surfaces */ |
1742 | for (i = 0; i < RADEON_MAX_SURFACES; i++) { | 1815 | for (i = 0; i < RADEON_MAX_SURFACES; i++) { |
1743 | RADEON_WRITE(RADEON_SURFACE0_INFO + 16*i, 0); | 1816 | RADEON_WRITE(RADEON_SURFACE0_INFO + 16 * i, 0); |
1744 | RADEON_WRITE(RADEON_SURFACE0_LOWER_BOUND + 16*i, 0); | 1817 | RADEON_WRITE(RADEON_SURFACE0_LOWER_BOUND + |
1745 | RADEON_WRITE(RADEON_SURFACE0_UPPER_BOUND + 16*i, 0); | 1818 | 16 * i, 0); |
1819 | RADEON_WRITE(RADEON_SURFACE0_UPPER_BOUND + | ||
1820 | 16 * i, 0); | ||
1746 | } | 1821 | } |
1747 | } | 1822 | } |
1748 | 1823 | ||
1749 | /* Free memory heap structures */ | 1824 | /* Free memory heap structures */ |
1750 | radeon_mem_takedown( &(dev_priv->gart_heap) ); | 1825 | radeon_mem_takedown(&(dev_priv->gart_heap)); |
1751 | radeon_mem_takedown( &(dev_priv->fb_heap) ); | 1826 | radeon_mem_takedown(&(dev_priv->fb_heap)); |
1752 | 1827 | ||
1753 | /* deallocate kernel resources */ | 1828 | /* deallocate kernel resources */ |
1754 | radeon_do_cleanup_cp( dev ); | 1829 | radeon_do_cleanup_cp(dev); |
1755 | } | 1830 | } |
1756 | } | 1831 | } |
1757 | 1832 | ||
1758 | /* Just reset the CP ring. Called as part of an X Server engine reset. | 1833 | /* Just reset the CP ring. Called as part of an X Server engine reset. |
1759 | */ | 1834 | */ |
1760 | int radeon_cp_reset( DRM_IOCTL_ARGS ) | 1835 | int radeon_cp_reset(DRM_IOCTL_ARGS) |
1761 | { | 1836 | { |
1762 | DRM_DEVICE; | 1837 | DRM_DEVICE; |
1763 | drm_radeon_private_t *dev_priv = dev->dev_private; | 1838 | drm_radeon_private_t *dev_priv = dev->dev_private; |
1764 | DRM_DEBUG( "\n" ); | 1839 | DRM_DEBUG("\n"); |
1765 | 1840 | ||
1766 | LOCK_TEST_WITH_RETURN( dev, filp ); | 1841 | LOCK_TEST_WITH_RETURN(dev, filp); |
1767 | 1842 | ||
1768 | if ( !dev_priv ) { | 1843 | if (!dev_priv) { |
1769 | DRM_DEBUG( "%s called before init done\n", __FUNCTION__ ); | 1844 | DRM_DEBUG("%s called before init done\n", __FUNCTION__); |
1770 | return DRM_ERR(EINVAL); | 1845 | return DRM_ERR(EINVAL); |
1771 | } | 1846 | } |
1772 | 1847 | ||
1773 | radeon_do_cp_reset( dev_priv ); | 1848 | radeon_do_cp_reset(dev_priv); |
1774 | 1849 | ||
1775 | /* The CP is no longer running after an engine reset */ | 1850 | /* The CP is no longer running after an engine reset */ |
1776 | dev_priv->cp_running = 0; | 1851 | dev_priv->cp_running = 0; |
@@ -1778,50 +1853,47 @@ int radeon_cp_reset( DRM_IOCTL_ARGS ) | |||
1778 | return 0; | 1853 | return 0; |
1779 | } | 1854 | } |
1780 | 1855 | ||
1781 | int radeon_cp_idle( DRM_IOCTL_ARGS ) | 1856 | int radeon_cp_idle(DRM_IOCTL_ARGS) |
1782 | { | 1857 | { |
1783 | DRM_DEVICE; | 1858 | DRM_DEVICE; |
1784 | drm_radeon_private_t *dev_priv = dev->dev_private; | 1859 | drm_radeon_private_t *dev_priv = dev->dev_private; |
1785 | DRM_DEBUG( "\n" ); | 1860 | DRM_DEBUG("\n"); |
1786 | 1861 | ||
1787 | LOCK_TEST_WITH_RETURN( dev, filp ); | 1862 | LOCK_TEST_WITH_RETURN(dev, filp); |
1788 | 1863 | ||
1789 | return radeon_do_cp_idle( dev_priv ); | 1864 | return radeon_do_cp_idle(dev_priv); |
1790 | } | 1865 | } |
1791 | 1866 | ||
1792 | /* Added by Charl P. Botha to call radeon_do_resume_cp(). | 1867 | /* Added by Charl P. Botha to call radeon_do_resume_cp(). |
1793 | */ | 1868 | */ |
1794 | int radeon_cp_resume( DRM_IOCTL_ARGS ) | 1869 | int radeon_cp_resume(DRM_IOCTL_ARGS) |
1795 | { | 1870 | { |
1796 | DRM_DEVICE; | 1871 | DRM_DEVICE; |
1797 | 1872 | ||
1798 | return radeon_do_resume_cp(dev); | 1873 | return radeon_do_resume_cp(dev); |
1799 | } | 1874 | } |
1800 | 1875 | ||
1801 | 1876 | int radeon_engine_reset(DRM_IOCTL_ARGS) | |
1802 | int radeon_engine_reset( DRM_IOCTL_ARGS ) | ||
1803 | { | 1877 | { |
1804 | DRM_DEVICE; | 1878 | DRM_DEVICE; |
1805 | DRM_DEBUG( "\n" ); | 1879 | DRM_DEBUG("\n"); |
1806 | 1880 | ||
1807 | LOCK_TEST_WITH_RETURN( dev, filp ); | 1881 | LOCK_TEST_WITH_RETURN(dev, filp); |
1808 | 1882 | ||
1809 | return radeon_do_engine_reset( dev ); | 1883 | return radeon_do_engine_reset(dev); |
1810 | } | 1884 | } |
1811 | 1885 | ||
1812 | |||
1813 | /* ================================================================ | 1886 | /* ================================================================ |
1814 | * Fullscreen mode | 1887 | * Fullscreen mode |
1815 | */ | 1888 | */ |
1816 | 1889 | ||
1817 | /* KW: Deprecated to say the least: | 1890 | /* KW: Deprecated to say the least: |
1818 | */ | 1891 | */ |
1819 | int radeon_fullscreen( DRM_IOCTL_ARGS ) | 1892 | int radeon_fullscreen(DRM_IOCTL_ARGS) |
1820 | { | 1893 | { |
1821 | return 0; | 1894 | return 0; |
1822 | } | 1895 | } |
1823 | 1896 | ||
1824 | |||
1825 | /* ================================================================ | 1897 | /* ================================================================ |
1826 | * Freelist management | 1898 | * Freelist management |
1827 | */ | 1899 | */ |
@@ -1830,20 +1902,20 @@ int radeon_fullscreen( DRM_IOCTL_ARGS ) | |||
1830 | * bufs until freelist code is used. Note this hides a problem with | 1902 | * bufs until freelist code is used. Note this hides a problem with |
1831 | * the scratch register * (used to keep track of last buffer | 1903 | * the scratch register * (used to keep track of last buffer |
1832 | * completed) being written to before * the last buffer has actually | 1904 | * completed) being written to before * the last buffer has actually |
1833 | * completed rendering. | 1905 | * completed rendering. |
1834 | * | 1906 | * |
1835 | * KW: It's also a good way to find free buffers quickly. | 1907 | * KW: It's also a good way to find free buffers quickly. |
1836 | * | 1908 | * |
1837 | * KW: Ideally this loop wouldn't exist, and freelist_get wouldn't | 1909 | * KW: Ideally this loop wouldn't exist, and freelist_get wouldn't |
1838 | * sleep. However, bugs in older versions of radeon_accel.c mean that | 1910 | * sleep. However, bugs in older versions of radeon_accel.c mean that |
1839 | * we essentially have to do this, else old clients will break. | 1911 | * we essentially have to do this, else old clients will break. |
1840 | * | 1912 | * |
1841 | * However, it does leave open a potential deadlock where all the | 1913 | * However, it does leave open a potential deadlock where all the |
1842 | * buffers are held by other clients, which can't release them because | 1914 | * buffers are held by other clients, which can't release them because |
1843 | * they can't get the lock. | 1915 | * they can't get the lock. |
1844 | */ | 1916 | */ |
1845 | 1917 | ||
1846 | drm_buf_t *radeon_freelist_get( drm_device_t *dev ) | 1918 | drm_buf_t *radeon_freelist_get(drm_device_t * dev) |
1847 | { | 1919 | { |
1848 | drm_device_dma_t *dma = dev->dma; | 1920 | drm_device_dma_t *dma = dev->dma; |
1849 | drm_radeon_private_t *dev_priv = dev->dev_private; | 1921 | drm_radeon_private_t *dev_priv = dev->dev_private; |
@@ -1852,19 +1924,19 @@ drm_buf_t *radeon_freelist_get( drm_device_t *dev ) | |||
1852 | int i, t; | 1924 | int i, t; |
1853 | int start; | 1925 | int start; |
1854 | 1926 | ||
1855 | if ( ++dev_priv->last_buf >= dma->buf_count ) | 1927 | if (++dev_priv->last_buf >= dma->buf_count) |
1856 | dev_priv->last_buf = 0; | 1928 | dev_priv->last_buf = 0; |
1857 | 1929 | ||
1858 | start = dev_priv->last_buf; | 1930 | start = dev_priv->last_buf; |
1859 | 1931 | ||
1860 | for ( t = 0 ; t < dev_priv->usec_timeout ; t++ ) { | 1932 | for (t = 0; t < dev_priv->usec_timeout; t++) { |
1861 | u32 done_age = GET_SCRATCH( 1 ); | 1933 | u32 done_age = GET_SCRATCH(1); |
1862 | DRM_DEBUG("done_age = %d\n",done_age); | 1934 | DRM_DEBUG("done_age = %d\n", done_age); |
1863 | for ( i = start ; i < dma->buf_count ; i++ ) { | 1935 | for (i = start; i < dma->buf_count; i++) { |
1864 | buf = dma->buflist[i]; | 1936 | buf = dma->buflist[i]; |
1865 | buf_priv = buf->dev_private; | 1937 | buf_priv = buf->dev_private; |
1866 | if ( buf->filp == 0 || (buf->pending && | 1938 | if (buf->filp == 0 || (buf->pending && |
1867 | buf_priv->age <= done_age) ) { | 1939 | buf_priv->age <= done_age)) { |
1868 | dev_priv->stats.requested_bufs++; | 1940 | dev_priv->stats.requested_bufs++; |
1869 | buf->pending = 0; | 1941 | buf->pending = 0; |
1870 | return buf; | 1942 | return buf; |
@@ -1873,16 +1945,17 @@ drm_buf_t *radeon_freelist_get( drm_device_t *dev ) | |||
1873 | } | 1945 | } |
1874 | 1946 | ||
1875 | if (t) { | 1947 | if (t) { |
1876 | DRM_UDELAY( 1 ); | 1948 | DRM_UDELAY(1); |
1877 | dev_priv->stats.freelist_loops++; | 1949 | dev_priv->stats.freelist_loops++; |
1878 | } | 1950 | } |
1879 | } | 1951 | } |
1880 | 1952 | ||
1881 | DRM_DEBUG( "returning NULL!\n" ); | 1953 | DRM_DEBUG("returning NULL!\n"); |
1882 | return NULL; | 1954 | return NULL; |
1883 | } | 1955 | } |
1956 | |||
1884 | #if 0 | 1957 | #if 0 |
1885 | drm_buf_t *radeon_freelist_get( drm_device_t *dev ) | 1958 | drm_buf_t *radeon_freelist_get(drm_device_t * dev) |
1886 | { | 1959 | { |
1887 | drm_device_dma_t *dma = dev->dma; | 1960 | drm_device_dma_t *dma = dev->dma; |
1888 | drm_radeon_private_t *dev_priv = dev->dev_private; | 1961 | drm_radeon_private_t *dev_priv = dev->dev_private; |
@@ -1892,18 +1965,18 @@ drm_buf_t *radeon_freelist_get( drm_device_t *dev ) | |||
1892 | int start; | 1965 | int start; |
1893 | u32 done_age = DRM_READ32(dev_priv->ring_rptr, RADEON_SCRATCHOFF(1)); | 1966 | u32 done_age = DRM_READ32(dev_priv->ring_rptr, RADEON_SCRATCHOFF(1)); |
1894 | 1967 | ||
1895 | if ( ++dev_priv->last_buf >= dma->buf_count ) | 1968 | if (++dev_priv->last_buf >= dma->buf_count) |
1896 | dev_priv->last_buf = 0; | 1969 | dev_priv->last_buf = 0; |
1897 | 1970 | ||
1898 | start = dev_priv->last_buf; | 1971 | start = dev_priv->last_buf; |
1899 | dev_priv->stats.freelist_loops++; | 1972 | dev_priv->stats.freelist_loops++; |
1900 | 1973 | ||
1901 | for ( t = 0 ; t < 2 ; t++ ) { | 1974 | for (t = 0; t < 2; t++) { |
1902 | for ( i = start ; i < dma->buf_count ; i++ ) { | 1975 | for (i = start; i < dma->buf_count; i++) { |
1903 | buf = dma->buflist[i]; | 1976 | buf = dma->buflist[i]; |
1904 | buf_priv = buf->dev_private; | 1977 | buf_priv = buf->dev_private; |
1905 | if ( buf->filp == 0 || (buf->pending && | 1978 | if (buf->filp == 0 || (buf->pending && |
1906 | buf_priv->age <= done_age) ) { | 1979 | buf_priv->age <= done_age)) { |
1907 | dev_priv->stats.requested_bufs++; | 1980 | dev_priv->stats.requested_bufs++; |
1908 | buf->pending = 0; | 1981 | buf->pending = 0; |
1909 | return buf; | 1982 | return buf; |
@@ -1916,73 +1989,74 @@ drm_buf_t *radeon_freelist_get( drm_device_t *dev ) | |||
1916 | } | 1989 | } |
1917 | #endif | 1990 | #endif |
1918 | 1991 | ||
1919 | void radeon_freelist_reset( drm_device_t *dev ) | 1992 | void radeon_freelist_reset(drm_device_t * dev) |
1920 | { | 1993 | { |
1921 | drm_device_dma_t *dma = dev->dma; | 1994 | drm_device_dma_t *dma = dev->dma; |
1922 | drm_radeon_private_t *dev_priv = dev->dev_private; | 1995 | drm_radeon_private_t *dev_priv = dev->dev_private; |
1923 | int i; | 1996 | int i; |
1924 | 1997 | ||
1925 | dev_priv->last_buf = 0; | 1998 | dev_priv->last_buf = 0; |
1926 | for ( i = 0 ; i < dma->buf_count ; i++ ) { | 1999 | for (i = 0; i < dma->buf_count; i++) { |
1927 | drm_buf_t *buf = dma->buflist[i]; | 2000 | drm_buf_t *buf = dma->buflist[i]; |
1928 | drm_radeon_buf_priv_t *buf_priv = buf->dev_private; | 2001 | drm_radeon_buf_priv_t *buf_priv = buf->dev_private; |
1929 | buf_priv->age = 0; | 2002 | buf_priv->age = 0; |
1930 | } | 2003 | } |
1931 | } | 2004 | } |
1932 | 2005 | ||
1933 | |||
1934 | /* ================================================================ | 2006 | /* ================================================================ |
1935 | * CP command submission | 2007 | * CP command submission |
1936 | */ | 2008 | */ |
1937 | 2009 | ||
1938 | int radeon_wait_ring( drm_radeon_private_t *dev_priv, int n ) | 2010 | int radeon_wait_ring(drm_radeon_private_t * dev_priv, int n) |
1939 | { | 2011 | { |
1940 | drm_radeon_ring_buffer_t *ring = &dev_priv->ring; | 2012 | drm_radeon_ring_buffer_t *ring = &dev_priv->ring; |
1941 | int i; | 2013 | int i; |
1942 | u32 last_head = GET_RING_HEAD( dev_priv ); | 2014 | u32 last_head = GET_RING_HEAD(dev_priv); |
1943 | 2015 | ||
1944 | for ( i = 0 ; i < dev_priv->usec_timeout ; i++ ) { | 2016 | for (i = 0; i < dev_priv->usec_timeout; i++) { |
1945 | u32 head = GET_RING_HEAD( dev_priv ); | 2017 | u32 head = GET_RING_HEAD(dev_priv); |
1946 | 2018 | ||
1947 | ring->space = (head - ring->tail) * sizeof(u32); | 2019 | ring->space = (head - ring->tail) * sizeof(u32); |
1948 | if ( ring->space <= 0 ) | 2020 | if (ring->space <= 0) |
1949 | ring->space += ring->size; | 2021 | ring->space += ring->size; |
1950 | if ( ring->space > n ) | 2022 | if (ring->space > n) |
1951 | return 0; | 2023 | return 0; |
1952 | 2024 | ||
1953 | dev_priv->stats.boxes |= RADEON_BOX_WAIT_IDLE; | 2025 | dev_priv->stats.boxes |= RADEON_BOX_WAIT_IDLE; |
1954 | 2026 | ||
1955 | if (head != last_head) | 2027 | if (head != last_head) |
1956 | i = 0; | 2028 | i = 0; |
1957 | last_head = head; | 2029 | last_head = head; |
1958 | 2030 | ||
1959 | DRM_UDELAY( 1 ); | 2031 | DRM_UDELAY(1); |
1960 | } | 2032 | } |
1961 | 2033 | ||
1962 | /* FIXME: This return value is ignored in the BEGIN_RING macro! */ | 2034 | /* FIXME: This return value is ignored in the BEGIN_RING macro! */ |
1963 | #if RADEON_FIFO_DEBUG | 2035 | #if RADEON_FIFO_DEBUG |
1964 | radeon_status( dev_priv ); | 2036 | radeon_status(dev_priv); |
1965 | DRM_ERROR( "failed!\n" ); | 2037 | DRM_ERROR("failed!\n"); |
1966 | #endif | 2038 | #endif |
1967 | return DRM_ERR(EBUSY); | 2039 | return DRM_ERR(EBUSY); |
1968 | } | 2040 | } |
1969 | 2041 | ||
1970 | static int radeon_cp_get_buffers( DRMFILE filp, drm_device_t *dev, drm_dma_t *d ) | 2042 | static int radeon_cp_get_buffers(DRMFILE filp, drm_device_t * dev, |
2043 | drm_dma_t * d) | ||
1971 | { | 2044 | { |
1972 | int i; | 2045 | int i; |
1973 | drm_buf_t *buf; | 2046 | drm_buf_t *buf; |
1974 | 2047 | ||
1975 | for ( i = d->granted_count ; i < d->request_count ; i++ ) { | 2048 | for (i = d->granted_count; i < d->request_count; i++) { |
1976 | buf = radeon_freelist_get( dev ); | 2049 | buf = radeon_freelist_get(dev); |
1977 | if ( !buf ) return DRM_ERR(EBUSY); /* NOTE: broken client */ | 2050 | if (!buf) |
2051 | return DRM_ERR(EBUSY); /* NOTE: broken client */ | ||
1978 | 2052 | ||
1979 | buf->filp = filp; | 2053 | buf->filp = filp; |
1980 | 2054 | ||
1981 | if ( DRM_COPY_TO_USER( &d->request_indices[i], &buf->idx, | 2055 | if (DRM_COPY_TO_USER(&d->request_indices[i], &buf->idx, |
1982 | sizeof(buf->idx) ) ) | 2056 | sizeof(buf->idx))) |
1983 | return DRM_ERR(EFAULT); | 2057 | return DRM_ERR(EFAULT); |
1984 | if ( DRM_COPY_TO_USER( &d->request_sizes[i], &buf->total, | 2058 | if (DRM_COPY_TO_USER(&d->request_sizes[i], &buf->total, |
1985 | sizeof(buf->total) ) ) | 2059 | sizeof(buf->total))) |
1986 | return DRM_ERR(EFAULT); | 2060 | return DRM_ERR(EFAULT); |
1987 | 2061 | ||
1988 | d->granted_count++; | 2062 | d->granted_count++; |
@@ -1990,7 +2064,7 @@ static int radeon_cp_get_buffers( DRMFILE filp, drm_device_t *dev, drm_dma_t *d | |||
1990 | return 0; | 2064 | return 0; |
1991 | } | 2065 | } |
1992 | 2066 | ||
1993 | int radeon_cp_buffers( DRM_IOCTL_ARGS ) | 2067 | int radeon_cp_buffers(DRM_IOCTL_ARGS) |
1994 | { | 2068 | { |
1995 | DRM_DEVICE; | 2069 | DRM_DEVICE; |
1996 | drm_device_dma_t *dma = dev->dma; | 2070 | drm_device_dma_t *dma = dev->dma; |
@@ -1998,33 +2072,33 @@ int radeon_cp_buffers( DRM_IOCTL_ARGS ) | |||
1998 | drm_dma_t __user *argp = (void __user *)data; | 2072 | drm_dma_t __user *argp = (void __user *)data; |
1999 | drm_dma_t d; | 2073 | drm_dma_t d; |
2000 | 2074 | ||
2001 | LOCK_TEST_WITH_RETURN( dev, filp ); | 2075 | LOCK_TEST_WITH_RETURN(dev, filp); |
2002 | 2076 | ||
2003 | DRM_COPY_FROM_USER_IOCTL( d, argp, sizeof(d) ); | 2077 | DRM_COPY_FROM_USER_IOCTL(d, argp, sizeof(d)); |
2004 | 2078 | ||
2005 | /* Please don't send us buffers. | 2079 | /* Please don't send us buffers. |
2006 | */ | 2080 | */ |
2007 | if ( d.send_count != 0 ) { | 2081 | if (d.send_count != 0) { |
2008 | DRM_ERROR( "Process %d trying to send %d buffers via drmDMA\n", | 2082 | DRM_ERROR("Process %d trying to send %d buffers via drmDMA\n", |
2009 | DRM_CURRENTPID, d.send_count ); | 2083 | DRM_CURRENTPID, d.send_count); |
2010 | return DRM_ERR(EINVAL); | 2084 | return DRM_ERR(EINVAL); |
2011 | } | 2085 | } |
2012 | 2086 | ||
2013 | /* We'll send you buffers. | 2087 | /* We'll send you buffers. |
2014 | */ | 2088 | */ |
2015 | if ( d.request_count < 0 || d.request_count > dma->buf_count ) { | 2089 | if (d.request_count < 0 || d.request_count > dma->buf_count) { |
2016 | DRM_ERROR( "Process %d trying to get %d buffers (of %d max)\n", | 2090 | DRM_ERROR("Process %d trying to get %d buffers (of %d max)\n", |
2017 | DRM_CURRENTPID, d.request_count, dma->buf_count ); | 2091 | DRM_CURRENTPID, d.request_count, dma->buf_count); |
2018 | return DRM_ERR(EINVAL); | 2092 | return DRM_ERR(EINVAL); |
2019 | } | 2093 | } |
2020 | 2094 | ||
2021 | d.granted_count = 0; | 2095 | d.granted_count = 0; |
2022 | 2096 | ||
2023 | if ( d.request_count ) { | 2097 | if (d.request_count) { |
2024 | ret = radeon_cp_get_buffers( filp, dev, &d ); | 2098 | ret = radeon_cp_get_buffers(filp, dev, &d); |
2025 | } | 2099 | } |
2026 | 2100 | ||
2027 | DRM_COPY_TO_USER_IOCTL( argp, d, sizeof(d) ); | 2101 | DRM_COPY_TO_USER_IOCTL(argp, d, sizeof(d)); |
2028 | 2102 | ||
2029 | return ret; | 2103 | return ret; |
2030 | } | 2104 | } |
@@ -2051,13 +2125,16 @@ int radeon_driver_preinit(struct drm_device *dev, unsigned long flags) | |||
2051 | dev_priv->flags |= CHIP_HAS_HIERZ; | 2125 | dev_priv->flags |= CHIP_HAS_HIERZ; |
2052 | break; | 2126 | break; |
2053 | default: | 2127 | default: |
2054 | /* all other chips have no hierarchical z buffer */ | 2128 | /* all other chips have no hierarchical z buffer */ |
2055 | break; | 2129 | break; |
2056 | } | 2130 | } |
2057 | 2131 | ||
2058 | if (drm_device_is_agp(dev)) | 2132 | if (drm_device_is_agp(dev)) |
2059 | dev_priv->flags |= CHIP_IS_AGP; | 2133 | dev_priv->flags |= CHIP_IS_AGP; |
2060 | 2134 | ||
2135 | if (drm_device_is_pcie(dev)) | ||
2136 | dev_priv->flags |= CHIP_IS_PCIE; | ||
2137 | |||
2061 | DRM_DEBUG("%s card detected\n", | 2138 | DRM_DEBUG("%s card detected\n", |
2062 | ((dev_priv->flags & CHIP_IS_AGP) ? "AGP" : "PCI")); | 2139 | ((dev_priv->flags & CHIP_IS_AGP) ? "AGP" : "PCI")); |
2063 | return ret; | 2140 | return ret; |