diff --git a/msm/dsi/dsi_ctrl.c b/msm/dsi/dsi_ctrl.c index 278e3dcbe921..122fb10c18a5 100644 --- a/msm/dsi/dsi_ctrl.c +++ b/msm/dsi/dsi_ctrl.c @@ -1,7 +1,7 @@ // SPDX-License-Identifier: GPL-2.0-only /* * Copyright (c) 2016-2021, The Linux Foundation. All rights reserved. - * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved. + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. */ #include @@ -229,10 +229,10 @@ static ssize_t debugfs_line_count_read(struct file *file, dsi_ctrl->cmd_trigger_frame); len += scnprintf((buf + len), max_len - len, "Command successful at line: %04x\n", - dsi_ctrl->cmd_success_line); + atomic_read(&dsi_ctrl->cmd_success_line)); len += scnprintf((buf + len), max_len - len, "Command successful at frame: %04x\n", - dsi_ctrl->cmd_success_frame); + atomic_read(&dsi_ctrl->cmd_success_frame)); mutex_unlock(&dsi_ctrl->ctrl_lock); @@ -2889,14 +2889,20 @@ static irqreturn_t dsi_ctrl_isr(int irq, void *ptr) if (status & DSI_CMD_MODE_DMA_DONE) { if (dsi_ctrl->enable_cmd_dma_stats) { - u32 reg = dsi_ctrl->hw.ops.log_line_count(&dsi_ctrl->hw, - dsi_ctrl->cmd_mode); - dsi_ctrl->cmd_success_line = (reg & 0xFFFF); - dsi_ctrl->cmd_success_frame = ((reg >> 16) & 0xFFFF); + if (dsi_ctrl->hw.ops.log_line_count[dsi_ctrl->disp_op]) + reg = + dsi_ctrl->hw.ops.log_line_count[dsi_ctrl->disp_op](&dsi_ctrl->hw, + dsi_ctrl->cmd_mode); + else + reg = 0; + atomic_set(&dsi_ctrl->cmd_success_line, (reg & 0xFFFF)); + atomic_set(&dsi_ctrl->cmd_success_frame, ((reg >> 16) & 0xFFFF)); SDE_EVT32(dsi_ctrl->cell_index, SDE_EVTLOG_FUNC_CASE1, dsi_ctrl->cmd_success_line, dsi_ctrl->cmd_success_frame); } + + atomic64_set(&dsi_ctrl->cmd_success_ts, ktime_get()); atomic_set(&dsi_ctrl->dma_irq_trig, 1); dsi_ctrl_disable_status_interrupt(dsi_ctrl, DSI_SINT_CMD_MODE_DMA_DONE); @@ -3481,6 +3487,7 @@ int dsi_ctrl_cmd_transfer(struct dsi_ctrl *dsi_ctrl, rc); } + cmd->ts = atomic64_read(&dsi_ctrl->cmd_success_ts); dsi_ctrl_update_state(dsi_ctrl, DSI_CTRL_OP_CMD_TX, 0x0); error: diff --git a/msm/dsi/dsi_ctrl.h b/msm/dsi/dsi_ctrl.h index a3290750520b..f66be7fb6b70 100644 --- a/msm/dsi/dsi_ctrl.h +++ b/msm/dsi/dsi_ctrl.h @@ -1,5 +1,6 @@ /* SPDX-License-Identifier: GPL-2.0-only */ /* + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. * Copyright (c) 2015-2020, The Linux Foundation. All rights reserved. */ @@ -309,8 +310,11 @@ struct dsi_ctrl { bool cmd_mode; u32 cmd_trigger_line; u32 cmd_trigger_frame; - u32 cmd_success_line; - u32 cmd_success_frame; + atomic_t cmd_success_line; + atomic_t cmd_success_frame; + u32 cmd_engine_refcount; + u32 pending_cmd_flags; + atomic64_t cmd_success_ts; }; /**