aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Deucher <alexander.deucher@amd.com>2013-08-30 08:58:20 -0400
committerAlex Deucher <alexander.deucher@amd.com>2013-08-30 16:31:15 -0400
commite5903d399a7b0e5c14673c1206f4aeec2859c730 (patch)
tree51c6167021389dc73657bc58ef851cea3417e662
parentf30df435ac6136787e65646881e62f12df2d71f6 (diff)
drm/radeon: fix init ordering for r600+
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
-rw-r--r--drivers/gpu/drm/radeon/cik.c9
-rw-r--r--drivers/gpu/drm/radeon/evergreen.c9
-rw-r--r--drivers/gpu/drm/radeon/ni.c9
-rw-r--r--drivers/gpu/drm/radeon/r600.c9
-rw-r--r--drivers/gpu/drm/radeon/rv770.c9
-rw-r--r--drivers/gpu/drm/radeon/si.c9
6 files changed, 30 insertions, 24 deletions
diff --git a/drivers/gpu/drm/radeon/cik.c b/drivers/gpu/drm/radeon/cik.c
index 79124f81c00e..148c539684bb 100644
--- a/drivers/gpu/drm/radeon/cik.c
+++ b/drivers/gpu/drm/radeon/cik.c
@@ -6951,6 +6951,11 @@ static int cik_startup(struct radeon_device *rdev)
6951 /* enable aspm */ 6951 /* enable aspm */
6952 cik_program_aspm(rdev); 6952 cik_program_aspm(rdev);
6953 6953
6954 /* scratch needs to be initialized before MC */
6955 r = r600_vram_scratch_init(rdev);
6956 if (r)
6957 return r;
6958
6954 cik_mc_program(rdev); 6959 cik_mc_program(rdev);
6955 6960
6956 if (rdev->flags & RADEON_IS_IGP) { 6961 if (rdev->flags & RADEON_IS_IGP) {
@@ -6980,10 +6985,6 @@ static int cik_startup(struct radeon_device *rdev)
6980 } 6985 }
6981 } 6986 }
6982 6987
6983 r = r600_vram_scratch_init(rdev);
6984 if (r)
6985 return r;
6986
6987 r = cik_pcie_gart_enable(rdev); 6988 r = cik_pcie_gart_enable(rdev);
6988 if (r) 6989 if (r)
6989 return r; 6990 return r;
diff --git a/drivers/gpu/drm/radeon/evergreen.c b/drivers/gpu/drm/radeon/evergreen.c
index 183213689478..6398c1f76fb8 100644
--- a/drivers/gpu/drm/radeon/evergreen.c
+++ b/drivers/gpu/drm/radeon/evergreen.c
@@ -5053,6 +5053,11 @@ static int evergreen_startup(struct radeon_device *rdev)
5053 /* enable aspm */ 5053 /* enable aspm */
5054 evergreen_program_aspm(rdev); 5054 evergreen_program_aspm(rdev);
5055 5055
5056 /* scratch needs to be initialized before MC */
5057 r = r600_vram_scratch_init(rdev);
5058 if (r)
5059 return r;
5060
5056 evergreen_mc_program(rdev); 5061 evergreen_mc_program(rdev);
5057 5062
5058 if (ASIC_IS_DCE5(rdev)) { 5063 if (ASIC_IS_DCE5(rdev)) {
@@ -5078,10 +5083,6 @@ static int evergreen_startup(struct radeon_device *rdev)
5078 } 5083 }
5079 } 5084 }
5080 5085
5081 r = r600_vram_scratch_init(rdev);
5082 if (r)
5083 return r;
5084
5085 if (rdev->flags & RADEON_IS_AGP) { 5086 if (rdev->flags & RADEON_IS_AGP) {
5086 evergreen_agp_enable(rdev); 5087 evergreen_agp_enable(rdev);
5087 } else { 5088 } else {
diff --git a/drivers/gpu/drm/radeon/ni.c b/drivers/gpu/drm/radeon/ni.c
index 69499fff06b0..d60049efd7ac 100644
--- a/drivers/gpu/drm/radeon/ni.c
+++ b/drivers/gpu/drm/radeon/ni.c
@@ -1863,6 +1863,11 @@ static int cayman_startup(struct radeon_device *rdev)
1863 /* enable aspm */ 1863 /* enable aspm */
1864 evergreen_program_aspm(rdev); 1864 evergreen_program_aspm(rdev);
1865 1865
1866 /* scratch needs to be initialized before MC */
1867 r = r600_vram_scratch_init(rdev);
1868 if (r)
1869 return r;
1870
1866 evergreen_mc_program(rdev); 1871 evergreen_mc_program(rdev);
1867 1872
1868 if (rdev->flags & RADEON_IS_IGP) { 1873 if (rdev->flags & RADEON_IS_IGP) {
@@ -1889,10 +1894,6 @@ static int cayman_startup(struct radeon_device *rdev)
1889 } 1894 }
1890 } 1895 }
1891 1896
1892 r = r600_vram_scratch_init(rdev);
1893 if (r)
1894 return r;
1895
1896 r = cayman_pcie_gart_enable(rdev); 1897 r = cayman_pcie_gart_enable(rdev);
1897 if (r) 1898 if (r)
1898 return r; 1899 return r;
diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c
index 087cff444ba2..b72d4d717a72 100644
--- a/drivers/gpu/drm/radeon/r600.c
+++ b/drivers/gpu/drm/radeon/r600.c
@@ -2698,6 +2698,11 @@ static int r600_startup(struct radeon_device *rdev)
2698 /* enable pcie gen2 link */ 2698 /* enable pcie gen2 link */
2699 r600_pcie_gen2_enable(rdev); 2699 r600_pcie_gen2_enable(rdev);
2700 2700
2701 /* scratch needs to be initialized before MC */
2702 r = r600_vram_scratch_init(rdev);
2703 if (r)
2704 return r;
2705
2701 r600_mc_program(rdev); 2706 r600_mc_program(rdev);
2702 2707
2703 if (!rdev->me_fw || !rdev->pfp_fw || !rdev->rlc_fw) { 2708 if (!rdev->me_fw || !rdev->pfp_fw || !rdev->rlc_fw) {
@@ -2708,10 +2713,6 @@ static int r600_startup(struct radeon_device *rdev)
2708 } 2713 }
2709 } 2714 }
2710 2715
2711 r = r600_vram_scratch_init(rdev);
2712 if (r)
2713 return r;
2714
2715 if (rdev->flags & RADEON_IS_AGP) { 2716 if (rdev->flags & RADEON_IS_AGP) {
2716 r600_agp_enable(rdev); 2717 r600_agp_enable(rdev);
2717 } else { 2718 } else {
diff --git a/drivers/gpu/drm/radeon/rv770.c b/drivers/gpu/drm/radeon/rv770.c
index b811296462a3..9f5846743c9e 100644
--- a/drivers/gpu/drm/radeon/rv770.c
+++ b/drivers/gpu/drm/radeon/rv770.c
@@ -1658,6 +1658,11 @@ static int rv770_startup(struct radeon_device *rdev)
1658 /* enable pcie gen2 link */ 1658 /* enable pcie gen2 link */
1659 rv770_pcie_gen2_enable(rdev); 1659 rv770_pcie_gen2_enable(rdev);
1660 1660
1661 /* scratch needs to be initialized before MC */
1662 r = r600_vram_scratch_init(rdev);
1663 if (r)
1664 return r;
1665
1661 rv770_mc_program(rdev); 1666 rv770_mc_program(rdev);
1662 1667
1663 if (!rdev->me_fw || !rdev->pfp_fw || !rdev->rlc_fw) { 1668 if (!rdev->me_fw || !rdev->pfp_fw || !rdev->rlc_fw) {
@@ -1668,10 +1673,6 @@ static int rv770_startup(struct radeon_device *rdev)
1668 } 1673 }
1669 } 1674 }
1670 1675
1671 r = r600_vram_scratch_init(rdev);
1672 if (r)
1673 return r;
1674
1675 if (rdev->flags & RADEON_IS_AGP) { 1676 if (rdev->flags & RADEON_IS_AGP) {
1676 rv770_agp_enable(rdev); 1677 rv770_agp_enable(rdev);
1677 } else { 1678 } else {
diff --git a/drivers/gpu/drm/radeon/si.c b/drivers/gpu/drm/radeon/si.c
index 89393ed593fa..fe8bca686900 100644
--- a/drivers/gpu/drm/radeon/si.c
+++ b/drivers/gpu/drm/radeon/si.c
@@ -6343,6 +6343,11 @@ static int si_startup(struct radeon_device *rdev)
6343 /* enable aspm */ 6343 /* enable aspm */
6344 si_program_aspm(rdev); 6344 si_program_aspm(rdev);
6345 6345
6346 /* scratch needs to be initialized before MC */
6347 r = r600_vram_scratch_init(rdev);
6348 if (r)
6349 return r;
6350
6346 si_mc_program(rdev); 6351 si_mc_program(rdev);
6347 6352
6348 if (!rdev->me_fw || !rdev->pfp_fw || !rdev->ce_fw || 6353 if (!rdev->me_fw || !rdev->pfp_fw || !rdev->ce_fw ||
@@ -6360,10 +6365,6 @@ static int si_startup(struct radeon_device *rdev)
6360 return r; 6365 return r;
6361 } 6366 }
6362 6367
6363 r = r600_vram_scratch_init(rdev);
6364 if (r)
6365 return r;
6366
6367 r = si_pcie_gart_enable(rdev); 6368 r = si_pcie_gart_enable(rdev);
6368 if (r) 6369 if (r)
6369 return r; 6370 return r;