diff options
author | PixelBot AutoMerger <android-nexus-securitybot@system.gserviceaccount.com> | 2022-12-19 01:15:55 -0800 |
---|---|---|
committer | SecurityBot <android-nexus-securitybot@system.gserviceaccount.com> | 2022-12-19 01:15:56 -0800 |
commit | 190bd94c1f25067b73ead73b017b22c3e4161dad (patch) | |
tree | 793d4f5352f1b2d60b0bb3e18c7b71f3f08b825f | |
parent | fb505dd6385d5815a5a51f8c9d5014f9974fa9be (diff) | |
parent | a89a64ba804d442fd399776521f2d868886b2afc (diff) | |
download | display-190bd94c1f25067b73ead73b017b22c3e4161dad.tar.gz |
Merge android13-gs-pixel-5.10-tm-qpr2 into android13-gs-pixel-5.10-tm-qpr3
SBMerger: 478053055
Change-Id: Ie1e9189d04b0a93e8e00ffe5d992f3d5e3fbd1f0
Signed-off-by: SecurityBot <android-nexus-securitybot@system.gserviceaccount.com>
-rw-r--r-- | include/trace/panel_trace.h | 76 | ||||
-rw-r--r-- | samsung/exynos_drm_decon.c | 7 | ||||
-rw-r--r-- | samsung/exynos_drm_dsim.c | 10 |
3 files changed, 90 insertions, 3 deletions
diff --git a/include/trace/panel_trace.h b/include/trace/panel_trace.h new file mode 100644 index 0000000..adeb44d --- /dev/null +++ b/include/trace/panel_trace.h @@ -0,0 +1,76 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Panel command trace support + * + * Copyright (C) 2022 Google, Inc. + */ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM panel + +#if !defined(_PANEL_TRACE_H_) || defined(TRACE_HEADER_MULTI_READ) +#define _PANEL_TRACE_H_ + +#include <linux/tracepoint.h> + +TRACE_EVENT_CONDITION(dsi_tx, + TP_PROTO(u8 type, const u8 *tx_buf, size_t length, bool last), + TP_ARGS(type, tx_buf, length, last), + TP_CONDITION(length > 0), + TP_STRUCT__entry( + __field( u8, type ) + __dynamic_array(u8, tx_buf, length ) + __field( bool, last ) + ), + TP_fast_assign( + __entry->type = type; + memcpy(__get_dynamic_array(tx_buf), tx_buf, length); + __entry->last = last; + ), + TP_printk("type=0x%02x length=%u last=%d tx=[%s]", __entry->type, + __get_dynamic_array_len(tx_buf), __entry->last, + __print_hex(__get_dynamic_array(tx_buf), + __get_dynamic_array_len(tx_buf))) +); + +TRACE_EVENT_CONDITION(dsi_rx, + TP_PROTO(u8 cmd, const u8 *rx_buf, size_t length), + TP_ARGS(cmd, rx_buf, length), + TP_CONDITION(length > 0), + TP_STRUCT__entry( + __field( u8, cmd ) + __dynamic_array(u8, rx_buf, length ) + ), + TP_fast_assign( + __entry->cmd = cmd; + memcpy(__get_dynamic_array(rx_buf), rx_buf, length); + ), + TP_printk("cmd=0x%02x length=%u rx=[%s]", __entry->cmd, + __get_dynamic_array_len(rx_buf), + __print_hex(__get_dynamic_array(rx_buf), + __get_dynamic_array_len(rx_buf))) +); + +TRACE_EVENT(dsi_cmd_fifo_status, + TP_PROTO(u8 header, u16 payload), + TP_ARGS(header, payload), + TP_STRUCT__entry( + __field(u8, header ) + __field(u16, payload) + ), + TP_fast_assign( + __entry->header = header; + __entry->payload = payload; + ), + TP_printk("header=%d payload=%d", __entry->header, __entry->payload) +); + +#endif /* _PANEL_TRACE_H_ */ + +#undef TRACE_INCLUDE_PATH +#define TRACE_INCLUDE_PATH trace/. + +#undef TRACE_INCLUDE_FILE +#define TRACE_INCLUDE_FILE panel_trace + +/* This part must be outside protection */ +#include <trace/define_trace.h> diff --git a/samsung/exynos_drm_decon.c b/samsung/exynos_drm_decon.c index b7461c2..48cc79a 100644 --- a/samsung/exynos_drm_decon.c +++ b/samsung/exynos_drm_decon.c @@ -103,14 +103,17 @@ void decon_dump(const struct decon_device *decon) continue; if (d->state != DECON_STATE_ON) { - drm_printf(&p, "%s[%u]: DECON disabled(%d)\n", - decon->dev->driver->name, decon->id, decon->state); + drm_printf(&p, "%s[%u]: DECON state is not On(%d)\n", + d->dev->driver->name, d->id, d->state); continue; } __decon_dump(&p, d->id, &d->regs, d->config.dsc.enabled, d->dqe != NULL); } + if (decon->state != DECON_STATE_ON) + return; + for (i = 0; i < decon->dpp_cnt; ++i) dpp_dump(&p, decon->dpp[i]); diff --git a/samsung/exynos_drm_dsim.c b/samsung/exynos_drm_dsim.c index 14cccdc..9ff30f3 100644 --- a/samsung/exynos_drm_dsim.c +++ b/samsung/exynos_drm_dsim.c @@ -56,6 +56,8 @@ #include <regs-dsim.h> #include <trace/dpu_trace.h> +#define CREATE_TRACE_POINTS +#include <trace/panel_trace.h> #include "exynos_drm_connector.h" #include "exynos_drm_crtc.h" @@ -2051,6 +2053,7 @@ dsim_write_data(struct dsim_device *dsim, const struct mipi_dsi_msg *msg) is_last = true; } + trace_dsi_tx(msg->type, msg->tx_buf, msg->tx_len, is_last); dsim_debug(dsim, "%s last command\n", is_last ? "" : "Not"); if (is_last) { @@ -2091,6 +2094,7 @@ dsim_write_data(struct dsim_device *dsim, const struct mipi_dsi_msg *msg) } err: + trace_dsi_cmd_fifo_status(dsim->total_pend_ph, dsim->total_pend_pl); DPU_ATRACE_END(__func__); return ret; } @@ -2099,16 +2103,18 @@ static int dsim_req_read_command(struct dsim_device *dsim, const struct mipi_dsi_msg *msg) { struct mipi_dsi_packet packet; + const u8 rx_len = msg->rx_len & 0xff; dsim_reg_clear_int(dsim->id, DSIM_INTSRC_SFR_PH_FIFO_EMPTY); reinit_completion(&dsim->ph_wr_comp); - + trace_dsi_tx(MIPI_DSI_SET_MAXIMUM_RETURN_PACKET_SIZE, &rx_len, 1, true); /* set the maximum packet size returned */ dsim_reg_wr_tx_header(dsim->id, MIPI_DSI_SET_MAXIMUM_RETURN_PACKET_SIZE, msg->rx_len, 0, false); /* read request */ mipi_dsi_create_packet(&packet, msg); + trace_dsi_tx(msg->type, msg->tx_buf, msg->tx_len, true); dsim_reg_wr_tx_header(dsim->id, packet.header[0], packet.header[1], packet.header[2], true); @@ -2121,6 +2127,7 @@ dsim_read_data(struct dsim_device *dsim, const struct mipi_dsi_msg *msg) u32 rx_fifo, rx_size = 0; int i = 0, ret = 0; u8 *rx_buf = msg->rx_buf; + const u8 *tx_buf = msg->tx_buf; if (msg->rx_len > MAX_RX_FIFO) { dsim_err(dsim, "invalid rx len(%lu) max(%d)\n", msg->rx_len, @@ -2205,6 +2212,7 @@ dsim_read_data(struct dsim_device *dsim, const struct mipi_dsi_msg *msg) } while (!dsim_reg_rx_fifo_is_empty(dsim->id) && --retry_cnt); } + trace_dsi_rx(tx_buf[0], rx_buf, rx_size); return rx_size; } |