From ace232eff50e8c898103c56b3b5303e776616274 Mon Sep 17 00:00:00 2001 From: YiPeng Chai Date: Tue, 30 Sep 2025 10:47:49 +0800 Subject: [PATCH] drm/amdgpu: Add ras module files into amdgpu Add ras module files into amdgpu. Signed-off-by: YiPeng Chai Reviewed-by: Tao Zhou Reviewed-by: Hawking Zhang Signed-off-by: Alex Deucher --- drivers/gpu/drm/amd/amdgpu/Makefile | 8 +++++++- drivers/gpu/drm/amd/amdgpu/amdgpu_ras.h | 1 + drivers/gpu/drm/amd/ras/ras_mgr/amdgpu_ras_cmd.c | 2 +- drivers/gpu/drm/amd/ras/ras_mgr/amdgpu_ras_mgr.c | 2 +- drivers/gpu/drm/amd/ras/ras_mgr/ras_sys.h | 1 + drivers/gpu/drm/amd/ras/rascore/ras_aca.c | 2 +- drivers/gpu/drm/amd/ras/rascore/ras_cmd.c | 9 ++------- drivers/gpu/drm/amd/ras/rascore/ras_core.c | 3 +-- drivers/gpu/drm/amd/ras/rascore/ras_log_ring.c | 4 ++-- drivers/gpu/drm/amd/ras/rascore/ras_mp1.c | 2 +- drivers/gpu/drm/amd/ras/rascore/ras_psp.c | 4 ++-- 11 files changed, 20 insertions(+), 18 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/Makefile b/drivers/gpu/drm/amd/amdgpu/Makefile index 64e7acff8f18d..ebe08947c5a32 100644 --- a/drivers/gpu/drm/amd/amdgpu/Makefile +++ b/drivers/gpu/drm/amd/amdgpu/Makefile @@ -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 diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.h index 6cf0dfd38be8b..9f21b6cf87245 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.h @@ -504,6 +504,7 @@ struct ras_critical_region { }; struct amdgpu_ras { + void *ras_mgr; /* ras infrastructure */ /* for ras itself. */ uint32_t features; diff --git a/drivers/gpu/drm/amd/ras/ras_mgr/amdgpu_ras_cmd.c b/drivers/gpu/drm/amd/ras/ras_mgr/amdgpu_ras_cmd.c index 195ca51a96d5a..4706e737969a1 100644 --- a/drivers/gpu/drm/amd/ras/ras_mgr/amdgpu_ras_cmd.c +++ b/drivers/gpu/drm/amd/ras/ras_mgr/amdgpu_ras_cmd.c @@ -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; diff --git a/drivers/gpu/drm/amd/ras/ras_mgr/amdgpu_ras_mgr.c b/drivers/gpu/drm/amd/ras/ras_mgr/amdgpu_ras_mgr.c index a038c87c045d8..e66d915831a96 100644 --- a/drivers/gpu/drm/amd/ras/ras_mgr/amdgpu_ras_mgr.c +++ b/drivers/gpu/drm/amd/ras/ras_mgr/amdgpu_ras_mgr.c @@ -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, diff --git a/drivers/gpu/drm/amd/ras/ras_mgr/ras_sys.h b/drivers/gpu/drm/amd/ras/ras_mgr/ras_sys.h index c48ff26525d6e..8156531a7b637 100644 --- a/drivers/gpu/drm/amd/ras/ras_mgr/ras_sys.h +++ b/drivers/gpu/drm/amd/ras/ras_mgr/ras_sys.h @@ -27,6 +27,7 @@ #include #include #include +#include #include "amdgpu.h" #define RAS_DEV_ERR(device, fmt, ...) \ diff --git a/drivers/gpu/drm/amd/ras/rascore/ras_aca.c b/drivers/gpu/drm/amd/ras/rascore/ras_aca.c index f9b8a1fa4f1fc..e433c70d29891 100644 --- a/drivers/gpu/drm/amd/ras/rascore/ras_aca.c +++ b/drivers/gpu/drm/amd/ras/rascore/ras_aca.c @@ -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); diff --git a/drivers/gpu/drm/amd/ras/rascore/ras_cmd.c b/drivers/gpu/drm/amd/ras/rascore/ras_cmd.c index 697619b30ea27..6fe3b115986c5 100644 --- a/drivers/gpu/drm/amd/ras/rascore/ras_cmd.c +++ b/drivers/gpu/drm/amd/ras/rascore/ras_cmd.c @@ -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; } diff --git a/drivers/gpu/drm/amd/ras/rascore/ras_core.c b/drivers/gpu/drm/amd/ras/rascore/ras_core.c index 41fc9f0d84e4f..45fc0608043f8 100644 --- a/drivers/gpu/drm/amd/ras/rascore/ras_core.c +++ b/drivers/gpu/drm/amd/ras/rascore/ras_core.c @@ -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; diff --git a/drivers/gpu/drm/amd/ras/rascore/ras_log_ring.c b/drivers/gpu/drm/amd/ras/rascore/ras_log_ring.c index bca094058f91f..d0621464f1a76 100644 --- a/drivers/gpu/drm/amd/ras/rascore/ras_log_ring.c +++ b/drivers/gpu/drm/amd/ras/rascore/ras_log_ring.c @@ -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) diff --git a/drivers/gpu/drm/amd/ras/rascore/ras_mp1.c b/drivers/gpu/drm/amd/ras/rascore/ras_mp1.c index 92f250e2466d5..f3321df850212 100644 --- a/drivers/gpu/drm/amd/ras/rascore/ras_mp1.c +++ b/drivers/gpu/drm/amd/ras/rascore/ras_mp1.c @@ -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; diff --git a/drivers/gpu/drm/amd/ras/rascore/ras_psp.c b/drivers/gpu/drm/amd/ras/rascore/ras_psp.c index c94effd4b1140..ccdb42d2dd605 100644 --- a/drivers/gpu/drm/amd/ras/rascore/ras_psp.c +++ b/drivers/gpu/drm/amd/ras/rascore/ras_psp.c @@ -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; -- 2.47.3