diff options
author | Alex Deucher <alexander.deucher@amd.com> | 2013-08-30 08:58:20 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2013-08-30 16:31:15 -0400 |
commit | e5903d399a7b0e5c14673c1206f4aeec2859c730 (patch) | |
tree | 51c6167021389dc73657bc58ef851cea3417e662 | |
parent | f30df435ac6136787e65646881e62f12df2d71f6 (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.c | 9 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/evergreen.c | 9 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/ni.c | 9 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/r600.c | 9 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/rv770.c | 9 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/si.c | 9 |
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; |