.. | .. |
---|
20 | 20 | * OTHER DEALINGS IN THE SOFTWARE. |
---|
21 | 21 | * |
---|
22 | 22 | */ |
---|
23 | | -#include <drm/drmP.h> |
---|
| 23 | + |
---|
| 24 | +#include <drm/drm_fourcc.h> |
---|
| 25 | +#include <drm/drm_vblank.h> |
---|
| 26 | + |
---|
24 | 27 | #include "amdgpu.h" |
---|
25 | 28 | #include "amdgpu_pm.h" |
---|
26 | 29 | #include "amdgpu_i2c.h" |
---|
.. | .. |
---|
31 | 34 | #include "atombios_encoders.h" |
---|
32 | 35 | #include "amdgpu_pll.h" |
---|
33 | 36 | #include "amdgpu_connectors.h" |
---|
| 37 | +#include "amdgpu_display.h" |
---|
34 | 38 | #include "dce_v10_0.h" |
---|
35 | 39 | |
---|
36 | 40 | #include "dce/dce_10_0_d.h" |
---|
.. | .. |
---|
232 | 236 | int crtc_id, u64 crtc_base, bool async) |
---|
233 | 237 | { |
---|
234 | 238 | struct amdgpu_crtc *amdgpu_crtc = adev->mode_info.crtcs[crtc_id]; |
---|
| 239 | + struct drm_framebuffer *fb = amdgpu_crtc->base.primary->fb; |
---|
235 | 240 | u32 tmp; |
---|
236 | 241 | |
---|
237 | 242 | /* flip at hsync for async, default is vsync */ |
---|
.. | .. |
---|
239 | 244 | tmp = REG_SET_FIELD(tmp, GRPH_FLIP_CONTROL, |
---|
240 | 245 | GRPH_SURFACE_UPDATE_H_RETRACE_EN, async ? 1 : 0); |
---|
241 | 246 | WREG32(mmGRPH_FLIP_CONTROL + amdgpu_crtc->crtc_offset, tmp); |
---|
| 247 | + /* update pitch */ |
---|
| 248 | + WREG32(mmGRPH_PITCH + amdgpu_crtc->crtc_offset, |
---|
| 249 | + fb->pitches[0] / fb->format->cpp[0]); |
---|
242 | 250 | /* update the primary scanout address */ |
---|
243 | 251 | WREG32(mmGRPH_PRIMARY_SURFACE_ADDRESS_HIGH + amdgpu_crtc->crtc_offset, |
---|
244 | 252 | upper_32_bits(crtc_base)); |
---|
.. | .. |
---|
320 | 328 | */ |
---|
321 | 329 | static void dce_v10_0_hpd_init(struct amdgpu_device *adev) |
---|
322 | 330 | { |
---|
323 | | - struct drm_device *dev = adev->ddev; |
---|
| 331 | + struct drm_device *dev = adev_to_drm(adev); |
---|
324 | 332 | struct drm_connector *connector; |
---|
| 333 | + struct drm_connector_list_iter iter; |
---|
325 | 334 | u32 tmp; |
---|
326 | 335 | |
---|
327 | | - list_for_each_entry(connector, &dev->mode_config.connector_list, head) { |
---|
| 336 | + drm_connector_list_iter_begin(dev, &iter); |
---|
| 337 | + drm_for_each_connector_iter(connector, &iter) { |
---|
328 | 338 | struct amdgpu_connector *amdgpu_connector = to_amdgpu_connector(connector); |
---|
329 | 339 | |
---|
330 | 340 | if (amdgpu_connector->hpd.hpd >= adev->mode_info.num_hpd) |
---|
.. | .. |
---|
360 | 370 | amdgpu_irq_get(adev, &adev->hpd_irq, |
---|
361 | 371 | amdgpu_connector->hpd.hpd); |
---|
362 | 372 | } |
---|
| 373 | + drm_connector_list_iter_end(&iter); |
---|
363 | 374 | } |
---|
364 | 375 | |
---|
365 | 376 | /** |
---|
.. | .. |
---|
372 | 383 | */ |
---|
373 | 384 | static void dce_v10_0_hpd_fini(struct amdgpu_device *adev) |
---|
374 | 385 | { |
---|
375 | | - struct drm_device *dev = adev->ddev; |
---|
| 386 | + struct drm_device *dev = adev_to_drm(adev); |
---|
376 | 387 | struct drm_connector *connector; |
---|
| 388 | + struct drm_connector_list_iter iter; |
---|
377 | 389 | u32 tmp; |
---|
378 | 390 | |
---|
379 | | - list_for_each_entry(connector, &dev->mode_config.connector_list, head) { |
---|
| 391 | + drm_connector_list_iter_begin(dev, &iter); |
---|
| 392 | + drm_for_each_connector_iter(connector, &iter) { |
---|
380 | 393 | struct amdgpu_connector *amdgpu_connector = to_amdgpu_connector(connector); |
---|
381 | 394 | |
---|
382 | 395 | if (amdgpu_connector->hpd.hpd >= adev->mode_info.num_hpd) |
---|
.. | .. |
---|
389 | 402 | amdgpu_irq_put(adev, &adev->hpd_irq, |
---|
390 | 403 | amdgpu_connector->hpd.hpd); |
---|
391 | 404 | } |
---|
| 405 | + drm_connector_list_iter_end(&iter); |
---|
392 | 406 | } |
---|
393 | 407 | |
---|
394 | 408 | static u32 dce_v10_0_hpd_get_gpio_reg(struct amdgpu_device *adev) |
---|
.. | .. |
---|
490 | 504 | static void dce_v10_0_program_fmt(struct drm_encoder *encoder) |
---|
491 | 505 | { |
---|
492 | 506 | struct drm_device *dev = encoder->dev; |
---|
493 | | - struct amdgpu_device *adev = dev->dev_private; |
---|
| 507 | + struct amdgpu_device *adev = drm_to_adev(dev); |
---|
494 | 508 | struct amdgpu_encoder *amdgpu_encoder = to_amdgpu_encoder(encoder); |
---|
495 | 509 | struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(encoder->crtc); |
---|
496 | 510 | struct drm_connector *connector = amdgpu_get_connector_for_encoder(encoder); |
---|
.. | .. |
---|
1195 | 1209 | |
---|
1196 | 1210 | static void dce_v10_0_afmt_audio_select_pin(struct drm_encoder *encoder) |
---|
1197 | 1211 | { |
---|
1198 | | - struct amdgpu_device *adev = encoder->dev->dev_private; |
---|
| 1212 | + struct amdgpu_device *adev = drm_to_adev(encoder->dev); |
---|
1199 | 1213 | struct amdgpu_encoder *amdgpu_encoder = to_amdgpu_encoder(encoder); |
---|
1200 | 1214 | struct amdgpu_encoder_atom_dig *dig = amdgpu_encoder->enc_priv; |
---|
1201 | 1215 | u32 tmp; |
---|
.. | .. |
---|
1211 | 1225 | static void dce_v10_0_audio_write_latency_fields(struct drm_encoder *encoder, |
---|
1212 | 1226 | struct drm_display_mode *mode) |
---|
1213 | 1227 | { |
---|
1214 | | - struct amdgpu_device *adev = encoder->dev->dev_private; |
---|
| 1228 | + struct drm_device *dev = encoder->dev; |
---|
| 1229 | + struct amdgpu_device *adev = drm_to_adev(dev); |
---|
1215 | 1230 | struct amdgpu_encoder *amdgpu_encoder = to_amdgpu_encoder(encoder); |
---|
1216 | 1231 | struct amdgpu_encoder_atom_dig *dig = amdgpu_encoder->enc_priv; |
---|
1217 | 1232 | struct drm_connector *connector; |
---|
| 1233 | + struct drm_connector_list_iter iter; |
---|
1218 | 1234 | struct amdgpu_connector *amdgpu_connector = NULL; |
---|
1219 | 1235 | u32 tmp; |
---|
1220 | 1236 | int interlace = 0; |
---|
.. | .. |
---|
1222 | 1238 | if (!dig || !dig->afmt || !dig->afmt->pin) |
---|
1223 | 1239 | return; |
---|
1224 | 1240 | |
---|
1225 | | - list_for_each_entry(connector, &encoder->dev->mode_config.connector_list, head) { |
---|
| 1241 | + drm_connector_list_iter_begin(dev, &iter); |
---|
| 1242 | + drm_for_each_connector_iter(connector, &iter) { |
---|
1226 | 1243 | if (connector->encoder == encoder) { |
---|
1227 | 1244 | amdgpu_connector = to_amdgpu_connector(connector); |
---|
1228 | 1245 | break; |
---|
1229 | 1246 | } |
---|
1230 | 1247 | } |
---|
| 1248 | + drm_connector_list_iter_end(&iter); |
---|
1231 | 1249 | |
---|
1232 | 1250 | if (!amdgpu_connector) { |
---|
1233 | 1251 | DRM_ERROR("Couldn't find encoder's connector\n"); |
---|
.. | .. |
---|
1253 | 1271 | |
---|
1254 | 1272 | static void dce_v10_0_audio_write_speaker_allocation(struct drm_encoder *encoder) |
---|
1255 | 1273 | { |
---|
1256 | | - struct amdgpu_device *adev = encoder->dev->dev_private; |
---|
| 1274 | + struct drm_device *dev = encoder->dev; |
---|
| 1275 | + struct amdgpu_device *adev = drm_to_adev(dev); |
---|
1257 | 1276 | struct amdgpu_encoder *amdgpu_encoder = to_amdgpu_encoder(encoder); |
---|
1258 | 1277 | struct amdgpu_encoder_atom_dig *dig = amdgpu_encoder->enc_priv; |
---|
1259 | 1278 | struct drm_connector *connector; |
---|
| 1279 | + struct drm_connector_list_iter iter; |
---|
1260 | 1280 | struct amdgpu_connector *amdgpu_connector = NULL; |
---|
1261 | 1281 | u32 tmp; |
---|
1262 | 1282 | u8 *sadb = NULL; |
---|
.. | .. |
---|
1265 | 1285 | if (!dig || !dig->afmt || !dig->afmt->pin) |
---|
1266 | 1286 | return; |
---|
1267 | 1287 | |
---|
1268 | | - list_for_each_entry(connector, &encoder->dev->mode_config.connector_list, head) { |
---|
| 1288 | + drm_connector_list_iter_begin(dev, &iter); |
---|
| 1289 | + drm_for_each_connector_iter(connector, &iter) { |
---|
1269 | 1290 | if (connector->encoder == encoder) { |
---|
1270 | 1291 | amdgpu_connector = to_amdgpu_connector(connector); |
---|
1271 | 1292 | break; |
---|
1272 | 1293 | } |
---|
1273 | 1294 | } |
---|
| 1295 | + drm_connector_list_iter_end(&iter); |
---|
1274 | 1296 | |
---|
1275 | 1297 | if (!amdgpu_connector) { |
---|
1276 | 1298 | DRM_ERROR("Couldn't find encoder's connector\n"); |
---|
.. | .. |
---|
1305 | 1327 | |
---|
1306 | 1328 | static void dce_v10_0_audio_write_sad_regs(struct drm_encoder *encoder) |
---|
1307 | 1329 | { |
---|
1308 | | - struct amdgpu_device *adev = encoder->dev->dev_private; |
---|
| 1330 | + struct drm_device *dev = encoder->dev; |
---|
| 1331 | + struct amdgpu_device *adev = drm_to_adev(dev); |
---|
1309 | 1332 | struct amdgpu_encoder *amdgpu_encoder = to_amdgpu_encoder(encoder); |
---|
1310 | 1333 | struct amdgpu_encoder_atom_dig *dig = amdgpu_encoder->enc_priv; |
---|
1311 | 1334 | struct drm_connector *connector; |
---|
| 1335 | + struct drm_connector_list_iter iter; |
---|
1312 | 1336 | struct amdgpu_connector *amdgpu_connector = NULL; |
---|
1313 | 1337 | struct cea_sad *sads; |
---|
1314 | 1338 | int i, sad_count; |
---|
.. | .. |
---|
1331 | 1355 | if (!dig || !dig->afmt || !dig->afmt->pin) |
---|
1332 | 1356 | return; |
---|
1333 | 1357 | |
---|
1334 | | - list_for_each_entry(connector, &encoder->dev->mode_config.connector_list, head) { |
---|
| 1358 | + drm_connector_list_iter_begin(dev, &iter); |
---|
| 1359 | + drm_for_each_connector_iter(connector, &iter) { |
---|
1335 | 1360 | if (connector->encoder == encoder) { |
---|
1336 | 1361 | amdgpu_connector = to_amdgpu_connector(connector); |
---|
1337 | 1362 | break; |
---|
1338 | 1363 | } |
---|
1339 | 1364 | } |
---|
| 1365 | + drm_connector_list_iter_end(&iter); |
---|
1340 | 1366 | |
---|
1341 | 1367 | if (!amdgpu_connector) { |
---|
1342 | 1368 | DRM_ERROR("Couldn't find encoder's connector\n"); |
---|
.. | .. |
---|
1344 | 1370 | } |
---|
1345 | 1371 | |
---|
1346 | 1372 | sad_count = drm_edid_to_sad(amdgpu_connector_edid(connector), &sads); |
---|
1347 | | - if (sad_count <= 0) { |
---|
| 1373 | + if (sad_count < 0) |
---|
1348 | 1374 | DRM_ERROR("Couldn't read SADs: %d\n", sad_count); |
---|
| 1375 | + if (sad_count <= 0) |
---|
1349 | 1376 | return; |
---|
1350 | | - } |
---|
1351 | 1377 | BUG_ON(!sads); |
---|
1352 | 1378 | |
---|
1353 | 1379 | for (i = 0; i < ARRAY_SIZE(eld_reg_to_type); i++) { |
---|
.. | .. |
---|
1457 | 1483 | static void dce_v10_0_afmt_update_ACR(struct drm_encoder *encoder, uint32_t clock) |
---|
1458 | 1484 | { |
---|
1459 | 1485 | struct drm_device *dev = encoder->dev; |
---|
1460 | | - struct amdgpu_device *adev = dev->dev_private; |
---|
| 1486 | + struct amdgpu_device *adev = drm_to_adev(dev); |
---|
1461 | 1487 | struct amdgpu_afmt_acr acr = amdgpu_afmt_acr(clock); |
---|
1462 | 1488 | struct amdgpu_encoder *amdgpu_encoder = to_amdgpu_encoder(encoder); |
---|
1463 | 1489 | struct amdgpu_encoder_atom_dig *dig = amdgpu_encoder->enc_priv; |
---|
.. | .. |
---|
1493 | 1519 | void *buffer, size_t size) |
---|
1494 | 1520 | { |
---|
1495 | 1521 | struct drm_device *dev = encoder->dev; |
---|
1496 | | - struct amdgpu_device *adev = dev->dev_private; |
---|
| 1522 | + struct amdgpu_device *adev = drm_to_adev(dev); |
---|
1497 | 1523 | struct amdgpu_encoder *amdgpu_encoder = to_amdgpu_encoder(encoder); |
---|
1498 | 1524 | struct amdgpu_encoder_atom_dig *dig = amdgpu_encoder->enc_priv; |
---|
1499 | 1525 | uint8_t *frame = buffer + 3; |
---|
.. | .. |
---|
1512 | 1538 | static void dce_v10_0_audio_set_dto(struct drm_encoder *encoder, u32 clock) |
---|
1513 | 1539 | { |
---|
1514 | 1540 | struct drm_device *dev = encoder->dev; |
---|
1515 | | - struct amdgpu_device *adev = dev->dev_private; |
---|
| 1541 | + struct amdgpu_device *adev = drm_to_adev(dev); |
---|
1516 | 1542 | struct amdgpu_encoder *amdgpu_encoder = to_amdgpu_encoder(encoder); |
---|
1517 | 1543 | struct amdgpu_encoder_atom_dig *dig = amdgpu_encoder->enc_priv; |
---|
1518 | 1544 | struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(encoder->crtc); |
---|
.. | .. |
---|
1543 | 1569 | struct drm_display_mode *mode) |
---|
1544 | 1570 | { |
---|
1545 | 1571 | struct drm_device *dev = encoder->dev; |
---|
1546 | | - struct amdgpu_device *adev = dev->dev_private; |
---|
| 1572 | + struct amdgpu_device *adev = drm_to_adev(dev); |
---|
1547 | 1573 | struct amdgpu_encoder *amdgpu_encoder = to_amdgpu_encoder(encoder); |
---|
1548 | 1574 | struct amdgpu_encoder_atom_dig *dig = amdgpu_encoder->enc_priv; |
---|
1549 | 1575 | struct drm_connector *connector = amdgpu_get_connector_for_encoder(encoder); |
---|
.. | .. |
---|
1681 | 1707 | dce_v10_0_audio_write_sad_regs(encoder); |
---|
1682 | 1708 | dce_v10_0_audio_write_latency_fields(encoder, mode); |
---|
1683 | 1709 | |
---|
1684 | | - err = drm_hdmi_avi_infoframe_from_display_mode(&frame, mode, false); |
---|
| 1710 | + err = drm_hdmi_avi_infoframe_from_display_mode(&frame, connector, mode); |
---|
1685 | 1711 | if (err < 0) { |
---|
1686 | 1712 | DRM_ERROR("failed to setup AVI infoframe: %zd\n", err); |
---|
1687 | 1713 | return; |
---|
.. | .. |
---|
1723 | 1749 | static void dce_v10_0_afmt_enable(struct drm_encoder *encoder, bool enable) |
---|
1724 | 1750 | { |
---|
1725 | 1751 | struct drm_device *dev = encoder->dev; |
---|
1726 | | - struct amdgpu_device *adev = dev->dev_private; |
---|
| 1752 | + struct amdgpu_device *adev = drm_to_adev(dev); |
---|
1727 | 1753 | struct amdgpu_encoder *amdgpu_encoder = to_amdgpu_encoder(encoder); |
---|
1728 | 1754 | struct amdgpu_encoder_atom_dig *dig = amdgpu_encoder->enc_priv; |
---|
1729 | 1755 | |
---|
.. | .. |
---|
1796 | 1822 | { |
---|
1797 | 1823 | struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(crtc); |
---|
1798 | 1824 | struct drm_device *dev = crtc->dev; |
---|
1799 | | - struct amdgpu_device *adev = dev->dev_private; |
---|
| 1825 | + struct amdgpu_device *adev = drm_to_adev(dev); |
---|
1800 | 1826 | u32 vga_control; |
---|
1801 | 1827 | |
---|
1802 | 1828 | vga_control = RREG32(vga_control_regs[amdgpu_crtc->crtc_id]) & ~1; |
---|
.. | .. |
---|
1810 | 1836 | { |
---|
1811 | 1837 | struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(crtc); |
---|
1812 | 1838 | struct drm_device *dev = crtc->dev; |
---|
1813 | | - struct amdgpu_device *adev = dev->dev_private; |
---|
| 1839 | + struct amdgpu_device *adev = drm_to_adev(dev); |
---|
1814 | 1840 | |
---|
1815 | 1841 | if (enable) |
---|
1816 | 1842 | WREG32(mmGRPH_ENABLE + amdgpu_crtc->crtc_offset, 1); |
---|
.. | .. |
---|
1824 | 1850 | { |
---|
1825 | 1851 | struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(crtc); |
---|
1826 | 1852 | struct drm_device *dev = crtc->dev; |
---|
1827 | | - struct amdgpu_device *adev = dev->dev_private; |
---|
| 1853 | + struct amdgpu_device *adev = drm_to_adev(dev); |
---|
1828 | 1854 | struct drm_framebuffer *target_fb; |
---|
1829 | 1855 | struct drm_gem_object *obj; |
---|
1830 | 1856 | struct amdgpu_bo *abo; |
---|
.. | .. |
---|
1942 | 1968 | /* Greater 8 bpc fb needs to bypass hw-lut to retain precision */ |
---|
1943 | 1969 | bypass_lut = true; |
---|
1944 | 1970 | break; |
---|
| 1971 | + case DRM_FORMAT_XBGR8888: |
---|
| 1972 | + case DRM_FORMAT_ABGR8888: |
---|
| 1973 | + fb_format = REG_SET_FIELD(0, GRPH_CONTROL, GRPH_DEPTH, 2); |
---|
| 1974 | + fb_format = REG_SET_FIELD(fb_format, GRPH_CONTROL, GRPH_FORMAT, 0); |
---|
| 1975 | + fb_swap = REG_SET_FIELD(fb_swap, GRPH_SWAP_CNTL, GRPH_RED_CROSSBAR, 2); |
---|
| 1976 | + fb_swap = REG_SET_FIELD(fb_swap, GRPH_SWAP_CNTL, GRPH_BLUE_CROSSBAR, 2); |
---|
| 1977 | +#ifdef __BIG_ENDIAN |
---|
| 1978 | + fb_swap = REG_SET_FIELD(fb_swap, GRPH_SWAP_CNTL, GRPH_ENDIAN_SWAP, |
---|
| 1979 | + ENDIAN_8IN32); |
---|
| 1980 | +#endif |
---|
| 1981 | + break; |
---|
1945 | 1982 | default: |
---|
1946 | 1983 | DRM_ERROR("Unsupported screen format %s\n", |
---|
1947 | 1984 | drm_get_format_name(target_fb->format->format, &format_name)); |
---|
.. | .. |
---|
2058 | 2095 | struct drm_display_mode *mode) |
---|
2059 | 2096 | { |
---|
2060 | 2097 | struct drm_device *dev = crtc->dev; |
---|
2061 | | - struct amdgpu_device *adev = dev->dev_private; |
---|
| 2098 | + struct amdgpu_device *adev = drm_to_adev(dev); |
---|
2062 | 2099 | struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(crtc); |
---|
2063 | 2100 | u32 tmp; |
---|
2064 | 2101 | |
---|
.. | .. |
---|
2074 | 2111 | { |
---|
2075 | 2112 | struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(crtc); |
---|
2076 | 2113 | struct drm_device *dev = crtc->dev; |
---|
2077 | | - struct amdgpu_device *adev = dev->dev_private; |
---|
| 2114 | + struct amdgpu_device *adev = drm_to_adev(dev); |
---|
2078 | 2115 | u16 *r, *g, *b; |
---|
2079 | 2116 | int i; |
---|
2080 | 2117 | u32 tmp; |
---|
.. | .. |
---|
2213 | 2250 | { |
---|
2214 | 2251 | struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(crtc); |
---|
2215 | 2252 | struct drm_device *dev = crtc->dev; |
---|
2216 | | - struct amdgpu_device *adev = dev->dev_private; |
---|
| 2253 | + struct amdgpu_device *adev = drm_to_adev(dev); |
---|
2217 | 2254 | u32 pll_in_use; |
---|
2218 | 2255 | int pll; |
---|
2219 | 2256 | |
---|
.. | .. |
---|
2248 | 2285 | |
---|
2249 | 2286 | static void dce_v10_0_lock_cursor(struct drm_crtc *crtc, bool lock) |
---|
2250 | 2287 | { |
---|
2251 | | - struct amdgpu_device *adev = crtc->dev->dev_private; |
---|
| 2288 | + struct amdgpu_device *adev = drm_to_adev(crtc->dev); |
---|
2252 | 2289 | struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(crtc); |
---|
2253 | 2290 | uint32_t cur_lock; |
---|
2254 | 2291 | |
---|
.. | .. |
---|
2263 | 2300 | static void dce_v10_0_hide_cursor(struct drm_crtc *crtc) |
---|
2264 | 2301 | { |
---|
2265 | 2302 | struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(crtc); |
---|
2266 | | - struct amdgpu_device *adev = crtc->dev->dev_private; |
---|
| 2303 | + struct amdgpu_device *adev = drm_to_adev(crtc->dev); |
---|
2267 | 2304 | u32 tmp; |
---|
2268 | 2305 | |
---|
2269 | | - tmp = RREG32_IDX(mmCUR_CONTROL + amdgpu_crtc->crtc_offset); |
---|
| 2306 | + tmp = RREG32(mmCUR_CONTROL + amdgpu_crtc->crtc_offset); |
---|
2270 | 2307 | tmp = REG_SET_FIELD(tmp, CUR_CONTROL, CURSOR_EN, 0); |
---|
2271 | | - WREG32_IDX(mmCUR_CONTROL + amdgpu_crtc->crtc_offset, tmp); |
---|
| 2308 | + WREG32(mmCUR_CONTROL + amdgpu_crtc->crtc_offset, tmp); |
---|
2272 | 2309 | } |
---|
2273 | 2310 | |
---|
2274 | 2311 | static void dce_v10_0_show_cursor(struct drm_crtc *crtc) |
---|
2275 | 2312 | { |
---|
2276 | 2313 | struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(crtc); |
---|
2277 | | - struct amdgpu_device *adev = crtc->dev->dev_private; |
---|
| 2314 | + struct amdgpu_device *adev = drm_to_adev(crtc->dev); |
---|
2278 | 2315 | u32 tmp; |
---|
2279 | 2316 | |
---|
2280 | 2317 | WREG32(mmCUR_SURFACE_ADDRESS_HIGH + amdgpu_crtc->crtc_offset, |
---|
.. | .. |
---|
2282 | 2319 | WREG32(mmCUR_SURFACE_ADDRESS + amdgpu_crtc->crtc_offset, |
---|
2283 | 2320 | lower_32_bits(amdgpu_crtc->cursor_addr)); |
---|
2284 | 2321 | |
---|
2285 | | - tmp = RREG32_IDX(mmCUR_CONTROL + amdgpu_crtc->crtc_offset); |
---|
| 2322 | + tmp = RREG32(mmCUR_CONTROL + amdgpu_crtc->crtc_offset); |
---|
2286 | 2323 | tmp = REG_SET_FIELD(tmp, CUR_CONTROL, CURSOR_EN, 1); |
---|
2287 | 2324 | tmp = REG_SET_FIELD(tmp, CUR_CONTROL, CURSOR_MODE, 2); |
---|
2288 | | - WREG32_IDX(mmCUR_CONTROL + amdgpu_crtc->crtc_offset, tmp); |
---|
| 2325 | + WREG32(mmCUR_CONTROL + amdgpu_crtc->crtc_offset, tmp); |
---|
2289 | 2326 | } |
---|
2290 | 2327 | |
---|
2291 | 2328 | static int dce_v10_0_cursor_move_locked(struct drm_crtc *crtc, |
---|
2292 | 2329 | int x, int y) |
---|
2293 | 2330 | { |
---|
2294 | 2331 | struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(crtc); |
---|
2295 | | - struct amdgpu_device *adev = crtc->dev->dev_private; |
---|
| 2332 | + struct amdgpu_device *adev = drm_to_adev(crtc->dev); |
---|
2296 | 2333 | int xorigin = 0, yorigin = 0; |
---|
2297 | 2334 | |
---|
2298 | 2335 | amdgpu_crtc->cursor_x = x; |
---|
.. | .. |
---|
2367 | 2404 | aobj = gem_to_amdgpu_bo(obj); |
---|
2368 | 2405 | ret = amdgpu_bo_reserve(aobj, false); |
---|
2369 | 2406 | if (ret != 0) { |
---|
2370 | | - drm_gem_object_put_unlocked(obj); |
---|
| 2407 | + drm_gem_object_put(obj); |
---|
2371 | 2408 | return ret; |
---|
2372 | 2409 | } |
---|
2373 | 2410 | |
---|
.. | .. |
---|
2375 | 2412 | amdgpu_bo_unreserve(aobj); |
---|
2376 | 2413 | if (ret) { |
---|
2377 | 2414 | DRM_ERROR("Failed to pin new cursor BO (%d)\n", ret); |
---|
2378 | | - drm_gem_object_put_unlocked(obj); |
---|
| 2415 | + drm_gem_object_put(obj); |
---|
2379 | 2416 | return ret; |
---|
2380 | 2417 | } |
---|
2381 | 2418 | amdgpu_crtc->cursor_addr = amdgpu_bo_gpu_offset(aobj); |
---|
.. | .. |
---|
2410 | 2447 | amdgpu_bo_unpin(aobj); |
---|
2411 | 2448 | amdgpu_bo_unreserve(aobj); |
---|
2412 | 2449 | } |
---|
2413 | | - drm_gem_object_put_unlocked(amdgpu_crtc->cursor_bo); |
---|
| 2450 | + drm_gem_object_put(amdgpu_crtc->cursor_bo); |
---|
2414 | 2451 | } |
---|
2415 | 2452 | |
---|
2416 | 2453 | amdgpu_crtc->cursor_bo = obj; |
---|
.. | .. |
---|
2457 | 2494 | .set_config = amdgpu_display_crtc_set_config, |
---|
2458 | 2495 | .destroy = dce_v10_0_crtc_destroy, |
---|
2459 | 2496 | .page_flip_target = amdgpu_display_crtc_page_flip_target, |
---|
| 2497 | + .get_vblank_counter = amdgpu_get_vblank_counter_kms, |
---|
| 2498 | + .enable_vblank = amdgpu_enable_vblank_kms, |
---|
| 2499 | + .disable_vblank = amdgpu_disable_vblank_kms, |
---|
| 2500 | + .get_vblank_timestamp = drm_crtc_vblank_helper_get_vblank_timestamp, |
---|
2460 | 2501 | }; |
---|
2461 | 2502 | |
---|
2462 | 2503 | static void dce_v10_0_crtc_dpms(struct drm_crtc *crtc, int mode) |
---|
2463 | 2504 | { |
---|
2464 | 2505 | struct drm_device *dev = crtc->dev; |
---|
2465 | | - struct amdgpu_device *adev = dev->dev_private; |
---|
| 2506 | + struct amdgpu_device *adev = drm_to_adev(dev); |
---|
2466 | 2507 | struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(crtc); |
---|
2467 | 2508 | unsigned type; |
---|
2468 | 2509 | |
---|
.. | .. |
---|
2516 | 2557 | { |
---|
2517 | 2558 | struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(crtc); |
---|
2518 | 2559 | struct drm_device *dev = crtc->dev; |
---|
2519 | | - struct amdgpu_device *adev = dev->dev_private; |
---|
| 2560 | + struct amdgpu_device *adev = drm_to_adev(dev); |
---|
2520 | 2561 | struct amdgpu_atom_ss ss; |
---|
2521 | 2562 | int i; |
---|
2522 | 2563 | |
---|
.. | .. |
---|
2648 | 2689 | .prepare = dce_v10_0_crtc_prepare, |
---|
2649 | 2690 | .commit = dce_v10_0_crtc_commit, |
---|
2650 | 2691 | .disable = dce_v10_0_crtc_disable, |
---|
| 2692 | + .get_scanout_position = amdgpu_crtc_get_scanout_position, |
---|
2651 | 2693 | }; |
---|
2652 | 2694 | |
---|
2653 | 2695 | static int dce_v10_0_crtc_init(struct amdgpu_device *adev, int index) |
---|
.. | .. |
---|
2659 | 2701 | if (amdgpu_crtc == NULL) |
---|
2660 | 2702 | return -ENOMEM; |
---|
2661 | 2703 | |
---|
2662 | | - drm_crtc_init(adev->ddev, &amdgpu_crtc->base, &dce_v10_0_crtc_funcs); |
---|
| 2704 | + drm_crtc_init(adev_to_drm(adev), &amdgpu_crtc->base, &dce_v10_0_crtc_funcs); |
---|
2663 | 2705 | |
---|
2664 | 2706 | drm_mode_crtc_set_gamma_size(&amdgpu_crtc->base, 256); |
---|
2665 | 2707 | amdgpu_crtc->crtc_id = index; |
---|
.. | .. |
---|
2667 | 2709 | |
---|
2668 | 2710 | amdgpu_crtc->max_cursor_width = 128; |
---|
2669 | 2711 | amdgpu_crtc->max_cursor_height = 128; |
---|
2670 | | - adev->ddev->mode_config.cursor_width = amdgpu_crtc->max_cursor_width; |
---|
2671 | | - adev->ddev->mode_config.cursor_height = amdgpu_crtc->max_cursor_height; |
---|
| 2712 | + adev_to_drm(adev)->mode_config.cursor_width = amdgpu_crtc->max_cursor_width; |
---|
| 2713 | + adev_to_drm(adev)->mode_config.cursor_height = amdgpu_crtc->max_cursor_height; |
---|
2672 | 2714 | |
---|
2673 | 2715 | switch (amdgpu_crtc->crtc_id) { |
---|
2674 | 2716 | case 0: |
---|
.. | .. |
---|
2734 | 2776 | struct amdgpu_device *adev = (struct amdgpu_device *)handle; |
---|
2735 | 2777 | |
---|
2736 | 2778 | for (i = 0; i < adev->mode_info.num_crtc; i++) { |
---|
2737 | | - r = amdgpu_irq_add_id(adev, AMDGPU_IH_CLIENTID_LEGACY, i + 1, &adev->crtc_irq); |
---|
| 2779 | + r = amdgpu_irq_add_id(adev, AMDGPU_IRQ_CLIENTID_LEGACY, i + 1, &adev->crtc_irq); |
---|
2738 | 2780 | if (r) |
---|
2739 | 2781 | return r; |
---|
2740 | 2782 | } |
---|
2741 | 2783 | |
---|
2742 | 2784 | for (i = VISLANDS30_IV_SRCID_D1_GRPH_PFLIP; i < 20; i += 2) { |
---|
2743 | | - r = amdgpu_irq_add_id(adev, AMDGPU_IH_CLIENTID_LEGACY, i, &adev->pageflip_irq); |
---|
| 2785 | + r = amdgpu_irq_add_id(adev, AMDGPU_IRQ_CLIENTID_LEGACY, i, &adev->pageflip_irq); |
---|
2744 | 2786 | if (r) |
---|
2745 | 2787 | return r; |
---|
2746 | 2788 | } |
---|
2747 | 2789 | |
---|
2748 | 2790 | /* HPD hotplug */ |
---|
2749 | | - r = amdgpu_irq_add_id(adev, AMDGPU_IH_CLIENTID_LEGACY, VISLANDS30_IV_SRCID_HOTPLUG_DETECT_A, &adev->hpd_irq); |
---|
| 2791 | + r = amdgpu_irq_add_id(adev, AMDGPU_IRQ_CLIENTID_LEGACY, VISLANDS30_IV_SRCID_HOTPLUG_DETECT_A, &adev->hpd_irq); |
---|
2750 | 2792 | if (r) |
---|
2751 | 2793 | return r; |
---|
2752 | 2794 | |
---|
2753 | | - adev->ddev->mode_config.funcs = &amdgpu_mode_funcs; |
---|
| 2795 | + adev_to_drm(adev)->mode_config.funcs = &amdgpu_mode_funcs; |
---|
2754 | 2796 | |
---|
2755 | | - adev->ddev->mode_config.async_page_flip = true; |
---|
| 2797 | + adev_to_drm(adev)->mode_config.async_page_flip = true; |
---|
2756 | 2798 | |
---|
2757 | | - adev->ddev->mode_config.max_width = 16384; |
---|
2758 | | - adev->ddev->mode_config.max_height = 16384; |
---|
| 2799 | + adev_to_drm(adev)->mode_config.max_width = 16384; |
---|
| 2800 | + adev_to_drm(adev)->mode_config.max_height = 16384; |
---|
2759 | 2801 | |
---|
2760 | | - adev->ddev->mode_config.preferred_depth = 24; |
---|
2761 | | - adev->ddev->mode_config.prefer_shadow = 1; |
---|
| 2802 | + adev_to_drm(adev)->mode_config.preferred_depth = 24; |
---|
| 2803 | + adev_to_drm(adev)->mode_config.prefer_shadow = 1; |
---|
2762 | 2804 | |
---|
2763 | | - adev->ddev->mode_config.fb_base = adev->gmc.aper_base; |
---|
| 2805 | + adev_to_drm(adev)->mode_config.fb_base = adev->gmc.aper_base; |
---|
2764 | 2806 | |
---|
2765 | 2807 | r = amdgpu_display_modeset_create_props(adev); |
---|
2766 | 2808 | if (r) |
---|
2767 | 2809 | return r; |
---|
2768 | 2810 | |
---|
2769 | | - adev->ddev->mode_config.max_width = 16384; |
---|
2770 | | - adev->ddev->mode_config.max_height = 16384; |
---|
| 2811 | + adev_to_drm(adev)->mode_config.max_width = 16384; |
---|
| 2812 | + adev_to_drm(adev)->mode_config.max_height = 16384; |
---|
2771 | 2813 | |
---|
2772 | 2814 | /* allocate crtcs */ |
---|
2773 | 2815 | for (i = 0; i < adev->mode_info.num_crtc; i++) { |
---|
.. | .. |
---|
2777 | 2819 | } |
---|
2778 | 2820 | |
---|
2779 | 2821 | if (amdgpu_atombios_get_connector_info_from_object_table(adev)) |
---|
2780 | | - amdgpu_display_print_display_setup(adev->ddev); |
---|
| 2822 | + amdgpu_display_print_display_setup(adev_to_drm(adev)); |
---|
2781 | 2823 | else |
---|
2782 | 2824 | return -EINVAL; |
---|
2783 | 2825 | |
---|
.. | .. |
---|
2790 | 2832 | if (r) |
---|
2791 | 2833 | return r; |
---|
2792 | 2834 | |
---|
2793 | | - drm_kms_helper_poll_init(adev->ddev); |
---|
| 2835 | + drm_kms_helper_poll_init(adev_to_drm(adev)); |
---|
2794 | 2836 | |
---|
2795 | 2837 | adev->mode_info.mode_config_initialized = true; |
---|
2796 | 2838 | return 0; |
---|
.. | .. |
---|
2802 | 2844 | |
---|
2803 | 2845 | kfree(adev->mode_info.bios_hardcoded_edid); |
---|
2804 | 2846 | |
---|
2805 | | - drm_kms_helper_poll_fini(adev->ddev); |
---|
| 2847 | + drm_kms_helper_poll_fini(adev_to_drm(adev)); |
---|
2806 | 2848 | |
---|
2807 | 2849 | dce_v10_0_audio_fini(adev); |
---|
2808 | 2850 | |
---|
2809 | 2851 | dce_v10_0_afmt_fini(adev); |
---|
2810 | 2852 | |
---|
2811 | | - drm_mode_config_cleanup(adev->ddev); |
---|
| 2853 | + drm_mode_config_cleanup(adev_to_drm(adev)); |
---|
2812 | 2854 | adev->mode_info.mode_config_initialized = false; |
---|
2813 | 2855 | |
---|
2814 | 2856 | return 0; |
---|
.. | .. |
---|
3115 | 3157 | if (amdgpu_crtc == NULL) |
---|
3116 | 3158 | return 0; |
---|
3117 | 3159 | |
---|
3118 | | - spin_lock_irqsave(&adev->ddev->event_lock, flags); |
---|
| 3160 | + spin_lock_irqsave(&adev_to_drm(adev)->event_lock, flags); |
---|
3119 | 3161 | works = amdgpu_crtc->pflip_works; |
---|
3120 | 3162 | if (amdgpu_crtc->pflip_status != AMDGPU_FLIP_SUBMITTED) { |
---|
3121 | 3163 | DRM_DEBUG_DRIVER("amdgpu_crtc->pflip_status = %d != " |
---|
3122 | 3164 | "AMDGPU_FLIP_SUBMITTED(%d)\n", |
---|
3123 | 3165 | amdgpu_crtc->pflip_status, |
---|
3124 | 3166 | AMDGPU_FLIP_SUBMITTED); |
---|
3125 | | - spin_unlock_irqrestore(&adev->ddev->event_lock, flags); |
---|
| 3167 | + spin_unlock_irqrestore(&adev_to_drm(adev)->event_lock, flags); |
---|
3126 | 3168 | return 0; |
---|
3127 | 3169 | } |
---|
3128 | 3170 | |
---|
.. | .. |
---|
3134 | 3176 | if (works->event) |
---|
3135 | 3177 | drm_crtc_send_vblank_event(&amdgpu_crtc->base, works->event); |
---|
3136 | 3178 | |
---|
3137 | | - spin_unlock_irqrestore(&adev->ddev->event_lock, flags); |
---|
| 3179 | + spin_unlock_irqrestore(&adev_to_drm(adev)->event_lock, flags); |
---|
3138 | 3180 | |
---|
3139 | 3181 | drm_crtc_vblank_put(&amdgpu_crtc->base); |
---|
3140 | 3182 | schedule_work(&works->unpin_work); |
---|
.. | .. |
---|
3203 | 3245 | DRM_DEBUG("IH: IH event w/o asserted irq bit?\n"); |
---|
3204 | 3246 | |
---|
3205 | 3247 | if (amdgpu_irq_enabled(adev, source, irq_type)) { |
---|
3206 | | - drm_handle_vblank(adev->ddev, crtc); |
---|
| 3248 | + drm_handle_vblank(adev_to_drm(adev), crtc); |
---|
3207 | 3249 | } |
---|
3208 | 3250 | DRM_DEBUG("IH: D%d vblank\n", crtc + 1); |
---|
3209 | 3251 | |
---|
.. | .. |
---|
3303 | 3345 | |
---|
3304 | 3346 | static void dce_v10_0_encoder_prepare(struct drm_encoder *encoder) |
---|
3305 | 3347 | { |
---|
3306 | | - struct amdgpu_device *adev = encoder->dev->dev_private; |
---|
| 3348 | + struct amdgpu_device *adev = drm_to_adev(encoder->dev); |
---|
3307 | 3349 | struct amdgpu_encoder *amdgpu_encoder = to_amdgpu_encoder(encoder); |
---|
3308 | 3350 | struct drm_connector *connector = amdgpu_get_connector_for_encoder(encoder); |
---|
3309 | 3351 | |
---|
.. | .. |
---|
3343 | 3385 | static void dce_v10_0_encoder_commit(struct drm_encoder *encoder) |
---|
3344 | 3386 | { |
---|
3345 | 3387 | struct drm_device *dev = encoder->dev; |
---|
3346 | | - struct amdgpu_device *adev = dev->dev_private; |
---|
| 3388 | + struct amdgpu_device *adev = drm_to_adev(dev); |
---|
3347 | 3389 | |
---|
3348 | 3390 | /* need to call this here as we need the crtc set up */ |
---|
3349 | 3391 | amdgpu_atombios_encoder_dpms(encoder, DRM_MODE_DPMS_ON); |
---|
.. | .. |
---|
3443 | 3485 | uint32_t supported_device, |
---|
3444 | 3486 | u16 caps) |
---|
3445 | 3487 | { |
---|
3446 | | - struct drm_device *dev = adev->ddev; |
---|
| 3488 | + struct drm_device *dev = adev_to_drm(adev); |
---|
3447 | 3489 | struct drm_encoder *encoder; |
---|
3448 | 3490 | struct amdgpu_encoder *amdgpu_encoder; |
---|
3449 | 3491 | |
---|
.. | .. |
---|
3558 | 3600 | |
---|
3559 | 3601 | static void dce_v10_0_set_display_funcs(struct amdgpu_device *adev) |
---|
3560 | 3602 | { |
---|
3561 | | - if (adev->mode_info.funcs == NULL) |
---|
3562 | | - adev->mode_info.funcs = &dce_v10_0_display_funcs; |
---|
| 3603 | + adev->mode_info.funcs = &dce_v10_0_display_funcs; |
---|
3563 | 3604 | } |
---|
3564 | 3605 | |
---|
3565 | 3606 | static const struct amdgpu_irq_src_funcs dce_v10_0_crtc_irq_funcs = { |
---|