drm/amdgpu: Do not program IH_CHICKEN in vega20_ih.c under SRIOV
authorVictor Lu <victorchengchi.lu@amd.com>
Tue, 13 Feb 2024 22:28:40 +0000 (17:28 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Thu, 22 Feb 2024 15:27:31 +0000 (10:27 -0500)
IH_CHICKEN is blocked for VF writes; this access should be skipped.

Signed-off-by: Victor Lu <victorchengchi.lu@amd.com>
Acked-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/vega20_ih.c

index db66e6cccaf2aa4e596a8f377eed8030c55159b7..b9e7858466376c007a40f7c5b487e813647d3e14 100644 (file)
@@ -291,27 +291,29 @@ static int vega20_ih_irq_init(struct amdgpu_device *adev)
 
        adev->nbio.funcs->ih_control(adev);
 
-       if ((amdgpu_ip_version(adev, OSSSYS_HWIP, 0) == IP_VERSION(4, 2, 1)) &&
-           adev->firmware.load_type == AMDGPU_FW_LOAD_DIRECT) {
-               ih_chicken = RREG32_SOC15(OSSSYS, 0, mmIH_CHICKEN);
-               if (adev->irq.ih.use_bus_addr) {
-                       ih_chicken = REG_SET_FIELD(ih_chicken, IH_CHICKEN,
-                                                  MC_SPACE_GPA_ENABLE, 1);
+       if (!amdgpu_sriov_vf(adev)) {
+               if ((amdgpu_ip_version(adev, OSSSYS_HWIP, 0) == IP_VERSION(4, 2, 1)) &&
+                   adev->firmware.load_type == AMDGPU_FW_LOAD_DIRECT) {
+                       ih_chicken = RREG32_SOC15(OSSSYS, 0, mmIH_CHICKEN);
+                       if (adev->irq.ih.use_bus_addr) {
+                               ih_chicken = REG_SET_FIELD(ih_chicken, IH_CHICKEN,
+                                                          MC_SPACE_GPA_ENABLE, 1);
+                       }
+                       WREG32_SOC15(OSSSYS, 0, mmIH_CHICKEN, ih_chicken);
                }
-               WREG32_SOC15(OSSSYS, 0, mmIH_CHICKEN, ih_chicken);
-       }
 
-       /* psp firmware won't program IH_CHICKEN for aldebaran
-        * driver needs to program it properly according to
-        * MC_SPACE type in IH_RB_CNTL */
-       if ((amdgpu_ip_version(adev, OSSSYS_HWIP, 0) == IP_VERSION(4, 4, 0)) ||
-           (amdgpu_ip_version(adev, OSSSYS_HWIP, 0) == IP_VERSION(4, 4, 2))) {
-               ih_chicken = RREG32_SOC15(OSSSYS, 0, mmIH_CHICKEN_ALDEBARAN);
-               if (adev->irq.ih.use_bus_addr) {
-                       ih_chicken = REG_SET_FIELD(ih_chicken, IH_CHICKEN,
-                                                  MC_SPACE_GPA_ENABLE, 1);
+               /* psp firmware won't program IH_CHICKEN for aldebaran
+                * driver needs to program it properly according to
+                * MC_SPACE type in IH_RB_CNTL */
+               if ((amdgpu_ip_version(adev, OSSSYS_HWIP, 0) == IP_VERSION(4, 4, 0)) ||
+                   (amdgpu_ip_version(adev, OSSSYS_HWIP, 0) == IP_VERSION(4, 4, 2))) {
+                       ih_chicken = RREG32_SOC15(OSSSYS, 0, mmIH_CHICKEN_ALDEBARAN);
+                       if (adev->irq.ih.use_bus_addr) {
+                               ih_chicken = REG_SET_FIELD(ih_chicken, IH_CHICKEN,
+                                                          MC_SPACE_GPA_ENABLE, 1);
+                       }
+                       WREG32_SOC15(OSSSYS, 0, mmIH_CHICKEN_ALDEBARAN, ih_chicken);
                }
-               WREG32_SOC15(OSSSYS, 0, mmIH_CHICKEN_ALDEBARAN, ih_chicken);
        }
 
        for (i = 0; i < ARRAY_SIZE(ih); i++) {