From da44652e18dcbc73c50db3cb8c71b2817c51c4ab Mon Sep 17 00:00:00 2001 From: Hu Kejun Date: Mon, 14 Jul 2025 14:36:12 +0800 Subject: [PATCH] media: rockchip: aiisp: add ioctl to reduce memory Change-Id: Ie0bbdf18e6a9e0c2990f505cfdd771fb69497ca3 Signed-off-by: Hu Kejun --- drivers/media/platform/rockchip/aiisp/aiisp.c | 10 ++++++++++ drivers/media/platform/rockchip/aiisp/aiisp.h | 1 + include/uapi/linux/rk-aiisp-config.h | 8 ++++++++ 3 files changed, 19 insertions(+) diff --git a/drivers/media/platform/rockchip/aiisp/aiisp.c b/drivers/media/platform/rockchip/aiisp/aiisp.c index 85591f813469..7a9b77d9d5ff 100644 --- a/drivers/media/platform/rockchip/aiisp/aiisp.c +++ b/drivers/media/platform/rockchip/aiisp/aiisp.c @@ -655,6 +655,9 @@ static int rkaiisp_init_pool(struct rkaiisp_device *aidev, struct rkaiisp_ispbuf if (aidev->exealgo == AIYNR) { stride = ((ispbuf->iir_width + 3) / 4 * 8 * 11 + 7) >> 3; size = stride * (ispbuf->iir_height + 3) / 4; + } else if (aidev->mem_mode == COMBO_MEMODE) { + stride = ((ispbuf->iir_width + 7) / 8 * 15 * 11 + 7) >> 3; + size = stride * (ispbuf->iir_height + 7) / 8; } else { stride = ((ispbuf->iir_width + 1) / 2 * 15 * 11 + 7) >> 3; size = stride * (ispbuf->iir_height + 1) / 2; @@ -1941,6 +1944,13 @@ static long rkaiisp_ioctl_default(struct file *file, void *fh, case RKAIISP_CMD_GET_YNRBUF_INFO: ret = rkaiisp_get_ynrbuf_info(aidev, arg); break; + case RKAIISP_CMD_SET_MEMORY_MODE: { + enum rkaiisp_mem_mode *mem_mode = (enum rkaiisp_mem_mode *)arg; + + aidev->mem_mode = *mem_mode; + ret = 0; + } + break; default: ret = -EINVAL; } diff --git a/drivers/media/platform/rockchip/aiisp/aiisp.h b/drivers/media/platform/rockchip/aiisp/aiisp.h index 7ee816c91a6c..6b5c390fcbf2 100644 --- a/drivers/media/platform/rockchip/aiisp/aiisp.h +++ b/drivers/media/platform/rockchip/aiisp/aiisp.h @@ -147,6 +147,7 @@ struct rkaiisp_device { enum rkaiisp_exemode exemode; enum rkaiisp_model_mode model_mode; enum rkaiisp_hwstate hwstate; + enum rkaiisp_mem_mode mem_mode; u32 para_size; u32 max_runcnt; u32 model_runcnt; diff --git a/include/uapi/linux/rk-aiisp-config.h b/include/uapi/linux/rk-aiisp-config.h index ebbbb8f0b09f..1aab05f8206b 100644 --- a/include/uapi/linux/rk-aiisp-config.h +++ b/include/uapi/linux/rk-aiisp-config.h @@ -35,6 +35,9 @@ #define RKAIISP_CMD_GET_YNRBUF_INFO \ _IOR('V', BASE_VIDIOC_PRIVATE + 5, struct rkaiisp_ynrbuf_info) +#define RKAIISP_CMD_SET_MEMORY_MODE \ + _IOW('V', BASE_VIDIOC_PRIVATE + 6, enum rkaiisp_mem_mode) + /**********************EVENT_PRIVATE***************************/ #define RKAIISP_V4L2_EVENT_AIISP_DONE (V4L2_EVENT_PRIVATE_START + 1) @@ -80,6 +83,11 @@ enum rkaiisp_exemode { BOTHEVENT_IN_KERNEL }; +enum rkaiisp_mem_mode { + SINGLE_MEMODE, + COMBO_MEMODE, +}; + struct rkaiisp_airms_st { int sequence; int inbuf_idx;