gpu: nvgpu: Disable fault mthd buf intrs on safety

Below CE interrupts are disabled on safety build as fault and
switch mechanism is not supported on safety:
NV_CE_LCE_INTR_STATUS_MTHD_BUFFER_FAULT
NV_CE_LCE_INTR_STATUS_FBUF_CRC_FAIL
NV_CE_LCE_INTR_STATUS_FBUF_MAGIC_CHK_FAIL

Bug 3548082

Change-Id: I400cd02a8c9888b7ef0d71bbc1f7d792b48e8227
Signed-off-by: Tejal Kudav <tkudav@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/c/linux-nvgpu/+/2679052
Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com>
This commit is contained in:
Tejal Kudav
2022-03-09 18:03:25 +00:00
committed by mobile promotions
parent 390df709ca
commit 3bfab5df3f
6 changed files with 14 additions and 14 deletions

View File

@@ -38,19 +38,19 @@
static u32 ce_lce_intr_mask(void) static u32 ce_lce_intr_mask(void)
{ {
/* Note: Poison error(fault containment) is not supported on GA10b. */ /* Note: Poison error(fault containment) is not supported on GA10b. */
u32 mask = ce_lce_intr_en_launcherr_m() | u32 mask =
#ifdef CONFIG_NVGPU_NONSTALL_INTR
ce_lce_intr_en_nonblockpipe_m() |
#endif
#ifdef CONFIG_NVGPU_HAL_NON_FUSA #ifdef CONFIG_NVGPU_HAL_NON_FUSA
ce_lce_intr_en_stalling_debug_m() | ce_lce_intr_en_stalling_debug_m() |
ce_lce_intr_en_blockpipe_m() | ce_lce_intr_en_blockpipe_m() |
ce_lce_intr_en_invalid_config_m() | ce_lce_intr_en_invalid_config_m() |
#endif
#ifdef CONFIG_NVGPU_NONSTALL_INTR
ce_lce_intr_en_nonblockpipe_m() |
#endif
ce_lce_intr_en_mthd_buffer_fault_m() | ce_lce_intr_en_mthd_buffer_fault_m() |
ce_lce_intr_en_fbuf_crc_fail_m() | ce_lce_intr_en_fbuf_crc_fail_m() |
ce_lce_intr_en_fbuf_magic_chk_fail_m(); ce_lce_intr_en_fbuf_magic_chk_fail_m() |
#endif
ce_lce_intr_en_launcherr_m();
return mask; return mask;
} }
@@ -192,6 +192,7 @@ void ga10b_ce_stall_isr(struct gk20a *g, u32 inst_id, u32 pri_base)
nvgpu_log(g, gpu_dbg_intr, "ce(%u) isr 0x%08x 0x%08x", inst_id, nvgpu_log(g, gpu_dbg_intr, "ce(%u) isr 0x%08x 0x%08x", inst_id,
ce_intr, inst_id); ce_intr, inst_id);
#ifdef CONFIG_NVGPU_HAL_NON_FUSA
/* /*
* Mismatch between the CRC entry in fault buffer and the * Mismatch between the CRC entry in fault buffer and the
* CRC computed from the methods in the buffer. * CRC computed from the methods in the buffer.
@@ -212,7 +213,6 @@ void ga10b_ce_stall_isr(struct gk20a *g, u32 inst_id, u32 pri_base)
clear_intr |= ce_intr_status_fbuf_magic_chk_fail_reset_f(); clear_intr |= ce_intr_status_fbuf_magic_chk_fail_reset_f();
} }
#ifdef CONFIG_NVGPU_HAL_NON_FUSA
/* /*
* The stalling_debug error interrupt is triggered when SW writes TRUE * The stalling_debug error interrupt is triggered when SW writes TRUE
* to NV_CE_LCE_OPT_EXT_DEBUG_TRIGGER_STALLING. * to NV_CE_LCE_OPT_EXT_DEBUG_TRIGGER_STALLING.

View File

@@ -1,7 +1,7 @@
/* /*
* Pascal GPU series Copy Engine. * Pascal GPU series Copy Engine.
* *
* Copyright (c) 2011-2022, NVIDIA CORPORATION. All rights reserved. * Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved.
* *
* Permission is hereby granted, free of charge, to any person obtaining a * Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"), * copy of this software and associated documentation files (the "Software"),

View File

@@ -67,7 +67,6 @@ void gv11b_ce_stall_isr(struct gk20a *g, u32 inst_id, u32 pri_base)
nvgpu_err(g, "ce: inst %d: invalid config", inst_id); nvgpu_err(g, "ce: inst %d: invalid config", inst_id);
clear_intr |= ce_intr_status_invalid_config_reset_f(); clear_intr |= ce_intr_status_invalid_config_reset_f();
} }
#endif
/* /*
* A MTHD_BUFFER_FAULT interrupt will be triggered if any access * A MTHD_BUFFER_FAULT interrupt will be triggered if any access
@@ -81,6 +80,7 @@ void gv11b_ce_stall_isr(struct gk20a *g, u32 inst_id, u32 pri_base)
nvgpu_err(g, "ce: inst %d: mthd buffer fault", inst_id); nvgpu_err(g, "ce: inst %d: mthd buffer fault", inst_id);
clear_intr |= ce_intr_status_mthd_buffer_fault_reset_f(); clear_intr |= ce_intr_status_mthd_buffer_fault_reset_f();
} }
#endif
nvgpu_writel(g, ce_intr_status_r(inst_id), clear_intr); nvgpu_writel(g, ce_intr_status_r(inst_id), clear_intr);

View File

@@ -627,6 +627,7 @@ struct nvgpu_err_hw_module ga10b_err_lut[] = {
INJECT_SW, INJECT_SW,
NULL, NULL, NULL, NULL,
NULL, NULL, 0, 0), NULL, NULL, 0, 0),
#ifdef CONFIG_NVGPU_NON_FUSA
GPU_CRITERR("ce_method_buffer_fault", GPU_CRITERR("ce_method_buffer_fault",
GPU_CE_METHOD_BUFFER_FAULT, GPU_CE_METHOD_BUFFER_FAULT,
INJECT_SW, INJECT_SW,
@@ -642,7 +643,6 @@ struct nvgpu_err_hw_module ga10b_err_lut[] = {
INJECT_NONE, INJECT_NONE,
NULL, NULL, NULL, NULL,
NULL, NULL, 0, 0), NULL, NULL, 0, 0),
#ifdef CONFIG_NVGPU_NON_FUSA
GPU_CRITERR("ce_invalid_config", GPU_CRITERR("ce_invalid_config",
GPU_CE_INVALID_CONFIG, GPU_CE_INVALID_CONFIG,
INJECT_SW, INJECT_SW,

View File

@@ -300,10 +300,10 @@ struct mmu_fault_info;
* @{ * @{
*/ */
#define GPU_CE_LAUNCH_ERROR (0x0) #define GPU_CE_LAUNCH_ERROR (0x0)
#ifdef CONFIG_NVGPU_NON_FUSA
#define GPU_CE_METHOD_BUFFER_FAULT (0x1) #define GPU_CE_METHOD_BUFFER_FAULT (0x1)
#define GPU_CE_FBUF_CRC_FAIL (0x2) #define GPU_CE_FBUF_CRC_FAIL (0x2)
#define GPU_CE_FBUF_MAGIC_CHK_FAIL (0x3) #define GPU_CE_FBUF_MAGIC_CHK_FAIL (0x3)
#ifdef CONFIG_NVGPU_NON_FUSA
#define GPU_CE_INVALID_CONFIG (0x4) #define GPU_CE_INVALID_CONFIG (0x4)
#endif #endif
/** /**

View File

@@ -207,8 +207,8 @@ int test_ce_stall_isr(struct unit_module *m, struct gk20a *g, void *args)
g->ops.ce.isr_stall = gv11b_ce_stall_isr; g->ops.ce.isr_stall = gv11b_ce_stall_isr;
for (inst_id = 0; inst_id < NUM_INST; inst_id++) { for (inst_id = 0; inst_id < NUM_INST; inst_id++) {
intr_status_written[inst_id] = 0; intr_status_written[inst_id] = 0;
/* all intr sources except (non)blockpipe as they are not supported on safety */ /* all intr sources except launcherr as they are not supported on safety */
intr_val = 0x14; intr_val = 0x4;
nvgpu_posix_io_writel_reg_space(g, ce_intr_status_r(inst_id), nvgpu_posix_io_writel_reg_space(g, ce_intr_status_r(inst_id),
intr_val); intr_val);
g->ops.ce.isr_stall(g, inst_id, 0); g->ops.ce.isr_stall(g, inst_id, 0);