From nobody Fri Oct 3 23:02:51 2025 Received: from mail-wm1-f41.google.com (mail-wm1-f41.google.com [209.85.128.41]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9EB9F28AB1E for ; Fri, 22 Aug 2025 12:02:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755864141; cv=none; b=YfMrOHnPlmoe0M0i/IC4RQ+2+4ccGKoHzuTgH0rGyv2o2z79scoi1eQQDRfs8kAC1J2Mmuh9yaY8/ZHsjX+8nNqLhtJUk7Vy3TwB25jxM9WWKc5v1vykFrxFQQ02IZbrF5Bj9AgFTS3puNypJrnA1nHizfOodNomWVjL94VzX0s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755864141; c=relaxed/simple; bh=hmsFha62hBYxNEmWQE2a9XRWH3IZz4cwWzWGkhDYQzc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:To:Cc; b=ka0eP8cyNpJICmd8c2vb+gzyXUtKKnMrP7iUVU98etJdJV2RthhfA6q4D25cxp9qcoeYcRrPhBkpJUl2ToUoEA29PpNHkEwnBAOBgBOjyHyFKPCf+DvLqajJT6U1NXQx+RvlrggkDMceCeI60uinCwI+UfM1YacUPt6frflJi7A= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=VcljSDg6; arc=none smtp.client-ip=209.85.128.41 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="VcljSDg6" Received: by mail-wm1-f41.google.com with SMTP id 5b1f17b1804b1-45a20c51c40so16609675e9.3 for ; Fri, 22 Aug 2025 05:02:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1755864136; x=1756468936; darn=vger.kernel.org; h=cc:to:message-id:content-transfer-encoding:mime-version:subject :date:from:from:to:cc:subject:date:message-id:reply-to; bh=8SWI9DLP5lStpnCjpTkxBn8nTBRDdls4+/CPBAumrqk=; b=VcljSDg6BnWlwsB+FGhsr+W8tbUYtad0qSheSAaBGsTHBWyb07eOCUfqUt3aYlLGfc tcj9UBXLpTQl3Z0NRoYnk3DEuAUcawV/VjJQZR0tjOzd7Y7t0Cjz3oBpNaB4M3ou92uc aQAffZa2RHSqC1nx38VzPK2mQotxMHRlDDPBcmH0cbhsrmyRvUE3dFi04dppMUQ8l1If x9Daqj1jUqM7RGOv5MsmVGDx2EFgCYUL1+nbakS27t7v3gTe/Am5waWClVn6bSgVMz5+ Q0SwRC2R/SMrpTlGM3PHnvTDhs9O97MIA9NdyryI8ifJAWa1x9N+IdMykL8v3z3tHxUh FkKw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755864136; x=1756468936; h=cc:to:message-id:content-transfer-encoding:mime-version:subject :date:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=8SWI9DLP5lStpnCjpTkxBn8nTBRDdls4+/CPBAumrqk=; b=iuxZjPuaGAYdML7jU5zcVAzFOkdRkw8nXsNcjvL0xculY18zIVBIgTeY6GMCYUiR7L gjNqM0SuZLPRKfASstL+nLAYLcnqfXEgX5ppLsUdCbhphjMU8yAuGHzHwMZ9hLo+qPJL sUkzQJf67pAVaQslwZBaIMcjq3cJHgX2iYUhZK9fcDRmVQFkLzCVM9A+ALnj+7k+gbOa 4FfYZchIg5ajUT+1XrShqZygbxHNt5rZ3AxvRf/edf196/3OmQN3GgI62zsLfXX4NjjD tdOptMdw6UyZ7WiIub6t4EWEUszJnuJF2QTVS0s++PLg6qpzyC2j54JAPXmVULdoCCqM OJsA== X-Forwarded-Encrypted: i=1; AJvYcCXjx1L7SkjsJMdx6nIpc4XVwh6Yg2gHjxJgG16S+w1DDzYTG8voL6UDAd1rks6QqqkL4WDiJ0mew6aQOP0=@vger.kernel.org X-Gm-Message-State: AOJu0Ywpn09NTM3Vc8wS6703p3xsqWqxT9PfmNyAFymFjy1PASuHl8dH bLZ4FSCY54wHWn0dv98dtYfB1KY/6vnSmrcq46Zdq2xPPTpao4JkwrPGTXs49r1AQa4= X-Gm-Gg: ASbGncsgN588JeolIANZe0wua/+5AX6Add8U/k32aZjc/UIUiPSL2092jr4NZtNw9tc T4fg7FADwH9LCvkFRbev5hNGv6AJ6vReL+jhS1MlLkgGAZzWGNP0/Ap5dQZtGEFQPapdaTBmeXJ +ApW0uNBpCDC7l7ZEeUeyx2pHst9UxBo/8YCfklMzEgIly2F2uoPYxDCVBnuCnpZ1urV5j7lyTh xso+CWM7IIAa0xmrietsyrgddA7fRYMAfcjYBJ42IoSWHi1JH60foHRUmfjwKukpEzW5unwGiZv JU1/gJp5hQKhFgpaqgDkuEmLtYqsp+7hc3RRucUhva0vF0m5aZgtsEP/R6Eyf5kySg/LHKlZsjF Q+tRSG43CkYZeX/N3+qRwzjig6WfL3b5PfK8NEMs2KXc= X-Google-Smtp-Source: AGHT+IH83B7ODFHyYMcRtllawZ/lAAKJpqszR+2hPDA2zmKCFTwOE62vwh3/S58f0KI5rcPBHd6VVg== X-Received: by 2002:a05:600c:1912:b0:453:8bc7:5cbb with SMTP id 5b1f17b1804b1-45b517d2885mr23835645e9.25.1755864135688; Fri, 22 Aug 2025 05:02:15 -0700 (PDT) Received: from arrakeen.starnux.net ([2a01:e0a:3d9:2080:8261:5fff:fe11:bdda]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45b50e2fb15sm36836465e9.12.2025.08.22.05.02.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 Aug 2025 05:02:14 -0700 (PDT) From: Neil Armstrong Date: Fri, 22 Aug 2025 14:02:10 +0200 Subject: [PATCH] media: iris: add VPU33 specific encoding buffer calculation Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250822-topic-sm8x50-iris-encoder-v3-hevc-debug-v1-1-633d904ff7d3@linaro.org> X-B4-Tracking: v=1; b=H4sIAEJcqGgC/x3NywrCMBBG4Vcps3YgF4vBVxEXmvxtZ2FSMjYUS t/d4PLbnHOQogqU7sNBFU1USu6wl4Hi8sozWFI3OeNGE5zjb1klsn7CPhqWKsrIsSRUbp4XtMg J721ma+zNT9fgAzz12loxyf4/PZ7n+QO9hskIeQAAAA== X-Change-ID: 20250822-topic-sm8x50-iris-encoder-v3-hevc-debug-10173f4838e3 To: Vikash Garodia , Dikshita Agarwal , Abhinav Kumar , Bryan O'Donoghue , Mauro Carvalho Chehab Cc: linux-media@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, Neil Armstrong X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=14244; i=neil.armstrong@linaro.org; h=from:subject:message-id; bh=hmsFha62hBYxNEmWQE2a9XRWH3IZz4cwWzWGkhDYQzc=; b=owEBbQKS/ZANAwAKAXfc29rIyEnRAcsmYgBoqFxFuAG85JO+w/yQnIH5DAQjGs5Anai9Nbhl9DEj bo9bW8iJAjMEAAEKAB0WIQQ9U8YmyFYF/h30LIt33NvayMhJ0QUCaKhcRQAKCRB33NvayMhJ0S4rEA C2AIq8pfqC150XrD7K1L/9Px7X3KTEN97Enuqy2Xh1YHbYQQLsFUH0CdkXN+U36TptNO91aDPs+vJg Qq1FjBFHqo1mDwlWBDxjhPV9F8ull7pEnau0uzV5fi3DtIp8VwLDLrSPSTKZ+bBp5bB7TUXr/59b0I NOcvwRnCSY3TQInBBQl+MPC5G0fwEk0QK33sVo7WJV7N6HMvmOp/ArbWLEp/vIL8QmcKsNjPmd83fQ ijSb7NNBGOMR/W3pbSh2SUrnzQr6v/mLtDke0x+kdqVf+NGr5kod25Zx3XRfAcBxK6MXhJmgEy/5RR E3BbeggmeWn7jLwZ1lL0527Bg7KHS82HTt+2dIuyezqevmnvjoEC92Zz0w6IdzmF+H4ME7DRX9c/vt pOxKshhVtle5/Ed+UYUKY78eeEgl3oRZKPDmmrBHu5E69XeieBTtX1KAvrI6S78CU2wTLrI+tcbcn4 qDMBy/nYGsC6XDGakjbGpl8TdHgfed6vbMIVEOK4x0C1LgNtuUFS9ZiBGx/T8QvFZMZc/81W6rxISr De9nFfb4dS7xHBS3hmO2Q/NmBP8QkYJMcgDCofZJeDsDyLA5c0ZO0d6fNTD/giUudpCCoTbcASJ2rP /9zPSkMvco/HXygpW1GU79Ha1id9rAtqWEuIl+bqZrPKMHIwCBucw5LTW0Tg== X-Developer-Key: i=neil.armstrong@linaro.org; a=openpgp; fpr=89EC3D058446217450F22848169AB7B1A4CFF8AE The VPU33 found in the SM8650 Platform requires some slighly different buffer calculation for encoding to allow working with the latest firwware uploaded on linux-firmware at [1]. [1] https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware= .git/commit/?id=3Dece445af91bbee49bf0d8b23c2b99b596ae6eac7 Suggested-by: Vikash Garodia Signed-off-by: Neil Armstrong --- [2] https://lore.kernel.org/all/20250820-iris-video-encoder-v3-0-80ab0ba58b= 3d@quicinc.com/ --- drivers/media/platform/qcom/iris/iris_buffer.c | 2 +- .../platform/qcom/iris/iris_hfi_gen1_command.c | 2 +- .../platform/qcom/iris/iris_platform_common.h | 2 + .../media/platform/qcom/iris/iris_platform_gen2.c | 4 + .../platform/qcom/iris/iris_platform_sm8250.c | 2 + drivers/media/platform/qcom/iris/iris_vpu_buffer.c | 118 +++++++++++++++++= +++- drivers/media/platform/qcom/iris/iris_vpu_buffer.h | 4 +- 7 files changed, 127 insertions(+), 7 deletions(-) diff --git a/drivers/media/platform/qcom/iris/iris_buffer.c b/drivers/media= /platform/qcom/iris/iris_buffer.c index 8891a297d384b018b3cc8313ad6416db6317798b..c0900038e7defccf7de3cb60e17= c71e36a0e8ead 100644 --- a/drivers/media/platform/qcom/iris/iris_buffer.c +++ b/drivers/media/platform/qcom/iris/iris_buffer.c @@ -284,7 +284,7 @@ static void iris_fill_internal_buf_info(struct iris_ins= t *inst, { struct iris_buffers *buffers =3D &inst->buffers[buffer_type]; =20 - buffers->size =3D iris_vpu_buf_size(inst, buffer_type); + buffers->size =3D inst->core->iris_platform_data->get_vpu_buffer_size(ins= t, buffer_type); buffers->min_count =3D iris_vpu_buf_count(inst, buffer_type); } =20 diff --git a/drivers/media/platform/qcom/iris/iris_hfi_gen1_command.c b/dri= vers/media/platform/qcom/iris/iris_hfi_gen1_command.c index 29cf392ca2566da286ea3e928ce4a22c2e970cc8..e1788c266bb1080921f17248fd5= ee60156b3143d 100644 --- a/drivers/media/platform/qcom/iris/iris_hfi_gen1_command.c +++ b/drivers/media/platform/qcom/iris/iris_hfi_gen1_command.c @@ -911,7 +911,7 @@ static int iris_hfi_gen1_set_bufsize(struct iris_inst *= inst, u32 plane) =20 if (iris_split_mode_enabled(inst)) { bufsz.type =3D HFI_BUFFER_OUTPUT; - bufsz.size =3D iris_vpu_buf_size(inst, BUF_DPB); + bufsz.size =3D inst->core->iris_platform_data->get_vpu_buffer_size(inst,= BUF_DPB); =20 ret =3D hfi_gen1_set_property(inst, ptype, &bufsz, sizeof(bufsz)); if (ret) diff --git a/drivers/media/platform/qcom/iris/iris_platform_common.h b/driv= ers/media/platform/qcom/iris/iris_platform_common.h index 96fa7b1bb592441e85664da408ea4ba42c9a15b5..7057c4cd1a9ebefa02c855014e5= f19993da58e38 100644 --- a/drivers/media/platform/qcom/iris/iris_platform_common.h +++ b/drivers/media/platform/qcom/iris/iris_platform_common.h @@ -7,6 +7,7 @@ #define __IRIS_PLATFORM_COMMON_H__ =20 #include +#include "iris_buffer.h" =20 struct iris_core; struct iris_inst; @@ -189,6 +190,7 @@ struct iris_platform_data { void (*init_hfi_command_ops)(struct iris_core *core); void (*init_hfi_response_ops)(struct iris_core *core); struct iris_inst *(*get_instance)(void); + u32 (*get_vpu_buffer_size)(struct iris_inst *inst, enum iris_buffer_type = buffer_type); const struct vpu_ops *vpu_ops; void (*set_preset_registers)(struct iris_core *core); const struct icc_info *icc_tbl; diff --git a/drivers/media/platform/qcom/iris/iris_platform_gen2.c b/driver= s/media/platform/qcom/iris/iris_platform_gen2.c index cf4b92f534b272a0a1ac2a0e7bb9316501374332..78a04e76de7c00703b84bd3c1c6= e9a884ee7cebe 100644 --- a/drivers/media/platform/qcom/iris/iris_platform_gen2.c +++ b/drivers/media/platform/qcom/iris/iris_platform_gen2.c @@ -8,6 +8,7 @@ #include "iris_hfi_gen2.h" #include "iris_hfi_gen2_defines.h" #include "iris_platform_common.h" +#include "iris_vpu_buffer.h" #include "iris_vpu_common.h" =20 #include "iris_platform_qcs8300.h" @@ -738,6 +739,7 @@ struct iris_platform_data sm8550_data =3D { .get_instance =3D iris_hfi_gen2_get_instance, .init_hfi_command_ops =3D iris_hfi_gen2_command_ops_init, .init_hfi_response_ops =3D iris_hfi_gen2_response_ops_init, + .get_vpu_buffer_size =3D iris_vpu_buf_size, .vpu_ops =3D &iris_vpu3_ops, .set_preset_registers =3D iris_set_sm8550_preset_registers, .icc_tbl =3D sm8550_icc_table, @@ -827,6 +829,7 @@ struct iris_platform_data sm8650_data =3D { .get_instance =3D iris_hfi_gen2_get_instance, .init_hfi_command_ops =3D iris_hfi_gen2_command_ops_init, .init_hfi_response_ops =3D iris_hfi_gen2_response_ops_init, + .get_vpu_buffer_size =3D iris_vpu33x_buf_size, .vpu_ops =3D &iris_vpu33_ops, .set_preset_registers =3D iris_set_sm8550_preset_registers, .icc_tbl =3D sm8550_icc_table, @@ -916,6 +919,7 @@ struct iris_platform_data qcs8300_data =3D { .get_instance =3D iris_hfi_gen2_get_instance, .init_hfi_command_ops =3D iris_hfi_gen2_command_ops_init, .init_hfi_response_ops =3D iris_hfi_gen2_response_ops_init, + .get_vpu_buffer_size =3D iris_vpu_buf_size, .vpu_ops =3D &iris_vpu3_ops, .set_preset_registers =3D iris_set_sm8550_preset_registers, .icc_tbl =3D sm8550_icc_table, diff --git a/drivers/media/platform/qcom/iris/iris_platform_sm8250.c b/driv= ers/media/platform/qcom/iris/iris_platform_sm8250.c index 978d0130d43b5f6febb65430a9bbe3932e8f24df..16486284f8acccf6a95a27f6003= e885226e28f4d 100644 --- a/drivers/media/platform/qcom/iris/iris_platform_sm8250.c +++ b/drivers/media/platform/qcom/iris/iris_platform_sm8250.c @@ -9,6 +9,7 @@ #include "iris_resources.h" #include "iris_hfi_gen1.h" #include "iris_hfi_gen1_defines.h" +#include "iris_vpu_buffer.h" #include "iris_vpu_common.h" =20 #define BITRATE_MIN 32000 @@ -317,6 +318,7 @@ struct iris_platform_data sm8250_data =3D { .get_instance =3D iris_hfi_gen1_get_instance, .init_hfi_command_ops =3D &iris_hfi_gen1_command_ops_init, .init_hfi_response_ops =3D iris_hfi_gen1_response_ops_init, + .get_vpu_buffer_size =3D iris_vpu_buf_size, .vpu_ops =3D &iris_vpu2_ops, .set_preset_registers =3D iris_set_sm8250_preset_registers, .icc_tbl =3D sm8250_icc_table, diff --git a/drivers/media/platform/qcom/iris/iris_vpu_buffer.c b/drivers/m= edia/platform/qcom/iris/iris_vpu_buffer.c index 7337d8d33715810669399d9f86b864d0eb002897..5658acf371506d1190e885986d3= 62b2731b0660e 100644 --- a/drivers/media/platform/qcom/iris/iris_vpu_buffer.c +++ b/drivers/media/platform/qcom/iris/iris_vpu_buffer.c @@ -867,6 +867,34 @@ u32 size_vpss_line_buf(u32 num_vpp_pipes_enc, u32 fram= e_height_coded, (((((max_t(u32, (frame_width_coded), (frame_height_coded)) + 3) >> 2) << 5) + 256) * 16)), 256); } +static inline +u32 size_vpss_line_buf_vpu33x(u32 num_vpp_pipes_enc, u32 frame_height_code= d, + u32 frame_width_coded) +{ + u32 vpss_4tap_top =3D 0, vpss_4tap_left =3D 0, vpss_div2_top =3D 0; + u32 vpss_div2_left =3D 0, vpss_top_lb =3D 0, vpss_left_lb =3D 0; + u32 size_left =3D 0, size_top =3D 0; + + vpss_4tap_top =3D (max_t(u32, frame_width_coded, frame_height_coded) * 2)= + 3; + vpss_4tap_top >>=3D 2; + vpss_4tap_top <<=3D 4; + vpss_4tap_top +=3D 256; + vpss_4tap_left =3D (((8192 + 3) >> 2) << 5) + 64; + vpss_div2_top =3D max_t(u32, frame_width_coded, frame_height_coded) + 3; + vpss_div2_top >>=3D 2; + vpss_div2_top <<=3D 4; + vpss_div2_top +=3D 256; + vpss_div2_left =3D (max_t(u32, frame_width_coded, frame_height_coded) * 2= ) + 3; + vpss_div2_left >>=3D 2; + vpss_div2_left <<=3D 5; + vpss_div2_left +=3D 64; + vpss_top_lb =3D (frame_width_coded + 1) << 3; + vpss_left_lb =3D (frame_height_coded << 3) * num_vpp_pipes_enc; + size_left =3D (vpss_4tap_left + vpss_div2_left) * 2 * num_vpp_pipes_enc; + size_top =3D (vpss_4tap_top + vpss_div2_top) * 2; + + return ALIGN(size_left + size_top + vpss_top_lb + vpss_left_lb, DMA_ALIGN= MENT); +} =20 static inline u32 size_top_line_buf_first_stg_sao(u32 frame_width_coded) @@ -975,9 +1003,17 @@ static u32 iris_vpu_enc_non_comv_size(struct iris_ins= t *inst) lcu_size, HFI_CODEC_ENCODE_AVC); } =20 +static u32 iris_vpu33x_enc_non_comv_size(struct iris_inst *inst) +{ + if (inst->codec =3D=3D V4L2_PIX_FMT_HEVC) + return iris_vpu_enc_non_comv_size(inst) + SIZE_ONE_SLICE_BUF; + + return iris_vpu_enc_non_comv_size(inst); +} + static inline -u32 hfi_buffer_line_enc(u32 frame_width, u32 frame_height, bool is_ten_bit, - u32 num_vpp_pipes_enc, u32 lcu_size, u32 standard) +u32 hfi_buffer_line_enc_base(u32 frame_width, u32 frame_height, bool is_te= n_bit, + u32 num_vpp_pipes_enc, u32 lcu_size, u32 standard) { u32 width_in_lcus =3D ((frame_width) + (lcu_size) - 1) / (lcu_size); u32 height_in_lcus =3D ((frame_height) + (lcu_size) - 1) / (lcu_size); @@ -1017,10 +1053,38 @@ u32 hfi_buffer_line_enc(u32 frame_width, u32 frame_= height, bool is_ten_bit, line_buff_recon_pix_size + size_left_linebuff_ctrl_fe(frame_height_coded, num_vpp_pipes_enc) + size_line_buf_sde(frame_width_coded) + - size_vpss_line_buf(num_vpp_pipes_enc, frame_height_coded, frame_width_co= ded) + size_top_line_buf_first_stg_sao(frame_width_coded); } =20 +static inline +u32 hfi_buffer_line_enc(u32 frame_width, u32 frame_height, bool is_ten_bit, + u32 num_vpp_pipes_enc, u32 lcu_size, u32 standard) +{ + u32 width_in_lcus =3D ((frame_width) + (lcu_size) - 1) / (lcu_size); + u32 height_in_lcus =3D ((frame_height) + (lcu_size) - 1) / (lcu_size); + u32 frame_height_coded =3D height_in_lcus * (lcu_size); + u32 frame_width_coded =3D width_in_lcus * (lcu_size); + + return hfi_buffer_line_enc_base(frame_width, frame_height, is_ten_bit, + num_vpp_pipes_enc, lcu_size, standard) + + size_vpss_line_buf(num_vpp_pipes_enc, frame_height_coded, frame_width_co= ded); +} + +static inline +u32 hfi_buffer_line_enc_vpu33x(u32 frame_width, u32 frame_height, bool is_= ten_bit, + u32 num_vpp_pipes_enc, u32 lcu_size, u32 standard) +{ + u32 width_in_lcus =3D ((frame_width) + (lcu_size) - 1) / (lcu_size); + u32 height_in_lcus =3D ((frame_height) + (lcu_size) - 1) / (lcu_size); + u32 frame_height_coded =3D height_in_lcus * (lcu_size); + u32 frame_width_coded =3D width_in_lcus * (lcu_size); + + return hfi_buffer_line_enc_base(frame_width, frame_height, is_ten_bit, + num_vpp_pipes_enc, lcu_size, standard) + + size_vpss_line_buf_vpu33x(num_vpp_pipes_enc, frame_height_coded, + frame_width_coded); +} + static u32 iris_vpu_enc_line_size(struct iris_inst *inst) { u32 num_vpp_pipes =3D inst->core->iris_platform_data->num_vpp_pipe; @@ -1039,6 +1103,24 @@ static u32 iris_vpu_enc_line_size(struct iris_inst *= inst) lcu_size, HFI_CODEC_ENCODE_AVC); } =20 +static u32 iris_vpu33x_enc_line_size(struct iris_inst *inst) +{ + u32 num_vpp_pipes =3D inst->core->iris_platform_data->num_vpp_pipe; + struct v4l2_format *f =3D inst->fmt_dst; + u32 height =3D f->fmt.pix_mp.height; + u32 width =3D f->fmt.pix_mp.width; + u32 lcu_size =3D 16; + + if (inst->codec =3D=3D V4L2_PIX_FMT_HEVC) { + lcu_size =3D 32; + return hfi_buffer_line_enc_vpu33x(width, height, 0, num_vpp_pipes, + lcu_size, HFI_CODEC_ENCODE_HEVC); + } + + return hfi_buffer_line_enc_vpu33x(width, height, 0, num_vpp_pipes, + lcu_size, HFI_CODEC_ENCODE_AVC); +} + static inline u32 hfi_buffer_dpb_enc(u32 frame_width, u32 frame_height, bool is_ten_bit) { @@ -1386,7 +1468,7 @@ struct iris_vpu_buf_type_handle { u32 (*handle)(struct iris_inst *inst); }; =20 -int iris_vpu_buf_size(struct iris_inst *inst, enum iris_buffer_type buffer= _type) +u32 iris_vpu_buf_size(struct iris_inst *inst, enum iris_buffer_type buffer= _type) { const struct iris_vpu_buf_type_handle *buf_type_handle_arr =3D NULL; u32 size =3D 0, buf_type_handle_size =3D 0, i; @@ -1430,6 +1512,34 @@ int iris_vpu_buf_size(struct iris_inst *inst, enum i= ris_buffer_type buffer_type) return size; } =20 +u32 iris_vpu33x_buf_size(struct iris_inst *inst, enum iris_buffer_type buf= fer_type) +{ + u32 size =3D 0, i; + + static const struct iris_vpu_buf_type_handle enc_internal_buf_type_handle= [] =3D { + {BUF_BIN, iris_vpu_enc_bin_size }, + {BUF_COMV, iris_vpu_enc_comv_size }, + {BUF_NON_COMV, iris_vpu33x_enc_non_comv_size }, + {BUF_LINE, iris_vpu33x_enc_line_size }, + {BUF_ARP, iris_vpu_enc_arp_size }, + {BUF_VPSS, iris_vpu_enc_vpss_size }, + {BUF_SCRATCH_1, iris_vpu_enc_scratch1_size }, + {BUF_SCRATCH_2, iris_vpu_enc_scratch2_size }, + }; + + if (inst->domain =3D=3D DECODER) + return iris_vpu_buf_size(inst, buffer_type); + + for (i =3D 0; i < ARRAY_SIZE(enc_internal_buf_type_handle); i++) { + if (enc_internal_buf_type_handle[i].type =3D=3D buffer_type) { + size =3D enc_internal_buf_type_handle[i].handle(inst); + break; + } + } + + return size; +} + static u32 internal_buffer_count(struct iris_inst *inst, enum iris_buffer_type buffer_type) { diff --git a/drivers/media/platform/qcom/iris/iris_vpu_buffer.h b/drivers/m= edia/platform/qcom/iris/iris_vpu_buffer.h index 1ff1b07ecbaa85345ca948affeb1c4a1c55e36b0..e4fd1fcf2dbf25e69d55599a8fd= 4ad775f9e6575 100644 --- a/drivers/media/platform/qcom/iris/iris_vpu_buffer.h +++ b/drivers/media/platform/qcom/iris/iris_vpu_buffer.h @@ -41,6 +41,7 @@ struct iris_inst; #define SIZE_SLIST_BUF_H265 (BIT(10)) #define H265_DISPLAY_BUF_SIZE (3072) #define H265_NUM_FRM_INFO (48) +#define SIZE_ONE_SLICE_BUF 256 =20 #define VP9_NUM_FRAME_INFO_BUF 32 #define VP9_NUM_PROBABILITY_TABLE_BUF (VP9_NUM_FRAME_INFO_BUF + 4) @@ -145,7 +146,8 @@ static inline u32 size_h264d_qp(u32 frame_width, u32 fr= ame_height) return DIV_ROUND_UP(frame_width, 64) * DIV_ROUND_UP(frame_height, 64) * 1= 28; } =20 -int iris_vpu_buf_size(struct iris_inst *inst, enum iris_buffer_type buffer= _type); +u32 iris_vpu_buf_size(struct iris_inst *inst, enum iris_buffer_type buffer= _type); +u32 iris_vpu33x_buf_size(struct iris_inst *inst, enum iris_buffer_type buf= fer_type); int iris_vpu_buf_count(struct iris_inst *inst, enum iris_buffer_type buffe= r_type); =20 #endif --- base-commit: 3390731fe7686441519f59d7599962e0abbca7d6 change-id: 20250822-topic-sm8x50-iris-encoder-v3-hevc-debug-10173f4838e3 Best regards, --=20 Neil Armstrong