drm/amdgpu: handle gfx12 in amdgpu_display_verify_sizes
It verified GFX9-11 swizzle modes on GFX12, which has undefined behavior. Signed-off-by: Marek Olšák <marek.olsak@amd.com> Acked-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
c2fad73174
commit
8dd1426e2c
@ -1082,6 +1082,30 @@ static int amdgpu_display_verify_sizes(struct amdgpu_framebuffer *rfb)
|
|||||||
block_width = 256 / format_info->cpp[i];
|
block_width = 256 / format_info->cpp[i];
|
||||||
block_height = 1;
|
block_height = 1;
|
||||||
block_size_log2 = 8;
|
block_size_log2 = 8;
|
||||||
|
} else if (AMD_FMT_MOD_GET(TILE_VERSION, modifier) >= AMD_FMT_MOD_TILE_VER_GFX12) {
|
||||||
|
int swizzle = AMD_FMT_MOD_GET(TILE, modifier);
|
||||||
|
|
||||||
|
switch (swizzle) {
|
||||||
|
case AMD_FMT_MOD_TILE_GFX12_256B_2D:
|
||||||
|
block_size_log2 = 8;
|
||||||
|
break;
|
||||||
|
case AMD_FMT_MOD_TILE_GFX12_4K_2D:
|
||||||
|
block_size_log2 = 12;
|
||||||
|
break;
|
||||||
|
case AMD_FMT_MOD_TILE_GFX12_64K_2D:
|
||||||
|
block_size_log2 = 16;
|
||||||
|
break;
|
||||||
|
case AMD_FMT_MOD_TILE_GFX12_256K_2D:
|
||||||
|
block_size_log2 = 18;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
drm_dbg_kms(rfb->base.dev,
|
||||||
|
"Gfx12 swizzle mode with unknown block size: %d\n", swizzle);
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
get_block_dimensions(block_size_log2, format_info->cpp[i],
|
||||||
|
&block_width, &block_height);
|
||||||
} else {
|
} else {
|
||||||
int swizzle = AMD_FMT_MOD_GET(TILE, modifier);
|
int swizzle = AMD_FMT_MOD_GET(TILE, modifier);
|
||||||
|
|
||||||
@ -1117,7 +1141,8 @@ static int amdgpu_display_verify_sizes(struct amdgpu_framebuffer *rfb)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (AMD_FMT_MOD_GET(DCC, modifier)) {
|
if (AMD_FMT_MOD_GET(TILE_VERSION, modifier) <= AMD_FMT_MOD_TILE_VER_GFX11 &&
|
||||||
|
AMD_FMT_MOD_GET(DCC, modifier)) {
|
||||||
if (AMD_FMT_MOD_GET(DCC_RETILE, modifier)) {
|
if (AMD_FMT_MOD_GET(DCC_RETILE, modifier)) {
|
||||||
block_size_log2 = get_dcc_block_size(modifier, false, false);
|
block_size_log2 = get_dcc_block_size(modifier, false, false);
|
||||||
get_block_dimensions(block_size_log2 + 8, format_info->cpp[0],
|
get_block_dimensions(block_size_log2 + 8, format_info->cpp[0],
|
||||||
|
@ -1506,6 +1506,8 @@ drm_fourcc_canonicalize_nvidia_format_mod(__u64 modifier)
|
|||||||
* 6 - 64KB_3D
|
* 6 - 64KB_3D
|
||||||
* 7 - 256KB_3D
|
* 7 - 256KB_3D
|
||||||
*/
|
*/
|
||||||
|
#define AMD_FMT_MOD_TILE_GFX12_256B_2D 1
|
||||||
|
#define AMD_FMT_MOD_TILE_GFX12_4K_2D 2
|
||||||
#define AMD_FMT_MOD_TILE_GFX12_64K_2D 3
|
#define AMD_FMT_MOD_TILE_GFX12_64K_2D 3
|
||||||
#define AMD_FMT_MOD_TILE_GFX12_256K_2D 4
|
#define AMD_FMT_MOD_TILE_GFX12_256K_2D 4
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user