Support for MCBP/Virtualization in combination with chained IBs is formal released on firmware feature version #46. So enable it according to firmware feature version, otherwise, world switch will hang.
Unified · Split
| @@ -941,12 +941,6 @@ static int gfx_v8_0_init_microcode(struct amdgpu_device *adev) · 940 unmodified lines | ||
| 941 | 941 | cp_hdr = (const struct gfx_firmware_header_v1_0 *)adev->gfx.me_fw->data; |
| 942 | 942 | adev->gfx.me_fw_version = le32_to_cpu(cp_hdr->header.ucode_version); |
| 943 | 943 | |
| 944 | − /* chain ib ucode isn't formal released, just disable it by far | |
| 945 | − * TODO: when ucod ready we should use ucode version to judge if | |
| 946 | − * chain-ib support or not. | |
| 947 | − */ | |
| 948 | − adev->virt.chained_ib_support = false; | |
| 949 | − | |
| 950 | 944 | adev->gfx.me_feature_version = le32_to_cpu(cp_hdr->ucode_feature_version); |
| 951 | 945 | |
| 952 | 946 | snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_ce.bin", chip_name); |
| @@ -960,6 +954,17 @@ static int gfx_v8_0_init_microcode(struct amdgpu_device *adev) · 7 unmodified lines | ||
| 960 | 954 | adev->gfx.ce_fw_version = le32_to_cpu(cp_hdr->header.ucode_version); |
| 961 | 955 | adev->gfx.ce_feature_version = le32_to_cpu(cp_hdr->ucode_feature_version); |
| 962 | 956 | |
| 957 | + /* | |
| 958 | + * Support for MCBP/Virtualization in combination with chained IBs is | |
| 959 | + * formal released on feature version #46 | |
| 960 | + */ | |
| 961 | + if (adev->gfx.ce_feature_version >= 46 && | |
| 962 | + adev->gfx.pfp_feature_version >= 46) { | |
| 963 | + adev->virt.chained_ib_support = true; | |
| 964 | + DRM_INFO("Chained IB support enabled!\n"); | |
| 965 | + } else | |
| 966 | + adev->virt.chained_ib_support = false; | |
| 967 | + | |
| 963 | 968 | snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_rlc.bin", chip_name); |
| 964 | 969 | err = request_firmware(&adev->gfx.rlc_fw, fw_name, adev->dev); |
| 965 | 970 | if (err) |