]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/amdgpu: add initial support for gfx950
authorLe Ma <le.ma@amd.com>
Fri, 8 Nov 2024 19:40:22 +0000 (14:40 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 10 Dec 2024 15:26:50 +0000 (10:26 -0500)
add gfx950 basic support

Signed-off-by: Le Ma <le.ma@amd.com>
Reviewed-by: Hawking Zhang <Hawking.Zhang@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c
drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
drivers/gpu/drm/amd/amdgpu/gfx_v9_4_3.c
drivers/gpu/drm/amd/amdgpu/gfxhub_v1_2.c
drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
drivers/gpu/drm/amd/amdgpu/soc15.c

index bc92bc6b866fc310dac191935d14f8bc1422fadb..63b1f1c0eb34d6ae4c61f44d427563e8430635d2 100644 (file)
@@ -1401,6 +1401,7 @@ static int amdgpu_device_asic_init(struct amdgpu_device *adev)
 
        if (amdgpu_ip_version(adev, GC_HWIP, 0) == IP_VERSION(9, 4, 3) ||
            amdgpu_ip_version(adev, GC_HWIP, 0) == IP_VERSION(9, 4, 4) ||
+           amdgpu_ip_version(adev, GC_HWIP, 0) == IP_VERSION(9, 5, 0) ||
            amdgpu_ip_version(adev, GC_HWIP, 0) >= IP_VERSION(11, 0, 0)) {
                amdgpu_psp_wait_for_bootloader(adev);
                ret = amdgpu_atomfirmware_asic_init(adev, true);
index b8845c74ec00927189d0fe14d5a7028e564696d9..2d0bcd85cb490f5dae83056de1e44f7fbc296006 100644 (file)
@@ -1836,6 +1836,7 @@ static int amdgpu_discovery_set_common_ip_blocks(struct amdgpu_device *adev)
        case IP_VERSION(9, 4, 2):
        case IP_VERSION(9, 4, 3):
        case IP_VERSION(9, 4, 4):
+       case IP_VERSION(9, 5, 0):
                amdgpu_device_ip_block_add(adev, &vega10_common_ip_block);
                break;
        case IP_VERSION(10, 1, 10):
@@ -1890,6 +1891,7 @@ static int amdgpu_discovery_set_gmc_ip_blocks(struct amdgpu_device *adev)
        case IP_VERSION(9, 4, 2):
        case IP_VERSION(9, 4, 3):
        case IP_VERSION(9, 4, 4):
+       case IP_VERSION(9, 5, 0):
                amdgpu_device_ip_block_add(adev, &gmc_v9_0_ip_block);
                break;
        case IP_VERSION(10, 1, 10):
@@ -2184,6 +2186,7 @@ static int amdgpu_discovery_set_gc_ip_blocks(struct amdgpu_device *adev)
                break;
        case IP_VERSION(9, 4, 3):
        case IP_VERSION(9, 4, 4):
+       case IP_VERSION(9, 5, 0):
                amdgpu_device_ip_block_add(adev, &gfx_v9_4_3_ip_block);
                break;
        case IP_VERSION(10, 1, 10):
@@ -2405,6 +2408,7 @@ static void amdgpu_discovery_init_soc_config(struct amdgpu_device *adev)
        switch (amdgpu_ip_version(adev, GC_HWIP, 0)) {
        case IP_VERSION(9, 4, 3):
        case IP_VERSION(9, 4, 4):
+       case IP_VERSION(9, 5, 0):
                aqua_vanjaram_init_soc_config(adev);
                break;
        default:
@@ -2652,6 +2656,7 @@ int amdgpu_discovery_set_ip_blocks(struct amdgpu_device *adev)
        case IP_VERSION(9, 4, 2):
        case IP_VERSION(9, 4, 3):
        case IP_VERSION(9, 4, 4):
+       case IP_VERSION(9, 5, 0):
                adev->family = AMDGPU_FAMILY_AI;
                break;
        case IP_VERSION(9, 1, 0):
index 9f922ec50ea2dc846b5cdbd931e655ebab86f9fc..9ff6cfacfd34c33786c7c7bc9951cf7bba099bc2 100644 (file)
@@ -1762,7 +1762,8 @@ static int amdgpu_ttm_reserve_tmr(struct amdgpu_device *adev)
 
        if (!adev->bios &&
            (amdgpu_ip_version(adev, GC_HWIP, 0) == IP_VERSION(9, 4, 3) ||
-            amdgpu_ip_version(adev, GC_HWIP, 0) == IP_VERSION(9, 4, 4)))
+            amdgpu_ip_version(adev, GC_HWIP, 0) == IP_VERSION(9, 4, 4) ||
+            amdgpu_ip_version(adev, GC_HWIP, 0) == IP_VERSION(9, 5, 0)))
                reserve_size = max(reserve_size, (uint32_t)280 << 20);
        else if (!reserve_size)
                reserve_size = DISCOVERY_TMR_OFFSET;
index d67319eee88ed4901870ca529130d863d928c09f..410e8f8b3d18fca86246487b8dc86fae9f910e77 100644 (file)
@@ -937,6 +937,7 @@ static int gfx_v9_4_3_gpu_early_init(struct amdgpu_device *adev)
        switch (amdgpu_ip_version(adev, GC_HWIP, 0)) {
        case IP_VERSION(9, 4, 3):
        case IP_VERSION(9, 4, 4):
+       case IP_VERSION(9, 5, 0):
                adev->gfx.config.max_hw_contexts = 8;
                adev->gfx.config.sc_prim_fifo_size_frontend = 0x20;
                adev->gfx.config.sc_prim_fifo_size_backend = 0x100;
@@ -4862,6 +4863,7 @@ static void gfx_v9_4_3_set_gds_init(struct amdgpu_device *adev)
        switch (amdgpu_ip_version(adev, GC_HWIP, 0)) {
        case IP_VERSION(9, 4, 3):
        case IP_VERSION(9, 4, 4):
+       case IP_VERSION(9, 5, 0):
                /* 9.4.3 removed all the GDS internal memory,
                 * only support GWS opcode in kernel, like barrier
                 * semaphore.etc */
@@ -4875,6 +4877,7 @@ static void gfx_v9_4_3_set_gds_init(struct amdgpu_device *adev)
        switch (amdgpu_ip_version(adev, GC_HWIP, 0)) {
        case IP_VERSION(9, 4, 3):
        case IP_VERSION(9, 4, 4):
+       case IP_VERSION(9, 5, 0):
                /* deprecated for 9.4.3, no usage at all */
                adev->gds.gds_compute_max_wave_id = 0;
                break;
index ed8e130c7d195bd6c19d59fda4696717e3a7bf54..5470cef7e9bd172eea2f933365551ae40695d920 100644 (file)
@@ -368,7 +368,9 @@ static void gfxhub_v1_2_xcc_setup_vmid_config(struct amdgpu_device *adev,
                                        amdgpu_ip_version(adev, GC_HWIP, 0) ==
                                                IP_VERSION(9, 4, 3) ||
                                        amdgpu_ip_version(adev, GC_HWIP, 0) ==
-                                               IP_VERSION(9, 4, 4));
+                                               IP_VERSION(9, 4, 4) ||
+                                       amdgpu_ip_version(adev, GC_HWIP, 0) ==
+                                               IP_VERSION(9, 5, 0));
                        WREG32_SOC15_OFFSET(GC, GET_INST(GC, j), regVM_CONTEXT1_CNTL,
                                            i * hub->ctx_distance, tmp);
                        WREG32_SOC15_OFFSET(GC, GET_INST(GC, j),
index 1475d03ebb0578756e5ac09ba3c0a309a7a28964..1f95a5b15ea2e972ef56cab6a9d255541c87c0cd 100644 (file)
@@ -645,7 +645,8 @@ static int gmc_v9_0_process_interrupt(struct amdgpu_device *adev,
                soc15_ih_clientid_name[entry->client_id]);
 
        if (amdgpu_ip_version(adev, GC_HWIP, 0) == IP_VERSION(9, 4, 3) ||
-           amdgpu_ip_version(adev, GC_HWIP, 0) == IP_VERSION(9, 4, 4))
+           amdgpu_ip_version(adev, GC_HWIP, 0) == IP_VERSION(9, 4, 4) ||
+           amdgpu_ip_version(adev, GC_HWIP, 0) == IP_VERSION(9, 5, 0))
                dev_err(adev->dev, "  cookie node_id %d fault from die %s%d%s\n",
                        node_id, node_id % 4 == 3 ? "RSV" : "AID", node_id / 4,
                        node_id % 4 == 1 ? ".XCD0" : node_id % 4 == 2 ? ".XCD1" : "");
@@ -795,7 +796,8 @@ static bool gmc_v9_0_use_invalidate_semaphore(struct amdgpu_device *adev,
 {
        if (amdgpu_ip_version(adev, GC_HWIP, 0) == IP_VERSION(9, 4, 2) ||
            amdgpu_ip_version(adev, GC_HWIP, 0) == IP_VERSION(9, 4, 3) ||
-           amdgpu_ip_version(adev, GC_HWIP, 0) == IP_VERSION(9, 4, 4))
+           amdgpu_ip_version(adev, GC_HWIP, 0) == IP_VERSION(9, 4, 4) ||
+           amdgpu_ip_version(adev, GC_HWIP, 0) == IP_VERSION(9, 5, 0))
                return false;
 
        return ((vmhub == AMDGPU_MMHUB0(0) ||
@@ -1182,6 +1184,7 @@ static void gmc_v9_0_get_coherence_flags(struct amdgpu_device *adev,
                break;
        case IP_VERSION(9, 4, 3):
        case IP_VERSION(9, 4, 4):
+       case IP_VERSION(9, 5, 0):
                /* Only local VRAM BOs or system memory on non-NUMA APUs
                 * can be assumed to be local in their entirety. Choose
                 * MTYPE_NC as safe fallback for all system memory BOs on
@@ -1273,7 +1276,8 @@ static void gmc_v9_0_override_vm_pte_flags(struct amdgpu_device *adev,
         * memory can use more efficient MTYPEs.
         */
        if (amdgpu_ip_version(adev, GC_HWIP, 0) != IP_VERSION(9, 4, 3) &&
-           amdgpu_ip_version(adev, GC_HWIP, 0) != IP_VERSION(9, 4, 4))
+           amdgpu_ip_version(adev, GC_HWIP, 0) != IP_VERSION(9, 4, 4) &&
+           amdgpu_ip_version(adev, GC_HWIP, 0) != IP_VERSION(9, 5, 0))
                return;
 
        /* Only direct-mapped memory allows us to determine the NUMA node from
@@ -1549,7 +1553,8 @@ static void gmc_v9_0_set_mmhub_ras_funcs(struct amdgpu_device *adev)
 static void gmc_v9_0_set_gfxhub_funcs(struct amdgpu_device *adev)
 {
        if (amdgpu_ip_version(adev, GC_HWIP, 0) == IP_VERSION(9, 4, 3) ||
-           amdgpu_ip_version(adev, GC_HWIP, 0) == IP_VERSION(9, 4, 4))
+           amdgpu_ip_version(adev, GC_HWIP, 0) == IP_VERSION(9, 4, 4) ||
+           amdgpu_ip_version(adev, GC_HWIP, 0) == IP_VERSION(9, 5, 0))
                adev->gfxhub.funcs = &gfxhub_v1_2_funcs;
        else
                adev->gfxhub.funcs = &gfxhub_v1_0_funcs;
@@ -1790,6 +1795,7 @@ static int gmc_v9_0_mc_init(struct amdgpu_device *adev)
                case IP_VERSION(9, 4, 2):
                case IP_VERSION(9, 4, 3):
                case IP_VERSION(9, 4, 4):
+               case IP_VERSION(9, 5, 0):
                default:
                        adev->gmc.gart_size = 512ULL << 20;
                        break;
@@ -2068,7 +2074,8 @@ static int gmc_v9_0_sw_init(struct amdgpu_ip_block *ip_block)
        spin_lock_init(&adev->gmc.invalidate_lock);
 
        if (amdgpu_ip_version(adev, GC_HWIP, 0) == IP_VERSION(9, 4, 3) ||
-           amdgpu_ip_version(adev, GC_HWIP, 0) == IP_VERSION(9, 4, 4)) {
+           amdgpu_ip_version(adev, GC_HWIP, 0) == IP_VERSION(9, 4, 4) ||
+           amdgpu_ip_version(adev, GC_HWIP, 0) == IP_VERSION(9, 5, 0)) {
                gmc_v9_4_3_init_vram_info(adev);
        } else if (!adev->bios) {
                if (adev->flags & AMD_IS_APU) {
@@ -2152,6 +2159,7 @@ static int gmc_v9_0_sw_init(struct amdgpu_ip_block *ip_block)
                break;
        case IP_VERSION(9, 4, 3):
        case IP_VERSION(9, 4, 4):
+       case IP_VERSION(9, 5, 0):
                bitmap_set(adev->vmhubs_mask, AMDGPU_GFXHUB(0),
                                  NUM_XCC(adev->gfx.xcc_mask));
 
@@ -2218,7 +2226,8 @@ static int gmc_v9_0_sw_init(struct amdgpu_ip_block *ip_block)
        amdgpu_gmc_get_vbios_allocations(adev);
 
        if (amdgpu_ip_version(adev, GC_HWIP, 0) == IP_VERSION(9, 4, 3) ||
-           amdgpu_ip_version(adev, GC_HWIP, 0) == IP_VERSION(9, 4, 4)) {
+           amdgpu_ip_version(adev, GC_HWIP, 0) == IP_VERSION(9, 4, 4) ||
+           amdgpu_ip_version(adev, GC_HWIP, 0) == IP_VERSION(9, 5, 0)) {
                r = gmc_v9_0_init_mem_ranges(adev);
                if (r)
                        return r;
@@ -2248,7 +2257,8 @@ static int gmc_v9_0_sw_init(struct amdgpu_ip_block *ip_block)
                (amdgpu_ip_version(adev, GC_HWIP, 0) == IP_VERSION(9, 4, 1) ||
                 amdgpu_ip_version(adev, GC_HWIP, 0) == IP_VERSION(9, 4, 2) ||
                 amdgpu_ip_version(adev, GC_HWIP, 0) == IP_VERSION(9, 4, 3) ||
-                amdgpu_ip_version(adev, GC_HWIP, 0) == IP_VERSION(9, 4, 4)) ?
+                amdgpu_ip_version(adev, GC_HWIP, 0) == IP_VERSION(9, 4, 4) ||
+                amdgpu_ip_version(adev, GC_HWIP, 0) == IP_VERSION(9, 5, 0)) ?
                        3 :
                        8;
 
@@ -2261,7 +2271,8 @@ static int gmc_v9_0_sw_init(struct amdgpu_ip_block *ip_block)
                return r;
 
        if (amdgpu_ip_version(adev, GC_HWIP, 0) == IP_VERSION(9, 4, 3) ||
-           amdgpu_ip_version(adev, GC_HWIP, 0) == IP_VERSION(9, 4, 4))
+           amdgpu_ip_version(adev, GC_HWIP, 0) == IP_VERSION(9, 4, 4) ||
+           amdgpu_ip_version(adev, GC_HWIP, 0) == IP_VERSION(9, 5, 0))
                amdgpu_gmc_sysfs_init(adev);
 
        return 0;
@@ -2272,7 +2283,8 @@ static int gmc_v9_0_sw_fini(struct amdgpu_ip_block *ip_block)
        struct amdgpu_device *adev = ip_block->adev;
 
        if (amdgpu_ip_version(adev, GC_HWIP, 0) == IP_VERSION(9, 4, 3) ||
-           amdgpu_ip_version(adev, GC_HWIP, 0) == IP_VERSION(9, 4, 4))
+           amdgpu_ip_version(adev, GC_HWIP, 0) == IP_VERSION(9, 4, 4) ||
+           amdgpu_ip_version(adev, GC_HWIP, 0) == IP_VERSION(9, 5, 0))
                amdgpu_gmc_sysfs_fini(adev);
 
        amdgpu_gmc_ras_fini(adev);
index 5721ccda79058bd0ce20b344c55de866bd1a434d..8fad6b02c8df921c7fdf7a0f2b1fce8b0908d002 100644 (file)
@@ -1177,6 +1177,7 @@ static int soc15_common_early_init(struct amdgpu_ip_block *ip_block)
                break;
        case IP_VERSION(9, 4, 3):
        case IP_VERSION(9, 4, 4):
+       case IP_VERSION(9, 5, 0):
                adev->asic_funcs = &aqua_vanjaram_asic_funcs;
                adev->cg_flags =
                        AMD_CG_SUPPORT_GFX_MGCG | AMD_CG_SUPPORT_GFX_CGCG |