Note that the soft reset code for GMC v6-v7 was never
called from anywhere, so there is no loss of functionality
from this commit. The implementation looks plausible but
it was never enabled or tested, and unlikely to be useful.

We should only reset the memory controller during ASIC reset
and otherwise leave it alone. Resetting the memory controller
can break everything and risks losing the contents of VRAM
(it's unclear if VRAM is lost or not, but it's likely).

Signed-off-by: Timur Kristóf <[email protected]>
---
 drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c | 85 ---------------------------
 drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c | 83 --------------------------
 2 files changed, 168 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c 
b/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c
index cdd11587b12a..71409eb718d3 100644
--- a/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c
@@ -61,45 +61,6 @@ MODULE_FIRMWARE("amdgpu/si58_mc.bin");
 #define MC_SEQ_MISC0__MT__HBM    0x60000000
 #define MC_SEQ_MISC0__MT__DDR3   0xB0000000
 
-static void gmc_v6_0_mc_stop(struct amdgpu_device *adev)
-{
-       u32 blackout;
-       struct amdgpu_ip_block *ip_block;
-
-       ip_block = amdgpu_device_ip_get_ip_block(adev, AMD_IP_BLOCK_TYPE_GMC);
-       if (!ip_block)
-               return;
-
-       gmc_v6_0_wait_for_idle(ip_block);
-
-       blackout = RREG32(mmMC_SHARED_BLACKOUT_CNTL);
-       if (REG_GET_FIELD(blackout, MC_SHARED_BLACKOUT_CNTL, BLACKOUT_MODE) != 
1) {
-               /* Block CPU access */
-               WREG32(mmBIF_FB_EN, 0);
-               /* blackout the MC */
-               blackout = REG_SET_FIELD(blackout,
-                                        MC_SHARED_BLACKOUT_CNTL, 
BLACKOUT_MODE, 0);
-               WREG32(mmMC_SHARED_BLACKOUT_CNTL, blackout | 1);
-       }
-       /* wait for the MC to settle */
-       udelay(100);
-
-}
-
-static void gmc_v6_0_mc_resume(struct amdgpu_device *adev)
-{
-       u32 tmp;
-
-       /* unblackout the MC */
-       tmp = RREG32(mmMC_SHARED_BLACKOUT_CNTL);
-       tmp = REG_SET_FIELD(tmp, MC_SHARED_BLACKOUT_CNTL, BLACKOUT_MODE, 0);
-       WREG32(mmMC_SHARED_BLACKOUT_CNTL, tmp);
-       /* allow CPU access */
-       tmp = REG_SET_FIELD(0, BIF_FB_EN, FB_READ_EN, 1);
-       tmp = REG_SET_FIELD(tmp, BIF_FB_EN, FB_WRITE_EN, 1);
-       WREG32(mmBIF_FB_EN, tmp);
-}
-
 static int gmc_v6_0_init_microcode(struct amdgpu_device *adev)
 {
        const char *chip_name;
@@ -981,51 +942,6 @@ static int gmc_v6_0_wait_for_idle(struct amdgpu_ip_block 
*ip_block)
 
 }
 
-static int gmc_v6_0_soft_reset(struct amdgpu_ip_block *ip_block)
-{
-       struct amdgpu_device *adev = ip_block->adev;
-
-       u32 srbm_soft_reset = 0;
-       u32 tmp = RREG32(mmSRBM_STATUS);
-
-       if (tmp & SRBM_STATUS__VMC_BUSY_MASK)
-               srbm_soft_reset = REG_SET_FIELD(srbm_soft_reset,
-                                               SRBM_SOFT_RESET, 
SOFT_RESET_VMC, 1);
-
-       if (tmp & (SRBM_STATUS__MCB_BUSY_MASK | 
SRBM_STATUS__MCB_NON_DISPLAY_BUSY_MASK |
-                  SRBM_STATUS__MCC_BUSY_MASK | SRBM_STATUS__MCD_BUSY_MASK)) {
-               if (!(adev->flags & AMD_IS_APU))
-                       srbm_soft_reset = REG_SET_FIELD(srbm_soft_reset,
-                                                       SRBM_SOFT_RESET, 
SOFT_RESET_MC, 1);
-       }
-
-       if (srbm_soft_reset) {
-               gmc_v6_0_mc_stop(adev);
-
-               if (gmc_v6_0_wait_for_idle(ip_block))
-                       dev_warn(adev->dev, "Wait for GMC idle timed out !\n");
-
-               tmp = RREG32(mmSRBM_SOFT_RESET);
-               tmp |= srbm_soft_reset;
-               dev_info(adev->dev, "SRBM_SOFT_RESET=0x%08X\n", tmp);
-               WREG32(mmSRBM_SOFT_RESET, tmp);
-               tmp = RREG32(mmSRBM_SOFT_RESET);
-
-               udelay(50);
-
-               tmp &= ~srbm_soft_reset;
-               WREG32(mmSRBM_SOFT_RESET, tmp);
-               tmp = RREG32(mmSRBM_SOFT_RESET);
-
-               udelay(50);
-
-               gmc_v6_0_mc_resume(adev);
-               udelay(50);
-       }
-
-       return 0;
-}
-
 static int gmc_v6_0_vm_fault_interrupt_state(struct amdgpu_device *adev,
                                             struct amdgpu_irq_src *src,
                                             unsigned int type,
@@ -1139,7 +1055,6 @@ static const struct amd_ip_funcs gmc_v6_0_ip_funcs = {
        .suspend = gmc_v6_0_suspend,
        .resume = gmc_v6_0_resume,
        .wait_for_idle = gmc_v6_0_wait_for_idle,
-       .soft_reset = gmc_v6_0_soft_reset,
        .set_clockgating_state = gmc_v6_0_set_clockgating_state,
        .set_powergating_state = gmc_v6_0_set_powergating_state,
 };
diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c 
b/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c
index c9cc55e18893..c95e097241bf 100644
--- a/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c
@@ -85,44 +85,6 @@ static void gmc_v7_0_init_golden_registers(struct 
amdgpu_device *adev)
        }
 }
 
