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 | cp_hdr = (const struct gfx_firmware_header_v1_0 *)adev->gfx.me_fw->data; | 941 | cp_hdr = (const struct gfx_firmware_header_v1_0 *)adev->gfx.me_fw->data; |
| 942 | adev->gfx.me_fw_version = le32_to_cpu(cp_hdr->header.ucode_version); | 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 | adev->gfx.me_feature_version = le32_to_cpu(cp_hdr->ucode_feature_version); | 944 | adev->gfx.me_feature_version = le32_to_cpu(cp_hdr->ucode_feature_version); |
| 951 | 945 | ||
| 952 | snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_ce.bin", chip_name); | 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 | adev->gfx.ce_fw_version = le32_to_cpu(cp_hdr->header.ucode_version); | 954 | adev->gfx.ce_fw_version = le32_to_cpu(cp_hdr->header.ucode_version); |
| 961 | adev->gfx.ce_feature_version = le32_to_cpu(cp_hdr->ucode_feature_version); | 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 | snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_rlc.bin", chip_name); | 968 | snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_rlc.bin", chip_name); |
| 964 | err = request_firmware(&adev->gfx.rlc_fw, fw_name, adev->dev); | 969 | err = request_firmware(&adev->gfx.rlc_fw, fw_name, adev->dev); |
| 965 | if (err) | 970 | if (err) |