aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
diff options
context:
space:
mode:
authorEmily Deng <Emily.Deng@amd.com>2019-01-03 21:24:02 -0500
committerAlex Deucher <alexander.deucher@amd.com>2019-01-14 15:04:50 -0500
commit72d3f59205ffae6827b4af525a7963f181322e35 (patch)
treecee99d0080bf599260b6086f2c8c443b4b9251d9 /drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
parent66f92bcff0f90405150f685e4ef78fd548275f10 (diff)
drm/amdgpu/sriov: For finishing routine send rel event after init failed
When init fail, send rel init, req_fini and rel_fini to host for the finishing routine. Signed-off-by: Emily Deng <Emily.Deng@amd.com> Reviewed-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_device.c')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_device.c26
1 files changed, 15 insertions, 11 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
index 03b73c562bc8..39d5d058b2c7 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
@@ -1645,7 +1645,7 @@ static int amdgpu_device_ip_init(struct amdgpu_device *adev)
1645 if (r) { 1645 if (r) {
1646 DRM_ERROR("sw_init of IP block <%s> failed %d\n", 1646 DRM_ERROR("sw_init of IP block <%s> failed %d\n",
1647 adev->ip_blocks[i].version->funcs->name, r); 1647 adev->ip_blocks[i].version->funcs->name, r);
1648 return r; 1648 goto init_failed;
1649 } 1649 }
1650 adev->ip_blocks[i].status.sw = true; 1650 adev->ip_blocks[i].status.sw = true;
1651 1651
@@ -1654,17 +1654,17 @@ static int amdgpu_device_ip_init(struct amdgpu_device *adev)
1654 r = amdgpu_device_vram_scratch_init(adev); 1654 r = amdgpu_device_vram_scratch_init(adev);
1655 if (r) { 1655 if (r) {
1656 DRM_ERROR("amdgpu_vram_scratch_init failed %d\n", r); 1656 DRM_ERROR("amdgpu_vram_scratch_init failed %d\n", r);
1657 return r; 1657 goto init_failed;
1658 } 1658 }
1659 r = adev->ip_blocks[i].version->funcs->hw_init((void *)adev); 1659 r = adev->ip_blocks[i].version->funcs->hw_init((void *)adev);
1660 if (r) { 1660 if (r) {
1661 DRM_ERROR("hw_init %d failed %d\n", i, r); 1661 DRM_ERROR("hw_init %d failed %d\n", i, r);
1662 return r; 1662 goto init_failed;
1663 } 1663 }
1664 r = amdgpu_device_wb_init(adev); 1664 r = amdgpu_device_wb_init(adev);
1665 if (r) { 1665 if (r) {
1666 DRM_ERROR("amdgpu_device_wb_init failed %d\n", r); 1666 DRM_ERROR("amdgpu_device_wb_init failed %d\n", r);
1667 return r; 1667 goto init_failed;
1668 } 1668 }
1669 adev->ip_blocks[i].status.hw = true; 1669 adev->ip_blocks[i].status.hw = true;
1670 1670
@@ -1675,7 +1675,7 @@ static int amdgpu_device_ip_init(struct amdgpu_device *adev)
1675 AMDGPU_CSA_SIZE); 1675 AMDGPU_CSA_SIZE);
1676 if (r) { 1676 if (r) {
1677 DRM_ERROR("allocate CSA failed %d\n", r); 1677 DRM_ERROR("allocate CSA failed %d\n", r);
1678 return r; 1678 goto init_failed;
1679 } 1679 }
1680 } 1680 }
1681 } 1681 }
@@ -1683,30 +1683,32 @@ static int amdgpu_device_ip_init(struct amdgpu_device *adev)
1683 1683
1684 r = amdgpu_ucode_create_bo(adev); /* create ucode bo when sw_init complete*/ 1684 r = amdgpu_ucode_create_bo(adev); /* create ucode bo when sw_init complete*/
1685 if (r) 1685 if (r)
1686 return r; 1686 goto init_failed;
1687 1687
1688 r = amdgpu_device_ip_hw_init_phase1(adev); 1688 r = amdgpu_device_ip_hw_init_phase1(adev);
1689 if (r) 1689 if (r)
1690 return r; 1690 goto init_failed;
1691 1691
1692 r = amdgpu_device_fw_loading(adev); 1692 r = amdgpu_device_fw_loading(adev);
1693 if (r) 1693 if (r)
1694 return r; 1694 goto init_failed;
1695 1695
1696 r = amdgpu_device_ip_hw_init_phase2(adev); 1696 r = amdgpu_device_ip_hw_init_phase2(adev);
1697 if (r) 1697 if (r)
1698 return r; 1698 goto init_failed;
1699 1699
1700 if (adev->gmc.xgmi.num_physical_nodes > 1) 1700 if (adev->gmc.xgmi.num_physical_nodes > 1)
1701 amdgpu_xgmi_add_device(adev); 1701 amdgpu_xgmi_add_device(adev);
1702 amdgpu_amdkfd_device_init(adev); 1702 amdgpu_amdkfd_device_init(adev);
1703 1703
1704init_failed:
1704 if (amdgpu_sriov_vf(adev)) { 1705 if (amdgpu_sriov_vf(adev)) {
1705 amdgpu_virt_init_data_exchange(adev); 1706 if (!r)
1707 amdgpu_virt_init_data_exchange(adev);
1706 amdgpu_virt_release_full_gpu(adev, true); 1708 amdgpu_virt_release_full_gpu(adev, true);
1707 } 1709 }
1708 1710
1709 return 0; 1711 return r;
1710} 1712}
1711 1713
1712/** 1714/**
@@ -2612,6 +2614,8 @@ fence_driver_init:
2612 } 2614 }
2613 dev_err(adev->dev, "amdgpu_device_ip_init failed\n"); 2615 dev_err(adev->dev, "amdgpu_device_ip_init failed\n");
2614 amdgpu_vf_error_put(adev, AMDGIM_ERROR_VF_AMDGPU_INIT_FAIL, 0, 0); 2616 amdgpu_vf_error_put(adev, AMDGIM_ERROR_VF_AMDGPU_INIT_FAIL, 0, 0);
2617 if (amdgpu_virt_request_full_gpu(adev, false))
2618 amdgpu_virt_release_full_gpu(adev, false);
2615 goto failed; 2619 goto failed;
2616 } 2620 }
2617 2621