|
@@ -31,8 +31,6 @@
|
|
|
#include "amdgpu_ucode.h"
|
|
|
#include "clearstate_ci.h"
|
|
|
|
|
|
-#include "uvd/uvd_4_2_d.h"
|
|
|
-
|
|
|
#include "dce/dce_8_0_d.h"
|
|
|
#include "dce/dce_8_0_sh_mask.h"
|
|
|
|
|
@@ -1006,9 +1004,15 @@ out:
|
|
|
*/
|
|
|
static void gfx_v7_0_tiling_mode_table_init(struct amdgpu_device *adev)
|
|
|
{
|
|
|
- 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;
|
|
|
+ const u32 num_tile_mode_states =
|
|
|
+ ARRAY_SIZE(adev->gfx.config.tile_mode_array);
|
|
|
+ const u32 num_secondary_tile_mode_states =
|
|
|
+ ARRAY_SIZE(adev->gfx.config.macrotile_mode_array);
|
|
|
+ u32 reg_offset, split_equal_to_row_size;
|
|
|
+ uint32_t *tile, *macrotile;
|
|
|
+
|
|
|
+ tile = adev->gfx.config.tile_mode_array;
|
|
|
+ macrotile = adev->gfx.config.macrotile_mode_array;
|
|
|
|
|
|
switch (adev->gfx.config.mem_row_size_in_kb) {
|
|
|
case 1:
|
|
@@ -1023,832 +1027,531 @@ static void gfx_v7_0_tiling_mode_table_init(struct amdgpu_device *adev)
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
+ 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 (adev->asic_type) {
|
|
|
case CHIP_BONAIRE:
|
|
|
- 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) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P4_16x16) |
|
|
|
- TILE_SPLIT(ADDR_SURF_TILE_SPLIT_64B) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
- break;
|
|
|
- case 1:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P4_16x16) |
|
|
|
- TILE_SPLIT(ADDR_SURF_TILE_SPLIT_128B) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
- break;
|
|
|
- case 2:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P4_16x16) |
|
|
|
- TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
- break;
|
|
|
- case 3:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P4_16x16) |
|
|
|
- TILE_SPLIT(ADDR_SURF_TILE_SPLIT_512B) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
- break;
|
|
|
- case 4:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P4_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
|
|
|
- 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_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P4_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
|
|
|
- TILE_SPLIT(split_equal_to_row_size));
|
|
|
- break;
|
|
|
- case 7:
|
|
|
- gb_tile_moden = (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) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P4_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
- break;
|
|
|
- case 11:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P4_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_8));
|
|
|
- break;
|
|
|
- case 12:
|
|
|
- gb_tile_moden = (TILE_SPLIT(split_equal_to_row_size));
|
|
|
- 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) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P4_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
- break;
|
|
|
- case 15:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_3D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P4_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
- break;
|
|
|
- case 16:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P4_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_8));
|
|
|
- break;
|
|
|
- case 17:
|
|
|
- gb_tile_moden = (TILE_SPLIT(split_equal_to_row_size));
|
|
|
- break;
|
|
|
- case 18:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THICK) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P4_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
- break;
|
|
|
- case 19:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THICK) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P4_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING));
|
|
|
- break;
|
|
|
- case 20:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THICK) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P4_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
- break;
|
|
|
- case 21:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_3D_TILED_THICK) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P4_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
- break;
|
|
|
- case 22:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THICK) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P4_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
- break;
|
|
|
- case 23:
|
|
|
- gb_tile_moden = (TILE_SPLIT(split_equal_to_row_size));
|
|
|
- break;
|
|
|
- case 24:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THICK) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P4_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
- break;
|
|
|
- case 25:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_XTHICK) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P4_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
- break;
|
|
|
- case 26:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_3D_TILED_XTHICK) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P4_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
- 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_2D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P4_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
- break;
|
|
|
- case 29:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P4_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_8));
|
|
|
- break;
|
|
|
- case 30:
|
|
|
- gb_tile_moden = (TILE_SPLIT(split_equal_to_row_size));
|
|
|
- break;
|
|
|
- default:
|
|
|
- gb_tile_moden = 0;
|
|
|
- break;
|
|
|
- }
|
|
|
- adev->gfx.config.tile_mode_array[reg_offset] = gb_tile_moden;
|
|
|
- WREG32(mmGB_TILE_MODE0 + reg_offset, 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;
|
|
|
- }
|
|
|
- adev->gfx.config.macrotile_mode_array[reg_offset] = gb_tile_moden;
|
|
|
- WREG32(mmGB_MACROTILE_MODE0 + reg_offset, gb_tile_moden);
|
|
|
- }
|
|
|
+ tile[0] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P4_16x16) |
|
|
|
+ TILE_SPLIT(ADDR_SURF_TILE_SPLIT_64B) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
+ tile[1] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P4_16x16) |
|
|
|
+ TILE_SPLIT(ADDR_SURF_TILE_SPLIT_128B) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
+ tile[2] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P4_16x16) |
|
|
|
+ TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
+ tile[3] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P4_16x16) |
|
|
|
+ TILE_SPLIT(ADDR_SURF_TILE_SPLIT_512B) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
+ tile[4] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P4_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
|
|
|
+ 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_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P4_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
|
|
|
+ TILE_SPLIT(split_equal_to_row_size));
|
|
|
+ tile[7] = (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) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P4_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
+ tile[11] = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P4_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_8));
|
|
|
+ tile[12] = (TILE_SPLIT(split_equal_to_row_size));
|
|
|
+ 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) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P4_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
+ tile[15] = (ARRAY_MODE(ARRAY_3D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P4_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
+ tile[16] = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P4_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_8));
|
|
|
+ tile[17] = (TILE_SPLIT(split_equal_to_row_size));
|
|
|
+ tile[18] = (ARRAY_MODE(ARRAY_1D_TILED_THICK) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P4_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
+ tile[19] = (ARRAY_MODE(ARRAY_1D_TILED_THICK) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P4_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING));
|
|
|
+ tile[20] = (ARRAY_MODE(ARRAY_2D_TILED_THICK) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P4_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
+ tile[21] = (ARRAY_MODE(ARRAY_3D_TILED_THICK) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P4_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
+ tile[22] = (ARRAY_MODE(ARRAY_PRT_TILED_THICK) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P4_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
+ tile[23] = (TILE_SPLIT(split_equal_to_row_size));
|
|
|
+ tile[24] = (ARRAY_MODE(ARRAY_2D_TILED_THICK) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P4_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
+ tile[25] = (ARRAY_MODE(ARRAY_2D_TILED_XTHICK) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P4_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
+ tile[26] = (ARRAY_MODE(ARRAY_3D_TILED_XTHICK) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P4_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
+ 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_2D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P4_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
+ tile[29] = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P4_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_8));
|
|
|
+ tile[30] = (TILE_SPLIT(split_equal_to_row_size));
|
|
|
+
|
|
|
+ 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(mmGB_TILE_MODE0 + reg_offset, tile[reg_offset]);
|
|
|
+ for (reg_offset = 0; reg_offset < num_secondary_tile_mode_states; reg_offset++)
|
|
|
+ if (reg_offset != 7)
|
|
|
+ WREG32(mmGB_MACROTILE_MODE0 + reg_offset, macrotile[reg_offset]);
|
|
|
break;
|
|
|
case CHIP_HAWAII:
|
|
|
- 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) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
- TILE_SPLIT(ADDR_SURF_TILE_SPLIT_64B) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
- break;
|
|
|
- case 1:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
- TILE_SPLIT(ADDR_SURF_TILE_SPLIT_128B) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
- break;
|
|
|
- case 2:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
- TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
- break;
|
|
|
- case 3:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
- TILE_SPLIT(ADDR_SURF_TILE_SPLIT_512B) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
- break;
|
|
|
- case 4:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
|
|
|
- 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) |
|
|
|
- TILE_SPLIT(split_equal_to_row_size));
|
|
|
- break;
|
|
|
- case 6:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
|
|
|
- TILE_SPLIT(split_equal_to_row_size));
|
|
|
- break;
|
|
|
- case 7:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P4_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
|
|
|
- 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) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
- break;
|
|
|
- case 11:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_8));
|
|
|
- break;
|
|
|
- case 12:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P4_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_8));
|
|
|
- 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) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
- break;
|
|
|
- case 15:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_3D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
- break;
|
|
|
- case 16:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_8));
|
|
|
- break;
|
|
|
- case 17:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P4_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_8));
|
|
|
- break;
|
|
|
- case 18:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THICK) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
- break;
|
|
|
- case 19:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THICK) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING));
|
|
|
- break;
|
|
|
- case 20:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THICK) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
- break;
|
|
|
- case 21:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_3D_TILED_THICK) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
- break;
|
|
|
- case 22:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THICK) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
- break;
|
|
|
- case 23:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THICK) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P4_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
- break;
|
|
|
- case 24:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THICK) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
- break;
|
|
|
- case 25:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_XTHICK) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
- break;
|
|
|
- case 26:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_3D_TILED_XTHICK) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
- 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) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
- break;
|
|
|
- case 29:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_8));
|
|
|
- break;
|
|
|
- case 30:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P4_16x16) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_8));
|
|
|
- break;
|
|
|
- default:
|
|
|
- gb_tile_moden = 0;
|
|
|
- break;
|
|
|
- }
|
|
|
- adev->gfx.config.tile_mode_array[reg_offset] = gb_tile_moden;
|
|
|
- WREG32(mmGB_TILE_MODE0 + reg_offset, 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_4_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_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;
|
|
|
- }
|
|
|
- adev->gfx.config.macrotile_mode_array[reg_offset] = gb_tile_moden;
|
|
|
- WREG32(mmGB_MACROTILE_MODE0 + reg_offset, gb_tile_moden);
|
|
|
- }
|
|
|
+ tile[0] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
+ TILE_SPLIT(ADDR_SURF_TILE_SPLIT_64B) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
+ tile[1] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
+ TILE_SPLIT(ADDR_SURF_TILE_SPLIT_128B) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
+ tile[2] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
+ TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
+ tile[3] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
+ TILE_SPLIT(ADDR_SURF_TILE_SPLIT_512B) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
+ tile[4] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
|
|
|
+ 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_SPLIT(split_equal_to_row_size));
|
|
|
+ tile[6] = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
|
|
|
+ TILE_SPLIT(split_equal_to_row_size));
|
|
|
+ tile[7] = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P4_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
|
|
|
+ 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) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
+ tile[11] = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_8));
|
|
|
+ tile[12] = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P4_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_8));
|
|
|
+ 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) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
+ tile[15] = (ARRAY_MODE(ARRAY_3D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
+ tile[16] = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_8));
|
|
|
+ tile[17] = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P4_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_8));
|
|
|
+ tile[18] = (ARRAY_MODE(ARRAY_1D_TILED_THICK) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
+ tile[19] = (ARRAY_MODE(ARRAY_1D_TILED_THICK) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING));
|
|
|
+ tile[20] = (ARRAY_MODE(ARRAY_2D_TILED_THICK) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
+ tile[21] = (ARRAY_MODE(ARRAY_3D_TILED_THICK) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
+ tile[22] = (ARRAY_MODE(ARRAY_PRT_TILED_THICK) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
+ tile[23] = (ARRAY_MODE(ARRAY_PRT_TILED_THICK) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P4_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
+ tile[24] = (ARRAY_MODE(ARRAY_2D_TILED_THICK) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
+ tile[25] = (ARRAY_MODE(ARRAY_2D_TILED_XTHICK) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
+ tile[26] = (ARRAY_MODE(ARRAY_3D_TILED_XTHICK) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
+ 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) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
+ tile[29] = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_8));
|
|
|
+ tile[30] = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P4_16x16) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_8));
|
|
|
+
|
|
|
+ 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_4_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_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(mmGB_TILE_MODE0 + reg_offset, tile[reg_offset]);
|
|
|
+ for (reg_offset = 0; reg_offset < num_secondary_tile_mode_states; reg_offset++)
|
|
|
+ if (reg_offset != 7)
|
|
|
+ WREG32(mmGB_MACROTILE_MODE0 + reg_offset, macrotile[reg_offset]);
|
|
|
break;
|
|
|
case CHIP_KABINI:
|
|
|
case CHIP_KAVERI:
|
|
|
case CHIP_MULLINS:
|
|
|
default:
|
|
|
- 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) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- TILE_SPLIT(ADDR_SURF_TILE_SPLIT_64B) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
- break;
|
|
|
- case 1:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- TILE_SPLIT(ADDR_SURF_TILE_SPLIT_128B) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
- break;
|
|
|
- case 2:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
- break;
|
|
|
- case 3:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- TILE_SPLIT(ADDR_SURF_TILE_SPLIT_512B) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
- break;
|
|
|
- case 4:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
|
|
|
- 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_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
|
|
|
- TILE_SPLIT(split_equal_to_row_size));
|
|
|
- break;
|
|
|
- case 7:
|
|
|
- gb_tile_moden = (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) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING));
|
|
|
- break;
|
|
|
- case 10:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
- break;
|
|
|
- case 11:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_8));
|
|
|
- break;
|
|
|
- case 12:
|
|
|
- gb_tile_moden = (TILE_SPLIT(split_equal_to_row_size));
|
|
|
- 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) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
- break;
|
|
|
- case 15:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_3D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
- break;
|
|
|
- case 16:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_8));
|
|
|
- break;
|
|
|
- case 17:
|
|
|
- gb_tile_moden = (TILE_SPLIT(split_equal_to_row_size));
|
|
|
- break;
|
|
|
- case 18:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THICK) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
- break;
|
|
|
- case 19:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THICK) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING));
|
|
|
- break;
|
|
|
- case 20:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THICK) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
- break;
|
|
|
- case 21:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_3D_TILED_THICK) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
- break;
|
|
|
- case 22:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THICK) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
- break;
|
|
|
- case 23:
|
|
|
- gb_tile_moden = (TILE_SPLIT(split_equal_to_row_size));
|
|
|
- break;
|
|
|
- case 24:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THICK) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
- break;
|
|
|
- case 25:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_XTHICK) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
- break;
|
|
|
- case 26:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_3D_TILED_XTHICK) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
- break;
|
|
|
- case 27:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING));
|
|
|
- break;
|
|
|
- case 28:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
- break;
|
|
|
- case 29:
|
|
|
- gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
- PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
- MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
|
|
|
- SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_8));
|
|
|
- break;
|
|
|
- case 30:
|
|
|
- gb_tile_moden = (TILE_SPLIT(split_equal_to_row_size));
|
|
|
- break;
|
|
|
- default:
|
|
|
- gb_tile_moden = 0;
|
|
|
- break;
|
|
|
- }
|
|
|
- adev->gfx.config.tile_mode_array[reg_offset] = gb_tile_moden;
|
|
|
- WREG32(mmGB_TILE_MODE0 + reg_offset, 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_8_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_8_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_2) |
|
|
|
- NUM_BANKS(ADDR_SURF_8_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_8_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_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_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_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;
|
|
|
- }
|
|
|
- adev->gfx.config.macrotile_mode_array[reg_offset] = gb_tile_moden;
|
|
|
- WREG32(mmGB_MACROTILE_MODE0 + reg_offset, gb_tile_moden);
|
|
|
- }
|
|
|
+ tile[0] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ TILE_SPLIT(ADDR_SURF_TILE_SPLIT_64B) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
+ tile[1] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ TILE_SPLIT(ADDR_SURF_TILE_SPLIT_128B) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
+ tile[2] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
+ tile[3] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ TILE_SPLIT(ADDR_SURF_TILE_SPLIT_512B) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
|
|
|
+ tile[4] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
|
|
|
+ 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_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
|
|
|
+ TILE_SPLIT(split_equal_to_row_size));
|
|
|
+ tile[7] = (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) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING));
|
|
|
+ tile[10] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
+ tile[11] = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_8));
|
|
|
+ tile[12] = (TILE_SPLIT(split_equal_to_row_size));
|
|
|
+ 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) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
+ tile[15] = (ARRAY_MODE(ARRAY_3D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
+ tile[16] = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_8));
|
|
|
+ tile[17] = (TILE_SPLIT(split_equal_to_row_size));
|
|
|
+ tile[18] = (ARRAY_MODE(ARRAY_1D_TILED_THICK) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
+ tile[19] = (ARRAY_MODE(ARRAY_1D_TILED_THICK) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING));
|
|
|
+ tile[20] = (ARRAY_MODE(ARRAY_2D_TILED_THICK) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
+ tile[21] = (ARRAY_MODE(ARRAY_3D_TILED_THICK) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
+ tile[22] = (ARRAY_MODE(ARRAY_PRT_TILED_THICK) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
+ tile[23] = (TILE_SPLIT(split_equal_to_row_size));
|
|
|
+ tile[24] = (ARRAY_MODE(ARRAY_2D_TILED_THICK) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
+ tile[25] = (ARRAY_MODE(ARRAY_2D_TILED_XTHICK) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
+ tile[26] = (ARRAY_MODE(ARRAY_3D_TILED_XTHICK) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_THICK_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_1));
|
|
|
+ tile[27] = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING));
|
|
|
+ tile[28] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
|
|
|
+ tile[29] = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
|
|
|
+ PIPE_CONFIG(ADDR_SURF_P2) |
|
|
|
+ MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
|
|
|
+ SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_8));
|
|
|
+ tile[30] = (TILE_SPLIT(split_equal_to_row_size));
|
|
|
+
|
|
|
+ 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_8_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_8_BANK));
|
|
|
+ macrotile[2] = (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_8_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_8_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_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_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_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(mmGB_TILE_MODE0 + reg_offset, tile[reg_offset]);
|
|
|
+ for (reg_offset = 0; reg_offset < num_secondary_tile_mode_states; reg_offset++)
|
|
|
+ if (reg_offset != 7)
|
|
|
+ WREG32(mmGB_MACROTILE_MODE0 + reg_offset, macrotile[reg_offset]);
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
@@ -1893,45 +1596,31 @@ void gfx_v7_0_select_se_sh(struct amdgpu_device *adev, u32 se_num, u32 sh_num)
|
|
|
*/
|
|
|
static u32 gfx_v7_0_create_bitmask(u32 bit_width)
|
|
|
{
|
|
|
- u32 i, mask = 0;
|
|
|
-
|
|
|
- for (i = 0; i < bit_width; i++) {
|
|
|
- mask <<= 1;
|
|
|
- mask |= 1;
|
|
|
- }
|
|
|
- return mask;
|
|
|
+ return (u32)((1ULL << bit_width) - 1);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * gfx_v7_0_get_rb_disabled - computes the mask of disabled RBs
|
|
|
+ * gfx_v7_0_get_rb_active_bitmap - computes the mask of enabled RBs
|
|
|
*
|
|
|
* @adev: amdgpu_device pointer
|
|
|
- * @max_rb_num: max RBs (render backends) for the asic
|
|
|
- * @se_num: number of SEs (shader engines) for the asic
|
|
|
- * @sh_per_se: number of SH blocks per SE for the asic
|
|
|
*
|
|
|
- * Calculates the bitmask of disabled RBs (CIK).
|
|
|
- * Returns the disabled RB bitmask.
|
|
|
+ * Calculates the bitmask of enabled RBs (CIK).
|
|
|
+ * Returns the enabled RB bitmask.
|
|
|
*/
|
|
|
-static u32 gfx_v7_0_get_rb_disabled(struct amdgpu_device *adev,
|
|
|
- u32 max_rb_num_per_se,
|
|
|
- u32 sh_per_se)
|
|
|
+static u32 gfx_v7_0_get_rb_active_bitmap(struct amdgpu_device *adev)
|
|
|
{
|
|
|
u32 data, mask;
|
|
|
|
|
|
data = RREG32(mmCC_RB_BACKEND_DISABLE);
|
|
|
- if (data & 1)
|
|
|
- data &= CC_RB_BACKEND_DISABLE__BACKEND_DISABLE_MASK;
|
|
|
- else
|
|
|
- data = 0;
|
|
|
-
|
|
|
data |= RREG32(mmGC_USER_RB_BACKEND_DISABLE);
|
|
|
|
|
|
+ data &= CC_RB_BACKEND_DISABLE__BACKEND_DISABLE_MASK;
|
|
|
data >>= GC_USER_RB_BACKEND_DISABLE__BACKEND_DISABLE__SHIFT;
|
|
|
|
|
|
- mask = gfx_v7_0_create_bitmask(max_rb_num_per_se / sh_per_se);
|
|
|
+ mask = gfx_v7_0_create_bitmask(adev->gfx.config.max_backends_per_se /
|
|
|
+ adev->gfx.config.max_sh_per_se);
|
|
|
|
|
|
- return data & mask;
|
|
|
+ return (~data) & mask;
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -1940,73 +1629,31 @@ static u32 gfx_v7_0_get_rb_disabled(struct amdgpu_device *adev,
|
|
|
* @adev: amdgpu_device pointer
|
|
|
* @se_num: number of SEs (shader engines) for the asic
|
|
|
* @sh_per_se: number of SH blocks per SE for the asic
|
|
|
- * @max_rb_num: max RBs (render backends) for the asic
|
|
|
*
|
|
|
* Configures per-SE/SH RB registers (CIK).
|
|
|
*/
|
|
|
-static void gfx_v7_0_setup_rb(struct amdgpu_device *adev,
|
|
|
- u32 se_num, u32 sh_per_se,
|
|
|
- u32 max_rb_num_per_se)
|
|
|
+static void gfx_v7_0_setup_rb(struct amdgpu_device *adev)
|
|
|
{
|
|
|
int i, j;
|
|
|
- u32 data, mask;
|
|
|
- u32 disabled_rbs = 0;
|
|
|
- u32 enabled_rbs = 0;
|
|
|
+ u32 data;
|
|
|
+ u32 active_rbs = 0;
|
|
|
+ u32 rb_bitmap_width_per_sh = adev->gfx.config.max_backends_per_se /
|
|
|
+ adev->gfx.config.max_sh_per_se;
|
|
|
|
|
|
mutex_lock(&adev->grbm_idx_mutex);
|
|
|
- for (i = 0; i < se_num; i++) {
|
|
|
- for (j = 0; j < sh_per_se; j++) {
|
|
|
+ for (i = 0; i < adev->gfx.config.max_shader_engines; i++) {
|
|
|
+ for (j = 0; j < adev->gfx.config.max_sh_per_se; j++) {
|
|
|
gfx_v7_0_select_se_sh(adev, i, j);
|
|
|
- data = gfx_v7_0_get_rb_disabled(adev, max_rb_num_per_se, sh_per_se);
|
|
|
- if (adev->asic_type == CHIP_HAWAII)
|
|
|
- disabled_rbs |= data << ((i * sh_per_se + j) * HAWAII_RB_BITMAP_WIDTH_PER_SH);
|
|
|
- else
|
|
|
- disabled_rbs |= data << ((i * sh_per_se + j) * CIK_RB_BITMAP_WIDTH_PER_SH);
|
|
|
+ data = gfx_v7_0_get_rb_active_bitmap(adev);
|
|
|
+ active_rbs |= data << ((i * adev->gfx.config.max_sh_per_se + j) *
|
|
|
+ rb_bitmap_width_per_sh);
|
|
|
}
|
|
|
}
|
|
|
gfx_v7_0_select_se_sh(adev, 0xffffffff, 0xffffffff);
|
|
|
mutex_unlock(&adev->grbm_idx_mutex);
|
|
|
|
|
|
- mask = 1;
|
|
|
- for (i = 0; i < max_rb_num_per_se * se_num; i++) {
|
|
|
- if (!(disabled_rbs & mask))
|
|
|
- enabled_rbs |= mask;
|
|
|
- mask <<= 1;
|
|
|
- }
|
|
|
-
|
|
|
- adev->gfx.config.backend_enable_mask = enabled_rbs;
|
|
|
-
|
|
|
- mutex_lock(&adev->grbm_idx_mutex);
|
|
|
- for (i = 0; i < se_num; i++) {
|
|
|
- gfx_v7_0_select_se_sh(adev, i, 0xffffffff);
|
|
|
- data = 0;
|
|
|
- for (j = 0; j < sh_per_se; j++) {
|
|
|
- switch (enabled_rbs & 3) {
|
|
|
- case 0:
|
|
|
- if (j == 0)
|
|
|
- data |= (RASTER_CONFIG_RB_MAP_3 <<
|
|
|
- PA_SC_RASTER_CONFIG__PKR_MAP__SHIFT);
|
|
|
- else
|
|
|
- data |= (RASTER_CONFIG_RB_MAP_0 <<
|
|
|
- PA_SC_RASTER_CONFIG__PKR_MAP__SHIFT);
|
|
|
- break;
|
|
|
- case 1:
|
|
|
- data |= (RASTER_CONFIG_RB_MAP_0 << (i * sh_per_se + j) * 2);
|
|
|
- break;
|
|
|
- case 2:
|
|
|
- data |= (RASTER_CONFIG_RB_MAP_3 << (i * sh_per_se + j) * 2);
|
|
|
- break;
|
|
|
- case 3:
|
|
|
- default:
|
|
|
- data |= (RASTER_CONFIG_RB_MAP_2 << (i * sh_per_se + j) * 2);
|
|
|
- break;
|
|
|
- }
|
|
|
- enabled_rbs >>= 2;
|
|
|
- }
|
|
|
- WREG32(mmPA_SC_RASTER_CONFIG, data);
|
|
|
- }
|
|
|
- gfx_v7_0_select_se_sh(adev, 0xffffffff, 0xffffffff);
|
|
|
- mutex_unlock(&adev->grbm_idx_mutex);
|
|
|
+ adev->gfx.config.backend_enable_mask = active_rbs;
|
|
|
+ adev->gfx.config.num_rbs = hweight32(active_rbs);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -2059,192 +1706,23 @@ static void gmc_v7_0_init_compute_vmid(struct amdgpu_device *adev)
|
|
|
*/
|
|
|
static void gfx_v7_0_gpu_init(struct amdgpu_device *adev)
|
|
|
{
|
|
|
- u32 gb_addr_config;
|
|
|
- u32 mc_shared_chmap, mc_arb_ramcfg;
|
|
|
- u32 dimm00_addr_map, dimm01_addr_map, dimm10_addr_map, dimm11_addr_map;
|
|
|
- u32 sh_mem_cfg;
|
|
|
- u32 tmp;
|
|
|
- int i;
|
|
|
-
|
|
|
- switch (adev->asic_type) {
|
|
|
- case CHIP_BONAIRE:
|
|
|
- adev->gfx.config.max_shader_engines = 2;
|
|
|
- adev->gfx.config.max_tile_pipes = 4;
|
|
|
- adev->gfx.config.max_cu_per_sh = 7;
|
|
|
- adev->gfx.config.max_sh_per_se = 1;
|
|
|
- adev->gfx.config.max_backends_per_se = 2;
|
|
|
- adev->gfx.config.max_texture_channel_caches = 4;
|
|
|
- adev->gfx.config.max_gprs = 256;
|
|
|
- adev->gfx.config.max_gs_threads = 32;
|
|
|
- adev->gfx.config.max_hw_contexts = 8;
|
|
|
-
|
|
|
- adev->gfx.config.sc_prim_fifo_size_frontend = 0x20;
|
|
|
- adev->gfx.config.sc_prim_fifo_size_backend = 0x100;
|
|
|
- adev->gfx.config.sc_hiz_tile_fifo_size = 0x30;
|
|
|
- adev->gfx.config.sc_earlyz_tile_fifo_size = 0x130;
|
|
|
- gb_addr_config = BONAIRE_GB_ADDR_CONFIG_GOLDEN;
|
|
|
- break;
|
|
|
- case CHIP_HAWAII:
|
|
|
- adev->gfx.config.max_shader_engines = 4;
|
|
|
- adev->gfx.config.max_tile_pipes = 16;
|
|
|
- adev->gfx.config.max_cu_per_sh = 11;
|
|
|
- adev->gfx.config.max_sh_per_se = 1;
|
|
|
- adev->gfx.config.max_backends_per_se = 4;
|
|
|
- adev->gfx.config.max_texture_channel_caches = 16;
|
|
|
- adev->gfx.config.max_gprs = 256;
|
|
|
- adev->gfx.config.max_gs_threads = 32;
|
|
|
- adev->gfx.config.max_hw_contexts = 8;
|
|
|
-
|
|
|
- adev->gfx.config.sc_prim_fifo_size_frontend = 0x20;
|
|
|
- adev->gfx.config.sc_prim_fifo_size_backend = 0x100;
|
|
|
- adev->gfx.config.sc_hiz_tile_fifo_size = 0x30;
|
|
|
- adev->gfx.config.sc_earlyz_tile_fifo_size = 0x130;
|
|
|
- gb_addr_config = HAWAII_GB_ADDR_CONFIG_GOLDEN;
|
|
|
- break;
|
|
|
- case CHIP_KAVERI:
|
|
|
- adev->gfx.config.max_shader_engines = 1;
|
|
|
- adev->gfx.config.max_tile_pipes = 4;
|
|
|
- if ((adev->pdev->device == 0x1304) ||
|
|
|
- (adev->pdev->device == 0x1305) ||
|
|
|
- (adev->pdev->device == 0x130C) ||
|
|
|
- (adev->pdev->device == 0x130F) ||
|
|
|
- (adev->pdev->device == 0x1310) ||
|
|
|
- (adev->pdev->device == 0x1311) ||
|
|
|
- (adev->pdev->device == 0x131C)) {
|
|
|
- adev->gfx.config.max_cu_per_sh = 8;
|
|
|
- adev->gfx.config.max_backends_per_se = 2;
|
|
|
- } else if ((adev->pdev->device == 0x1309) ||
|
|
|
- (adev->pdev->device == 0x130A) ||
|
|
|
- (adev->pdev->device == 0x130D) ||
|
|
|
- (adev->pdev->device == 0x1313) ||
|
|
|
- (adev->pdev->device == 0x131D)) {
|
|
|
- adev->gfx.config.max_cu_per_sh = 6;
|
|
|
- adev->gfx.config.max_backends_per_se = 2;
|
|
|
- } else if ((adev->pdev->device == 0x1306) ||
|
|
|
- (adev->pdev->device == 0x1307) ||
|
|
|
- (adev->pdev->device == 0x130B) ||
|
|
|
- (adev->pdev->device == 0x130E) ||
|
|
|
- (adev->pdev->device == 0x1315) ||
|
|
|
- (adev->pdev->device == 0x131B)) {
|
|
|
- adev->gfx.config.max_cu_per_sh = 4;
|
|
|
- adev->gfx.config.max_backends_per_se = 1;
|
|
|
- } else {
|
|
|
- adev->gfx.config.max_cu_per_sh = 3;
|
|
|
- adev->gfx.config.max_backends_per_se = 1;
|
|
|
- }
|
|
|
- adev->gfx.config.max_sh_per_se = 1;
|
|
|
- adev->gfx.config.max_texture_channel_caches = 4;
|
|
|
- adev->gfx.config.max_gprs = 256;
|
|
|
- adev->gfx.config.max_gs_threads = 16;
|
|
|
- adev->gfx.config.max_hw_contexts = 8;
|
|
|
-
|
|
|
- adev->gfx.config.sc_prim_fifo_size_frontend = 0x20;
|
|
|
- adev->gfx.config.sc_prim_fifo_size_backend = 0x100;
|
|
|
- adev->gfx.config.sc_hiz_tile_fifo_size = 0x30;
|
|
|
- adev->gfx.config.sc_earlyz_tile_fifo_size = 0x130;
|
|
|
- gb_addr_config = BONAIRE_GB_ADDR_CONFIG_GOLDEN;
|
|
|
- break;
|
|
|
- case CHIP_KABINI:
|
|
|
- case CHIP_MULLINS:
|
|
|
- default:
|
|
|
- adev->gfx.config.max_shader_engines = 1;
|
|
|
- adev->gfx.config.max_tile_pipes = 2;
|
|
|
- adev->gfx.config.max_cu_per_sh = 2;
|
|
|
- adev->gfx.config.max_sh_per_se = 1;
|
|
|
- adev->gfx.config.max_backends_per_se = 1;
|
|
|
- adev->gfx.config.max_texture_channel_caches = 2;
|
|
|
- adev->gfx.config.max_gprs = 256;
|
|
|
- adev->gfx.config.max_gs_threads = 16;
|
|
|
- adev->gfx.config.max_hw_contexts = 8;
|
|
|
-
|
|
|
- adev->gfx.config.sc_prim_fifo_size_frontend = 0x20;
|
|
|
- adev->gfx.config.sc_prim_fifo_size_backend = 0x100;
|
|
|
- adev->gfx.config.sc_hiz_tile_fifo_size = 0x30;
|
|
|
- adev->gfx.config.sc_earlyz_tile_fifo_size = 0x130;
|
|
|
- gb_addr_config = BONAIRE_GB_ADDR_CONFIG_GOLDEN;
|
|
|
- break;
|
|
|
- }
|
|
|
-
|
|
|
- WREG32(mmGRBM_CNTL, (0xff << GRBM_CNTL__READ_TIMEOUT__SHIFT));
|
|
|
-
|
|
|
- mc_shared_chmap = RREG32(mmMC_SHARED_CHMAP);
|
|
|
- adev->gfx.config.mc_arb_ramcfg = RREG32(mmMC_ARB_RAMCFG);
|
|
|
- mc_arb_ramcfg = adev->gfx.config.mc_arb_ramcfg;
|
|
|
-
|
|
|
- adev->gfx.config.num_tile_pipes = adev->gfx.config.max_tile_pipes;
|
|
|
- adev->gfx.config.mem_max_burst_length_bytes = 256;
|
|
|
- if (adev->flags & AMD_IS_APU) {
|
|
|
- /* Get memory bank mapping mode. */
|
|
|
- tmp = RREG32(mmMC_FUS_DRAM0_BANK_ADDR_MAPPING);
|
|
|
- dimm00_addr_map = REG_GET_FIELD(tmp, MC_FUS_DRAM0_BANK_ADDR_MAPPING, DIMM0ADDRMAP);
|
|
|
- dimm01_addr_map = REG_GET_FIELD(tmp, MC_FUS_DRAM0_BANK_ADDR_MAPPING, DIMM1ADDRMAP);
|
|
|
-
|
|
|
- tmp = RREG32(mmMC_FUS_DRAM1_BANK_ADDR_MAPPING);
|
|
|
- dimm10_addr_map = REG_GET_FIELD(tmp, MC_FUS_DRAM1_BANK_ADDR_MAPPING, DIMM0ADDRMAP);
|
|
|
- dimm11_addr_map = REG_GET_FIELD(tmp, MC_FUS_DRAM1_BANK_ADDR_MAPPING, DIMM1ADDRMAP);
|
|
|
-
|
|
|
- /* Validate settings in case only one DIMM installed. */
|
|
|
- if ((dimm00_addr_map == 0) || (dimm00_addr_map == 3) || (dimm00_addr_map == 4) || (dimm00_addr_map > 12))
|
|
|
- dimm00_addr_map = 0;
|
|
|
- if ((dimm01_addr_map == 0) || (dimm01_addr_map == 3) || (dimm01_addr_map == 4) || (dimm01_addr_map > 12))
|
|
|
- dimm01_addr_map = 0;
|
|
|
- if ((dimm10_addr_map == 0) || (dimm10_addr_map == 3) || (dimm10_addr_map == 4) || (dimm10_addr_map > 12))
|
|
|
- dimm10_addr_map = 0;
|
|
|
- if ((dimm11_addr_map == 0) || (dimm11_addr_map == 3) || (dimm11_addr_map == 4) || (dimm11_addr_map > 12))
|
|
|
- dimm11_addr_map = 0;
|
|
|
-
|
|
|
- /* If DIMM Addr map is 8GB, ROW size should be 2KB. Otherwise 1KB. */
|
|
|
- /* If ROW size(DIMM1) != ROW size(DMIMM0), ROW size should be larger one. */
|
|
|
- if ((dimm00_addr_map == 11) || (dimm01_addr_map == 11) || (dimm10_addr_map == 11) || (dimm11_addr_map == 11))
|
|
|
- adev->gfx.config.mem_row_size_in_kb = 2;
|
|
|
- else
|
|
|
- adev->gfx.config.mem_row_size_in_kb = 1;
|
|
|
- } else {
|
|
|
- tmp = (mc_arb_ramcfg & MC_ARB_RAMCFG__NOOFCOLS_MASK) >> MC_ARB_RAMCFG__NOOFCOLS__SHIFT;
|
|
|
- adev->gfx.config.mem_row_size_in_kb = (4 * (1 << (8 + tmp))) / 1024;
|
|
|
- if (adev->gfx.config.mem_row_size_in_kb > 4)
|
|
|
- adev->gfx.config.mem_row_size_in_kb = 4;
|
|
|
- }
|
|
|
- /* XXX use MC settings? */
|
|
|
- adev->gfx.config.shader_engine_tile_size = 32;
|
|
|
- adev->gfx.config.num_gpus = 1;
|
|
|
- adev->gfx.config.multi_gpu_tile_size = 64;
|
|
|
-
|
|
|
- /* fix up row size */
|
|
|
- gb_addr_config &= ~GB_ADDR_CONFIG__ROW_SIZE_MASK;
|
|
|
- switch (adev->gfx.config.mem_row_size_in_kb) {
|
|
|
- case 1:
|
|
|
- default:
|
|
|
- gb_addr_config |= (0 << GB_ADDR_CONFIG__ROW_SIZE__SHIFT);
|
|
|
- break;
|
|
|
- case 2:
|
|
|
- gb_addr_config |= (1 << GB_ADDR_CONFIG__ROW_SIZE__SHIFT);
|
|
|
- break;
|
|
|
- case 4:
|
|
|
- gb_addr_config |= (2 << GB_ADDR_CONFIG__ROW_SIZE__SHIFT);
|
|
|
- break;
|
|
|
- }
|
|
|
- adev->gfx.config.gb_addr_config = gb_addr_config;
|
|
|
+ u32 tmp, sh_mem_cfg;
|
|
|
+ int i;
|
|
|
+
|
|
|
+ WREG32(mmGRBM_CNTL, (0xff << GRBM_CNTL__READ_TIMEOUT__SHIFT));
|
|
|
|
|
|
- WREG32(mmGB_ADDR_CONFIG, gb_addr_config);
|
|
|
- WREG32(mmHDP_ADDR_CONFIG, gb_addr_config);
|
|
|
- WREG32(mmDMIF_ADDR_CALC, gb_addr_config);
|
|
|
- WREG32(mmSDMA0_TILING_CONFIG + SDMA0_REGISTER_OFFSET, gb_addr_config & 0x70);
|
|
|
- WREG32(mmSDMA0_TILING_CONFIG + SDMA1_REGISTER_OFFSET, gb_addr_config & 0x70);
|
|
|
- WREG32(mmUVD_UDEC_ADDR_CONFIG, gb_addr_config);
|
|
|
- WREG32(mmUVD_UDEC_DB_ADDR_CONFIG, gb_addr_config);
|
|
|
- WREG32(mmUVD_UDEC_DBW_ADDR_CONFIG, gb_addr_config);
|
|
|
+ WREG32(mmGB_ADDR_CONFIG, adev->gfx.config.gb_addr_config);
|
|
|
+ WREG32(mmHDP_ADDR_CONFIG, adev->gfx.config.gb_addr_config);
|
|
|
+ WREG32(mmDMIF_ADDR_CALC, adev->gfx.config.gb_addr_config);
|
|
|
|
|
|
gfx_v7_0_tiling_mode_table_init(adev);
|
|
|
|
|
|
- gfx_v7_0_setup_rb(adev, adev->gfx.config.max_shader_engines,
|
|
|
- adev->gfx.config.max_sh_per_se,
|
|
|
- adev->gfx.config.max_backends_per_se);
|
|
|
+ gfx_v7_0_setup_rb(adev);
|
|
|
|
|
|
/* set HW defaults for 3D engine */
|
|
|
WREG32(mmCP_MEQ_THRESHOLDS,
|
|
|
- (0x30 << CP_MEQ_THRESHOLDS__MEQ1_START__SHIFT) |
|
|
|
- (0x60 << CP_MEQ_THRESHOLDS__MEQ2_START__SHIFT));
|
|
|
+ (0x30 << CP_MEQ_THRESHOLDS__MEQ1_START__SHIFT) |
|
|
|
+ (0x60 << CP_MEQ_THRESHOLDS__MEQ2_START__SHIFT));
|
|
|
|
|
|
mutex_lock(&adev->grbm_idx_mutex);
|
|
|
/*
|
|
@@ -2255,7 +1733,7 @@ static void gfx_v7_0_gpu_init(struct amdgpu_device *adev)
|
|
|
|
|
|
/* XXX SH_MEM regs */
|
|
|
/* where to put LDS, scratch, GPUVM in FSA64 space */
|
|
|
- sh_mem_cfg = REG_SET_FIELD(0, SH_MEM_CONFIG, ALIGNMENT_MODE,
|
|
|
+ sh_mem_cfg = REG_SET_FIELD(0, SH_MEM_CONFIG, ALIGNMENT_MODE,
|
|
|
SH_MEM_ALIGNMENT_MODE_UNALIGNED);
|
|
|
|
|
|
mutex_lock(&adev->srbm_mutex);
|
|
@@ -2379,7 +1857,7 @@ static int gfx_v7_0_ring_test_ring(struct amdgpu_ring *ring)
|
|
|
return r;
|
|
|
}
|
|
|
WREG32(scratch, 0xCAFEDEAD);
|
|
|
- r = amdgpu_ring_lock(ring, 3);
|
|
|
+ r = amdgpu_ring_alloc(ring, 3);
|
|
|
if (r) {
|
|
|
DRM_ERROR("amdgpu: cp failed to lock ring %d (%d).\n", ring->idx, r);
|
|
|
amdgpu_gfx_scratch_free(adev, scratch);
|
|
@@ -2388,7 +1866,7 @@ static int gfx_v7_0_ring_test_ring(struct amdgpu_ring *ring)
|
|
|
amdgpu_ring_write(ring, PACKET3(PACKET3_SET_UCONFIG_REG, 1));
|
|
|
amdgpu_ring_write(ring, (scratch - PACKET3_SET_UCONFIG_REG_START));
|
|
|
amdgpu_ring_write(ring, 0xDEADBEEF);
|
|
|
- amdgpu_ring_unlock_commit(ring);
|
|
|
+ amdgpu_ring_commit(ring);
|
|
|
|
|
|
for (i = 0; i < adev->usec_timeout; i++) {
|
|
|
tmp = RREG32(scratch);
|
|
@@ -2446,6 +1924,25 @@ static void gfx_v7_0_ring_emit_hdp_flush(struct amdgpu_ring *ring)
|
|
|
amdgpu_ring_write(ring, 0x20); /* poll interval */
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * gfx_v7_0_ring_emit_hdp_invalidate - emit an hdp invalidate on the cp
|
|
|
+ *
|
|
|
+ * @adev: amdgpu_device pointer
|
|
|
+ * @ridx: amdgpu ring index
|
|
|
+ *
|
|
|
+ * Emits an hdp invalidate on the cp.
|
|
|
+ */
|
|
|
+static void gfx_v7_0_ring_emit_hdp_invalidate(struct amdgpu_ring *ring)
|
|
|
+{
|
|
|
+ amdgpu_ring_write(ring, PACKET3(PACKET3_WRITE_DATA, 3));
|
|
|
+ amdgpu_ring_write(ring, (WRITE_DATA_ENGINE_SEL(0) |
|
|
|
+ WRITE_DATA_DST_SEL(0) |
|
|
|
+ WR_CONFIRM));
|
|
|
+ amdgpu_ring_write(ring, mmHDP_DEBUG0);
|
|
|
+ amdgpu_ring_write(ring, 0);
|
|
|
+ amdgpu_ring_write(ring, 1);
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
* gfx_v7_0_ring_emit_fence_gfx - emit a fence on the gfx ring
|
|
|
*
|
|
@@ -2516,36 +2013,6 @@ static void gfx_v7_0_ring_emit_fence_compute(struct amdgpu_ring *ring,
|
|
|
amdgpu_ring_write(ring, upper_32_bits(seq));
|
|
|
}
|
|
|
|
|
|
-/**
|
|
|
- * gfx_v7_0_ring_emit_semaphore - emit a semaphore on the CP ring
|
|
|
- *
|
|
|
- * @ring: amdgpu ring buffer object
|
|
|
- * @semaphore: amdgpu semaphore object
|
|
|
- * @emit_wait: Is this a sempahore wait?
|
|
|
- *
|
|
|
- * Emits a semaphore signal/wait packet to the CP ring and prevents the PFP
|
|
|
- * from running ahead of semaphore waits.
|
|
|
- */
|
|
|
-static bool gfx_v7_0_ring_emit_semaphore(struct amdgpu_ring *ring,
|
|
|
- struct amdgpu_semaphore *semaphore,
|
|
|
- bool emit_wait)
|
|
|
-{
|
|
|
- uint64_t addr = semaphore->gpu_addr;
|
|
|
- unsigned sel = emit_wait ? PACKET3_SEM_SEL_WAIT : PACKET3_SEM_SEL_SIGNAL;
|
|
|
-
|
|
|
- amdgpu_ring_write(ring, PACKET3(PACKET3_MEM_SEMAPHORE, 1));
|
|
|
- amdgpu_ring_write(ring, addr & 0xffffffff);
|
|
|
- amdgpu_ring_write(ring, (upper_32_bits(addr) & 0xffff) | sel);
|
|
|
-
|
|
|
- if (emit_wait && (ring->type == AMDGPU_RING_TYPE_GFX)) {
|
|
|
- /* Prevent the PFP from running ahead of the semaphore wait */
|
|
|
- amdgpu_ring_write(ring, PACKET3(PACKET3_PFP_SYNC_ME, 0));
|
|
|
- amdgpu_ring_write(ring, 0x0);
|
|
|
- }
|
|
|
-
|
|
|
- return true;
|
|
|
-}
|
|
|
-
|
|
|
/*
|
|
|
* IB stuff
|
|
|
*/
|
|
@@ -2593,8 +2060,7 @@ static void gfx_v7_0_ring_emit_ib_gfx(struct amdgpu_ring *ring,
|
|
|
else
|
|
|
header = PACKET3(PACKET3_INDIRECT_BUFFER, 2);
|
|
|
|
|
|
- control |= ib->length_dw |
|
|
|
- (ib->vm ? (ib->vm->ids[ring->idx].id << 24) : 0);
|
|
|
+ control |= ib->length_dw | (ib->vm_id << 24);
|
|
|
|
|
|
amdgpu_ring_write(ring, header);
|
|
|
amdgpu_ring_write(ring,
|
|
@@ -2622,8 +2088,7 @@ static void gfx_v7_0_ring_emit_ib_compute(struct amdgpu_ring *ring,
|
|
|
|
|
|
header = PACKET3(PACKET3_INDIRECT_BUFFER, 2);
|
|
|
|
|
|
- control |= ib->length_dw |
|
|
|
- (ib->vm ? (ib->vm->ids[ring->idx].id << 24) : 0);
|
|
|
+ control |= ib->length_dw | (ib->vm_id << 24);
|
|
|
|
|
|
amdgpu_ring_write(ring, header);
|
|
|
amdgpu_ring_write(ring,
|
|
@@ -2661,7 +2126,7 @@ static int gfx_v7_0_ring_test_ib(struct amdgpu_ring *ring)
|
|
|
}
|
|
|
WREG32(scratch, 0xCAFEDEAD);
|
|
|
memset(&ib, 0, sizeof(ib));
|
|
|
- r = amdgpu_ib_get(ring, NULL, 256, &ib);
|
|
|
+ r = amdgpu_ib_get(adev, NULL, 256, &ib);
|
|
|
if (r) {
|
|
|
DRM_ERROR("amdgpu: failed to get ib (%d).\n", r);
|
|
|
goto err1;
|
|
@@ -2671,9 +2136,7 @@ static int gfx_v7_0_ring_test_ib(struct amdgpu_ring *ring)
|
|
|
ib.ptr[2] = 0xDEADBEEF;
|
|
|
ib.length_dw = 3;
|
|
|
|
|
|
- r = amdgpu_sched_ib_submit_kernel_helper(adev, ring, &ib, 1, NULL,
|
|
|
- AMDGPU_FENCE_OWNER_UNDEFINED,
|
|
|
- &f);
|
|
|
+ r = amdgpu_ib_schedule(ring, 1, &ib, NULL, &f);
|
|
|
if (r)
|
|
|
goto err2;
|
|
|
|
|
@@ -2700,7 +2163,8 @@ static int gfx_v7_0_ring_test_ib(struct amdgpu_ring *ring)
|
|
|
|
|
|
err2:
|
|
|
fence_put(f);
|
|
|
- amdgpu_ib_free(adev, &ib);
|
|
|
+ amdgpu_ib_free(adev, &ib, NULL);
|
|
|
+ fence_put(f);
|
|
|
err1:
|
|
|
amdgpu_gfx_scratch_free(adev, scratch);
|
|
|
return r;
|
|
@@ -2842,7 +2306,7 @@ static int gfx_v7_0_cp_gfx_start(struct amdgpu_device *adev)
|
|
|
|
|
|
gfx_v7_0_cp_gfx_enable(adev, true);
|
|
|
|
|
|
- r = amdgpu_ring_lock(ring, gfx_v7_0_get_csb_size(adev) + 8);
|
|
|
+ r = amdgpu_ring_alloc(ring, gfx_v7_0_get_csb_size(adev) + 8);
|
|
|
if (r) {
|
|
|
DRM_ERROR("amdgpu: cp failed to lock ring (%d).\n", r);
|
|
|
return r;
|
|
@@ -2911,7 +2375,7 @@ static int gfx_v7_0_cp_gfx_start(struct amdgpu_device *adev)
|
|
|
amdgpu_ring_write(ring, 0x0000000e); /* VGT_VERTEX_REUSE_BLOCK_CNTL */
|
|
|
amdgpu_ring_write(ring, 0x00000010); /* VGT_OUT_DEALLOC_CNTL */
|
|
|
|
|
|
- amdgpu_ring_unlock_commit(ring);
|
|
|
+ amdgpu_ring_commit(ring);
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
@@ -2989,21 +2453,14 @@ static int gfx_v7_0_cp_gfx_resume(struct amdgpu_device *adev)
|
|
|
|
|
|
static u32 gfx_v7_0_ring_get_rptr_gfx(struct amdgpu_ring *ring)
|
|
|
{
|
|
|
- u32 rptr;
|
|
|
-
|
|
|
- rptr = ring->adev->wb.wb[ring->rptr_offs];
|
|
|
-
|
|
|
- return rptr;
|
|
|
+ return ring->adev->wb.wb[ring->rptr_offs];
|
|
|
}
|
|
|
|
|
|
static u32 gfx_v7_0_ring_get_wptr_gfx(struct amdgpu_ring *ring)
|
|
|
{
|
|
|
struct amdgpu_device *adev = ring->adev;
|
|
|
- u32 wptr;
|
|
|
-
|
|
|
- wptr = RREG32(mmCP_RB0_WPTR);
|
|
|
|
|
|
- return wptr;
|
|
|
+ return RREG32(mmCP_RB0_WPTR);
|
|
|
}
|
|
|
|
|
|
static void gfx_v7_0_ring_set_wptr_gfx(struct amdgpu_ring *ring)
|
|
@@ -3016,21 +2473,13 @@ static void gfx_v7_0_ring_set_wptr_gfx(struct amdgpu_ring *ring)
|
|
|
|
|
|
static u32 gfx_v7_0_ring_get_rptr_compute(struct amdgpu_ring *ring)
|
|
|
{
|
|
|
- u32 rptr;
|
|
|
-
|
|
|
- rptr = ring->adev->wb.wb[ring->rptr_offs];
|
|
|
-
|
|
|
- return rptr;
|
|
|
+ return ring->adev->wb.wb[ring->rptr_offs];
|
|
|
}
|
|
|
|
|
|
static u32 gfx_v7_0_ring_get_wptr_compute(struct amdgpu_ring *ring)
|
|
|
{
|
|
|
- u32 wptr;
|
|
|
-
|
|
|
/* XXX check if swapping is necessary on BE */
|
|
|
- wptr = ring->adev->wb.wb[ring->wptr_offs];
|
|
|
-
|
|
|
- return wptr;
|
|
|
+ return ring->adev->wb.wb[ring->wptr_offs];
|
|
|
}
|
|
|
|
|
|
static void gfx_v7_0_ring_set_wptr_compute(struct amdgpu_ring *ring)
|
|
@@ -3125,21 +2574,6 @@ static int gfx_v7_0_cp_compute_load_microcode(struct amdgpu_device *adev)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-/**
|
|
|
- * gfx_v7_0_cp_compute_start - start the compute queues
|
|
|
- *
|
|
|
- * @adev: amdgpu_device pointer
|
|
|
- *
|
|
|
- * Enable the compute queues.
|
|
|
- * Returns 0 for success, error for failure.
|
|
|
- */
|
|
|
-static int gfx_v7_0_cp_compute_start(struct amdgpu_device *adev)
|
|
|
-{
|
|
|
- gfx_v7_0_cp_compute_enable(adev, true);
|
|
|
-
|
|
|
- return 0;
|
|
|
-}
|
|
|
-
|
|
|
/**
|
|
|
* gfx_v7_0_cp_compute_fini - stop the compute queues
|
|
|
*
|
|
@@ -3330,9 +2764,7 @@ static int gfx_v7_0_cp_compute_resume(struct amdgpu_device *adev)
|
|
|
u32 *buf;
|
|
|
struct bonaire_mqd *mqd;
|
|
|
|
|
|
- r = gfx_v7_0_cp_compute_start(adev);
|
|
|
- if (r)
|
|
|
- return r;
|
|
|
+ gfx_v7_0_cp_compute_enable(adev, true);
|
|
|
|
|
|
/* fix up chicken bits */
|
|
|
tmp = RREG32(mmCP_CPF_DEBUG);
|
|
@@ -3610,6 +3042,26 @@ static int gfx_v7_0_cp_resume(struct amdgpu_device *adev)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * gfx_v7_0_ring_emit_vm_flush - cik vm flush using the CP
|
|
|
+ *
|
|
|
+ * @ring: the ring to emmit the commands to
|
|
|
+ *
|
|
|
+ * Sync the command pipeline with the PFP. E.g. wait for everything
|
|
|
+ * to be completed.
|
|
|
+ */
|
|
|
+static void gfx_v7_0_ring_emit_pipeline_sync(struct amdgpu_ring *ring)
|
|
|
+{
|
|
|
+ int usepfp = (ring->type == AMDGPU_RING_TYPE_GFX);
|
|
|
+ if (usepfp) {
|
|
|
+ /* synce CE with ME to prevent CE fetch CEIB before context switch done */
|
|
|
+ amdgpu_ring_write(ring, PACKET3(PACKET3_SWITCH_BUFFER, 0));
|
|
|
+ amdgpu_ring_write(ring, 0);
|
|
|
+ amdgpu_ring_write(ring, PACKET3(PACKET3_SWITCH_BUFFER, 0));
|
|
|
+ amdgpu_ring_write(ring, 0);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
/*
|
|
|
* vm
|
|
|
* VMID 0 is the physical GPU addresses as used by the kernel.
|
|
@@ -3641,14 +3093,6 @@ static void gfx_v7_0_ring_emit_vm_flush(struct amdgpu_ring *ring,
|
|
|
amdgpu_ring_write(ring, 0xffffffff);
|
|
|
amdgpu_ring_write(ring, 4); /* poll interval */
|
|
|
|
|
|
- if (usepfp) {
|
|
|
- /* synce CE with ME to prevent CE fetch CEIB before context switch done */
|
|
|
- amdgpu_ring_write(ring, PACKET3(PACKET3_SWITCH_BUFFER, 0));
|
|
|
- amdgpu_ring_write(ring, 0);
|
|
|
- amdgpu_ring_write(ring, PACKET3(PACKET3_SWITCH_BUFFER, 0));
|
|
|
- amdgpu_ring_write(ring, 0);
|
|
|
- }
|
|
|
-
|
|
|
amdgpu_ring_write(ring, PACKET3(PACKET3_WRITE_DATA, 3));
|
|
|
amdgpu_ring_write(ring, (WRITE_DATA_ENGINE_SEL(usepfp) |
|
|
|
WRITE_DATA_DST_SEL(0)));
|
|
@@ -4408,28 +3852,19 @@ static void gfx_v7_0_enable_gfx_cgpg(struct amdgpu_device *adev,
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-static u32 gfx_v7_0_get_cu_active_bitmap(struct amdgpu_device *adev,
|
|
|
- u32 se, u32 sh)
|
|
|
+static u32 gfx_v7_0_get_cu_active_bitmap(struct amdgpu_device *adev)
|
|
|
{
|
|
|
- u32 mask = 0, tmp, tmp1;
|
|
|
- int i;
|
|
|
-
|
|
|
- gfx_v7_0_select_se_sh(adev, se, sh);
|
|
|
- tmp = RREG32(mmCC_GC_SHADER_ARRAY_CONFIG);
|
|
|
- tmp1 = RREG32(mmGC_USER_SHADER_ARRAY_CONFIG);
|
|
|
- gfx_v7_0_select_se_sh(adev, 0xffffffff, 0xffffffff);
|
|
|
+ u32 data, mask;
|
|
|
|
|
|
- tmp &= 0xffff0000;
|
|
|
+ data = RREG32(mmCC_GC_SHADER_ARRAY_CONFIG);
|
|
|
+ data |= RREG32(mmGC_USER_SHADER_ARRAY_CONFIG);
|
|
|
|
|
|
- tmp |= tmp1;
|
|
|
- tmp >>= 16;
|
|
|
+ data &= CC_GC_SHADER_ARRAY_CONFIG__INACTIVE_CUS_MASK;
|
|
|
+ data >>= CC_GC_SHADER_ARRAY_CONFIG__INACTIVE_CUS__SHIFT;
|
|
|
|
|
|
- for (i = 0; i < adev->gfx.config.max_cu_per_sh; i ++) {
|
|
|
- mask <<= 1;
|
|
|
- mask |= 1;
|
|
|
- }
|
|
|
+ mask = gfx_v7_0_create_bitmask(adev->gfx.config.max_cu_per_sh);
|
|
|
|
|
|
- return (~tmp) & mask;
|
|
|
+ return (~data) & mask;
|
|
|
}
|
|
|
|
|
|
static void gfx_v7_0_init_ao_cu_mask(struct amdgpu_device *adev)
|
|
@@ -4767,6 +4202,172 @@ static int gfx_v7_0_late_init(void *handle)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+static void gfx_v7_0_gpu_early_init(struct amdgpu_device *adev)
|
|
|
+{
|
|
|
+ u32 gb_addr_config;
|
|
|
+ u32 mc_shared_chmap, mc_arb_ramcfg;
|
|
|
+ u32 dimm00_addr_map, dimm01_addr_map, dimm10_addr_map, dimm11_addr_map;
|
|
|
+ u32 tmp;
|
|
|
+
|
|
|
+ switch (adev->asic_type) {
|
|
|
+ case CHIP_BONAIRE:
|
|
|
+ adev->gfx.config.max_shader_engines = 2;
|
|
|
+ adev->gfx.config.max_tile_pipes = 4;
|
|
|
+ adev->gfx.config.max_cu_per_sh = 7;
|
|
|
+ adev->gfx.config.max_sh_per_se = 1;
|
|
|
+ adev->gfx.config.max_backends_per_se = 2;
|
|
|
+ adev->gfx.config.max_texture_channel_caches = 4;
|
|
|
+ adev->gfx.config.max_gprs = 256;
|
|
|
+ adev->gfx.config.max_gs_threads = 32;
|
|
|
+ adev->gfx.config.max_hw_contexts = 8;
|
|
|
+
|
|
|
+ adev->gfx.config.sc_prim_fifo_size_frontend = 0x20;
|
|
|
+ adev->gfx.config.sc_prim_fifo_size_backend = 0x100;
|
|
|
+ adev->gfx.config.sc_hiz_tile_fifo_size = 0x30;
|
|
|
+ adev->gfx.config.sc_earlyz_tile_fifo_size = 0x130;
|
|
|
+ gb_addr_config = BONAIRE_GB_ADDR_CONFIG_GOLDEN;
|
|
|
+ break;
|
|
|
+ case CHIP_HAWAII:
|
|
|
+ adev->gfx.config.max_shader_engines = 4;
|
|
|
+ adev->gfx.config.max_tile_pipes = 16;
|
|
|
+ adev->gfx.config.max_cu_per_sh = 11;
|
|
|
+ adev->gfx.config.max_sh_per_se = 1;
|
|
|
+ adev->gfx.config.max_backends_per_se = 4;
|
|
|
+ adev->gfx.config.max_texture_channel_caches = 16;
|
|
|
+ adev->gfx.config.max_gprs = 256;
|
|
|
+ adev->gfx.config.max_gs_threads = 32;
|
|
|
+ adev->gfx.config.max_hw_contexts = 8;
|
|
|
+
|
|
|
+ adev->gfx.config.sc_prim_fifo_size_frontend = 0x20;
|
|
|
+ adev->gfx.config.sc_prim_fifo_size_backend = 0x100;
|
|
|
+ adev->gfx.config.sc_hiz_tile_fifo_size = 0x30;
|
|
|
+ adev->gfx.config.sc_earlyz_tile_fifo_size = 0x130;
|
|
|
+ gb_addr_config = HAWAII_GB_ADDR_CONFIG_GOLDEN;
|
|
|
+ break;
|
|
|
+ case CHIP_KAVERI:
|
|
|
+ adev->gfx.config.max_shader_engines = 1;
|
|
|
+ adev->gfx.config.max_tile_pipes = 4;
|
|
|
+ if ((adev->pdev->device == 0x1304) ||
|
|
|
+ (adev->pdev->device == 0x1305) ||
|
|
|
+ (adev->pdev->device == 0x130C) ||
|
|
|
+ (adev->pdev->device == 0x130F) ||
|
|
|
+ (adev->pdev->device == 0x1310) ||
|
|
|
+ (adev->pdev->device == 0x1311) ||
|
|
|
+ (adev->pdev->device == 0x131C)) {
|
|
|
+ adev->gfx.config.max_cu_per_sh = 8;
|
|
|
+ adev->gfx.config.max_backends_per_se = 2;
|
|
|
+ } else if ((adev->pdev->device == 0x1309) ||
|
|
|
+ (adev->pdev->device == 0x130A) ||
|
|
|
+ (adev->pdev->device == 0x130D) ||
|
|
|
+ (adev->pdev->device == 0x1313) ||
|
|
|
+ (adev->pdev->device == 0x131D)) {
|
|
|
+ adev->gfx.config.max_cu_per_sh = 6;
|
|
|
+ adev->gfx.config.max_backends_per_se = 2;
|
|
|
+ } else if ((adev->pdev->device == 0x1306) ||
|
|
|
+ (adev->pdev->device == 0x1307) ||
|
|
|
+ (adev->pdev->device == 0x130B) ||
|
|
|
+ (adev->pdev->device == 0x130E) ||
|
|
|
+ (adev->pdev->device == 0x1315) ||
|
|
|
+ (adev->pdev->device == 0x131B)) {
|
|
|
+ adev->gfx.config.max_cu_per_sh = 4;
|
|
|
+ adev->gfx.config.max_backends_per_se = 1;
|
|
|
+ } else {
|
|
|
+ adev->gfx.config.max_cu_per_sh = 3;
|
|
|
+ adev->gfx.config.max_backends_per_se = 1;
|
|
|
+ }
|
|
|
+ adev->gfx.config.max_sh_per_se = 1;
|
|
|
+ adev->gfx.config.max_texture_channel_caches = 4;
|
|
|
+ adev->gfx.config.max_gprs = 256;
|
|
|
+ adev->gfx.config.max_gs_threads = 16;
|
|
|
+ adev->gfx.config.max_hw_contexts = 8;
|
|
|
+
|
|
|
+ adev->gfx.config.sc_prim_fifo_size_frontend = 0x20;
|
|
|
+ adev->gfx.config.sc_prim_fifo_size_backend = 0x100;
|
|
|
+ adev->gfx.config.sc_hiz_tile_fifo_size = 0x30;
|
|
|
+ adev->gfx.config.sc_earlyz_tile_fifo_size = 0x130;
|
|
|
+ gb_addr_config = BONAIRE_GB_ADDR_CONFIG_GOLDEN;
|
|
|
+ break;
|
|
|
+ case CHIP_KABINI:
|
|
|
+ case CHIP_MULLINS:
|
|
|
+ default:
|
|
|
+ adev->gfx.config.max_shader_engines = 1;
|
|
|
+ adev->gfx.config.max_tile_pipes = 2;
|
|
|
+ adev->gfx.config.max_cu_per_sh = 2;
|
|
|
+ adev->gfx.config.max_sh_per_se = 1;
|
|
|
+ adev->gfx.config.max_backends_per_se = 1;
|
|
|
+ adev->gfx.config.max_texture_channel_caches = 2;
|
|
|
+ adev->gfx.config.max_gprs = 256;
|
|
|
+ adev->gfx.config.max_gs_threads = 16;
|
|
|
+ adev->gfx.config.max_hw_contexts = 8;
|
|
|
+
|
|
|
+ adev->gfx.config.sc_prim_fifo_size_frontend = 0x20;
|
|
|
+ adev->gfx.config.sc_prim_fifo_size_backend = 0x100;
|
|
|
+ adev->gfx.config.sc_hiz_tile_fifo_size = 0x30;
|
|
|
+ adev->gfx.config.sc_earlyz_tile_fifo_size = 0x130;
|
|
|
+ gb_addr_config = BONAIRE_GB_ADDR_CONFIG_GOLDEN;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ mc_shared_chmap = RREG32(mmMC_SHARED_CHMAP);
|
|
|
+ adev->gfx.config.mc_arb_ramcfg = RREG32(mmMC_ARB_RAMCFG);
|
|
|
+ mc_arb_ramcfg = adev->gfx.config.mc_arb_ramcfg;
|
|
|
+
|
|
|
+ adev->gfx.config.num_tile_pipes = adev->gfx.config.max_tile_pipes;
|
|
|
+ adev->gfx.config.mem_max_burst_length_bytes = 256;
|
|
|
+ if (adev->flags & AMD_IS_APU) {
|
|
|
+ /* Get memory bank mapping mode. */
|
|
|
+ tmp = RREG32(mmMC_FUS_DRAM0_BANK_ADDR_MAPPING);
|
|
|
+ dimm00_addr_map = REG_GET_FIELD(tmp, MC_FUS_DRAM0_BANK_ADDR_MAPPING, DIMM0ADDRMAP);
|
|
|
+ dimm01_addr_map = REG_GET_FIELD(tmp, MC_FUS_DRAM0_BANK_ADDR_MAPPING, DIMM1ADDRMAP);
|
|
|
+
|
|
|
+ tmp = RREG32(mmMC_FUS_DRAM1_BANK_ADDR_MAPPING);
|
|
|
+ dimm10_addr_map = REG_GET_FIELD(tmp, MC_FUS_DRAM1_BANK_ADDR_MAPPING, DIMM0ADDRMAP);
|
|
|
+ dimm11_addr_map = REG_GET_FIELD(tmp, MC_FUS_DRAM1_BANK_ADDR_MAPPING, DIMM1ADDRMAP);
|
|
|
+
|
|
|
+ /* Validate settings in case only one DIMM installed. */
|
|
|
+ if ((dimm00_addr_map == 0) || (dimm00_addr_map == 3) || (dimm00_addr_map == 4) || (dimm00_addr_map > 12))
|
|
|
+ dimm00_addr_map = 0;
|
|
|
+ if ((dimm01_addr_map == 0) || (dimm01_addr_map == 3) || (dimm01_addr_map == 4) || (dimm01_addr_map > 12))
|
|
|
+ dimm01_addr_map = 0;
|
|
|
+ if ((dimm10_addr_map == 0) || (dimm10_addr_map == 3) || (dimm10_addr_map == 4) || (dimm10_addr_map > 12))
|
|
|
+ dimm10_addr_map = 0;
|
|
|
+ if ((dimm11_addr_map == 0) || (dimm11_addr_map == 3) || (dimm11_addr_map == 4) || (dimm11_addr_map > 12))
|
|
|
+ dimm11_addr_map = 0;
|
|
|
+
|
|
|
+ /* If DIMM Addr map is 8GB, ROW size should be 2KB. Otherwise 1KB. */
|
|
|
+ /* If ROW size(DIMM1) != ROW size(DMIMM0), ROW size should be larger one. */
|
|
|
+ if ((dimm00_addr_map == 11) || (dimm01_addr_map == 11) || (dimm10_addr_map == 11) || (dimm11_addr_map == 11))
|
|
|
+ adev->gfx.config.mem_row_size_in_kb = 2;
|
|
|
+ else
|
|
|
+ adev->gfx.config.mem_row_size_in_kb = 1;
|
|
|
+ } else {
|
|
|
+ tmp = (mc_arb_ramcfg & MC_ARB_RAMCFG__NOOFCOLS_MASK) >> MC_ARB_RAMCFG__NOOFCOLS__SHIFT;
|
|
|
+ adev->gfx.config.mem_row_size_in_kb = (4 * (1 << (8 + tmp))) / 1024;
|
|
|
+ if (adev->gfx.config.mem_row_size_in_kb > 4)
|
|
|
+ adev->gfx.config.mem_row_size_in_kb = 4;
|
|
|
+ }
|
|
|
+ /* XXX use MC settings? */
|
|
|
+ adev->gfx.config.shader_engine_tile_size = 32;
|
|
|
+ adev->gfx.config.num_gpus = 1;
|
|
|
+ adev->gfx.config.multi_gpu_tile_size = 64;
|
|
|
+
|
|
|
+ /* fix up row size */
|
|
|
+ gb_addr_config &= ~GB_ADDR_CONFIG__ROW_SIZE_MASK;
|
|
|
+ switch (adev->gfx.config.mem_row_size_in_kb) {
|
|
|
+ case 1:
|
|
|
+ default:
|
|
|
+ gb_addr_config |= (0 << GB_ADDR_CONFIG__ROW_SIZE__SHIFT);
|
|
|
+ break;
|
|
|
+ case 2:
|
|
|
+ gb_addr_config |= (1 << GB_ADDR_CONFIG__ROW_SIZE__SHIFT);
|
|
|
+ break;
|
|
|
+ case 4:
|
|
|
+ gb_addr_config |= (2 << GB_ADDR_CONFIG__ROW_SIZE__SHIFT);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ adev->gfx.config.gb_addr_config = gb_addr_config;
|
|
|
+}
|
|
|
+
|
|
|
static int gfx_v7_0_sw_init(void *handle)
|
|
|
{
|
|
|
struct amdgpu_ring *ring;
|
|
@@ -4870,6 +4471,10 @@ static int gfx_v7_0_sw_init(void *handle)
|
|
|
if (r)
|
|
|
return r;
|
|
|
|
|
|
+ adev->gfx.ce_ram_size = 0x8000;
|
|
|
+
|
|
|
+ gfx_v7_0_gpu_early_init(adev);
|
|
|
+
|
|
|
return r;
|
|
|
}
|
|
|
|
|
@@ -4910,8 +4515,6 @@ static int gfx_v7_0_hw_init(void *handle)
|
|
|
if (r)
|
|
|
return r;
|
|
|
|
|
|
- adev->gfx.ce_ram_size = 0x8000;
|
|
|
-
|
|
|
return r;
|
|
|
}
|
|
|
|
|
@@ -5028,16 +4631,6 @@ static void gfx_v7_0_print_status(void *handle)
|
|
|
RREG32(mmHDP_ADDR_CONFIG));
|
|
|
dev_info(adev->dev, " DMIF_ADDR_CALC=0x%08X\n",
|
|
|
RREG32(mmDMIF_ADDR_CALC));
|
|
|
- dev_info(adev->dev, " SDMA0_TILING_CONFIG=0x%08X\n",
|
|
|
- RREG32(mmSDMA0_TILING_CONFIG + SDMA0_REGISTER_OFFSET));
|
|
|
- dev_info(adev->dev, " SDMA1_TILING_CONFIG=0x%08X\n",
|
|
|
- RREG32(mmSDMA0_TILING_CONFIG + SDMA1_REGISTER_OFFSET));
|
|
|
- dev_info(adev->dev, " UVD_UDEC_ADDR_CONFIG=0x%08X\n",
|
|
|
- RREG32(mmUVD_UDEC_ADDR_CONFIG));
|
|
|
- dev_info(adev->dev, " UVD_UDEC_DB_ADDR_CONFIG=0x%08X\n",
|
|
|
- RREG32(mmUVD_UDEC_DB_ADDR_CONFIG));
|
|
|
- dev_info(adev->dev, " UVD_UDEC_DBW_ADDR_CONFIG=0x%08X\n",
|
|
|
- RREG32(mmUVD_UDEC_DBW_ADDR_CONFIG));
|
|
|
|
|
|
dev_info(adev->dev, " CP_MEQ_THRESHOLDS=0x%08X\n",
|
|
|
RREG32(mmCP_MEQ_THRESHOLDS));
|
|
@@ -5580,13 +5173,15 @@ static const struct amdgpu_ring_funcs gfx_v7_0_ring_funcs_gfx = {
|
|
|
.parse_cs = NULL,
|
|
|
.emit_ib = gfx_v7_0_ring_emit_ib_gfx,
|
|
|
.emit_fence = gfx_v7_0_ring_emit_fence_gfx,
|
|
|
- .emit_semaphore = gfx_v7_0_ring_emit_semaphore,
|
|
|
+ .emit_pipeline_sync = gfx_v7_0_ring_emit_pipeline_sync,
|
|
|
.emit_vm_flush = gfx_v7_0_ring_emit_vm_flush,
|
|
|
.emit_gds_switch = gfx_v7_0_ring_emit_gds_switch,
|
|
|
.emit_hdp_flush = gfx_v7_0_ring_emit_hdp_flush,
|
|
|
+ .emit_hdp_invalidate = gfx_v7_0_ring_emit_hdp_invalidate,
|
|
|
.test_ring = gfx_v7_0_ring_test_ring,
|
|
|
.test_ib = gfx_v7_0_ring_test_ib,
|
|
|
.insert_nop = amdgpu_ring_insert_nop,
|
|
|
+ .pad_ib = amdgpu_ring_generic_pad_ib,
|
|
|
};
|
|
|
|
|
|
static const struct amdgpu_ring_funcs gfx_v7_0_ring_funcs_compute = {
|
|
@@ -5596,13 +5191,15 @@ static const struct amdgpu_ring_funcs gfx_v7_0_ring_funcs_compute = {
|
|
|
.parse_cs = NULL,
|
|
|
.emit_ib = gfx_v7_0_ring_emit_ib_compute,
|
|
|
.emit_fence = gfx_v7_0_ring_emit_fence_compute,
|
|
|
- .emit_semaphore = gfx_v7_0_ring_emit_semaphore,
|
|
|
+ .emit_pipeline_sync = gfx_v7_0_ring_emit_pipeline_sync,
|
|
|
.emit_vm_flush = gfx_v7_0_ring_emit_vm_flush,
|
|
|
.emit_gds_switch = gfx_v7_0_ring_emit_gds_switch,
|
|
|
.emit_hdp_flush = gfx_v7_0_ring_emit_hdp_flush,
|
|
|
+ .emit_hdp_invalidate = gfx_v7_0_ring_emit_hdp_invalidate,
|
|
|
.test_ring = gfx_v7_0_ring_test_ring,
|
|
|
.test_ib = gfx_v7_0_ring_test_ib,
|
|
|
.insert_nop = amdgpu_ring_insert_nop,
|
|
|
+ .pad_ib = amdgpu_ring_generic_pad_ib,
|
|
|
};
|
|
|
|
|
|
static void gfx_v7_0_set_ring_funcs(struct amdgpu_device *adev)
|
|
@@ -5672,7 +5269,7 @@ static void gfx_v7_0_set_gds_init(struct amdgpu_device *adev)
|
|
|
|
|
|
|
|
|
int gfx_v7_0_get_cu_info(struct amdgpu_device *adev,
|
|
|
- struct amdgpu_cu_info *cu_info)
|
|
|
+ struct amdgpu_cu_info *cu_info)
|
|
|
{
|
|
|
int i, j, k, counter, active_cu_number = 0;
|
|
|
u32 mask, bitmap, ao_bitmap, ao_cu_mask = 0;
|
|
@@ -5680,16 +5277,19 @@ int gfx_v7_0_get_cu_info(struct amdgpu_device *adev,
|
|
|
if (!adev || !cu_info)
|
|
|
return -EINVAL;
|
|
|
|
|
|
+ memset(cu_info, 0, sizeof(*cu_info));
|
|
|
+
|
|
|
mutex_lock(&adev->grbm_idx_mutex);
|
|
|
for (i = 0; i < adev->gfx.config.max_shader_engines; i++) {
|
|
|
for (j = 0; j < adev->gfx.config.max_sh_per_se; j++) {
|
|
|
mask = 1;
|
|
|
ao_bitmap = 0;
|
|
|
counter = 0;
|
|
|
- bitmap = gfx_v7_0_get_cu_active_bitmap(adev, i, j);
|
|
|
+ gfx_v7_0_select_se_sh(adev, i, j);
|
|
|
+ bitmap = gfx_v7_0_get_cu_active_bitmap(adev);
|
|
|
cu_info->bitmap[i][j] = bitmap;
|
|
|
|
|
|
- for (k = 0; k < adev->gfx.config.max_cu_per_sh; k ++) {
|
|
|
+ for (k = 0; k < 16; k ++) {
|
|
|
if (bitmap & mask) {
|
|
|
if (counter < 2)
|
|
|
ao_bitmap |= mask;
|
|
@@ -5701,9 +5301,11 @@ int gfx_v7_0_get_cu_info(struct amdgpu_device *adev,
|
|
|
ao_cu_mask |= (ao_bitmap << (i * 16 + j * 8));
|
|
|
}
|
|
|
}
|
|
|
+ gfx_v7_0_select_se_sh(adev, 0xffffffff, 0xffffffff);
|
|
|
+ mutex_unlock(&adev->grbm_idx_mutex);
|
|
|
|
|
|
cu_info->number = active_cu_number;
|
|
|
cu_info->ao_cu_mask = ao_cu_mask;
|
|
|
- mutex_unlock(&adev->grbm_idx_mutex);
|
|
|
+
|
|
|
return 0;
|
|
|
}
|