]> www.infradead.org Git - users/hch/configfs.git/commitdiff
drm/amdgpu: increase mes log buffer size for gfx12
authorMichael Chen <michael.chen@amd.com>
Tue, 23 Jul 2024 21:45:23 +0000 (17:45 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Sat, 27 Jul 2024 22:10:12 +0000 (18:10 -0400)
MES firmware requires larger log buffer for gfx12. Allocate
proper buffer respectively for gfx11 and gfx12.

Signed-off-by: Michael Chen <michael.chen@amd.com>
Acked-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
(cherry picked from commit 739d0f3e1f36738d4cd84166784a8f7a58d69612)

drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c
drivers/gpu/drm/amd/amdgpu/amdgpu_mes.h
drivers/gpu/drm/amd/amdgpu/mes_v11_0.c
drivers/gpu/drm/amd/amdgpu/mes_v12_0.c
drivers/gpu/drm/amd/include/mes_v11_api_def.h
drivers/gpu/drm/amd/include/mes_v12_api_def.h

index e499d6ba306b739b9189abb79b9286ede5f5932b..dac88d2dd70d432fd17337bde564aecadcfd45c2 100644 (file)
@@ -103,7 +103,7 @@ static int amdgpu_mes_event_log_init(struct amdgpu_device *adev)
        if (!amdgpu_mes_log_enable)
                return 0;
 
-       r = amdgpu_bo_create_kernel(adev, AMDGPU_MES_LOG_BUFFER_SIZE, PAGE_SIZE,
+       r = amdgpu_bo_create_kernel(adev, adev->mes.event_log_size, PAGE_SIZE,
                                    AMDGPU_GEM_DOMAIN_GTT,
                                    &adev->mes.event_log_gpu_obj,
                                    &adev->mes.event_log_gpu_addr,
@@ -113,7 +113,7 @@ static int amdgpu_mes_event_log_init(struct amdgpu_device *adev)
                return r;
        }
 
-       memset(adev->mes.event_log_cpu_addr, 0, PAGE_SIZE);
+       memset(adev->mes.event_log_cpu_addr, 0, adev->mes.event_log_size);
 
        return  0;
 
@@ -1573,7 +1573,7 @@ static int amdgpu_debugfs_mes_event_log_show(struct seq_file *m, void *unused)
        uint32_t *mem = (uint32_t *)(adev->mes.event_log_cpu_addr);
 
        seq_hex_dump(m, "", DUMP_PREFIX_OFFSET, 32, 4,
-                    mem, AMDGPU_MES_LOG_BUFFER_SIZE, false);
+                    mem, adev->mes.event_log_size, false);
 
        return 0;
 }
index e11051271f71db9a4d07aeb7f26ec03c174bfcc0..2d659c612f033f1a124ef1d1e8880b77c1a05285 100644 (file)
@@ -52,7 +52,6 @@ enum amdgpu_mes_priority_level {
 
 #define AMDGPU_MES_PROC_CTX_SIZE 0x1000 /* one page area */
 #define AMDGPU_MES_GANG_CTX_SIZE 0x1000 /* one page area */
-#define AMDGPU_MES_LOG_BUFFER_SIZE 0x4000 /* Maximu log buffer size for MES */
 
 struct amdgpu_mes_funcs;
 
@@ -135,8 +134,9 @@ struct amdgpu_mes {
        unsigned long                   *doorbell_bitmap;
 
        /* MES event log buffer */
-       struct amdgpu_bo                *event_log_gpu_obj;
-       uint64_t                        event_log_gpu_addr;
+       uint32_t                        event_log_size;
+       struct amdgpu_bo        *event_log_gpu_obj;
+       uint64_t                        event_log_gpu_addr;
        void                            *event_log_cpu_addr;
 
        /* ip specific functions */
index 8ce51b9236c1ae50331768745223786077b8b1d2..f9343642ae7e41135344b874256d745ac6af8aa0 100644 (file)
@@ -1163,6 +1163,8 @@ static int mes_v11_0_sw_init(void *handle)
        adev->mes.kiq_hw_init = &mes_v11_0_kiq_hw_init;
        adev->mes.kiq_hw_fini = &mes_v11_0_kiq_hw_fini;
 
+       adev->mes.event_log_size = AMDGPU_MES_LOG_BUFFER_SIZE;
+
        r = amdgpu_mes_init(adev);
        if (r)
                return r;
index c9f74231ad595158bf94b8761b95d9e148ed4535..0713bc3eb263ea2a1589a9e5e0a77259408088fc 100644 (file)
@@ -551,8 +551,10 @@ static int mes_v12_0_set_hw_resources(struct amdgpu_mes *mes)
        mes_set_hw_res_pkt.oversubscription_timer = 50;
        mes_set_hw_res_pkt.unmapped_doorbell_handling = 1;
 
-       mes_set_hw_res_pkt.enable_mes_event_int_logging = 0;
-       mes_set_hw_res_pkt.event_intr_history_gpu_mc_ptr = mes->event_log_gpu_addr;
+       if (amdgpu_mes_log_enable) {
+               mes_set_hw_res_pkt.enable_mes_event_int_logging = 1;
+               mes_set_hw_res_pkt.event_intr_history_gpu_mc_ptr = mes->event_log_gpu_addr;
+       }
 
        return mes_v12_0_submit_pkt_and_poll_completion(mes,
                        &mes_set_hw_res_pkt, sizeof(mes_set_hw_res_pkt),
@@ -1237,6 +1239,8 @@ static int mes_v12_0_sw_init(void *handle)
        adev->mes.kiq_hw_init = &mes_v12_0_kiq_hw_init;
        adev->mes.kiq_hw_fini = &mes_v12_0_kiq_hw_fini;
 
+       adev->mes.event_log_size = AMDGPU_MES_LOG_BUFFER_SIZE;
+
        r = amdgpu_mes_init(adev);
        if (r)
                return r;
index b72d5d3622512338797ed3e81dd3de7c196dcfed..21ceafce1f9b27c96486e14787505c64a4484f13 100644 (file)
@@ -28,6 +28,9 @@
 
 #define MES_API_VERSION 1
 
+/* Maximum log buffer size for MES. Needs to be updated if MES expands MES_EVT_INTR_HIST_LOG */
+#define  AMDGPU_MES_LOG_BUFFER_SIZE  0x4000
+
 /* Driver submits one API(cmd) as a single Frame and this command size is same
  * for all API to ease the debugging and parsing of ring buffer.
  */
index ffd67c6ed9b3702de090d0b9160ee8b70b665484..4cf2c9f30b3dc3dfd8734ed3b0c264566fd40a94 100644 (file)
@@ -28,6 +28,9 @@
 
 #define MES_API_VERSION 0x14
 
+/* Maximum log buffer size for MES. Needs to be updated if MES expands MES_EVT_INTR_HIST_LOG_12 */
+#define  AMDGPU_MES_LOG_BUFFER_SIZE  0xC000
+
 /* Driver submits one API(cmd) as a single Frame and this command size is same for all API
  * to ease the debugging and parsing of ring buffer.
  */