The vram scratch buffer needs to be initialized
before the mc is programmed otherwise we program
0 as the GPU address of the default GPU fault
page.  In most cases we put vram at zero anyway and
reserve a page for the legacy vga buffer so in practice
this shouldn't cause any problems, but better to make
it correct.
Was changed in:
6fab3febf6d949b0a12b1e4e73db38e4a177a79e
Reported-by: FrankR Huang <FrankR.Huang@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Cc: stable@vger.kernel.org
 
        /* enable aspm */
        cik_program_aspm(rdev);
 
+       /* scratch needs to be initialized before MC */
+       r = r600_vram_scratch_init(rdev);
+       if (r)
+               return r;
+
        cik_mc_program(rdev);
 
        if (rdev->flags & RADEON_IS_IGP) {
                }
        }
 
-       r = r600_vram_scratch_init(rdev);
-       if (r)
-               return r;
-
        r = cik_pcie_gart_enable(rdev);
        if (r)
                return r;
 
        /* enable aspm */
        evergreen_program_aspm(rdev);
 
+       /* scratch needs to be initialized before MC */
+       r = r600_vram_scratch_init(rdev);
+       if (r)
+               return r;
+
        evergreen_mc_program(rdev);
 
        if (ASIC_IS_DCE5(rdev)) {
                }
        }
 
-       r = r600_vram_scratch_init(rdev);
-       if (r)
-               return r;
-
        if (rdev->flags & RADEON_IS_AGP) {
                evergreen_agp_enable(rdev);
        } else {
 
        /* enable aspm */
        evergreen_program_aspm(rdev);
 
+       /* scratch needs to be initialized before MC */
+       r = r600_vram_scratch_init(rdev);
+       if (r)
+               return r;
+
        evergreen_mc_program(rdev);
 
        if (rdev->flags & RADEON_IS_IGP) {
                }
        }
 
-       r = r600_vram_scratch_init(rdev);
-       if (r)
-               return r;
-
        r = cayman_pcie_gart_enable(rdev);
        if (r)
                return r;
 
        /* enable pcie gen2 link */
        r600_pcie_gen2_enable(rdev);
 
+       /* scratch needs to be initialized before MC */
+       r = r600_vram_scratch_init(rdev);
+       if (r)
+               return r;
+
        r600_mc_program(rdev);
 
        if (!rdev->me_fw || !rdev->pfp_fw || !rdev->rlc_fw) {
                }
        }
 
-       r = r600_vram_scratch_init(rdev);
-       if (r)
-               return r;
-
        if (rdev->flags & RADEON_IS_AGP) {
                r600_agp_enable(rdev);
        } else {
 
        /* enable pcie gen2 link */
        rv770_pcie_gen2_enable(rdev);
 
+       /* scratch needs to be initialized before MC */
+       r = r600_vram_scratch_init(rdev);
+       if (r)
+               return r;
+
        rv770_mc_program(rdev);
 
        if (!rdev->me_fw || !rdev->pfp_fw || !rdev->rlc_fw) {
                }
        }
 
-       r = r600_vram_scratch_init(rdev);
-       if (r)
-               return r;
-
        if (rdev->flags & RADEON_IS_AGP) {
                rv770_agp_enable(rdev);
        } else {
 
        /* enable aspm */
        si_program_aspm(rdev);
 
+       /* scratch needs to be initialized before MC */
+       r = r600_vram_scratch_init(rdev);
+       if (r)
+               return r;
+
        si_mc_program(rdev);
 
        if (!rdev->me_fw || !rdev->pfp_fw || !rdev->ce_fw ||
                return r;
        }
 
-       r = r600_vram_scratch_init(rdev);
-       if (r)
-               return r;
-
        r = si_pcie_gart_enable(rdev);
        if (r)
                return r;