Rev 3192 | Rev 5078 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 3192 | Rev 3764 | ||
---|---|---|---|
Line 36... | Line 36... | ||
36 | #define SI_PFP_UCODE_SIZE 2144 |
36 | #define SI_PFP_UCODE_SIZE 2144 |
37 | #define SI_PM4_UCODE_SIZE 2144 |
37 | #define SI_PM4_UCODE_SIZE 2144 |
38 | #define SI_CE_UCODE_SIZE 2144 |
38 | #define SI_CE_UCODE_SIZE 2144 |
39 | #define SI_RLC_UCODE_SIZE 2048 |
39 | #define SI_RLC_UCODE_SIZE 2048 |
40 | #define SI_MC_UCODE_SIZE 7769 |
40 | #define SI_MC_UCODE_SIZE 7769 |
- | 41 | #define OLAND_MC_UCODE_SIZE 7863 |
|
Line 41... | Line 42... | ||
41 | 42 | ||
42 | MODULE_FIRMWARE("radeon/TAHITI_pfp.bin"); |
43 | MODULE_FIRMWARE("radeon/TAHITI_pfp.bin"); |
43 | MODULE_FIRMWARE("radeon/TAHITI_me.bin"); |
44 | MODULE_FIRMWARE("radeon/TAHITI_me.bin"); |
44 | MODULE_FIRMWARE("radeon/TAHITI_ce.bin"); |
45 | MODULE_FIRMWARE("radeon/TAHITI_ce.bin"); |
Line 52... | Line 53... | ||
52 | MODULE_FIRMWARE("radeon/VERDE_pfp.bin"); |
53 | MODULE_FIRMWARE("radeon/VERDE_pfp.bin"); |
53 | MODULE_FIRMWARE("radeon/VERDE_me.bin"); |
54 | MODULE_FIRMWARE("radeon/VERDE_me.bin"); |
54 | MODULE_FIRMWARE("radeon/VERDE_ce.bin"); |
55 | MODULE_FIRMWARE("radeon/VERDE_ce.bin"); |
55 | MODULE_FIRMWARE("radeon/VERDE_mc.bin"); |
56 | MODULE_FIRMWARE("radeon/VERDE_mc.bin"); |
56 | MODULE_FIRMWARE("radeon/VERDE_rlc.bin"); |
57 | MODULE_FIRMWARE("radeon/VERDE_rlc.bin"); |
- | 58 | MODULE_FIRMWARE("radeon/OLAND_pfp.bin"); |
|
- | 59 | MODULE_FIRMWARE("radeon/OLAND_me.bin"); |
|
- | 60 | MODULE_FIRMWARE("radeon/OLAND_ce.bin"); |
|
- | 61 | MODULE_FIRMWARE("radeon/OLAND_mc.bin"); |
|
- | 62 | MODULE_FIRMWARE("radeon/OLAND_rlc.bin"); |
|
- | 63 | MODULE_FIRMWARE("radeon/HAINAN_pfp.bin"); |
|
- | 64 | MODULE_FIRMWARE("radeon/HAINAN_me.bin"); |
|
- | 65 | MODULE_FIRMWARE("radeon/HAINAN_ce.bin"); |
|
- | 66 | MODULE_FIRMWARE("radeon/HAINAN_mc.bin"); |
|
- | 67 | MODULE_FIRMWARE("radeon/HAINAN_rlc.bin"); |
|
Line 57... | Line 68... | ||
57 | 68 | ||
58 | extern int r600_ih_ring_alloc(struct radeon_device *rdev); |
69 | extern int r600_ih_ring_alloc(struct radeon_device *rdev); |
59 | extern void r600_ih_ring_fini(struct radeon_device *rdev); |
70 | extern void r600_ih_ring_fini(struct radeon_device *rdev); |
60 | extern void evergreen_fix_pci_max_read_req_size(struct radeon_device *rdev); |
71 | extern void evergreen_fix_pci_max_read_req_size(struct radeon_device *rdev); |
61 | extern void evergreen_mc_stop(struct radeon_device *rdev, struct evergreen_mc_save *save); |
72 | extern void evergreen_mc_stop(struct radeon_device *rdev, struct evergreen_mc_save *save); |
62 | extern void evergreen_mc_resume(struct radeon_device *rdev, struct evergreen_mc_save *save); |
73 | extern void evergreen_mc_resume(struct radeon_device *rdev, struct evergreen_mc_save *save); |
- | 74 | extern u32 evergreen_get_number_of_dram_channels(struct radeon_device *rdev); |
|
- | 75 | extern void evergreen_print_gpu_status_regs(struct radeon_device *rdev); |
|
- | 76 | extern bool evergreen_is_display_hung(struct radeon_device *rdev); |
|
- | 77 | ||
- | 78 | static const u32 tahiti_golden_rlc_registers[] = |
|
- | 79 | { |
|
- | 80 | 0xc424, 0xffffffff, 0x00601005, |
|
- | 81 | 0xc47c, 0xffffffff, 0x10104040, |
|
- | 82 | 0xc488, 0xffffffff, 0x0100000a, |
|
- | 83 | 0xc314, 0xffffffff, 0x00000800, |
|
- | 84 | 0xc30c, 0xffffffff, 0x800000f4, |
|
- | 85 | 0xf4a8, 0xffffffff, 0x00000000 |
|
- | 86 | }; |
|
- | 87 | ||
- | 88 | static const u32 tahiti_golden_registers[] = |
|
- | 89 | { |
|
- | 90 | 0x9a10, 0x00010000, 0x00018208, |
|
- | 91 | 0x9830, 0xffffffff, 0x00000000, |
|
- | 92 | 0x9834, 0xf00fffff, 0x00000400, |
|
- | 93 | 0x9838, 0x0002021c, 0x00020200, |
|
- | 94 | 0xc78, 0x00000080, 0x00000000, |
|
- | 95 | 0xd030, 0x000300c0, 0x00800040, |
|
- | 96 | 0xd830, 0x000300c0, 0x00800040, |
|
- | 97 | 0x5bb0, 0x000000f0, 0x00000070, |
|
- | 98 | 0x5bc0, 0x00200000, 0x50100000, |
|
- | 99 | 0x7030, 0x31000311, 0x00000011, |
|
- | 100 | 0x277c, 0x00000003, 0x000007ff, |
|
- | 101 | 0x240c, 0x000007ff, 0x00000000, |
|
- | 102 | 0x8a14, 0xf000001f, 0x00000007, |
|
- | 103 | 0x8b24, 0xffffffff, 0x00ffffff, |
|
- | 104 | 0x8b10, 0x0000ff0f, 0x00000000, |
|
- | 105 | 0x28a4c, 0x07ffffff, 0x4e000000, |
|
- | 106 | 0x28350, 0x3f3f3fff, 0x2a00126a, |
|
- | 107 | 0x30, 0x000000ff, 0x0040, |
|
- | 108 | 0x34, 0x00000040, 0x00004040, |
|
- | 109 | 0x9100, 0x07ffffff, 0x03000000, |
|
- | 110 | 0x8e88, 0x01ff1f3f, 0x00000000, |
|
- | 111 | 0x8e84, 0x01ff1f3f, 0x00000000, |
|
- | 112 | 0x9060, 0x0000007f, 0x00000020, |
|
- | 113 | 0x9508, 0x00010000, 0x00010000, |
|
- | 114 | 0xac14, 0x00000200, 0x000002fb, |
|
- | 115 | 0xac10, 0xffffffff, 0x0000543b, |
|
- | 116 | 0xac0c, 0xffffffff, 0xa9210876, |
|
- | 117 | 0x88d0, 0xffffffff, 0x000fff40, |
|
- | 118 | 0x88d4, 0x0000001f, 0x00000010, |
|
- | 119 | 0x1410, 0x20000000, 0x20fffed8, |
|
- | 120 | 0x15c0, 0x000c0fc0, 0x000c0400 |
|
- | 121 | }; |
|
- | 122 | ||
- | 123 | static const u32 tahiti_golden_registers2[] = |
|
- | 124 | { |
|
- | 125 | 0xc64, 0x00000001, 0x00000001 |
|
- | 126 | }; |
|
- | 127 | ||
- | 128 | static const u32 pitcairn_golden_rlc_registers[] = |
|
- | 129 | { |
|
- | 130 | 0xc424, 0xffffffff, 0x00601004, |
|
- | 131 | 0xc47c, 0xffffffff, 0x10102020, |
|
- | 132 | 0xc488, 0xffffffff, 0x01000020, |
|
- | 133 | 0xc314, 0xffffffff, 0x00000800, |
|
- | 134 | 0xc30c, 0xffffffff, 0x800000a4 |
|
- | 135 | }; |
|
- | 136 | ||
- | 137 | static const u32 pitcairn_golden_registers[] = |
|
- | 138 | { |
|
- | 139 | 0x9a10, 0x00010000, 0x00018208, |
|
- | 140 | 0x9830, 0xffffffff, 0x00000000, |
|
- | 141 | 0x9834, 0xf00fffff, 0x00000400, |
|
- | 142 | 0x9838, 0x0002021c, 0x00020200, |
|
- | 143 | 0xc78, 0x00000080, 0x00000000, |
|
- | 144 | 0xd030, 0x000300c0, 0x00800040, |
|
- | 145 | 0xd830, 0x000300c0, 0x00800040, |
|
- | 146 | 0x5bb0, 0x000000f0, 0x00000070, |
|
- | 147 | 0x5bc0, 0x00200000, 0x50100000, |
|
- | 148 | 0x7030, 0x31000311, 0x00000011, |
|
- | 149 | 0x2ae4, 0x00073ffe, 0x000022a2, |
|
- | 150 | 0x240c, 0x000007ff, 0x00000000, |
|
- | 151 | 0x8a14, 0xf000001f, 0x00000007, |
|
- | 152 | 0x8b24, 0xffffffff, 0x00ffffff, |
|
- | 153 | 0x8b10, 0x0000ff0f, 0x00000000, |
|
- | 154 | 0x28a4c, 0x07ffffff, 0x4e000000, |
|
- | 155 | 0x28350, 0x3f3f3fff, 0x2a00126a, |
|
- | 156 | 0x30, 0x000000ff, 0x0040, |
|
- | 157 | 0x34, 0x00000040, 0x00004040, |
|
- | 158 | 0x9100, 0x07ffffff, 0x03000000, |
|
- | 159 | 0x9060, 0x0000007f, 0x00000020, |
|
- | 160 | 0x9508, 0x00010000, 0x00010000, |
|
- | 161 | 0xac14, 0x000003ff, 0x000000f7, |
|
- | 162 | 0xac10, 0xffffffff, 0x00000000, |
|
- | 163 | 0xac0c, 0xffffffff, 0x32761054, |
|
- | 164 | 0x88d4, 0x0000001f, 0x00000010, |
|
- | 165 | 0x15c0, 0x000c0fc0, 0x000c0400 |
|
- | 166 | }; |
|
- | 167 | ||
- | 168 | static const u32 verde_golden_rlc_registers[] = |
|
- | 169 | { |
|
- | 170 | 0xc424, 0xffffffff, 0x033f1005, |
|
- | 171 | 0xc47c, 0xffffffff, 0x10808020, |
|
- | 172 | 0xc488, 0xffffffff, 0x00800008, |
|
- | 173 | 0xc314, 0xffffffff, 0x00001000, |
|
- | 174 | 0xc30c, 0xffffffff, 0x80010014 |
|
- | 175 | }; |
|
- | 176 | ||
- | 177 | static const u32 verde_golden_registers[] = |
|
- | 178 | { |
|
- | 179 | 0x9a10, 0x00010000, 0x00018208, |
|
- | 180 | 0x9830, 0xffffffff, 0x00000000, |
|
- | 181 | 0x9834, 0xf00fffff, 0x00000400, |
|
- | 182 | 0x9838, 0x0002021c, 0x00020200, |
|
- | 183 | 0xc78, 0x00000080, 0x00000000, |
|
- | 184 | 0xd030, 0x000300c0, 0x00800040, |
|
- | 185 | 0xd030, 0x000300c0, 0x00800040, |
|
- | 186 | 0xd830, 0x000300c0, 0x00800040, |
|
- | 187 | 0xd830, 0x000300c0, 0x00800040, |
|
- | 188 | 0x5bb0, 0x000000f0, 0x00000070, |
|
- | 189 | 0x5bc0, 0x00200000, 0x50100000, |
|
- | 190 | 0x7030, 0x31000311, 0x00000011, |
|
- | 191 | 0x2ae4, 0x00073ffe, 0x000022a2, |
|
- | 192 | 0x2ae4, 0x00073ffe, 0x000022a2, |
|
- | 193 | 0x2ae4, 0x00073ffe, 0x000022a2, |
|
- | 194 | 0x240c, 0x000007ff, 0x00000000, |
|
- | 195 | 0x240c, 0x000007ff, 0x00000000, |
|
- | 196 | 0x240c, 0x000007ff, 0x00000000, |
|
- | 197 | 0x8a14, 0xf000001f, 0x00000007, |
|
- | 198 | 0x8a14, 0xf000001f, 0x00000007, |
|
- | 199 | 0x8a14, 0xf000001f, 0x00000007, |
|
- | 200 | 0x8b24, 0xffffffff, 0x00ffffff, |
|
- | 201 | 0x8b10, 0x0000ff0f, 0x00000000, |
|
- | 202 | 0x28a4c, 0x07ffffff, 0x4e000000, |
|
- | 203 | 0x28350, 0x3f3f3fff, 0x0000124a, |
|
- | 204 | 0x28350, 0x3f3f3fff, 0x0000124a, |
|
- | 205 | 0x28350, 0x3f3f3fff, 0x0000124a, |
|
- | 206 | 0x30, 0x000000ff, 0x0040, |
|
- | 207 | 0x34, 0x00000040, 0x00004040, |
|
- | 208 | 0x9100, 0x07ffffff, 0x03000000, |
|
- | 209 | 0x9100, 0x07ffffff, 0x03000000, |
|
- | 210 | 0x8e88, 0x01ff1f3f, 0x00000000, |
|
- | 211 | 0x8e88, 0x01ff1f3f, 0x00000000, |
|
- | 212 | 0x8e88, 0x01ff1f3f, 0x00000000, |
|
- | 213 | 0x8e84, 0x01ff1f3f, 0x00000000, |
|
- | 214 | 0x8e84, 0x01ff1f3f, 0x00000000, |
|
- | 215 | 0x8e84, 0x01ff1f3f, 0x00000000, |
|
- | 216 | 0x9060, 0x0000007f, 0x00000020, |
|
- | 217 | 0x9508, 0x00010000, 0x00010000, |
|
- | 218 | 0xac14, 0x000003ff, 0x00000003, |
|
- | 219 | 0xac14, 0x000003ff, 0x00000003, |
|
- | 220 | 0xac14, 0x000003ff, 0x00000003, |
|
- | 221 | 0xac10, 0xffffffff, 0x00000000, |
|
- | 222 | 0xac10, 0xffffffff, 0x00000000, |
|
- | 223 | 0xac10, 0xffffffff, 0x00000000, |
|
- | 224 | 0xac0c, 0xffffffff, 0x00001032, |
|
- | 225 | 0xac0c, 0xffffffff, 0x00001032, |
|
- | 226 | 0xac0c, 0xffffffff, 0x00001032, |
|
- | 227 | 0x88d4, 0x0000001f, 0x00000010, |
|
- | 228 | 0x88d4, 0x0000001f, 0x00000010, |
|
- | 229 | 0x88d4, 0x0000001f, 0x00000010, |
|
- | 230 | 0x15c0, 0x000c0fc0, 0x000c0400 |
|
- | 231 | }; |
|
- | 232 | ||
- | 233 | static const u32 oland_golden_rlc_registers[] = |
|
- | 234 | { |
|
- | 235 | 0xc424, 0xffffffff, 0x00601005, |
|
- | 236 | 0xc47c, 0xffffffff, 0x10104040, |
|
- | 237 | 0xc488, 0xffffffff, 0x0100000a, |
|
- | 238 | 0xc314, 0xffffffff, 0x00000800, |
|
- | 239 | 0xc30c, 0xffffffff, 0x800000f4 |
|
- | 240 | }; |
|
- | 241 | ||
- | 242 | static const u32 oland_golden_registers[] = |
|
- | 243 | { |
|
- | 244 | 0x9a10, 0x00010000, 0x00018208, |
|
- | 245 | 0x9830, 0xffffffff, 0x00000000, |
|
- | 246 | 0x9834, 0xf00fffff, 0x00000400, |
|
- | 247 | 0x9838, 0x0002021c, 0x00020200, |
|
- | 248 | 0xc78, 0x00000080, 0x00000000, |
|
- | 249 | 0xd030, 0x000300c0, 0x00800040, |
|
- | 250 | 0xd830, 0x000300c0, 0x00800040, |
|
- | 251 | 0x5bb0, 0x000000f0, 0x00000070, |
|
- | 252 | 0x5bc0, 0x00200000, 0x50100000, |
|
- | 253 | 0x7030, 0x31000311, 0x00000011, |
|
- | 254 | 0x2ae4, 0x00073ffe, 0x000022a2, |
|
- | 255 | 0x240c, 0x000007ff, 0x00000000, |
|
- | 256 | 0x8a14, 0xf000001f, 0x00000007, |
|
- | 257 | 0x8b24, 0xffffffff, 0x00ffffff, |
|
- | 258 | 0x8b10, 0x0000ff0f, 0x00000000, |
|
- | 259 | 0x28a4c, 0x07ffffff, 0x4e000000, |
|
- | 260 | 0x28350, 0x3f3f3fff, 0x00000082, |
|
- | 261 | 0x30, 0x000000ff, 0x0040, |
|
- | 262 | 0x34, 0x00000040, 0x00004040, |
|
- | 263 | 0x9100, 0x07ffffff, 0x03000000, |
|
- | 264 | 0x9060, 0x0000007f, 0x00000020, |
|
- | 265 | 0x9508, 0x00010000, 0x00010000, |
|
- | 266 | 0xac14, 0x000003ff, 0x000000f3, |
|
- | 267 | 0xac10, 0xffffffff, 0x00000000, |
|
- | 268 | 0xac0c, 0xffffffff, 0x00003210, |
|
- | 269 | 0x88d4, 0x0000001f, 0x00000010, |
|
- | 270 | 0x15c0, 0x000c0fc0, 0x000c0400 |
|
- | 271 | }; |
|
- | 272 | ||
- | 273 | static const u32 hainan_golden_registers[] = |
|
- | 274 | { |
|
- | 275 | 0x9a10, 0x00010000, 0x00018208, |
|
- | 276 | 0x9830, 0xffffffff, 0x00000000, |
|
- | 277 | 0x9834, 0xf00fffff, 0x00000400, |
|
- | 278 | 0x9838, 0x0002021c, 0x00020200, |
|
- | 279 | 0xd0c0, 0xff000fff, 0x00000100, |
|
- | 280 | 0xd030, 0x000300c0, 0x00800040, |
|
- | 281 | 0xd8c0, 0xff000fff, 0x00000100, |
|
- | 282 | 0xd830, 0x000300c0, 0x00800040, |
|
- | 283 | 0x2ae4, 0x00073ffe, 0x000022a2, |
|
- | 284 | 0x240c, 0x000007ff, 0x00000000, |
|
- | 285 | 0x8a14, 0xf000001f, 0x00000007, |
|
- | 286 | 0x8b24, 0xffffffff, 0x00ffffff, |
|
- | 287 | 0x8b10, 0x0000ff0f, 0x00000000, |
|
- | 288 | 0x28a4c, 0x07ffffff, 0x4e000000, |
|
- | 289 | 0x28350, 0x3f3f3fff, 0x00000000, |
|
- | 290 | 0x30, 0x000000ff, 0x0040, |
|
- | 291 | 0x34, 0x00000040, 0x00004040, |
|
- | 292 | 0x9100, 0x03e00000, 0x03600000, |
|
- | 293 | 0x9060, 0x0000007f, 0x00000020, |
|
- | 294 | 0x9508, 0x00010000, 0x00010000, |
|
- | 295 | 0xac14, 0x000003ff, 0x000000f1, |
|
- | 296 | 0xac10, 0xffffffff, 0x00000000, |
|
- | 297 | 0xac0c, 0xffffffff, 0x00003210, |
|
- | 298 | 0x88d4, 0x0000001f, 0x00000010, |
|
- | 299 | 0x15c0, 0x000c0fc0, 0x000c0400 |
|
- | 300 | }; |
|
- | 301 | ||
- | 302 | static const u32 hainan_golden_registers2[] = |
|
- | 303 | { |
|
- | 304 | 0x98f8, 0xffffffff, 0x02010001 |
|
- | 305 | }; |
|
- | 306 | ||
- | 307 | static const u32 tahiti_mgcg_cgcg_init[] = |
|
- | 308 | { |
|
- | 309 | 0xc400, 0xffffffff, 0xfffffffc, |
|
- | 310 | 0x802c, 0xffffffff, 0xe0000000, |
|
- | 311 | 0x9a60, 0xffffffff, 0x00000100, |
|
- | 312 | 0x92a4, 0xffffffff, 0x00000100, |
|
- | 313 | 0xc164, 0xffffffff, 0x00000100, |
|
- | 314 | 0x9774, 0xffffffff, 0x00000100, |
|
- | 315 | 0x8984, 0xffffffff, 0x06000100, |
|
- | 316 | 0x8a18, 0xffffffff, 0x00000100, |
|
- | 317 | 0x92a0, 0xffffffff, 0x00000100, |
|
- | 318 | 0xc380, 0xffffffff, 0x00000100, |
|
- | 319 | 0x8b28, 0xffffffff, 0x00000100, |
|
- | 320 | 0x9144, 0xffffffff, 0x00000100, |
|
- | 321 | 0x8d88, 0xffffffff, 0x00000100, |
|
- | 322 | 0x8d8c, 0xffffffff, 0x00000100, |
|
- | 323 | 0x9030, 0xffffffff, 0x00000100, |
|
- | 324 | 0x9034, 0xffffffff, 0x00000100, |
|
- | 325 | 0x9038, 0xffffffff, 0x00000100, |
|
- | 326 | 0x903c, 0xffffffff, 0x00000100, |
|
- | 327 | 0xad80, 0xffffffff, 0x00000100, |
|
- | 328 | 0xac54, 0xffffffff, 0x00000100, |
|
- | 329 | 0x897c, 0xffffffff, 0x06000100, |
|
- | 330 | 0x9868, 0xffffffff, 0x00000100, |
|
- | 331 | 0x9510, 0xffffffff, 0x00000100, |
|
- | 332 | 0xaf04, 0xffffffff, 0x00000100, |
|
- | 333 | 0xae04, 0xffffffff, 0x00000100, |
|
- | 334 | 0x949c, 0xffffffff, 0x00000100, |
|
- | 335 | 0x802c, 0xffffffff, 0xe0000000, |
|
- | 336 | 0x9160, 0xffffffff, 0x00010000, |
|
- | 337 | 0x9164, 0xffffffff, 0x00030002, |
|
- | 338 | 0x9168, 0xffffffff, 0x00040007, |
|
- | 339 | 0x916c, 0xffffffff, 0x00060005, |
|
- | 340 | 0x9170, 0xffffffff, 0x00090008, |
|
- | 341 | 0x9174, 0xffffffff, 0x00020001, |
|
- | 342 | 0x9178, 0xffffffff, 0x00040003, |
|
- | 343 | 0x917c, 0xffffffff, 0x00000007, |
|
- | 344 | 0x9180, 0xffffffff, 0x00060005, |
|
- | 345 | 0x9184, 0xffffffff, 0x00090008, |
|
- | 346 | 0x9188, 0xffffffff, 0x00030002, |
|
- | 347 | 0x918c, 0xffffffff, 0x00050004, |
|
- | 348 | 0x9190, 0xffffffff, 0x00000008, |
|
- | 349 | 0x9194, 0xffffffff, 0x00070006, |
|
- | 350 | 0x9198, 0xffffffff, 0x000a0009, |
|
- | 351 | 0x919c, 0xffffffff, 0x00040003, |
|
- | 352 | 0x91a0, 0xffffffff, 0x00060005, |
|
- | 353 | 0x91a4, 0xffffffff, 0x00000009, |
|
- | 354 | 0x91a8, 0xffffffff, 0x00080007, |
|
- | 355 | 0x91ac, 0xffffffff, 0x000b000a, |
|
- | 356 | 0x91b0, 0xffffffff, 0x00050004, |
|
- | 357 | 0x91b4, 0xffffffff, 0x00070006, |
|
- | 358 | 0x91b8, 0xffffffff, 0x0008000b, |
|
- | 359 | 0x91bc, 0xffffffff, 0x000a0009, |
|
- | 360 | 0x91c0, 0xffffffff, 0x000d000c, |
|
- | 361 | 0x91c4, 0xffffffff, 0x00060005, |
|
- | 362 | 0x91c8, 0xffffffff, 0x00080007, |
|
- | 363 | 0x91cc, 0xffffffff, 0x0000000b, |
|
- | 364 | 0x91d0, 0xffffffff, 0x000a0009, |
|
- | 365 | 0x91d4, 0xffffffff, 0x000d000c, |
|
- | 366 | 0x91d8, 0xffffffff, 0x00070006, |
|
- | 367 | 0x91dc, 0xffffffff, 0x00090008, |
|
- | 368 | 0x91e0, 0xffffffff, 0x0000000c, |
|
- | 369 | 0x91e4, 0xffffffff, 0x000b000a, |
|
- | 370 | 0x91e8, 0xffffffff, 0x000e000d, |
|
- | 371 | 0x91ec, 0xffffffff, 0x00080007, |
|
- | 372 | 0x91f0, 0xffffffff, 0x000a0009, |
|
- | 373 | 0x91f4, 0xffffffff, 0x0000000d, |
|
- | 374 | 0x91f8, 0xffffffff, 0x000c000b, |
|
- | 375 | 0x91fc, 0xffffffff, 0x000f000e, |
|
- | 376 | 0x9200, 0xffffffff, 0x00090008, |
|
- | 377 | 0x9204, 0xffffffff, 0x000b000a, |
|
- | 378 | 0x9208, 0xffffffff, 0x000c000f, |
|
- | 379 | 0x920c, 0xffffffff, 0x000e000d, |
|
- | 380 | 0x9210, 0xffffffff, 0x00110010, |
|
- | 381 | 0x9214, 0xffffffff, 0x000a0009, |
|
- | 382 | 0x9218, 0xffffffff, 0x000c000b, |
|
- | 383 | 0x921c, 0xffffffff, 0x0000000f, |
|
- | 384 | 0x9220, 0xffffffff, 0x000e000d, |
|
- | 385 | 0x9224, 0xffffffff, 0x00110010, |
|
- | 386 | 0x9228, 0xffffffff, 0x000b000a, |
|
- | 387 | 0x922c, 0xffffffff, 0x000d000c, |
|
- | 388 | 0x9230, 0xffffffff, 0x00000010, |
|
- | 389 | 0x9234, 0xffffffff, 0x000f000e, |
|
- | 390 | 0x9238, 0xffffffff, 0x00120011, |
|
- | 391 | 0x923c, 0xffffffff, 0x000c000b, |
|
- | 392 | 0x9240, 0xffffffff, 0x000e000d, |
|
- | 393 | 0x9244, 0xffffffff, 0x00000011, |
|
- | 394 | 0x9248, 0xffffffff, 0x0010000f, |
|
- | 395 | 0x924c, 0xffffffff, 0x00130012, |
|
- | 396 | 0x9250, 0xffffffff, 0x000d000c, |
|
- | 397 | 0x9254, 0xffffffff, 0x000f000e, |
|
- | 398 | 0x9258, 0xffffffff, 0x00100013, |
|
- | 399 | 0x925c, 0xffffffff, 0x00120011, |
|
- | 400 | 0x9260, 0xffffffff, 0x00150014, |
|
- | 401 | 0x9264, 0xffffffff, 0x000e000d, |
|
- | 402 | 0x9268, 0xffffffff, 0x0010000f, |
|
- | 403 | 0x926c, 0xffffffff, 0x00000013, |
|
- | 404 | 0x9270, 0xffffffff, 0x00120011, |
|
- | 405 | 0x9274, 0xffffffff, 0x00150014, |
|
- | 406 | 0x9278, 0xffffffff, 0x000f000e, |
|
- | 407 | 0x927c, 0xffffffff, 0x00110010, |
|
- | 408 | 0x9280, 0xffffffff, 0x00000014, |
|
- | 409 | 0x9284, 0xffffffff, 0x00130012, |
|
- | 410 | 0x9288, 0xffffffff, 0x00160015, |
|
- | 411 | 0x928c, 0xffffffff, 0x0010000f, |
|
- | 412 | 0x9290, 0xffffffff, 0x00120011, |
|
- | 413 | 0x9294, 0xffffffff, 0x00000015, |
|
- | 414 | 0x9298, 0xffffffff, 0x00140013, |
|
- | 415 | 0x929c, 0xffffffff, 0x00170016, |
|
- | 416 | 0x9150, 0xffffffff, 0x96940200, |
|
- | 417 | 0x8708, 0xffffffff, 0x00900100, |
|
- | 418 | 0xc478, 0xffffffff, 0x00000080, |
|
- | 419 | 0xc404, 0xffffffff, 0x0020003f, |
|
- | 420 | 0x30, 0xffffffff, 0x0000001c, |
|
- | 421 | 0x34, 0x000f0000, 0x000f0000, |
|
- | 422 | 0x160c, 0xffffffff, 0x00000100, |
|
- | 423 | 0x1024, 0xffffffff, 0x00000100, |
|
- | 424 | 0x102c, 0x00000101, 0x00000000, |
|
- | 425 | 0x20a8, 0xffffffff, 0x00000104, |
|
- | 426 | 0x264c, 0x000c0000, 0x000c0000, |
|
- | 427 | 0x2648, 0x000c0000, 0x000c0000, |
|
- | 428 | 0x55e4, 0xff000fff, 0x00000100, |
|
- | 429 | 0x55e8, 0x00000001, 0x00000001, |
|
- | 430 | 0x2f50, 0x00000001, 0x00000001, |
|
- | 431 | 0x30cc, 0xc0000fff, 0x00000104, |
|
- | 432 | 0xc1e4, 0x00000001, 0x00000001, |
|
- | 433 | 0xd0c0, 0xfffffff0, 0x00000100, |
|
- | 434 | 0xd8c0, 0xfffffff0, 0x00000100 |
|
- | 435 | }; |
|
- | 436 | ||
- | 437 | static const u32 pitcairn_mgcg_cgcg_init[] = |
|
- | 438 | { |
|
- | 439 | 0xc400, 0xffffffff, 0xfffffffc, |
|
- | 440 | 0x802c, 0xffffffff, 0xe0000000, |
|
- | 441 | 0x9a60, 0xffffffff, 0x00000100, |
|
- | 442 | 0x92a4, 0xffffffff, 0x00000100, |
|
- | 443 | 0xc164, 0xffffffff, 0x00000100, |
|
- | 444 | 0x9774, 0xffffffff, 0x00000100, |
|
- | 445 | 0x8984, 0xffffffff, 0x06000100, |
|
- | 446 | 0x8a18, 0xffffffff, 0x00000100, |
|
- | 447 | 0x92a0, 0xffffffff, 0x00000100, |
|
- | 448 | 0xc380, 0xffffffff, 0x00000100, |
|
- | 449 | 0x8b28, 0xffffffff, 0x00000100, |
|
- | 450 | 0x9144, 0xffffffff, 0x00000100, |
|
- | 451 | 0x8d88, 0xffffffff, 0x00000100, |
|
- | 452 | 0x8d8c, 0xffffffff, 0x00000100, |
|
- | 453 | 0x9030, 0xffffffff, 0x00000100, |
|
- | 454 | 0x9034, 0xffffffff, 0x00000100, |
|
- | 455 | 0x9038, 0xffffffff, 0x00000100, |
|
- | 456 | 0x903c, 0xffffffff, 0x00000100, |
|
- | 457 | 0xad80, 0xffffffff, 0x00000100, |
|
- | 458 | 0xac54, 0xffffffff, 0x00000100, |
|
- | 459 | 0x897c, 0xffffffff, 0x06000100, |
|
- | 460 | 0x9868, 0xffffffff, 0x00000100, |
|
- | 461 | 0x9510, 0xffffffff, 0x00000100, |
|
- | 462 | 0xaf04, 0xffffffff, 0x00000100, |
|
- | 463 | 0xae04, 0xffffffff, 0x00000100, |
|
- | 464 | 0x949c, 0xffffffff, 0x00000100, |
|
- | 465 | 0x802c, 0xffffffff, 0xe0000000, |
|
- | 466 | 0x9160, 0xffffffff, 0x00010000, |
|
- | 467 | 0x9164, 0xffffffff, 0x00030002, |
|
- | 468 | 0x9168, 0xffffffff, 0x00040007, |
|
- | 469 | 0x916c, 0xffffffff, 0x00060005, |
|
- | 470 | 0x9170, 0xffffffff, 0x00090008, |
|
- | 471 | 0x9174, 0xffffffff, 0x00020001, |
|
- | 472 | 0x9178, 0xffffffff, 0x00040003, |
|
- | 473 | 0x917c, 0xffffffff, 0x00000007, |
|
- | 474 | 0x9180, 0xffffffff, 0x00060005, |
|
- | 475 | 0x9184, 0xffffffff, 0x00090008, |
|
- | 476 | 0x9188, 0xffffffff, 0x00030002, |
|
- | 477 | 0x918c, 0xffffffff, 0x00050004, |
|
- | 478 | 0x9190, 0xffffffff, 0x00000008, |
|
- | 479 | 0x9194, 0xffffffff, 0x00070006, |
|
- | 480 | 0x9198, 0xffffffff, 0x000a0009, |
|
- | 481 | 0x919c, 0xffffffff, 0x00040003, |
|
- | 482 | 0x91a0, 0xffffffff, 0x00060005, |
|
- | 483 | 0x91a4, 0xffffffff, 0x00000009, |
|
- | 484 | 0x91a8, 0xffffffff, 0x00080007, |
|
- | 485 | 0x91ac, 0xffffffff, 0x000b000a, |
|
- | 486 | 0x91b0, 0xffffffff, 0x00050004, |
|
- | 487 | 0x91b4, 0xffffffff, 0x00070006, |
|
- | 488 | 0x91b8, 0xffffffff, 0x0008000b, |
|
- | 489 | 0x91bc, 0xffffffff, 0x000a0009, |
|
- | 490 | 0x91c0, 0xffffffff, 0x000d000c, |
|
- | 491 | 0x9200, 0xffffffff, 0x00090008, |
|
- | 492 | 0x9204, 0xffffffff, 0x000b000a, |
|
- | 493 | 0x9208, 0xffffffff, 0x000c000f, |
|
- | 494 | 0x920c, 0xffffffff, 0x000e000d, |
|
- | 495 | 0x9210, 0xffffffff, 0x00110010, |
|
- | 496 | 0x9214, 0xffffffff, 0x000a0009, |
|
- | 497 | 0x9218, 0xffffffff, 0x000c000b, |
|
- | 498 | 0x921c, 0xffffffff, 0x0000000f, |
|
- | 499 | 0x9220, 0xffffffff, 0x000e000d, |
|
- | 500 | 0x9224, 0xffffffff, 0x00110010, |
|
- | 501 | 0x9228, 0xffffffff, 0x000b000a, |
|
- | 502 | 0x922c, 0xffffffff, 0x000d000c, |
|
- | 503 | 0x9230, 0xffffffff, 0x00000010, |
|
- | 504 | 0x9234, 0xffffffff, 0x000f000e, |
|
- | 505 | 0x9238, 0xffffffff, 0x00120011, |
|
- | 506 | 0x923c, 0xffffffff, 0x000c000b, |
|
- | 507 | 0x9240, 0xffffffff, 0x000e000d, |
|
- | 508 | 0x9244, 0xffffffff, 0x00000011, |
|
- | 509 | 0x9248, 0xffffffff, 0x0010000f, |
|
- | 510 | 0x924c, 0xffffffff, 0x00130012, |
|
- | 511 | 0x9250, 0xffffffff, 0x000d000c, |
|
- | 512 | 0x9254, 0xffffffff, 0x000f000e, |
|
- | 513 | 0x9258, 0xffffffff, 0x00100013, |
|
- | 514 | 0x925c, 0xffffffff, 0x00120011, |
|
- | 515 | 0x9260, 0xffffffff, 0x00150014, |
|
- | 516 | 0x9150, 0xffffffff, 0x96940200, |
|
- | 517 | 0x8708, 0xffffffff, 0x00900100, |
|
- | 518 | 0xc478, 0xffffffff, 0x00000080, |
|
- | 519 | 0xc404, 0xffffffff, 0x0020003f, |
|
- | 520 | 0x30, 0xffffffff, 0x0000001c, |
|
- | 521 | 0x34, 0x000f0000, 0x000f0000, |
|
- | 522 | 0x160c, 0xffffffff, 0x00000100, |
|
- | 523 | 0x1024, 0xffffffff, 0x00000100, |
|
- | 524 | 0x102c, 0x00000101, 0x00000000, |
|
- | 525 | 0x20a8, 0xffffffff, 0x00000104, |
|
- | 526 | 0x55e4, 0xff000fff, 0x00000100, |
|
- | 527 | 0x55e8, 0x00000001, 0x00000001, |
|
- | 528 | 0x2f50, 0x00000001, 0x00000001, |
|
- | 529 | 0x30cc, 0xc0000fff, 0x00000104, |
|
- | 530 | 0xc1e4, 0x00000001, 0x00000001, |
|
- | 531 | 0xd0c0, 0xfffffff0, 0x00000100, |
|
- | 532 | 0xd8c0, 0xfffffff0, 0x00000100 |
|
- | 533 | }; |
|
- | 534 | ||
- | 535 | static const u32 verde_mgcg_cgcg_init[] = |
|
- | 536 | { |
|
- | 537 | 0xc400, 0xffffffff, 0xfffffffc, |
|
- | 538 | 0x802c, 0xffffffff, 0xe0000000, |
|
- | 539 | 0x9a60, 0xffffffff, 0x00000100, |
|
- | 540 | 0x92a4, 0xffffffff, 0x00000100, |
|
- | 541 | 0xc164, 0xffffffff, 0x00000100, |
|
- | 542 | 0x9774, 0xffffffff, 0x00000100, |
|
- | 543 | 0x8984, 0xffffffff, 0x06000100, |
|
- | 544 | 0x8a18, 0xffffffff, 0x00000100, |
|
- | 545 | 0x92a0, 0xffffffff, 0x00000100, |
|
- | 546 | 0xc380, 0xffffffff, 0x00000100, |
|
- | 547 | 0x8b28, 0xffffffff, 0x00000100, |
|
- | 548 | 0x9144, 0xffffffff, 0x00000100, |
|
- | 549 | 0x8d88, 0xffffffff, 0x00000100, |
|
- | 550 | 0x8d8c, 0xffffffff, 0x00000100, |
|
- | 551 | 0x9030, 0xffffffff, 0x00000100, |
|
- | 552 | 0x9034, 0xffffffff, 0x00000100, |
|
- | 553 | 0x9038, 0xffffffff, 0x00000100, |
|
- | 554 | 0x903c, 0xffffffff, 0x00000100, |
|
- | 555 | 0xad80, 0xffffffff, 0x00000100, |
|
- | 556 | 0xac54, 0xffffffff, 0x00000100, |
|
- | 557 | 0x897c, 0xffffffff, 0x06000100, |
|
- | 558 | 0x9868, 0xffffffff, 0x00000100, |
|
- | 559 | 0x9510, 0xffffffff, 0x00000100, |
|
- | 560 | 0xaf04, 0xffffffff, 0x00000100, |
|
- | 561 | 0xae04, 0xffffffff, 0x00000100, |
|
- | 562 | 0x949c, 0xffffffff, 0x00000100, |
|
- | 563 | 0x802c, 0xffffffff, 0xe0000000, |
|
- | 564 | 0x9160, 0xffffffff, 0x00010000, |
|
- | 565 | 0x9164, 0xffffffff, 0x00030002, |
|
- | 566 | 0x9168, 0xffffffff, 0x00040007, |
|
- | 567 | 0x916c, 0xffffffff, 0x00060005, |
|
- | 568 | 0x9170, 0xffffffff, 0x00090008, |
|
- | 569 | 0x9174, 0xffffffff, 0x00020001, |
|
- | 570 | 0x9178, 0xffffffff, 0x00040003, |
|
- | 571 | 0x917c, 0xffffffff, 0x00000007, |
|
- | 572 | 0x9180, 0xffffffff, 0x00060005, |
|
- | 573 | 0x9184, 0xffffffff, 0x00090008, |
|
- | 574 | 0x9188, 0xffffffff, 0x00030002, |
|
- | 575 | 0x918c, 0xffffffff, 0x00050004, |
|
- | 576 | 0x9190, 0xffffffff, 0x00000008, |
|
- | 577 | 0x9194, 0xffffffff, 0x00070006, |
|
- | 578 | 0x9198, 0xffffffff, 0x000a0009, |
|
- | 579 | 0x919c, 0xffffffff, 0x00040003, |
|
- | 580 | 0x91a0, 0xffffffff, 0x00060005, |
|
- | 581 | 0x91a4, 0xffffffff, 0x00000009, |
|
- | 582 | 0x91a8, 0xffffffff, 0x00080007, |
|
- | 583 | 0x91ac, 0xffffffff, 0x000b000a, |
|
- | 584 | 0x91b0, 0xffffffff, 0x00050004, |
|
- | 585 | 0x91b4, 0xffffffff, 0x00070006, |
|
- | 586 | 0x91b8, 0xffffffff, 0x0008000b, |
|
- | 587 | 0x91bc, 0xffffffff, 0x000a0009, |
|
- | 588 | 0x91c0, 0xffffffff, 0x000d000c, |
|
- | 589 | 0x9200, 0xffffffff, 0x00090008, |
|
- | 590 | 0x9204, 0xffffffff, 0x000b000a, |
|
- | 591 | 0x9208, 0xffffffff, 0x000c000f, |
|
- | 592 | 0x920c, 0xffffffff, 0x000e000d, |
|
- | 593 | 0x9210, 0xffffffff, 0x00110010, |
|
- | 594 | 0x9214, 0xffffffff, 0x000a0009, |
|
- | 595 | 0x9218, 0xffffffff, 0x000c000b, |
|
- | 596 | 0x921c, 0xffffffff, 0x0000000f, |
|
- | 597 | 0x9220, 0xffffffff, 0x000e000d, |
|
- | 598 | 0x9224, 0xffffffff, 0x00110010, |
|
- | 599 | 0x9228, 0xffffffff, 0x000b000a, |
|
- | 600 | 0x922c, 0xffffffff, 0x000d000c, |
|
- | 601 | 0x9230, 0xffffffff, 0x00000010, |
|
- | 602 | 0x9234, 0xffffffff, 0x000f000e, |
|
- | 603 | 0x9238, 0xffffffff, 0x00120011, |
|
- | 604 | 0x923c, 0xffffffff, 0x000c000b, |
|
- | 605 | 0x9240, 0xffffffff, 0x000e000d, |
|
- | 606 | 0x9244, 0xffffffff, 0x00000011, |
|
- | 607 | 0x9248, 0xffffffff, 0x0010000f, |
|
- | 608 | 0x924c, 0xffffffff, 0x00130012, |
|
- | 609 | 0x9250, 0xffffffff, 0x000d000c, |
|
- | 610 | 0x9254, 0xffffffff, 0x000f000e, |
|
- | 611 | 0x9258, 0xffffffff, 0x00100013, |
|
- | 612 | 0x925c, 0xffffffff, 0x00120011, |
|
- | 613 | 0x9260, 0xffffffff, 0x00150014, |
|
- | 614 | 0x9150, 0xffffffff, 0x96940200, |
|
- | 615 | 0x8708, 0xffffffff, 0x00900100, |
|
- | 616 | 0xc478, 0xffffffff, 0x00000080, |
|
- | 617 | 0xc404, 0xffffffff, 0x0020003f, |
|
- | 618 | 0x30, 0xffffffff, 0x0000001c, |
|
- | 619 | 0x34, 0x000f0000, 0x000f0000, |
|
- | 620 | 0x160c, 0xffffffff, 0x00000100, |
|
- | 621 | 0x1024, 0xffffffff, 0x00000100, |
|
- | 622 | 0x102c, 0x00000101, 0x00000000, |
|
- | 623 | 0x20a8, 0xffffffff, 0x00000104, |
|
- | 624 | 0x264c, 0x000c0000, 0x000c0000, |
|
- | 625 | 0x2648, 0x000c0000, 0x000c0000, |
|
- | 626 | 0x55e4, 0xff000fff, 0x00000100, |
|
- | 627 | 0x55e8, 0x00000001, 0x00000001, |
|
- | 628 | 0x2f50, 0x00000001, 0x00000001, |
|
- | 629 | 0x30cc, 0xc0000fff, 0x00000104, |
|
- | 630 | 0xc1e4, 0x00000001, 0x00000001, |
|
- | 631 | 0xd0c0, 0xfffffff0, 0x00000100, |
|
- | 632 | 0xd8c0, 0xfffffff0, 0x00000100 |
|
- | 633 | }; |
|
- | 634 | ||
- | 635 | static const u32 oland_mgcg_cgcg_init[] = |
|
- | 636 | { |
|
- | 637 | 0xc400, 0xffffffff, 0xfffffffc, |
|
- | 638 | 0x802c, 0xffffffff, 0xe0000000, |
|
- | 639 | 0x9a60, 0xffffffff, 0x00000100, |
|
- | 640 | 0x92a4, 0xffffffff, 0x00000100, |
|
- | 641 | 0xc164, 0xffffffff, 0x00000100, |
|
- | 642 | 0x9774, 0xffffffff, 0x00000100, |
|
- | 643 | 0x8984, 0xffffffff, 0x06000100, |
|
- | 644 | 0x8a18, 0xffffffff, 0x00000100, |
|
- | 645 | 0x92a0, 0xffffffff, 0x00000100, |
|
- | 646 | 0xc380, 0xffffffff, 0x00000100, |
|
- | 647 | 0x8b28, 0xffffffff, 0x00000100, |
|
- | 648 | 0x9144, 0xffffffff, 0x00000100, |
|
- | 649 | 0x8d88, 0xffffffff, 0x00000100, |
|
- | 650 | 0x8d8c, 0xffffffff, 0x00000100, |
|
- | 651 | 0x9030, 0xffffffff, 0x00000100, |
|
- | 652 | 0x9034, 0xffffffff, 0x00000100, |
|
- | 653 | 0x9038, 0xffffffff, 0x00000100, |
|
- | 654 | 0x903c, 0xffffffff, 0x00000100, |
|
- | 655 | 0xad80, 0xffffffff, 0x00000100, |
|
- | 656 | 0xac54, 0xffffffff, 0x00000100, |
|
- | 657 | 0x897c, 0xffffffff, 0x06000100, |
|
- | 658 | 0x9868, 0xffffffff, 0x00000100, |
|
- | 659 | 0x9510, 0xffffffff, 0x00000100, |
|
- | 660 | 0xaf04, 0xffffffff, 0x00000100, |
|
- | 661 | 0xae04, 0xffffffff, 0x00000100, |
|
- | 662 | 0x949c, 0xffffffff, 0x00000100, |
|
- | 663 | 0x802c, 0xffffffff, 0xe0000000, |
|
- | 664 | 0x9160, 0xffffffff, 0x00010000, |
|
- | 665 | 0x9164, 0xffffffff, 0x00030002, |
|
- | 666 | 0x9168, 0xffffffff, 0x00040007, |
|
- | 667 | 0x916c, 0xffffffff, 0x00060005, |
|
- | 668 | 0x9170, 0xffffffff, 0x00090008, |
|
- | 669 | 0x9174, 0xffffffff, 0x00020001, |
|
- | 670 | 0x9178, 0xffffffff, 0x00040003, |
|
- | 671 | 0x917c, 0xffffffff, 0x00000007, |
|
- | 672 | 0x9180, 0xffffffff, 0x00060005, |
|
- | 673 | 0x9184, 0xffffffff, 0x00090008, |
|
- | 674 | 0x9188, 0xffffffff, 0x00030002, |
|
- | 675 | 0x918c, 0xffffffff, 0x00050004, |
|
- | 676 | 0x9190, 0xffffffff, 0x00000008, |
|
- | 677 | 0x9194, 0xffffffff, 0x00070006, |
|
- | 678 | 0x9198, 0xffffffff, 0x000a0009, |
|
- | 679 | 0x919c, 0xffffffff, 0x00040003, |
|
- | 680 | 0x91a0, 0xffffffff, 0x00060005, |
|
- | 681 | 0x91a4, 0xffffffff, 0x00000009, |
|
- | 682 | 0x91a8, 0xffffffff, 0x00080007, |
|
- | 683 | 0x91ac, 0xffffffff, 0x000b000a, |
|
- | 684 | 0x91b0, 0xffffffff, 0x00050004, |
|
- | 685 | 0x91b4, 0xffffffff, 0x00070006, |
|
- | 686 | 0x91b8, 0xffffffff, 0x0008000b, |
|
- | 687 | 0x91bc, 0xffffffff, 0x000a0009, |
|
- | 688 | 0x91c0, 0xffffffff, 0x000d000c, |
|
- | 689 | 0x91c4, 0xffffffff, 0x00060005, |
|
- | 690 | 0x91c8, 0xffffffff, 0x00080007, |
|
- | 691 | 0x91cc, 0xffffffff, 0x0000000b, |
|
- | 692 | 0x91d0, 0xffffffff, 0x000a0009, |
|
- | 693 | 0x91d4, 0xffffffff, 0x000d000c, |
|
- | 694 | 0x9150, 0xffffffff, 0x96940200, |
|
- | 695 | 0x8708, 0xffffffff, 0x00900100, |
|
- | 696 | 0xc478, 0xffffffff, 0x00000080, |
|
- | 697 | 0xc404, 0xffffffff, 0x0020003f, |
|
- | 698 | 0x30, 0xffffffff, 0x0000001c, |
|
- | 699 | 0x34, 0x000f0000, 0x000f0000, |
|
- | 700 | 0x160c, 0xffffffff, 0x00000100, |
|
- | 701 | 0x1024, 0xffffffff, 0x00000100, |
|
- | 702 | 0x102c, 0x00000101, 0x00000000, |
|
- | 703 | 0x20a8, 0xffffffff, 0x00000104, |
|
- | 704 | 0x264c, 0x000c0000, 0x000c0000, |
|
- | 705 | 0x2648, 0x000c0000, 0x000c0000, |
|
- | 706 | 0x55e4, 0xff000fff, 0x00000100, |
|
- | 707 | 0x55e8, 0x00000001, 0x00000001, |
|
- | 708 | 0x2f50, 0x00000001, 0x00000001, |
|
- | 709 | 0x30cc, 0xc0000fff, 0x00000104, |
|
- | 710 | 0xc1e4, 0x00000001, 0x00000001, |
|
- | 711 | 0xd0c0, 0xfffffff0, 0x00000100, |
|
- | 712 | 0xd8c0, 0xfffffff0, 0x00000100 |
|
- | 713 | }; |
|
- | 714 | ||
- | 715 | static const u32 hainan_mgcg_cgcg_init[] = |
|
- | 716 | { |
|
- | 717 | 0xc400, 0xffffffff, 0xfffffffc, |
|
- | 718 | 0x802c, 0xffffffff, 0xe0000000, |
|
- | 719 | 0x9a60, 0xffffffff, 0x00000100, |
|
- | 720 | 0x92a4, 0xffffffff, 0x00000100, |
|
- | 721 | 0xc164, 0xffffffff, 0x00000100, |
|
- | 722 | 0x9774, 0xffffffff, 0x00000100, |
|
- | 723 | 0x8984, 0xffffffff, 0x06000100, |
|
- | 724 | 0x8a18, 0xffffffff, 0x00000100, |
|
- | 725 | 0x92a0, 0xffffffff, 0x00000100, |
|
- | 726 | 0xc380, 0xffffffff, 0x00000100, |
|
- | 727 | 0x8b28, 0xffffffff, 0x00000100, |
|
- | 728 | 0x9144, 0xffffffff, 0x00000100, |
|
- | 729 | 0x8d88, 0xffffffff, 0x00000100, |
|
- | 730 | 0x8d8c, 0xffffffff, 0x00000100, |
|
- | 731 | 0x9030, 0xffffffff, 0x00000100, |
|
- | 732 | 0x9034, 0xffffffff, 0x00000100, |
|
- | 733 | 0x9038, 0xffffffff, 0x00000100, |
|
- | 734 | 0x903c, 0xffffffff, 0x00000100, |
|
- | 735 | 0xad80, 0xffffffff, 0x00000100, |
|
- | 736 | 0xac54, 0xffffffff, 0x00000100, |
|
- | 737 | 0x897c, 0xffffffff, 0x06000100, |
|
- | 738 | 0x9868, 0xffffffff, 0x00000100, |
|
- | 739 | 0x9510, 0xffffffff, 0x00000100, |
|
- | 740 | 0xaf04, 0xffffffff, 0x00000100, |
|
- | 741 | 0xae04, 0xffffffff, 0x00000100, |
|
- | 742 | 0x949c, 0xffffffff, 0x00000100, |
|
- | 743 | 0x802c, 0xffffffff, 0xe0000000, |
|
- | 744 | 0x9160, 0xffffffff, 0x00010000, |
|
- | 745 | 0x9164, 0xffffffff, 0x00030002, |
|
- | 746 | 0x9168, 0xffffffff, 0x00040007, |
|
- | 747 | 0x916c, 0xffffffff, 0x00060005, |
|
- | 748 | 0x9170, 0xffffffff, 0x00090008, |
|
- | 749 | 0x9174, 0xffffffff, 0x00020001, |
|
- | 750 | 0x9178, 0xffffffff, 0x00040003, |
|
- | 751 | 0x917c, 0xffffffff, 0x00000007, |
|
- | 752 | 0x9180, 0xffffffff, 0x00060005, |
|
- | 753 | 0x9184, 0xffffffff, 0x00090008, |
|
- | 754 | 0x9188, 0xffffffff, 0x00030002, |
|
- | 755 | 0x918c, 0xffffffff, 0x00050004, |
|
- | 756 | 0x9190, 0xffffffff, 0x00000008, |
|
- | 757 | 0x9194, 0xffffffff, 0x00070006, |
|
- | 758 | 0x9198, 0xffffffff, 0x000a0009, |
|
- | 759 | 0x919c, 0xffffffff, 0x00040003, |
|
- | 760 | 0x91a0, 0xffffffff, 0x00060005, |
|
- | 761 | 0x91a4, 0xffffffff, 0x00000009, |
|
- | 762 | 0x91a8, 0xffffffff, 0x00080007, |
|
- | 763 | 0x91ac, 0xffffffff, 0x000b000a, |
|
- | 764 | 0x91b0, 0xffffffff, 0x00050004, |
|
- | 765 | 0x91b4, 0xffffffff, 0x00070006, |
|
- | 766 | 0x91b8, 0xffffffff, 0x0008000b, |
|
- | 767 | 0x91bc, 0xffffffff, 0x000a0009, |
|
- | 768 | 0x91c0, 0xffffffff, 0x000d000c, |
|
- | 769 | 0x91c4, 0xffffffff, 0x00060005, |
|
- | 770 | 0x91c8, 0xffffffff, 0x00080007, |
|
- | 771 | 0x91cc, 0xffffffff, 0x0000000b, |
|
- | 772 | 0x91d0, 0xffffffff, 0x000a0009, |
|
- | 773 | 0x91d4, 0xffffffff, 0x000d000c, |
|
- | 774 | 0x9150, 0xffffffff, 0x96940200, |
|
- | 775 | 0x8708, 0xffffffff, 0x00900100, |
|
- | 776 | 0xc478, 0xffffffff, 0x00000080, |
|
- | 777 | 0xc404, 0xffffffff, 0x0020003f, |
|
- | 778 | 0x30, 0xffffffff, 0x0000001c, |
|
- | 779 | 0x34, 0x000f0000, 0x000f0000, |
|
- | 780 | 0x160c, 0xffffffff, 0x00000100, |
|
- | 781 | 0x1024, 0xffffffff, 0x00000100, |
|
- | 782 | 0x20a8, 0xffffffff, 0x00000104, |
|
- | 783 | 0x264c, 0x000c0000, 0x000c0000, |
|
- | 784 | 0x2648, 0x000c0000, 0x000c0000, |
|
- | 785 | 0x2f50, 0x00000001, 0x00000001, |
|
- | 786 | 0x30cc, 0xc0000fff, 0x00000104, |
|
- | 787 | 0xc1e4, 0x00000001, 0x00000001, |
|
- | 788 | 0xd0c0, 0xfffffff0, 0x00000100, |
|
- | 789 | 0xd8c0, 0xfffffff0, 0x00000100 |
|
- | 790 | }; |
|
- | 791 | ||
- | 792 | static u32 verde_pg_init[] = |
|
- | 793 | { |
|
- | 794 | 0x353c, 0xffffffff, 0x40000, |
|
- | 795 | 0x3538, 0xffffffff, 0x200010ff, |
|
- | 796 | 0x353c, 0xffffffff, 0x0, |
|
- | 797 | 0x353c, 0xffffffff, 0x0, |
|
- | 798 | 0x353c, 0xffffffff, 0x0, |
|
- | 799 | 0x353c, 0xffffffff, 0x0, |
|
- | 800 | 0x353c, 0xffffffff, 0x0, |
|
- | 801 | 0x353c, 0xffffffff, 0x7007, |
|
- | 802 | 0x3538, 0xffffffff, 0x300010ff, |
|
- | 803 | 0x353c, 0xffffffff, 0x0, |
|
- | 804 | 0x353c, 0xffffffff, 0x0, |
|
- | 805 | 0x353c, 0xffffffff, 0x0, |
|
- | 806 | 0x353c, 0xffffffff, 0x0, |
|
- | 807 | 0x353c, 0xffffffff, 0x0, |
|
- | 808 | 0x353c, 0xffffffff, 0x400000, |
|
- | 809 | 0x3538, 0xffffffff, 0x100010ff, |
|
- | 810 | 0x353c, 0xffffffff, 0x0, |
|
- | 811 | 0x353c, 0xffffffff, 0x0, |
|
- | 812 | 0x353c, 0xffffffff, 0x0, |
|
- | 813 | 0x353c, 0xffffffff, 0x0, |
|
- | 814 | 0x353c, 0xffffffff, 0x0, |
|
- | 815 | 0x353c, 0xffffffff, 0x120200, |
|
- | 816 | 0x3538, 0xffffffff, 0x500010ff, |
|
- | 817 | 0x353c, 0xffffffff, 0x0, |
|
- | 818 | 0x353c, 0xffffffff, 0x0, |
|
- | 819 | 0x353c, 0xffffffff, 0x0, |
|
- | 820 | 0x353c, 0xffffffff, 0x0, |
|
- | 821 | 0x353c, 0xffffffff, 0x0, |
|
- | 822 | 0x353c, 0xffffffff, 0x1e1e16, |
|
- | 823 | 0x3538, 0xffffffff, 0x600010ff, |
|
- | 824 | 0x353c, 0xffffffff, 0x0, |
|
- | 825 | 0x353c, 0xffffffff, 0x0, |
|
- | 826 | 0x353c, 0xffffffff, 0x0, |
|
- | 827 | 0x353c, 0xffffffff, 0x0, |
|
- | 828 | 0x353c, 0xffffffff, 0x0, |
|
- | 829 | 0x353c, 0xffffffff, 0x171f1e, |
|
- | 830 | 0x3538, 0xffffffff, 0x700010ff, |
|
- | 831 | 0x353c, 0xffffffff, 0x0, |
|
- | 832 | 0x353c, 0xffffffff, 0x0, |
|
- | 833 | 0x353c, 0xffffffff, 0x0, |
|
- | 834 | 0x353c, 0xffffffff, 0x0, |
|
- | 835 | 0x353c, 0xffffffff, 0x0, |
|
- | 836 | 0x353c, 0xffffffff, 0x0, |
|
- | 837 | 0x3538, 0xffffffff, 0x9ff, |
|
- | 838 | 0x3500, 0xffffffff, 0x0, |
|
- | 839 | 0x3504, 0xffffffff, 0x10000800, |
|
- | 840 | 0x3504, 0xffffffff, 0xf, |
|
- | 841 | 0x3504, 0xffffffff, 0xf, |
|
- | 842 | 0x3500, 0xffffffff, 0x4, |
|
- | 843 | 0x3504, 0xffffffff, 0x1000051e, |
|
- | 844 | 0x3504, 0xffffffff, 0xffff, |
|
- | 845 | 0x3504, 0xffffffff, 0xffff, |
|
- | 846 | 0x3500, 0xffffffff, 0x8, |
|
- | 847 | 0x3504, 0xffffffff, 0x80500, |
|
- | 848 | 0x3500, 0xffffffff, 0x12, |
|
- | 849 | 0x3504, 0xffffffff, 0x9050c, |
|
- | 850 | 0x3500, 0xffffffff, 0x1d, |
|
- | 851 | 0x3504, 0xffffffff, 0xb052c, |
|
- | 852 | 0x3500, 0xffffffff, 0x2a, |
|
- | 853 | 0x3504, 0xffffffff, 0x1053e, |
|
- | 854 | 0x3500, 0xffffffff, 0x2d, |
|
- | 855 | 0x3504, 0xffffffff, 0x10546, |
|
- | 856 | 0x3500, 0xffffffff, 0x30, |
|
- | 857 | 0x3504, 0xffffffff, 0xa054e, |
|
- | 858 | 0x3500, 0xffffffff, 0x3c, |
|
- | 859 | 0x3504, 0xffffffff, 0x1055f, |
|
- | 860 | 0x3500, 0xffffffff, 0x3f, |
|
- | 861 | 0x3504, 0xffffffff, 0x10567, |
|
- | 862 | 0x3500, 0xffffffff, 0x42, |
|
- | 863 | 0x3504, 0xffffffff, 0x1056f, |
|
- | 864 | 0x3500, 0xffffffff, 0x45, |
|
- | 865 | 0x3504, 0xffffffff, 0x10572, |
|
- | 866 | 0x3500, 0xffffffff, 0x48, |
|
- | 867 | 0x3504, 0xffffffff, 0x20575, |
|
- | 868 | 0x3500, 0xffffffff, 0x4c, |
|
- | 869 | 0x3504, 0xffffffff, 0x190801, |
|
- | 870 | 0x3500, 0xffffffff, 0x67, |
|
- | 871 | 0x3504, 0xffffffff, 0x1082a, |
|
- | 872 | 0x3500, 0xffffffff, 0x6a, |
|
- | 873 | 0x3504, 0xffffffff, 0x1b082d, |
|
- | 874 | 0x3500, 0xffffffff, 0x87, |
|
- | 875 | 0x3504, 0xffffffff, 0x310851, |
|
- | 876 | 0x3500, 0xffffffff, 0xba, |
|
- | 877 | 0x3504, 0xffffffff, 0x891, |
|
- | 878 | 0x3500, 0xffffffff, 0xbc, |
|
- | 879 | 0x3504, 0xffffffff, 0x893, |
|
- | 880 | 0x3500, 0xffffffff, 0xbe, |
|
- | 881 | 0x3504, 0xffffffff, 0x20895, |
|
- | 882 | 0x3500, 0xffffffff, 0xc2, |
|
- | 883 | 0x3504, 0xffffffff, 0x20899, |
|
- | 884 | 0x3500, 0xffffffff, 0xc6, |
|
- | 885 | 0x3504, 0xffffffff, 0x2089d, |
|
- | 886 | 0x3500, 0xffffffff, 0xca, |
|
- | 887 | 0x3504, 0xffffffff, 0x8a1, |
|
- | 888 | 0x3500, 0xffffffff, 0xcc, |
|
- | 889 | 0x3504, 0xffffffff, 0x8a3, |
|
- | 890 | 0x3500, 0xffffffff, 0xce, |
|
- | 891 | 0x3504, 0xffffffff, 0x308a5, |
|
- | 892 | 0x3500, 0xffffffff, 0xd3, |
|
- | 893 | 0x3504, 0xffffffff, 0x6d08cd, |
|
- | 894 | 0x3500, 0xffffffff, 0x142, |
|
- | 895 | 0x3504, 0xffffffff, 0x2000095a, |
|
- | 896 | 0x3504, 0xffffffff, 0x1, |
|
- | 897 | 0x3500, 0xffffffff, 0x144, |
|
- | 898 | 0x3504, 0xffffffff, 0x301f095b, |
|
- | 899 | 0x3500, 0xffffffff, 0x165, |
|
- | 900 | 0x3504, 0xffffffff, 0xc094d, |
|
- | 901 | 0x3500, 0xffffffff, 0x173, |
|
- | 902 | 0x3504, 0xffffffff, 0xf096d, |
|
- | 903 | 0x3500, 0xffffffff, 0x184, |
|
- | 904 | 0x3504, 0xffffffff, 0x15097f, |
|
- | 905 | 0x3500, 0xffffffff, 0x19b, |
|
- | 906 | 0x3504, 0xffffffff, 0xc0998, |
|
- | 907 | 0x3500, 0xffffffff, 0x1a9, |
|
- | 908 | 0x3504, 0xffffffff, 0x409a7, |
|
- | 909 | 0x3500, 0xffffffff, 0x1af, |
|
- | 910 | 0x3504, 0xffffffff, 0xcdc, |
|
- | 911 | 0x3500, 0xffffffff, 0x1b1, |
|
- | 912 | 0x3504, 0xffffffff, 0x800, |
|
- | 913 | 0x3508, 0xffffffff, 0x6c9b2000, |
|
- | 914 | 0x3510, 0xfc00, 0x2000, |
|
- | 915 | 0x3544, 0xffffffff, 0xfc0, |
|
- | 916 | 0x28d4, 0x00000100, 0x100 |
|
- | 917 | }; |
|
- | 918 | ||
- | 919 | static void si_init_golden_registers(struct radeon_device *rdev) |
|
- | 920 | { |
|
- | 921 | switch (rdev->family) { |
|
- | 922 | case CHIP_TAHITI: |
|
- | 923 | radeon_program_register_sequence(rdev, |
|
- | 924 | tahiti_golden_registers, |
|
- | 925 | (const u32)ARRAY_SIZE(tahiti_golden_registers)); |
|
- | 926 | radeon_program_register_sequence(rdev, |
|
- | 927 | tahiti_golden_rlc_registers, |
|
- | 928 | (const u32)ARRAY_SIZE(tahiti_golden_rlc_registers)); |
|
- | 929 | radeon_program_register_sequence(rdev, |
|
- | 930 | tahiti_mgcg_cgcg_init, |
|
- | 931 | (const u32)ARRAY_SIZE(tahiti_mgcg_cgcg_init)); |
|
- | 932 | radeon_program_register_sequence(rdev, |
|
- | 933 | tahiti_golden_registers2, |
|
- | 934 | (const u32)ARRAY_SIZE(tahiti_golden_registers2)); |
|
- | 935 | break; |
|
- | 936 | case CHIP_PITCAIRN: |
|
- | 937 | radeon_program_register_sequence(rdev, |
|
- | 938 | pitcairn_golden_registers, |
|
- | 939 | (const u32)ARRAY_SIZE(pitcairn_golden_registers)); |
|
- | 940 | radeon_program_register_sequence(rdev, |
|
- | 941 | pitcairn_golden_rlc_registers, |
|
- | 942 | (const u32)ARRAY_SIZE(pitcairn_golden_rlc_registers)); |
|
- | 943 | radeon_program_register_sequence(rdev, |
|
- | 944 | pitcairn_mgcg_cgcg_init, |
|
- | 945 | (const u32)ARRAY_SIZE(pitcairn_mgcg_cgcg_init)); |
|
- | 946 | break; |
|
- | 947 | case CHIP_VERDE: |
|
- | 948 | radeon_program_register_sequence(rdev, |
|
- | 949 | verde_golden_registers, |
|
- | 950 | (const u32)ARRAY_SIZE(verde_golden_registers)); |
|
- | 951 | radeon_program_register_sequence(rdev, |
|
- | 952 | verde_golden_rlc_registers, |
|
- | 953 | (const u32)ARRAY_SIZE(verde_golden_rlc_registers)); |
|
- | 954 | radeon_program_register_sequence(rdev, |
|
- | 955 | verde_mgcg_cgcg_init, |
|
- | 956 | (const u32)ARRAY_SIZE(verde_mgcg_cgcg_init)); |
|
- | 957 | radeon_program_register_sequence(rdev, |
|
- | 958 | verde_pg_init, |
|
- | 959 | (const u32)ARRAY_SIZE(verde_pg_init)); |
|
- | 960 | break; |
|
- | 961 | case CHIP_OLAND: |
|
- | 962 | radeon_program_register_sequence(rdev, |
|
- | 963 | oland_golden_registers, |
|
- | 964 | (const u32)ARRAY_SIZE(oland_golden_registers)); |
|
- | 965 | radeon_program_register_sequence(rdev, |
|
- | 966 | oland_golden_rlc_registers, |
|
- | 967 | (const u32)ARRAY_SIZE(oland_golden_rlc_registers)); |
|
- | 968 | radeon_program_register_sequence(rdev, |
|
- | 969 | oland_mgcg_cgcg_init, |
|
- | 970 | (const u32)ARRAY_SIZE(oland_mgcg_cgcg_init)); |
|
- | 971 | break; |
|
- | 972 | case CHIP_HAINAN: |
|
- | 973 | radeon_program_register_sequence(rdev, |
|
- | 974 | hainan_golden_registers, |
|
- | 975 | (const u32)ARRAY_SIZE(hainan_golden_registers)); |
|
- | 976 | radeon_program_register_sequence(rdev, |
|
- | 977 | hainan_golden_registers2, |
|
- | 978 | (const u32)ARRAY_SIZE(hainan_golden_registers2)); |
|
- | 979 | radeon_program_register_sequence(rdev, |
|
- | 980 | hainan_mgcg_cgcg_init, |
|
- | 981 | (const u32)ARRAY_SIZE(hainan_mgcg_cgcg_init)); |
|
- | 982 | break; |
|
- | 983 | default: |
|
- | 984 | break; |
|
- | 985 | } |
|
- | 986 | } |
|
- | 987 | ||
- | 988 | #define PCIE_BUS_CLK 10000 |
|
- | 989 | #define TCLK (PCIE_BUS_CLK / 10) |
|
- | 990 | ||
- | 991 | /** |
|
- | 992 | * si_get_xclk - get the xclk |
|
- | 993 | * |
|
- | 994 | * @rdev: radeon_device pointer |
|
- | 995 | * |
|
- | 996 | * Returns the reference clock used by the gfx engine |
|
- | 997 | * (SI). |
|
- | 998 | */ |
|
- | 999 | u32 si_get_xclk(struct radeon_device *rdev) |
|
- | 1000 | { |
|
- | 1001 | u32 reference_clock = rdev->clock.spll.reference_freq; |
|
- | 1002 | u32 tmp; |
|
- | 1003 | ||
- | 1004 | tmp = RREG32(CG_CLKPIN_CNTL_2); |
|
- | 1005 | if (tmp & MUX_TCLK_TO_XCLK) |
|
- | 1006 | return TCLK; |
|
- | 1007 | ||
- | 1008 | tmp = RREG32(CG_CLKPIN_CNTL); |
|
- | 1009 | if (tmp & XTALIN_DIVIDE) |
|
- | 1010 | return reference_clock / 4; |
|
- | 1011 | ||
- | 1012 | return reference_clock; |
|
Line 63... | Line 1013... | ||
63 | extern u32 evergreen_get_number_of_dram_channels(struct radeon_device *rdev); |
1013 | } |
64 | 1014 | ||
65 | /* get temperature in millidegrees */ |
1015 | /* get temperature in millidegrees */ |
66 | int si_get_temp(struct radeon_device *rdev) |
1016 | int si_get_temp(struct radeon_device *rdev) |
Line 198... | Line 1148... | ||
198 | {0x00000099, 0x00006000}, |
1148 | {0x00000099, 0x00006000}, |
199 | {0x0000009a, 0x00001000}, |
1149 | {0x0000009a, 0x00001000}, |
200 | {0x0000009f, 0x00a37400} |
1150 | {0x0000009f, 0x00a37400} |
201 | }; |
1151 | }; |
Line -... | Line 1152... | ||
- | 1152 | ||
- | 1153 | static const u32 oland_io_mc_regs[TAHITI_IO_MC_REGS_SIZE][2] = { |
|
- | 1154 | {0x0000006f, 0x03044000}, |
|
- | 1155 | {0x00000070, 0x0480c018}, |
|
- | 1156 | {0x00000071, 0x00000040}, |
|
- | 1157 | {0x00000072, 0x01000000}, |
|
- | 1158 | {0x00000074, 0x000000ff}, |
|
- | 1159 | {0x00000075, 0x00143400}, |
|
- | 1160 | {0x00000076, 0x08ec0800}, |
|
- | 1161 | {0x00000077, 0x040000cc}, |
|
- | 1162 | {0x00000079, 0x00000000}, |
|
- | 1163 | {0x0000007a, 0x21000409}, |
|
- | 1164 | {0x0000007c, 0x00000000}, |
|
- | 1165 | {0x0000007d, 0xe8000000}, |
|
- | 1166 | {0x0000007e, 0x044408a8}, |
|
- | 1167 | {0x0000007f, 0x00000003}, |
|
- | 1168 | {0x00000080, 0x00000000}, |
|
- | 1169 | {0x00000081, 0x01000000}, |
|
- | 1170 | {0x00000082, 0x02000000}, |
|
- | 1171 | {0x00000083, 0x00000000}, |
|
- | 1172 | {0x00000084, 0xe3f3e4f4}, |
|
- | 1173 | {0x00000085, 0x00052024}, |
|
- | 1174 | {0x00000087, 0x00000000}, |
|
- | 1175 | {0x00000088, 0x66036603}, |
|
- | 1176 | {0x00000089, 0x01000000}, |
|
- | 1177 | {0x0000008b, 0x1c0a0000}, |
|
- | 1178 | {0x0000008c, 0xff010000}, |
|
- | 1179 | {0x0000008e, 0xffffefff}, |
|
- | 1180 | {0x0000008f, 0xfff3efff}, |
|
- | 1181 | {0x00000090, 0xfff3efbf}, |
|
- | 1182 | {0x00000094, 0x00101101}, |
|
- | 1183 | {0x00000095, 0x00000fff}, |
|
- | 1184 | {0x00000096, 0x00116fff}, |
|
- | 1185 | {0x00000097, 0x60010000}, |
|
- | 1186 | {0x00000098, 0x10010000}, |
|
- | 1187 | {0x00000099, 0x00006000}, |
|
- | 1188 | {0x0000009a, 0x00001000}, |
|
- | 1189 | {0x0000009f, 0x00a17730} |
|
- | 1190 | }; |
|
- | 1191 | ||
- | 1192 | static const u32 hainan_io_mc_regs[TAHITI_IO_MC_REGS_SIZE][2] = { |
|
- | 1193 | {0x0000006f, 0x03044000}, |
|
- | 1194 | {0x00000070, 0x0480c018}, |
|
- | 1195 | {0x00000071, 0x00000040}, |
|
- | 1196 | {0x00000072, 0x01000000}, |
|
- | 1197 | {0x00000074, 0x000000ff}, |
|
- | 1198 | {0x00000075, 0x00143400}, |
|
- | 1199 | {0x00000076, 0x08ec0800}, |
|
- | 1200 | {0x00000077, 0x040000cc}, |
|
- | 1201 | {0x00000079, 0x00000000}, |
|
- | 1202 | {0x0000007a, 0x21000409}, |
|
- | 1203 | {0x0000007c, 0x00000000}, |
|
- | 1204 | {0x0000007d, 0xe8000000}, |
|
- | 1205 | {0x0000007e, 0x044408a8}, |
|
- | 1206 | {0x0000007f, 0x00000003}, |
|
- | 1207 | {0x00000080, 0x00000000}, |
|
- | 1208 | {0x00000081, 0x01000000}, |
|
- | 1209 | {0x00000082, 0x02000000}, |
|
- | 1210 | {0x00000083, 0x00000000}, |
|
- | 1211 | {0x00000084, 0xe3f3e4f4}, |
|
- | 1212 | {0x00000085, 0x00052024}, |
|
- | 1213 | {0x00000087, 0x00000000}, |
|
- | 1214 | {0x00000088, 0x66036603}, |
|
- | 1215 | {0x00000089, 0x01000000}, |
|
- | 1216 | {0x0000008b, 0x1c0a0000}, |
|
- | 1217 | {0x0000008c, 0xff010000}, |
|
- | 1218 | {0x0000008e, 0xffffefff}, |
|
- | 1219 | {0x0000008f, 0xfff3efff}, |
|
- | 1220 | {0x00000090, 0xfff3efbf}, |
|
- | 1221 | {0x00000094, 0x00101101}, |
|
- | 1222 | {0x00000095, 0x00000fff}, |
|
- | 1223 | {0x00000096, 0x00116fff}, |
|
- | 1224 | {0x00000097, 0x60010000}, |
|
- | 1225 | {0x00000098, 0x10010000}, |
|
- | 1226 | {0x00000099, 0x00006000}, |
|
- | 1227 | {0x0000009a, 0x00001000}, |
|
- | 1228 | {0x0000009f, 0x00a07730} |
|
- | 1229 | }; |
|
202 | 1230 | ||
203 | /* ucode loading */ |
1231 | /* ucode loading */ |
204 | static int si_mc_load_microcode(struct radeon_device *rdev) |
1232 | static int si_mc_load_microcode(struct radeon_device *rdev) |
205 | { |
1233 | { |
206 | const __be32 *fw_data; |
1234 | const __be32 *fw_data; |
Line 226... | Line 1254... | ||
226 | default: |
1254 | default: |
227 | io_mc_regs = (u32 *)&verde_io_mc_regs; |
1255 | io_mc_regs = (u32 *)&verde_io_mc_regs; |
228 | ucode_size = SI_MC_UCODE_SIZE; |
1256 | ucode_size = SI_MC_UCODE_SIZE; |
229 | regs_size = TAHITI_IO_MC_REGS_SIZE; |
1257 | regs_size = TAHITI_IO_MC_REGS_SIZE; |
230 | break; |
1258 | break; |
- | 1259 | case CHIP_OLAND: |
|
- | 1260 | io_mc_regs = (u32 *)&oland_io_mc_regs; |
|
- | 1261 | ucode_size = OLAND_MC_UCODE_SIZE; |
|
- | 1262 | regs_size = TAHITI_IO_MC_REGS_SIZE; |
|
- | 1263 | break; |
|
- | 1264 | case CHIP_HAINAN: |
|
- | 1265 | io_mc_regs = (u32 *)&hainan_io_mc_regs; |
|
- | 1266 | ucode_size = OLAND_MC_UCODE_SIZE; |
|
- | 1267 | regs_size = TAHITI_IO_MC_REGS_SIZE; |
|
- | 1268 | break; |
|
231 | } |
1269 | } |
Line 232... | Line 1270... | ||
232 | 1270 | ||
Line 233... | Line 1271... | ||
233 | running = RREG32(MC_SEQ_SUP_CNTL) & RUN_MASK; |
1271 | running = RREG32(MC_SEQ_SUP_CNTL) & RUN_MASK; |
Line 320... | Line 1358... | ||
320 | me_req_size = SI_PM4_UCODE_SIZE * 4; |
1358 | me_req_size = SI_PM4_UCODE_SIZE * 4; |
321 | ce_req_size = SI_CE_UCODE_SIZE * 4; |
1359 | ce_req_size = SI_CE_UCODE_SIZE * 4; |
322 | rlc_req_size = SI_RLC_UCODE_SIZE * 4; |
1360 | rlc_req_size = SI_RLC_UCODE_SIZE * 4; |
323 | mc_req_size = SI_MC_UCODE_SIZE * 4; |
1361 | mc_req_size = SI_MC_UCODE_SIZE * 4; |
324 | break; |
1362 | break; |
- | 1363 | case CHIP_OLAND: |
|
- | 1364 | chip_name = "OLAND"; |
|
- | 1365 | rlc_chip_name = "OLAND"; |
|
- | 1366 | pfp_req_size = SI_PFP_UCODE_SIZE * 4; |
|
- | 1367 | me_req_size = SI_PM4_UCODE_SIZE * 4; |
|
- | 1368 | ce_req_size = SI_CE_UCODE_SIZE * 4; |
|
- | 1369 | rlc_req_size = SI_RLC_UCODE_SIZE * 4; |
|
- | 1370 | mc_req_size = OLAND_MC_UCODE_SIZE * 4; |
|
- | 1371 | break; |
|
- | 1372 | case CHIP_HAINAN: |
|
- | 1373 | chip_name = "HAINAN"; |
|
- | 1374 | rlc_chip_name = "HAINAN"; |
|
- | 1375 | pfp_req_size = SI_PFP_UCODE_SIZE * 4; |
|
- | 1376 | me_req_size = SI_PM4_UCODE_SIZE * 4; |
|
- | 1377 | ce_req_size = SI_CE_UCODE_SIZE * 4; |
|
- | 1378 | rlc_req_size = SI_RLC_UCODE_SIZE * 4; |
|
- | 1379 | mc_req_size = OLAND_MC_UCODE_SIZE * 4; |
|
- | 1380 | break; |
|
325 | default: BUG(); |
1381 | default: BUG(); |
326 | } |
1382 | } |
Line 327... | Line 1383... | ||
327 | 1383 | ||
Line 1121... | Line 2177... | ||
1121 | break; |
2177 | break; |
1122 | default: |
2178 | default: |
1123 | gb_tile_moden = 0; |
2179 | gb_tile_moden = 0; |
1124 | break; |
2180 | break; |
1125 | } |
2181 | } |
- | 2182 | rdev->config.si.tile_mode_array[reg_offset] = gb_tile_moden; |
|
1126 | WREG32(GB_TILE_MODE0 + (reg_offset * 4), gb_tile_moden); |
2183 | WREG32(GB_TILE_MODE0 + (reg_offset * 4), gb_tile_moden); |
1127 | } |
2184 | } |
1128 | } else if (rdev->family == CHIP_VERDE) { |
2185 | } else if ((rdev->family == CHIP_VERDE) || |
- | 2186 | (rdev->family == CHIP_OLAND) || |
|
- | 2187 | (rdev->family == CHIP_HAINAN)) { |
|
1129 | for (reg_offset = 0; reg_offset < num_tile_mode_states; reg_offset++) { |
2188 | for (reg_offset = 0; reg_offset < num_tile_mode_states; reg_offset++) { |
1130 | switch (reg_offset) { |
2189 | switch (reg_offset) { |
1131 | case 0: /* non-AA compressed depth or any compressed stencil */ |
2190 | case 0: /* non-AA compressed depth or any compressed stencil */ |
1132 | gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | |
2191 | gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | |
1133 | MICRO_TILE_MODE(ADDR_SURF_DEPTH_MICRO_TILING) | |
2192 | MICRO_TILE_MODE(ADDR_SURF_DEPTH_MICRO_TILING) | |
Line 1360... | Line 2419... | ||
1360 | break; |
2419 | break; |
1361 | default: |
2420 | default: |
1362 | gb_tile_moden = 0; |
2421 | gb_tile_moden = 0; |
1363 | break; |
2422 | break; |
1364 | } |
2423 | } |
- | 2424 | rdev->config.si.tile_mode_array[reg_offset] = gb_tile_moden; |
|
1365 | WREG32(GB_TILE_MODE0 + (reg_offset * 4), gb_tile_moden); |
2425 | WREG32(GB_TILE_MODE0 + (reg_offset * 4), gb_tile_moden); |
1366 | } |
2426 | } |
1367 | } else |
2427 | } else |
1368 | DRM_ERROR("unknown asic: 0x%x\n", rdev->family); |
2428 | DRM_ERROR("unknown asic: 0x%x\n", rdev->family); |
1369 | } |
2429 | } |
Line 1372... | Line 2432... | ||
1372 | u32 se_num, u32 sh_num) |
2432 | u32 se_num, u32 sh_num) |
1373 | { |
2433 | { |
1374 | u32 data = INSTANCE_BROADCAST_WRITES; |
2434 | u32 data = INSTANCE_BROADCAST_WRITES; |
Line 1375... | Line 2435... | ||
1375 | 2435 | ||
1376 | if ((se_num == 0xffffffff) && (sh_num == 0xffffffff)) |
2436 | if ((se_num == 0xffffffff) && (sh_num == 0xffffffff)) |
1377 | data = SH_BROADCAST_WRITES | SE_BROADCAST_WRITES; |
2437 | data |= SH_BROADCAST_WRITES | SE_BROADCAST_WRITES; |
1378 | else if (se_num == 0xffffffff) |
2438 | else if (se_num == 0xffffffff) |
1379 | data |= SE_BROADCAST_WRITES | SH_INDEX(sh_num); |
2439 | data |= SE_BROADCAST_WRITES | SH_INDEX(sh_num); |
1380 | else if (sh_num == 0xffffffff) |
2440 | else if (sh_num == 0xffffffff) |
1381 | data |= SH_BROADCAST_WRITES | SE_INDEX(se_num); |
2441 | data |= SH_BROADCAST_WRITES | SE_INDEX(se_num); |
Line 1554... | Line 2614... | ||
1554 | break; |
2614 | break; |
1555 | case CHIP_VERDE: |
2615 | case CHIP_VERDE: |
1556 | default: |
2616 | default: |
1557 | rdev->config.si.max_shader_engines = 1; |
2617 | rdev->config.si.max_shader_engines = 1; |
1558 | rdev->config.si.max_tile_pipes = 4; |
2618 | rdev->config.si.max_tile_pipes = 4; |
1559 | rdev->config.si.max_cu_per_sh = 2; |
2619 | rdev->config.si.max_cu_per_sh = 5; |
1560 | rdev->config.si.max_sh_per_se = 2; |
2620 | rdev->config.si.max_sh_per_se = 2; |
1561 | rdev->config.si.max_backends_per_se = 4; |
2621 | rdev->config.si.max_backends_per_se = 4; |
1562 | rdev->config.si.max_texture_channel_caches = 4; |
2622 | rdev->config.si.max_texture_channel_caches = 4; |
1563 | rdev->config.si.max_gprs = 256; |
2623 | rdev->config.si.max_gprs = 256; |
1564 | rdev->config.si.max_gs_threads = 32; |
2624 | rdev->config.si.max_gs_threads = 32; |
Line 1568... | Line 2628... | ||
1568 | rdev->config.si.sc_prim_fifo_size_backend = 0x40; |
2628 | rdev->config.si.sc_prim_fifo_size_backend = 0x40; |
1569 | rdev->config.si.sc_hiz_tile_fifo_size = 0x30; |
2629 | rdev->config.si.sc_hiz_tile_fifo_size = 0x30; |
1570 | rdev->config.si.sc_earlyz_tile_fifo_size = 0x130; |
2630 | rdev->config.si.sc_earlyz_tile_fifo_size = 0x130; |
1571 | gb_addr_config = VERDE_GB_ADDR_CONFIG_GOLDEN; |
2631 | gb_addr_config = VERDE_GB_ADDR_CONFIG_GOLDEN; |
1572 | break; |
2632 | break; |
- | 2633 | case CHIP_OLAND: |
|
- | 2634 | rdev->config.si.max_shader_engines = 1; |
|
- | 2635 | rdev->config.si.max_tile_pipes = 4; |
|
- | 2636 | rdev->config.si.max_cu_per_sh = 6; |
|
- | 2637 | rdev->config.si.max_sh_per_se = 1; |
|
- | 2638 | rdev->config.si.max_backends_per_se = 2; |
|
- | 2639 | rdev->config.si.max_texture_channel_caches = 4; |
|
- | 2640 | rdev->config.si.max_gprs = 256; |
|
- | 2641 | rdev->config.si.max_gs_threads = 16; |
|
- | 2642 | rdev->config.si.max_hw_contexts = 8; |
|
- | 2643 | ||
- | 2644 | rdev->config.si.sc_prim_fifo_size_frontend = 0x20; |
|
- | 2645 | rdev->config.si.sc_prim_fifo_size_backend = 0x40; |
|
- | 2646 | rdev->config.si.sc_hiz_tile_fifo_size = 0x30; |
|
- | 2647 | rdev->config.si.sc_earlyz_tile_fifo_size = 0x130; |
|
- | 2648 | gb_addr_config = VERDE_GB_ADDR_CONFIG_GOLDEN; |
|
- | 2649 | break; |
|
- | 2650 | case CHIP_HAINAN: |
|
- | 2651 | rdev->config.si.max_shader_engines = 1; |
|
- | 2652 | rdev->config.si.max_tile_pipes = 4; |
|
- | 2653 | rdev->config.si.max_cu_per_sh = 5; |
|
- | 2654 | rdev->config.si.max_sh_per_se = 1; |
|
- | 2655 | rdev->config.si.max_backends_per_se = 1; |
|
- | 2656 | rdev->config.si.max_texture_channel_caches = 2; |
|
- | 2657 | rdev->config.si.max_gprs = 256; |
|
- | 2658 | rdev->config.si.max_gs_threads = 16; |
|
- | 2659 | rdev->config.si.max_hw_contexts = 8; |
|
- | 2660 | ||
- | 2661 | rdev->config.si.sc_prim_fifo_size_frontend = 0x20; |
|
- | 2662 | rdev->config.si.sc_prim_fifo_size_backend = 0x40; |
|
- | 2663 | rdev->config.si.sc_hiz_tile_fifo_size = 0x30; |
|
- | 2664 | rdev->config.si.sc_earlyz_tile_fifo_size = 0x130; |
|
- | 2665 | gb_addr_config = HAINAN_GB_ADDR_CONFIG_GOLDEN; |
|
- | 2666 | break; |
|
1573 | } |
2667 | } |
Line 1574... | Line 2668... | ||
1574 | 2668 | ||
1575 | /* Initialize HDP */ |
2669 | /* Initialize HDP */ |
1576 | for (i = 0, j = 0; i < 32; i++, j += 0x18) { |
2670 | for (i = 0, j = 0; i < 32; i++, j += 0x18) { |
Line 1657... | Line 2751... | ||
1657 | rdev->config.si.tile_config |= |
2751 | rdev->config.si.tile_config |= |
1658 | ((gb_addr_config & ROW_SIZE_MASK) >> ROW_SIZE_SHIFT) << 12; |
2752 | ((gb_addr_config & ROW_SIZE_MASK) >> ROW_SIZE_SHIFT) << 12; |
Line 1659... | Line 2753... | ||
1659 | 2753 | ||
1660 | WREG32(GB_ADDR_CONFIG, gb_addr_config); |
2754 | WREG32(GB_ADDR_CONFIG, gb_addr_config); |
- | 2755 | WREG32(DMIF_ADDR_CONFIG, gb_addr_config); |
|
1661 | WREG32(DMIF_ADDR_CONFIG, gb_addr_config); |
2756 | WREG32(DMIF_ADDR_CALC, gb_addr_config); |
1662 | WREG32(HDP_ADDR_CONFIG, gb_addr_config); |
2757 | WREG32(HDP_ADDR_CONFIG, gb_addr_config); |
1663 | WREG32(DMA_TILING_CONFIG + DMA0_REGISTER_OFFSET, gb_addr_config); |
2758 | WREG32(DMA_TILING_CONFIG + DMA0_REGISTER_OFFSET, gb_addr_config); |
- | 2759 | WREG32(DMA_TILING_CONFIG + DMA1_REGISTER_OFFSET, gb_addr_config); |
|
- | 2760 | if (rdev->has_uvd) { |
|
- | 2761 | WREG32(UVD_UDEC_ADDR_CONFIG, gb_addr_config); |
|
- | 2762 | WREG32(UVD_UDEC_DB_ADDR_CONFIG, gb_addr_config); |
|
- | 2763 | WREG32(UVD_UDEC_DBW_ADDR_CONFIG, gb_addr_config); |
|
Line 1664... | Line 2764... | ||
1664 | WREG32(DMA_TILING_CONFIG + DMA1_REGISTER_OFFSET, gb_addr_config); |
2764 | } |
Line 1665... | Line 2765... | ||
1665 | 2765 | ||
1666 | si_tiling_mode_table_init(rdev); |
2766 | si_tiling_mode_table_init(rdev); |
Line 2104... | Line 3204... | ||
2104 | } |
3204 | } |
Line 2105... | Line 3205... | ||
2105 | 3205 | ||
2106 | return 0; |
3206 | return 0; |
Line 2107... | Line 3207... | ||
2107 | } |
3207 | } |
2108 | 3208 | ||
2109 | bool si_gpu_is_lockup(struct radeon_device *rdev, struct radeon_ring *ring) |
3209 | static u32 si_gpu_check_soft_reset(struct radeon_device *rdev) |
- | 3210 | { |
|
- | 3211 | u32 reset_mask = 0; |
|
- | 3212 | u32 tmp; |
|
- | 3213 | ||
- | 3214 | /* GRBM_STATUS */ |
|
- | 3215 | tmp = RREG32(GRBM_STATUS); |
|
- | 3216 | if (tmp & (PA_BUSY | SC_BUSY | |
|
- | 3217 | BCI_BUSY | SX_BUSY | |
|
- | 3218 | TA_BUSY | VGT_BUSY | |
|
- | 3219 | DB_BUSY | CB_BUSY | |
|
2110 | { |
3220 | GDS_BUSY | SPI_BUSY | |
- | 3221 | IA_BUSY | IA_BUSY_NO_DMA)) |
|
- | 3222 | reset_mask |= RADEON_RESET_GFX; |
|
- | 3223 | ||
2111 | u32 srbm_status; |
3224 | if (tmp & (CF_RQ_PENDING | PF_RQ_PENDING | |
- | 3225 | CP_BUSY | CP_COHERENCY_BUSY)) |
|
- | 3226 | reset_mask |= RADEON_RESET_CP; |
|
- | 3227 | ||
2112 | u32 grbm_status, grbm_status2; |
3228 | if (tmp & GRBM_EE_BUSY) |
- | 3229 | reset_mask |= RADEON_RESET_GRBM | RADEON_RESET_GFX | RADEON_RESET_CP; |
|
2113 | u32 grbm_status_se0, grbm_status_se1; |
3230 | |
- | 3231 | /* GRBM_STATUS2 */ |
|
- | 3232 | tmp = RREG32(GRBM_STATUS2); |
|
- | 3233 | if (tmp & (RLC_RQ_PENDING | RLC_BUSY)) |
|
- | 3234 | reset_mask |= RADEON_RESET_RLC; |
|
- | 3235 | ||
- | 3236 | /* DMA_STATUS_REG 0 */ |
|
- | 3237 | tmp = RREG32(DMA_STATUS_REG + DMA0_REGISTER_OFFSET); |
|
- | 3238 | if (!(tmp & DMA_IDLE)) |
|
- | 3239 | reset_mask |= RADEON_RESET_DMA; |
|
- | 3240 | ||
- | 3241 | /* DMA_STATUS_REG 1 */ |
|
- | 3242 | tmp = RREG32(DMA_STATUS_REG + DMA1_REGISTER_OFFSET); |
|
- | 3243 | if (!(tmp & DMA_IDLE)) |
|
- | 3244 | reset_mask |= RADEON_RESET_DMA1; |
|
2114 | 3245 | ||
- | 3246 | /* SRBM_STATUS2 */ |
|
- | 3247 | tmp = RREG32(SRBM_STATUS2); |
|
- | 3248 | if (tmp & DMA_BUSY) |
|
- | 3249 | reset_mask |= RADEON_RESET_DMA; |
|
- | 3250 | ||
- | 3251 | if (tmp & DMA1_BUSY) |
|
- | 3252 | reset_mask |= RADEON_RESET_DMA1; |
|
2115 | srbm_status = RREG32(SRBM_STATUS); |
3253 | |
- | 3254 | /* SRBM_STATUS */ |
|
- | 3255 | tmp = RREG32(SRBM_STATUS); |
|
- | 3256 | ||
- | 3257 | if (tmp & IH_BUSY) |
|
- | 3258 | reset_mask |= RADEON_RESET_IH; |
|
2116 | grbm_status = RREG32(GRBM_STATUS); |
3259 | |
- | 3260 | if (tmp & SEM_BUSY) |
|
- | 3261 | reset_mask |= RADEON_RESET_SEM; |
|
2117 | grbm_status2 = RREG32(GRBM_STATUS2); |
3262 | |
- | 3263 | if (tmp & GRBM_RQ_PENDING) |
|
- | 3264 | reset_mask |= RADEON_RESET_GRBM; |
|
- | 3265 | ||
- | 3266 | if (tmp & VMC_BUSY) |
|
- | 3267 | reset_mask |= RADEON_RESET_VMC; |
|
- | 3268 | ||
- | 3269 | if (tmp & (MCB_BUSY | MCB_NON_DISPLAY_BUSY | |
|
- | 3270 | MCC_BUSY | MCD_BUSY)) |
|
2118 | grbm_status_se0 = RREG32(GRBM_STATUS_SE0); |
3271 | reset_mask |= RADEON_RESET_MC; |
2119 | grbm_status_se1 = RREG32(GRBM_STATUS_SE1); |
3272 | |
- | 3273 | if (evergreen_is_display_hung(rdev)) |
|
- | 3274 | reset_mask |= RADEON_RESET_DISPLAY; |
|
- | 3275 | ||
2120 | if (!(grbm_status & GUI_ACTIVE)) { |
3276 | /* VM_L2_STATUS */ |
- | 3277 | tmp = RREG32(VM_L2_STATUS); |
|
- | 3278 | if (tmp & L2_BUSY) |
|
- | 3279 | reset_mask |= RADEON_RESET_VMC; |
|
- | 3280 | ||
- | 3281 | /* Skip MC reset as it's mostly likely not hung, just busy */ |
|
- | 3282 | if (reset_mask & RADEON_RESET_MC) { |
|
2121 | radeon_ring_lockup_update(ring); |
3283 | DRM_DEBUG("MC busy: 0x%08X, clearing.\n", reset_mask); |
- | 3284 | reset_mask &= ~RADEON_RESET_MC; |
|
2122 | return false; |
3285 | } |
2123 | } |
- | |
2124 | /* force CP activities */ |
- | |
2125 | radeon_ring_force_activity(rdev, ring); |
3286 | |
Line 2126... | Line 3287... | ||
2126 | return radeon_ring_test_lockup(rdev, ring); |
3287 | return reset_mask; |
2127 | } |
3288 | } |
- | 3289 | ||
2128 | 3290 | static void si_gpu_soft_reset(struct radeon_device *rdev, u32 reset_mask) |
|
- | 3291 | { |
|
Line 2129... | Line 3292... | ||
2129 | static void si_gpu_soft_reset_gfx(struct radeon_device *rdev) |
3292 | struct evergreen_mc_save save; |
2130 | { |
3293 | u32 grbm_soft_reset = 0, srbm_soft_reset = 0; |
Line 2131... | Line 3294... | ||
2131 | u32 grbm_reset = 0; |
3294 | u32 tmp; |
2132 | - | ||
- | 3295 | ||
2133 | if (!(RREG32(GRBM_STATUS) & GUI_ACTIVE)) |
3296 | if (reset_mask == 0) |
2134 | return; |
- | |
2135 | - | ||
2136 | dev_info(rdev->dev, " GRBM_STATUS=0x%08X\n", |
- | |
2137 | RREG32(GRBM_STATUS)); |
3297 | return; |
2138 | dev_info(rdev->dev, " GRBM_STATUS2=0x%08X\n", |
3298 | |
2139 | RREG32(GRBM_STATUS2)); |
3299 | dev_info(rdev->dev, "GPU softreset: 0x%08X\n", reset_mask); |
2140 | dev_info(rdev->dev, " GRBM_STATUS_SE0=0x%08X\n", |
3300 | |
Line 2141... | Line 3301... | ||
2141 | RREG32(GRBM_STATUS_SE0)); |
3301 | evergreen_print_gpu_status_regs(rdev); |
2142 | dev_info(rdev->dev, " GRBM_STATUS_SE1=0x%08X\n", |
3302 | dev_info(rdev->dev, " VM_CONTEXT1_PROTECTION_FAULT_ADDR 0x%08X\n", |
Line 2143... | Line 3303... | ||
2143 | RREG32(GRBM_STATUS_SE1)); |
3303 | RREG32(VM_CONTEXT1_PROTECTION_FAULT_ADDR)); |
- | 3304 | dev_info(rdev->dev, " VM_CONTEXT1_PROTECTION_FAULT_STATUS 0x%08X\n", |
|
- | 3305 | RREG32(VM_CONTEXT1_PROTECTION_FAULT_STATUS)); |
|
- | 3306 | ||
- | 3307 | /* Disable CP parsing/prefetching */ |
|
- | 3308 | WREG32(CP_ME_CNTL, CP_ME_HALT | CP_PFP_HALT | CP_CE_HALT); |
|
2144 | dev_info(rdev->dev, " SRBM_STATUS=0x%08X\n", |
3309 | |
- | 3310 | if (reset_mask & RADEON_RESET_DMA) { |
|
- | 3311 | /* dma0 */ |
|
- | 3312 | tmp = RREG32(DMA_RB_CNTL + DMA0_REGISTER_OFFSET); |
|
- | 3313 | tmp &= ~DMA_RB_ENABLE; |
|
- | 3314 | WREG32(DMA_RB_CNTL + DMA0_REGISTER_OFFSET, tmp); |
|
- | 3315 | } |
|
- | 3316 | if (reset_mask & RADEON_RESET_DMA1) { |
|
- | 3317 | /* dma1 */ |
|
- | 3318 | tmp = RREG32(DMA_RB_CNTL + DMA1_REGISTER_OFFSET); |
|
- | 3319 | tmp &= ~DMA_RB_ENABLE; |
|
- | 3320 | WREG32(DMA_RB_CNTL + DMA1_REGISTER_OFFSET, tmp); |
|
- | 3321 | } |
|
- | 3322 | ||
- | 3323 | udelay(50); |
|
2145 | RREG32(SRBM_STATUS)); |
3324 | |
2146 | 3325 | evergreen_mc_stop(rdev, &save); |
|
2147 | /* Disable CP parsing/prefetching */ |
3326 | if (evergreen_mc_wait_for_idle(rdev)) { |
2148 | WREG32(CP_ME_CNTL, CP_ME_HALT | CP_PFP_HALT | CP_CE_HALT); |
3327 | dev_warn(rdev->dev, "Wait for MC idle timedout !\n"); |
2149 | 3328 | } |
|
2150 | /* reset all the gfx blocks */ |
3329 | |
2151 | grbm_reset = (SOFT_RESET_CP | |
3330 | if (reset_mask & (RADEON_RESET_GFX | RADEON_RESET_COMPUTE | RADEON_RESET_CP)) { |
2152 | SOFT_RESET_CB | |
3331 | grbm_soft_reset = SOFT_RESET_CB | |
2153 | SOFT_RESET_DB | |
3332 | SOFT_RESET_DB | |
2154 | SOFT_RESET_GDS | |
3333 | SOFT_RESET_GDS | |
2155 | SOFT_RESET_PA | |
3334 | SOFT_RESET_PA | |
2156 | SOFT_RESET_SC | |
3335 | SOFT_RESET_SC | |
- | 3336 | SOFT_RESET_BCI | |
|
Line 2157... | Line -... | ||
2157 | SOFT_RESET_BCI | |
- | |
2158 | SOFT_RESET_SPI | |
- | |
2159 | SOFT_RESET_SX | |
3337 | SOFT_RESET_SPI | |
2160 | SOFT_RESET_TC | |
- | |
2161 | SOFT_RESET_TA | |
- | |
2162 | SOFT_RESET_VGT | |
3338 | SOFT_RESET_SX | |
Line 2163... | Line -... | ||
2163 | SOFT_RESET_IA); |
- | |
2164 | - | ||
2165 | dev_info(rdev->dev, " GRBM_SOFT_RESET=0x%08X\n", grbm_reset); |
- | |
2166 | WREG32(GRBM_SOFT_RESET, grbm_reset); |
- | |
2167 | (void)RREG32(GRBM_SOFT_RESET); |
- | |
2168 | udelay(50); |
- | |
2169 | WREG32(GRBM_SOFT_RESET, 0); |
- | |
2170 | (void)RREG32(GRBM_SOFT_RESET); |
- | |
2171 | 3339 | SOFT_RESET_TC | |
|
2172 | dev_info(rdev->dev, " GRBM_STATUS=0x%08X\n", |
- | |
2173 | RREG32(GRBM_STATUS)); |
3340 | SOFT_RESET_TA | |
Line 2174... | Line 3341... | ||
2174 | dev_info(rdev->dev, " GRBM_STATUS2=0x%08X\n", |
3341 | SOFT_RESET_VGT | |
2175 | RREG32(GRBM_STATUS2)); |
- | |
2176 | dev_info(rdev->dev, " GRBM_STATUS_SE0=0x%08X\n", |
3342 | SOFT_RESET_IA; |
Line 2177... | Line 3343... | ||
2177 | RREG32(GRBM_STATUS_SE0)); |
3343 | } |
2178 | dev_info(rdev->dev, " GRBM_STATUS_SE1=0x%08X\n", |
3344 | |
Line 2179... | Line 3345... | ||
2179 | RREG32(GRBM_STATUS_SE1)); |
3345 | if (reset_mask & RADEON_RESET_CP) { |
2180 | dev_info(rdev->dev, " SRBM_STATUS=0x%08X\n", |
3346 | grbm_soft_reset |= SOFT_RESET_CP | SOFT_RESET_VGT; |
Line 2181... | Line -... | ||
2181 | RREG32(SRBM_STATUS)); |
- | |
2182 | } |
3347 | |
2183 | 3348 | srbm_soft_reset |= SOFT_RESET_GRBM; |
|
2184 | static void si_gpu_soft_reset_dma(struct radeon_device *rdev) |
- | |
Line 2185... | Line -... | ||
2185 | { |
- | |
2186 | u32 tmp; |
3349 | } |
2187 | - | ||
2188 | if (RREG32(DMA_STATUS_REG) & DMA_IDLE) |
3350 | |
Line 2189... | Line -... | ||
2189 | return; |
- | |
2190 | - | ||
2191 | dev_info(rdev->dev, " DMA_STATUS_REG = 0x%08X\n", |
3351 | if (reset_mask & RADEON_RESET_DMA) |
2192 | RREG32(DMA_STATUS_REG)); |
- | |
2193 | 3352 | srbm_soft_reset |= SOFT_RESET_DMA; |
|
Line 2194... | Line 3353... | ||
2194 | /* dma0 */ |
3353 | |
2195 | tmp = RREG32(DMA_RB_CNTL + DMA0_REGISTER_OFFSET); |
3354 | if (reset_mask & RADEON_RESET_DMA1) |
2196 | tmp &= ~DMA_RB_ENABLE; |
- | |
Line 2197... | Line 3355... | ||
2197 | WREG32(DMA_RB_CNTL + DMA0_REGISTER_OFFSET, tmp); |
3355 | srbm_soft_reset |= SOFT_RESET_DMA1; |
2198 | - | ||
2199 | /* dma1 */ |
3356 | |
Line 2200... | Line 3357... | ||
2200 | tmp = RREG32(DMA_RB_CNTL + DMA1_REGISTER_OFFSET); |
3357 | if (reset_mask & RADEON_RESET_DISPLAY) |
2201 | tmp &= ~DMA_RB_ENABLE; |
3358 | srbm_soft_reset |= SOFT_RESET_DC; |
Line -... | Line 3359... | ||
- | 3359 | ||
- | 3360 | if (reset_mask & RADEON_RESET_RLC) |
|
- | 3361 | grbm_soft_reset |= SOFT_RESET_RLC; |
|
2202 | WREG32(DMA_RB_CNTL + DMA1_REGISTER_OFFSET, tmp); |
3362 | |
- | 3363 | if (reset_mask & RADEON_RESET_SEM) |
|
- | 3364 | srbm_soft_reset |= SOFT_RESET_SEM; |
|
Line 2203... | Line -... | ||
2203 | - | ||
2204 | /* Reset dma */ |
3365 | |
2205 | WREG32(SRBM_SOFT_RESET, SOFT_RESET_DMA | SOFT_RESET_DMA1); |
- | |
2206 | RREG32(SRBM_SOFT_RESET); |
- | |
Line 2207... | Line 3366... | ||
2207 | udelay(50); |
3366 | if (reset_mask & RADEON_RESET_IH) |
2208 | WREG32(SRBM_SOFT_RESET, 0); |
3367 | srbm_soft_reset |= SOFT_RESET_IH; |
2209 | 3368 | ||
2210 | dev_info(rdev->dev, " DMA_STATUS_REG = 0x%08X\n", |
3369 | if (reset_mask & RADEON_RESET_GRBM) |
Line -... | Line 3370... | ||
- | 3370 | srbm_soft_reset |= SOFT_RESET_GRBM; |
|
2211 | RREG32(DMA_STATUS_REG)); |
3371 | |
2212 | } |
3372 | if (reset_mask & RADEON_RESET_VMC) |
- | 3373 | srbm_soft_reset |= SOFT_RESET_VMC; |
|
- | 3374 | ||
- | 3375 | if (reset_mask & RADEON_RESET_MC) |
|
Line -... | Line 3376... | ||
- | 3376 | srbm_soft_reset |= SOFT_RESET_MC; |
|
- | 3377 | ||
- | 3378 | if (grbm_soft_reset) { |
|
2213 | 3379 | tmp = RREG32(GRBM_SOFT_RESET); |
|
2214 | static int si_gpu_soft_reset(struct radeon_device *rdev, u32 reset_mask) |
3380 | tmp |= grbm_soft_reset; |
- | 3381 | dev_info(rdev->dev, "GRBM_SOFT_RESET=0x%08X\n", tmp); |
|
Line 2215... | Line 3382... | ||
2215 | { |
3382 | WREG32(GRBM_SOFT_RESET, tmp); |
2216 | struct evergreen_mc_save save; |
3383 | tmp = RREG32(GRBM_SOFT_RESET); |
Line 2217... | Line 3384... | ||
2217 | 3384 | ||
2218 | if (reset_mask == 0) |
3385 | udelay(50); |
- | 3386 | ||
- | 3387 | tmp &= ~grbm_soft_reset; |
|
2219 | return 0; |
3388 | WREG32(GRBM_SOFT_RESET, tmp); |
Line 2220... | Line 3389... | ||
2220 | 3389 | tmp = RREG32(GRBM_SOFT_RESET); |
|
2221 | dev_info(rdev->dev, "GPU softreset: 0x%08X\n", reset_mask); |
3390 | } |
- | 3391 | ||
- | 3392 | if (srbm_soft_reset) { |
|
- | 3393 | tmp = RREG32(SRBM_SOFT_RESET); |
|
- | 3394 | tmp |= srbm_soft_reset; |
|
- | 3395 | dev_info(rdev->dev, "SRBM_SOFT_RESET=0x%08X\n", tmp); |
|
- | 3396 | WREG32(SRBM_SOFT_RESET, tmp); |
|
- | 3397 | tmp = RREG32(SRBM_SOFT_RESET); |
|
- | 3398 | ||
- | 3399 | udelay(50); |
|
- | 3400 | ||
- | 3401 | tmp &= ~srbm_soft_reset; |
|
- | 3402 | WREG32(SRBM_SOFT_RESET, tmp); |
|
- | 3403 | tmp = RREG32(SRBM_SOFT_RESET); |
|
- | 3404 | } |
|
- | 3405 | ||
- | 3406 | /* Wait a little for things to settle down */ |
|
- | 3407 | udelay(50); |
|
- | 3408 | ||
- | 3409 | evergreen_mc_resume(rdev, &save); |
|
- | 3410 | udelay(50); |
|
- | 3411 | ||
- | 3412 | evergreen_print_gpu_status_regs(rdev); |
|
- | 3413 | } |
|
- | 3414 | ||
- | 3415 | int si_asic_reset(struct radeon_device *rdev) |
|
- | 3416 | { |
|
- | 3417 | u32 reset_mask; |
|
- | 3418 | ||
- | 3419 | reset_mask = si_gpu_check_soft_reset(rdev); |
|
- | 3420 | ||
2222 | 3421 | if (reset_mask) |
|
2223 | dev_info(rdev->dev, " VM_CONTEXT1_PROTECTION_FAULT_ADDR 0x%08X\n", |
3422 | r600_set_bios_scratch_engine_hung(rdev, true); |
2224 | RREG32(VM_CONTEXT1_PROTECTION_FAULT_ADDR)); |
3423 | |
- | 3424 | si_gpu_soft_reset(rdev, reset_mask); |
|
- | 3425 | ||
- | 3426 | reset_mask = si_gpu_check_soft_reset(rdev); |
|
- | 3427 | ||
- | 3428 | if (!reset_mask) |
|
- | 3429 | r600_set_bios_scratch_engine_hung(rdev, false); |
|
- | 3430 | ||
- | 3431 | return 0; |
|
- | 3432 | } |
|
- | 3433 | ||
- | 3434 | /** |
|
- | 3435 | * si_gfx_is_lockup - Check if the GFX engine is locked up |
|
- | 3436 | * |
|
- | 3437 | * @rdev: radeon_device pointer |
|
- | 3438 | * @ring: radeon_ring structure holding ring information |
|
- | 3439 | * |
|
- | 3440 | * Check if the GFX engine is locked up. |
|
- | 3441 | * Returns true if the engine appears to be locked up, false if not. |
|
- | 3442 | */ |
|
- | 3443 | bool si_gfx_is_lockup(struct radeon_device *rdev, struct radeon_ring *ring) |
|
- | 3444 | { |
|
- | 3445 | u32 reset_mask = si_gpu_check_soft_reset(rdev); |
|
- | 3446 | ||
- | 3447 | if (!(reset_mask & (RADEON_RESET_GFX | |
|
- | 3448 | RADEON_RESET_COMPUTE | |
|
- | 3449 | RADEON_RESET_CP))) { |
|
- | 3450 | radeon_ring_lockup_update(ring); |
|
- | 3451 | return false; |
|
- | 3452 | } |
|
- | 3453 | /* force CP activities */ |
|
- | 3454 | radeon_ring_force_activity(rdev, ring); |
|
- | 3455 | return radeon_ring_test_lockup(rdev, ring); |
|
- | 3456 | } |
|
- | 3457 | ||
2225 | dev_info(rdev->dev, " VM_CONTEXT1_PROTECTION_FAULT_STATUS 0x%08X\n", |
3458 | /** |
Line 2226... | Line 3459... | ||
2226 | RREG32(VM_CONTEXT1_PROTECTION_FAULT_STATUS)); |
3459 | * si_dma_is_lockup - Check if the DMA engine is locked up |
2227 | 3460 | * |
|
2228 | evergreen_mc_stop(rdev, &save); |
3461 | * @rdev: radeon_device pointer |
Line 2269... | Line 3502... | ||
2269 | 3502 | ||
2270 | evergreen_mc_stop(rdev, &save); |
3503 | evergreen_mc_stop(rdev, &save); |
2271 | if (radeon_mc_wait_for_idle(rdev)) { |
3504 | if (radeon_mc_wait_for_idle(rdev)) { |
2272 | dev_warn(rdev->dev, "Wait for MC idle timedout !\n"); |
3505 | dev_warn(rdev->dev, "Wait for MC idle timedout !\n"); |
- | 3506 | } |
|
2273 | } |
3507 | if (!ASIC_IS_NODCE(rdev)) |
2274 | /* Lockout access through VGA aperture*/ |
3508 | /* Lockout access through VGA aperture*/ |
2275 | WREG32(VGA_HDP_CONTROL, VGA_MEMORY_DISABLE); |
3509 | WREG32(VGA_HDP_CONTROL, VGA_MEMORY_DISABLE); |
2276 | /* Update configuration */ |
3510 | /* Update configuration */ |
2277 | WREG32(MC_VM_SYSTEM_APERTURE_LOW_ADDR, |
3511 | WREG32(MC_VM_SYSTEM_APERTURE_LOW_ADDR, |
Line 2292... | Line 3526... | ||
2292 | WREG32(MC_VM_AGP_BOT, 0x0FFFFFFF); |
3526 | WREG32(MC_VM_AGP_BOT, 0x0FFFFFFF); |
2293 | if (radeon_mc_wait_for_idle(rdev)) { |
3527 | if (radeon_mc_wait_for_idle(rdev)) { |
2294 | dev_warn(rdev->dev, "Wait for MC idle timedout !\n"); |
3528 | dev_warn(rdev->dev, "Wait for MC idle timedout !\n"); |
2295 | } |
3529 | } |
2296 | evergreen_mc_resume(rdev, &save); |
3530 | evergreen_mc_resume(rdev, &save); |
- | 3531 | if (!ASIC_IS_NODCE(rdev)) { |
|
2297 | /* we need to own VRAM, so turn off the VGA renderer here |
3532 | /* we need to own VRAM, so turn off the VGA renderer here |
2298 | * to stop it overwriting our objects */ |
3533 | * to stop it overwriting our objects */ |
2299 | rv515_vga_render_disable(rdev); |
3534 | rv515_vga_render_disable(rdev); |
2300 | } |
3535 | } |
2301 | - | ||
2302 | /* SI MC address space is 40 bits */ |
- | |
2303 | static void si_vram_location(struct radeon_device *rdev, |
- | |
2304 | struct radeon_mc *mc, u64 base) |
- | |
2305 | { |
- | |
2306 | mc->vram_start = base; |
- | |
2307 | if (mc->mc_vram_size > (0xFFFFFFFFFFULL - base + 1)) { |
- | |
2308 | dev_warn(rdev->dev, "limiting VRAM to PCI aperture size\n"); |
- | |
2309 | mc->real_vram_size = mc->aper_size; |
- | |
2310 | mc->mc_vram_size = mc->aper_size; |
- | |
2311 | } |
- | |
2312 | mc->vram_end = mc->vram_start + mc->mc_vram_size - 1; |
- | |
2313 | dev_info(rdev->dev, "VRAM: %lluM 0x%016llX - 0x%016llX (%lluM used)\n", |
- | |
2314 | mc->mc_vram_size >> 20, mc->vram_start, |
- | |
2315 | mc->vram_end, mc->real_vram_size >> 20); |
- | |
2316 | } |
- | |
2317 | - | ||
2318 | static void si_gtt_location(struct radeon_device *rdev, struct radeon_mc *mc) |
- | |
2319 | { |
- | |
2320 | u64 size_af, size_bf; |
- | |
2321 | - | ||
2322 | size_af = ((0xFFFFFFFFFFULL - mc->vram_end) + mc->gtt_base_align) & ~mc->gtt_base_align; |
- | |
2323 | size_bf = mc->vram_start & ~mc->gtt_base_align; |
- | |
2324 | if (size_bf > size_af) { |
- | |
2325 | if (mc->gtt_size > size_bf) { |
- | |
2326 | dev_warn(rdev->dev, "limiting GTT\n"); |
- | |
2327 | mc->gtt_size = size_bf; |
- | |
2328 | } |
- | |
2329 | mc->gtt_start = (mc->vram_start & ~mc->gtt_base_align) - mc->gtt_size; |
- | |
2330 | } else { |
- | |
2331 | if (mc->gtt_size > size_af) { |
- | |
2332 | dev_warn(rdev->dev, "limiting GTT\n"); |
- | |
2333 | mc->gtt_size = size_af; |
- | |
2334 | } |
- | |
2335 | mc->gtt_start = (mc->vram_end + 1 + mc->gtt_base_align) & ~mc->gtt_base_align; |
- | |
2336 | } |
- | |
2337 | mc->gtt_end = mc->gtt_start + mc->gtt_size - 1; |
- | |
2338 | dev_info(rdev->dev, "GTT: %lluM 0x%016llX - 0x%016llX\n", |
- | |
2339 | mc->gtt_size >> 20, mc->gtt_start, mc->gtt_end); |
- | |
2340 | } |
3536 | } |
Line 2341... | Line 3537... | ||
2341 | 3537 | ||
2342 | static void si_vram_gtt_location(struct radeon_device *rdev, |
3538 | static void si_vram_gtt_location(struct radeon_device *rdev, |
2343 | struct radeon_mc *mc) |
3539 | struct radeon_mc *mc) |
Line 2346... | Line 3542... | ||
2346 | /* leave room for at least 1024M GTT */ |
3542 | /* leave room for at least 1024M GTT */ |
2347 | dev_warn(rdev->dev, "limiting VRAM\n"); |
3543 | dev_warn(rdev->dev, "limiting VRAM\n"); |
2348 | mc->real_vram_size = 0xFFC0000000ULL; |
3544 | mc->real_vram_size = 0xFFC0000000ULL; |
2349 | mc->mc_vram_size = 0xFFC0000000ULL; |
3545 | mc->mc_vram_size = 0xFFC0000000ULL; |
2350 | } |
3546 | } |
2351 | si_vram_location(rdev, &rdev->mc, 0); |
3547 | radeon_vram_location(rdev, &rdev->mc, 0); |
2352 | rdev->mc.gtt_base_align = 0; |
3548 | rdev->mc.gtt_base_align = 0; |
2353 | si_gtt_location(rdev, mc); |
3549 | radeon_gtt_location(rdev, mc); |
2354 | } |
3550 | } |
Line 2355... | Line 3551... | ||
2355 | 3551 | ||
2356 | static int si_mc_init(struct radeon_device *rdev) |
3552 | static int si_mc_init(struct radeon_device *rdev) |
2357 | { |
3553 | { |
Line 2402... | Line 3598... | ||
2402 | rdev->mc.vram_width = numchan * chansize; |
3598 | rdev->mc.vram_width = numchan * chansize; |
2403 | /* Could aper size report 0 ? */ |
3599 | /* Could aper size report 0 ? */ |
2404 | rdev->mc.aper_base = pci_resource_start(rdev->pdev, 0); |
3600 | rdev->mc.aper_base = pci_resource_start(rdev->pdev, 0); |
2405 | rdev->mc.aper_size = pci_resource_len(rdev->pdev, 0); |
3601 | rdev->mc.aper_size = pci_resource_len(rdev->pdev, 0); |
2406 | /* size in MB on si */ |
3602 | /* size in MB on si */ |
2407 | rdev->mc.mc_vram_size = RREG32(CONFIG_MEMSIZE) * 1024 * 1024; |
3603 | rdev->mc.mc_vram_size = RREG32(CONFIG_MEMSIZE) * 1024ULL * 1024ULL; |
2408 | rdev->mc.real_vram_size = RREG32(CONFIG_MEMSIZE) * 1024 * 1024; |
3604 | rdev->mc.real_vram_size = RREG32(CONFIG_MEMSIZE) * 1024ULL * 1024ULL; |
2409 | rdev->mc.visible_vram_size = rdev->mc.aper_size; |
3605 | rdev->mc.visible_vram_size = rdev->mc.aper_size; |
2410 | si_vram_gtt_location(rdev, &rdev->mc); |
3606 | si_vram_gtt_location(rdev, &rdev->mc); |
2411 | radeon_update_bandwidth_info(rdev); |
3607 | radeon_update_bandwidth_info(rdev); |
Line 2412... | Line 3608... | ||
2412 | 3608 | ||
Line 2847... | Line 4043... | ||
2847 | u32 idx = 0; |
4043 | u32 idx = 0; |
2848 | struct radeon_cs_packet pkt; |
4044 | struct radeon_cs_packet pkt; |
Line 2849... | Line 4045... | ||
2849 | 4045 | ||
2850 | do { |
4046 | do { |
2851 | pkt.idx = idx; |
4047 | pkt.idx = idx; |
2852 | pkt.type = CP_PACKET_GET_TYPE(ib->ptr[idx]); |
4048 | pkt.type = RADEON_CP_PACKET_GET_TYPE(ib->ptr[idx]); |
2853 | pkt.count = CP_PACKET_GET_COUNT(ib->ptr[idx]); |
4049 | pkt.count = RADEON_CP_PACKET_GET_COUNT(ib->ptr[idx]); |
2854 | pkt.one_reg_wr = 0; |
4050 | pkt.one_reg_wr = 0; |
2855 | switch (pkt.type) { |
4051 | switch (pkt.type) { |
2856 | case PACKET_TYPE0: |
4052 | case RADEON_PACKET_TYPE0: |
2857 | dev_err(rdev->dev, "Packet0 not allowed!\n"); |
4053 | dev_err(rdev->dev, "Packet0 not allowed!\n"); |
2858 | ret = -EINVAL; |
4054 | ret = -EINVAL; |
2859 | break; |
4055 | break; |
2860 | case PACKET_TYPE2: |
4056 | case RADEON_PACKET_TYPE2: |
2861 | idx += 1; |
4057 | idx += 1; |
2862 | break; |
4058 | break; |
2863 | case PACKET_TYPE3: |
4059 | case RADEON_PACKET_TYPE3: |
2864 | pkt.opcode = CP_PACKET3_GET_OPCODE(ib->ptr[idx]); |
4060 | pkt.opcode = RADEON_CP_PACKET3_GET_OPCODE(ib->ptr[idx]); |
2865 | if (ib->is_const_ib) |
4061 | if (ib->is_const_ib) |
2866 | ret = si_vm_packet3_ce_check(rdev, ib->ptr, &pkt); |
4062 | ret = si_vm_packet3_ce_check(rdev, ib->ptr, &pkt); |
2867 | else { |
4063 | else { |
2868 | switch (ib->ring) { |
4064 | switch (ib->ring) { |
Line 2912... | Line 4108... | ||
2912 | 4108 | ||
2913 | /** |
4109 | /** |
2914 | * si_vm_set_page - update the page tables using the CP |
4110 | * si_vm_set_page - update the page tables using the CP |
2915 | * |
4111 | * |
- | 4112 | * @rdev: radeon_device pointer |
|
2916 | * @rdev: radeon_device pointer |
4113 | * @ib: indirect buffer to fill with commands |
2917 | * @pe: addr of the page entry |
4114 | * @pe: addr of the page entry |
2918 | * @addr: dst addr to write into pe |
4115 | * @addr: dst addr to write into pe |
2919 | * @count: number of page entries to update |
4116 | * @count: number of page entries to update |
2920 | * @incr: increase next addr by incr bytes |
4117 | * @incr: increase next addr by incr bytes |
2921 | * @flags: access flags |
4118 | * @flags: access flags |
2922 | * |
4119 | * |
2923 | * Update the page tables using the CP (cayman-si). |
4120 | * Update the page tables using the CP (SI). |
2924 | */ |
4121 | */ |
- | 4122 | void si_vm_set_page(struct radeon_device *rdev, |
|
- | 4123 | struct radeon_ib *ib, |
|
2925 | void si_vm_set_page(struct radeon_device *rdev, uint64_t pe, |
4124 | uint64_t pe, |
2926 | uint64_t addr, unsigned count, |
4125 | uint64_t addr, unsigned count, |
2927 | uint32_t incr, uint32_t flags) |
4126 | uint32_t incr, uint32_t flags) |
2928 | { |
- | |
2929 | struct radeon_ring *ring = &rdev->ring[rdev->asic->vm.pt_ring_index]; |
4127 | { |
2930 | uint32_t r600_flags = cayman_vm_page_flags(rdev, flags); |
4128 | uint32_t r600_flags = cayman_vm_page_flags(rdev, flags); |
2931 | uint64_t value; |
4129 | uint64_t value; |
Line 2932... | Line 4130... | ||
2932 | unsigned ndw; |
4130 | unsigned ndw; |
2933 | 4131 | ||
2934 | if (rdev->asic->vm.pt_ring_index == RADEON_RING_TYPE_GFX_INDEX) { |
4132 | if (rdev->asic->vm.pt_ring_index == RADEON_RING_TYPE_GFX_INDEX) { |
2935 | while (count) { |
4133 | while (count) { |
2936 | ndw = 2 + count * 2; |
4134 | ndw = 2 + count * 2; |
Line 2937... | Line 4135... | ||
2937 | if (ndw > 0x3FFE) |
4135 | if (ndw > 0x3FFE) |
2938 | ndw = 0x3FFE; |
4136 | ndw = 0x3FFE; |
2939 | 4137 | ||
2940 | radeon_ring_write(ring, PACKET3(PACKET3_WRITE_DATA, ndw)); |
4138 | ib->ptr[ib->length_dw++] = PACKET3(PACKET3_WRITE_DATA, ndw); |
2941 | radeon_ring_write(ring, (WRITE_DATA_ENGINE_SEL(0) | |
4139 | ib->ptr[ib->length_dw++] = (WRITE_DATA_ENGINE_SEL(0) | |
2942 | WRITE_DATA_DST_SEL(1))); |
4140 | WRITE_DATA_DST_SEL(1)); |
2943 | radeon_ring_write(ring, pe); |
4141 | ib->ptr[ib->length_dw++] = pe; |
2944 | radeon_ring_write(ring, upper_32_bits(pe)); |
4142 | ib->ptr[ib->length_dw++] = upper_32_bits(pe); |
2945 | for (; ndw > 2; ndw -= 2, --count, pe += 8) { |
4143 | for (; ndw > 2; ndw -= 2, --count, pe += 8) { |
2946 | if (flags & RADEON_VM_PAGE_SYSTEM) { |
4144 | if (flags & RADEON_VM_PAGE_SYSTEM) { |
Line 2951... | Line 4149... | ||
2951 | } else { |
4149 | } else { |
2952 | value = 0; |
4150 | value = 0; |
2953 | } |
4151 | } |
2954 | addr += incr; |
4152 | addr += incr; |
2955 | value |= r600_flags; |
4153 | value |= r600_flags; |
2956 | radeon_ring_write(ring, value); |
4154 | ib->ptr[ib->length_dw++] = value; |
2957 | radeon_ring_write(ring, upper_32_bits(value)); |
4155 | ib->ptr[ib->length_dw++] = upper_32_bits(value); |
2958 | } |
4156 | } |
2959 | } |
4157 | } |
2960 | } else { |
4158 | } else { |
2961 | /* DMA */ |
4159 | /* DMA */ |
2962 | if (flags & RADEON_VM_PAGE_SYSTEM) { |
4160 | if (flags & RADEON_VM_PAGE_SYSTEM) { |
Line 2964... | Line 4162... | ||
2964 | ndw = count * 2; |
4162 | ndw = count * 2; |
2965 | if (ndw > 0xFFFFE) |
4163 | if (ndw > 0xFFFFE) |
2966 | ndw = 0xFFFFE; |
4164 | ndw = 0xFFFFE; |
Line 2967... | Line 4165... | ||
2967 | 4165 | ||
2968 | /* for non-physically contiguous pages (system) */ |
4166 | /* for non-physically contiguous pages (system) */ |
2969 | radeon_ring_write(ring, DMA_PACKET(DMA_PACKET_WRITE, 0, 0, 0, ndw)); |
4167 | ib->ptr[ib->length_dw++] = DMA_PACKET(DMA_PACKET_WRITE, 0, 0, 0, ndw); |
2970 | radeon_ring_write(ring, pe); |
4168 | ib->ptr[ib->length_dw++] = pe; |
2971 | radeon_ring_write(ring, upper_32_bits(pe) & 0xff); |
4169 | ib->ptr[ib->length_dw++] = upper_32_bits(pe) & 0xff; |
2972 | for (; ndw > 0; ndw -= 2, --count, pe += 8) { |
4170 | for (; ndw > 0; ndw -= 2, --count, pe += 8) { |
2973 | if (flags & RADEON_VM_PAGE_SYSTEM) { |
4171 | if (flags & RADEON_VM_PAGE_SYSTEM) { |
2974 | value = radeon_vm_map_gart(rdev, addr); |
4172 | value = radeon_vm_map_gart(rdev, addr); |
2975 | value &= 0xFFFFFFFFFFFFF000ULL; |
4173 | value &= 0xFFFFFFFFFFFFF000ULL; |
Line 2978... | Line 4176... | ||
2978 | } else { |
4176 | } else { |
2979 | value = 0; |
4177 | value = 0; |
2980 | } |
4178 | } |
2981 | addr += incr; |
4179 | addr += incr; |
2982 | value |= r600_flags; |
4180 | value |= r600_flags; |
2983 | radeon_ring_write(ring, value); |
4181 | ib->ptr[ib->length_dw++] = value; |
2984 | radeon_ring_write(ring, upper_32_bits(value)); |
4182 | ib->ptr[ib->length_dw++] = upper_32_bits(value); |
2985 | } |
4183 | } |
2986 | } |
4184 | } |
2987 | } else { |
4185 | } else { |
2988 | while (count) { |
4186 | while (count) { |
2989 | ndw = count * 2; |
4187 | ndw = count * 2; |
Line 2993... | Line 4191... | ||
2993 | if (flags & RADEON_VM_PAGE_VALID) |
4191 | if (flags & RADEON_VM_PAGE_VALID) |
2994 | value = addr; |
4192 | value = addr; |
2995 | else |
4193 | else |
2996 | value = 0; |
4194 | value = 0; |
2997 | /* for physically contiguous pages (vram) */ |
4195 | /* for physically contiguous pages (vram) */ |
2998 | radeon_ring_write(ring, DMA_PTE_PDE_PACKET(ndw)); |
4196 | ib->ptr[ib->length_dw++] = DMA_PTE_PDE_PACKET(ndw); |
2999 | radeon_ring_write(ring, pe); /* dst addr */ |
4197 | ib->ptr[ib->length_dw++] = pe; /* dst addr */ |
3000 | radeon_ring_write(ring, upper_32_bits(pe) & 0xff); |
4198 | ib->ptr[ib->length_dw++] = upper_32_bits(pe) & 0xff; |
3001 | radeon_ring_write(ring, r600_flags); /* mask */ |
4199 | ib->ptr[ib->length_dw++] = r600_flags; /* mask */ |
3002 | radeon_ring_write(ring, 0); |
4200 | ib->ptr[ib->length_dw++] = 0; |
3003 | radeon_ring_write(ring, value); /* value */ |
4201 | ib->ptr[ib->length_dw++] = value; /* value */ |
3004 | radeon_ring_write(ring, upper_32_bits(value)); |
4202 | ib->ptr[ib->length_dw++] = upper_32_bits(value); |
3005 | radeon_ring_write(ring, incr); /* increment size */ |
4203 | ib->ptr[ib->length_dw++] = incr; /* increment size */ |
3006 | radeon_ring_write(ring, 0); |
4204 | ib->ptr[ib->length_dw++] = 0; |
3007 | pe += ndw * 4; |
4205 | pe += ndw * 4; |
3008 | addr += (ndw / 2) * incr; |
4206 | addr += (ndw / 2) * incr; |
3009 | count -= ndw / 2; |
4207 | count -= ndw / 2; |
3010 | } |
4208 | } |
3011 | } |
4209 | } |
- | 4210 | while (ib->length_dw & 0x7) |
|
- | 4211 | ib->ptr[ib->length_dw++] = DMA_PACKET(DMA_PACKET_NOP, 0, 0, 0, 0); |
|
3012 | } |
4212 | } |
3013 | } |
4213 | } |
Line 3014... | Line 4214... | ||
3014 | 4214 | ||
3015 | void si_vm_flush(struct radeon_device *rdev, int ridx, struct radeon_vm *vm) |
4215 | void si_vm_flush(struct radeon_device *rdev, int ridx, struct radeon_vm *vm) |
Line 3252... | Line 4452... | ||
3252 | tmp = RREG32(DMA_CNTL + DMA0_REGISTER_OFFSET) & ~TRAP_ENABLE; |
4452 | tmp = RREG32(DMA_CNTL + DMA0_REGISTER_OFFSET) & ~TRAP_ENABLE; |
3253 | WREG32(DMA_CNTL + DMA0_REGISTER_OFFSET, tmp); |
4453 | WREG32(DMA_CNTL + DMA0_REGISTER_OFFSET, tmp); |
3254 | tmp = RREG32(DMA_CNTL + DMA1_REGISTER_OFFSET) & ~TRAP_ENABLE; |
4454 | tmp = RREG32(DMA_CNTL + DMA1_REGISTER_OFFSET) & ~TRAP_ENABLE; |
3255 | WREG32(DMA_CNTL + DMA1_REGISTER_OFFSET, tmp); |
4455 | WREG32(DMA_CNTL + DMA1_REGISTER_OFFSET, tmp); |
3256 | WREG32(GRBM_INT_CNTL, 0); |
4456 | WREG32(GRBM_INT_CNTL, 0); |
- | 4457 | if (rdev->num_crtc >= 2) { |
|
3257 | WREG32(INT_MASK + EVERGREEN_CRTC0_REGISTER_OFFSET, 0); |
4458 | WREG32(INT_MASK + EVERGREEN_CRTC0_REGISTER_OFFSET, 0); |
3258 | WREG32(INT_MASK + EVERGREEN_CRTC1_REGISTER_OFFSET, 0); |
4459 | WREG32(INT_MASK + EVERGREEN_CRTC1_REGISTER_OFFSET, 0); |
- | 4460 | } |
|
3259 | if (rdev->num_crtc >= 4) { |
4461 | if (rdev->num_crtc >= 4) { |
3260 | WREG32(INT_MASK + EVERGREEN_CRTC2_REGISTER_OFFSET, 0); |
4462 | WREG32(INT_MASK + EVERGREEN_CRTC2_REGISTER_OFFSET, 0); |
3261 | WREG32(INT_MASK + EVERGREEN_CRTC3_REGISTER_OFFSET, 0); |
4463 | WREG32(INT_MASK + EVERGREEN_CRTC3_REGISTER_OFFSET, 0); |
3262 | } |
4464 | } |
3263 | if (rdev->num_crtc >= 6) { |
4465 | if (rdev->num_crtc >= 6) { |
3264 | WREG32(INT_MASK + EVERGREEN_CRTC4_REGISTER_OFFSET, 0); |
4466 | WREG32(INT_MASK + EVERGREEN_CRTC4_REGISTER_OFFSET, 0); |
3265 | WREG32(INT_MASK + EVERGREEN_CRTC5_REGISTER_OFFSET, 0); |
4467 | WREG32(INT_MASK + EVERGREEN_CRTC5_REGISTER_OFFSET, 0); |
3266 | } |
4468 | } |
Line -... | Line 4469... | ||
- | 4469 | ||
3267 | 4470 | if (rdev->num_crtc >= 2) { |
|
3268 | WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC0_REGISTER_OFFSET, 0); |
4471 | WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC0_REGISTER_OFFSET, 0); |
- | 4472 | WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC1_REGISTER_OFFSET, 0); |
|
3269 | WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC1_REGISTER_OFFSET, 0); |
4473 | } |
3270 | if (rdev->num_crtc >= 4) { |
4474 | if (rdev->num_crtc >= 4) { |
3271 | WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC2_REGISTER_OFFSET, 0); |
4475 | WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC2_REGISTER_OFFSET, 0); |
3272 | WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC3_REGISTER_OFFSET, 0); |
4476 | WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC3_REGISTER_OFFSET, 0); |
3273 | } |
4477 | } |
3274 | if (rdev->num_crtc >= 6) { |
4478 | if (rdev->num_crtc >= 6) { |
3275 | WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC4_REGISTER_OFFSET, 0); |
4479 | WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC4_REGISTER_OFFSET, 0); |
3276 | WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC5_REGISTER_OFFSET, 0); |
4480 | WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC5_REGISTER_OFFSET, 0); |
Line -... | Line 4481... | ||
- | 4481 | } |
|
3277 | } |
4482 | |
Line 3278... | Line 4483... | ||
3278 | 4483 | if (!ASIC_IS_NODCE(rdev)) { |
|
3279 | WREG32(DACA_AUTODETECT_INT_CONTROL, 0); |
4484 | WREG32(DACA_AUTODETECT_INT_CONTROL, 0); |
3280 | 4485 | ||
Line 3288... | Line 4493... | ||
3288 | WREG32(DC_HPD4_INT_CONTROL, tmp); |
4493 | WREG32(DC_HPD4_INT_CONTROL, tmp); |
3289 | tmp = RREG32(DC_HPD5_INT_CONTROL) & DC_HPDx_INT_POLARITY; |
4494 | tmp = RREG32(DC_HPD5_INT_CONTROL) & DC_HPDx_INT_POLARITY; |
3290 | WREG32(DC_HPD5_INT_CONTROL, tmp); |
4495 | WREG32(DC_HPD5_INT_CONTROL, tmp); |
3291 | tmp = RREG32(DC_HPD6_INT_CONTROL) & DC_HPDx_INT_POLARITY; |
4496 | tmp = RREG32(DC_HPD6_INT_CONTROL) & DC_HPDx_INT_POLARITY; |
3292 | WREG32(DC_HPD6_INT_CONTROL, tmp); |
4497 | WREG32(DC_HPD6_INT_CONTROL, tmp); |
3293 | 4498 | } |
|
3294 | } |
4499 | } |
Line 3295... | Line 4500... | ||
3295 | 4500 | ||
3296 | static int si_irq_init(struct radeon_device *rdev) |
4501 | static int si_irq_init(struct radeon_device *rdev) |
3297 | { |
4502 | { |
Line 3367... | Line 4572... | ||
3367 | int si_irq_set(struct radeon_device *rdev) |
4572 | int si_irq_set(struct radeon_device *rdev) |
3368 | { |
4573 | { |
3369 | u32 cp_int_cntl = CNTX_BUSY_INT_ENABLE | CNTX_EMPTY_INT_ENABLE; |
4574 | u32 cp_int_cntl = CNTX_BUSY_INT_ENABLE | CNTX_EMPTY_INT_ENABLE; |
3370 | u32 cp_int_cntl1 = 0, cp_int_cntl2 = 0; |
4575 | u32 cp_int_cntl1 = 0, cp_int_cntl2 = 0; |
3371 | u32 crtc1 = 0, crtc2 = 0, crtc3 = 0, crtc4 = 0, crtc5 = 0, crtc6 = 0; |
4576 | u32 crtc1 = 0, crtc2 = 0, crtc3 = 0, crtc4 = 0, crtc5 = 0, crtc6 = 0; |
3372 | u32 hpd1, hpd2, hpd3, hpd4, hpd5, hpd6; |
4577 | u32 hpd1 = 0, hpd2 = 0, hpd3 = 0, hpd4 = 0, hpd5 = 0, hpd6 = 0; |
3373 | u32 grbm_int_cntl = 0; |
4578 | u32 grbm_int_cntl = 0; |
3374 | u32 grph1 = 0, grph2 = 0, grph3 = 0, grph4 = 0, grph5 = 0, grph6 = 0; |
4579 | u32 grph1 = 0, grph2 = 0, grph3 = 0, grph4 = 0, grph5 = 0, grph6 = 0; |
3375 | u32 dma_cntl, dma_cntl1; |
4580 | u32 dma_cntl, dma_cntl1; |
Line 3376... | Line 4581... | ||
3376 | 4581 | ||
Line 3384... | Line 4589... | ||
3384 | /* force the active interrupt state to all disabled */ |
4589 | /* force the active interrupt state to all disabled */ |
3385 | si_disable_interrupt_state(rdev); |
4590 | si_disable_interrupt_state(rdev); |
3386 | return 0; |
4591 | return 0; |
3387 | } |
4592 | } |
Line -... | Line 4593... | ||
- | 4593 | ||
3388 | 4594 | if (!ASIC_IS_NODCE(rdev)) { |
|
3389 | hpd1 = RREG32(DC_HPD1_INT_CONTROL) & ~DC_HPDx_INT_EN; |
4595 | hpd1 = RREG32(DC_HPD1_INT_CONTROL) & ~DC_HPDx_INT_EN; |
3390 | hpd2 = RREG32(DC_HPD2_INT_CONTROL) & ~DC_HPDx_INT_EN; |
4596 | hpd2 = RREG32(DC_HPD2_INT_CONTROL) & ~DC_HPDx_INT_EN; |
3391 | hpd3 = RREG32(DC_HPD3_INT_CONTROL) & ~DC_HPDx_INT_EN; |
4597 | hpd3 = RREG32(DC_HPD3_INT_CONTROL) & ~DC_HPDx_INT_EN; |
3392 | hpd4 = RREG32(DC_HPD4_INT_CONTROL) & ~DC_HPDx_INT_EN; |
4598 | hpd4 = RREG32(DC_HPD4_INT_CONTROL) & ~DC_HPDx_INT_EN; |
3393 | hpd5 = RREG32(DC_HPD5_INT_CONTROL) & ~DC_HPDx_INT_EN; |
4599 | hpd5 = RREG32(DC_HPD5_INT_CONTROL) & ~DC_HPDx_INT_EN; |
- | 4600 | hpd6 = RREG32(DC_HPD6_INT_CONTROL) & ~DC_HPDx_INT_EN; |
|
Line 3394... | Line 4601... | ||
3394 | hpd6 = RREG32(DC_HPD6_INT_CONTROL) & ~DC_HPDx_INT_EN; |
4601 | } |
3395 | 4602 | ||
Line 3396... | Line 4603... | ||
3396 | dma_cntl = RREG32(DMA_CNTL + DMA0_REGISTER_OFFSET) & ~TRAP_ENABLE; |
4603 | dma_cntl = RREG32(DMA_CNTL + DMA0_REGISTER_OFFSET) & ~TRAP_ENABLE; |
Line 3480... | Line 4687... | ||
3480 | WREG32(DMA_CNTL + DMA0_REGISTER_OFFSET, dma_cntl); |
4687 | WREG32(DMA_CNTL + DMA0_REGISTER_OFFSET, dma_cntl); |
3481 | WREG32(DMA_CNTL + DMA1_REGISTER_OFFSET, dma_cntl1); |
4688 | WREG32(DMA_CNTL + DMA1_REGISTER_OFFSET, dma_cntl1); |
Line 3482... | Line 4689... | ||
3482 | 4689 | ||
Line -... | Line 4690... | ||
- | 4690 | WREG32(GRBM_INT_CNTL, grbm_int_cntl); |
|
3483 | WREG32(GRBM_INT_CNTL, grbm_int_cntl); |
4691 | |
3484 | 4692 | if (rdev->num_crtc >= 2) { |
|
- | 4693 | WREG32(INT_MASK + EVERGREEN_CRTC0_REGISTER_OFFSET, crtc1); |
|
3485 | WREG32(INT_MASK + EVERGREEN_CRTC0_REGISTER_OFFSET, crtc1); |
4694 | WREG32(INT_MASK + EVERGREEN_CRTC1_REGISTER_OFFSET, crtc2); |
3486 | WREG32(INT_MASK + EVERGREEN_CRTC1_REGISTER_OFFSET, crtc2); |
4695 | } |
3487 | if (rdev->num_crtc >= 4) { |
4696 | if (rdev->num_crtc >= 4) { |
3488 | WREG32(INT_MASK + EVERGREEN_CRTC2_REGISTER_OFFSET, crtc3); |
4697 | WREG32(INT_MASK + EVERGREEN_CRTC2_REGISTER_OFFSET, crtc3); |
3489 | WREG32(INT_MASK + EVERGREEN_CRTC3_REGISTER_OFFSET, crtc4); |
4698 | WREG32(INT_MASK + EVERGREEN_CRTC3_REGISTER_OFFSET, crtc4); |
3490 | } |
4699 | } |
3491 | if (rdev->num_crtc >= 6) { |
4700 | if (rdev->num_crtc >= 6) { |
3492 | WREG32(INT_MASK + EVERGREEN_CRTC4_REGISTER_OFFSET, crtc5); |
4701 | WREG32(INT_MASK + EVERGREEN_CRTC4_REGISTER_OFFSET, crtc5); |
Line -... | Line 4702... | ||
- | 4702 | WREG32(INT_MASK + EVERGREEN_CRTC5_REGISTER_OFFSET, crtc6); |
|
3493 | WREG32(INT_MASK + EVERGREEN_CRTC5_REGISTER_OFFSET, crtc6); |
4703 | } |
3494 | } |
4704 | |
- | 4705 | if (rdev->num_crtc >= 2) { |
|
3495 | 4706 | WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC0_REGISTER_OFFSET, grph1); |
|
3496 | WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC0_REGISTER_OFFSET, grph1); |
4707 | WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC1_REGISTER_OFFSET, grph2); |
3497 | WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC1_REGISTER_OFFSET, grph2); |
4708 | } |
3498 | if (rdev->num_crtc >= 4) { |
4709 | if (rdev->num_crtc >= 4) { |
3499 | WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC2_REGISTER_OFFSET, grph3); |
4710 | WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC2_REGISTER_OFFSET, grph3); |
3500 | WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC3_REGISTER_OFFSET, grph4); |
4711 | WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC3_REGISTER_OFFSET, grph4); |
3501 | } |
4712 | } |
3502 | if (rdev->num_crtc >= 6) { |
4713 | if (rdev->num_crtc >= 6) { |
Line -... | Line 4714... | ||
- | 4714 | WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC4_REGISTER_OFFSET, grph5); |
|
3503 | WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC4_REGISTER_OFFSET, grph5); |
4715 | WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC5_REGISTER_OFFSET, grph6); |
3504 | WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC5_REGISTER_OFFSET, grph6); |
4716 | } |
3505 | } |
4717 | |
3506 | 4718 | if (!ASIC_IS_NODCE(rdev)) { |
|
3507 | WREG32(DC_HPD1_INT_CONTROL, hpd1); |
4719 | WREG32(DC_HPD1_INT_CONTROL, hpd1); |
3508 | WREG32(DC_HPD2_INT_CONTROL, hpd2); |
4720 | WREG32(DC_HPD2_INT_CONTROL, hpd2); |
- | 4721 | WREG32(DC_HPD3_INT_CONTROL, hpd3); |
|
Line 3509... | Line 4722... | ||
3509 | WREG32(DC_HPD3_INT_CONTROL, hpd3); |
4722 | WREG32(DC_HPD4_INT_CONTROL, hpd4); |
3510 | WREG32(DC_HPD4_INT_CONTROL, hpd4); |
4723 | WREG32(DC_HPD5_INT_CONTROL, hpd5); |
Line 3511... | Line 4724... | ||
3511 | WREG32(DC_HPD5_INT_CONTROL, hpd5); |
4724 | WREG32(DC_HPD6_INT_CONTROL, hpd6); |
3512 | WREG32(DC_HPD6_INT_CONTROL, hpd6); |
4725 | } |
3513 | 4726 | ||
Line -... | Line 4727... | ||
- | 4727 | return 0; |
|
- | 4728 | } |
|
- | 4729 | ||
3514 | return 0; |
4730 | static inline void si_irq_ack(struct radeon_device *rdev) |
3515 | } |
4731 | { |
3516 | 4732 | u32 tmp; |
|
3517 | static inline void si_irq_ack(struct radeon_device *rdev) |
4733 | |
3518 | { |
4734 | if (ASIC_IS_NODCE(rdev)) |
Line 4077... | Line 5293... | ||
4077 | r = si_pcie_gart_enable(rdev); |
5293 | r = si_pcie_gart_enable(rdev); |
4078 | if (r) |
5294 | if (r) |
4079 | return r; |
5295 | return r; |
4080 | si_gpu_init(rdev); |
5296 | si_gpu_init(rdev); |
Line 4081... | Line -... | ||
4081 | - | ||
4082 | #if 0 |
- | |
4083 | r = evergreen_blit_init(rdev); |
- | |
4084 | if (r) { |
- | |
4085 | r600_blit_fini(rdev); |
- | |
4086 | rdev->asic->copy = NULL; |
- | |
4087 | dev_warn(rdev->dev, "failed blitter (%d) falling back to memcpy\n", r); |
- | |
4088 | } |
- | |
4089 | #endif |
5297 | |
4090 | /* allocate rlc buffers */ |
5298 | /* allocate rlc buffers */ |
4091 | r = si_rlc_init(rdev); |
5299 | r = si_rlc_init(rdev); |
4092 | if (r) { |
5300 | if (r) { |
4093 | DRM_ERROR("Failed to init rlc BOs!\n"); |
5301 | DRM_ERROR("Failed to init rlc BOs!\n"); |
Line 4127... | Line 5335... | ||
4127 | if (r) { |
5335 | if (r) { |
4128 | dev_err(rdev->dev, "failed initializing DMA fences (%d).\n", r); |
5336 | dev_err(rdev->dev, "failed initializing DMA fences (%d).\n", r); |
4129 | return r; |
5337 | return r; |
4130 | } |
5338 | } |
Line -... | Line 5339... | ||
- | 5339 | ||
4131 | 5340 | ||
- | 5341 | /* Enable IRQ */ |
|
- | 5342 | if (!rdev->irq.installed) { |
|
- | 5343 | r = radeon_irq_kms_init(rdev); |
|
- | 5344 | if (r) |
|
- | 5345 | return r; |
|
- | 5346 | } |
|
4132 | /* Enable IRQ */ |
5347 | |
4133 | r = si_irq_init(rdev); |
5348 | r = si_irq_init(rdev); |
4134 | if (r) { |
5349 | if (r) { |
4135 | DRM_ERROR("radeon: IH init failed (%d).\n", r); |
5350 | DRM_ERROR("radeon: IH init failed (%d).\n", r); |
4136 | radeon_irq_kms_fini(rdev); |
5351 | radeon_irq_kms_fini(rdev); |
Line 4184... | Line 5399... | ||
4184 | 5399 | ||
4185 | r = cayman_dma_resume(rdev); |
5400 | r = cayman_dma_resume(rdev); |
4186 | if (r) |
5401 | if (r) |
Line -... | Line 5402... | ||
- | 5402 | return r; |
|
4187 | return r; |
5403 | |
4188 | 5404 | ||
4189 | r = radeon_ib_pool_init(rdev); |
5405 | r = radeon_ib_pool_init(rdev); |
4190 | if (r) { |
5406 | if (r) { |
4191 | dev_err(rdev->dev, "IB initialization failed (%d).\n", r); |
5407 | dev_err(rdev->dev, "IB initialization failed (%d).\n", r); |
Line 4192... | Line 5408... | ||
4192 | return r; |
5408 | return r; |
4193 | } |
5409 | } |
4194 | 5410 | ||
4195 | // r = radeon_vm_manager_init(rdev); |
5411 | r = radeon_vm_manager_init(rdev); |
4196 | // if (r) { |
5412 | if (r) { |
Line 4197... | Line 5413... | ||
4197 | // dev_err(rdev->dev, "vm manager initialization failed (%d).\n", r); |
5413 | dev_err(rdev->dev, "vm manager initialization failed (%d).\n", r); |
4198 | // return r; |
5414 | return r; |
Line 4238... | Line 5454... | ||
4238 | return -EINVAL; |
5454 | return -EINVAL; |
4239 | } |
5455 | } |
4240 | DRM_INFO("GPU not posted. posting now...\n"); |
5456 | DRM_INFO("GPU not posted. posting now...\n"); |
4241 | atom_asic_init(rdev->mode_info.atom_context); |
5457 | atom_asic_init(rdev->mode_info.atom_context); |
4242 | } |
5458 | } |
- | 5459 | /* init golden registers */ |
|
- | 5460 | si_init_golden_registers(rdev); |
|
4243 | /* Initialize scratch registers */ |
5461 | /* Initialize scratch registers */ |
4244 | si_scratch_init(rdev); |
5462 | si_scratch_init(rdev); |
4245 | /* Initialize surface registers */ |
5463 | /* Initialize surface registers */ |
4246 | radeon_surface_init(rdev); |
5464 | radeon_surface_init(rdev); |
4247 | /* Initialize clocks */ |
5465 | /* Initialize clocks */ |
Line 4259... | Line 5477... | ||
4259 | /* Memory manager */ |
5477 | /* Memory manager */ |
4260 | r = radeon_bo_init(rdev); |
5478 | r = radeon_bo_init(rdev); |
4261 | if (r) |
5479 | if (r) |
4262 | return r; |
5480 | return r; |
Line 4263... | Line -... | ||
4263 | - | ||
4264 | r = radeon_irq_kms_init(rdev); |
- | |
4265 | if (r) |
- | |
4266 | return r; |
- | |
4267 | 5481 | ||
4268 | ring = &rdev->ring[RADEON_RING_TYPE_GFX_INDEX]; |
5482 | ring = &rdev->ring[RADEON_RING_TYPE_GFX_INDEX]; |
4269 | ring->ring_obj = NULL; |
5483 | ring->ring_obj = NULL; |
Line 4270... | Line 5484... | ||
4270 | r600_ring_init(rdev, ring, 1024 * 1024); |
5484 | r600_ring_init(rdev, ring, 1024 * 1024); |
Line 4319... | Line 5533... | ||
4319 | 5533 | ||
4320 | return 0; |
5534 | return 0; |
Line 4321... | Line 5535... | ||
4321 | } |
5535 | } |
4322 | 5536 | ||
4323 | /** |
5537 | /** |
4324 | * si_get_gpu_clock - return GPU clock counter snapshot |
5538 | * si_get_gpu_clock_counter - return GPU clock counter snapshot |
4325 | * |
5539 | * |
4326 | * @rdev: radeon_device pointer |
5540 | * @rdev: radeon_device pointer |
4327 | * |
5541 | * |
4328 | * Fetches a GPU clock counter snapshot (SI). |
5542 | * Fetches a GPU clock counter snapshot (SI). |
4329 | * Returns the 64 bit clock counter snapshot. |
5543 | * Returns the 64 bit clock counter snapshot. |
4330 | */ |
5544 | */ |
4331 | uint64_t si_get_gpu_clock(struct radeon_device *rdev) |
5545 | uint64_t si_get_gpu_clock_counter(struct radeon_device *rdev) |
Line 4332... | Line 5546... | ||
4332 | { |
5546 | { |
4333 | uint64_t clock; |
5547 | uint64_t clock; |
4334 | 5548 | ||
4335 | mutex_lock(&rdev->gpu_clock_mutex); |
5549 | mutex_lock(&rdev->gpu_clock_mutex); |
4336 | WREG32(RLC_CAPTURE_GPU_CLOCK_COUNT, 1); |
5550 | WREG32(RLC_CAPTURE_GPU_CLOCK_COUNT, 1); |
4337 | clock = (uint64_t)RREG32(RLC_GPU_CLOCK_COUNT_LSB) | |
5551 | clock = (uint64_t)RREG32(RLC_GPU_CLOCK_COUNT_LSB) | |
4338 | ((uint64_t)RREG32(RLC_GPU_CLOCK_COUNT_MSB) << 32ULL); |
5552 | ((uint64_t)RREG32(RLC_GPU_CLOCK_COUNT_MSB) << 32ULL); |
- | 5553 | mutex_unlock(&rdev->gpu_clock_mutex); |
|
- | 5554 | return clock; |
|
- | 5555 | } |
|
- | 5556 | ||
- | 5557 | #if 0 |
|
- | 5558 | int si_set_uvd_clocks(struct radeon_device *rdev, u32 vclk, u32 dclk) |
|
- | 5559 | { |
|
- | 5560 | unsigned fb_div = 0, vclk_div = 0, dclk_div = 0; |
|
- | 5561 | int r; |
|
- | 5562 | ||
- | 5563 | /* bypass vclk and dclk with bclk */ |
|
- | 5564 | WREG32_P(CG_UPLL_FUNC_CNTL_2, |
|
- | 5565 | VCLK_SRC_SEL(1) | DCLK_SRC_SEL(1), |
|
- | 5566 | ~(VCLK_SRC_SEL_MASK | DCLK_SRC_SEL_MASK)); |
|
- | 5567 | ||
- | 5568 | /* put PLL in bypass mode */ |
|
- | 5569 | WREG32_P(CG_UPLL_FUNC_CNTL, UPLL_BYPASS_EN_MASK, ~UPLL_BYPASS_EN_MASK); |
|
- | 5570 | ||
- | 5571 | if (!vclk || !dclk) { |
|
- | 5572 | /* keep the Bypass mode, put PLL to sleep */ |
|
- | 5573 | WREG32_P(CG_UPLL_FUNC_CNTL, UPLL_SLEEP_MASK, ~UPLL_SLEEP_MASK); |
|
- | 5574 | return 0; |
|
- | 5575 | } |
|
- | 5576 | ||
- | 5577 | r = radeon_uvd_calc_upll_dividers(rdev, vclk, dclk, 125000, 250000, |
|
- | 5578 | 16384, 0x03FFFFFF, 0, 128, 5, |
|
- | 5579 | &fb_div, &vclk_div, &dclk_div); |
|
- | 5580 | if (r) |
|
- | 5581 | return r; |
|
- | 5582 | ||
- | 5583 | /* set RESET_ANTI_MUX to 0 */ |
|
- | 5584 | WREG32_P(CG_UPLL_FUNC_CNTL_5, 0, ~RESET_ANTI_MUX_MASK); |
|
- | 5585 | ||
- | 5586 | /* set VCO_MODE to 1 */ |
|
- | 5587 | WREG32_P(CG_UPLL_FUNC_CNTL, UPLL_VCO_MODE_MASK, ~UPLL_VCO_MODE_MASK); |
|
- | 5588 | ||
- | 5589 | /* toggle UPLL_SLEEP to 1 then back to 0 */ |
|
- | 5590 | WREG32_P(CG_UPLL_FUNC_CNTL, UPLL_SLEEP_MASK, ~UPLL_SLEEP_MASK); |
|
- | 5591 | WREG32_P(CG_UPLL_FUNC_CNTL, 0, ~UPLL_SLEEP_MASK); |
|
- | 5592 | ||
- | 5593 | /* deassert UPLL_RESET */ |
|
- | 5594 | WREG32_P(CG_UPLL_FUNC_CNTL, 0, ~UPLL_RESET_MASK); |
|
- | 5595 | ||
- | 5596 | mdelay(1); |
|
- | 5597 | ||
- | 5598 | r = radeon_uvd_send_upll_ctlreq(rdev, CG_UPLL_FUNC_CNTL); |
|
- | 5599 | if (r) |
|
- | 5600 | return r; |
|
- | 5601 | ||
- | 5602 | /* assert UPLL_RESET again */ |
|
- | 5603 | WREG32_P(CG_UPLL_FUNC_CNTL, UPLL_RESET_MASK, ~UPLL_RESET_MASK); |
|
- | 5604 | ||
- | 5605 | /* disable spread spectrum. */ |
|
- | 5606 | WREG32_P(CG_UPLL_SPREAD_SPECTRUM, 0, ~SSEN_MASK); |
|
- | 5607 | ||
- | 5608 | /* set feedback divider */ |
|
- | 5609 | WREG32_P(CG_UPLL_FUNC_CNTL_3, UPLL_FB_DIV(fb_div), ~UPLL_FB_DIV_MASK); |
|
- | 5610 | ||
- | 5611 | /* set ref divider to 0 */ |
|
- | 5612 | WREG32_P(CG_UPLL_FUNC_CNTL, 0, ~UPLL_REF_DIV_MASK); |
|
- | 5613 | ||
- | 5614 | if (fb_div < 307200) |
|
- | 5615 | WREG32_P(CG_UPLL_FUNC_CNTL_4, 0, ~UPLL_SPARE_ISPARE9); |
|
- | 5616 | else |
|
- | 5617 | WREG32_P(CG_UPLL_FUNC_CNTL_4, UPLL_SPARE_ISPARE9, ~UPLL_SPARE_ISPARE9); |
|
- | 5618 | ||
- | 5619 | /* set PDIV_A and PDIV_B */ |
|
- | 5620 | WREG32_P(CG_UPLL_FUNC_CNTL_2, |
|
- | 5621 | UPLL_PDIV_A(vclk_div) | UPLL_PDIV_B(dclk_div), |
|
- | 5622 | ~(UPLL_PDIV_A_MASK | UPLL_PDIV_B_MASK)); |
|
- | 5623 | ||
- | 5624 | /* give the PLL some time to settle */ |
|
- | 5625 | mdelay(15); |
|
- | 5626 | ||
- | 5627 | /* deassert PLL_RESET */ |
|
- | 5628 | WREG32_P(CG_UPLL_FUNC_CNTL, 0, ~UPLL_RESET_MASK); |
|
- | 5629 | ||
- | 5630 | mdelay(15); |
|
- | 5631 | ||
- | 5632 | /* switch from bypass mode to normal mode */ |
|
- | 5633 | WREG32_P(CG_UPLL_FUNC_CNTL, 0, ~UPLL_BYPASS_EN_MASK); |
|
- | 5634 | ||
- | 5635 | r = radeon_uvd_send_upll_ctlreq(rdev, CG_UPLL_FUNC_CNTL); |
|
- | 5636 | if (r) |
|
- | 5637 | return r; |
|
- | 5638 | ||
- | 5639 | /* switch VCLK and DCLK selection */ |
|
- | 5640 | WREG32_P(CG_UPLL_FUNC_CNTL_2, |
|
- | 5641 | VCLK_SRC_SEL(2) | DCLK_SRC_SEL(2), |
|
- | 5642 | ~(VCLK_SRC_SEL_MASK | DCLK_SRC_SEL_MASK)); |
|
- | 5643 | ||
- | 5644 | mdelay(100); |
|
- | 5645 |