-static void gmc_v7_0_mc_stop(struct amdgpu_device *adev)
-{
-       struct amdgpu_ip_block *ip_block;
-       u32 blackout;
-
-       ip_block = amdgpu_device_ip_get_ip_block(adev, AMD_IP_BLOCK_TYPE_GMC);
-       if (!ip_block)
-               return;
-
-       gmc_v7_0_wait_for_idle(ip_block);
-
-       blackout = RREG32(mmMC_SHARED_BLACKOUT_CNTL);
-       if (REG_GET_FIELD(blackout, MC_SHARED_BLACKOUT_CNTL, BLACKOUT_MODE) != 
1) {
-               /* Block CPU access */
-               WREG32(mmBIF_FB_EN, 0);
-               /* blackout the MC */
-               blackout = REG_SET_FIELD(blackout,
-                                        MC_SHARED_BLACKOUT_CNTL, 
BLACKOUT_MODE, 0);
-               WREG32(mmMC_SHARED_BLACKOUT_CNTL, blackout | 1);
-       }
-       /* wait for the MC to settle */
-       udelay(100);
-}
-
-static void gmc_v7_0_mc_resume(struct amdgpu_device *adev)
-{
-       u32 tmp;
-
-       /* unblackout the MC */
-       tmp = RREG32(mmMC_SHARED_BLACKOUT_CNTL);
-       tmp = REG_SET_FIELD(tmp, MC_SHARED_BLACKOUT_CNTL, BLACKOUT_MODE, 0);
-       WREG32(mmMC_SHARED_BLACKOUT_CNTL, tmp);
-       /* allow CPU access */
-       tmp = REG_SET_FIELD(0, BIF_FB_EN, FB_READ_EN, 1);
-       tmp = REG_SET_FIELD(tmp, BIF_FB_EN, FB_WRITE_EN, 1);
-       WREG32(mmBIF_FB_EN, tmp);
-}
-
 /**
  * gmc_v7_0_init_microcode - load ucode images from disk
  *
@@ -1168,50 +1130,6 @@ static int gmc_v7_0_wait_for_idle(struct amdgpu_ip_block 
*ip_block)
 
 }
 
-static int gmc_v7_0_soft_reset(struct amdgpu_ip_block *ip_block)
-{
-       struct amdgpu_device *adev = ip_block->adev;
-       u32 srbm_soft_reset = 0;
-       u32 tmp = RREG32(mmSRBM_STATUS);
-
-       if (tmp & SRBM_STATUS__VMC_BUSY_MASK)
-               srbm_soft_reset = REG_SET_FIELD(srbm_soft_reset,
-                                               SRBM_SOFT_RESET, 
SOFT_RESET_VMC, 1);
-
-       if (tmp & (SRBM_STATUS__MCB_BUSY_MASK | 
SRBM_STATUS__MCB_NON_DISPLAY_BUSY_MASK |
-                  SRBM_STATUS__MCC_BUSY_MASK | SRBM_STATUS__MCD_BUSY_MASK)) {
-               if (!(adev->flags & AMD_IS_APU))
-                       srbm_soft_reset = REG_SET_FIELD(srbm_soft_reset,
-                                                       SRBM_SOFT_RESET, 
SOFT_RESET_MC, 1);
-       }
-
-       if (srbm_soft_reset) {
-               gmc_v7_0_mc_stop(adev);
-               if (gmc_v7_0_wait_for_idle(ip_block))
-                       dev_warn(adev->dev, "Wait for GMC idle timed out !\n");
-
-               tmp = RREG32(mmSRBM_SOFT_RESET);
-               tmp |= srbm_soft_reset;
-               dev_info(adev->dev, "SRBM_SOFT_RESET=0x%08X\n", tmp);
-               WREG32(mmSRBM_SOFT_RESET, tmp);
-               tmp = RREG32(mmSRBM_SOFT_RESET);
-
-               udelay(50);
-
-               tmp &= ~srbm_soft_reset;
-               WREG32(mmSRBM_SOFT_RESET, tmp);
-               tmp = RREG32(mmSRBM_SOFT_RESET);
-
-               /* Wait a little for things to settle down */
-               udelay(50);
-
-               gmc_v7_0_mc_resume(adev);
-               udelay(50);
-       }
-
-       return 0;
-}
-
 static int gmc_v7_0_vm_fault_interrupt_state(struct amdgpu_device *adev,
                                             struct amdgpu_irq_src *src,
                                             unsigned int type,
@@ -1353,7 +1271,6 @@ static const struct amd_ip_funcs gmc_v7_0_ip_funcs = {
        .suspend = gmc_v7_0_suspend,
        .resume = gmc_v7_0_resume,
        .wait_for_idle = gmc_v7_0_wait_for_idle,
-       .soft_reset = gmc_v7_0_soft_reset,
        .set_clockgating_state = gmc_v7_0_set_clockgating_state,
        .set_powergating_state = gmc_v7_0_set_powergating_state,
 };
-- 
2.55.0

Reply via email to