]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
drm/amdkfd: Added temporary changes for GFX12.
authorDavid Belanger <david.belanger@amd.com>
Wed, 10 May 2023 17:16:26 +0000 (13:16 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Thu, 2 May 2024 20:18:12 +0000 (16:18 -0400)
Added cases for GFX12 in switch statement, code relying on GFX11
implementation until GFX12 implementation is complete.

Signed-off-by: David Belanger <david.belanger@amd.com>
Reviewed-by: Harish Kasiviswanathan <Harish.Kasiviswanathan@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdkfd/kfd_device.c

index 822774c46d80791ade458776f7cd83d9966eacb8..035df2d8405ee11b03be0c290a7fa49880ed735a 100644 (file)
@@ -176,6 +176,11 @@ static void kfd_device_info_set_event_interrupt_class(struct kfd_dev *kfd)
        case IP_VERSION(11, 5, 1):
                kfd->device_info.event_interrupt_class = &event_interrupt_class_v11;
                break;
+       case IP_VERSION(12, 0, 0):
+       case IP_VERSION(12, 0, 1):
+               /* GFX12_TODO: Change to v12 version. */
+               kfd->device_info.event_interrupt_class = &event_interrupt_class_v11;
+               break;
        default:
                dev_warn(kfd_device, "v9 event interrupt handler is set due to "
                        "mismatch of gc ip block(GC_HWIP:0x%x).\n", gc_version);
@@ -437,6 +442,14 @@ struct kfd_dev *kgd2kfd_probe(struct amdgpu_device *adev, bool vf)
                        gfx_target_version = 110501;
                        f2g = &gfx_v11_kfd2kgd;
                        break;
+               case IP_VERSION(12, 0, 0):
+                       gfx_target_version = 120000;
+                       f2g = &gfx_v11_kfd2kgd; /* GFX12_TODO: Change to v12 when available. */
+                       break;
+               case IP_VERSION(12, 0, 1):
+                       gfx_target_version = 120001;
+                       f2g = &gfx_v11_kfd2kgd; /* GFX12_TODO: Change to v12 when available. */
+                       break;
                default:
                        break;
                }
@@ -511,12 +524,17 @@ static void kfd_cwsr_init(struct kfd_dev *kfd)
                                             > KFD_CWSR_TMA_OFFSET);
                        kfd->cwsr_isa = cwsr_trap_gfx10_hex;
                        kfd->cwsr_isa_size = sizeof(cwsr_trap_gfx10_hex);
-               } else {
+               } else if (KFD_GC_VERSION(kfd) < IP_VERSION(12, 0, 0)) {
                        /* The gfx11 cwsr trap handler must fit inside a single
                           page. */
                        BUILD_BUG_ON(sizeof(cwsr_trap_gfx11_hex) > PAGE_SIZE);
                        kfd->cwsr_isa = cwsr_trap_gfx11_hex;
                        kfd->cwsr_isa_size = sizeof(cwsr_trap_gfx11_hex);
+               } else {
+                       /* GFX12_TODO: Change to gfx12 struct when available. */
+                       BUILD_BUG_ON(sizeof(cwsr_trap_gfx11_hex) > PAGE_SIZE);
+                       kfd->cwsr_isa = cwsr_trap_gfx11_hex;
+                       kfd->cwsr_isa_size = sizeof(cwsr_trap_gfx11_hex);
                }
 
                kfd->cwsr_enabled = true;