Files
BPI-CM9-Linux/aml-patches/aml-comp/hardware/amlogic/arm-isp-6.12/0003-camera-fix-imx290-offline-mode-1-1.patch

188 lines
7.7 KiB
Diff

From 4e08d0b46eeb6d91d96662ea2158de0365930455 Mon Sep 17 00:00:00 2001
From: "zhiwei.zhang" <zhiwei.zhang@amlogic.com>
Date: Mon, 17 Aug 2026 02:42:53 +0000
Subject: [PATCH 3/3] camera: fix imx290 offline mode [1/1]
PD#SWPL-268952
PD#SWPL-283894
Problem:
1. imx290 offline mode fail on csi-b port.
2. too many log
Solution:
1. yun tnr alloc buffer with up aligned size.
2. using dev_dbg for debug log.
Verify:
a9
Change-Id: I5c991993040c968aba8d230b44310efbe47d2fd7
Signed-off-by: zhiwei.zhang <zhiwei.zhang@amlogic.com>
---
aml_isp5/driver/isp5/c4-isp-cap.c | 6 ------
aml_isp5/driver/isp5/c4-isp-core.c | 10 +++++-----
aml_isp5/driver/isp5/c4-isp-dev.c | 20 ++++++++++++--------
aml_isp5/driver/isp5/hw/c4-isp-hw.c | 8 ++++----
aml_isp5/driver/isp5/hw/c4-isp-rdma.c | 6 +++---
5 files changed, 24 insertions(+), 26 deletions(-)
diff --git a/aml_isp5/driver/isp5/c4-isp-cap.c b/aml_isp5/driver/isp5/c4-isp-cap.c
index fa3909d7..b520dbee 100644
--- a/aml_isp5/driver/isp5/c4-isp-cap.c
+++ b/aml_isp5/driver/isp5/c4-isp-cap.c
@@ -694,12 +694,6 @@ static int c4_isp_v4l2_ctrl_init(struct c4_isp_capture *cap)
v4l2_ctrl_new_custom(hdl, &v4l2_ctrl_output_fps, NULL);
cap->vdev.ctrl_handler = hdl;
- rtn = v4l2_ctrl_handler_setup(cap->vdev.ctrl_handler);
- if (rtn)
- {
- dev_err(cap->isp->dev, "Could not sync v4l2 controls\n");
- return rtn;
- }
if (hdl->error)
{
diff --git a/aml_isp5/driver/isp5/c4-isp-core.c b/aml_isp5/driver/isp5/c4-isp-core.c
index 2946b6fe..077ab2c0 100644
--- a/aml_isp5/driver/isp5/c4-isp-core.c
+++ b/aml_isp5/driver/isp5/c4-isp-core.c
@@ -452,7 +452,7 @@ static int c4_isp_core_yuvtnr_alloc_buffer(struct c4_isp_core *core,
size_t size;
int ret;
- size = DIV_ROUND_UP(fmt->width, 4) * DIV_ROUND_UP(fmt->height, 4) * 2;
+ size = ALIGN(DIV_ROUND_UP(fmt->width, 4), C4_ISP_WMIF_STRIDE_ALIGN_BYTES) * DIV_ROUND_UP(fmt->height, 4) * 2;
core->bnr_mn.offset = 0;
ret = c4_isp_core_alloc_buffer(core, &core->bnr_mn, size);
if (ret) {
@@ -460,17 +460,17 @@ static int c4_isp_core_yuvtnr_alloc_buffer(struct c4_isp_core *core,
goto err_bnr_ds4_free_buffer;
}
- size = DIV_ROUND_UP(fmt->width, 16) * DIV_ROUND_UP(fmt->height, 4) * C4_ISP_YUV420_PLNAE0_TARGET;
- size = ALIGN(size, 16);
+ size = DIV_ROUND_UP(fmt->width, 16) * C4_ISP_YUV420_PLNAE0_TARGET * 10 / 8;
+ size = ALIGN(size, C4_ISP_WMIF_STRIDE_ALIGN_BYTES) * DIV_ROUND_UP(fmt->height, 4);
core->yuvnr_body.offset = size;
- size += DIV_ROUND_UP(fmt->width, 16) * DIV_ROUND_UP(fmt->height, 8) * C4_ISP_YUV420_PLNAE1_TARGET;
+ size += ALIGN(DIV_ROUND_UP(fmt->width, 16) * C4_ISP_YUV420_PLNAE1_TARGET * 10 / 8, 64) * DIV_ROUND_UP(fmt->height, 8);
ret = c4_isp_core_alloc_buffer(core, &core->yuvnr_body, size);
if (ret) {
dev_err(core->isp->dev, "Failed to alloc yuvnr body buffer: %d\n", ret);
goto err_yuvnr_body_free_buffer;
}
- size = DIV_ROUND_UP(fmt->width, 8) * DIV_ROUND_UP(fmt->height, 8) * 2;
+ size = ALIGN(DIV_ROUND_UP(fmt->width, 8), C4_ISP_WMIF_STRIDE_ALIGN_BYTES) * DIV_ROUND_UP(fmt->height, 8) * 2;
core->yuvnr_alp.offset = 0;
ret = c4_isp_core_alloc_buffer(core, &core->yuvnr_alp, size);
if (ret) {
diff --git a/aml_isp5/driver/isp5/c4-isp-dev.c b/aml_isp5/driver/isp5/c4-isp-dev.c
index 2c6518c2..a83920ff 100644
--- a/aml_isp5/driver/isp5/c4-isp-dev.c
+++ b/aml_isp5/driver/isp5/c4-isp-dev.c
@@ -440,11 +440,14 @@ static int c4_isp_rdma_alloc_febe_buffs(struct c4_isp_device *isp)
isp->febe_rdma_orig = febe_rdma_orig;
- dev_info(isp->dev, "Febe_rdma-(orig/base): 0x%llx, 0x%llx\n",
- isp->febe_rdma_orig->dma_addr, isp->febe_rdma_base.dma_addr);
- dev_info(isp->dev, "Febe_rdma-(fdn/init/cfg): 0x%llx, 0x%llx, 0x%llx\n",
- isp->febe_rdma_fdn.dma_addr, isp->febe_rdma_init.dma_addr,
- isp->febe_rdma_cfg.dma_addr);
+ dev_dbg(isp->dev, "Febe_rdma-(orig/base): 0x%llx~0x%llx, 0x%llx~0x%llx\n",
+ isp->febe_rdma_orig->dma_addr, isp->febe_rdma_orig->dma_addr + C4_FEBE_RDMA_BASE_SIZE,
+ isp->febe_rdma_base.dma_addr, isp->febe_rdma_base.dma_addr + C4_FEBE_RDMA_BASE_SIZE);
+
+ dev_dbg(isp->dev, "Febe_rdma-(fdn/init/cfg): 0x%llx~0x%llx, 0x%llx~0x%llx, 0x%llx~0x%llx\n",
+ isp->febe_rdma_fdn.dma_addr, isp->febe_rdma_fdn.dma_addr + C4_FEBE_RDMA_FDN_SIZE,
+ isp->febe_rdma_init.dma_addr, isp->febe_rdma_init.dma_addr + C4_FEBE_RDMA_CFG_SIZE,
+ isp->febe_rdma_cfg.dma_addr, isp->febe_rdma_cfg.dma_addr + C4_FEBE_RDMA_CFG_SIZE);
return 0;
@@ -500,9 +503,10 @@ static int c4_isp_rdma_alloc_disp_buffs(struct c4_isp_device *isp)
isp->disp_rdma_orig = disp_rdma_orig;
- dev_info(isp->dev, "Disp_rdma-(orig/base/init): 0x%llx, 0x%llx, 0x%llx\n",
- isp->disp_rdma_orig->dma_addr, isp->disp_rdma_base.dma_addr,
- isp->disp_rdma_init.dma_addr);
+ dev_dbg(isp->dev, "Disp_rdma-(orig/base/init): 0x%llx~0x%llx, 0x%llx~0x%llx, 0x%llx~0x%llx\n",
+ isp->disp_rdma_orig->dma_addr, isp->disp_rdma_orig->dma_addr + C4_DISP_RDMA_BASE_SIZE,
+ isp->disp_rdma_base.dma_addr, isp->disp_rdma_base.dma_addr + C4_DISP_RDMA_INIT_SIZE,
+ isp->disp_rdma_init.dma_addr, isp->disp_rdma_init.dma_addr + C4_DISP_RDMA_INIT_SIZE);
return 0;
diff --git a/aml_isp5/driver/isp5/hw/c4-isp-hw.c b/aml_isp5/driver/isp5/hw/c4-isp-hw.c
index e4a4cc58..16d1da25 100644
--- a/aml_isp5/driver/isp5/hw/c4-isp-hw.c
+++ b/aml_isp5/driver/isp5/hw/c4-isp-hw.c
@@ -1006,12 +1006,12 @@ int c4_isp_calc_dyn_core_tile(struct c4_isp_device *isp,
core_tile->ovbgn[i] = opp_tile->ovbgn[i];
core_tile->ovend[i] = opp_tile->ovend[i];
- dev_info(isp->dev, "Tile dyn idx %u, in: %u-%u-%u-%u, out: %u-%u-%u-%u\n", i,
+ dev_dbg(isp->dev, "Tile dyn idx %u, in: %u-%u-%u-%u, out: %u-%u-%u-%u\n", i,
core_tile->ihbgn[i], core_tile->ihend[i], core_tile->ivbgn[i], core_tile->ivend[i],
core_tile->ohbgn[i], core_tile->ohend[i], core_tile->ovbgn[i], core_tile->ovend[i]);
}
- dev_info(isp->dev, "Tile dyn ovlp: [%u, %u, %u, %u], hnum %u, vnum %u\n",
+ dev_dbg(isp->dev, "Tile dyn ovlp: [%u, %u, %u, %u], hnum %u, vnum %u\n",
core_tile->ovlap[0], core_tile->ovlap[1],
core_tile->ovlap[2], core_tile->ovlap[3],
core_tile->hnum, core_tile->vnum);
@@ -1115,12 +1115,12 @@ void c4_isp_calc_avg_core_tile(struct c4_isp_device *isp,
core_tile->ovend[i] = fmt->height - 1;
}
- dev_info(isp->dev, "Tile calc index %u, in: %u-%u-%u-%u, out: %u-%u-%u-%u\n", i,
+ dev_dbg(isp->dev, "Tile calc index %u, in: %u-%u-%u-%u, out: %u-%u-%u-%u\n", i,
core_tile->ihbgn[i], core_tile->ihend[i], core_tile->ivbgn[i], core_tile->ivend[i],
core_tile->ohbgn[i], core_tile->ohend[i], core_tile->ovbgn[i], core_tile->ovend[i]);
}
- dev_info(isp->dev, "Tile calc overlap: [%u, %u, %u, %u]\n",
+ dev_dbg(isp->dev, "Tile calc overlap: [%u, %u, %u, %u]\n",
core_tile->ovlap[0], core_tile->ovlap[1],
core_tile->ovlap[2], core_tile->ovlap[3]);
diff --git a/aml_isp5/driver/isp5/hw/c4-isp-rdma.c b/aml_isp5/driver/isp5/hw/c4-isp-rdma.c
index 9b0e494c..fba4b593 100644
--- a/aml_isp5/driver/isp5/hw/c4-isp-rdma.c
+++ b/aml_isp5/driver/isp5/hw/c4-isp-rdma.c
@@ -118,7 +118,7 @@ static void c4_isp_rdma_ipp_init(struct c4_isp_device *isp)
ipp_rdma_info->rdma_init_cnt = 0;
ipp_rdma_info->rdma_cfg_cnt = 0;
- dev_info(isp->dev, "IPP rdma init\n");
+ dev_dbg(isp->dev, "IPP rdma init\n");
}
static void c4_isp_rdma_febe_init(struct c4_isp_device *isp)
@@ -140,7 +140,7 @@ static void c4_isp_rdma_febe_init(struct c4_isp_device *isp)
isp->febe_rdma_init_reg_cnt = 0;
isp->febe_rdma_cfg_reg_cnt = 0;
- dev_info(isp->dev, "FEBE rdma init\n");
+ dev_dbg(isp->dev, "FEBE rdma init\n");
}
static void c4_isp_rdma_disp_init(struct c4_isp_device *isp)
@@ -158,7 +158,7 @@ static void c4_isp_rdma_disp_init(struct c4_isp_device *isp)
isp->disp_rdma_init_reg_cnt = 0;
- dev_info(isp->dev, "DISP rdma init\n");
+ dev_dbg(isp->dev, "DISP rdma init\n");
}
static void c4_isp_rdma_enable_cfg_opp(struct c4_isp_device *isp)
--
2.43.2