Rev 1313 | Rev 1403 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1313 | Rev 1321 | ||
---|---|---|---|
Line 35... | Line 35... | ||
35 | #include "atom.h" |
35 | #include "atom.h" |
36 | #include "avivod.h" |
36 | #include "avivod.h" |
Line 37... | Line 37... | ||
37 | 37 | ||
38 | #define PFP_UCODE_SIZE 576 |
38 | #define PFP_UCODE_SIZE 576 |
- | 39 | #define PM4_UCODE_SIZE 1792 |
|
39 | #define PM4_UCODE_SIZE 1792 |
40 | #define RLC_UCODE_SIZE 768 |
40 | #define R700_PFP_UCODE_SIZE 848 |
41 | #define R700_PFP_UCODE_SIZE 848 |
- | 42 | #define R700_PM4_UCODE_SIZE 1360 |
|
Line 41... | Line 43... | ||
41 | #define R700_PM4_UCODE_SIZE 1360 |
43 | #define R700_RLC_UCODE_SIZE 1024 |
42 | 44 | ||
43 | /* Firmware Names */ |
45 | /* Firmware Names */ |
44 | MODULE_FIRMWARE("radeon/R600_pfp.bin"); |
46 | MODULE_FIRMWARE("radeon/R600_pfp.bin"); |
Line 59... | Line 61... | ||
59 | MODULE_FIRMWARE("radeon/RV770_me.bin"); |
61 | MODULE_FIRMWARE("radeon/RV770_me.bin"); |
60 | MODULE_FIRMWARE("radeon/RV730_pfp.bin"); |
62 | MODULE_FIRMWARE("radeon/RV730_pfp.bin"); |
61 | MODULE_FIRMWARE("radeon/RV730_me.bin"); |
63 | MODULE_FIRMWARE("radeon/RV730_me.bin"); |
62 | MODULE_FIRMWARE("radeon/RV710_pfp.bin"); |
64 | MODULE_FIRMWARE("radeon/RV710_pfp.bin"); |
63 | MODULE_FIRMWARE("radeon/RV710_me.bin"); |
65 | MODULE_FIRMWARE("radeon/RV710_me.bin"); |
- | 66 | MODULE_FIRMWARE("radeon/R600_rlc.bin"); |
|
- | 67 | MODULE_FIRMWARE("radeon/R700_rlc.bin"); |
|
Line 64... | Line 68... | ||
64 | 68 | ||
Line 65... | Line 69... | ||
65 | int r600_debugfs_mc_info_init(struct radeon_device *rdev); |
69 | int r600_debugfs_mc_info_init(struct radeon_device *rdev); |
66 | 70 | ||
67 | /* r600,rv610,rv630,rv620,rv635,rv670 */ |
71 | /* r600,rv610,rv630,rv620,rv635,rv670 */ |
68 | int r600_mc_wait_for_idle(struct radeon_device *rdev); |
72 | int r600_mc_wait_for_idle(struct radeon_device *rdev); |
Line -... | Line 73... | ||
- | 73 | void r600_gpu_init(struct radeon_device *rdev); |
|
- | 74 | void r600_fini(struct radeon_device *rdev); |
|
- | 75 | ||
- | 76 | /* hpd for digital panel detect/disconnect */ |
|
- | 77 | bool r600_hpd_sense(struct radeon_device *rdev, enum radeon_hpd_id hpd) |
|
- | 78 | { |
|
- | 79 | bool connected = false; |
|
- | 80 | ||
- | 81 | if (ASIC_IS_DCE3(rdev)) { |
|
- | 82 | switch (hpd) { |
|
- | 83 | case RADEON_HPD_1: |
|
- | 84 | if (RREG32(DC_HPD1_INT_STATUS) & DC_HPDx_SENSE) |
|
- | 85 | connected = true; |
|
- | 86 | break; |
|
- | 87 | case RADEON_HPD_2: |
|
- | 88 | if (RREG32(DC_HPD2_INT_STATUS) & DC_HPDx_SENSE) |
|
- | 89 | connected = true; |
|
- | 90 | break; |
|
- | 91 | case RADEON_HPD_3: |
|
- | 92 | if (RREG32(DC_HPD3_INT_STATUS) & DC_HPDx_SENSE) |
|
- | 93 | connected = true; |
|
- | 94 | break; |
|
- | 95 | case RADEON_HPD_4: |
|
- | 96 | if (RREG32(DC_HPD4_INT_STATUS) & DC_HPDx_SENSE) |
|
- | 97 | connected = true; |
|
- | 98 | break; |
|
- | 99 | /* DCE 3.2 */ |
|
- | 100 | case RADEON_HPD_5: |
|
- | 101 | if (RREG32(DC_HPD5_INT_STATUS) & DC_HPDx_SENSE) |
|
- | 102 | connected = true; |
|
- | 103 | break; |
|
- | 104 | case RADEON_HPD_6: |
|
- | 105 | if (RREG32(DC_HPD6_INT_STATUS) & DC_HPDx_SENSE) |
|
- | 106 | connected = true; |
|
- | 107 | break; |
|
- | 108 | default: |
|
- | 109 | break; |
|
- | 110 | } |
|
- | 111 | } else { |
|
- | 112 | switch (hpd) { |
|
- | 113 | case RADEON_HPD_1: |
|
- | 114 | if (RREG32(DC_HOT_PLUG_DETECT1_INT_STATUS) & DC_HOT_PLUG_DETECTx_SENSE) |
|
- | 115 | connected = true; |
|
- | 116 | break; |
|
- | 117 | case RADEON_HPD_2: |
|
- | 118 | if (RREG32(DC_HOT_PLUG_DETECT2_INT_STATUS) & DC_HOT_PLUG_DETECTx_SENSE) |
|
- | 119 | connected = true; |
|
- | 120 | break; |
|
- | 121 | case RADEON_HPD_3: |
|
- | 122 | if (RREG32(DC_HOT_PLUG_DETECT3_INT_STATUS) & DC_HOT_PLUG_DETECTx_SENSE) |
|
- | 123 | connected = true; |
|
- | 124 | break; |
|
- | 125 | default: |
|
- | 126 | break; |
|
- | 127 | } |
|
- | 128 | } |
|
- | 129 | return connected; |
|
- | 130 | } |
|
- | 131 | ||
- | 132 | void r600_hpd_set_polarity(struct radeon_device *rdev, |
|
- | 133 | enum radeon_hpd_id hpd) |
|
- | 134 | { |
|
- | 135 | u32 tmp; |
|
- | 136 | bool connected = r600_hpd_sense(rdev, hpd); |
|
- | 137 | ||
- | 138 | if (ASIC_IS_DCE3(rdev)) { |
|
- | 139 | switch (hpd) { |
|
- | 140 | case RADEON_HPD_1: |
|
- | 141 | tmp = RREG32(DC_HPD1_INT_CONTROL); |
|
- | 142 | if (connected) |
|
- | 143 | tmp &= ~DC_HPDx_INT_POLARITY; |
|
- | 144 | else |
|
- | 145 | tmp |= DC_HPDx_INT_POLARITY; |
|
- | 146 | WREG32(DC_HPD1_INT_CONTROL, tmp); |
|
- | 147 | break; |
|
- | 148 | case RADEON_HPD_2: |
|
- | 149 | tmp = RREG32(DC_HPD2_INT_CONTROL); |
|
- | 150 | if (connected) |
|
- | 151 | tmp &= ~DC_HPDx_INT_POLARITY; |
|
- | 152 | else |
|
- | 153 | tmp |= DC_HPDx_INT_POLARITY; |
|
- | 154 | WREG32(DC_HPD2_INT_CONTROL, tmp); |
|
- | 155 | break; |
|
- | 156 | case RADEON_HPD_3: |
|
- | 157 | tmp = RREG32(DC_HPD3_INT_CONTROL); |
|
- | 158 | if (connected) |
|
- | 159 | tmp &= ~DC_HPDx_INT_POLARITY; |
|
- | 160 | else |
|
- | 161 | tmp |= DC_HPDx_INT_POLARITY; |
|
- | 162 | WREG32(DC_HPD3_INT_CONTROL, tmp); |
|
- | 163 | break; |
|
- | 164 | case RADEON_HPD_4: |
|
- | 165 | tmp = RREG32(DC_HPD4_INT_CONTROL); |
|
- | 166 | if (connected) |
|
- | 167 | tmp &= ~DC_HPDx_INT_POLARITY; |
|
- | 168 | else |
|
- | 169 | tmp |= DC_HPDx_INT_POLARITY; |
|
- | 170 | WREG32(DC_HPD4_INT_CONTROL, tmp); |
|
- | 171 | break; |
|
- | 172 | case RADEON_HPD_5: |
|
- | 173 | tmp = RREG32(DC_HPD5_INT_CONTROL); |
|
- | 174 | if (connected) |
|
- | 175 | tmp &= ~DC_HPDx_INT_POLARITY; |
|
- | 176 | else |
|
- | 177 | tmp |= DC_HPDx_INT_POLARITY; |
|
- | 178 | WREG32(DC_HPD5_INT_CONTROL, tmp); |
|
- | 179 | break; |
|
- | 180 | /* DCE 3.2 */ |
|
- | 181 | case RADEON_HPD_6: |
|
- | 182 | tmp = RREG32(DC_HPD6_INT_CONTROL); |
|
- | 183 | if (connected) |
|
- | 184 | tmp &= ~DC_HPDx_INT_POLARITY; |
|
- | 185 | else |
|
- | 186 | tmp |= DC_HPDx_INT_POLARITY; |
|
- | 187 | WREG32(DC_HPD6_INT_CONTROL, tmp); |
|
- | 188 | break; |
|
- | 189 | default: |
|
- | 190 | break; |
|
- | 191 | } |
|
- | 192 | } else { |
|
- | 193 | switch (hpd) { |
|
- | 194 | case RADEON_HPD_1: |
|
- | 195 | tmp = RREG32(DC_HOT_PLUG_DETECT1_INT_CONTROL); |
|
- | 196 | if (connected) |
|
- | 197 | tmp &= ~DC_HOT_PLUG_DETECTx_INT_POLARITY; |
|
- | 198 | else |
|
- | 199 | tmp |= DC_HOT_PLUG_DETECTx_INT_POLARITY; |
|
- | 200 | WREG32(DC_HOT_PLUG_DETECT1_INT_CONTROL, tmp); |
|
- | 201 | break; |
|
- | 202 | case RADEON_HPD_2: |
|
- | 203 | tmp = RREG32(DC_HOT_PLUG_DETECT2_INT_CONTROL); |
|
- | 204 | if (connected) |
|
- | 205 | tmp &= ~DC_HOT_PLUG_DETECTx_INT_POLARITY; |
|
- | 206 | else |
|
- | 207 | tmp |= DC_HOT_PLUG_DETECTx_INT_POLARITY; |
|
- | 208 | WREG32(DC_HOT_PLUG_DETECT2_INT_CONTROL, tmp); |
|
- | 209 | break; |
|
- | 210 | case RADEON_HPD_3: |
|
- | 211 | tmp = RREG32(DC_HOT_PLUG_DETECT3_INT_CONTROL); |
|
- | 212 | if (connected) |
|
- | 213 | tmp &= ~DC_HOT_PLUG_DETECTx_INT_POLARITY; |
|
- | 214 | else |
|
- | 215 | tmp |= DC_HOT_PLUG_DETECTx_INT_POLARITY; |
|
- | 216 | WREG32(DC_HOT_PLUG_DETECT3_INT_CONTROL, tmp); |
|
- | 217 | break; |
|
- | 218 | default: |
|
- | 219 | break; |
|
- | 220 | } |
|
- | 221 | } |
|
- | 222 | } |
|
- | 223 | ||
- | 224 | void r600_hpd_init(struct radeon_device *rdev) |
|
- | 225 | { |
|
- | 226 | struct drm_device *dev = rdev->ddev; |
|
- | 227 | struct drm_connector *connector; |
|
- | 228 | ||
- | 229 | if (ASIC_IS_DCE3(rdev)) { |
|
- | 230 | u32 tmp = DC_HPDx_CONNECTION_TIMER(0x9c4) | DC_HPDx_RX_INT_TIMER(0xfa); |
|
- | 231 | if (ASIC_IS_DCE32(rdev)) |
|
- | 232 | tmp |= DC_HPDx_EN; |
|
- | 233 | ||
- | 234 | list_for_each_entry(connector, &dev->mode_config.connector_list, head) { |
|
- | 235 | struct radeon_connector *radeon_connector = to_radeon_connector(connector); |
|
- | 236 | switch (radeon_connector->hpd.hpd) { |
|
- | 237 | case RADEON_HPD_1: |
|
- | 238 | WREG32(DC_HPD1_CONTROL, tmp); |
|
- | 239 | rdev->irq.hpd[0] = true; |
|
- | 240 | break; |
|
- | 241 | case RADEON_HPD_2: |
|
- | 242 | WREG32(DC_HPD2_CONTROL, tmp); |
|
- | 243 | rdev->irq.hpd[1] = true; |
|
- | 244 | break; |
|
- | 245 | case RADEON_HPD_3: |
|
- | 246 | WREG32(DC_HPD3_CONTROL, tmp); |
|
- | 247 | rdev->irq.hpd[2] = true; |
|
- | 248 | break; |
|
- | 249 | case RADEON_HPD_4: |
|
- | 250 | WREG32(DC_HPD4_CONTROL, tmp); |
|
- | 251 | rdev->irq.hpd[3] = true; |
|
- | 252 | break; |
|
- | 253 | /* DCE 3.2 */ |
|
- | 254 | case RADEON_HPD_5: |
|
- | 255 | WREG32(DC_HPD5_CONTROL, tmp); |
|
- | 256 | rdev->irq.hpd[4] = true; |
|
- | 257 | break; |
|
- | 258 | case RADEON_HPD_6: |
|
- | 259 | WREG32(DC_HPD6_CONTROL, tmp); |
|
- | 260 | rdev->irq.hpd[5] = true; |
|
- | 261 | break; |
|
- | 262 | default: |
|
- | 263 | break; |
|
- | 264 | } |
|
- | 265 | } |
|
- | 266 | } else { |
|
- | 267 | list_for_each_entry(connector, &dev->mode_config.connector_list, head) { |
|
- | 268 | struct radeon_connector *radeon_connector = to_radeon_connector(connector); |
|
- | 269 | switch (radeon_connector->hpd.hpd) { |
|
- | 270 | case RADEON_HPD_1: |
|
- | 271 | WREG32(DC_HOT_PLUG_DETECT1_CONTROL, DC_HOT_PLUG_DETECTx_EN); |
|
- | 272 | rdev->irq.hpd[0] = true; |
|
- | 273 | break; |
|
- | 274 | case RADEON_HPD_2: |
|
- | 275 | WREG32(DC_HOT_PLUG_DETECT2_CONTROL, DC_HOT_PLUG_DETECTx_EN); |
|
- | 276 | rdev->irq.hpd[1] = true; |
|
- | 277 | break; |
|
- | 278 | case RADEON_HPD_3: |
|
- | 279 | WREG32(DC_HOT_PLUG_DETECT3_CONTROL, DC_HOT_PLUG_DETECTx_EN); |
|
- | 280 | rdev->irq.hpd[2] = true; |
|
- | 281 | break; |
|
- | 282 | default: |
|
- | 283 | break; |
|
- | 284 | } |
|
- | 285 | } |
|
- | 286 | } |
|
- | 287 | r600_irq_set(rdev); |
|
- | 288 | } |
|
- | 289 | ||
- | 290 | void r600_hpd_fini(struct radeon_device *rdev) |
|
- | 291 | { |
|
- | 292 | struct drm_device *dev = rdev->ddev; |
|
- | 293 | struct drm_connector *connector; |
|
- | 294 | ||
- | 295 | if (ASIC_IS_DCE3(rdev)) { |
|
- | 296 | list_for_each_entry(connector, &dev->mode_config.connector_list, head) { |
|
- | 297 | struct radeon_connector *radeon_connector = to_radeon_connector(connector); |
|
- | 298 | switch (radeon_connector->hpd.hpd) { |
|
- | 299 | case RADEON_HPD_1: |
|
- | 300 | WREG32(DC_HPD1_CONTROL, 0); |
|
- | 301 | rdev->irq.hpd[0] = false; |
|
- | 302 | break; |
|
- | 303 | case RADEON_HPD_2: |
|
- | 304 | WREG32(DC_HPD2_CONTROL, 0); |
|
- | 305 | rdev->irq.hpd[1] = false; |
|
- | 306 | break; |
|
- | 307 | case RADEON_HPD_3: |
|
- | 308 | WREG32(DC_HPD3_CONTROL, 0); |
|
- | 309 | rdev->irq.hpd[2] = false; |
|
- | 310 | break; |
|
- | 311 | case RADEON_HPD_4: |
|
- | 312 | WREG32(DC_HPD4_CONTROL, 0); |
|
- | 313 | rdev->irq.hpd[3] = false; |
|
- | 314 | break; |
|
- | 315 | /* DCE 3.2 */ |
|
- | 316 | case RADEON_HPD_5: |
|
- | 317 | WREG32(DC_HPD5_CONTROL, 0); |
|
- | 318 | rdev->irq.hpd[4] = false; |
|
- | 319 | break; |
|
- | 320 | case RADEON_HPD_6: |
|
- | 321 | WREG32(DC_HPD6_CONTROL, 0); |
|
- | 322 | rdev->irq.hpd[5] = false; |
|
- | 323 | break; |
|
- | 324 | default: |
|
- | 325 | break; |
|
- | 326 | } |
|
- | 327 | } |
|
- | 328 | } else { |
|
- | 329 | list_for_each_entry(connector, &dev->mode_config.connector_list, head) { |
|
- | 330 | struct radeon_connector *radeon_connector = to_radeon_connector(connector); |
|
- | 331 | switch (radeon_connector->hpd.hpd) { |
|
- | 332 | case RADEON_HPD_1: |
|
- | 333 | WREG32(DC_HOT_PLUG_DETECT1_CONTROL, 0); |
|
- | 334 | rdev->irq.hpd[0] = false; |
|
- | 335 | break; |
|
- | 336 | case RADEON_HPD_2: |
|
- | 337 | WREG32(DC_HOT_PLUG_DETECT2_CONTROL, 0); |
|
- | 338 | rdev->irq.hpd[1] = false; |
|
- | 339 | break; |
|
- | 340 | case RADEON_HPD_3: |
|
- | 341 | WREG32(DC_HOT_PLUG_DETECT3_CONTROL, 0); |
|
- | 342 | rdev->irq.hpd[2] = false; |
|
- | 343 | break; |
|
- | 344 | default: |
|
- | 345 | break; |
|
- | 346 | } |
|
- | 347 | } |
|
69 | void r600_gpu_init(struct radeon_device *rdev); |
348 | } |
70 | void r600_fini(struct radeon_device *rdev); |
349 | } |
71 | 350 | ||
72 | /* |
351 | /* |
73 | * R600 PCIE GART |
352 | * R600 PCIE GART |
Line 177... | Line 456... | ||
177 | } |
456 | } |
Line 178... | Line 457... | ||
178 | 457 | ||
179 | void r600_pcie_gart_disable(struct radeon_device *rdev) |
458 | void r600_pcie_gart_disable(struct radeon_device *rdev) |
180 | { |
459 | { |
181 | u32 tmp; |
460 | u32 tmp; |
Line 182... | Line 461... | ||
182 | int i; |
461 | int i, r; |
183 | 462 | ||
184 | /* Disable all tables */ |
463 | /* Disable all tables */ |
Line 1098... | Line 1377... | ||
1098 | (void)RREG32(PCIE_PORT_INDEX); |
1377 | (void)RREG32(PCIE_PORT_INDEX); |
1099 | WREG32(PCIE_PORT_DATA, (v)); |
1378 | WREG32(PCIE_PORT_DATA, (v)); |
1100 | (void)RREG32(PCIE_PORT_DATA); |
1379 | (void)RREG32(PCIE_PORT_DATA); |
1101 | } |
1380 | } |
Line -... | Line 1381... | ||
- | 1381 | ||
- | 1382 | void r600_hdp_flush(struct radeon_device *rdev) |
|
- | 1383 | { |
|
- | 1384 | WREG32(R_005480_HDP_MEM_COHERENCY_FLUSH_CNTL, 0x1); |
|
Line 1102... | Line 1385... | ||
1102 | 1385 | } |
|
1103 | 1386 | ||
1104 | /* |
1387 | /* |
1105 | * CP & Ring |
1388 | * CP & Ring |
Line 1283... | Line 1566... | ||
1283 | } |
1566 | } |
1284 | r = radeon_atombios_init(rdev); |
1567 | r = radeon_atombios_init(rdev); |
1285 | if (r) |
1568 | if (r) |
1286 | return r; |
1569 | return r; |
1287 | /* Post card if necessary */ |
1570 | /* Post card if necessary */ |
1288 | if (!r600_card_posted(rdev) && rdev->bios) { |
1571 | if (!r600_card_posted(rdev)) { |
- | 1572 | if (!rdev->bios) { |
|
- | 1573 | dev_err(rdev->dev, "Card not posted and no BIOS - ignoring\n"); |
|
- | 1574 | return -EINVAL; |
|
- | 1575 | } |
|
1289 | DRM_INFO("GPU not posted. posting now...\n"); |
1576 | DRM_INFO("GPU not posted. posting now...\n"); |
1290 | atom_asic_init(rdev->mode_info.atom_context); |
1577 | atom_asic_init(rdev->mode_info.atom_context); |
1291 | } |
1578 | } |
1292 | /* Initialize scratch registers */ |
1579 | /* Initialize scratch registers */ |
1293 | r600_scratch_init(rdev); |
1580 | r600_scratch_init(rdev); |
Line 1307... | Line 1594... | ||
1307 | r = r600_mc_init(rdev); |
1594 | r = r600_mc_init(rdev); |
1308 | dbgprintf("mc vram location %x\n", rdev->mc.vram_location); |
1595 | dbgprintf("mc vram location %x\n", rdev->mc.vram_location); |
1309 | if (r) |
1596 | if (r) |
1310 | return r; |
1597 | return r; |
1311 | /* Memory manager */ |
1598 | /* Memory manager */ |
1312 | r = radeon_object_init(rdev); |
1599 | r = radeon_bo_init(rdev); |
1313 | if (r) |
1600 | if (r) |
1314 | return r; |
1601 | return r; |
- | 1602 | ||
- | 1603 | // r = radeon_irq_kms_init(rdev); |
|
- | 1604 | // if (r) |
|
- | 1605 | // return r; |
|
- | 1606 | ||
1315 | // rdev->cp.ring_obj = NULL; |
1607 | // rdev->cp.ring_obj = NULL; |
1316 | // r600_ring_init(rdev, 1024 * 1024); |
1608 | // r600_ring_init(rdev, 1024 * 1024); |
Line 1317... | Line 1609... | ||
1317 | 1609 | ||
1318 | // if (!rdev->me_fw || !rdev->pfp_fw) { |
1610 | // rdev->ih.ring_obj = NULL; |
1319 | // r = r600_cp_init_microcode(rdev); |
- | |
1320 | // if (r) { |
- | |
1321 | // DRM_ERROR("Failed to load firmware!\n"); |
- | |
1322 | // return r; |
- | |
1323 | // } |
- | |
Line 1324... | Line 1611... | ||
1324 | // } |
1611 | // r600_ih_ring_init(rdev, 64 * 1024); |
1325 | 1612 | ||
1326 | r = r600_pcie_gart_init(rdev); |
1613 | r = r600_pcie_gart_init(rdev); |
Line 1327... | Line -... | ||
1327 | if (r) |
- | |
1328 | return r; |
1614 | if (r) |
1329 | 1615 | return r; |
|
1330 | rdev->accel_working = true; |
1616 | |
1331 | // r = r600_blit_init(rdev); |
1617 | // r = r600_blit_init(rdev); |
1332 | // if (r) { |
1618 | // if (r) { |
Line -... | Line 1619... | ||
- | 1619 | // DRM_ERROR("radeon: failled blitter (%d).\n", r); |
|
1333 | // DRM_ERROR("radeon: failled blitter (%d).\n", r); |
1620 | // return r; |
1334 | // return r; |
1621 | // } |
1335 | // } |
1622 | |
1336 | 1623 | rdev->accel_working = true; |
|
1337 | r = r600_startup(rdev); |
1624 | r = r600_startup(rdev); |
Line 1373... | Line 1660... | ||
1373 | static int r600_debugfs_cp_ring_info(struct seq_file *m, void *data) |
1660 | static int r600_debugfs_cp_ring_info(struct seq_file *m, void *data) |
1374 | { |
1661 | { |
1375 | struct drm_info_node *node = (struct drm_info_node *) m->private; |
1662 | struct drm_info_node *node = (struct drm_info_node *) m->private; |
1376 | struct drm_device *dev = node->minor->dev; |
1663 | struct drm_device *dev = node->minor->dev; |
1377 | struct radeon_device *rdev = dev->dev_private; |
1664 | struct radeon_device *rdev = dev->dev_private; |
1378 | uint32_t rdp, wdp; |
- | |
1379 | unsigned count, i, j; |
1665 | unsigned count, i, j; |
Line 1380... | Line 1666... | ||
1380 | 1666 | ||
1381 | radeon_ring_free_size(rdev); |
- | |
1382 | rdp = RREG32(CP_RB_RPTR); |
- | |
1383 | wdp = RREG32(CP_RB_WPTR); |
1667 | radeon_ring_free_size(rdev); |
1384 | count = (rdp + rdev->cp.ring_size - wdp) & rdev->cp.ptr_mask; |
1668 | count = (rdev->cp.ring_size / 4) - rdev->cp.ring_free_dw; |
1385 | seq_printf(m, "CP_STAT 0x%08x\n", RREG32(CP_STAT)); |
1669 | seq_printf(m, "CP_STAT 0x%08x\n", RREG32(CP_STAT)); |
1386 | seq_printf(m, "CP_RB_WPTR 0x%08x\n", wdp); |
1670 | seq_printf(m, "CP_RB_WPTR 0x%08x\n", RREG32(CP_RB_WPTR)); |
- | 1671 | seq_printf(m, "CP_RB_RPTR 0x%08x\n", RREG32(CP_RB_RPTR)); |
|
- | 1672 | seq_printf(m, "driver's copy of the CP_RB_WPTR 0x%08x\n", rdev->cp.wptr); |
|
1387 | seq_printf(m, "CP_RB_RPTR 0x%08x\n", rdp); |
1673 | seq_printf(m, "driver's copy of the CP_RB_RPTR 0x%08x\n", rdev->cp.rptr); |
1388 | seq_printf(m, "%u free dwords in ring\n", rdev->cp.ring_free_dw); |
1674 | seq_printf(m, "%u free dwords in ring\n", rdev->cp.ring_free_dw); |
- | 1675 | seq_printf(m, "%u dwords in ring\n", count); |
|
1389 | seq_printf(m, "%u dwords in ring\n", count); |
1676 | i = rdev->cp.rptr; |
1390 | for (j = 0; j <= count; j++) { |
- | |
1391 | i = (rdp + j) & rdev->cp.ptr_mask; |
1677 | for (j = 0; j <= count; j++) { |
- | 1678 | seq_printf(m, "r[%04d]=0x%08x\n", i, rdev->cp.ring[i]); |
|
1392 | seq_printf(m, "r[%04d]=0x%08x\n", i, rdev->cp.ring[i]); |
1679 | i = (i + 1) & rdev->cp.ptr_mask; |
1393 | } |
1680 | } |
1394 | return 0; |
1681 | return 0; |
Line 1395... | Line 1682... | ||
1395 | } |
1682 | } |