Am 11.03.2016 um 15:18 schrieb Josh Poimboeuf:
> Simplify the control flow of cik_tiling_mode_table_init() similar to how
> it was done in gfx_v7_0.c and gfx_v8_0.c.
>
> Signed-off-by: Josh Poimboeuf <jpoimboe at redhat.com>

I'm not so deep into the tilling config stuff, but briefly skimming over 
it it clearly looks good to me.

Patch is Acked-by: Christian König <christian.koenig at amd.com>

Thanks for the help,
Christian.

> ---
>   drivers/gpu/drm/radeon/cik.c | 1691 
> +++++++++++++++++-------------------------
>   1 file changed, 666 insertions(+), 1025 deletions(-)
>
> diff --git a/drivers/gpu/drm/radeon/cik.c b/drivers/gpu/drm/radeon/cik.c
> index 0600140..1a92ce7 100644
> --- a/drivers/gpu/drm/radeon/cik.c
> +++ b/drivers/gpu/drm/radeon/cik.c
> @@ -2343,9 +2343,13 @@ out:
>    */
>   static void cik_tiling_mode_table_init(struct radeon_device *rdev)
>   {
> -     const u32 num_tile_mode_states = 32;
> -     const u32 num_secondary_tile_mode_states = 16;
> -     u32 reg_offset, gb_tile_moden, split_equal_to_row_size;
> +     u32 *tile = rdev->config.cik.tile_mode_array;
> +     u32 *macrotile = rdev->config.cik.macrotile_mode_array;
> +     const u32 num_tile_mode_states =
> +                     ARRAY_SIZE(rdev->config.cik.tile_mode_array);
> +     const u32 num_secondary_tile_mode_states =
> +                     ARRAY_SIZE(rdev->config.cik.macrotile_mode_array);
> +     u32 reg_offset, split_equal_to_row_size;
>       u32 num_pipe_configs;
>       u32 num_rbs = rdev->config.cik.max_backends_per_se *
>               rdev->config.cik.max_shader_engines;
> @@ -2367,1032 +2371,669 @@ static void cik_tiling_mode_table_init(struct 
> radeon_device *rdev)
>       if (num_pipe_configs > 8)
>               num_pipe_configs = 16;
>   
> -     if (num_pipe_configs == 16) {
> -             for (reg_offset = 0; reg_offset < num_tile_mode_states; 
> reg_offset++) {
> -                     switch (reg_offset) {
> -                     case 0:
> -                             gb_tile_moden = 
> (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> -                                              
> MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
> -                                              
> PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
> -                                              
> TILE_SPLIT(ADDR_SURF_TILE_SPLIT_64B));
> -                             break;
> -                     case 1:
> -                             gb_tile_moden = 
> (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> -                                              
> MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
> -                                              
> PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
> -                                              
> TILE_SPLIT(ADDR_SURF_TILE_SPLIT_128B));
> -                             break;
> -                     case 2:
> -                             gb_tile_moden = 
> (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> -                                              
> MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
> -                                              
> PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
> -                                              
> TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B));
> -                             break;
> -                     case 3:
> -                             gb_tile_moden = 
> (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> -                                              
> MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
> -                                              
> PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
> -                                              
> TILE_SPLIT(ADDR_SURF_TILE_SPLIT_512B));
> -                             break;
> -                     case 4:
> -                             gb_tile_moden = 
> (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> -                                              
> MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
> -                                              
> PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
> -                                              
> TILE_SPLIT(split_equal_to_row_size));
> -                             break;
> -                     case 5:
> -                             gb_tile_moden = 
> (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
> -                                              
> PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
> -                                              
> MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
> -                             break;
> -                     case 6:
> -                             gb_tile_moden = 
> (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
> -                                              
> MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
> -                                              
> PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
> -                                              
> TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B));
> -                             break;
> -                     case 7:
> -                             gb_tile_moden = 
> (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
> -                                              
> MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
> -                                              
> PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
> -                                              
> TILE_SPLIT(split_equal_to_row_size));
> -                             break;
> -                     case 8:
> -                             gb_tile_moden = 
> (ARRAY_MODE(ARRAY_LINEAR_ALIGNED) |
> -                                              
> PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16));
> -                             break;
> -                     case 9:
> -                             gb_tile_moden = 
> (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
> -                                              
> PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
> -                                              
> MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING));
> -                             break;
> -                     case 10:
> -                             gb_tile_moden = 
> (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> -                                              
> MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
> -                                              
> PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
> -                                              
> SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> -                             break;
> -                     case 11:
> -                             gb_tile_moden = 
> (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
> -                                              
> MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
> -                                              
> PIPE_CONFIG(ADDR_SURF_P16_32x32_8x16) |
> -                                              
> SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> -                             break;
> -                     case 12:
> -                             gb_tile_moden = 
> (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
> -                                              
> MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
> -                                              
> PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
> -                                              
> SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> -                             break;
> -                     case 13:
> -                             gb_tile_moden = 
> (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
> -                                              
> PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
> -                                              
> MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING));
> -                             break;
> -                     case 14:
> -                             gb_tile_moden = 
> (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> -                                              
> MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
> -                                              
> PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
> -                                              
> SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> -                             break;
> -                     case 16:
> -                             gb_tile_moden = 
> (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
> -                                              
> MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
> -                                              
> PIPE_CONFIG(ADDR_SURF_P16_32x32_8x16) |
> -                                              
> SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> -                             break;
> -                     case 17:
> -                             gb_tile_moden = 
> (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
> -                                              
> MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
> -                                              
> PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
> -                                              
> SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> -                             break;
> -                     case 27:
> -                             gb_tile_moden = 
> (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
> -                                              
> PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
> -                                              
> MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING));
> -                             break;
> -                     case 28:
> -                             gb_tile_moden = 
> (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> -                                              
> MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
> -                                              
> PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
> -                                              
> SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> -                             break;
> -                     case 29:
> -                             gb_tile_moden = 
> (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
> -                                              
> MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
> -                                              
> PIPE_CONFIG(ADDR_SURF_P16_32x32_8x16) |
> -                                              
> SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> -                             break;
> -                     case 30:
> -                             gb_tile_moden = 
> (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
> -                                              
> MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
> -                                              
> PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
> -                                              
> SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> -                             break;
> -                     default:
> -                             gb_tile_moden = 0;
> -                             break;
> -                     }
> -                     rdev->config.cik.tile_mode_array[reg_offset] = 
> gb_tile_moden;
> -                     WREG32(GB_TILE_MODE0 + (reg_offset * 4), gb_tile_moden);
> -             }
> -             for (reg_offset = 0; reg_offset < 
> num_secondary_tile_mode_states; reg_offset++) {
> -                     switch (reg_offset) {
> -                     case 0:
> -                             gb_tile_moden = 
> (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> -                                              
> BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
> -                                              
> MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
> -                                              NUM_BANKS(ADDR_SURF_16_BANK));
> -                             break;
> -                     case 1:
> -                             gb_tile_moden = 
> (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> -                                              
> BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
> -                                              
> MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
> -                                              NUM_BANKS(ADDR_SURF_16_BANK));
> -                             break;
> -                     case 2:
> -                             gb_tile_moden = 
> (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> -                                              
> BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
> -                                              
> MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) |
> -                                              NUM_BANKS(ADDR_SURF_16_BANK));
> -                             break;
> -                     case 3:
> -                             gb_tile_moden = 
> (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> -                                              
> BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
> -                                              
> MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) |
> -                                              NUM_BANKS(ADDR_SURF_16_BANK));
> -                             break;
> -                     case 4:
> -                             gb_tile_moden = 
> (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> -                                              
> BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
> -                                              
> MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) |
> -                                              NUM_BANKS(ADDR_SURF_8_BANK));
> -                             break;
> -                     case 5:
> -                             gb_tile_moden = 
> (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> -                                              
> BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
> -                                              
> MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) |
> -                                              NUM_BANKS(ADDR_SURF_4_BANK));
> -                             break;
> -                     case 6:
> -                             gb_tile_moden = 
> (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> -                                              
> BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
> -                                              
> MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) |
> -                                              NUM_BANKS(ADDR_SURF_2_BANK));
> -                             break;
> -                     case 8:
> -                             gb_tile_moden = 
> (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> -                                              
> BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
> -                                              
> MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
> -                                              NUM_BANKS(ADDR_SURF_16_BANK));
> -                             break;
> -                     case 9:
> -                             gb_tile_moden = 
> (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> -                                              
> BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
> -                                              
> MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
> -                                              NUM_BANKS(ADDR_SURF_16_BANK));
> -                             break;
> -                     case 10:
> -                             gb_tile_moden = 
> (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> -                                              
> BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
> -                                              
> MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) |
> -                                              NUM_BANKS(ADDR_SURF_16_BANK));
> -                             break;
> -                     case 11:
> -                             gb_tile_moden = 
> (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> -                                              
> BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
> -                                              
> MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) |
> -                                              NUM_BANKS(ADDR_SURF_8_BANK));
> -                             break;
> -                     case 12:
> -                             gb_tile_moden = 
> (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> -                                              
> BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
> -                                              
> MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) |
> -                                              NUM_BANKS(ADDR_SURF_4_BANK));
> -                             break;
> -                     case 13:
> -                             gb_tile_moden = 
> (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> -                                              
> BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
> -                                              
> MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) |
> -                                              NUM_BANKS(ADDR_SURF_2_BANK));
> -                             break;
> -                     case 14:
> -                             gb_tile_moden = 
> (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> -                                              
> BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
> -                                              
> MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) |
> -                                              NUM_BANKS(ADDR_SURF_2_BANK));
> -                             break;
> -                     default:
> -                             gb_tile_moden = 0;
> -                             break;
> -                     }
> -                     rdev->config.cik.macrotile_mode_array[reg_offset] = 
> gb_tile_moden;
> -                     WREG32(GB_MACROTILE_MODE0 + (reg_offset * 4), 
> gb_tile_moden);
> -             }
> -     } else if (num_pipe_configs == 8) {
> -             for (reg_offset = 0; reg_offset < num_tile_mode_states; 
> reg_offset++) {
> -                     switch (reg_offset) {
> -                     case 0:
> -                             gb_tile_moden = 
> (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> -                                              
> MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
> -                                              
> PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
> -                                              
> TILE_SPLIT(ADDR_SURF_TILE_SPLIT_64B));
> -                             break;
> -                     case 1:
> -                             gb_tile_moden = 
> (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> -                                              
> MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
> -                                              
> PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
> -                                              
> TILE_SPLIT(ADDR_SURF_TILE_SPLIT_128B));
> -                             break;
> -                     case 2:
> -                             gb_tile_moden = 
> (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> -                                              
> MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
> -                                              
> PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
> -                                              
> TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B));
> -                             break;
> -                     case 3:
> -                             gb_tile_moden = 
> (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> -                                              
> MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
> -                                              
> PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
> -                                              
> TILE_SPLIT(ADDR_SURF_TILE_SPLIT_512B));
> -                             break;
> -                     case 4:
> -                             gb_tile_moden = 
> (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> -                                              
> MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
> -                                              
> PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
> -                                              
> TILE_SPLIT(split_equal_to_row_size));
> -                             break;
> -                     case 5:
> -                             gb_tile_moden = 
> (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
> -                                              
> PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
> -                                              
> MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
> -                             break;
> -                     case 6:
> -                             gb_tile_moden = 
> (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
> -                                              
> MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
> -                                              
> PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
> -                                              
> TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B));
> -                             break;
> -                     case 7:
> -                             gb_tile_moden = 
> (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
> -                                              
> MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
> -                                              
> PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
> -                                              
> TILE_SPLIT(split_equal_to_row_size));
> -                             break;
> -                     case 8:
> -                             gb_tile_moden = 
> (ARRAY_MODE(ARRAY_LINEAR_ALIGNED) |
> -                                              
> PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16));
> -                             break;
> -                     case 9:
> -                             gb_tile_moden = 
> (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
> -                                              
> PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
> -                                              
> MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING));
> -                             break;
> -                     case 10:
> -                             gb_tile_moden = 
> (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> -                                              
> MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
> -                                              
> PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
> -                                              
> SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> -                             break;
> -                     case 11:
> -                             gb_tile_moden = 
> (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
> -                                              
> MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
> -                                              
> PIPE_CONFIG(ADDR_SURF_P8_32x32_8x16) |
> -                                              
> SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> -                             break;
> -                     case 12:
> -                             gb_tile_moden = 
> (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
> -                                              
> MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
> -                                              
> PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
> -                                              
> SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> -                             break;
> -                     case 13:
> -                             gb_tile_moden = 
> (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
> -                                              
> PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
> -                                              
> MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING));
> -                             break;
> -                     case 14:
> -                             gb_tile_moden = 
> (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> -                                              
> MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
> -                                              
> PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
> -                                              
> SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> -                             break;
> -                     case 16:
> -                             gb_tile_moden = 
> (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
> -                                              
> MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
> -                                              
> PIPE_CONFIG(ADDR_SURF_P8_32x32_8x16) |
> -                                              
> SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> -                             break;
> -                     case 17:
> -                             gb_tile_moden = 
> (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
> -                                              
> MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
> -                                              
> PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
> -                                              
> SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> -                             break;
> -                     case 27:
> -                             gb_tile_moden = 
> (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
> -                                              
> PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
> -                                              
> MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING));
> -                             break;
> -                     case 28:
> -                             gb_tile_moden = 
> (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> -                                              
> MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
> -                                              
> PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
> -                                              
> SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> -                             break;
> -                     case 29:
> -                             gb_tile_moden = 
> (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
> -                                              
> MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
> -                                              
> PIPE_CONFIG(ADDR_SURF_P8_32x32_8x16) |
> -                                              
> SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> -                             break;
> -                     case 30:
> -                             gb_tile_moden = 
> (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
> -                                              
> MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
> -                                              
> PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
> -                                              
> SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> -                             break;
> -                     default:
> -                             gb_tile_moden = 0;
> -                             break;
> -                     }
> -                     rdev->config.cik.tile_mode_array[reg_offset] = 
> gb_tile_moden;
> -                     WREG32(GB_TILE_MODE0 + (reg_offset * 4), gb_tile_moden);
> -             }
> -             for (reg_offset = 0; reg_offset < 
> num_secondary_tile_mode_states; reg_offset++) {
> -                     switch (reg_offset) {
> -                     case 0:
> -                             gb_tile_moden = 
> (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> -                                              
> BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
> -                                              
> MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
> -                                              NUM_BANKS(ADDR_SURF_16_BANK));
> -                             break;
> -                     case 1:
> -                             gb_tile_moden = 
> (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> -                                              
> BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
> -                                              
> MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
> -                                              NUM_BANKS(ADDR_SURF_16_BANK));
> -                             break;
> -                     case 2:
> -                             gb_tile_moden = 
> (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> -                                              
> BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
> -                                              
> MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
> -                                              NUM_BANKS(ADDR_SURF_16_BANK));
> -                             break;
> -                     case 3:
> -                             gb_tile_moden = 
> (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> -                                              
> BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
> -                                              
> MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
> -                                              NUM_BANKS(ADDR_SURF_16_BANK));
> -                             break;
> -                     case 4:
> -                             gb_tile_moden = 
> (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> -                                              
> BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
> -                                              
> MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) |
> -                                              NUM_BANKS(ADDR_SURF_8_BANK));
> -                             break;
> -                     case 5:
> -                             gb_tile_moden = 
> (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> -                                              
> BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
> -                                              
> MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) |
> -                                              NUM_BANKS(ADDR_SURF_4_BANK));
> -                             break;
> -                     case 6:
> -                             gb_tile_moden = 
> (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> -                                              
> BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
> -                                              
> MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) |
> -                                              NUM_BANKS(ADDR_SURF_2_BANK));
> -                             break;
> -                     case 8:
> -                             gb_tile_moden = 
> (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> -                                              
> BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_8) |
> -                                              
> MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
> -                                              NUM_BANKS(ADDR_SURF_16_BANK));
> -                             break;
> -                     case 9:
> -                             gb_tile_moden = 
> (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> -                                              
> BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
> -                                              
> MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
> -                                              NUM_BANKS(ADDR_SURF_16_BANK));
> -                             break;
> -                     case 10:
> -                             gb_tile_moden = 
> (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> -                                              
> BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
> -                                              
> MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
> -                                              NUM_BANKS(ADDR_SURF_16_BANK));
> -                             break;
> -                     case 11:
> -                             gb_tile_moden = 
> (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> -                                              
> BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
> -                                              
> MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
> -                                              NUM_BANKS(ADDR_SURF_16_BANK));
> -                             break;
> -                     case 12:
> -                             gb_tile_moden = 
> (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> -                                              
> BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
> -                                              
> MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) |
> -                                              NUM_BANKS(ADDR_SURF_8_BANK));
> -                             break;
> -                     case 13:
> -                             gb_tile_moden = 
> (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> -                                              
> BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
> -                                              
> MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) |
> -                                              NUM_BANKS(ADDR_SURF_4_BANK));
> -                             break;
> -                     case 14:
> -                             gb_tile_moden = 
> (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> -                                              
> BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
> -                                              
> MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) |
> -                                              NUM_BANKS(ADDR_SURF_2_BANK));
> -                             break;
> -                     default:
> -                             gb_tile_moden = 0;
> -                             break;
> -                     }
> -                     rdev->config.cik.macrotile_mode_array[reg_offset] = 
> gb_tile_moden;
> -                     WREG32(GB_MACROTILE_MODE0 + (reg_offset * 4), 
> gb_tile_moden);
> -             }
> -     } else if (num_pipe_configs == 4) {
> +     for (reg_offset = 0; reg_offset < num_tile_mode_states; reg_offset++)
> +             tile[reg_offset] = 0;
> +     for (reg_offset = 0; reg_offset < num_secondary_tile_mode_states; 
> reg_offset++)
> +             macrotile[reg_offset] = 0;
> +
> +     switch(num_pipe_configs) {
> +     case 16:
> +             tile[0] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> +                        MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
> +                        PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
> +                        TILE_SPLIT(ADDR_SURF_TILE_SPLIT_64B));
> +             tile[1] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> +                        MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
> +                        PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
> +                        TILE_SPLIT(ADDR_SURF_TILE_SPLIT_128B));
> +             tile[2] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> +                        MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
> +                        PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
> +                        TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B));
> +             tile[3] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> +                        MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
> +                        PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
> +                        TILE_SPLIT(ADDR_SURF_TILE_SPLIT_512B));
> +             tile[4] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> +                        MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
> +                        PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
> +                        TILE_SPLIT(split_equal_to_row_size));
> +             tile[5] = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
> +                        PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
> +                        MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
> +             tile[6] = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
> +                        MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
> +                        PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
> +                        TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B));
> +             tile[7] = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
> +                        MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
> +                        PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
> +                        TILE_SPLIT(split_equal_to_row_size));
> +             tile[8] = (ARRAY_MODE(ARRAY_LINEAR_ALIGNED) |
> +                        PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16));
> +             tile[9] = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
> +                        PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
> +                        MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING));
> +             tile[10] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> +                         MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) 
> |
> +                         PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
> +                         SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> +             tile[11] = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
> +                         MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) 
> |
> +                         PIPE_CONFIG(ADDR_SURF_P16_32x32_8x16) |
> +                         SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> +             tile[12] = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
> +                         MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) 
> |
> +                         PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
> +                         SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> +             tile[13] = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
> +                         PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
> +                         MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING));
> +             tile[14] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> +                         MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
> +                         PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
> +                         SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> +             tile[16] = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
> +                         MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
> +                         PIPE_CONFIG(ADDR_SURF_P16_32x32_8x16) |
> +                         SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> +             tile[17] = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
> +                         MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
> +                         PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
> +                         SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> +             tile[27] = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
> +                         PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
> +                         
> MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING));
> +             tile[28] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> +                         MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) 
> |
> +                         PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
> +                         SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> +             tile[29] = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
> +                         MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) 
> |
> +                         PIPE_CONFIG(ADDR_SURF_P16_32x32_8x16) |
> +                         SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> +             tile[30] = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
> +                         MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) 
> |
> +                         PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
> +                         SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> +
> +             macrotile[0] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> +                        BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
> +                        MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
> +                        NUM_BANKS(ADDR_SURF_16_BANK));
> +             macrotile[1] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> +                        BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
> +                        MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
> +                        NUM_BANKS(ADDR_SURF_16_BANK));
> +             macrotile[2] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> +                        BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
> +                        MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) |
> +                        NUM_BANKS(ADDR_SURF_16_BANK));
> +             macrotile[3] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> +                        BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
> +                        MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) |
> +                        NUM_BANKS(ADDR_SURF_16_BANK));
> +             macrotile[4] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> +                        BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
> +                        MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) |
> +                        NUM_BANKS(ADDR_SURF_8_BANK));
> +             macrotile[5] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> +                        BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
> +                        MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) |
> +                        NUM_BANKS(ADDR_SURF_4_BANK));
> +             macrotile[6] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> +                        BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
> +                        MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) |
> +                        NUM_BANKS(ADDR_SURF_2_BANK));
> +             macrotile[8] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> +                        BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
> +                        MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
> +                        NUM_BANKS(ADDR_SURF_16_BANK));
> +             macrotile[9] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> +                        BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
> +                        MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
> +                        NUM_BANKS(ADDR_SURF_16_BANK));
> +             macrotile[10] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> +                         BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
> +                         MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) |
> +                         NUM_BANKS(ADDR_SURF_16_BANK));
> +             macrotile[11] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> +                         BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
> +                         MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) |
> +                         NUM_BANKS(ADDR_SURF_8_BANK));
> +             macrotile[12] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> +                         BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
> +                         MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) |
> +                         NUM_BANKS(ADDR_SURF_4_BANK));
> +             macrotile[13] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> +                         BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
> +                         MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) |
> +                         NUM_BANKS(ADDR_SURF_2_BANK));
> +             macrotile[14] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> +                         BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
> +                         MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) |
> +                         NUM_BANKS(ADDR_SURF_2_BANK));
> +
> +             for (reg_offset = 0; reg_offset < num_tile_mode_states; 
> reg_offset++)
> +                     WREG32(GB_TILE_MODE0 + (reg_offset * 4), 
> tile[reg_offset]);
> +             for (reg_offset = 0; reg_offset < 
> num_secondary_tile_mode_states; reg_offset++)
> +                     WREG32(GB_MACROTILE_MODE0 + (reg_offset * 4), 
> macrotile[reg_offset]);
> +             break;
> +
> +     case 8:
> +             tile[0] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> +                        MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
> +                        PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
> +                        TILE_SPLIT(ADDR_SURF_TILE_SPLIT_64B));
> +             tile[1] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> +                        MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
> +                        PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
> +                        TILE_SPLIT(ADDR_SURF_TILE_SPLIT_128B));
> +             tile[2] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> +                        MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
> +                        PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
> +                        TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B));
> +             tile[3] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> +                        MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
> +                        PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
> +                        TILE_SPLIT(ADDR_SURF_TILE_SPLIT_512B));
> +             tile[4] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> +                        MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
> +                        PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
> +                        TILE_SPLIT(split_equal_to_row_size));
> +             tile[5] = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
> +                        PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
> +                        MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
> +             tile[6] = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
> +                        MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
> +                        PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
> +                        TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B));
> +             tile[7] = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
> +                        MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
> +                        PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
> +                        TILE_SPLIT(split_equal_to_row_size));
> +             tile[8] = (ARRAY_MODE(ARRAY_LINEAR_ALIGNED) |
> +                        PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16));
> +             tile[9] = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
> +                        PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
> +                        MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING));
> +             tile[10] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> +                         MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) 
> |
> +                         PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
> +                         SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> +             tile[11] = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
> +                         MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) 
> |
> +                         PIPE_CONFIG(ADDR_SURF_P8_32x32_8x16) |
> +                         SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> +             tile[12] = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
> +                         MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) 
> |
> +                         PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
> +                         SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> +             tile[13] = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
> +                         PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
> +                         MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING));
> +             tile[14] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> +                         MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
> +                         PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
> +                         SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> +             tile[16] = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
> +                         MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
> +                         PIPE_CONFIG(ADDR_SURF_P8_32x32_8x16) |
> +                         SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> +             tile[17] = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
> +                         MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
> +                         PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
> +                         SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> +             tile[27] = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
> +                         PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
> +                         
> MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING));
> +             tile[28] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> +                         MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) 
> |
> +                         PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
> +                         SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> +             tile[29] = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
> +                         MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) 
> |
> +                         PIPE_CONFIG(ADDR_SURF_P8_32x32_8x16) |
> +                         SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> +             tile[30] = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
> +                         MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) 
> |
> +                         PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
> +                         SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> +
> +             macrotile[0] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> +                             BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
> +                             MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
> +                             NUM_BANKS(ADDR_SURF_16_BANK));
> +             macrotile[1] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> +                             BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
> +                             MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
> +                             NUM_BANKS(ADDR_SURF_16_BANK));
> +             macrotile[2] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> +                             BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
> +                             MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
> +                             NUM_BANKS(ADDR_SURF_16_BANK));
> +             macrotile[3] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> +                             BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
> +                             MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
> +                             NUM_BANKS(ADDR_SURF_16_BANK));
> +             macrotile[4] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> +                             BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
> +                             MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) |
> +                             NUM_BANKS(ADDR_SURF_8_BANK));
> +             macrotile[5] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> +                             BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
> +                             MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) |
> +                             NUM_BANKS(ADDR_SURF_4_BANK));
> +             macrotile[6] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> +                             BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
> +                             MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) |
> +                             NUM_BANKS(ADDR_SURF_2_BANK));
> +             macrotile[8] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> +                             BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_8) |
> +                             MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
> +                             NUM_BANKS(ADDR_SURF_16_BANK));
> +             macrotile[9] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> +                             BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
> +                             MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
> +                             NUM_BANKS(ADDR_SURF_16_BANK));
> +             macrotile[10] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> +                             BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
> +                             MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
> +                             NUM_BANKS(ADDR_SURF_16_BANK));
> +             macrotile[11] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> +                             BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
> +                             MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
> +                             NUM_BANKS(ADDR_SURF_16_BANK));
> +             macrotile[12] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> +                             BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
> +                             MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) |
> +                             NUM_BANKS(ADDR_SURF_8_BANK));
> +             macrotile[13] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> +                             BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
> +                             MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) |
> +                             NUM_BANKS(ADDR_SURF_4_BANK));
> +             macrotile[14] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> +                             BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
> +                             MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) |
> +                             NUM_BANKS(ADDR_SURF_2_BANK));
> +
> +             for (reg_offset = 0; reg_offset < num_tile_mode_states; 
> reg_offset++)
> +                     WREG32(GB_TILE_MODE0 + (reg_offset * 4), 
> tile[reg_offset]);
> +             for (reg_offset = 0; reg_offset < 
> num_secondary_tile_mode_states; reg_offset++)
> +                     WREG32(GB_MACROTILE_MODE0 + (reg_offset * 4), 
> macrotile[reg_offset]);
> +             break;
> +
> +     case 4:
>               if (num_rbs == 4) {
> -                     for (reg_offset = 0; reg_offset < num_tile_mode_states; 
> reg_offset++) {
> -                             switch (reg_offset) {
> -                             case 0:
> -                                     gb_tile_moden = 
> (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> -                                                      
> MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
> -                                                      
> PIPE_CONFIG(ADDR_SURF_P4_16x16) |
> -                                                      
> TILE_SPLIT(ADDR_SURF_TILE_SPLIT_64B));
> -                                     break;
> -                             case 1:
> -                                     gb_tile_moden = 
> (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> -                                                      
> MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
> -                                                      
> PIPE_CONFIG(ADDR_SURF_P4_16x16) |
> -                                                      
> TILE_SPLIT(ADDR_SURF_TILE_SPLIT_128B));
> -                                     break;
> -                             case 2:
> -                                     gb_tile_moden = 
> (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> -                                                      
> MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
> -                                                      
> PIPE_CONFIG(ADDR_SURF_P4_16x16) |
> -                                                      
> TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B));
> -                                     break;
> -                             case 3:
> -                                     gb_tile_moden = 
> (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> -                                                      
> MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
> -                                                      
> PIPE_CONFIG(ADDR_SURF_P4_16x16) |
> -                                                      
> TILE_SPLIT(ADDR_SURF_TILE_SPLIT_512B));
> -                                     break;
> -                             case 4:
> -                                     gb_tile_moden = 
> (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> -                                                      
> MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
> -                                                      
> PIPE_CONFIG(ADDR_SURF_P4_16x16) |
> -                                                      
> TILE_SPLIT(split_equal_to_row_size));
> -                                     break;
> -                             case 5:
> -                                     gb_tile_moden = 
> (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
> -                                                      
> PIPE_CONFIG(ADDR_SURF_P4_16x16) |
> -                                                      
> MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
> -                                     break;
> -                             case 6:
> -                                     gb_tile_moden = 
> (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
> -                                                      
> MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
> -                                                      
> PIPE_CONFIG(ADDR_SURF_P4_16x16) |
> -                                                      
> TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B));
> -                                     break;
> -                             case 7:
> -                                     gb_tile_moden = 
> (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
> -                                                      
> MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
> -                                                      
> PIPE_CONFIG(ADDR_SURF_P4_16x16) |
> -                                                      
> TILE_SPLIT(split_equal_to_row_size));
> -                                     break;
> -                             case 8:
> -                                     gb_tile_moden = 
> (ARRAY_MODE(ARRAY_LINEAR_ALIGNED) |
> -                                                      
> PIPE_CONFIG(ADDR_SURF_P4_16x16));
> -                                     break;
> -                             case 9:
> -                                     gb_tile_moden = 
> (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
> -                                                      
> PIPE_CONFIG(ADDR_SURF_P4_16x16) |
> -                                                      
> MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING));
> -                                     break;
> -                             case 10:
> -                                     gb_tile_moden = 
> (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> -                                                      
> MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
> -                                                      
> PIPE_CONFIG(ADDR_SURF_P4_16x16) |
> -                                                      
> SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> -                                     break;
> -                             case 11:
> -                                     gb_tile_moden = 
> (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
> -                                                      
> MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
> -                                                      
> PIPE_CONFIG(ADDR_SURF_P4_8x16) |
> -                                                      
> SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> -                                     break;
> -                             case 12:
> -                                     gb_tile_moden = 
> (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
> -                                                      
> MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
> -                                                      
> PIPE_CONFIG(ADDR_SURF_P4_16x16) |
> -                                                      
> SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> -                                     break;
> -                             case 13:
> -                                     gb_tile_moden = 
> (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
> -                                                      
> PIPE_CONFIG(ADDR_SURF_P4_16x16) |
> -                                                      
> MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING));
> -                                     break;
> -                             case 14:
> -                                     gb_tile_moden = 
> (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> -                                                      
> MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
> -                                                      
> PIPE_CONFIG(ADDR_SURF_P4_16x16) |
> -                                                      
> SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> -                                     break;
> -                             case 16:
> -                                     gb_tile_moden = 
> (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
> -                                                      
> MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
> -                                                      
> PIPE_CONFIG(ADDR_SURF_P4_8x16) |
> -                                                      
> SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> -                                     break;
> -                             case 17:
> -                                     gb_tile_moden = 
> (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
> -                                                      
> MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
> -                                                      
> PIPE_CONFIG(ADDR_SURF_P4_16x16) |
> -                                                      
> SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> -                                     break;
> -                             case 27:
> -                                     gb_tile_moden = 
> (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
> -                                                      
> PIPE_CONFIG(ADDR_SURF_P4_16x16) |
> -                                                      
> MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING));
> -                                     break;
> -                             case 28:
> -                                     gb_tile_moden = 
> (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
> -                                                      
> MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
> -                                                      
> PIPE_CONFIG(ADDR_SURF_P4_16x16) |
> -                                                      
> SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> -                                     break;
> -                             case 29:
> -                                     gb_tile_moden = 
> (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
> -                                                      
> MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
> -                                                      
> PIPE_CONFIG(ADDR_SURF_P4_8x16) |
> -                                                      
> SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> -                                     break;
> -                             case 30:
> -                                     gb_tile_moden = 
> (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
> -                                                      
> MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
> -                                                      
> PIPE_CONFIG(ADDR_SURF_P4_16x16) |
> -                                                      
> SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> -                                     break;
> -                             default:
> -                                     gb_tile_moden = 0;
> -                                     break;
> -                             }
> -                             rdev->config.cik.tile_mode_array[reg_offset] = 
> gb_tile_moden;
> -                             WREG32(GB_TILE_MODE0 + (reg_offset * 4), 
> gb_tile_moden);
> -                     }
> +             tile[0] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> +                        MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
> +                        PIPE_CONFIG(ADDR_SURF_P4_16x16) |
> +                        TILE_SPLIT(ADDR_SURF_TILE_SPLIT_64B));
> +             tile[1] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> +                        MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
> +                        PIPE_CONFIG(ADDR_SURF_P4_16x16) |
> +                        TILE_SPLIT(ADDR_SURF_TILE_SPLIT_128B));
> +             tile[2] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> +                        MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
> +                        PIPE_CONFIG(ADDR_SURF_P4_16x16) |
> +                        TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B));
> +             tile[3] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> +                        MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
> +                        PIPE_CONFIG(ADDR_SURF_P4_16x16) |
> +                        TILE_SPLIT(ADDR_SURF_TILE_SPLIT_512B));
> +             tile[4] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> +                        MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
> +                        PIPE_CONFIG(ADDR_SURF_P4_16x16) |
> +                        TILE_SPLIT(split_equal_to_row_size));
> +             tile[5] = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
> +                        PIPE_CONFIG(ADDR_SURF_P4_16x16) |
> +                        MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
> +             tile[6] = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
> +                        MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
> +                        PIPE_CONFIG(ADDR_SURF_P4_16x16) |
> +                        TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B));
> +             tile[7] = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
> +                        MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
> +                        PIPE_CONFIG(ADDR_SURF_P4_16x16) |
> +                        TILE_SPLIT(split_equal_to_row_size));
> +             tile[8] = (ARRAY_MODE(ARRAY_LINEAR_ALIGNED) |
> +                        PIPE_CONFIG(ADDR_SURF_P4_16x16));
> +             tile[9] = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
> +                        PIPE_CONFIG(ADDR_SURF_P4_16x16) |
> +                        MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING));
> +             tile[10] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> +                         MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) 
> |
> +                         PIPE_CONFIG(ADDR_SURF_P4_16x16) |
> +                         SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> +             tile[11] = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
> +                         MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) 
> |
> +                         PIPE_CONFIG(ADDR_SURF_P4_8x16) |
> +                         SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> +             tile[12] = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
> +                         MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) 
> |
> +                         PIPE_CONFIG(ADDR_SURF_P4_16x16) |
> +                         SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> +             tile[13] = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
> +                         PIPE_CONFIG(ADDR_SURF_P4_16x16) |
> +                         MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING));
> +             tile[14] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> +                         MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
> +                         PIPE_CONFIG(ADDR_SURF_P4_16x16) |
> +                         SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> +             tile[16] = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
> +                         MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
> +                         PIPE_CONFIG(ADDR_SURF_P4_8x16) |
> +                         SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> +             tile[17] = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
> +                         MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
> +                         PIPE_CONFIG(ADDR_SURF_P4_16x16) |
> +                         SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> +             tile[27] = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
> +                         PIPE_CONFIG(ADDR_SURF_P4_16x16) |
> +                         
> MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING));
> +             tile[28] = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
> +                         MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) 
> |
> +                         PIPE_CONFIG(ADDR_SURF_P4_16x16) |
> +                         SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> +             tile[29] = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
> +                         MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) 
> |
> +                         PIPE_CONFIG(ADDR_SURF_P4_8x16) |
> +                         SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> +             tile[30] = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
> +                         MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) 
> |
> +                         PIPE_CONFIG(ADDR_SURF_P4_16x16) |
> +                         SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> +
>               } else if (num_rbs < 4) {
> -                     for (reg_offset = 0; reg_offset < num_tile_mode_states; 
> reg_offset++) {
> -                             switch (reg_offset) {
> -                             case 0:
> -                                     gb_tile_moden = 
> (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> -                                                      
> MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
> -                                                      
> PIPE_CONFIG(ADDR_SURF_P4_8x16) |
> -                                                      
> TILE_SPLIT(ADDR_SURF_TILE_SPLIT_64B));
> -                                     break;
> -                             case 1:
> -                                     gb_tile_moden = 
> (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> -                                                      
> MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
> -                                                      
> PIPE_CONFIG(ADDR_SURF_P4_8x16) |
> -                                                      
> TILE_SPLIT(ADDR_SURF_TILE_SPLIT_128B));
> -                                     break;
> -                             case 2:
> -                                     gb_tile_moden = 
> (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> -                                                      
> MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
> -                                                      
> PIPE_CONFIG(ADDR_SURF_P4_8x16) |
> -                                                      
> TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B));
> -                                     break;
> -                             case 3:
> -                                     gb_tile_moden = 
> (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> -                                                      
> MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
> -                                                      
> PIPE_CONFIG(ADDR_SURF_P4_8x16) |
> -                                                      
> TILE_SPLIT(ADDR_SURF_TILE_SPLIT_512B));
> -                                     break;
> -                             case 4:
> -                                     gb_tile_moden = 
> (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> -                                                      
> MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
> -                                                      
> PIPE_CONFIG(ADDR_SURF_P4_8x16) |
> -                                                      
> TILE_SPLIT(split_equal_to_row_size));
> -                                     break;
> -                             case 5:
> -                                     gb_tile_moden = 
> (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
> -                                                      
> PIPE_CONFIG(ADDR_SURF_P4_8x16) |
> -                                                      
> MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
> -                                     break;
> -                             case 6:
> -                                     gb_tile_moden = 
> (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
> -                                                      
> MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
> -                                                      
> PIPE_CONFIG(ADDR_SURF_P4_8x16) |
> -                                                      
> TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B));
> -                                     break;
> -                             case 7:
> -                                     gb_tile_moden = 
> (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
> -                                                      
> MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
> -                                                      
> PIPE_CONFIG(ADDR_SURF_P4_8x16) |
> -                                                      
> TILE_SPLIT(split_equal_to_row_size));
> -                                     break;
> -                             case 8:
> -                                     gb_tile_moden = 
> (ARRAY_MODE(ARRAY_LINEAR_ALIGNED) |
> -                                              
> PIPE_CONFIG(ADDR_SURF_P4_8x16));
> -                                     break;
> -                             case 9:
> -                                     gb_tile_moden = 
> (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
> -                                                      
> PIPE_CONFIG(ADDR_SURF_P4_8x16) |
> -                                                      
> MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING));
> -                                     break;
> -                             case 10:
> -                                     gb_tile_moden = 
> (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> -                                                      
> MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
> -                                                      
> PIPE_CONFIG(ADDR_SURF_P4_8x16) |
> -                                                      
> SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> -                                     break;
> -                             case 11:
> -                                     gb_tile_moden = 
> (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
> -                                                      
> MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
> -                                                      
> PIPE_CONFIG(ADDR_SURF_P4_8x16) |
> -                                                      
> SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> -                                     break;
> -                             case 12:
> -                                     gb_tile_moden = 
> (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
> -                                                      
> MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
> -                                                      
> PIPE_CONFIG(ADDR_SURF_P4_8x16) |
> -                                                      
> SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> -                                     break;
> -                             case 13:
> -                                     gb_tile_moden = 
> (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
> -                                                      
> PIPE_CONFIG(ADDR_SURF_P4_8x16) |
> -                                                      
> MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING));
> -                                     break;
> -                             case 14:
> -                                     gb_tile_moden = 
> (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> -                                                      
> MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
> -                                                      
> PIPE_CONFIG(ADDR_SURF_P4_8x16) |
> -                                                      
> SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> -                                     break;
> -                             case 16:
> -                                     gb_tile_moden = 
> (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
> -                                                      
> MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
> -                                                      
> PIPE_CONFIG(ADDR_SURF_P4_8x16) |
> -                                                      
> SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> -                                     break;
> -                             case 17:
> -                                     gb_tile_moden = 
> (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
> -                                                      
> MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
> -                                                      
> PIPE_CONFIG(ADDR_SURF_P4_8x16) |
> -                                                      
> SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> -                                     break;
> -                             case 27:
> -                                     gb_tile_moden = 
> (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
> -                                                      
> PIPE_CONFIG(ADDR_SURF_P4_8x16) |
> -                                                      
> MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING));
> -                                     break;
> -                             case 28:
> -                                     gb_tile_moden = 
> (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
> -                                                      
> MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
> -                                                      
> PIPE_CONFIG(ADDR_SURF_P4_8x16) |
> -                                                      
> SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> -                                     break;
> -                             case 29:
> -                                     gb_tile_moden = 
> (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
> -                                                      
> MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
> -                                                      
> PIPE_CONFIG(ADDR_SURF_P4_8x16) |
> -                                                      
> SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> -                                     break;
> -                             case 30:
> -                                     gb_tile_moden = 
> (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
> -                                                      
> MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
> -                                                      
> PIPE_CONFIG(ADDR_SURF_P4_8x16) |
> -                                                      
> SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> -                                     break;
> -                             default:
> -                                     gb_tile_moden = 0;
> -                                     break;
> -                             }
> -                             rdev->config.cik.tile_mode_array[reg_offset] = 
> gb_tile_moden;
> -                             WREG32(GB_TILE_MODE0 + (reg_offset * 4), 
> gb_tile_moden);
> -                     }
> -             }
> -             for (reg_offset = 0; reg_offset < 
> num_secondary_tile_mode_states; reg_offset++) {
> -                     switch (reg_offset) {
> -                     case 0:
> -                             gb_tile_moden = 
> (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> -                                              
> BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
> -                                              
> MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
> -                                              NUM_BANKS(ADDR_SURF_16_BANK));
> -                             break;
> -                     case 1:
> -                             gb_tile_moden = 
> (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> -                                              
> BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
> -                                              
> MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
> -                                              NUM_BANKS(ADDR_SURF_16_BANK));
> -                             break;
> -                     case 2:
> -                             gb_tile_moden = 
> (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> -                                              
> BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
> -                                              
> MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
> -                                              NUM_BANKS(ADDR_SURF_16_BANK));
> -                             break;
> -                     case 3:
> -                             gb_tile_moden = 
> (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> -                                              
> BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
> -                                              
> MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
> -                                              NUM_BANKS(ADDR_SURF_16_BANK));
> -                             break;
> -                     case 4:
> -                             gb_tile_moden = 
> (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> -                                              
> BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
> -                                              
> MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
> -                                              NUM_BANKS(ADDR_SURF_16_BANK));
> -                             break;
> -                     case 5:
> -                             gb_tile_moden = 
> (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> -                                              
> BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
> -                                              
> MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
> -                                              NUM_BANKS(ADDR_SURF_8_BANK));
> -                             break;
> -                     case 6:
> -                             gb_tile_moden = 
> (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> -                                              
> BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
> -                                              
> MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) |
> -                                              NUM_BANKS(ADDR_SURF_4_BANK));
> -                             break;
> -                     case 8:
> -                             gb_tile_moden = 
> (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_2) |
> -                                              
> BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_8) |
> -                                              
> MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
> -                                              NUM_BANKS(ADDR_SURF_16_BANK));
> -                             break;
> -                     case 9:
> -                             gb_tile_moden = 
> (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_2) |
> -                                              
> BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
> -                                              
> MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
> -                                              NUM_BANKS(ADDR_SURF_16_BANK));
> -                             break;
> -                     case 10:
> -                             gb_tile_moden = 
> (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> -                                              
> BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
> -                                              
> MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
> -                                              NUM_BANKS(ADDR_SURF_16_BANK));
> -                             break;
> -                     case 11:
> -                             gb_tile_moden = 
> (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> -                                              
> BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
> -                                              
> MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
> -                                              NUM_BANKS(ADDR_SURF_16_BANK));
> -                             break;
> -                     case 12:
> -                             gb_tile_moden = 
> (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> -                                              
> BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
> -                                              
> MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
> -                                              NUM_BANKS(ADDR_SURF_16_BANK));
> -                             break;
> -                     case 13:
> -                             gb_tile_moden = 
> (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> -                                              
> BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
> -                                              
> MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
> -                                              NUM_BANKS(ADDR_SURF_8_BANK));
> -                             break;
> -                     case 14:
> -                             gb_tile_moden = 
> (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> -                                              
> BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
> -                                              
> MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) |
> -                                              NUM_BANKS(ADDR_SURF_4_BANK));
> -                             break;
> -                     default:
> -                             gb_tile_moden = 0;
> -                             break;
> -                     }
> -                     rdev->config.cik.macrotile_mode_array[reg_offset] = 
> gb_tile_moden;
> -                     WREG32(GB_MACROTILE_MODE0 + (reg_offset * 4), 
> gb_tile_moden);
> -             }
> -     } else if (num_pipe_configs == 2) {
> -             for (reg_offset = 0; reg_offset < num_tile_mode_states; 
> reg_offset++) {
> -                     switch (reg_offset) {
> -                     case 0:
> -                             gb_tile_moden = 
> (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> -                                              
> MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
> -                                              PIPE_CONFIG(ADDR_SURF_P2) |
> -                                              
> TILE_SPLIT(ADDR_SURF_TILE_SPLIT_64B));
> -                             break;
> -                     case 1:
> -                             gb_tile_moden = 
> (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> -                                              
> MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
> -                                              PIPE_CONFIG(ADDR_SURF_P2) |
> -                                              
> TILE_SPLIT(ADDR_SURF_TILE_SPLIT_128B));
> -                             break;
> -                     case 2:
> -                             gb_tile_moden = 
> (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> -                                              
> MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
> -                                              PIPE_CONFIG(ADDR_SURF_P2) |
> -                                              
> TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B));
> -                             break;
> -                     case 3:
> -                             gb_tile_moden = 
> (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> -                                              
> MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
> -                                              PIPE_CONFIG(ADDR_SURF_P2) |
> -                                              
> TILE_SPLIT(ADDR_SURF_TILE_SPLIT_512B));
> -                             break;
> -                     case 4:
> -                             gb_tile_moden = 
> (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> -                                              
> MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
> -                                              PIPE_CONFIG(ADDR_SURF_P2) |
> -                                              
> TILE_SPLIT(split_equal_to_row_size));
> -                             break;
> -                     case 5:
> -                             gb_tile_moden = 
> (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
> -                                              PIPE_CONFIG(ADDR_SURF_P2) |
> -                                              
> MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
> -                             break;
> -                     case 6:
> -                             gb_tile_moden = 
> (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
> -                                              
> MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
> -                                              PIPE_CONFIG(ADDR_SURF_P2) |
> -                                              
> TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B));
> -                             break;
> -                     case 7:
> -                             gb_tile_moden = 
> (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
> -                                              
> MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
> -                                              PIPE_CONFIG(ADDR_SURF_P2) |
> -                                              
> TILE_SPLIT(split_equal_to_row_size));
> -                             break;
> -                     case 8:
> -                             gb_tile_moden = 
> ARRAY_MODE(ARRAY_LINEAR_ALIGNED) |
> -                                             PIPE_CONFIG(ADDR_SURF_P2);
> -                             break;
> -                     case 9:
> -                             gb_tile_moden = 
> (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
> -                                              
> MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
> -                                              PIPE_CONFIG(ADDR_SURF_P2));
> -                             break;
> -                     case 10:
> -                             gb_tile_moden = 
> (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> -                                              
> MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
> -                                              PIPE_CONFIG(ADDR_SURF_P2) |
> -                                              
> SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> -                             break;
> -                     case 11:
> -                             gb_tile_moden = 
> (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
> -                                              
> MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
> -                                              PIPE_CONFIG(ADDR_SURF_P2) |
> -                                              
> SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> -                             break;
> -                     case 12:
> -                             gb_tile_moden = 
> (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
> -                                              
> MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
> -                                              PIPE_CONFIG(ADDR_SURF_P2) |
> -                                              
> SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> -                             break;
> -                     case 13:
> -                             gb_tile_moden = 
> (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
> -                                              PIPE_CONFIG(ADDR_SURF_P2) |
> -                                              
> MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING));
> -                             break;
> -                     case 14:
> -                             gb_tile_moden = 
> (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> -                                              
> MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
> -                                              PIPE_CONFIG(ADDR_SURF_P2) |
> -                                              
> SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> -                             break;
> -                     case 16:
> -                             gb_tile_moden = 
> (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
> -                                              
> MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
> -                                              PIPE_CONFIG(ADDR_SURF_P2) |
> -                                              
> SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> -                             break;
> -                     case 17:
> -                             gb_tile_moden = 
> (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
> -                                              
> MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
> -                                              PIPE_CONFIG(ADDR_SURF_P2) |
> -                                              
> SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> -                             break;
> -                     case 27:
> -                             gb_tile_moden = 
> (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
> -                                              
> MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
> -                                              PIPE_CONFIG(ADDR_SURF_P2));
> -                             break;
> -                     case 28:
> -                             gb_tile_moden = 
> (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
> -                                              
> MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
> -                                              PIPE_CONFIG(ADDR_SURF_P2) |
> -                                              
> SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> -                             break;
> -                     case 29:
> -                             gb_tile_moden = 
> (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
> -                                              
> MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
> -                                              PIPE_CONFIG(ADDR_SURF_P2) |
> -                                              
> SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> -                             break;
> -                     case 30:
> -                             gb_tile_moden = 
> (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
> -                                              
> MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
> -                                              PIPE_CONFIG(ADDR_SURF_P2) |
> -                                              
> SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> -                             break;
> -                     default:
> -                             gb_tile_moden = 0;
> -                             break;
> -                     }
> -                     rdev->config.cik.tile_mode_array[reg_offset] = 
> gb_tile_moden;
> -                     WREG32(GB_TILE_MODE0 + (reg_offset * 4), gb_tile_moden);
> -             }
> -             for (reg_offset = 0; reg_offset < 
> num_secondary_tile_mode_states; reg_offset++) {
> -                     switch (reg_offset) {
> -                     case 0:
> -                             gb_tile_moden = 
> (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_2) |
> -                                              
> BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
> -                                              
> MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
> -                                              NUM_BANKS(ADDR_SURF_16_BANK));
> -                             break;
> -                     case 1:
> -                             gb_tile_moden = 
> (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_2) |
> -                                              
> BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
> -                                              
> MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
> -                                              NUM_BANKS(ADDR_SURF_16_BANK));
> -                             break;
> -                     case 2:
> -                             gb_tile_moden = 
> (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> -                                              
> BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
> -                                              
> MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
> -                                              NUM_BANKS(ADDR_SURF_16_BANK));
> -                             break;
> -                     case 3:
> -                             gb_tile_moden = 
> (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> -                                              
> BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
> -                                              
> MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
> -                                              NUM_BANKS(ADDR_SURF_16_BANK));
> -                             break;
> -                     case 4:
> -                             gb_tile_moden = 
> (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> -                                              
> BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
> -                                              
> MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
> -                                              NUM_BANKS(ADDR_SURF_16_BANK));
> -                             break;
> -                     case 5:
> -                             gb_tile_moden = 
> (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> -                                              
> BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
> -                                              
> MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
> -                                              NUM_BANKS(ADDR_SURF_16_BANK));
> -                             break;
> -                     case 6:
> -                             gb_tile_moden = 
> (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> -                                              
> BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
> -                                              
> MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
> -                                              NUM_BANKS(ADDR_SURF_8_BANK));
> -                             break;
> -                     case 8:
> -                             gb_tile_moden = 
> (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_4) |
> -                                              
> BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_8) |
> -                                              
> MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
> -                                              NUM_BANKS(ADDR_SURF_16_BANK));
> -                             break;
> -                     case 9:
> -                             gb_tile_moden = 
> (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_4) |
> -                                              
> BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
> -                                              
> MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
> -                                              NUM_BANKS(ADDR_SURF_16_BANK));
> -                             break;
> -                     case 10:
> -                             gb_tile_moden = 
> (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_2) |
> -                                              
> BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
> -                                              
> MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
> -                                              NUM_BANKS(ADDR_SURF_16_BANK));
> -                             break;
> -                     case 11:
> -                             gb_tile_moden = 
> (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_2) |
> -                                              
> BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
> -                                              
> MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
> -                                              NUM_BANKS(ADDR_SURF_16_BANK));
> -                             break;
> -                     case 12:
> -                             gb_tile_moden = 
> (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> -                                              
> BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
> -                                              
> MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
> -                                              NUM_BANKS(ADDR_SURF_16_BANK));
> -                             break;
> -                     case 13:
> -                             gb_tile_moden = 
> (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> -                                              
> BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
> -                                              
> MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
> -                                              NUM_BANKS(ADDR_SURF_16_BANK));
> -                             break;
> -                     case 14:
> -                             gb_tile_moden = 
> (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> -                                              
> BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
> -                                              
> MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
> -                                              NUM_BANKS(ADDR_SURF_8_BANK));
> -                             break;
> -                     default:
> -                             gb_tile_moden = 0;
> -                             break;
> -                     }
> -                     rdev->config.cik.macrotile_mode_array[reg_offset] = 
> gb_tile_moden;
> -                     WREG32(GB_MACROTILE_MODE0 + (reg_offset * 4), 
> gb_tile_moden);
> +             tile[0] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> +                        MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
> +                        PIPE_CONFIG(ADDR_SURF_P4_8x16) |
> +                        TILE_SPLIT(ADDR_SURF_TILE_SPLIT_64B));
> +             tile[1] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> +                        MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
> +                        PIPE_CONFIG(ADDR_SURF_P4_8x16) |
> +                        TILE_SPLIT(ADDR_SURF_TILE_SPLIT_128B));
> +             tile[2] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> +                        MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
> +                        PIPE_CONFIG(ADDR_SURF_P4_8x16) |
> +                        TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B));
> +             tile[3] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> +                        MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
> +                        PIPE_CONFIG(ADDR_SURF_P4_8x16) |
> +                        TILE_SPLIT(ADDR_SURF_TILE_SPLIT_512B));
> +             tile[4] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> +                        MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
> +                        PIPE_CONFIG(ADDR_SURF_P4_8x16) |
> +                        TILE_SPLIT(split_equal_to_row_size));
> +             tile[5] = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
> +                        PIPE_CONFIG(ADDR_SURF_P4_8x16) |
> +                        MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
> +             tile[6] = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
> +                        MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
> +                        PIPE_CONFIG(ADDR_SURF_P4_8x16) |
> +                        TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B));
> +             tile[7] = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
> +                        MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
> +                        PIPE_CONFIG(ADDR_SURF_P4_8x16) |
> +                        TILE_SPLIT(split_equal_to_row_size));
> +             tile[8] = (ARRAY_MODE(ARRAY_LINEAR_ALIGNED) |
> +                        PIPE_CONFIG(ADDR_SURF_P4_8x16));
> +             tile[9] = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
> +                        PIPE_CONFIG(ADDR_SURF_P4_8x16) |
> +                        MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING));
> +             tile[10] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> +                         MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) 
> |
> +                         PIPE_CONFIG(ADDR_SURF_P4_8x16) |
> +                         SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> +             tile[11] = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
> +                         MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) 
> |
> +                         PIPE_CONFIG(ADDR_SURF_P4_8x16) |
> +                         SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> +             tile[12] = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
> +                         MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) 
> |
> +                         PIPE_CONFIG(ADDR_SURF_P4_8x16) |
> +                         SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> +             tile[13] = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
> +                         PIPE_CONFIG(ADDR_SURF_P4_8x16) |
> +                         MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING));
> +             tile[14] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> +                         MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
> +                         PIPE_CONFIG(ADDR_SURF_P4_8x16) |
> +                         SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> +             tile[16] = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
> +                         MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
> +                         PIPE_CONFIG(ADDR_SURF_P4_8x16) |
> +                         SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> +             tile[17] = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
> +                         MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
> +                         PIPE_CONFIG(ADDR_SURF_P4_8x16) |
> +                         SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> +             tile[27] = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
> +                         PIPE_CONFIG(ADDR_SURF_P4_8x16) |
> +                         
> MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING));
> +             tile[28] = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
> +                         MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) 
> |
> +                         PIPE_CONFIG(ADDR_SURF_P4_8x16) |
> +                         SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> +             tile[29] = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
> +                         MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) 
> |
> +                         PIPE_CONFIG(ADDR_SURF_P4_8x16) |
> +                         SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> +             tile[30] = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
> +                         MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) 
> |
> +                         PIPE_CONFIG(ADDR_SURF_P4_8x16) |
> +                         SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
>               }
> -     } else
> +
> +             macrotile[0] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> +                             BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
> +                             MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
> +                             NUM_BANKS(ADDR_SURF_16_BANK));
> +             macrotile[1] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> +                             BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
> +                             MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
> +                             NUM_BANKS(ADDR_SURF_16_BANK));
> +             macrotile[2] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> +                             BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
> +                             MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
> +                             NUM_BANKS(ADDR_SURF_16_BANK));
> +             macrotile[3] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> +                             BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
> +                             MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
> +                             NUM_BANKS(ADDR_SURF_16_BANK));
> +             macrotile[4] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> +                             BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
> +                             MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
> +                             NUM_BANKS(ADDR_SURF_16_BANK));
> +             macrotile[5] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> +                             BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
> +                             MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
> +                             NUM_BANKS(ADDR_SURF_8_BANK));
> +             macrotile[6] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> +                             BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
> +                             MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) |
> +                             NUM_BANKS(ADDR_SURF_4_BANK));
> +             macrotile[8] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_2) |
> +                             BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_8) |
> +                             MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
> +                             NUM_BANKS(ADDR_SURF_16_BANK));
> +             macrotile[9] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_2) |
> +                             BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
> +                             MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
> +                             NUM_BANKS(ADDR_SURF_16_BANK));
> +             macrotile[10] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> +                             BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
> +                             MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
> +                             NUM_BANKS(ADDR_SURF_16_BANK));
> +             macrotile[11] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> +                             BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
> +                             MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
> +                             NUM_BANKS(ADDR_SURF_16_BANK));
> +             macrotile[12] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> +                             BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
> +                             MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
> +                             NUM_BANKS(ADDR_SURF_16_BANK));
> +             macrotile[13] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> +                             BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
> +                             MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
> +                             NUM_BANKS(ADDR_SURF_8_BANK));
> +             macrotile[14] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> +                             BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
> +                             MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) |
> +                             NUM_BANKS(ADDR_SURF_4_BANK));
> +
> +             for (reg_offset = 0; reg_offset < num_tile_mode_states; 
> reg_offset++)
> +                     WREG32(GB_TILE_MODE0 + (reg_offset * 4), 
> tile[reg_offset]);
> +             for (reg_offset = 0; reg_offset < 
> num_secondary_tile_mode_states; reg_offset++)
> +                     WREG32(GB_MACROTILE_MODE0 + (reg_offset * 4), 
> macrotile[reg_offset]);
> +             break;
> +
> +     case 2:
> +             tile[0] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> +                        MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
> +                        PIPE_CONFIG(ADDR_SURF_P2) |
> +                        TILE_SPLIT(ADDR_SURF_TILE_SPLIT_64B));
> +             tile[1] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> +                        MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
> +                        PIPE_CONFIG(ADDR_SURF_P2) |
> +                        TILE_SPLIT(ADDR_SURF_TILE_SPLIT_128B));
> +             tile[2] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> +                        MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
> +                        PIPE_CONFIG(ADDR_SURF_P2) |
> +                        TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B));
> +             tile[3] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> +                        MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
> +                        PIPE_CONFIG(ADDR_SURF_P2) |
> +                        TILE_SPLIT(ADDR_SURF_TILE_SPLIT_512B));
> +             tile[4] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> +                        MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
> +                        PIPE_CONFIG(ADDR_SURF_P2) |
> +                        TILE_SPLIT(split_equal_to_row_size));
> +             tile[5] = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
> +                        PIPE_CONFIG(ADDR_SURF_P2) |
> +                        MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
> +             tile[6] = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
> +                        MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
> +                        PIPE_CONFIG(ADDR_SURF_P2) |
> +                        TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B));
> +             tile[7] = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
> +                        MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
> +                        PIPE_CONFIG(ADDR_SURF_P2) |
> +                        TILE_SPLIT(split_equal_to_row_size));
> +             tile[8] = ARRAY_MODE(ARRAY_LINEAR_ALIGNED) |
> +                        PIPE_CONFIG(ADDR_SURF_P2);
> +             tile[9] = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
> +                        MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
> +                        PIPE_CONFIG(ADDR_SURF_P2));
> +             tile[10] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> +                         MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) 
> |
> +                         PIPE_CONFIG(ADDR_SURF_P2) |
> +                         SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> +             tile[11] = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
> +                         MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) 
> |
> +                         PIPE_CONFIG(ADDR_SURF_P2) |
> +                         SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> +             tile[12] = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
> +                         MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) 
> |
> +                         PIPE_CONFIG(ADDR_SURF_P2) |
> +                         SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> +             tile[13] = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
> +                         PIPE_CONFIG(ADDR_SURF_P2) |
> +                         MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING));
> +             tile[14] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> +                         MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
> +                         PIPE_CONFIG(ADDR_SURF_P2) |
> +                         SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> +             tile[16] = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
> +                         MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
> +                         PIPE_CONFIG(ADDR_SURF_P2) |
> +                         SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> +             tile[17] = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
> +                         MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
> +                         PIPE_CONFIG(ADDR_SURF_P2) |
> +                         SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> +             tile[27] = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
> +                         MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) 
> |
> +                         PIPE_CONFIG(ADDR_SURF_P2));
> +             tile[28] = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
> +                         MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) 
> |
> +                         PIPE_CONFIG(ADDR_SURF_P2) |
> +                         SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> +             tile[29] = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
> +                         MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) 
> |
> +                         PIPE_CONFIG(ADDR_SURF_P2) |
> +                         SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> +             tile[30] = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
> +                         MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) 
> |
> +                         PIPE_CONFIG(ADDR_SURF_P2) |
> +                         SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
> +
> +             macrotile[0] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_2) |
> +                             BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
> +                             MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
> +                             NUM_BANKS(ADDR_SURF_16_BANK));
> +             macrotile[1] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_2) |
> +                             BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
> +                             MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
> +                             NUM_BANKS(ADDR_SURF_16_BANK));
> +             macrotile[2] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> +                             BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
> +                             MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
> +                             NUM_BANKS(ADDR_SURF_16_BANK));
> +             macrotile[3] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> +                             BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
> +                             MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
> +                             NUM_BANKS(ADDR_SURF_16_BANK));
> +             macrotile[4] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> +                             BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
> +                             MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
> +                             NUM_BANKS(ADDR_SURF_16_BANK));
> +             macrotile[5] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> +                             BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
> +                             MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
> +                             NUM_BANKS(ADDR_SURF_16_BANK));
> +             macrotile[6] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> +                             BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
> +                             MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
> +                             NUM_BANKS(ADDR_SURF_8_BANK));
> +             macrotile[8] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_4) |
> +                             BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_8) |
> +                             MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
> +                             NUM_BANKS(ADDR_SURF_16_BANK));
> +             macrotile[9] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_4) |
> +                             BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
> +                             MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
> +                             NUM_BANKS(ADDR_SURF_16_BANK));
> +             macrotile[10] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_2) |
> +                             BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
> +                             MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
> +                             NUM_BANKS(ADDR_SURF_16_BANK));
> +             macrotile[11] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_2) |
> +                             BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
> +                             MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
> +                             NUM_BANKS(ADDR_SURF_16_BANK));
> +             macrotile[12] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> +                             BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
> +                             MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
> +                             NUM_BANKS(ADDR_SURF_16_BANK));
> +             macrotile[13] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> +                             BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
> +                             MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
> +                             NUM_BANKS(ADDR_SURF_16_BANK));
> +             macrotile[14] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> +                             BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
> +                             MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
> +                             NUM_BANKS(ADDR_SURF_8_BANK));
> +
> +             for (reg_offset = 0; reg_offset < num_tile_mode_states; 
> reg_offset++)
> +                     WREG32(GB_TILE_MODE0 + (reg_offset * 4), 
> tile[reg_offset]);
> +             for (reg_offset = 0; reg_offset < 
> num_secondary_tile_mode_states; reg_offset++)
> +                     WREG32(GB_MACROTILE_MODE0 + (reg_offset * 4), 
> macrotile[reg_offset]);
> +             break;
> +
> +     default:
>               DRM_ERROR("unknown num pipe config: 0x%x\n", num_pipe_configs);
> +     }
>   }
>   
>   /**

Reply via email to