Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/amdgpu: Add ras module files into amdgpu

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>

authored by

YiPeng Chai and committed by
Alex Deucher
ace232ef 42f14878

+20 -18
+7 -1
drivers/gpu/drm/amd/amdgpu/Makefile
··· 37 37 -I$(FULL_AMD_DISPLAY_PATH)/modules/inc \ 38 38 -I$(FULL_AMD_DISPLAY_PATH)/dc \ 39 39 -I$(FULL_AMD_DISPLAY_PATH)/amdgpu_dm \ 40 - -I$(FULL_AMD_PATH)/amdkfd 40 + -I$(FULL_AMD_PATH)/amdkfd \ 41 + -I$(FULL_AMD_PATH)/ras/ras_mgr 41 42 42 43 # Locally disable W=1 warnings enabled in drm subsystem Makefile 43 44 subdir-ccflags-y += -Wno-override-init ··· 324 323 isp_v4_1_0.o \ 325 324 isp_v4_1_1.o 326 325 endif 326 + 327 + AMD_GPU_RAS_PATH := ../ras 328 + AMD_GPU_RAS_FULL_PATH := $(FULL_AMD_PATH)/ras 329 + include $(AMD_GPU_RAS_FULL_PATH)/Makefile 330 + amdgpu-y += $(AMD_GPU_RAS_FILES) 327 331 328 332 obj-$(CONFIG_DRM_AMDGPU)+= amdgpu.o
+1
drivers/gpu/drm/amd/amdgpu/amdgpu_ras.h
··· 504 504 }; 505 505 506 506 struct amdgpu_ras { 507 + void *ras_mgr; 507 508 /* ras infrastructure */ 508 509 /* for ras itself. */ 509 510 uint32_t features;
+1 -1
drivers/gpu/drm/amd/ras/ras_mgr/amdgpu_ras_cmd.c
··· 68 68 if (!dev_handle || (dev_handle == RAS_CMD_DEV_HANDLE_MAGIC)) 69 69 return NULL; 70 70 71 - ras_core = (struct ras_core_context *)(dev_handle ^ RAS_CMD_DEV_HANDLE_MAGIC); 71 + ras_core = (struct ras_core_context *)(uintptr_t)(dev_handle ^ RAS_CMD_DEV_HANDLE_MAGIC); 72 72 73 73 if (ras_cmd_get_dev_handle(ras_core) == dev_handle) 74 74 return ras_core;
+1 -1
drivers/gpu/drm/amd/ras/ras_mgr/amdgpu_ras_mgr.c
··· 373 373 return (struct amdgpu_ras_mgr *)adev->psp.ras_context.ras->ras_mgr; 374 374 } 375 375 376 - static const struct amd_ip_funcs ras_v1_0_ip_funcs = { 376 + static const struct amd_ip_funcs __maybe_unused ras_v1_0_ip_funcs = { 377 377 .name = "ras_v1_0", 378 378 .sw_init = amdgpu_ras_mgr_sw_init, 379 379 .sw_fini = amdgpu_ras_mgr_sw_fini,
+1
drivers/gpu/drm/amd/ras/ras_mgr/ras_sys.h
··· 27 27 #include <linux/stdarg.h> 28 28 #include <linux/printk.h> 29 29 #include <linux/dev_printk.h> 30 + #include <linux/mempool.h> 30 31 #include "amdgpu.h" 31 32 32 33 #define RAS_DEV_ERR(device, fmt, ...) \
+1 -1
drivers/gpu/drm/amd/ras/rascore/ras_aca.c
··· 350 350 struct aca_bank_ecc bank_ecc; 351 351 struct ras_log_batch_tag *batch_tag = NULL; 352 352 u32 count = 0; 353 - int ret; 353 + int ret = 0; 354 354 int i; 355 355 356 356 mutex_lock(&ras_core->ras_aca.bank_op_lock);
+2 -7
drivers/gpu/drm/amd/ras/rascore/ras_cmd.c
··· 32 32 { 33 33 INIT_LIST_HEAD(&ras_core->ras_cmd.head); 34 34 ras_core->ras_cmd.ras_core = ras_core; 35 - ras_core->ras_cmd.dev_handle = (uint64_t)ras_core ^ RAS_CMD_DEV_HANDLE_MAGIC; 35 + ras_core->ras_cmd.dev_handle = (uintptr_t)ras_core ^ RAS_CMD_DEV_HANDLE_MAGIC; 36 36 return 0; 37 37 } 38 38 ··· 212 212 if (!req->buf_size || !req->buf_ptr || !req->cper_num) 213 213 return RAS_CMD__ERROR_INVALID_INPUT_DATA; 214 214 215 - if (!access_ok((void *)req->buf_ptr, req->buf_size)) { 216 - RAS_DEV_ERR(ras_core->dev, "Invalid cper buffer memory!\n"); 217 - return RAS_CMD__ERROR_INVALID_INPUT_DATA; 218 - } 219 - 220 215 buffer = kzalloc(req->buf_size, GFP_KERNEL); 221 216 if (!buffer) 222 217 return RAS_CMD__ERROR_GENERIC; ··· 235 240 } 236 241 237 242 if ((ret && (ret != -ENOMEM)) || 238 - copy_to_user((void *)req->buf_ptr, buffer, offset)) { 243 + copy_to_user(u64_to_user_ptr(req->buf_ptr), buffer, offset)) { 239 244 kfree(buffer); 240 245 return RAS_CMD__ERROR_GENERIC; 241 246 }
+1 -2
drivers/gpu/drm/amd/ras/rascore/ras_core.c
··· 68 68 int seconds_per_minute = 60; 69 69 int days, remaining_seconds; 70 70 71 - days = timestamp / seconds_per_day; 72 - remaining_seconds = timestamp % seconds_per_day; 71 + days = div64_u64_rem(timestamp, seconds_per_day, (uint64_t *)&remaining_seconds); 73 72 74 73 /* utc_timestamp follows the Unix epoch */ 75 74 year = 1970;
+2 -2
drivers/gpu/drm/amd/ras/rascore/ras_log_ring.c
··· 67 67 { 68 68 struct ras_log_ring *log_ring = &ras_core->ras_log_ring; 69 69 unsigned long flags = 0; 70 - int ret; 70 + int ret = 0; 71 71 72 72 if (batch_tag && (batch_tag->sub_seqno >= MAX_RECORD_PER_BATCH)) { 73 73 RAS_DEV_ERR(ras_core->dev, ··· 200 200 { 201 201 struct ras_log_ring *log_ring = &ras_core->ras_log_ring; 202 202 struct ras_log_batch_tag *batch_tag; 203 - unsigned long flags; 203 + unsigned long flags = 0; 204 204 205 205 batch_tag = kzalloc(sizeof(*batch_tag), GFP_KERNEL); 206 206 if (!batch_tag)
+1 -1
drivers/gpu/drm/amd/ras/rascore/ras_mp1.c
··· 52 52 } 53 53 54 54 int ras_mp1_dump_bank(struct ras_core_context *ras_core, 55 - enum ras_err_type type, u32 idx, u32 reg_idx, u64 *val) 55 + u32 type, u32 idx, u32 reg_idx, u64 *val) 56 56 { 57 57 struct ras_mp1 *mp1 = &ras_core->ras_mp1; 58 58
+2 -2
drivers/gpu/drm/amd/ras/rascore/ras_psp.c
··· 173 173 174 174 ras_ring_wptr_dw = psp->ip_func->psp_ras_ring_wptr_get(ras_core); 175 175 176 - return (ras_ring_wptr_dw << 2) / sizeof(struct psp_gfx_rb_frame); 176 + return div64_u64((ras_ring_wptr_dw << 2), sizeof(struct psp_gfx_rb_frame)); 177 177 } 178 178 179 179 static int __set_ring_frame_slot(struct ras_core_context *ras_core, ··· 200 200 return -ENOMEM; 201 201 202 202 max_frame_slot = 203 - ring_mem->mem_size / sizeof(struct psp_gfx_rb_frame); 203 + div64_u64(ring_mem->mem_size, sizeof(struct psp_gfx_rb_frame)); 204 204 205 205 rb_frame = 206 206 (struct psp_gfx_rb_frame *)ring_mem->mem_cpu_addr;