lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <d0ebcd6a-8368-4338-a386-fabddf8a7304@amd.com>
Date: Fri, 13 Jun 2025 10:43:08 +0800
From: "Du, Bin" <bin.du@....com>
To: mchehab@...nel.org, hverkuil@...all.nl,
 laurent.pinchart+renesas@...asonboard.com, bryan.odonoghue@...aro.org,
 sakari.ailus@...ux.intel.com, prabhakar.mahadev-lad.rj@...renesas.com,
 linux-media@...r.kernel.org, linux-kernel@...r.kernel.org
Cc: pratap.nirujogi@....com, benjamin.chan@....com, king.li@....com,
 gjorgji.rosikopulos@....com, Phil.Jawich@....com, Dominic.Antony@....com,
 Svetoslav.Stoilov@....com
Subject: Re: [PATCH v1 7/9] media: platform: amd: isp4 debug fs logging and
 more descriptive errors

Change-Id should be removed and will be fixed in V2

On 6/8/2025 10:49 PM, Bin Du wrote:
> Signed-off-by: Bin Du <Bin.Du@....com>
> Signed-off-by: Svetoslav Stoilov <Svetoslav.Stoilov@....com>
> Change-Id: I3ce167dbeb612b94c89df0b48f7ffa0988b5336f
> ---
>   drivers/media/platform/amd/isp4/Makefile      |   1 +
>   drivers/media/platform/amd/isp4/isp4.c        |   5 +
>   drivers/media/platform/amd/isp4/isp4_debug.c  | 272 ++++++++++++++++++
>   drivers/media/platform/amd/isp4/isp4_debug.h  |  41 +++
>   .../media/platform/amd/isp4/isp4_interface.c  |  37 ++-
>   drivers/media/platform/amd/isp4/isp4_subdev.c |  29 +-
>   6 files changed, 365 insertions(+), 20 deletions(-)
>   create mode 100644 drivers/media/platform/amd/isp4/isp4_debug.c
>   create mode 100644 drivers/media/platform/amd/isp4/isp4_debug.h
> 
> diff --git a/drivers/media/platform/amd/isp4/Makefile b/drivers/media/platform/amd/isp4/Makefile
> index a68f18fe79b4..da1e047cdb7d 100644
> --- a/drivers/media/platform/amd/isp4/Makefile
> +++ b/drivers/media/platform/amd/isp4/Makefile
> @@ -4,6 +4,7 @@
>   
>   obj-$(CONFIG_AMD_ISP4) += amd_capture.o
>   amd_capture-objs := isp4_subdev.o \
> +			isp4_debug.o \
>   			isp4_phy.o \
>   			isp4_interface.o \
>   			isp4.o	\
> diff --git a/drivers/media/platform/amd/isp4/isp4.c b/drivers/media/platform/amd/isp4/isp4.c
> index 3beb35293504..f7e716ec47da 100644
> --- a/drivers/media/platform/amd/isp4/isp4.c
> +++ b/drivers/media/platform/amd/isp4/isp4.c
> @@ -10,6 +10,7 @@
>   #include "amdgpu_object.h"
>   
>   #include "isp4.h"
> +#include "isp4_debug.h"
>   #include "isp4_hw.h"
>   
>   #define ISP4_DRV_NAME "amd_isp_capture"
> @@ -325,6 +326,8 @@ static int isp4_capture_probe(struct platform_device *pdev)
>   	pm_runtime_set_suspended(dev);
>   	pm_runtime_enable(dev);
>   
> +	isp_debugfs_create(isp_dev);
> +
>   	return 0;
>   
>   err_unreg_video_dev_notifier:
> @@ -342,6 +345,8 @@ static void isp4_capture_remove(struct platform_device *pdev)
>   {
>   	struct isp4_device *isp_dev = platform_get_drvdata(pdev);
>   
> +	isp_debugfs_remove(isp_dev);
> +
>   	v4l2_async_nf_unregister(&isp_dev->notifier);
>   	v4l2_async_nf_cleanup(&isp_dev->notifier);
>   	v4l2_device_unregister_subdev(&isp_dev->isp_sdev.sdev);
> diff --git a/drivers/media/platform/amd/isp4/isp4_debug.c b/drivers/media/platform/amd/isp4/isp4_debug.c
> new file mode 100644
> index 000000000000..0b8b1ad87525
> --- /dev/null
> +++ b/drivers/media/platform/amd/isp4/isp4_debug.c
> @@ -0,0 +1,272 @@
> +// SPDX-License-Identifier: GPL-2.0+
> +/*
> + * Copyright (C) 2025 Advanced Micro Devices, Inc.
> + */
> +
> +#include "isp4.h"
> +#include "isp4_debug.h"
> +#include "isp4_hw.h"
> +#include "isp4_interface.h"
> +
> +#define ISP4DBG_FW_LOG_RINGBUF_SIZE (2 * 1024 * 1024)
> +#define ISP4DBG_MACRO_2_STR(X) #X
> +#define ISP4DBG_MAX_ONE_TIME_LOG_LEN 510
> +
> +#ifdef CONFIG_DEBUG_FS
> +
> +void isp_debugfs_create(struct isp4_device *isp_dev)
> +{
> +	isp_dev->isp_sdev.debugfs_dir = debugfs_create_dir("amd_isp", NULL);
> +	debugfs_create_bool("fw_log_enable", 0644,
> +			    isp_dev->isp_sdev.debugfs_dir,
> +			    &isp_dev->isp_sdev.enable_fw_log);
> +	isp_dev->isp_sdev.fw_log_output =
> +		devm_kzalloc(&isp_dev->pdev->dev,
> +			     ISP4DBG_FW_LOG_RINGBUF_SIZE + 32,
> +			     GFP_KERNEL);
> +}
> +
> +void isp_debugfs_remove(struct isp4_device *isp_dev)
> +{
> +	debugfs_remove_recursive(isp_dev->isp_sdev.debugfs_dir);
> +	isp_dev->isp_sdev.debugfs_dir = NULL;
> +}
> +
> +static u32 isp_fw_fill_rb_log(struct isp4_subdev *isp, u8 *sys, u32 rb_size)
> +{
> +	struct isp4_interface *ispif = &isp->ispif;
> +	struct device *dev = isp->dev;
> +	u8 *buf = isp->fw_log_output;
> +	u32 rd_ptr, wr_ptr;
> +	u32 total_cnt = 0;
> +	u32 offset = 0;
> +	u32 cnt;
> +
> +	if (!sys || rb_size == 0)
> +		return 0;
> +
> +	mutex_lock(&ispif->isp4if_mutex);
> +
> +	rd_ptr = isp4hw_rreg(ISP4_GET_ISP_REG_BASE(isp), ISP_LOG_RB_RPTR0);
> +	wr_ptr = isp4hw_rreg(ISP4_GET_ISP_REG_BASE(isp), ISP_LOG_RB_WPTR0);
> +
> +	do {
> +		if (wr_ptr > rd_ptr)
> +			cnt = wr_ptr - rd_ptr;
> +		else if (wr_ptr < rd_ptr)
> +			cnt = rb_size - rd_ptr;
> +		else
> +			goto unlock_and_quit;
> +
> +		if (cnt > rb_size) {
> +			dev_err(dev, "fail bad fw log size %u\n", cnt);
> +			goto unlock_and_quit;
> +		}
> +
> +		memcpy(buf + offset, (u8 *)(sys + rd_ptr), cnt);
> +
> +		offset += cnt;
> +		total_cnt += cnt;
> +		rd_ptr = (rd_ptr + cnt) % rb_size;
> +	} while (rd_ptr < wr_ptr);
> +
> +	isp4hw_wreg(ISP4_GET_ISP_REG_BASE(isp), ISP_LOG_RB_RPTR0, rd_ptr);
> +
> +unlock_and_quit:
> +	mutex_unlock(&ispif->isp4if_mutex);
> +	return total_cnt;
> +}
> +
> +void isp_fw_log_print(struct isp4_subdev *isp)
> +{
> +	struct isp4_interface *ispif = &isp->ispif;
> +	char *fw_log_buf = isp->fw_log_output;
> +	u32 cnt;
> +
> +	if (!isp->enable_fw_log || !fw_log_buf)
> +		return;
> +
> +	cnt = isp_fw_fill_rb_log(isp, ispif->fw_log_buf->sys_addr,
> +				 ispif->fw_log_buf->mem_size);
> +
> +	if (cnt) {
> +		char temp_ch;
> +		char *str;
> +		char *end;
> +		char *line_end;
> +
> +		str = (char *)fw_log_buf;
> +		end = ((char *)fw_log_buf + cnt);
> +		fw_log_buf[cnt] = 0;
> +
> +		while (str < end) {
> +			line_end = strchr(str, 0x0A);
> +			if ((line_end && (str + ISP4DBG_MAX_ONE_TIME_LOG_LEN) >= line_end) ||
> +			    (!line_end && (str + ISP4DBG_MAX_ONE_TIME_LOG_LEN) >= end)) {
> +				if (line_end)
> +					*line_end = 0;
> +
> +				if (*str != '\0')
> +					dev_dbg(isp->dev,
> +						"%s", str);
> +
> +				if (line_end) {
> +					*line_end = 0x0A;
> +					str = line_end + 1;
> +				} else {
> +					break;
> +				}
> +			} else {
> +				u32 tmp_len = ISP4DBG_MAX_ONE_TIME_LOG_LEN;
> +
> +				temp_ch = str[tmp_len];
> +				str[tmp_len] = 0;
> +				dev_dbg(isp->dev, "%s", str);
> +				str[tmp_len] = temp_ch;
> +				str = &str[tmp_len];
> +			}
> +		}
> +	}
> +}
> +#endif
> +
> +char *isp4dbg_get_buf_src_str(u32 src)
> +{
> +	switch (src) {
> +	case BUFFER_SOURCE_STREAM:
> +		return ISP4DBG_MACRO_2_STR(BUFFER_SOURCE_STREAM);
> +	default:
> +		return "Unknown buf source";
> +	}
> +}
> +
> +char *isp4dbg_get_buf_done_str(u32 status)
> +{
> +	switch (status) {
> +	case BUFFER_STATUS_INVALID:
> +		return ISP4DBG_MACRO_2_STR(BUFFER_STATUS_INVALID);
> +	case BUFFER_STATUS_SKIPPED:
> +		return ISP4DBG_MACRO_2_STR(BUFFER_STATUS_SKIPPED);
> +	case BUFFER_STATUS_EXIST:
> +		return ISP4DBG_MACRO_2_STR(BUFFER_STATUS_EXIST);
> +	case BUFFER_STATUS_DONE:
> +		return ISP4DBG_MACRO_2_STR(BUFFER_STATUS_DONE);
> +	case BUFFER_STATUS_LACK:
> +		return ISP4DBG_MACRO_2_STR(BUFFER_STATUS_LACK);
> +	case BUFFER_STATUS_DIRTY:
> +		return ISP4DBG_MACRO_2_STR(BUFFER_STATUS_DIRTY);
> +	case BUFFER_STATUS_MAX:
> +		return ISP4DBG_MACRO_2_STR(BUFFER_STATUS_MAX);
> +	default:
> +		return "Unknown Buf Done Status";
> +	}
> +};
> +
> +char *isp4dbg_get_img_fmt_str(int fmt /* enum isp4fw_image_format * */)
> +{
> +	switch (fmt) {
> +	case IMAGE_FORMAT_NV12:
> +		return "NV12";
> +	case IMAGE_FORMAT_YUV422INTERLEAVED:
> +		return "YUV422INTERLEAVED";
> +	default:
> +		return "unknown fmt";
> +	}
> +}
> +
> +void isp4dbg_show_bufmeta_info(struct device *dev, char *pre,
> +			       void *in, void *orig_buf)
> +{
> +	struct isp4if_img_buf_info *orig;
> +	struct isp4fw_buffer_meta_info *p;
> +
> +	if (!in)
> +		return;
> +
> +	if (!pre)
> +		pre = "";
> +
> +	p = (struct isp4fw_buffer_meta_info *)in;
> +	orig = (struct isp4if_img_buf_info *)orig_buf;
> +
> +	dev_dbg(dev, "%s(%s) en:%d,stat:%s(%u),src:%s\n", pre,
> +		isp4dbg_get_img_fmt_str(p->image_prop.image_format),
> +		p->enabled, isp4dbg_get_buf_done_str(p->status), p->status,
> +		isp4dbg_get_buf_src_str(p->source));
> +
> +	dev_dbg(dev, "%p,0x%llx(%u) %p,0x%llx(%u) %p,0x%llx(%u)\n",
> +		orig->planes[0].sys_addr, orig->planes[0].mc_addr,
> +		orig->planes[0].len, orig->planes[1].sys_addr,
> +		orig->planes[1].mc_addr, orig->planes[1].len,
> +		orig->planes[2].sys_addr, orig->planes[2].mc_addr,
> +		orig->planes[2].len);
> +}
> +
> +char *isp4dbg_get_buf_type(u32 type)
> +{
> +	/* enum isp4fw_buffer_type */
> +	switch (type) {
> +	case BUFFER_TYPE_PREVIEW:
> +		return ISP4DBG_MACRO_2_STR(BUFFER_TYPE_PREVIEW);
> +	case BUFFER_TYPE_META_INFO:
> +		return ISP4DBG_MACRO_2_STR(BUFFER_TYPE_META_INFO);
> +	case BUFFER_TYPE_MEM_POOL:
> +		return ISP4DBG_MACRO_2_STR(BUFFER_TYPE_MEM_POOL);
> +	default:
> +		return "unknown type";
> +	}
> +}
> +
> +char *isp4dbg_get_cmd_str(u32 cmd)
> +{
> +	switch (cmd) {
> +	case CMD_ID_START_STREAM:
> +		return ISP4DBG_MACRO_2_STR(CMD_ID_START_STREAM);
> +	case CMD_ID_STOP_STREAM:
> +		return ISP4DBG_MACRO_2_STR(CMD_ID_STOP_STREAM);
> +	case CMD_ID_SEND_BUFFER:
> +		return ISP4DBG_MACRO_2_STR(CMD_ID_SEND_BUFFER);
> +	case CMD_ID_SET_STREAM_CONFIG:
> +		return ISP4DBG_MACRO_2_STR(CMD_ID_SET_STREAM_CONFIG);
> +	case CMD_ID_SET_OUT_CHAN_PROP:
> +		return ISP4DBG_MACRO_2_STR(CMD_ID_SET_OUT_CHAN_PROP);
> +	case CMD_ID_ENABLE_OUT_CHAN:
> +		return ISP4DBG_MACRO_2_STR(CMD_ID_ENABLE_OUT_CHAN);
> +	default:
> +		return "unknown cmd";
> +	};
> +}
> +
> +char *isp4dbg_get_resp_str(u32 cmd)
> +{
> +	switch (cmd) {
> +	case RESP_ID_CMD_DONE:
> +		return ISP4DBG_MACRO_2_STR(RESP_ID_CMD_DONE);
> +	case RESP_ID_NOTI_FRAME_DONE:
> +		return ISP4DBG_MACRO_2_STR(RESP_ID_NOTI_FRAME_DONE);
> +	default:
> +		return "unknown respid";
> +	};
> +}
> +
> +char *isp4dbg_get_if_stream_str(u32 stream /* enum fw_cmd_resp_stream_id */)
> +{
> +	switch (stream) {
> +	case ISP4IF_STREAM_ID_GLOBAL:
> +		return "STREAM_GLOBAL";
> +	case ISP4IF_STREAM_ID_1:
> +		return "STREAM1";
> +	default:
> +		return "unknown streamID";
> +	}
> +}
> +
> +char *isp4dbg_get_out_ch_str(int ch /* enum isp4fw_pipe_out_ch */)
> +{
> +	switch ((enum isp4fw_pipe_out_ch)ch) {
> +	case ISP_PIPE_OUT_CH_PREVIEW:
> +		return "prev";
> +	default:
> +		return "unknown channel";
> +	}
> +}
> diff --git a/drivers/media/platform/amd/isp4/isp4_debug.h b/drivers/media/platform/amd/isp4/isp4_debug.h
> new file mode 100644
> index 000000000000..acf99bf129ae
> --- /dev/null
> +++ b/drivers/media/platform/amd/isp4/isp4_debug.h
> @@ -0,0 +1,41 @@
> +/* SPDX-License-Identifier: GPL-2.0+ */
> +/*
> + * Copyright (C) 2025 Advanced Micro Devices, Inc.
> + */
> +
> +#ifndef _ISP4_DEBUG_H_
> +#define _ISP4_DEBUG_H_
> +
> +#include <linux/printk.h>
> +#include <linux/dev_printk.h>
> +
> +#include "isp4_subdev.h"
> +
> +#ifdef CONFIG_DEBUG_FS
> +struct isp4_device;
> +
> +void isp_debugfs_create(struct isp4_device *isp_dev);
> +void isp_debugfs_remove(struct isp4_device *isp_dev);
> +void isp_fw_log_print(struct isp4_subdev *isp);
> +
> +#else
> +
> +/*to avoid checkpatch warning*/
> +#define isp_debugfs_create(cam) cam
> +#define isp_debugfs_remove(cam) cam
> +#define isp_fw_log_print(isp) isp
> +
> +#endif /* CONFIG_DEBUG_FS */
> +
> +void isp4dbg_show_bufmeta_info(struct device *dev, char *pre, void *p,
> +			       void *orig_buf /* struct sys_img_buf_handle* */);
> +char *isp4dbg_get_img_fmt_str(int fmt /* enum _image_format_t * */);
> +char *isp4dbg_get_out_ch_str(int ch /* enum _isp_pipe_out_ch_t */);
> +char *isp4dbg_get_cmd_str(u32 cmd);
> +char *isp4dbg_get_buf_type(u32 type);/* enum _buffer_type_t */
> +char *isp4dbg_get_resp_str(u32 resp);
> +char *isp4dbg_get_buf_src_str(u32 src);
> +char *isp4dbg_get_buf_done_str(u32 status);
> +char *isp4dbg_get_if_stream_str(u32 stream);
> +
> +#endif
> diff --git a/drivers/media/platform/amd/isp4/isp4_interface.c b/drivers/media/platform/amd/isp4/isp4_interface.c
> index d46d7487a994..2a57707925cf 100644
> --- a/drivers/media/platform/amd/isp4/isp4_interface.c
> +++ b/drivers/media/platform/amd/isp4/isp4_interface.c
> @@ -7,6 +7,7 @@
>   
>   #include "amdgpu_object.h"
>   
> +#include "isp4_debug.h"
>   #include "isp4_fw_cmd_resp.h"
>   #include "isp4_hw.h"
>   #include "isp4_hw_reg.h"
> @@ -392,7 +393,8 @@ static int isp4if_insert_isp_fw_cmd(struct isp4_interface *ispif,
>   	len = rb_config->val_size;
>   
>   	if (isp4if_is_cmdq_rb_full(ispif, stream)) {
> -		dev_err(dev, "fail no cmdslot (%d)\n", stream);
> +		dev_err(dev, "fail no cmdslot %s(%d)\n",
> +			isp4dbg_get_if_stream_str(stream), stream);
>   		return -EINVAL;
>   	}
>   
> @@ -400,13 +402,15 @@ static int isp4if_insert_isp_fw_cmd(struct isp4_interface *ispif,
>   	rd_ptr = isp4hw_rreg(ispif->mmio, rreg);
>   
>   	if (rd_ptr > len) {
> -		dev_err(dev, "fail (%u),rd_ptr %u(should<=%u),wr_ptr %u\n",
> +		dev_err(dev, "fail %s(%u),rd_ptr %u(should<=%u),wr_ptr %u\n",
> +			isp4dbg_get_if_stream_str(stream),
>   			stream, rd_ptr, len, wr_ptr);
>   		return -EINVAL;
>   	}
>   
>   	if (wr_ptr > len) {
> -		dev_err(dev, "fail (%u),wr_ptr %u(should<=%u), rd_ptr %u\n",
> +		dev_err(dev, "fail %s(%u),wr_ptr %u(should<=%u), rd_ptr %u\n",
> +			isp4dbg_get_if_stream_str(stream),
>   			stream, wr_ptr, len, rd_ptr);
>   		return -EINVAL;
>   	}
> @@ -501,7 +505,8 @@ static int isp4if_send_fw_cmd(struct isp4_interface *ispif,
>   			rd_ptr = isp4hw_rreg(ispif->mmio, rreg);
>   			wr_ptr = isp4hw_rreg(ispif->mmio, wreg);
>   			dev_err(dev,
> -				"failed to get free cmdq slot, stream (%d)\n",
> +				"failed to get free cmdq slot, stream %s(%d)\n",
> +				isp4dbg_get_if_stream_str(stream),
>   				stream);
>   			return -ETIMEDOUT;
>   		}
> @@ -553,8 +558,8 @@ static int isp4if_send_fw_cmd(struct isp4_interface *ispif,
>   
>   	ret = isp4if_insert_isp_fw_cmd(ispif, stream, &cmd);
>   	if (ret) {
> -		dev_err(dev, "fail for insert_isp_fw_cmd camId (0x%08x)\n",
> -			cmd_id);
> +		dev_err(dev, "fail for insert_isp_fw_cmd camId %s(0x%08x)\n",
> +			isp4dbg_get_cmd_str(cmd_id), cmd_id);
>   		if (cmd_ele) {
>   			isp4if_rm_cmd_from_cmdq(ispif, cmd_ele->seq_num,
>   						cmd_ele->cmd_id);
> @@ -783,13 +788,15 @@ int isp4if_f2h_resp(struct isp4_interface *ispif,
>   	wr_ptr_dbg = wr_ptr;
>   
>   	if (rd_ptr > len) {
> -		dev_err(dev, "fail (%u),rd_ptr %u(should<=%u),wr_ptr %u\n",
> +		dev_err(dev, "fail %s(%u),rd_ptr %u(should<=%u),wr_ptr %u\n",
> +			isp4dbg_get_if_stream_str(stream),
>   			stream, rd_ptr, len, wr_ptr);
>   		return -EINVAL;
>   	}
>   
>   	if (wr_ptr > len) {
> -		dev_err(dev, "fail (%u),wr_ptr %u(should<=%u), rd_ptr %u\n",
> +		dev_err(dev, "fail %s(%u),wr_ptr %u(should<=%u), rd_ptr %u\n",
> +			isp4dbg_get_if_stream_str(stream),
>   			stream, wr_ptr, len, rd_ptr);
>   		return -EINVAL;
>   	}
> @@ -804,7 +811,8 @@ int isp4if_f2h_resp(struct isp4_interface *ispif,
>   				isp4hw_wreg(GET_ISP4IF_REG_BASE(ispif),
>   					    rreg, rd_ptr);
>   			} else {
> -				dev_err(dev, "(%u),rd %u(should<=%u),wr %u\n",
> +				dev_err(dev, "%s(%u),rd %u(should<=%u),wr %u\n",
> +					isp4dbg_get_if_stream_str(stream),
>   					stream, rd_ptr, len, wr_ptr);
>   				return -EINVAL;
>   			}
> @@ -832,7 +840,8 @@ int isp4if_f2h_resp(struct isp4_interface *ispif,
>   				isp4hw_wreg(GET_ISP4IF_REG_BASE(ispif),
>   					    rreg, rd_ptr);
>   			} else {
> -				dev_err(dev, "(%u),rd %u(should<=%u),wr %u\n",
> +				dev_err(dev, "%s(%u),rd %u(should<=%u),wr %u\n",
> +					isp4dbg_get_if_stream_str(stream),
>   					stream, rd_ptr, len, wr_ptr);
>   				return -EINVAL;
>   			}
> @@ -855,7 +864,8 @@ int isp4if_f2h_resp(struct isp4_interface *ispif,
>   				isp4hw_wreg(GET_ISP4IF_REG_BASE(ispif),
>   					    rreg, rd_ptr);
>   			} else {
> -				dev_err(dev, "(%u),rd %u(should<=%u),wr %u\n",
> +				dev_err(dev, "%s(%u),rd %u(should<=%u),wr %u\n",
> +					isp4dbg_get_if_stream_str(stream),
>   					stream, rd_ptr, len, wr_ptr);
>   				return -EINVAL;
>   			}
> @@ -872,9 +882,10 @@ int isp4if_f2h_resp(struct isp4_interface *ispif,
>   			checksum, response->resp_check_sum,
>   			rd_ptr_dbg, wr_ptr_dbg);
>   
> -		dev_err(dev, "(%u), seqNo %u, resp_id (0x%x)\n",
> -			stream,
> +		dev_err(dev, "%s(%u), seqNo %u, resp_id %s(0x%x)\n",
> +			isp4dbg_get_if_stream_str(stream), stream,
>   			response->resp_seq_num,
> +			isp4dbg_get_resp_str(response->resp_id),
>   			response->resp_id);
>   
>   		return -EINVAL;
> diff --git a/drivers/media/platform/amd/isp4/isp4_subdev.c b/drivers/media/platform/amd/isp4/isp4_subdev.c
> index 816fa3a127f5..11210b13cd02 100644
> --- a/drivers/media/platform/amd/isp4/isp4_subdev.c
> +++ b/drivers/media/platform/amd/isp4/isp4_subdev.c
> @@ -7,6 +7,7 @@
>   #include <linux/pm_domain.h>
>   #include <linux/pm_runtime.h>
>   
> +#include "isp4_debug.h"
>   #include "isp4_fw_cmd_resp.h"
>   #include "isp4_hw.h"
>   #include "isp4_interface.h"
> @@ -304,7 +305,9 @@ static int isp4sd_setup_output(struct isp4_subdev *isp_subdev,
>   		return -EINVAL;
>   	}
>   
> -	dev_dbg(dev, "channel: w:h=%u:%u,lp:%u,cp%u\n",
> +	dev_dbg(dev, "channel:%s,fmt %s,w:h=%u:%u,lp:%u,cp%u\n",
> +		isp4dbg_get_out_ch_str(cmd_ch_prop.ch),
> +		isp4dbg_get_img_fmt_str(cmd_ch_prop.image_prop.image_format),
>   		cmd_ch_prop.image_prop.width, cmd_ch_prop.image_prop.height,
>   		cmd_ch_prop.image_prop.luma_pitch,
>   		cmd_ch_prop.image_prop.chroma_pitch);
> @@ -327,6 +330,9 @@ static int isp4sd_setup_output(struct isp4_subdev *isp_subdev,
>   		return ret;
>   	}
>   
> +	dev_dbg(dev, "enable channel %s\n",
> +		isp4dbg_get_out_ch_str(cmd_ch_en.ch));
> +
>   	if (!sensor_info->start_stream_cmd_sent) {
>   		ret = isp4sd_kickoff_stream(isp_subdev, out_prop->width,
>   					    out_prop->height);
> @@ -489,8 +495,9 @@ static void isp4sd_fw_resp_cmd_done(struct isp4_subdev *isp_subdev,
>   		isp4if_rm_cmd_from_cmdq(ispif, para->cmd_seq_num, para->cmd_id);
>   	struct device *dev = isp_subdev->dev;
>   
> -	dev_dbg(dev, "stream %d,cmd (0x%08x)(%d),seq %u, ele %p\n",
> +	dev_dbg(dev, "stream %d,cmd %s(0x%08x)(%d),seq %u, ele %p\n",
>   		stream_id,
> +		isp4dbg_get_cmd_str(para->cmd_id),
>   		para->cmd_id, para->cmd_status, para->cmd_seq_num,
>   		ele);
>   
> @@ -551,8 +558,9 @@ isp4sd_preview_done(struct isp4_subdev *isp_subdev,
>   			pcb->preview.status = ISP4VID_BUF_DONE_STATUS_SUCCESS;
>   		}
>   	} else if (meta->preview.enabled) {
> -		dev_err(dev, "fail bad preview status %u\n",
> -			meta->preview.status);
> +		dev_err(dev, "fail bad preview status %u(%s)\n",
> +			meta->preview.status,
> +			isp4dbg_get_buf_done_str(meta->preview.status));
>   	}
>   
>   	return prev;
> @@ -612,14 +620,18 @@ static void isp4sd_fw_resp_frame_done(struct isp4_subdev *isp_subdev,
>   	pcb.poc = meta->poc;
>   	pcb.cam_id = 0;
>   
> -	dev_dbg(dev, "ts:%llu,streamId:%d,poc:%u,preview_en:%u,(%i)\n",
> +	dev_dbg(dev, "ts:%llu,streamId:%d,poc:%u,preview_en:%u,%s(%i)\n",
>   		ktime_get_ns(), stream_id, meta->poc,
>   		meta->preview.enabled,
> +		isp4dbg_get_buf_done_str(meta->preview.status),
>   		meta->preview.status);
>   
>   	prev = isp4sd_preview_done(isp_subdev, meta, &pcb);
> -	if (pcb.preview.status != ISP4VID_BUF_DONE_STATUS_ABSENT)
> +	if (pcb.preview.status != ISP4VID_BUF_DONE_STATUS_ABSENT) {
> +		isp4dbg_show_bufmeta_info(dev, "prev", &meta->preview,
> +					  &pcb.preview.buf);
>   		isp4vid_notify(&isp_subdev->isp_vdev, &pcb);
> +	}
>   
>   	isp4if_dealloc_buffer_node(prev);
>   
> @@ -640,6 +652,8 @@ static void isp4sd_fw_resp_func(struct isp4_subdev *isp_subdev,
>   	if (ispif->status < ISP4IF_STATUS_FW_RUNNING)
>   		return;
>   
> +	isp_fw_log_print(isp_subdev);
> +
>   	while (true) {
>   		s32 ret;
>   
> @@ -657,7 +671,8 @@ static void isp4sd_fw_resp_func(struct isp4_subdev *isp_subdev,
>   						  &resp.param.frame_done);
>   			break;
>   		default:
> -			dev_err(dev, "-><- fail respid (0x%x)\n",
> +			dev_err(dev, "-><- fail respid %s(0x%x)\n",
> +				isp4dbg_get_resp_str(resp.resp_id),
>   				resp.resp_id);
>   			break;
>   		}


Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