aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c100
1 files changed, 41 insertions, 59 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
index 9ecdf621a74a..d02493cf9175 100644
--- a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
@@ -681,53 +681,53 @@ static void gfx_v8_0_init_golden_registers(struct amdgpu_device *adev)
681 case CHIP_TOPAZ: 681 case CHIP_TOPAZ:
682 amdgpu_program_register_sequence(adev, 682 amdgpu_program_register_sequence(adev,
683 iceland_mgcg_cgcg_init, 683 iceland_mgcg_cgcg_init,
684 (const u32)ARRAY_SIZE(iceland_mgcg_cgcg_init)); 684 ARRAY_SIZE(iceland_mgcg_cgcg_init));
685 amdgpu_program_register_sequence(adev, 685 amdgpu_program_register_sequence(adev,
686 golden_settings_iceland_a11, 686 golden_settings_iceland_a11,
687 (const u32)ARRAY_SIZE(golden_settings_iceland_a11)); 687 ARRAY_SIZE(golden_settings_iceland_a11));
688 amdgpu_program_register_sequence(adev, 688 amdgpu_program_register_sequence(adev,
689 iceland_golden_common_all, 689 iceland_golden_common_all,
690 (const u32)ARRAY_SIZE(iceland_golden_common_all)); 690 ARRAY_SIZE(iceland_golden_common_all));
691 break; 691 break;
692 case CHIP_FIJI: 692 case CHIP_FIJI:
693 amdgpu_program_register_sequence(adev, 693 amdgpu_program_register_sequence(adev,
694 fiji_mgcg_cgcg_init, 694 fiji_mgcg_cgcg_init,
695 (const u32)ARRAY_SIZE(fiji_mgcg_cgcg_init)); 695 ARRAY_SIZE(fiji_mgcg_cgcg_init));
696 amdgpu_program_register_sequence(adev, 696 amdgpu_program_register_sequence(adev,
697 golden_settings_fiji_a10, 697 golden_settings_fiji_a10,
698 (const u32)ARRAY_SIZE(golden_settings_fiji_a10)); 698 ARRAY_SIZE(golden_settings_fiji_a10));
699 amdgpu_program_register_sequence(adev, 699 amdgpu_program_register_sequence(adev,
700 fiji_golden_common_all, 700 fiji_golden_common_all,
701 (const u32)ARRAY_SIZE(fiji_golden_common_all)); 701 ARRAY_SIZE(fiji_golden_common_all));
702 break; 702 break;
703 703
704 case CHIP_TONGA: 704 case CHIP_TONGA:
705 amdgpu_program_register_sequence(adev, 705 amdgpu_program_register_sequence(adev,
706 tonga_mgcg_cgcg_init, 706 tonga_mgcg_cgcg_init,
707 (const u32)ARRAY_SIZE(tonga_mgcg_cgcg_init)); 707 ARRAY_SIZE(tonga_mgcg_cgcg_init));
708 amdgpu_program_register_sequence(adev, 708 amdgpu_program_register_sequence(adev,
709 golden_settings_tonga_a11, 709 golden_settings_tonga_a11,
710 (const u32)ARRAY_SIZE(golden_settings_tonga_a11)); 710 ARRAY_SIZE(golden_settings_tonga_a11));
711 amdgpu_program_register_sequence(adev, 711 amdgpu_program_register_sequence(adev,
712 tonga_golden_common_all, 712 tonga_golden_common_all,
713 (const u32)ARRAY_SIZE(tonga_golden_common_all)); 713 ARRAY_SIZE(tonga_golden_common_all));
714 break; 714 break;
715 case CHIP_POLARIS11: 715 case CHIP_POLARIS11:
716 case CHIP_POLARIS12: 716 case CHIP_POLARIS12:
717 amdgpu_program_register_sequence(adev, 717 amdgpu_program_register_sequence(adev,
718 golden_settings_polaris11_a11, 718 golden_settings_polaris11_a11,
719 (const u32)ARRAY_SIZE(golden_settings_polaris11_a11)); 719 ARRAY_SIZE(golden_settings_polaris11_a11));
720 amdgpu_program_register_sequence(adev, 720 amdgpu_program_register_sequence(adev,
721 polaris11_golden_common_all, 721 polaris11_golden_common_all,
722 (const u32)ARRAY_SIZE(polaris11_golden_common_all)); 722 ARRAY_SIZE(polaris11_golden_common_all));
723 break; 723 break;
724 case CHIP_POLARIS10: 724 case CHIP_POLARIS10:
725 amdgpu_program_register_sequence(adev, 725 amdgpu_program_register_sequence(adev,
726 golden_settings_polaris10_a11, 726 golden_settings_polaris10_a11,
727 (const u32)ARRAY_SIZE(golden_settings_polaris10_a11)); 727 ARRAY_SIZE(golden_settings_polaris10_a11));
728 amdgpu_program_register_sequence(adev, 728 amdgpu_program_register_sequence(adev,
729 polaris10_golden_common_all, 729 polaris10_golden_common_all,
730 (const u32)ARRAY_SIZE(polaris10_golden_common_all)); 730 ARRAY_SIZE(polaris10_golden_common_all));
731 WREG32_SMC(ixCG_ACLK_CNTL, 0x0000001C); 731 WREG32_SMC(ixCG_ACLK_CNTL, 0x0000001C);
732 if (adev->pdev->revision == 0xc7 && 732 if (adev->pdev->revision == 0xc7 &&
733 ((adev->pdev->subsystem_device == 0xb37 && adev->pdev->subsystem_vendor == 0x1002) || 733 ((adev->pdev->subsystem_device == 0xb37 && adev->pdev->subsystem_vendor == 0x1002) ||
@@ -740,24 +740,24 @@ static void gfx_v8_0_init_golden_registers(struct amdgpu_device *adev)
740 case CHIP_CARRIZO: 740 case CHIP_CARRIZO:
741 amdgpu_program_register_sequence(adev, 741 amdgpu_program_register_sequence(adev,
742 cz_mgcg_cgcg_init, 742 cz_mgcg_cgcg_init,
743 (const u32)ARRAY_SIZE(cz_mgcg_cgcg_init)); 743 ARRAY_SIZE(cz_mgcg_cgcg_init));
744 amdgpu_program_register_sequence(adev, 744 amdgpu_program_register_sequence(adev,
745 cz_golden_settings_a11, 745 cz_golden_settings_a11,
746 (const u32)ARRAY_SIZE(cz_golden_settings_a11)); 746 ARRAY_SIZE(cz_golden_settings_a11));
747 amdgpu_program_register_sequence(adev, 747 amdgpu_program_register_sequence(adev,
748 cz_golden_common_all, 748 cz_golden_common_all,
749 (const u32)ARRAY_SIZE(cz_golden_common_all)); 749 ARRAY_SIZE(cz_golden_common_all));
750 break; 750 break;
751 case CHIP_STONEY: 751 case CHIP_STONEY:
752 amdgpu_program_register_sequence(adev, 752 amdgpu_program_register_sequence(adev,
753 stoney_mgcg_cgcg_init, 753 stoney_mgcg_cgcg_init,
754 (const u32)ARRAY_SIZE(stoney_mgcg_cgcg_init)); 754 ARRAY_SIZE(stoney_mgcg_cgcg_init));
755 amdgpu_program_register_sequence(adev, 755 amdgpu_program_register_sequence(adev,
756 stoney_golden_settings_a11, 756 stoney_golden_settings_a11,
757 (const u32)ARRAY_SIZE(stoney_golden_settings_a11)); 757 ARRAY_SIZE(stoney_golden_settings_a11));
758 amdgpu_program_register_sequence(adev, 758 amdgpu_program_register_sequence(adev,
759 stoney_golden_common_all, 759 stoney_golden_common_all,
760 (const u32)ARRAY_SIZE(stoney_golden_common_all)); 760 ARRAY_SIZE(stoney_golden_common_all));
761 break; 761 break;
762 default: 762 default:
763 break; 763 break;
@@ -804,7 +804,7 @@ static int gfx_v8_0_ring_test_ring(struct amdgpu_ring *ring)
804 DRM_UDELAY(1); 804 DRM_UDELAY(1);
805 } 805 }
806 if (i < adev->usec_timeout) { 806 if (i < adev->usec_timeout) {
807 DRM_INFO("ring test on %d succeeded in %d usecs\n", 807 DRM_DEBUG("ring test on %d succeeded in %d usecs\n",
808 ring->idx, i); 808 ring->idx, i);
809 } else { 809 } else {
810 DRM_ERROR("amdgpu: ring %d test failed (scratch(0x%04X)=0x%08X)\n", 810 DRM_ERROR("amdgpu: ring %d test failed (scratch(0x%04X)=0x%08X)\n",
@@ -856,7 +856,7 @@ static int gfx_v8_0_ring_test_ib(struct amdgpu_ring *ring, long timeout)
856 } 856 }
857 tmp = RREG32(scratch); 857 tmp = RREG32(scratch);
858 if (tmp == 0xDEADBEEF) { 858 if (tmp == 0xDEADBEEF) {
859 DRM_INFO("ib test on ring %d succeeded\n", ring->idx); 859 DRM_DEBUG("ib test on ring %d succeeded\n", ring->idx);
860 r = 0; 860 r = 0;
861 } else { 861 } else {
862 DRM_ERROR("amdgpu: ib test failed (scratch(0x%04X)=0x%08X)\n", 862 DRM_ERROR("amdgpu: ib test failed (scratch(0x%04X)=0x%08X)\n",
@@ -2114,7 +2114,6 @@ static int gfx_v8_0_sw_fini(void *handle)
2114 amdgpu_gfx_compute_mqd_sw_fini(adev); 2114 amdgpu_gfx_compute_mqd_sw_fini(adev);
2115 amdgpu_gfx_kiq_free_ring(&adev->gfx.kiq.ring, &adev->gfx.kiq.irq); 2115 amdgpu_gfx_kiq_free_ring(&adev->gfx.kiq.ring, &adev->gfx.kiq.irq);
2116 amdgpu_gfx_kiq_fini(adev); 2116 amdgpu_gfx_kiq_fini(adev);
2117 amdgpu_bo_free_kernel(&adev->virt.csa_obj, &adev->virt.csa_vmid0_addr, NULL);
2118 2117
2119 gfx_v8_0_mec_fini(adev); 2118 gfx_v8_0_mec_fini(adev);
2120 gfx_v8_0_rlc_fini(adev); 2119 gfx_v8_0_rlc_fini(adev);
@@ -3851,6 +3850,14 @@ static void gfx_v8_0_wait_for_rlc_serdes(struct amdgpu_device *adev)
3851 break; 3850 break;
3852 udelay(1); 3851 udelay(1);
3853 } 3852 }
3853 if (k == adev->usec_timeout) {
3854 gfx_v8_0_select_se_sh(adev, 0xffffffff,
3855 0xffffffff, 0xffffffff);
3856 mutex_unlock(&adev->grbm_idx_mutex);
3857 DRM_INFO("Timeout wait for RLC serdes %u,%u\n",
3858 i, j);
3859 return;
3860 }
3854 } 3861 }
3855 } 3862 }
3856 gfx_v8_0_select_se_sh(adev, 0xffffffff, 0xffffffff, 0xffffffff); 3863 gfx_v8_0_select_se_sh(adev, 0xffffffff, 0xffffffff, 0xffffffff);
@@ -4305,37 +4312,8 @@ static int gfx_v8_0_cp_gfx_start(struct amdgpu_device *adev)
4305 4312
4306 amdgpu_ring_write(ring, PACKET3(PACKET3_SET_CONTEXT_REG, 2)); 4313 amdgpu_ring_write(ring, PACKET3(PACKET3_SET_CONTEXT_REG, 2));
4307 amdgpu_ring_write(ring, mmPA_SC_RASTER_CONFIG - PACKET3_SET_CONTEXT_REG_START); 4314 amdgpu_ring_write(ring, mmPA_SC_RASTER_CONFIG - PACKET3_SET_CONTEXT_REG_START);
4308 switch (adev->asic_type) { 4315 amdgpu_ring_write(ring, adev->gfx.config.rb_config[0][0].raster_config);
4309 case CHIP_TONGA: 4316 amdgpu_ring_write(ring, adev->gfx.config.rb_config[0][0].raster_config_1);
4310 case CHIP_POLARIS10:
4311 amdgpu_ring_write(ring, 0x16000012);
4312 amdgpu_ring_write(ring, 0x0000002A);
4313 break;
4314 case CHIP_POLARIS11:
4315 case CHIP_POLARIS12:
4316 amdgpu_ring_write(ring, 0x16000012);
4317 amdgpu_ring_write(ring, 0x00000000);
4318 break;
4319 case CHIP_FIJI:
4320 amdgpu_ring_write(ring, 0x3a00161a);
4321 amdgpu_ring_write(ring, 0x0000002e);
4322 break;
4323 case CHIP_CARRIZO:
4324 amdgpu_ring_write(ring, 0x00000002);
4325 amdgpu_ring_write(ring, 0x00000000);
4326 break;
4327 case CHIP_TOPAZ:
4328 amdgpu_ring_write(ring, adev->gfx.config.num_rbs == 1 ?
4329 0x00000000 : 0x00000002);
4330 amdgpu_ring_write(ring, 0x00000000);
4331 break;
4332 case CHIP_STONEY:
4333 amdgpu_ring_write(ring, 0x00000000);
4334 amdgpu_ring_write(ring, 0x00000000);
4335 break;
4336 default:
4337 BUG();
4338 }
4339 4317
4340 amdgpu_ring_write(ring, PACKET3(PACKET3_PREAMBLE_CNTL, 0)); 4318 amdgpu_ring_write(ring, PACKET3(PACKET3_PREAMBLE_CNTL, 0));
4341 amdgpu_ring_write(ring, PACKET3_PREAMBLE_END_CLEAR_STATE); 4319 amdgpu_ring_write(ring, PACKET3_PREAMBLE_END_CLEAR_STATE);
@@ -4816,7 +4794,7 @@ static int gfx_v8_0_kiq_init_queue(struct amdgpu_ring *ring)
4816 4794
4817 gfx_v8_0_kiq_setting(ring); 4795 gfx_v8_0_kiq_setting(ring);
4818 4796
4819 if (adev->in_sriov_reset) { /* for GPU_RESET case */ 4797 if (adev->in_gpu_reset) { /* for GPU_RESET case */
4820 /* reset MQD to a clean status */ 4798 /* reset MQD to a clean status */
4821 if (adev->gfx.mec.mqd_backup[mqd_idx]) 4799 if (adev->gfx.mec.mqd_backup[mqd_idx])
4822 memcpy(mqd, adev->gfx.mec.mqd_backup[mqd_idx], sizeof(struct vi_mqd_allocation)); 4800 memcpy(mqd, adev->gfx.mec.mqd_backup[mqd_idx], sizeof(struct vi_mqd_allocation));
@@ -4853,7 +4831,7 @@ static int gfx_v8_0_kcq_init_queue(struct amdgpu_ring *ring)
4853 struct vi_mqd *mqd = ring->mqd_ptr; 4831 struct vi_mqd *mqd = ring->mqd_ptr;
4854 int mqd_idx = ring - &adev->gfx.compute_ring[0]; 4832 int mqd_idx = ring - &adev->gfx.compute_ring[0];
4855 4833
4856 if (!adev->in_sriov_reset && !adev->gfx.in_suspend) { 4834 if (!adev->in_gpu_reset && !adev->gfx.in_suspend) {
4857 memset((void *)mqd, 0, sizeof(struct vi_mqd_allocation)); 4835 memset((void *)mqd, 0, sizeof(struct vi_mqd_allocation));
4858 ((struct vi_mqd_allocation *)mqd)->dynamic_cu_mask = 0xFFFFFFFF; 4836 ((struct vi_mqd_allocation *)mqd)->dynamic_cu_mask = 0xFFFFFFFF;
4859 ((struct vi_mqd_allocation *)mqd)->dynamic_rb_mask = 0xFFFFFFFF; 4837 ((struct vi_mqd_allocation *)mqd)->dynamic_rb_mask = 0xFFFFFFFF;
@@ -4865,13 +4843,10 @@ static int gfx_v8_0_kcq_init_queue(struct amdgpu_ring *ring)
4865 4843
4866 if (adev->gfx.mec.mqd_backup[mqd_idx]) 4844 if (adev->gfx.mec.mqd_backup[mqd_idx])
4867 memcpy(adev->gfx.mec.mqd_backup[mqd_idx], mqd, sizeof(struct vi_mqd_allocation)); 4845 memcpy(adev->gfx.mec.mqd_backup[mqd_idx], mqd, sizeof(struct vi_mqd_allocation));
4868 } else if (adev->in_sriov_reset) { /* for GPU_RESET case */ 4846 } else if (adev->in_gpu_reset) { /* for GPU_RESET case */
4869 /* reset MQD to a clean status */ 4847 /* reset MQD to a clean status */
4870 if (adev->gfx.mec.mqd_backup[mqd_idx]) 4848 if (adev->gfx.mec.mqd_backup[mqd_idx])
4871 memcpy(mqd, adev->gfx.mec.mqd_backup[mqd_idx], sizeof(struct vi_mqd_allocation)); 4849 memcpy(mqd, adev->gfx.mec.mqd_backup[mqd_idx], sizeof(struct vi_mqd_allocation));
4872 /* reset ring buffer */
4873 ring->wptr = 0;
4874 amdgpu_ring_clear_ring(ring);
4875 } else { 4850 } else {
4876 amdgpu_ring_clear_ring(ring); 4851 amdgpu_ring_clear_ring(ring);
4877 } 4852 }
@@ -4946,6 +4921,13 @@ static int gfx_v8_0_kiq_resume(struct amdgpu_device *adev)
4946 /* Test KCQs */ 4921 /* Test KCQs */
4947 for (i = 0; i < adev->gfx.num_compute_rings; i++) { 4922 for (i = 0; i < adev->gfx.num_compute_rings; i++) {
4948 ring = &adev->gfx.compute_ring[i]; 4923 ring = &adev->gfx.compute_ring[i];
4924 if (adev->in_gpu_reset) {
4925 /* move reset ring buffer to here to workaround
4926 * compute ring test failed
4927 */
4928 ring->wptr = 0;
4929 amdgpu_ring_clear_ring(ring);
4930 }
4949 ring->ready = true; 4931 ring->ready = true;
4950 r = amdgpu_ring_test_ring(ring); 4932 r = amdgpu_ring_test_ring(ring);
4951 if (r) 4933 if (r)