msm: camera: common: Add private data in mini dump

Each driver can pass private data in mini dump callback register, so
when mini dump is invoked, the mini dump handler will pass the private
data to the callback associated with the driver. With the private data,
ICP driver can determine which mini dump callback corresponds to which
ICP device/hw mgr.

CRs-Fixed: 3353541
Change-Id: I85171aa7ba31f92c5620ddbd8de8a9c168398856
Signed-off-by: Sokchetra Eung <quic_eung@quicinc.com>
This commit is contained in:
Sokchetra Eung
2022-12-05 13:19:52 -08:00
committed by Camera Software Integration
parent 4d1434445f
commit d2e3088296
8 changed files with 32 additions and 21 deletions

View File

@@ -18,7 +18,7 @@
#include "cam_hw.h"
#if IS_REACHABLE(CONFIG_QCOM_VA_MINIDUMP)
#include <soc/qcom/minidump.h>
static struct cam_common_mini_dump_dev_info g_minidump_dev_info;
static struct cam_common_mini_dump_dev_info g_minidump_dev_info;
#endif
#define CAM_PRESIL_POLL_DELAY 20
@@ -191,7 +191,7 @@ static void cam_common_mini_dump_handler(void *dst, unsigned long len)
strlen(g_minidump_dev_info.name[i]));
md->waddr[i] = (void *)waddr;
bytes_written = g_minidump_dev_info.dump_cb[i](
(void *)waddr, remain_len);
(void *)waddr, remain_len, g_minidump_dev_info.priv_data[i]);
md->size[i] = bytes_written;
if (bytes_written >= len) {
CAM_WARN(CAM_UTIL, "No more space to dump");
@@ -234,9 +234,10 @@ static struct notifier_block cam_common_md_notify_blk = {
int cam_common_register_mini_dump_cb(
cam_common_mini_dump_cb mini_dump_cb,
uint8_t *dev_name)
uint8_t *dev_name, void *priv_data)
{
int rc = 0;
uint32_t idx;
if (g_minidump_dev_info.num_devs >= CAM_COMMON_MINI_DUMP_DEV_NUM) {
CAM_ERR(CAM_UTIL, "No free index available");
@@ -248,10 +249,12 @@ int cam_common_register_mini_dump_cb(
return -EINVAL;
}
g_minidump_dev_info.dump_cb[g_minidump_dev_info.num_devs] =
idx = g_minidump_dev_info.num_devs;
g_minidump_dev_info.dump_cb[idx] =
mini_dump_cb;
scnprintf(g_minidump_dev_info.name[g_minidump_dev_info.num_devs],
scnprintf(g_minidump_dev_info.name[idx],
CAM_COMMON_MINI_DUMP_DEV_NAME_LEN, dev_name);
g_minidump_dev_info.priv_data[idx] = priv_data;
g_minidump_dev_info.num_devs++;
if (!g_minidump_dev_info.is_registered) {
rc = qcom_va_md_register("Camera", &cam_common_md_notify_blk);