mirror of
git://nv-tegra.nvidia.com/linux-nvgpu.git
synced 2025-12-23 01:50:07 +03:00
gpu: nvgpu: print riscv pmu pc trace
- To print pmu RISCV PC trace, create a new flag which will be set to true after PMU is initialised. - This flag is then used to used to print RISCV trace buffer when pmu halt occurrs. JIRA NVGPU-7261 Change-Id: Ib3ad2f40efd1458d22b21e99ab151c11cfeb43be Signed-off-by: Divya <dsinghatwari@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/c/linux-nvgpu/+/2624073 Reviewed-by: svcacv <svcacv@nvidia.com> Reviewed-by: Mahantesh Kumbar <mkumbar@nvidia.com> Reviewed-by: svc-mobile-coverity <svc-mobile-coverity@nvidia.com> Reviewed-by: svc-mobile-cert <svc-mobile-cert@nvidia.com> Reviewed-by: Vijayakumar Subbu <vsubbu@nvidia.com> Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> GVS: Gerrit_Virtual_Submit Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
This commit is contained in:
@@ -69,6 +69,9 @@ int nvgpu_falcon_dbg_buf_init(struct nvgpu_falcon *flcn,
|
|||||||
debug_buffer->first_msg_received = false;
|
debug_buffer->first_msg_received = false;
|
||||||
debug_buffer->read_offset = 0;
|
debug_buffer->read_offset = 0;
|
||||||
|
|
||||||
|
/* upon initialisation set the flag to false for all falcon */
|
||||||
|
nvgpu_falcon_dbg_error_print_enable(flcn, false);
|
||||||
|
|
||||||
if (debug_buffer->local_buf == NULL) {
|
if (debug_buffer->local_buf == NULL) {
|
||||||
/*
|
/*
|
||||||
* Allocate memory for nvgpu-side debug buffer, used for copies
|
* Allocate memory for nvgpu-side debug buffer, used for copies
|
||||||
@@ -359,7 +362,17 @@ int nvgpu_falcon_dbg_buf_display(struct nvgpu_falcon *flcn)
|
|||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
nvgpu_falcon_dbg(g, "Flcn-%d Async: %s", flcn->flcn_id, curr_data);
|
/*
|
||||||
|
* if the flag is set to true print the riscv
|
||||||
|
* buffer as error
|
||||||
|
*/
|
||||||
|
if (debug_buffer->is_prints_as_err == true) {
|
||||||
|
nvgpu_err(g, "Flcn-%d Async: %s", flcn->flcn_id,
|
||||||
|
curr_data);
|
||||||
|
} else {
|
||||||
|
nvgpu_falcon_dbg(g, "Flcn-%d Async: %s",
|
||||||
|
flcn->flcn_id, curr_data);
|
||||||
|
}
|
||||||
|
|
||||||
/* Cleanup in case we had to allocate a temp buffer */
|
/* Cleanup in case we had to allocate a temp buffer */
|
||||||
if (tmp_buf != NULL) {
|
if (tmp_buf != NULL) {
|
||||||
@@ -376,3 +389,10 @@ int nvgpu_falcon_dbg_buf_display(struct nvgpu_falcon *flcn)
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void nvgpu_falcon_dbg_error_print_enable(struct nvgpu_falcon *flcn, bool enable)
|
||||||
|
{
|
||||||
|
struct nvgpu_falcon_dbg_buf *debug_buffer = &flcn->debug_buffer;
|
||||||
|
|
||||||
|
debug_buffer->is_prints_as_err = enable;
|
||||||
|
}
|
||||||
|
|||||||
@@ -485,6 +485,16 @@ static int pmu_process_init_msg(struct nvgpu_pmu *pmu,
|
|||||||
nvgpu_pmu_set_fw_ready(g, pmu, true);
|
nvgpu_pmu_set_fw_ready(g, pmu, true);
|
||||||
|
|
||||||
nvgpu_pmu_fw_state_change(g, pmu, PMU_FW_STATE_INIT_RECEIVED, true);
|
nvgpu_pmu_fw_state_change(g, pmu, PMU_FW_STATE_INIT_RECEIVED, true);
|
||||||
|
|
||||||
|
#ifdef CONFIG_NVGPU_FALCON_DEBUG
|
||||||
|
/*
|
||||||
|
* set the flag true after PMU is initialised.
|
||||||
|
* This will be used to print debug buffer data
|
||||||
|
* when any error on PMU occurs
|
||||||
|
*/
|
||||||
|
nvgpu_falcon_dbg_error_print_enable(pmu->flcn, true);
|
||||||
|
#endif
|
||||||
|
|
||||||
exit:
|
exit:
|
||||||
nvgpu_pmu_dbg(g, "init received end, err %x", err);
|
nvgpu_pmu_dbg(g, "init received end, err %x", err);
|
||||||
return err;
|
return err;
|
||||||
|
|||||||
@@ -127,8 +127,9 @@ int nvgpu_pmu_destroy(struct gk20a *g, struct nvgpu_pmu *pmu)
|
|||||||
nvgpu_pmu_set_fw_ready(g, pmu, false);
|
nvgpu_pmu_set_fw_ready(g, pmu, false);
|
||||||
nvgpu_pmu_lsfm_clean(g, pmu, pmu->lsfm);
|
nvgpu_pmu_lsfm_clean(g, pmu, pmu->lsfm);
|
||||||
pmu->pmu_perfmon->perfmon_ready = false;
|
pmu->pmu_perfmon->perfmon_ready = false;
|
||||||
|
#ifdef CONFIG_NVGPU_FALCON_DEBUG
|
||||||
|
nvgpu_falcon_dbg_error_print_enable(pmu->flcn, false);
|
||||||
|
#endif
|
||||||
nvgpu_log_fn(g, "done");
|
nvgpu_log_fn(g, "done");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -233,6 +233,9 @@ struct nvgpu_falcon_dbg_buf {
|
|||||||
|
|
||||||
/* Set once nvgpu get the first message from FLCN */
|
/* Set once nvgpu get the first message from FLCN */
|
||||||
bool first_msg_received;
|
bool first_msg_received;
|
||||||
|
|
||||||
|
/* flag to print buffer when PMU error occurs */
|
||||||
|
bool is_prints_as_err;
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -798,6 +801,21 @@ void nvgpu_falcon_dbg_buf_destroy(struct nvgpu_falcon *flcn);
|
|||||||
* @return '0' if contents logged successfully, error otherwise.
|
* @return '0' if contents logged successfully, error otherwise.
|
||||||
*/
|
*/
|
||||||
int nvgpu_falcon_dbg_buf_display(struct nvgpu_falcon *flcn);
|
int nvgpu_falcon_dbg_buf_display(struct nvgpu_falcon *flcn);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Enable/Disable falcon error print support
|
||||||
|
*
|
||||||
|
* @param flcn [in] The falcon.
|
||||||
|
* @param enable [in] true/false value to enable/disable error print
|
||||||
|
* support.
|
||||||
|
*
|
||||||
|
* This function sets the flag with true/false which respectively
|
||||||
|
* enables or disables the falcon error print support. This is used to
|
||||||
|
* print pc trace values when error is hit.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
void nvgpu_falcon_dbg_error_print_enable(struct nvgpu_falcon *flcn, bool enable);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user