From: Jerome Glisse <j.glisse@gmail.com>
To: alexdeucher@gmail.com
Cc: Alex Deucher <alexander.deucher@amd.com>,
dri-devel@lists.freedesktop.org
Subject: Re: [PATCH 17/48] drm/radeon/kms: add gpu init support for SI
Date: Tue, 20 Mar 2012 19:16:02 -0400 [thread overview]
Message-ID: <1332285362.1654.1.camel@localhost.localdomain> (raw)
In-Reply-To: <1332278322-12875-18-git-send-email-alexdeucher@gmail.com>
On Tue, 2012-03-20 at 17:18 -0400, alexdeucher@gmail.com wrote:
> From: Alex Deucher <alexander.deucher@amd.com>
>
> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
> ---
> drivers/gpu/drm/radeon/radeon.h | 32 ++
> drivers/gpu/drm/radeon/si.c | 1005 +++++++++++++++++++++++++++++++++++++++
> drivers/gpu/drm/radeon/sid.h | 201 ++++++++
> 3 files changed, 1238 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h
> index c75ccc7..972f167 100644
> --- a/drivers/gpu/drm/radeon/radeon.h
> +++ b/drivers/gpu/drm/radeon/radeon.h
> @@ -1370,6 +1370,37 @@ struct cayman_asic {
> struct r100_gpu_lockup lockup;
> };
>
> +struct si_asic {
> + unsigned max_shader_engines;
> + unsigned max_pipes_per_simd;
> + unsigned max_tile_pipes;
> + unsigned max_simds_per_se;
> + unsigned max_backends_per_se;
> + unsigned max_texture_channel_caches;
> + unsigned max_gprs;
> + unsigned max_gs_threads;
> + unsigned max_hw_contexts;
> + unsigned sc_prim_fifo_size_frontend;
> + unsigned sc_prim_fifo_size_backend;
> + unsigned sc_hiz_tile_fifo_size;
> + unsigned sc_earlyz_tile_fifo_size;
> +
> + unsigned num_shader_engines;
> + unsigned num_tile_pipes;
> + unsigned num_backends_per_se;
> + unsigned backend_disable_mask_per_asic;
> + unsigned backend_map;
> + unsigned num_texture_channel_caches;
> + unsigned mem_max_burst_length_bytes;
> + unsigned mem_row_size_in_kb;
> + unsigned shader_engine_tile_size;
> + unsigned num_gpus;
> + unsigned multi_gpu_tile_size;
> +
> + unsigned tile_config;
> + struct r100_gpu_lockup lockup;
> +};
> +
> union radeon_asic_config {
> struct r300_asic r300;
> struct r100_asic r100;
> @@ -1377,6 +1408,7 @@ union radeon_asic_config {
> struct rv770_asic rv770;
> struct evergreen_asic evergreen;
> struct cayman_asic cayman;
> + struct si_asic si;
> };
>
> /*
> diff --git a/drivers/gpu/drm/radeon/si.c b/drivers/gpu/drm/radeon/si.c
> index 3e91429..dd9e7d3 100644
> --- a/drivers/gpu/drm/radeon/si.c
> +++ b/drivers/gpu/drm/radeon/si.c
> @@ -28,6 +28,8 @@
> #include "sid.h"
> #include "atom.h"
>
> +extern void evergreen_fix_pci_max_read_req_size(struct radeon_device *rdev);
> +
> /* get temperature in millidegrees */
> int si_get_temp(struct radeon_device *rdev)
> {
> @@ -503,3 +505,1006 @@ void dce6_bandwidth_update(struct radeon_device *rdev)
> }
> }
>
> +/*
> + * Core functions
> + */
> +static u32 si_get_tile_pipe_to_backend_map(struct radeon_device *rdev,
> + u32 num_tile_pipes,
> + u32 num_backends_per_asic,
> + u32 *backend_disable_mask_per_asic,
> + u32 num_shader_engines)
> +{
> + u32 backend_map = 0;
> + u32 enabled_backends_mask = 0;
> + u32 enabled_backends_count = 0;
> + u32 num_backends_per_se;
> + u32 cur_pipe;
> + u32 swizzle_pipe[SI_MAX_PIPES];
> + u32 cur_backend = 0;
> + u32 i;
> + bool force_no_swizzle;
> +
> + /* force legal values */
> + if (num_tile_pipes < 1)
> + num_tile_pipes = 1;
> + if (num_tile_pipes > rdev->config.si.max_tile_pipes)
> + num_tile_pipes = rdev->config.si.max_tile_pipes;
> + if (num_shader_engines < 1)
> + num_shader_engines = 1;
> + if (num_shader_engines > rdev->config.si.max_shader_engines)
> + num_shader_engines = rdev->config.si.max_shader_engines;
> + if (num_backends_per_asic < num_shader_engines)
> + num_backends_per_asic = num_shader_engines;
> + if (num_backends_per_asic > (rdev->config.si.max_backends_per_se * num_shader_engines))
> + num_backends_per_asic = rdev->config.si.max_backends_per_se * num_shader_engines;
> +
> + /* make sure we have the same number of backends per se */
> + num_backends_per_asic = ALIGN(num_backends_per_asic, num_shader_engines);
> + /* set up the number of backends per se */
> + num_backends_per_se = num_backends_per_asic / num_shader_engines;
> + if (num_backends_per_se > rdev->config.si.max_backends_per_se) {
> + num_backends_per_se = rdev->config.si.max_backends_per_se;
> + num_backends_per_asic = num_backends_per_se * num_shader_engines;
> + }
> +
> + /* create enable mask and count for enabled backends */
> + for (i = 0; i < SI_MAX_BACKENDS; ++i) {
> + if (((*backend_disable_mask_per_asic >> i) & 1) == 0) {
> + enabled_backends_mask |= (1 << i);
> + ++enabled_backends_count;
> + }
> + if (enabled_backends_count == num_backends_per_asic)
> + break;
> + }
> +
> + /* force the backends mask to match the current number of backends */
> + if (enabled_backends_count != num_backends_per_asic) {
> + u32 this_backend_enabled;
> + u32 shader_engine;
> + u32 backend_per_se;
> +
> + enabled_backends_mask = 0;
> + enabled_backends_count = 0;
> + *backend_disable_mask_per_asic = SI_MAX_BACKENDS_MASK;
> + for (i = 0; i < SI_MAX_BACKENDS; ++i) {
> + /* calc the current se */
> + shader_engine = i / rdev->config.si.max_backends_per_se;
> + /* calc the backend per se */
> + backend_per_se = i % rdev->config.si.max_backends_per_se;
> + /* default to not enabled */
> + this_backend_enabled = 0;
> + if ((shader_engine < num_shader_engines) &&
> + (backend_per_se < num_backends_per_se))
> + this_backend_enabled = 1;
> + if (this_backend_enabled) {
> + enabled_backends_mask |= (1 << i);
> + *backend_disable_mask_per_asic &= ~(1 << i);
> + ++enabled_backends_count;
> + }
> + }
> + }
> +
> +
> + memset((uint8_t *)&swizzle_pipe[0], 0, sizeof(u32) * SI_MAX_PIPES);
> + switch (rdev->family) {
> + case CHIP_TAHITI:
> + case CHIP_PITCAIRN:
> + case CHIP_VERDE:
> + force_no_swizzle = true;
> + break;
> + default:
> + force_no_swizzle = false;
> + break;
> + }
> + if (force_no_swizzle) {
> + bool last_backend_enabled = false;
> +
> + force_no_swizzle = false;
> + for (i = 0; i < SI_MAX_BACKENDS; ++i) {
> + if (((enabled_backends_mask >> i) & 1) == 1) {
> + if (last_backend_enabled)
> + force_no_swizzle = true;
> + last_backend_enabled = true;
> + } else
> + last_backend_enabled = false;
> + }
> + }
> +
> + switch (num_tile_pipes) {
> + case 1:
> + case 3:
> + case 5:
> + case 7:
> + DRM_ERROR("odd number of pipes!\n");
> + break;
> + case 2:
> + swizzle_pipe[0] = 0;
> + swizzle_pipe[1] = 1;
> + break;
> + case 4:
> + if (force_no_swizzle) {
> + swizzle_pipe[0] = 0;
> + swizzle_pipe[1] = 1;
> + swizzle_pipe[2] = 2;
> + swizzle_pipe[3] = 3;
> + } else {
> + swizzle_pipe[0] = 0;
> + swizzle_pipe[1] = 2;
> + swizzle_pipe[2] = 1;
> + swizzle_pipe[3] = 3;
> + }
> + break;
> + case 6:
> + if (force_no_swizzle) {
> + swizzle_pipe[0] = 0;
> + swizzle_pipe[1] = 1;
> + swizzle_pipe[2] = 2;
> + swizzle_pipe[3] = 3;
> + swizzle_pipe[4] = 4;
> + swizzle_pipe[5] = 5;
> + } else {
> + swizzle_pipe[0] = 0;
> + swizzle_pipe[1] = 2;
> + swizzle_pipe[2] = 4;
> + swizzle_pipe[3] = 1;
> + swizzle_pipe[4] = 3;
> + swizzle_pipe[5] = 5;
> + }
> + break;
> + case 8:
> + if (force_no_swizzle) {
> + swizzle_pipe[0] = 0;
> + swizzle_pipe[1] = 1;
> + swizzle_pipe[2] = 2;
> + swizzle_pipe[3] = 3;
> + swizzle_pipe[4] = 4;
> + swizzle_pipe[5] = 5;
> + swizzle_pipe[6] = 6;
> + swizzle_pipe[7] = 7;
> + } else {
> + swizzle_pipe[0] = 0;
> + swizzle_pipe[1] = 2;
> + swizzle_pipe[2] = 4;
> + swizzle_pipe[3] = 6;
> + swizzle_pipe[4] = 1;
> + swizzle_pipe[5] = 3;
> + swizzle_pipe[6] = 5;
> + swizzle_pipe[7] = 7;
> + }
> + break;
> + }
> +
> + for (cur_pipe = 0; cur_pipe < num_tile_pipes; ++cur_pipe) {
> + while (((1 << cur_backend) & enabled_backends_mask) == 0)
> + cur_backend = (cur_backend + 1) % SI_MAX_BACKENDS;
> +
> + backend_map |= (((cur_backend & 0xf) << (swizzle_pipe[cur_pipe] * 4)));
> +
> + cur_backend = (cur_backend + 1) % SI_MAX_BACKENDS;
> + }
> +
> + return backend_map;
> +}
> +
> +static u32 si_get_disable_mask_per_asic(struct radeon_device *rdev,
> + u32 disable_mask_per_se,
> + u32 max_disable_mask_per_se,
> + u32 num_shader_engines)
> +{
> + u32 disable_field_width_per_se = r600_count_pipe_bits(disable_mask_per_se);
> + u32 disable_mask_per_asic = disable_mask_per_se & max_disable_mask_per_se;
> +
> + if (num_shader_engines == 1)
> + return disable_mask_per_asic;
> + else if (num_shader_engines == 2)
> + return disable_mask_per_asic | (disable_mask_per_asic << disable_field_width_per_se);
> + else
> + return 0xffffffff;
> +}
> +
> +static void si_tiling_mode_table_init(struct radeon_device *rdev)
> +{
> + const u32 num_tile_mode_states = 32;
> + u32 reg_offset, gb_tile_moden, split_equal_to_row_size;
> +
> + switch (rdev->config.si.mem_row_size_in_kb) {
> + case 1:
> + split_equal_to_row_size = ADDR_SURF_TILE_SPLIT_1KB;
> + break;
> + case 2:
> + default:
> + split_equal_to_row_size = ADDR_SURF_TILE_SPLIT_2KB;
> + break;
> + case 4:
> + split_equal_to_row_size = ADDR_SURF_TILE_SPLIT_4KB;
> + break;
> + }
> +
> + if ((rdev->family == CHIP_TAHITI) ||
> + (rdev->family == CHIP_PITCAIRN)) {
> + for (reg_offset = 0; reg_offset < num_tile_mode_states; reg_offset++) {
> + switch (reg_offset) {
Why not just build an static array with proper value ? Would avoid ugly
switch in a loop.
> + case 0: /* non-AA compressed depth or any compressed stencil */
> + gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> + MICRO_TILE_MODE(ADDR_SURF_DEPTH_MICRO_TILING) |
> + PIPE_CONFIG(ADDR_SURF_P8_32x32_8x16) |
> + TILE_SPLIT(ADDR_SURF_TILE_SPLIT_64B) |
> + NUM_BANKS(ADDR_SURF_16_BANK) |
> + BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
> + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2));
> + break;
> + case 1: /* 2xAA/4xAA compressed depth only */
> + gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> + MICRO_TILE_MODE(ADDR_SURF_DEPTH_MICRO_TILING) |
> + PIPE_CONFIG(ADDR_SURF_P8_32x32_8x16) |
> + TILE_SPLIT(ADDR_SURF_TILE_SPLIT_128B) |
> + NUM_BANKS(ADDR_SURF_16_BANK) |
> + BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
> + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2));
> + break;
> + case 2: /* 8xAA compressed depth only */
> + gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> + MICRO_TILE_MODE(ADDR_SURF_DEPTH_MICRO_TILING) |
> + PIPE_CONFIG(ADDR_SURF_P8_32x32_8x16) |
> + TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B) |
> + NUM_BANKS(ADDR_SURF_16_BANK) |
> + BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
> + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2));
> + break;
> + case 3: /* 2xAA/4xAA compressed depth with stencil (for depth buffer) */
> + gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> + MICRO_TILE_MODE(ADDR_SURF_DEPTH_MICRO_TILING) |
> + PIPE_CONFIG(ADDR_SURF_P8_32x32_8x16) |
> + TILE_SPLIT(ADDR_SURF_TILE_SPLIT_128B) |
> + NUM_BANKS(ADDR_SURF_16_BANK) |
> + BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
> + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2));
> + break;
> + case 4: /* Maps w/ a dimension less than the 2D macro-tile dimensions (for mipmapped depth textures) */
> + gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
> + MICRO_TILE_MODE(ADDR_SURF_DEPTH_MICRO_TILING) |
> + PIPE_CONFIG(ADDR_SURF_P8_32x32_8x16) |
> + TILE_SPLIT(ADDR_SURF_TILE_SPLIT_64B) |
> + NUM_BANKS(ADDR_SURF_16_BANK) |
> + BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
> + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2));
> + break;
> + case 5: /* Uncompressed 16bpp depth - and stencil buffer allocated with it */
> + gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> + MICRO_TILE_MODE(ADDR_SURF_DEPTH_MICRO_TILING) |
> + PIPE_CONFIG(ADDR_SURF_P8_32x32_8x16) |
> + TILE_SPLIT(split_equal_to_row_size) |
> + NUM_BANKS(ADDR_SURF_16_BANK) |
> + BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
> + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2));
> + break;
> + case 6: /* Uncompressed 32bpp depth - and stencil buffer allocated with it */
> + gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> + MICRO_TILE_MODE(ADDR_SURF_DEPTH_MICRO_TILING) |
> + PIPE_CONFIG(ADDR_SURF_P8_32x32_8x16) |
> + TILE_SPLIT(split_equal_to_row_size) |
> + NUM_BANKS(ADDR_SURF_16_BANK) |
> + BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
> + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1));
> + break;
> + case 7: /* Uncompressed 8bpp stencil without depth (drivers typically do not use) */
> + gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> + MICRO_TILE_MODE(ADDR_SURF_DEPTH_MICRO_TILING) |
> + PIPE_CONFIG(ADDR_SURF_P8_32x32_8x16) |
> + TILE_SPLIT(split_equal_to_row_size) |
> + NUM_BANKS(ADDR_SURF_16_BANK) |
> + BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
> + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2));
> + break;
> + case 8: /* 1D and 1D Array Surfaces */
> + gb_tile_moden = (ARRAY_MODE(ARRAY_LINEAR_ALIGNED) |
> + MICRO_TILE_MODE(ADDR_SURF_DISPLAY_MICRO_TILING) |
> + PIPE_CONFIG(ADDR_SURF_P8_32x32_8x16) |
> + TILE_SPLIT(ADDR_SURF_TILE_SPLIT_64B) |
> + NUM_BANKS(ADDR_SURF_16_BANK) |
> + BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
> + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2));
> + break;
> + case 9: /* Displayable maps. */
> + gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
> + MICRO_TILE_MODE(ADDR_SURF_DISPLAY_MICRO_TILING) |
> + PIPE_CONFIG(ADDR_SURF_P8_32x32_8x16) |
> + TILE_SPLIT(ADDR_SURF_TILE_SPLIT_64B) |
> + NUM_BANKS(ADDR_SURF_16_BANK) |
> + BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
> + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2));
> + break;
> + case 10: /* Display 8bpp. */
> + gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> + MICRO_TILE_MODE(ADDR_SURF_DISPLAY_MICRO_TILING) |
> + PIPE_CONFIG(ADDR_SURF_P8_32x32_8x16) |
> + TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B) |
> + NUM_BANKS(ADDR_SURF_16_BANK) |
> + BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
> + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2));
> + break;
> + case 11: /* Display 16bpp. */
> + gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> + MICRO_TILE_MODE(ADDR_SURF_DISPLAY_MICRO_TILING) |
> + PIPE_CONFIG(ADDR_SURF_P8_32x32_8x16) |
> + TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B) |
> + NUM_BANKS(ADDR_SURF_16_BANK) |
> + BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
> + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2));
> + break;
> + case 12: /* Display 32bpp. */
> + gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> + MICRO_TILE_MODE(ADDR_SURF_DISPLAY_MICRO_TILING) |
> + PIPE_CONFIG(ADDR_SURF_P8_32x32_8x16) |
> + TILE_SPLIT(ADDR_SURF_TILE_SPLIT_512B) |
> + NUM_BANKS(ADDR_SURF_16_BANK) |
> + BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
> + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1));
> + break;
> + case 13: /* Thin. */
> + gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
> + MICRO_TILE_MODE(ADDR_SURF_THIN_MICRO_TILING) |
> + PIPE_CONFIG(ADDR_SURF_P8_32x32_8x16) |
> + TILE_SPLIT(ADDR_SURF_TILE_SPLIT_64B) |
> + NUM_BANKS(ADDR_SURF_16_BANK) |
> + BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
> + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2));
> + break;
> + case 14: /* Thin 8 bpp. */
> + gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> + MICRO_TILE_MODE(ADDR_SURF_THIN_MICRO_TILING) |
> + PIPE_CONFIG(ADDR_SURF_P8_32x32_8x16) |
> + TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B) |
> + NUM_BANKS(ADDR_SURF_16_BANK) |
> + BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
> + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1));
> + break;
> + case 15: /* Thin 16 bpp. */
> + gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> + MICRO_TILE_MODE(ADDR_SURF_THIN_MICRO_TILING) |
> + PIPE_CONFIG(ADDR_SURF_P8_32x32_8x16) |
> + TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B) |
> + NUM_BANKS(ADDR_SURF_16_BANK) |
> + BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
> + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1));
> + break;
> + case 16: /* Thin 32 bpp. */
> + gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> + MICRO_TILE_MODE(ADDR_SURF_THIN_MICRO_TILING) |
> + PIPE_CONFIG(ADDR_SURF_P8_32x32_8x16) |
> + TILE_SPLIT(ADDR_SURF_TILE_SPLIT_512B) |
> + NUM_BANKS(ADDR_SURF_16_BANK) |
> + BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
> + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1));
> + break;
> + case 17: /* Thin 64 bpp. */
> + gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> + MICRO_TILE_MODE(ADDR_SURF_THIN_MICRO_TILING) |
> + PIPE_CONFIG(ADDR_SURF_P8_32x32_8x16) |
> + TILE_SPLIT(split_equal_to_row_size) |
> + NUM_BANKS(ADDR_SURF_16_BANK) |
> + BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
> + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1));
> + break;
> + case 21: /* 8 bpp PRT. */
> + gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> + MICRO_TILE_MODE(ADDR_SURF_THIN_MICRO_TILING) |
> + PIPE_CONFIG(ADDR_SURF_P8_32x32_8x16) |
> + TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B) |
> + NUM_BANKS(ADDR_SURF_16_BANK) |
> + BANK_WIDTH(ADDR_SURF_BANK_WIDTH_2) |
> + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
> + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2));
> + break;
> + case 22: /* 16 bpp PRT */
> + gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> + MICRO_TILE_MODE(ADDR_SURF_THIN_MICRO_TILING) |
> + PIPE_CONFIG(ADDR_SURF_P8_32x32_8x16) |
> + TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B) |
> + NUM_BANKS(ADDR_SURF_16_BANK) |
> + BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
> + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4));
> + break;
> + case 23: /* 32 bpp PRT */
> + gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> + MICRO_TILE_MODE(ADDR_SURF_THIN_MICRO_TILING) |
> + PIPE_CONFIG(ADDR_SURF_P8_32x32_8x16) |
> + TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B) |
> + NUM_BANKS(ADDR_SURF_16_BANK) |
> + BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
> + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2));
> + break;
> + case 24: /* 64 bpp PRT */
> + gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> + MICRO_TILE_MODE(ADDR_SURF_THIN_MICRO_TILING) |
> + PIPE_CONFIG(ADDR_SURF_P8_32x32_8x16) |
> + TILE_SPLIT(ADDR_SURF_TILE_SPLIT_512B) |
> + NUM_BANKS(ADDR_SURF_16_BANK) |
> + BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
> + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2));
> + break;
> + case 25: /* 128 bpp PRT */
> + gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> + MICRO_TILE_MODE(ADDR_SURF_THIN_MICRO_TILING) |
> + PIPE_CONFIG(ADDR_SURF_P8_32x32_8x16) |
> + TILE_SPLIT(ADDR_SURF_TILE_SPLIT_1KB) |
> + NUM_BANKS(ADDR_SURF_8_BANK) |
> + BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
> + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1));
> + break;
> + default:
> + gb_tile_moden = 0;
> + break;
> + }
> + WREG32(GB_TILE_MODE0 + (reg_offset * 4), gb_tile_moden);
> + }
> + } else if (rdev->family == CHIP_VERDE) {
> + for (reg_offset = 0; reg_offset < num_tile_mode_states; reg_offset++) {
> + switch (reg_offset) {
> + case 0: /* non-AA compressed depth or any compressed stencil */
> + gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> + MICRO_TILE_MODE(ADDR_SURF_DEPTH_MICRO_TILING) |
> + PIPE_CONFIG(ADDR_SURF_P4_8x16) |
> + TILE_SPLIT(ADDR_SURF_TILE_SPLIT_64B) |
> + NUM_BANKS(ADDR_SURF_16_BANK) |
> + BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
> + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4));
> + break;
> + case 1: /* 2xAA/4xAA compressed depth only */
> + gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> + MICRO_TILE_MODE(ADDR_SURF_DEPTH_MICRO_TILING) |
> + PIPE_CONFIG(ADDR_SURF_P4_8x16) |
> + TILE_SPLIT(ADDR_SURF_TILE_SPLIT_128B) |
> + NUM_BANKS(ADDR_SURF_16_BANK) |
> + BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
> + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4));
> + break;
> + case 2: /* 8xAA compressed depth only */
> + gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> + MICRO_TILE_MODE(ADDR_SURF_DEPTH_MICRO_TILING) |
> + PIPE_CONFIG(ADDR_SURF_P4_8x16) |
> + TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B) |
> + NUM_BANKS(ADDR_SURF_16_BANK) |
> + BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
> + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4));
> + break;
> + case 3: /* 2xAA/4xAA compressed depth with stencil (for depth buffer) */
> + gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> + MICRO_TILE_MODE(ADDR_SURF_DEPTH_MICRO_TILING) |
> + PIPE_CONFIG(ADDR_SURF_P4_8x16) |
> + TILE_SPLIT(ADDR_SURF_TILE_SPLIT_128B) |
> + NUM_BANKS(ADDR_SURF_16_BANK) |
> + BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
> + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4));
> + break;
> + case 4: /* Maps w/ a dimension less than the 2D macro-tile dimensions (for mipmapped depth textures) */
> + gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
> + MICRO_TILE_MODE(ADDR_SURF_DEPTH_MICRO_TILING) |
> + PIPE_CONFIG(ADDR_SURF_P4_8x16) |
> + TILE_SPLIT(ADDR_SURF_TILE_SPLIT_64B) |
> + NUM_BANKS(ADDR_SURF_16_BANK) |
> + BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
> + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2));
> + break;
> + case 5: /* Uncompressed 16bpp depth - and stencil buffer allocated with it */
> + gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> + MICRO_TILE_MODE(ADDR_SURF_DEPTH_MICRO_TILING) |
> + PIPE_CONFIG(ADDR_SURF_P4_8x16) |
> + TILE_SPLIT(split_equal_to_row_size) |
> + NUM_BANKS(ADDR_SURF_16_BANK) |
> + BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
> + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2));
> + break;
> + case 6: /* Uncompressed 32bpp depth - and stencil buffer allocated with it */
> + gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> + MICRO_TILE_MODE(ADDR_SURF_DEPTH_MICRO_TILING) |
> + PIPE_CONFIG(ADDR_SURF_P4_8x16) |
> + TILE_SPLIT(split_equal_to_row_size) |
> + NUM_BANKS(ADDR_SURF_16_BANK) |
> + BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
> + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2));
> + break;
> + case 7: /* Uncompressed 8bpp stencil without depth (drivers typically do not use) */
> + gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> + MICRO_TILE_MODE(ADDR_SURF_DEPTH_MICRO_TILING) |
> + PIPE_CONFIG(ADDR_SURF_P4_8x16) |
> + TILE_SPLIT(split_equal_to_row_size) |
> + NUM_BANKS(ADDR_SURF_16_BANK) |
> + BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
> + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4));
> + break;
> + case 8: /* 1D and 1D Array Surfaces */
> + gb_tile_moden = (ARRAY_MODE(ARRAY_LINEAR_ALIGNED) |
> + MICRO_TILE_MODE(ADDR_SURF_DISPLAY_MICRO_TILING) |
> + PIPE_CONFIG(ADDR_SURF_P4_8x16) |
> + TILE_SPLIT(ADDR_SURF_TILE_SPLIT_64B) |
> + NUM_BANKS(ADDR_SURF_16_BANK) |
> + BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
> + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2));
> + break;
> + case 9: /* Displayable maps. */
> + gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
> + MICRO_TILE_MODE(ADDR_SURF_DISPLAY_MICRO_TILING) |
> + PIPE_CONFIG(ADDR_SURF_P4_8x16) |
> + TILE_SPLIT(ADDR_SURF_TILE_SPLIT_64B) |
> + NUM_BANKS(ADDR_SURF_16_BANK) |
> + BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
> + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2));
> + break;
> + case 10: /* Display 8bpp. */
> + gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> + MICRO_TILE_MODE(ADDR_SURF_DISPLAY_MICRO_TILING) |
> + PIPE_CONFIG(ADDR_SURF_P4_8x16) |
> + TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B) |
> + NUM_BANKS(ADDR_SURF_16_BANK) |
> + BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
> + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4));
> + break;
> + case 11: /* Display 16bpp. */
> + gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> + MICRO_TILE_MODE(ADDR_SURF_DISPLAY_MICRO_TILING) |
> + PIPE_CONFIG(ADDR_SURF_P4_8x16) |
> + TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B) |
> + NUM_BANKS(ADDR_SURF_16_BANK) |
> + BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
> + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2));
> + break;
> + case 12: /* Display 32bpp. */
> + gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> + MICRO_TILE_MODE(ADDR_SURF_DISPLAY_MICRO_TILING) |
> + PIPE_CONFIG(ADDR_SURF_P4_8x16) |
> + TILE_SPLIT(ADDR_SURF_TILE_SPLIT_512B) |
> + NUM_BANKS(ADDR_SURF_16_BANK) |
> + BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
> + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2));
> + break;
> + case 13: /* Thin. */
> + gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
> + MICRO_TILE_MODE(ADDR_SURF_THIN_MICRO_TILING) |
> + PIPE_CONFIG(ADDR_SURF_P4_8x16) |
> + TILE_SPLIT(ADDR_SURF_TILE_SPLIT_64B) |
> + NUM_BANKS(ADDR_SURF_16_BANK) |
> + BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
> + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2));
> + break;
> + case 14: /* Thin 8 bpp. */
> + gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> + MICRO_TILE_MODE(ADDR_SURF_THIN_MICRO_TILING) |
> + PIPE_CONFIG(ADDR_SURF_P4_8x16) |
> + TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B) |
> + NUM_BANKS(ADDR_SURF_16_BANK) |
> + BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
> + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2));
> + break;
> + case 15: /* Thin 16 bpp. */
> + gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> + MICRO_TILE_MODE(ADDR_SURF_THIN_MICRO_TILING) |
> + PIPE_CONFIG(ADDR_SURF_P4_8x16) |
> + TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B) |
> + NUM_BANKS(ADDR_SURF_16_BANK) |
> + BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
> + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2));
> + break;
> + case 16: /* Thin 32 bpp. */
> + gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> + MICRO_TILE_MODE(ADDR_SURF_THIN_MICRO_TILING) |
> + PIPE_CONFIG(ADDR_SURF_P4_8x16) |
> + TILE_SPLIT(ADDR_SURF_TILE_SPLIT_512B) |
> + NUM_BANKS(ADDR_SURF_16_BANK) |
> + BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
> + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2));
> + break;
> + case 17: /* Thin 64 bpp. */
> + gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> + MICRO_TILE_MODE(ADDR_SURF_THIN_MICRO_TILING) |
> + PIPE_CONFIG(ADDR_SURF_P4_8x16) |
> + TILE_SPLIT(split_equal_to_row_size) |
> + NUM_BANKS(ADDR_SURF_16_BANK) |
> + BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
> + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2));
> + break;
> + case 21: /* 8 bpp PRT. */
> + gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> + MICRO_TILE_MODE(ADDR_SURF_THIN_MICRO_TILING) |
> + PIPE_CONFIG(ADDR_SURF_P8_32x32_8x16) |
> + TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B) |
> + NUM_BANKS(ADDR_SURF_16_BANK) |
> + BANK_WIDTH(ADDR_SURF_BANK_WIDTH_2) |
> + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
> + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2));
> + break;
> + case 22: /* 16 bpp PRT */
> + gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> + MICRO_TILE_MODE(ADDR_SURF_THIN_MICRO_TILING) |
> + PIPE_CONFIG(ADDR_SURF_P8_32x32_8x16) |
> + TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B) |
> + NUM_BANKS(ADDR_SURF_16_BANK) |
> + BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
> + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4));
> + break;
> + case 23: /* 32 bpp PRT */
> + gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> + MICRO_TILE_MODE(ADDR_SURF_THIN_MICRO_TILING) |
> + PIPE_CONFIG(ADDR_SURF_P8_32x32_8x16) |
> + TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B) |
> + NUM_BANKS(ADDR_SURF_16_BANK) |
> + BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
> + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2));
> + break;
> + case 24: /* 64 bpp PRT */
> + gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> + MICRO_TILE_MODE(ADDR_SURF_THIN_MICRO_TILING) |
> + PIPE_CONFIG(ADDR_SURF_P8_32x32_8x16) |
> + TILE_SPLIT(ADDR_SURF_TILE_SPLIT_512B) |
> + NUM_BANKS(ADDR_SURF_16_BANK) |
> + BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
> + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2));
> + break;
> + case 25: /* 128 bpp PRT */
> + gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
> + MICRO_TILE_MODE(ADDR_SURF_THIN_MICRO_TILING) |
> + PIPE_CONFIG(ADDR_SURF_P8_32x32_8x16) |
> + TILE_SPLIT(ADDR_SURF_TILE_SPLIT_1KB) |
> + NUM_BANKS(ADDR_SURF_8_BANK) |
> + BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
> + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
> + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1));
> + break;
> + default:
> + gb_tile_moden = 0;
> + break;
> + }
> + WREG32(GB_TILE_MODE0 + (reg_offset * 4), gb_tile_moden);
> + }
> + } else
> + DRM_ERROR("unknown asic: 0x%x\n", rdev->family);
> +}
> +
> +static void si_gpu_init(struct radeon_device *rdev)
> +{
> + u32 cc_rb_backend_disable = 0;
> + u32 cc_gc_shader_array_config;
> + u32 gb_addr_config = 0;
> + u32 mc_shared_chmap, mc_arb_ramcfg;
> + u32 gb_backend_map;
> + u32 cgts_tcc_disable;
> + u32 sx_debug_1;
> + u32 gc_user_shader_array_config;
> + u32 gc_user_rb_backend_disable;
> + u32 cgts_user_tcc_disable;
> + u32 hdp_host_path_cntl;
> + u32 tmp;
> + int i, j;
> +
> + switch (rdev->family) {
> + case CHIP_TAHITI:
> + rdev->config.si.max_shader_engines = 2;
> + rdev->config.si.max_pipes_per_simd = 4;
> + rdev->config.si.max_tile_pipes = 12;
> + rdev->config.si.max_simds_per_se = 8;
> + rdev->config.si.max_backends_per_se = 4;
> + rdev->config.si.max_texture_channel_caches = 12;
> + rdev->config.si.max_gprs = 256;
> + rdev->config.si.max_gs_threads = 32;
> + rdev->config.si.max_hw_contexts = 8;
> +
> + rdev->config.si.sc_prim_fifo_size_frontend = 0x20;
> + rdev->config.si.sc_prim_fifo_size_backend = 0x100;
> + rdev->config.si.sc_hiz_tile_fifo_size = 0x30;
> + rdev->config.si.sc_earlyz_tile_fifo_size = 0x130;
> + break;
> + case CHIP_PITCAIRN:
> + rdev->config.si.max_shader_engines = 2;
> + rdev->config.si.max_pipes_per_simd = 4;
> + rdev->config.si.max_tile_pipes = 8;
> + rdev->config.si.max_simds_per_se = 5;
> + rdev->config.si.max_backends_per_se = 4;
> + rdev->config.si.max_texture_channel_caches = 8;
> + rdev->config.si.max_gprs = 256;
> + rdev->config.si.max_gs_threads = 32;
> + rdev->config.si.max_hw_contexts = 8;
> +
> + rdev->config.si.sc_prim_fifo_size_frontend = 0x20;
> + rdev->config.si.sc_prim_fifo_size_backend = 0x100;
> + rdev->config.si.sc_hiz_tile_fifo_size = 0x30;
> + rdev->config.si.sc_earlyz_tile_fifo_size = 0x130;
> + break;
> + case CHIP_VERDE:
> + default:
> + rdev->config.si.max_shader_engines = 1;
> + rdev->config.si.max_pipes_per_simd = 4;
> + rdev->config.si.max_tile_pipes = 4;
> + rdev->config.si.max_simds_per_se = 2;
> + rdev->config.si.max_backends_per_se = 4;
> + rdev->config.si.max_texture_channel_caches = 4;
> + rdev->config.si.max_gprs = 256;
> + rdev->config.si.max_gs_threads = 32;
> + rdev->config.si.max_hw_contexts = 8;
> +
> + rdev->config.si.sc_prim_fifo_size_frontend = 0x20;
> + rdev->config.si.sc_prim_fifo_size_backend = 0x40;
> + rdev->config.si.sc_hiz_tile_fifo_size = 0x30;
> + rdev->config.si.sc_earlyz_tile_fifo_size = 0x130;
> + break;
> + }
> +
> + /* Initialize HDP */
> + for (i = 0, j = 0; i < 32; i++, j += 0x18) {
> + WREG32((0x2c14 + j), 0x00000000);
> + WREG32((0x2c18 + j), 0x00000000);
> + WREG32((0x2c1c + j), 0x00000000);
> + WREG32((0x2c20 + j), 0x00000000);
> + WREG32((0x2c24 + j), 0x00000000);
> + }
> +
> + WREG32(GRBM_CNTL, GRBM_READ_TIMEOUT(0xff));
> +
> + evergreen_fix_pci_max_read_req_size(rdev);
> +
> + WREG32(BIF_FB_EN, FB_READ_EN | FB_WRITE_EN);
> +
> + mc_shared_chmap = RREG32(MC_SHARED_CHMAP);
> + mc_arb_ramcfg = RREG32(MC_ARB_RAMCFG);
> +
> + cc_rb_backend_disable = RREG32(CC_RB_BACKEND_DISABLE);
> + cc_gc_shader_array_config = RREG32(CC_GC_SHADER_ARRAY_CONFIG);
> + cgts_tcc_disable = 0xffff0000;
> + for (i = 0; i < rdev->config.si.max_texture_channel_caches; i++)
> + cgts_tcc_disable &= ~(1 << (16 + i));
> + gc_user_rb_backend_disable = RREG32(GC_USER_RB_BACKEND_DISABLE);
> + gc_user_shader_array_config = RREG32(GC_USER_SHADER_ARRAY_CONFIG);
> + cgts_user_tcc_disable = RREG32(CGTS_USER_TCC_DISABLE);
> +
> + rdev->config.si.num_shader_engines = rdev->config.si.max_shader_engines;
> + rdev->config.si.num_tile_pipes = rdev->config.si.max_tile_pipes;
> + tmp = ((~gc_user_rb_backend_disable) & BACKEND_DISABLE_MASK) >> BACKEND_DISABLE_SHIFT;
> + rdev->config.si.num_backends_per_se = r600_count_pipe_bits(tmp);
> + tmp = (gc_user_rb_backend_disable & BACKEND_DISABLE_MASK) >> BACKEND_DISABLE_SHIFT;
> + rdev->config.si.backend_disable_mask_per_asic =
> + si_get_disable_mask_per_asic(rdev, tmp, SI_MAX_BACKENDS_PER_SE_MASK,
> + rdev->config.si.num_shader_engines);
> + rdev->config.si.backend_map =
> + si_get_tile_pipe_to_backend_map(rdev, rdev->config.si.num_tile_pipes,
> + rdev->config.si.num_backends_per_se *
> + rdev->config.si.num_shader_engines,
> + &rdev->config.si.backend_disable_mask_per_asic,
> + rdev->config.si.num_shader_engines);
> + tmp = ((~cgts_user_tcc_disable) & TCC_DISABLE_MASK) >> TCC_DISABLE_SHIFT;
> + rdev->config.si.num_texture_channel_caches = r600_count_pipe_bits(tmp);
> + rdev->config.si.mem_max_burst_length_bytes = 256;
> + tmp = (mc_arb_ramcfg & NOOFCOLS_MASK) >> NOOFCOLS_SHIFT;
> + rdev->config.si.mem_row_size_in_kb = (4 * (1 << (8 + tmp))) / 1024;
> + if (rdev->config.si.mem_row_size_in_kb > 4)
> + rdev->config.si.mem_row_size_in_kb = 4;
> + /* XXX use MC settings? */
> + rdev->config.si.shader_engine_tile_size = 32;
> + rdev->config.si.num_gpus = 1;
> + rdev->config.si.multi_gpu_tile_size = 64;
> +
> + gb_addr_config = 0;
> + switch (rdev->config.si.num_tile_pipes) {
> + case 1:
> + gb_addr_config |= NUM_PIPES(0);
> + break;
> + case 2:
> + gb_addr_config |= NUM_PIPES(1);
> + break;
> + case 4:
> + gb_addr_config |= NUM_PIPES(2);
> + break;
> + case 8:
> + default:
> + gb_addr_config |= NUM_PIPES(3);
> + break;
> + }
> +
> + tmp = (rdev->config.si.mem_max_burst_length_bytes / 256) - 1;
> + gb_addr_config |= PIPE_INTERLEAVE_SIZE(tmp);
> + gb_addr_config |= NUM_SHADER_ENGINES(rdev->config.si.num_shader_engines - 1);
> + tmp = (rdev->config.si.shader_engine_tile_size / 16) - 1;
> + gb_addr_config |= SHADER_ENGINE_TILE_SIZE(tmp);
> + switch (rdev->config.si.num_gpus) {
> + case 1:
> + default:
> + gb_addr_config |= NUM_GPUS(0);
> + break;
> + case 2:
> + gb_addr_config |= NUM_GPUS(1);
> + break;
> + case 4:
> + gb_addr_config |= NUM_GPUS(2);
> + break;
> + }
> + switch (rdev->config.si.multi_gpu_tile_size) {
> + case 16:
> + gb_addr_config |= MULTI_GPU_TILE_SIZE(0);
> + break;
> + case 32:
> + default:
> + gb_addr_config |= MULTI_GPU_TILE_SIZE(1);
> + break;
> + case 64:
> + gb_addr_config |= MULTI_GPU_TILE_SIZE(2);
> + break;
> + case 128:
> + gb_addr_config |= MULTI_GPU_TILE_SIZE(3);
> + break;
> + }
> + switch (rdev->config.si.mem_row_size_in_kb) {
> + case 1:
> + default:
> + gb_addr_config |= ROW_SIZE(0);
> + break;
> + case 2:
> + gb_addr_config |= ROW_SIZE(1);
> + break;
> + case 4:
> + gb_addr_config |= ROW_SIZE(2);
> + break;
> + }
> +
> + tmp = (gb_addr_config & NUM_PIPES_MASK) >> NUM_PIPES_SHIFT;
> + rdev->config.si.num_tile_pipes = (1 << tmp);
> + tmp = (gb_addr_config & PIPE_INTERLEAVE_SIZE_MASK) >> PIPE_INTERLEAVE_SIZE_SHIFT;
> + rdev->config.si.mem_max_burst_length_bytes = (tmp + 1) * 256;
> + tmp = (gb_addr_config & NUM_SHADER_ENGINES_MASK) >> NUM_SHADER_ENGINES_SHIFT;
> + rdev->config.si.num_shader_engines = tmp + 1;
> + tmp = (gb_addr_config & NUM_GPUS_MASK) >> NUM_GPUS_SHIFT;
> + rdev->config.si.num_gpus = tmp + 1;
> + tmp = (gb_addr_config & MULTI_GPU_TILE_SIZE_MASK) >> MULTI_GPU_TILE_SIZE_SHIFT;
> + rdev->config.si.multi_gpu_tile_size = 1 << tmp;
> + tmp = (gb_addr_config & ROW_SIZE_MASK) >> ROW_SIZE_SHIFT;
> + rdev->config.si.mem_row_size_in_kb = 1 << tmp;
> +
> + gb_backend_map =
> + si_get_tile_pipe_to_backend_map(rdev, rdev->config.si.num_tile_pipes,
> + rdev->config.si.num_backends_per_se *
> + rdev->config.si.num_shader_engines,
> + &rdev->config.si.backend_disable_mask_per_asic,
> + rdev->config.si.num_shader_engines);
> +
> + /* setup tiling info dword. gb_addr_config is not adequate since it does
> + * not have bank info, so create a custom tiling dword.
> + * bits 3:0 num_pipes
> + * bits 7:4 num_banks
> + * bits 11:8 group_size
> + * bits 15:12 row_size
> + */
> + rdev->config.si.tile_config = 0;
> + switch (rdev->config.si.num_tile_pipes) {
> + case 1:
> + rdev->config.si.tile_config |= (0 << 0);
> + break;
> + case 2:
> + rdev->config.si.tile_config |= (1 << 0);
> + break;
> + case 4:
> + rdev->config.si.tile_config |= (2 << 0);
> + break;
> + case 8:
> + default:
> + /* XXX what about 12? */
> + rdev->config.si.tile_config |= (3 << 0);
> + break;
> + }
> + rdev->config.si.tile_config |=
> + ((mc_arb_ramcfg & NOOFBANK_MASK) >> NOOFBANK_SHIFT) << 4;
> + rdev->config.si.tile_config |=
> + ((gb_addr_config & PIPE_INTERLEAVE_SIZE_MASK) >> PIPE_INTERLEAVE_SIZE_SHIFT) << 8;
> + rdev->config.si.tile_config |=
> + ((gb_addr_config & ROW_SIZE_MASK) >> ROW_SIZE_SHIFT) << 12;
> +
> + rdev->config.si.backend_map = gb_backend_map;
> + WREG32(GB_ADDR_CONFIG, gb_addr_config);
> + WREG32(DMIF_ADDR_CONFIG, gb_addr_config);
> + WREG32(HDP_ADDR_CONFIG, gb_addr_config);
> +
> + /* primary versions */
> + WREG32(CC_RB_BACKEND_DISABLE, cc_rb_backend_disable);
> + WREG32(CC_SYS_RB_BACKEND_DISABLE, cc_rb_backend_disable);
> + WREG32(CC_GC_SHADER_ARRAY_CONFIG, cc_gc_shader_array_config);
> +
> + WREG32(CGTS_TCC_DISABLE, cgts_tcc_disable);
> +
> + /* user versions */
> + WREG32(GC_USER_RB_BACKEND_DISABLE, cc_rb_backend_disable);
> + WREG32(GC_USER_SYS_RB_BACKEND_DISABLE, cc_rb_backend_disable);
> + WREG32(GC_USER_SHADER_ARRAY_CONFIG, cc_gc_shader_array_config);
> +
> + WREG32(CGTS_USER_TCC_DISABLE, cgts_tcc_disable);
> +
> + si_tiling_mode_table_init(rdev);
> +
> + /* set HW defaults for 3D engine */
> + WREG32(CP_QUEUE_THRESHOLDS, (ROQ_IB1_START(0x16) |
> + ROQ_IB2_START(0x2b)));
> + WREG32(CP_MEQ_THRESHOLDS, MEQ1_START(0x30) | MEQ2_START(0x60));
> +
> + sx_debug_1 = RREG32(SX_DEBUG_1);
> + WREG32(SX_DEBUG_1, sx_debug_1);
> +
> + WREG32(SPI_CONFIG_CNTL_1, VTX_DONE_DELAY(4));
> +
> + WREG32(PA_SC_FIFO_SIZE, (SC_FRONTEND_PRIM_FIFO_SIZE(rdev->config.si.sc_prim_fifo_size_frontend) |
> + SC_BACKEND_PRIM_FIFO_SIZE(rdev->config.si.sc_prim_fifo_size_backend) |
> + SC_HIZ_TILE_FIFO_SIZE(rdev->config.si.sc_hiz_tile_fifo_size) |
> + SC_EARLYZ_TILE_FIFO_SIZE(rdev->config.si.sc_earlyz_tile_fifo_size)));
> +
> + WREG32(VGT_NUM_INSTANCES, 1);
> +
> + WREG32(CP_PERFMON_CNTL, 0);
> +
> + WREG32(SQ_CONFIG, 0);
> +
> + WREG32(PA_SC_FORCE_EOV_MAX_CNTS, (FORCE_EOV_MAX_CLK_CNT(4095) |
> + FORCE_EOV_MAX_REZ_CNT(255)));
> +
> + WREG32(VGT_CACHE_INVALIDATION, CACHE_INVALIDATION(VC_AND_TC) |
> + AUTO_INVLD_EN(ES_AND_GS_AUTO));
> +
> + WREG32(VGT_GS_VERTEX_REUSE, 16);
> + WREG32(PA_SC_LINE_STIPPLE_STATE, 0);
> +
> + WREG32(CB_PERFCOUNTER0_SELECT0, 0);
> + WREG32(CB_PERFCOUNTER0_SELECT1, 0);
> + WREG32(CB_PERFCOUNTER1_SELECT0, 0);
> + WREG32(CB_PERFCOUNTER1_SELECT1, 0);
> + WREG32(CB_PERFCOUNTER2_SELECT0, 0);
> + WREG32(CB_PERFCOUNTER2_SELECT1, 0);
> + WREG32(CB_PERFCOUNTER3_SELECT0, 0);
> + WREG32(CB_PERFCOUNTER3_SELECT1, 0);
> +
> + tmp = RREG32(HDP_MISC_CNTL);
> + tmp |= HDP_FLUSH_INVALIDATE_CACHE;
> + WREG32(HDP_MISC_CNTL, tmp);
> +
> + hdp_host_path_cntl = RREG32(HDP_HOST_PATH_CNTL);
> + WREG32(HDP_HOST_PATH_CNTL, hdp_host_path_cntl);
> +
> + WREG32(PA_CL_ENHANCE, CLIP_VTX_REORDER_ENA | NUM_CLIP_SEQ(3));
> +
> + udelay(50);
> +}
> diff --git a/drivers/gpu/drm/radeon/sid.h b/drivers/gpu/drm/radeon/sid.h
> index f565a8f..cf06dcc 100644
> --- a/drivers/gpu/drm/radeon/sid.h
> +++ b/drivers/gpu/drm/radeon/sid.h
> @@ -32,9 +32,57 @@
> #define CTF_TEMP_MASK 0x0003fe00
> #define CTF_TEMP_SHIFT 9
>
> +#define SI_MAX_SH_GPRS 256
> +#define SI_MAX_TEMP_GPRS 16
> +#define SI_MAX_SH_THREADS 256
> +#define SI_MAX_SH_STACK_ENTRIES 4096
> +#define SI_MAX_FRC_EOV_CNT 16384
> +#define SI_MAX_BACKENDS 8
> +#define SI_MAX_BACKENDS_MASK 0xFF
> +#define SI_MAX_BACKENDS_PER_SE_MASK 0x0F
> +#define SI_MAX_SIMDS 12
> +#define SI_MAX_SIMDS_MASK 0x0FFF
> +#define SI_MAX_SIMDS_PER_SE_MASK 0x00FF
> +#define SI_MAX_PIPES 8
> +#define SI_MAX_PIPES_MASK 0xFF
> +#define SI_MAX_PIPES_PER_SIMD_MASK 0x3F
> +#define SI_MAX_LDS_NUM 0xFFFF
> +#define SI_MAX_TCC 16
> +#define SI_MAX_TCC_MASK 0xFFFF
> +
> +#define DMIF_ADDR_CONFIG 0xBD4
> +
> +#define CC_SYS_RB_BACKEND_DISABLE 0xe80
> +#define GC_USER_SYS_RB_BACKEND_DISABLE 0xe84
> +
> #define MC_SHARED_CHMAP 0x2004
> #define NOOFCHAN_SHIFT 12
> #define NOOFCHAN_MASK 0x0000f000
> +#define MC_SHARED_CHREMAP 0x2008
> +
> +#define MC_ARB_RAMCFG 0x2760
> +#define NOOFBANK_SHIFT 0
> +#define NOOFBANK_MASK 0x00000003
> +#define NOOFRANK_SHIFT 2
> +#define NOOFRANK_MASK 0x00000004
> +#define NOOFROWS_SHIFT 3
> +#define NOOFROWS_MASK 0x00000038
> +#define NOOFCOLS_SHIFT 6
> +#define NOOFCOLS_MASK 0x000000C0
> +#define CHANSIZE_SHIFT 8
> +#define CHANSIZE_MASK 0x00000100
> +#define NOOFGROUPS_SHIFT 12
> +#define NOOFGROUPS_MASK 0x00001000
> +
> +#define HDP_HOST_PATH_CNTL 0x2C00
> +
> +#define HDP_ADDR_CONFIG 0x2F48
> +#define HDP_MISC_CNTL 0x2F4C
> +#define HDP_FLUSH_INVALIDATE_CACHE (1 << 0)
> +
> +#define BIF_FB_EN 0x5490
> +#define FB_READ_EN (1 << 0)
> +#define FB_WRITE_EN (1 << 1)
>
> #define DC_LB_MEMORY_SPLIT 0x6b0c
> #define DC_LB_MEMORY_CONFIG(x) ((x) << 20)
> @@ -51,4 +99,157 @@
> # define LATENCY_LOW_WATERMARK(x) ((x) << 0)
> # define LATENCY_HIGH_WATERMARK(x) ((x) << 16)
>
> +#define GRBM_CNTL 0x8000
> +#define GRBM_READ_TIMEOUT(x) ((x) << 0)
> +
> +#define CP_QUEUE_THRESHOLDS 0x8760
> +#define ROQ_IB1_START(x) ((x) << 0)
> +#define ROQ_IB2_START(x) ((x) << 8)
> +#define CP_MEQ_THRESHOLDS 0x8764
> +#define MEQ1_START(x) ((x) << 0)
> +#define MEQ2_START(x) ((x) << 8)
> +
> +#define CP_PERFMON_CNTL 0x87FC
> +
> +#define VGT_CACHE_INVALIDATION 0x88C4
> +#define CACHE_INVALIDATION(x) ((x) << 0)
> +#define VC_ONLY 0
> +#define TC_ONLY 1
> +#define VC_AND_TC 2
> +#define AUTO_INVLD_EN(x) ((x) << 6)
> +#define NO_AUTO 0
> +#define ES_AUTO 1
> +#define GS_AUTO 2
> +#define ES_AND_GS_AUTO 3
> +
> +#define VGT_GS_VERTEX_REUSE 0x88D4
> +
> +#define VGT_NUM_INSTANCES 0x8974
> +
> +#define CC_GC_SHADER_ARRAY_CONFIG 0x89bc
> +#define GC_USER_SHADER_ARRAY_CONFIG 0x89c0
> +
> +#define PA_CL_ENHANCE 0x8A14
> +#define CLIP_VTX_REORDER_ENA (1 << 0)
> +#define NUM_CLIP_SEQ(x) ((x) << 1)
> +
> +#define PA_SC_LINE_STIPPLE_STATE 0x8B10
> +
> +#define PA_SC_FORCE_EOV_MAX_CNTS 0x8B24
> +#define FORCE_EOV_MAX_CLK_CNT(x) ((x) << 0)
> +#define FORCE_EOV_MAX_REZ_CNT(x) ((x) << 16)
> +
> +#define PA_SC_FIFO_SIZE 0x8BCC
> +#define SC_FRONTEND_PRIM_FIFO_SIZE(x) ((x) << 0)
> +#define SC_BACKEND_PRIM_FIFO_SIZE(x) ((x) << 6)
> +#define SC_HIZ_TILE_FIFO_SIZE(x) ((x) << 15)
> +#define SC_EARLYZ_TILE_FIFO_SIZE(x) ((x) << 23)
> +
> +#define SQ_CONFIG 0x8C00
> +
> +#define SX_DEBUG_1 0x9060
> +
> +#define SPI_CONFIG_CNTL_1 0x913C
> +#define VTX_DONE_DELAY(x) ((x) << 0)
> +#define INTERP_ONE_PRIM_PER_ROW (1 << 4)
> +
> +#define CGTS_TCC_DISABLE 0x9148
> +#define CGTS_USER_TCC_DISABLE 0x914C
> +#define TCC_DISABLE_MASK 0xFFFF0000
> +#define TCC_DISABLE_SHIFT 16
> +
> +#define CC_RB_BACKEND_DISABLE 0x98F4
> +#define BACKEND_DISABLE(x) ((x) << 16)
> +#define GB_ADDR_CONFIG 0x98F8
> +#define NUM_PIPES(x) ((x) << 0)
> +#define NUM_PIPES_MASK 0x00000007
> +#define NUM_PIPES_SHIFT 0
> +#define PIPE_INTERLEAVE_SIZE(x) ((x) << 4)
> +#define PIPE_INTERLEAVE_SIZE_MASK 0x00000070
> +#define PIPE_INTERLEAVE_SIZE_SHIFT 4
> +#define NUM_SHADER_ENGINES(x) ((x) << 12)
> +#define NUM_SHADER_ENGINES_MASK 0x00003000
> +#define NUM_SHADER_ENGINES_SHIFT 12
> +#define SHADER_ENGINE_TILE_SIZE(x) ((x) << 16)
> +#define SHADER_ENGINE_TILE_SIZE_MASK 0x00070000
> +#define SHADER_ENGINE_TILE_SIZE_SHIFT 16
> +#define NUM_GPUS(x) ((x) << 20)
> +#define NUM_GPUS_MASK 0x00700000
> +#define NUM_GPUS_SHIFT 20
> +#define MULTI_GPU_TILE_SIZE(x) ((x) << 24)
> +#define MULTI_GPU_TILE_SIZE_MASK 0x03000000
> +#define MULTI_GPU_TILE_SIZE_SHIFT 24
> +#define ROW_SIZE(x) ((x) << 28)
> +#define ROW_SIZE_MASK 0x30000000
> +#define ROW_SIZE_SHIFT 28
> +
> +#define GB_TILE_MODE0 0x9910
> +# define MICRO_TILE_MODE(x) ((x) << 0)
> +# define ADDR_SURF_DISPLAY_MICRO_TILING 0
> +# define ADDR_SURF_THIN_MICRO_TILING 1
> +# define ADDR_SURF_DEPTH_MICRO_TILING 2
> +# define ARRAY_MODE(x) ((x) << 2)
> +# define ARRAY_LINEAR_GENERAL 0
> +# define ARRAY_LINEAR_ALIGNED 1
> +# define ARRAY_1D_TILED_THIN1 2
> +# define ARRAY_2D_TILED_THIN1 4
> +# define PIPE_CONFIG(x) ((x) << 6)
> +# define ADDR_SURF_P2 0
> +# define ADDR_SURF_P4_8x16 4
> +# define ADDR_SURF_P4_16x16 5
> +# define ADDR_SURF_P4_16x32 6
> +# define ADDR_SURF_P4_32x32 7
> +# define ADDR_SURF_P8_16x16_8x16 8
> +# define ADDR_SURF_P8_16x32_8x16 9
> +# define ADDR_SURF_P8_32x32_8x16 10
> +# define ADDR_SURF_P8_16x32_16x16 11
> +# define ADDR_SURF_P8_32x32_16x16 12
> +# define ADDR_SURF_P8_32x32_16x32 13
> +# define ADDR_SURF_P8_32x64_32x32 14
> +# define TILE_SPLIT(x) ((x) << 11)
> +# define ADDR_SURF_TILE_SPLIT_64B 0
> +# define ADDR_SURF_TILE_SPLIT_128B 1
> +# define ADDR_SURF_TILE_SPLIT_256B 2
> +# define ADDR_SURF_TILE_SPLIT_512B 3
> +# define ADDR_SURF_TILE_SPLIT_1KB 4
> +# define ADDR_SURF_TILE_SPLIT_2KB 5
> +# define ADDR_SURF_TILE_SPLIT_4KB 6
> +# define BANK_WIDTH(x) ((x) << 14)
> +# define ADDR_SURF_BANK_WIDTH_1 0
> +# define ADDR_SURF_BANK_WIDTH_2 1
> +# define ADDR_SURF_BANK_WIDTH_4 2
> +# define ADDR_SURF_BANK_WIDTH_8 3
> +# define BANK_HEIGHT(x) ((x) << 16)
> +# define ADDR_SURF_BANK_HEIGHT_1 0
> +# define ADDR_SURF_BANK_HEIGHT_2 1
> +# define ADDR_SURF_BANK_HEIGHT_4 2
> +# define ADDR_SURF_BANK_HEIGHT_8 3
> +# define MACRO_TILE_ASPECT(x) ((x) << 18)
> +# define ADDR_SURF_MACRO_ASPECT_1 0
> +# define ADDR_SURF_MACRO_ASPECT_2 1
> +# define ADDR_SURF_MACRO_ASPECT_4 2
> +# define ADDR_SURF_MACRO_ASPECT_8 3
> +# define NUM_BANKS(x) ((x) << 20)
> +# define ADDR_SURF_2_BANK 0
> +# define ADDR_SURF_4_BANK 1
> +# define ADDR_SURF_8_BANK 2
> +# define ADDR_SURF_16_BANK 3
> +
> +#define CB_PERFCOUNTER0_SELECT0 0x9a20
> +#define CB_PERFCOUNTER0_SELECT1 0x9a24
> +#define CB_PERFCOUNTER1_SELECT0 0x9a28
> +#define CB_PERFCOUNTER1_SELECT1 0x9a2c
> +#define CB_PERFCOUNTER2_SELECT0 0x9a30
> +#define CB_PERFCOUNTER2_SELECT1 0x9a34
> +#define CB_PERFCOUNTER3_SELECT0 0x9a38
> +#define CB_PERFCOUNTER3_SELECT1 0x9a3c
> +
> +#define GC_USER_RB_BACKEND_DISABLE 0x9B7C
> +#define BACKEND_DISABLE_MASK 0x00FF0000
> +#define BACKEND_DISABLE_SHIFT 16
> +
> +#define TCP_CHAN_STEER_LO 0xac0c
> +#define TCP_CHAN_STEER_HI 0xac10
> +
> +
> #endif
No other picky comment
Cheers,
Jerome
next prev parent reply other threads:[~2012-03-20 23:16 UTC|newest]
Thread overview: 54+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-03-20 21:17 [PATCH 00/48] Add SI, TN support alexdeucher
2012-03-20 21:17 ` [PATCH 01/48] drm/radeon/kms: add info query for max pipes alexdeucher
2012-03-20 21:17 ` [PATCH 02/48] drm/radeon/kms: Upstream ObjectID.h updates alexdeucher
2012-03-20 21:17 ` [PATCH 03/48] drm/radeon/kms: upstream atombios.h updates alexdeucher
2012-03-20 21:17 ` [PATCH 04/48] drm/radeon/kms: upstream power table updates alexdeucher
2012-03-20 21:17 ` [PATCH 05/48] drm/radeon/kms: add SI chip families alexdeucher
2012-03-20 21:18 ` [PATCH 06/48] drm/radeon/kms: add initial DCE6 display watermark support alexdeucher
2012-03-20 23:18 ` Jerome Glisse
2012-03-20 21:18 ` [PATCH 07/48] drm/radeon/kms: fix up atom HPD gpio parsing for DCE6 alexdeucher
2012-03-20 21:18 ` [PATCH 08/48] drm/radeon/kms/atom: DCE6 no longer has crtcmemreq bits alexdeucher
2012-03-20 21:18 ` [PATCH 09/48] drm/radeon/kms/atom: add support for crtc power gating alexdeucher
2012-03-20 21:18 ` [PATCH 10/48] drm/radeon/kms: DCE6 disp eng pll updates alexdeucher
2012-03-20 21:18 ` [PATCH 11/48] drm/radeon/kms/atom: add support for DCE6.x dig transmitters alexdeucher
2012-03-20 21:18 ` [PATCH 12/48] drm/radeon/kms: DP aux updates for DCE6 alexdeucher
2012-03-20 21:18 ` [PATCH 13/48] drm/radeon/kms: update comments about dig encoders/transmitters alexdeucher
2012-03-20 21:18 ` [PATCH 14/48] drm/radeon/kms/atom: add support for SI SetVoltage table alexdeucher
2012-03-20 21:18 ` [PATCH 15/48] drm/radeon/kms: update power table parsing for SI alexdeucher
2012-03-20 21:18 ` [PATCH 16/48] drm/radeon/kms: add support for internal thermal sensor on SI alexdeucher
2012-03-20 21:18 ` [PATCH 17/48] drm/radeon/kms: add gpu init support for SI alexdeucher
2012-03-20 23:16 ` Jerome Glisse [this message]
2012-03-20 21:18 ` [PATCH 18/48] drm/radeon/kms: Add support for SI GPU reset alexdeucher
2012-03-20 21:18 ` [PATCH 19/48] drm/radeon/kms: add support for MC/VM setup on SI alexdeucher
2012-03-20 23:20 ` Jerome Glisse
2012-03-20 21:18 ` [PATCH 20/48] drm/radeon/kms: add support for the CONST IB to the CS ioctl alexdeucher
2012-03-20 21:18 ` [PATCH 21/48] drm/radeon/kms: add VM CS checker for SI alexdeucher
2012-03-20 21:18 ` [PATCH 22/48] drm/radeon/kms: Only VM CS ioctl is supported on SI (v2) alexdeucher
2012-03-20 21:18 ` [PATCH 23/48] drm/radeon/kms: add ucode loading for SI alexdeucher
2012-03-20 21:18 ` [PATCH 24/48] drm/radeon/kms: add support for MC ucode loading on SI alexdeucher
2012-03-20 21:18 ` [PATCH 25/48] drm/radeon/kms: add support for CP setup " alexdeucher
2012-03-20 21:18 ` [PATCH 26/48] drm/radeon/kms: add IB and fence dispatch functions for SI alexdeucher
2012-03-20 21:18 ` [PATCH 27/48] drm/radeon/kms: Add support for RLC init on SI alexdeucher
2012-03-20 21:18 ` [PATCH 28/48] drm/radeon/kms: add support for interrupts " alexdeucher
2012-03-20 21:18 ` [PATCH 29/48] drm/radeon/kms: fill in startup/shutdown callbacks for SI alexdeucher
2012-03-20 21:18 ` [PATCH 30/48] drm/radeon/kms: add support for compute rings in CS ioctl on SI alexdeucher
2012-03-20 21:18 ` [PATCH 31/48] drm/radeon/kms: add radeon_asic struct for SI alexdeucher
2012-03-20 21:18 ` [PATCH 32/48] drm/radeon: Update radeon_info_ioctl for SI. (v2) alexdeucher
2012-03-20 21:18 ` [PATCH 33/48] drm/radeon/kms: Add SI pci ids alexdeucher
2012-03-20 21:18 ` [PATCH 34/48] drm/radeon/kms: add trinity (TN) chip family alexdeucher
2012-03-20 21:18 ` [PATCH 35/48] drm/radeon/kms: no support for internal thermal sensor on TN yet alexdeucher
2012-03-20 21:18 ` [PATCH 36/48] drm/radeon/kms: DCE6.1 watermark updates for TN alexdeucher
2012-03-20 21:18 ` [PATCH 37/48] drm/radeon/kms: DCE6.1 disp eng pll updates alexdeucher
2012-03-20 21:18 ` [PATCH 38/48] drm/radeon/kms: Adjust pll picker for DCE6.1 alexdeucher
2012-03-20 21:18 ` [PATCH 39/48] drm/radeon/kms: disable PPLL0 on DCE6.1 when not in use alexdeucher
2012-03-20 21:18 ` [PATCH 40/48] drm/radeon/kms/DCE6.1: ss is not supported on the internal pplls alexdeucher
2012-03-20 21:18 ` [PATCH 41/48] drm/radeon/kms: Add checks for TN in the DP bridge code alexdeucher
2012-03-20 21:18 ` [PATCH 42/48] drm/radeon/kms: cayman gpu init updates for trinity alexdeucher
2012-03-20 21:18 ` [PATCH 43/48] drm/radeon/kms: Update evergreen functions " alexdeucher
2012-03-20 21:18 ` [PATCH 44/48] drm/radeon/kms/vm: set vram base offset properly for TN alexdeucher
2012-03-20 21:18 ` [PATCH 45/48] drm/radeon/kms: add support for ucode loading on trinity (v2) alexdeucher
2012-03-20 21:18 ` [PATCH 46/48] drm/radeon/kms: add radeon_asic struct for trinity alexdeucher
2012-03-20 21:18 ` [PATCH 47/48] drm/radeon/kms: add trinity pci ids alexdeucher
2012-03-20 21:18 ` [PATCH 48/48] drm/radeon/kms: update duallink checks for DCE6 alexdeucher
2012-03-20 23:17 ` [PATCH 00/48] Add SI, TN support Jerome Glisse
2012-03-21 11:18 ` Christian König
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1332285362.1654.1.camel@localhost.localdomain \
--to=j.glisse@gmail.com \
--cc=alexander.deucher@amd.com \
--cc=alexdeucher@gmail.com \
--cc=dri-devel@lists.freedesktop.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.