diff options
34 files changed, 285 insertions, 106 deletions
diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c index 7be21781d3bd..dfa9769b26b5 100644 --- a/drivers/gpu/drm/drm_edid.c +++ b/drivers/gpu/drm/drm_edid.c | |||
| @@ -3471,18 +3471,21 @@ static bool drm_assign_hdmi_deep_color_info(struct edid *edid, | |||
| 3471 | 3471 | ||
| 3472 | if (hdmi[6] & DRM_EDID_HDMI_DC_30) { | 3472 | if (hdmi[6] & DRM_EDID_HDMI_DC_30) { |
| 3473 | dc_bpc = 10; | 3473 | dc_bpc = 10; |
| 3474 | info->edid_hdmi_dc_modes |= DRM_EDID_HDMI_DC_30; | ||
| 3474 | DRM_DEBUG("%s: HDMI sink does deep color 30.\n", | 3475 | DRM_DEBUG("%s: HDMI sink does deep color 30.\n", |
| 3475 | connector->name); | 3476 | connector->name); |
| 3476 | } | 3477 | } |
| 3477 | 3478 | ||
| 3478 | if (hdmi[6] & DRM_EDID_HDMI_DC_36) { | 3479 | if (hdmi[6] & DRM_EDID_HDMI_DC_36) { |
| 3479 | dc_bpc = 12; | 3480 | dc_bpc = 12; |
| 3481 | info->edid_hdmi_dc_modes |= DRM_EDID_HDMI_DC_36; | ||
| 3480 | DRM_DEBUG("%s: HDMI sink does deep color 36.\n", | 3482 | DRM_DEBUG("%s: HDMI sink does deep color 36.\n", |
| 3481 | connector->name); | 3483 | connector->name); |
| 3482 | } | 3484 | } |
| 3483 | 3485 | ||
| 3484 | if (hdmi[6] & DRM_EDID_HDMI_DC_48) { | 3486 | if (hdmi[6] & DRM_EDID_HDMI_DC_48) { |
| 3485 | dc_bpc = 16; | 3487 | dc_bpc = 16; |
| 3488 | info->edid_hdmi_dc_modes |= DRM_EDID_HDMI_DC_48; | ||
| 3486 | DRM_DEBUG("%s: HDMI sink does deep color 48.\n", | 3489 | DRM_DEBUG("%s: HDMI sink does deep color 48.\n", |
| 3487 | connector->name); | 3490 | connector->name); |
| 3488 | } | 3491 | } |
diff --git a/drivers/gpu/drm/radeon/atombios_crtc.c b/drivers/gpu/drm/radeon/atombios_crtc.c index 76c30f2da3fb..26c12a3fe430 100644 --- a/drivers/gpu/drm/radeon/atombios_crtc.c +++ b/drivers/gpu/drm/radeon/atombios_crtc.c | |||
| @@ -962,6 +962,9 @@ static bool atombios_crtc_prepare_pll(struct drm_crtc *crtc, struct drm_display_ | |||
| 962 | struct radeon_connector_atom_dig *dig_connector = | 962 | struct radeon_connector_atom_dig *dig_connector = |
| 963 | radeon_connector->con_priv; | 963 | radeon_connector->con_priv; |
| 964 | int dp_clock; | 964 | int dp_clock; |
| 965 | |||
| 966 | /* Assign mode clock for hdmi deep color max clock limit check */ | ||
| 967 | radeon_connector->pixelclock_for_modeset = mode->clock; | ||
| 965 | radeon_crtc->bpc = radeon_get_monitor_bpc(connector); | 968 | radeon_crtc->bpc = radeon_get_monitor_bpc(connector); |
| 966 | 969 | ||
| 967 | switch (encoder_mode) { | 970 | switch (encoder_mode) { |
diff --git a/drivers/gpu/drm/radeon/cik.c b/drivers/gpu/drm/radeon/cik.c index 69a00d64716e..dcd4518a9b08 100644 --- a/drivers/gpu/drm/radeon/cik.c +++ b/drivers/gpu/drm/radeon/cik.c | |||
| @@ -80,6 +80,7 @@ extern int sumo_rlc_init(struct radeon_device *rdev); | |||
| 80 | extern void si_vram_gtt_location(struct radeon_device *rdev, struct radeon_mc *mc); | 80 | extern void si_vram_gtt_location(struct radeon_device *rdev, struct radeon_mc *mc); |
| 81 | extern void si_rlc_reset(struct radeon_device *rdev); | 81 | extern void si_rlc_reset(struct radeon_device *rdev); |
| 82 | extern void si_init_uvd_internal_cg(struct radeon_device *rdev); | 82 | extern void si_init_uvd_internal_cg(struct radeon_device *rdev); |
| 83 | static u32 cik_get_cu_active_bitmap(struct radeon_device *rdev, u32 se, u32 sh); | ||
| 83 | extern int cik_sdma_resume(struct radeon_device *rdev); | 84 | extern int cik_sdma_resume(struct radeon_device *rdev); |
| 84 | extern void cik_sdma_enable(struct radeon_device *rdev, bool enable); | 85 | extern void cik_sdma_enable(struct radeon_device *rdev, bool enable); |
| 85 | extern void cik_sdma_fini(struct radeon_device *rdev); | 86 | extern void cik_sdma_fini(struct radeon_device *rdev); |
| @@ -3257,7 +3258,7 @@ static void cik_gpu_init(struct radeon_device *rdev) | |||
| 3257 | u32 mc_shared_chmap, mc_arb_ramcfg; | 3258 | u32 mc_shared_chmap, mc_arb_ramcfg; |
| 3258 | u32 hdp_host_path_cntl; | 3259 | u32 hdp_host_path_cntl; |
| 3259 | u32 tmp; | 3260 | u32 tmp; |
| 3260 | int i, j; | 3261 | int i, j, k; |
| 3261 | 3262 | ||
| 3262 | switch (rdev->family) { | 3263 | switch (rdev->family) { |
| 3263 | case CHIP_BONAIRE: | 3264 | case CHIP_BONAIRE: |
| @@ -3446,6 +3447,15 @@ static void cik_gpu_init(struct radeon_device *rdev) | |||
| 3446 | rdev->config.cik.max_sh_per_se, | 3447 | rdev->config.cik.max_sh_per_se, |
| 3447 | rdev->config.cik.max_backends_per_se); | 3448 | rdev->config.cik.max_backends_per_se); |
| 3448 | 3449 | ||
| 3450 | for (i = 0; i < rdev->config.cik.max_shader_engines; i++) { | ||
| 3451 | for (j = 0; j < rdev->config.cik.max_sh_per_se; j++) { | ||
| 3452 | for (k = 0; k < rdev->config.cik.max_cu_per_sh; k++) { | ||
| 3453 | rdev->config.cik.active_cus += | ||
| 3454 | hweight32(cik_get_cu_active_bitmap(rdev, i, j)); | ||
| 3455 | } | ||
| 3456 | } | ||
| 3457 | } | ||
| 3458 | |||
| 3449 | /* set HW defaults for 3D engine */ | 3459 | /* set HW defaults for 3D engine */ |
| 3450 | WREG32(CP_MEQ_THRESHOLDS, MEQ1_START(0x30) | MEQ2_START(0x60)); | 3460 | WREG32(CP_MEQ_THRESHOLDS, MEQ1_START(0x30) | MEQ2_START(0x60)); |
| 3451 | 3461 | ||
| @@ -3698,7 +3708,7 @@ bool cik_semaphore_ring_emit(struct radeon_device *rdev, | |||
| 3698 | unsigned sel = emit_wait ? PACKET3_SEM_SEL_WAIT : PACKET3_SEM_SEL_SIGNAL; | 3708 | unsigned sel = emit_wait ? PACKET3_SEM_SEL_WAIT : PACKET3_SEM_SEL_SIGNAL; |
| 3699 | 3709 | ||
| 3700 | radeon_ring_write(ring, PACKET3(PACKET3_MEM_SEMAPHORE, 1)); | 3710 | radeon_ring_write(ring, PACKET3(PACKET3_MEM_SEMAPHORE, 1)); |
| 3701 | radeon_ring_write(ring, addr & 0xffffffff); | 3711 | radeon_ring_write(ring, lower_32_bits(addr)); |
| 3702 | radeon_ring_write(ring, (upper_32_bits(addr) & 0xffff) | sel); | 3712 | radeon_ring_write(ring, (upper_32_bits(addr) & 0xffff) | sel); |
| 3703 | 3713 | ||
| 3704 | return true; | 3714 | return true; |
| @@ -3818,7 +3828,7 @@ void cik_ring_ib_execute(struct radeon_device *rdev, struct radeon_ib *ib) | |||
| 3818 | radeon_ring_write(ring, PACKET3(PACKET3_WRITE_DATA, 3)); | 3828 | radeon_ring_write(ring, PACKET3(PACKET3_WRITE_DATA, 3)); |
| 3819 | radeon_ring_write(ring, WRITE_DATA_DST_SEL(1)); | 3829 | radeon_ring_write(ring, WRITE_DATA_DST_SEL(1)); |
| 3820 | radeon_ring_write(ring, ring->next_rptr_gpu_addr & 0xfffffffc); | 3830 | radeon_ring_write(ring, ring->next_rptr_gpu_addr & 0xfffffffc); |
| 3821 | radeon_ring_write(ring, upper_32_bits(ring->next_rptr_gpu_addr) & 0xffffffff); | 3831 | radeon_ring_write(ring, upper_32_bits(ring->next_rptr_gpu_addr)); |
| 3822 | radeon_ring_write(ring, next_rptr); | 3832 | radeon_ring_write(ring, next_rptr); |
| 3823 | } | 3833 | } |
| 3824 | 3834 | ||
| @@ -5446,7 +5456,7 @@ static int cik_pcie_gart_enable(struct radeon_device *rdev) | |||
| 5446 | (u32)(rdev->dummy_page.addr >> 12)); | 5456 | (u32)(rdev->dummy_page.addr >> 12)); |
| 5447 | WREG32(VM_CONTEXT1_CNTL2, 4); | 5457 | WREG32(VM_CONTEXT1_CNTL2, 4); |
| 5448 | WREG32(VM_CONTEXT1_CNTL, ENABLE_CONTEXT | PAGE_TABLE_DEPTH(1) | | 5458 | WREG32(VM_CONTEXT1_CNTL, ENABLE_CONTEXT | PAGE_TABLE_DEPTH(1) | |
| 5449 | PAGE_TABLE_BLOCK_SIZE(RADEON_VM_BLOCK_SIZE - 9) | | 5459 | PAGE_TABLE_BLOCK_SIZE(radeon_vm_block_size - 9) | |
| 5450 | RANGE_PROTECTION_FAULT_ENABLE_INTERRUPT | | 5460 | RANGE_PROTECTION_FAULT_ENABLE_INTERRUPT | |
| 5451 | RANGE_PROTECTION_FAULT_ENABLE_DEFAULT | | 5461 | RANGE_PROTECTION_FAULT_ENABLE_DEFAULT | |
| 5452 | DUMMY_PAGE_PROTECTION_FAULT_ENABLE_INTERRUPT | | 5462 | DUMMY_PAGE_PROTECTION_FAULT_ENABLE_INTERRUPT | |
diff --git a/drivers/gpu/drm/radeon/cik_sdma.c b/drivers/gpu/drm/radeon/cik_sdma.c index 1347162ca1a4..8e9d0f1d858e 100644 --- a/drivers/gpu/drm/radeon/cik_sdma.c +++ b/drivers/gpu/drm/radeon/cik_sdma.c | |||
| @@ -141,7 +141,7 @@ void cik_sdma_ring_ib_execute(struct radeon_device *rdev, | |||
| 141 | next_rptr += 4; | 141 | next_rptr += 4; |
| 142 | radeon_ring_write(ring, SDMA_PACKET(SDMA_OPCODE_WRITE, SDMA_WRITE_SUB_OPCODE_LINEAR, 0)); | 142 | radeon_ring_write(ring, SDMA_PACKET(SDMA_OPCODE_WRITE, SDMA_WRITE_SUB_OPCODE_LINEAR, 0)); |
| 143 | radeon_ring_write(ring, ring->next_rptr_gpu_addr & 0xfffffffc); | 143 | radeon_ring_write(ring, ring->next_rptr_gpu_addr & 0xfffffffc); |
| 144 | radeon_ring_write(ring, upper_32_bits(ring->next_rptr_gpu_addr) & 0xffffffff);< | ||
