On Tue, Dec 13, 2011 at 03:08:53PM +0000, Simon Farnsworth wrote:
> Evergreen and later Radeons let the driver choose a macro tile layout,
> within certain constraints. If we don't set the appropriate fields
> correctly, the card will use a layout that doesn't normally meet the
> constraints on Evergreen tiling.
> 
> For now, select 8x8 aspect 1 macrotiles, as this makes it possible to
> guarantee that we meet the hardware constraints. Once macrotiling is
> reliable, we can consider a better API to let us exploit the hardware
> capabilities.
> 
> Signed-off-by: Simon Farnsworth <simon.farnsworth at onelan.co.uk>

NAK

We don't want to enforce those value in kernel. I am working on fixing
tiling accross the stack and such patch would only hurt us in the
future.

Cheers,
Jerome

> ---
> 
> This doesn't fix my problems with enabling macro tiling, but it does help
> somewhat. I also need to fix alignment in the DDX and Mesa to avoid
> misrendering, at which point I see CP lockups instead.
> 
> I'm therefore sending this, the DDX patch, and the Mesa patch out in order
> to avoid getting stuck in a world where I have an 80% fix, someone else has
> an 80% fix, and if only we talked, we'd have a 100% fix.
> 
>  drivers/gpu/drm/radeon/atombios_crtc.c |    4 ++++
>  drivers/gpu/drm/radeon/evergreen_cs.c  |    9 +++++++++
>  drivers/gpu/drm/radeon/evergreend.h    |    7 +++++++
>  3 files changed, 20 insertions(+), 0 deletions(-)
> 
> diff --git a/drivers/gpu/drm/radeon/atombios_crtc.c 
> b/drivers/gpu/drm/radeon/atombios_crtc.c
> index 2b97262..f982975 100644
> --- a/drivers/gpu/drm/radeon/atombios_crtc.c
> +++ b/drivers/gpu/drm/radeon/atombios_crtc.c
> @@ -1113,6 +1113,10 @@ static int dce4_crtc_do_set_base(struct drm_crtc *crtc,
>               else
>                       tmp = rdev->config.evergreen.tile_config;
>  
> +             fb_format |= 
> (EVERGREEN_GRPH_BANK_HEIGHT(EVERGREEN_ADDR_SURF_BANK_HEIGHT_8) |
> +                           
> EVERGREEN_GRPH_BANK_WIDTH(EVERGREEN_ADDR_SURF_BANK_WIDTH_8) |
> +                           
> EVERGREEN_GRPH_MACRO_TILE_ASPECT(EVERGREEN_ADDR_SURF_MACRO_TILE_ASPECT_1));
> +
>               switch ((tmp & 0xf0) >> 4) {
>               case 0: /* 4 banks */
>                       fb_format |= 
> EVERGREEN_GRPH_NUM_BANKS(EVERGREEN_ADDR_SURF_4_BANK);
> diff --git a/drivers/gpu/drm/radeon/evergreen_cs.c 
> b/drivers/gpu/drm/radeon/evergreen_cs.c
> index b53d1c6..a14a04e 100644
> --- a/drivers/gpu/drm/radeon/evergreen_cs.c
> +++ b/drivers/gpu/drm/radeon/evergreen_cs.c
> @@ -532,6 +532,9 @@ static int evergreen_cs_check_reg(struct radeon_cs_parser 
> *p, u32 reg, u32 idx)
>                       ib[idx] |= 
> Z_ARRAY_MODE(evergreen_cs_get_aray_mode(reloc->lobj.tiling_flags));
>                       track->db_z_info |= 
> Z_ARRAY_MODE(evergreen_cs_get_aray_mode(reloc->lobj.tiling_flags));
>                       if (reloc->lobj.tiling_flags & RADEON_TILING_MACRO) {
> +                             ib[idx] |= 
> (DB_BANK_WIDTH(ADDR_SURF_BANK_WIDTH_8) |
> +                                         
> DB_BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_8) |
> +                                         
> DB_MACRO_TILE_ASPECT(ADDR_SURF_MACRO_TILE_ASPECT_1));
>                               ib[idx] |= 
> DB_NUM_BANKS(evergreen_cs_get_num_banks(track->nbanks));
>                               ib[idx] |= 
> DB_TILE_SPLIT(evergreen_cs_get_tile_split(track->row_size));
>                       }
> @@ -736,6 +739,9 @@ static int evergreen_cs_check_reg(struct radeon_cs_parser 
> *p, u32 reg, u32 idx)
>                       return -EINVAL;
>               }
>               if (reloc->lobj.tiling_flags & RADEON_TILING_MACRO) {
> +                     ib[idx] |= (CB_BANK_WIDTH(ADDR_SURF_BANK_WIDTH_8) |
> +                                 CB_BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_8) |
> +                                 
> CB_MACRO_TILE_ASPECT(ADDR_SURF_MACRO_TILE_ASPECT_1));
>                       ib[idx] |= 
> CB_NUM_BANKS(evergreen_cs_get_num_banks(track->nbanks));
>                       ib[idx] |= 
> CB_TILE_SPLIT(evergreen_cs_get_tile_split(track->row_size));
>               }
> @@ -1360,6 +1366,9 @@ static int evergreen_packet3_check(struct 
> radeon_cs_parser *p,
>                                       if (reloc->lobj.tiling_flags & 
> RADEON_TILING_MACRO) {
>                                               ib[idx+1+(i*8)+6] |= 
> TEX_TILE_SPLIT(evergreen_cs_get_tile_split(track->row_size));
>                                               ib[idx+1+(i*8)+7] |= 
> TEX_NUM_BANKS(evergreen_cs_get_num_banks(track->nbanks));
> +                                             ib[idx+1+(i*8)+8] |= 
> (TEX_BANK_WIDTH(ADDR_SURF_BANK_WIDTH_8) |
> +                                                                   
> TEX_BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_8) |
> +                                                                   
> TEX_MACRO_TILE_ASPECT(ADDR_SURF_MACRO_TILE_ASPECT_1));
>                                       }
>                               }
>                               texture = reloc->robj;
> diff --git a/drivers/gpu/drm/radeon/evergreend.h 
> b/drivers/gpu/drm/radeon/evergreend.h
> index e00039e..3731e8f 100644
> --- a/drivers/gpu/drm/radeon/evergreend.h
> +++ b/drivers/gpu/drm/radeon/evergreend.h
> @@ -903,6 +903,7 @@
>  #       define DB_NUM_BANKS(x)                          (((x) & 0x3) << 12)
>  #       define DB_BANK_WIDTH(x)                         (((x) & 0x3) << 16)
>  #       define DB_BANK_HEIGHT(x)                        (((x) & 0x3) << 20)
> +#       define DB_MACRO_TILE_ASPECT(x)                  (((x) & 0x3) << 24)
>  #define DB_STENCIL_INFO                                      0x28044
>  #define DB_Z_READ_BASE                                       0x28048
>  #define DB_STENCIL_READ_BASE                         0x2804c
> @@ -978,6 +979,11 @@
>  #       define ADDR_SURF_BANK_HEIGHT_2                  1
>  #       define ADDR_SURF_BANK_HEIGHT_4                  2
>  #       define ADDR_SURF_BANK_HEIGHT_8                  3
> +#       define CB_MACRO_TILE_ASPECT(x)                  (((x) & 0x3) << 19)
> +#       define ADDR_SURF_MACRO_TILE_ASPECT_1            0
> +#       define ADDR_SURF_MACRO_TILE_ASPECT_2            1
> +#       define ADDR_SURF_MACRO_TILE_ASPECT_4            2
> +#       define ADDR_SURF_MACRO_TILE_ASPECT_8            3
>  #define      CB_COLOR0_DIM                                   0x28c78
>  /* only CB0-7 blocks have these regs */
>  #define      CB_COLOR0_CMASK                                 0x28c7c
> @@ -1166,6 +1172,7 @@
>  #define SQ_TEX_RESOURCE_WORD6_0                         0x30018
>  #       define TEX_TILE_SPLIT(x)                        (((x) & 0x7) << 29)
>  #define SQ_TEX_RESOURCE_WORD7_0                         0x3001c
> +#       define TEX_MACRO_TILE_ASPECT(x)                 (((x) & 0x3) << 6)
>  #       define TEX_BANK_WIDTH(x)                        (((x) & 0x3) << 8)
>  #       define TEX_BANK_HEIGHT(x)                       (((x) & 0x3) << 10)
>  #       define TEX_NUM_BANKS(x)                         (((x) & 0x3) << 16)
> -- 
> 1.7.6.4
> 
> _______________________________________________
> dri-devel mailing list
> dri-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to