diff options
author | Marek Olšák <marek.olsak@amd.com> | 2014-03-22 11:20:43 -0400 |
---|---|---|
committer | Christian König <christian.koenig@amd.com> | 2014-03-25 08:13:24 -0400 |
commit | 020ff5467603483a97042625d12696c9b39922cf (patch) | |
tree | 65d3a519d0b8ea32867f0be26cf8d6969d032113 | |
parent | ab8f1a2a0a7a9882e1214e4f5107e2a02705d11e (diff) |
drm/radeon: set PIPE_CONFIG for 1D and linear tiling modes on CIK
This fixes fast color clear with 1D-tiled single-sample surfaces
and Hyper-Z corruption with 1D-tiled depth surfaces.
Even though it seems it is not needed for 1D tiling, CMASK and HTILE are
always 2D-tiled, thus the hw needs to know the actual pipe configuration
for CMASK and HTILE addressing no matter what the tiling mode of the surface
is.
Signed-off-by: Marek Olšák <marek.olsak@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Christian König <christian.koenig@amd.com>
-rw-r--r-- | drivers/gpu/drm/radeon/cik.c | 27 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_drv.c | 3 |
2 files changed, 26 insertions, 4 deletions
diff --git a/drivers/gpu/drm/radeon/cik.c b/drivers/gpu/drm/radeon/cik.c index 0ae991d3289a..62fefbbaf263 100644 --- a/drivers/gpu/drm/radeon/cik.c +++ b/drivers/gpu/drm/radeon/cik.c | |||
@@ -2029,6 +2029,7 @@ static void cik_tiling_mode_table_init(struct radeon_device *rdev) | |||
2029 | break; | 2029 | break; |
2030 | case 5: | 2030 | case 5: |
2031 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | | 2031 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | |
2032 | PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) | | ||
2032 | MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING)); | 2033 | MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING)); |
2033 | break; | 2034 | break; |
2034 | case 6: | 2035 | case 6: |
@@ -2049,6 +2050,7 @@ static void cik_tiling_mode_table_init(struct radeon_device *rdev) | |||
2049 | break; | 2050 | break; |
2050 | case 9: | 2051 | case 9: |
2051 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | | 2052 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | |
2053 | PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) | | ||
2052 | MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING)); | 2054 | MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING)); |
2053 | break; | 2055 | break; |
2054 | case 10: | 2056 | case 10: |
@@ -2071,6 +2073,7 @@ static void cik_tiling_mode_table_init(struct radeon_device *rdev) | |||
2071 | break; | 2073 | break; |
2072 | case 13: | 2074 | case 13: |
2073 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | | 2075 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | |
2076 | PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) | | ||
2074 | MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING)); | 2077 | MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING)); |
2075 | break; | 2078 | break; |
2076 | case 14: | 2079 | case 14: |
@@ -2093,6 +2096,7 @@ static void cik_tiling_mode_table_init(struct radeon_device *rdev) | |||
2093 | break; | 2096 | break; |
2094 | case 27: | 2097 | case 27: |
2095 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | | 2098 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | |
2099 | PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) | | ||
2096 | MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING)); | 2100 | MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING)); |
2097 | break; | 2101 | break; |
2098 | case 28: | 2102 | case 28: |
@@ -2247,6 +2251,7 @@ static void cik_tiling_mode_table_init(struct radeon_device *rdev) | |||
2247 | break; | 2251 | break; |
2248 | case 5: | 2252 | case 5: |
2249 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | | 2253 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | |
2254 | PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) | | ||
2250 | MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING)); | 2255 | MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING)); |
2251 | break; | 2256 | break; |
2252 | case 6: | 2257 | case 6: |
@@ -2267,6 +2272,7 @@ static void cik_tiling_mode_table_init(struct radeon_device *rdev) | |||
2267 | break; | 2272 | break; |
2268 | case 9: | 2273 | case 9: |
2269 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | | 2274 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | |
2275 | PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) | | ||
2270 | MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING)); | 2276 | MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING)); |
2271 | break; | 2277 | break; |
2272 | case 10: | 2278 | case 10: |
@@ -2289,6 +2295,7 @@ static void cik_tiling_mode_table_init(struct radeon_device *rdev) | |||
2289 | break; | 2295 | break; |
2290 | case 13: | 2296 | case 13: |
2291 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | | 2297 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | |
2298 | PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) | | ||
2292 | MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING)); | 2299 | MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING)); |
2293 | break; | 2300 | break; |
2294 | case 14: | 2301 | case 14: |
@@ -2311,6 +2318,7 @@ static void cik_tiling_mode_table_init(struct radeon_device *rdev) | |||
2311 | break; | 2318 | break; |
2312 | case 27: | 2319 | case 27: |
2313 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | | 2320 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | |
2321 | PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) | | ||
2314 | MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING)); | 2322 | MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING)); |
2315 | break; | 2323 | break; |
2316 | case 28: | 2324 | case 28: |
@@ -2467,6 +2475,7 @@ static void cik_tiling_mode_table_init(struct radeon_device *rdev) | |||
2467 | break; | 2475 | break; |
2468 | case 5: | 2476 | case 5: |
2469 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | | 2477 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | |
2478 | PIPE_CONFIG(ADDR_SURF_P4_16x16) | | ||
2470 | MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING)); | 2479 | MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING)); |
2471 | break; | 2480 | break; |
2472 | case 6: | 2481 | case 6: |
@@ -2487,6 +2496,7 @@ static void cik_tiling_mode_table_init(struct radeon_device *rdev) | |||
2487 | break; | 2496 | break; |
2488 | case 9: | 2497 | case 9: |
2489 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | | 2498 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | |
2499 | PIPE_CONFIG(ADDR_SURF_P4_16x16) | | ||
2490 | MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING)); | 2500 | MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING)); |
2491 | break; | 2501 | break; |
2492 | case 10: | 2502 | case 10: |
@@ -2509,6 +2519,7 @@ static void cik_tiling_mode_table_init(struct radeon_device *rdev) | |||
2509 | break; | 2519 | break; |
2510 | case 13: | 2520 | case 13: |
2511 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | | 2521 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | |
2522 | PIPE_CONFIG(ADDR_SURF_P4_16x16) | | ||
2512 | MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING)); | 2523 | MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING)); |
2513 | break; | 2524 | break; |
2514 | case 14: | 2525 | case 14: |
@@ -2531,6 +2542,7 @@ static void cik_tiling_mode_table_init(struct radeon_device *rdev) | |||
2531 | break; | 2542 | break; |
2532 | case 27: | 2543 | case 27: |
2533 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | | 2544 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | |
2545 | PIPE_CONFIG(ADDR_SURF_P4_16x16) | | ||
2534 | MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING)); | 2546 | MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING)); |
2535 | break; | 2547 | break; |
2536 | case 28: | 2548 | case 28: |
@@ -2593,6 +2605,7 @@ static void cik_tiling_mode_table_init(struct radeon_device *rdev) | |||
2593 | break; | 2605 | break; |
2594 | case 5: | 2606 | case 5: |
2595 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | | 2607 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | |
2608 | PIPE_CONFIG(ADDR_SURF_P4_8x16) | | ||
2596 | MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING)); | 2609 | MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING)); |
2597 | break; | 2610 | break; |
2598 | case 6: | 2611 | case 6: |
@@ -2613,6 +2626,7 @@ static void cik_tiling_mode_table_init(struct radeon_device *rdev) | |||
2613 | break; | 2626 | break; |
2614 | case 9: | 2627 | case 9: |
2615 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | | 2628 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | |
2629 | PIPE_CONFIG(ADDR_SURF_P4_8x16) | | ||
2616 | MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING)); | 2630 | MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING)); |
2617 | break; | 2631 | break; |
2618 | case 10: | 2632 | case 10: |
@@ -2635,6 +2649,7 @@ static void cik_tiling_mode_table_init(struct radeon_device *rdev) | |||
2635 | break; | 2649 | break; |
2636 | case 13: | 2650 | case 13: |
2637 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | | 2651 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | |
2652 | PIPE_CONFIG(ADDR_SURF_P4_8x16) | | ||
2638 | MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING)); | 2653 | MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING)); |
2639 | break; | 2654 | break; |
2640 | case 14: | 2655 | case 14: |
@@ -2657,6 +2672,7 @@ static void cik_tiling_mode_table_init(struct radeon_device *rdev) | |||
2657 | break; | 2672 | break; |
2658 | case 27: | 2673 | case 27: |
2659 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | | 2674 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | |
2675 | PIPE_CONFIG(ADDR_SURF_P4_8x16) | | ||
2660 | MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING)); | 2676 | MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING)); |
2661 | break; | 2677 | break; |
2662 | case 28: | 2678 | case 28: |
@@ -2813,6 +2829,7 @@ static void cik_tiling_mode_table_init(struct radeon_device *rdev) | |||
2813 | break; | 2829 | break; |
2814 | case 5: | 2830 | case 5: |
2815 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | | 2831 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | |
2832 | PIPE_CONFIG(ADDR_SURF_P2) | | ||
2816 | MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING)); | 2833 | MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING)); |
2817 | break; | 2834 | break; |
2818 | case 6: | 2835 | case 6: |
@@ -2828,11 +2845,13 @@ static void cik_tiling_mode_table_init(struct radeon_device *rdev) | |||
2828 | TILE_SPLIT(split_equal_to_row_size)); | 2845 | TILE_SPLIT(split_equal_to_row_size)); |
2829 | break; | 2846 | break; |
2830 | case 8: | 2847 | case 8: |
2831 | gb_tile_moden = ARRAY_MODE(ARRAY_LINEAR_ALIGNED); | 2848 | gb_tile_moden = ARRAY_MODE(ARRAY_LINEAR_ALIGNED) | |
2849 | PIPE_CONFIG(ADDR_SURF_P2); | ||
2832 | break; | 2850 | break; |
2833 | case 9: | 2851 | case 9: |
2834 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | | 2852 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | |
2835 | MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING)); | 2853 | MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) | |
2854 | PIPE_CONFIG(ADDR_SURF_P2)); | ||
2836 | break; | 2855 | break; |
2837 | case 10: | 2856 | case 10: |
2838 | gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | | 2857 | gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | |
@@ -2854,6 +2873,7 @@ static void cik_tiling_mode_table_init(struct radeon_device *rdev) | |||
2854 | break; | 2873 | break; |
2855 | case 13: | 2874 | case 13: |
2856 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | | 2875 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | |
2876 | PIPE_CONFIG(ADDR_SURF_P2) | | ||
2857 | MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING)); | 2877 | MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING)); |
2858 | break; | 2878 | break; |
2859 | case 14: | 2879 | case 14: |
@@ -2876,7 +2896,8 @@ static void cik_tiling_mode_table_init(struct radeon_device *rdev) | |||
2876 | break; | 2896 | break; |
2877 | case 27: | 2897 | case 27: |
2878 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | | 2898 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | |
2879 | MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING)); | 2899 | MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) | |
2900 | PIPE_CONFIG(ADDR_SURF_P2)); | ||
2880 | break; | 2901 | break; |
2881 | case 28: | 2902 | case 28: |
2882 | gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) | | 2903 | gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) | |
diff --git a/drivers/gpu/drm/radeon/radeon_drv.c b/drivers/gpu/drm/radeon/radeon_drv.c index 4392b7c95ee6..e8b0284e34bb 100644 --- a/drivers/gpu/drm/radeon/radeon_drv.c +++ b/drivers/gpu/drm/radeon/radeon_drv.c | |||
@@ -79,7 +79,8 @@ | |||
79 | * 2.35.0 - Add CIK macrotile mode array query | 79 | * 2.35.0 - Add CIK macrotile mode array query |
80 | * 2.36.0 - Fix CIK DCE tiling setup | 80 | * 2.36.0 - Fix CIK DCE tiling setup |
81 | * 2.37.0 - allow GS ring setup on r6xx/r7xx | 81 | * 2.37.0 - allow GS ring setup on r6xx/r7xx |
82 | * 2.38.0 - RADEON_GEM_OP (GET_INITIAL_DOMAIN, SET_INITIAL_DOMAIN) | 82 | * 2.38.0 - RADEON_GEM_OP (GET_INITIAL_DOMAIN, SET_INITIAL_DOMAIN), |
83 | * CIK: 1D and linear tiling modes contain valid PIPE_CONFIG | ||
83 | */ | 84 | */ |
84 | #define KMS_DRIVER_MAJOR 2 | 85 | #define KMS_DRIVER_MAJOR 2 |
85 | #define KMS_DRIVER_MINOR 38 | 86 | #define KMS_DRIVER_MINOR 38 |