winsys/amdgpu: set num_tile_pipes, pipe_interleave_bytes for GFX9
authorMarek Olšák <marek.olsak@amd.com>
Thu, 12 Jan 2017 01:47:05 +0000 (02:47 +0100)
committerMarek Olšák <marek.olsak@amd.com>
Thu, 30 Mar 2017 12:44:33 +0000 (14:44 +0200)
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c

index 4becd2a6818542dbce245db673b14888a0d5b0ea..d1d63272c9c5059759c9c55abcab5eb4e8184939 100644 (file)
@@ -40,6 +40,8 @@
 #include <stdio.h>
 #include <sys/stat.h>
 #include "amd/common/amdgpu_id.h"
+#include "amd/common/sid.h"
+#include "amd/common/gfx9d.h"
 
 #define CIK_TILE_MODE_COLOR_2D                 14
 
@@ -352,8 +354,15 @@ static bool do_winsys_init(struct amdgpu_winsys *ws, int fd)
    ws->info.num_render_backends = ws->amdinfo.rb_pipes;
    ws->info.clock_crystal_freq = ws->amdinfo.gpu_counter_freq;
    ws->info.tcc_cache_line_size = 64; /* TC L2 line size on GCN */
-   ws->info.num_tile_pipes = cik_get_num_tile_pipes(&ws->amdinfo);
-   ws->info.pipe_interleave_bytes = 256 << ((ws->amdinfo.gb_addr_cfg >> 4) & 0x7);
+   if (ws->info.chip_class == GFX9) {
+      ws->info.num_tile_pipes = 1 << G_0098F8_NUM_PIPES(ws->amdinfo.gb_addr_cfg);
+      ws->info.pipe_interleave_bytes =
+         256 << G_0098F8_PIPE_INTERLEAVE_SIZE_GFX9(ws->amdinfo.gb_addr_cfg);
+   } else {
+      ws->info.num_tile_pipes = cik_get_num_tile_pipes(&ws->amdinfo);
+      ws->info.pipe_interleave_bytes =
+         256 << G_0098F8_PIPE_INTERLEAVE_SIZE_GFX6(ws->amdinfo.gb_addr_cfg);
+   }
    ws->info.has_virtual_memory = true;
    ws->info.has_sdma = dma.available_rings != 0;