Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge branch 'drm-fixes' of git://people.freedesktop.org/~airlied/linux

* 'drm-fixes' of git://people.freedesktop.org/~airlied/linux:
drm/radeon/kms/atom: fix handling of FB scratch indices
drm/radeon/kms/DCE4.1: fix Select_CrtcSource EncodeMode setting for DP bridges (v2)
drm/radeon/kms/DCE4.1: ss is not supported on the internal pplls
drm/radeon/kms/DCE4.1: fix dig encoder to transmitter mapping
ttm: Fix error-path using an uninitialized value

+36 -9
+13 -2
drivers/gpu/drm/radeon/atom.c
··· 277 277 case ATOM_ARG_FB: 278 278 idx = U8(*ptr); 279 279 (*ptr)++; 280 - val = gctx->scratch[((gctx->fb_base + idx) / 4)]; 280 + if ((gctx->fb_base + (idx * 4)) > gctx->scratch_size_bytes) { 281 + DRM_ERROR("ATOM: fb read beyond scratch region: %d vs. %d\n", 282 + gctx->fb_base + (idx * 4), gctx->scratch_size_bytes); 283 + val = 0; 284 + } else 285 + val = gctx->scratch[(gctx->fb_base / 4) + idx]; 281 286 if (print) 282 287 DEBUG("FB[0x%02X]", idx); 283 288 break; ··· 536 531 case ATOM_ARG_FB: 537 532 idx = U8(*ptr); 538 533 (*ptr)++; 539 - gctx->scratch[((gctx->fb_base + idx) / 4)] = val; 534 + if ((gctx->fb_base + (idx * 4)) > gctx->scratch_size_bytes) { 535 + DRM_ERROR("ATOM: fb write beyond scratch region: %d vs. %d\n", 536 + gctx->fb_base + (idx * 4), gctx->scratch_size_bytes); 537 + } else 538 + gctx->scratch[(gctx->fb_base / 4) + idx] = val; 540 539 DEBUG("FB[0x%02X]", idx); 541 540 break; 542 541 case ATOM_ARG_PLL: ··· 1379 1370 1380 1371 usage_bytes = firmware_usage->asFirmwareVramReserveInfo[0].usFirmwareUseInKb * 1024; 1381 1372 } 1373 + ctx->scratch_size_bytes = 0; 1382 1374 if (usage_bytes == 0) 1383 1375 usage_bytes = 20 * 1024; 1384 1376 /* allocate some scratch memory */ 1385 1377 ctx->scratch = kzalloc(usage_bytes, GFP_KERNEL); 1386 1378 if (!ctx->scratch) 1387 1379 return -ENOMEM; 1380 + ctx->scratch_size_bytes = usage_bytes; 1388 1381 return 0; 1389 1382 }
+1
drivers/gpu/drm/radeon/atom.h
··· 137 137 int cs_equal, cs_above; 138 138 int io_mode; 139 139 uint32_t *scratch; 140 + int scratch_size_bytes; 140 141 }; 141 142 142 143 extern int atom_debug;
+1 -1
drivers/gpu/drm/radeon/atombios_crtc.c
··· 466 466 return; 467 467 } 468 468 args.v2.ucEnable = enable; 469 - if ((ss->percentage == 0) || (ss->type & ATOM_EXTERNAL_SS_MASK)) 469 + if ((ss->percentage == 0) || (ss->type & ATOM_EXTERNAL_SS_MASK) || ASIC_IS_DCE41(rdev)) 470 470 args.v2.ucEnable = ATOM_DISABLE; 471 471 } else if (ASIC_IS_DCE3(rdev)) { 472 472 args.v1.usSpreadSpectrumPercentage = cpu_to_le16(ss->percentage);
+20 -5
drivers/gpu/drm/radeon/radeon_encoders.c
··· 1638 1638 break; 1639 1639 case 2: 1640 1640 args.v2.ucCRTC = radeon_crtc->crtc_id; 1641 - args.v2.ucEncodeMode = atombios_get_encoder_mode(encoder); 1641 + if (radeon_encoder_is_dp_bridge(encoder)) { 1642 + struct drm_connector *connector = radeon_get_connector_for_encoder(encoder); 1643 + 1644 + if (connector->connector_type == DRM_MODE_CONNECTOR_LVDS) 1645 + args.v2.ucEncodeMode = ATOM_ENCODER_MODE_LVDS; 1646 + else if (connector->connector_type == DRM_MODE_CONNECTOR_VGA) 1647 + args.v2.ucEncodeMode = ATOM_ENCODER_MODE_CRT; 1648 + else 1649 + args.v2.ucEncodeMode = atombios_get_encoder_mode(encoder); 1650 + } else 1651 + args.v2.ucEncodeMode = atombios_get_encoder_mode(encoder); 1642 1652 switch (radeon_encoder->encoder_id) { 1643 1653 case ENCODER_OBJECT_ID_INTERNAL_UNIPHY: 1644 1654 case ENCODER_OBJECT_ID_INTERNAL_UNIPHY1: ··· 1766 1756 if (ASIC_IS_DCE4(rdev)) { 1767 1757 dig = radeon_encoder->enc_priv; 1768 1758 if (ASIC_IS_DCE41(rdev)) { 1769 - if (dig->linkb) 1770 - return 1; 1771 - else 1772 - return 0; 1759 + /* ontario follows DCE4 */ 1760 + if (rdev->family == CHIP_PALM) { 1761 + if (dig->linkb) 1762 + return 1; 1763 + else 1764 + return 0; 1765 + } else 1766 + /* llano follows DCE3.2 */ 1767 + return radeon_crtc->crtc_id; 1773 1768 } else { 1774 1769 switch (radeon_encoder->encoder_id) { 1775 1770 case ENCODER_OBJECT_ID_INTERNAL_UNIPHY:
+1 -1
drivers/gpu/drm/ttm/ttm_bo_util.c
··· 321 321 struct ttm_mem_type_manager *man = &bdev->man[new_mem->mem_type]; 322 322 struct ttm_tt *ttm = bo->ttm; 323 323 struct ttm_mem_reg *old_mem = &bo->mem; 324 - struct ttm_mem_reg old_copy; 324 + struct ttm_mem_reg old_copy = *old_mem; 325 325 void *old_iomap; 326 326 void *new_iomap; 327 327 int ret;