]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/amdgpu: Add ras module files into amdgpu
authorYiPeng Chai <YiPeng.Chai@amd.com>
Tue, 30 Sep 2025 02:47:49 +0000 (10:47 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Mon, 13 Oct 2025 18:14:36 +0000 (14:14 -0400)
Add ras module files into amdgpu.

Signed-off-by: YiPeng Chai <YiPeng.Chai@amd.com>
Reviewed-by: Tao Zhou <tao.zhou1@amd.com>
Reviewed-by: Hawking Zhang <Hawking.Zhang@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/Makefile
drivers/gpu/drm/amd/amdgpu/amdgpu_ras.h
drivers/gpu/drm/amd/ras/ras_mgr/amdgpu_ras_cmd.c
drivers/gpu/drm/amd/ras/ras_mgr/amdgpu_ras_mgr.c
drivers/gpu/drm/amd/ras/ras_mgr/ras_sys.h
drivers/gpu/drm/amd/ras/rascore/ras_aca.c
drivers/gpu/drm/amd/ras/rascore/ras_cmd.c
drivers/gpu/drm/amd/ras/rascore/ras_core.c
drivers/gpu/drm/amd/ras/rascore/ras_log_ring.c
drivers/gpu/drm/amd/ras/rascore/ras_mp1.c
drivers/gpu/drm/amd/ras/rascore/ras_psp.c

index 64e7acff8f18d2c379ff5f658399fa787e60f98a..ebe08947c5a3258b159a00f2f4d6aa3d09646f04 100644 (file)
@@ -37,7 +37,8 @@ ccflags-y := -I$(FULL_AMD_PATH)/include/asic_reg \
        -I$(FULL_AMD_DISPLAY_PATH)/modules/inc \
        -I$(FULL_AMD_DISPLAY_PATH)/dc \
        -I$(FULL_AMD_DISPLAY_PATH)/amdgpu_dm \
-       -I$(FULL_AMD_PATH)/amdkfd
+       -I$(FULL_AMD_PATH)/amdkfd \
+       -I$(FULL_AMD_PATH)/ras/ras_mgr
 
 # Locally disable W=1 warnings enabled in drm subsystem Makefile
 subdir-ccflags-y += -Wno-override-init
@@ -324,4 +325,9 @@ amdgpu-y += \
        isp_v4_1_1.o
 endif
 
+AMD_GPU_RAS_PATH := ../ras
+AMD_GPU_RAS_FULL_PATH := $(FULL_AMD_PATH)/ras
+include $(AMD_GPU_RAS_FULL_PATH)/Makefile
+amdgpu-y += $(AMD_GPU_RAS_FILES)
+
 obj-$(CONFIG_DRM_AMDGPU)+= amdgpu.o
index 6cf0dfd38be8b56e2576df5947cae270e01b7dd5..9f21b6cf87245e230e22ecf1d4ff75a02c13f844 100644 (file)
@@ -504,6 +504,7 @@ struct ras_critical_region {
 };
 
 struct amdgpu_ras {
+       void *ras_mgr;
        /* ras infrastructure */
        /* for ras itself. */
        uint32_t features;
index 195ca51a96d5ade82a4ec03c2a154e5e475ebb89..4706e737969a10f815c159f03db59ee803331ea9 100644 (file)
@@ -68,7 +68,7 @@ static struct ras_core_context *ras_cmd_get_ras_core(uint64_t dev_handle)
        if (!dev_handle || (dev_handle == RAS_CMD_DEV_HANDLE_MAGIC))
                return NULL;
 
-       ras_core = (struct ras_core_context *)(dev_handle ^ RAS_CMD_DEV_HANDLE_MAGIC);
+       ras_core = (struct ras_core_context *)(uintptr_t)(dev_handle ^ RAS_CMD_DEV_HANDLE_MAGIC);
 
        if (ras_cmd_get_dev_handle(ras_core) == dev_handle)
                return ras_core;
index a038c87c045d81ed7537619b673b6f6b50e068f9..e66d915831a96ff169456e68c51ca6474de5d28f 100644 (file)
@@ -373,7 +373,7 @@ struct amdgpu_ras_mgr *amdgpu_ras_mgr_get_context(struct amdgpu_device *adev)
        return (struct amdgpu_ras_mgr *)adev->psp.ras_context.ras->ras_mgr;
 }
 
-static const struct amd_ip_funcs ras_v1_0_ip_funcs = {
+static const struct amd_ip_funcs __maybe_unused ras_v1_0_ip_funcs = {
        .name = "ras_v1_0",
        .sw_init = amdgpu_ras_mgr_sw_init,
        .sw_fini = amdgpu_ras_mgr_sw_fini,
index c48ff26525d6e0709a55d3169889eb4a6f137246..8156531a7b63770556769b29e65d5e5357a595ed 100644 (file)
@@ -27,6 +27,7 @@
 #include <linux/stdarg.h>
 #include <linux/printk.h>
 #include <linux/dev_printk.h>
+#include <linux/mempool.h>
 #include "amdgpu.h"
 
 #define RAS_DEV_ERR(device, fmt, ...)                                               \
index f9b8a1fa4f1fc57cc0bb2e53e91891a22ba30b61..e433c70d2989128a090bbdb2bb9d1876c7fce33d 100644 (file)
@@ -350,7 +350,7 @@ static int aca_banks_update(struct ras_core_context *ras_core,
        struct aca_bank_ecc bank_ecc;
        struct ras_log_batch_tag *batch_tag = NULL;
        u32 count = 0;
-       int ret;
+       int ret = 0;
        int i;
 
        mutex_lock(&ras_core->ras_aca.bank_op_lock);
index 697619b30ea270ed3fad16e9339f05861a7cf185..6fe3b115986c598c46d8ab69625f59a41c23bf5a 100644 (file)
@@ -32,7 +32,7 @@ static int ras_cmd_add_device(struct ras_core_context *ras_core)
 {
        INIT_LIST_HEAD(&ras_core->ras_cmd.head);
        ras_core->ras_cmd.ras_core = ras_core;
-       ras_core->ras_cmd.dev_handle = (uint64_t)ras_core ^ RAS_CMD_DEV_HANDLE_MAGIC;
+       ras_core->ras_cmd.dev_handle = (uintptr_t)ras_core ^ RAS_CMD_DEV_HANDLE_MAGIC;
        return 0;
 }
 
@@ -212,11 +212,6 @@ static int ras_cmd_get_cper_records(struct ras_core_context *ras_core,
        if (!req->buf_size || !req->buf_ptr || !req->cper_num)
                return RAS_CMD__ERROR_INVALID_INPUT_DATA;
 
-       if (!access_ok((void *)req->buf_ptr, req->buf_size)) {
-               RAS_DEV_ERR(ras_core->dev, "Invalid cper buffer memory!\n");
-               return RAS_CMD__ERROR_INVALID_INPUT_DATA;
-       }
-
        buffer = kzalloc(req->buf_size, GFP_KERNEL);
        if (!buffer)
                return RAS_CMD__ERROR_GENERIC;
@@ -240,7 +235,7 @@ static int ras_cmd_get_cper_records(struct ras_core_context *ras_core,
        }
 
        if ((ret && (ret != -ENOMEM)) ||
-               copy_to_user((void *)req->buf_ptr, buffer, offset)) {
+               copy_to_user(u64_to_user_ptr(req->buf_ptr), buffer, offset)) {
                kfree(buffer);
                return RAS_CMD__ERROR_GENERIC;
        }
index 41fc9f0d84e4fc20b34f54762e1903e9673f9566..45fc0608043f853e34f21ac30343f759f77228ae 100644 (file)
@@ -68,8 +68,7 @@ int ras_core_convert_timestamp_to_time(struct ras_core_context *ras_core,
        int seconds_per_minute = 60;
        int days, remaining_seconds;
 
-       days = timestamp / seconds_per_day;
-       remaining_seconds = timestamp % seconds_per_day;
+       days = div64_u64_rem(timestamp, seconds_per_day, (uint64_t *)&remaining_seconds);
 
        /* utc_timestamp follows the Unix epoch */
        year = 1970;
index bca094058f91f196abadec150b610c1920096a71..d0621464f1a760bd76d90136232d95fb35725908 100644 (file)
@@ -67,7 +67,7 @@ static int ras_log_ring_add_data(struct ras_core_context *ras_core,
 {
        struct ras_log_ring *log_ring = &ras_core->ras_log_ring;
        unsigned long flags = 0;
-       int ret;
+       int ret = 0;
 
        if (batch_tag && (batch_tag->sub_seqno >= MAX_RECORD_PER_BATCH)) {
                RAS_DEV_ERR(ras_core->dev,
@@ -200,7 +200,7 @@ struct ras_log_batch_tag *ras_log_ring_create_batch_tag(struct ras_core_context
 {
        struct ras_log_ring *log_ring = &ras_core->ras_log_ring;
        struct ras_log_batch_tag *batch_tag;
-       unsigned long flags;
+       unsigned long flags = 0;
 
        batch_tag = kzalloc(sizeof(*batch_tag), GFP_KERNEL);
        if (!batch_tag)
index 92f250e2466d5091b680ba69331d7c32404929b7..f3321df85021252dc31599a7961328978f6f0257 100644 (file)
@@ -52,7 +52,7 @@ int ras_mp1_get_bank_count(struct ras_core_context *ras_core,
 }
 
 int ras_mp1_dump_bank(struct ras_core_context *ras_core,
-               enum ras_err_type type, u32 idx, u32 reg_idx, u64 *val)
+               u32 type, u32 idx, u32 reg_idx, u64 *val)
 {
        struct ras_mp1 *mp1 = &ras_core->ras_mp1;
 
index c94effd4b1140ba43bba6210c9175b64ab4ec67f..ccdb42d2dd60524378b4178765a754b84fa2e4f9 100644 (file)
@@ -173,7 +173,7 @@ static uint32_t __get_ring_frame_slot(struct ras_core_context *ras_core)
 
        ras_ring_wptr_dw = psp->ip_func->psp_ras_ring_wptr_get(ras_core);
 
-       return (ras_ring_wptr_dw << 2) / sizeof(struct psp_gfx_rb_frame);
+       return div64_u64((ras_ring_wptr_dw << 2), sizeof(struct psp_gfx_rb_frame));
 }
 
 static int __set_ring_frame_slot(struct ras_core_context *ras_core,
@@ -200,7 +200,7 @@ static int write_frame_to_ras_psp_ring(struct ras_core_context *ras_core,
                return -ENOMEM;
 
        max_frame_slot =
-               ring_mem->mem_size / sizeof(struct psp_gfx_rb_frame);
+               div64_u64(ring_mem->mem_size, sizeof(struct psp_gfx_rb_frame));
 
        rb_frame =
                (struct psp_gfx_rb_frame *)ring_mem->mem_cpu_addr;