]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
drm/amd/display: Support new VA page table block size
authorChris Park <chris.park@amd.com>
Tue, 14 May 2024 17:55:18 +0000 (13:55 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 5 Jun 2024 15:05:47 +0000 (11:05 -0400)
[Why]
Page table definition increased up to 2MB.

[How]
Define new use case of page table for VA.

Reviewed-by: Alvin Lee <alvin.lee2@amd.com>
Acked-by: Zaeem Mohamed <zaeem.mohamed@amd.com>
Signed-off-by: Chris Park <chris.park@amd.com>
Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/dc/hubbub/dcn20/dcn20_hubbub.c
drivers/gpu/drm/amd/display/dc/inc/hw/dchubbub.h

index c6f859871d11e63b1b0b9bc44258a39026a78423..8901bd80f7d1809586051abaa526d6b17fd81bef 100644 (file)
@@ -339,15 +339,36 @@ static enum dcn_hubbub_page_table_block_size page_table_block_size_to_hw(unsigne
        case 4096:
                block_size = DCN_PAGE_TABLE_BLOCK_SIZE_4KB;
                break;
-       case 65536:
-               block_size = DCN_PAGE_TABLE_BLOCK_SIZE_64KB;
+       case 8192:
+               block_size = DCN_PAGE_TABLE_BLOCK_SIZE_8KB;
+               break;
+       case 16384:
+               block_size = DCN_PAGE_TABLE_BLOCK_SIZE_16KB;
                break;
        case 32768:
                block_size = DCN_PAGE_TABLE_BLOCK_SIZE_32KB;
                break;
+       case 65536:
+               block_size = DCN_PAGE_TABLE_BLOCK_SIZE_64KB;
+               break;
+       case 131072:
+               block_size = DCN_PAGE_TABLE_BLOCK_SIZE_128KB;
+               break;
+       case 262144:
+               block_size = DCN_PAGE_TABLE_BLOCK_SIZE_256KB;
+               break;
+       case 524288:
+               block_size = DCN_PAGE_TABLE_BLOCK_SIZE_512KB;
+               break;
+       case 1048576:
+               block_size = DCN_PAGE_TABLE_BLOCK_SIZE_1024KB;
+               break;
+       case 2097152:
+               block_size = DCN_PAGE_TABLE_BLOCK_SIZE_2048KB;
+               break;
        default:
                ASSERT(false);
-               block_size = page_table_block_size;
+               block_size = DCN_PAGE_TABLE_BLOCK_SIZE_4KB;
                break;
        }
 
index 1511400fc56b5bdd39588dd8d969545c651d65ec..a73cb8f731b38c43cb6faf83c39fff5bc3221121 100644 (file)
@@ -74,8 +74,15 @@ enum dcn_hubbub_page_table_depth {
 
 enum dcn_hubbub_page_table_block_size {
        DCN_PAGE_TABLE_BLOCK_SIZE_4KB = 0,
+       DCN_PAGE_TABLE_BLOCK_SIZE_8KB = 1,
+       DCN_PAGE_TABLE_BLOCK_SIZE_16KB = 2,
+       DCN_PAGE_TABLE_BLOCK_SIZE_32KB = 3,
        DCN_PAGE_TABLE_BLOCK_SIZE_64KB = 4,
-       DCN_PAGE_TABLE_BLOCK_SIZE_32KB = 3
+       DCN_PAGE_TABLE_BLOCK_SIZE_128KB = 5,
+       DCN_PAGE_TABLE_BLOCK_SIZE_256KB = 6,
+       DCN_PAGE_TABLE_BLOCK_SIZE_512KB = 7,
+       DCN_PAGE_TABLE_BLOCK_SIZE_1024KB = 8,
+       DCN_PAGE_TABLE_BLOCK_SIZE_2048KB = 9
 };
 
 struct dcn_hubbub_phys_addr_config {