All of lore.kernel.org
 help / color / mirror / Atom feed
From: Neil Armstrong <neil.armstrong@linaro.org>
To: Vikash Garodia <vikash.garodia@oss.qualcomm.com>,
	Dikshita Agarwal <dikshita.agarwal@oss.qualcomm.com>,
	Abhinav Kumar <abhinav.kumar@linux.dev>,
	Bryan O'Donoghue <bod@kernel.org>,
	Mauro Carvalho Chehab <mchehab@kernel.org>
Cc: linux-media@vger.kernel.org, linux-arm-msm@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH v3 3/6] media: qcom: iris: gen2: add support for 10bit decoding
Date: Mon, 18 May 2026 09:32:42 +0200	[thread overview]
Message-ID: <febaa0cf-eecf-40ea-b243-4f03646af918@linaro.org> (raw)
In-Reply-To: <b6ab2112-c89a-4ac4-8525-e913ed0b5313@oss.qualcomm.com>

On 5/13/26 20:50, Vikash Garodia wrote:
> 
> On 5/11/2026 2:50 PM, Neil Armstrong wrote:
>> Add the necessary plumbing into the HFi Gen2 to signal the decoder
>> the right 10bit pixel format and stride when in compressed mode.
>>
>> Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
>> ---
>>   .../platform/qcom/iris/iris_hfi_gen2_command.c     | 75 +++++++++++++++++++++-
>>   .../platform/qcom/iris/iris_hfi_gen2_defines.h     |  1 +
>>   drivers/media/platform/qcom/iris/iris_utils.c      |  4 +-
>>   3 files changed, 76 insertions(+), 4 deletions(-)
>>
>> diff --git a/drivers/media/platform/qcom/iris/iris_hfi_gen2_command.c b/drivers/media/platform/qcom/iris/iris_hfi_gen2_command.c
>> index 30bfd90d423b..89de8c366836 100644
>> --- a/drivers/media/platform/qcom/iris/iris_hfi_gen2_command.c
>> +++ b/drivers/media/platform/qcom/iris/iris_hfi_gen2_command.c
>> @@ -481,8 +481,20 @@ static int iris_hfi_gen2_set_colorformat(struct iris_inst *inst, u32 plane)
>>       if (inst->domain == DECODER) {
>>           pixelformat = inst->fmt_dst->fmt.pix_mp.pixelformat;
>> -        hfi_colorformat = pixelformat == V4L2_PIX_FMT_NV12 ?
>> -            HFI_COLOR_FMT_NV12 : HFI_COLOR_FMT_NV12_UBWC;
>> +        switch (pixelformat) {
>> +        case V4L2_PIX_FMT_NV12:
>> +            hfi_colorformat = HFI_COLOR_FMT_NV12;
>> +            break;
>> +        case V4L2_PIX_FMT_QC08C:
>> +            hfi_colorformat = HFI_COLOR_FMT_NV12_UBWC;
>> +            break;
>> +        case V4L2_PIX_FMT_P010:
>> +            hfi_colorformat = HFI_COLOR_FMT_P010;
>> +            break;
>> +        case V4L2_PIX_FMT_QC10C:
>> +            hfi_colorformat = HFI_COLOR_FMT_TP10_UBWC;
>> +            break;
>> +        };
> 
> semicolon ?

Ack

> 
>>       } else {
>>           pixelformat = inst->fmt_src->fmt.pix_mp.pixelformat;
>>           hfi_colorformat = pixelformat == V4L2_PIX_FMT_NV12 ?
>> @@ -517,7 +529,8 @@ static int iris_hfi_gen2_set_linear_stride_scanline(struct iris_inst *inst, u32
>>       stride_uv = stride_y;
>>       scanline_uv = scanline_y / 2;
>> -    if (pixelformat != V4L2_PIX_FMT_NV12)
>> +    if (pixelformat != V4L2_PIX_FMT_NV12 &&
>> +        pixelformat != V4L2_PIX_FMT_P010)
>>           return 0;
>>       payload[0] = stride_y << 16 | scanline_y;
>> @@ -532,6 +545,61 @@ static int iris_hfi_gen2_set_linear_stride_scanline(struct iris_inst *inst, u32
>>                             sizeof(u64));
>>   }
>> +static int iris_hfi_gen2_set_ubwc_stride_scanline(struct iris_inst *inst, u32 plane)
>> +{
>> +    u32 meta_stride_y, meta_scanline_y, meta_stride_uv, meta_scanline_uv;
>> +    u32 stride_y, scanline_y, stride_uv, scanline_uv;
>> +    u32 port = iris_hfi_gen2_get_port(inst, plane);
>> +    u32 pixelformat, width, height;
>> +    u32 payload[4];
>> +
>> +    if (inst->domain != DECODER ||
>> +        inst->fmt_src->fmt.pix_mp.pixelformat != V4L2_PIX_FMT_AV1)
> 
> whats the restriction with AV1 here ?

This restriction is used in downstream driver and Dikshita reported we shouldn't
call HFI_PROP_UBWC_STRIDE_SCANLINE except for AV1.

Could you please check if it's necessary ?

> 
>> +        return 0;
>> +
>> +    pixelformat = inst->fmt_dst->fmt.pix_mp.pixelformat;
>> +    width = inst->fmt_dst->fmt.pix_mp.width;
>> +    height = inst->fmt_dst->fmt.pix_mp.height;
>> +
>> +    switch (pixelformat) {
>> +    case V4L2_PIX_FMT_QC08C:
>> +        stride_y = ALIGN(width, 128);
>> +        scanline_y = ALIGN(height, 32);
>> +        stride_uv = ALIGN(width, 128);
>> +        scanline_uv = ALIGN((height + 1) >> 1, 32);
>> +        meta_stride_y = ALIGN(DIV_ROUND_UP(width, 32), 64);
>> +        meta_scanline_y = ALIGN(DIV_ROUND_UP(height, 8), 16);
>> +        meta_stride_uv = ALIGN(DIV_ROUND_UP((width + 1) >> 1, 16), 64);
>> +        meta_scanline_uv = ALIGN(DIV_ROUND_UP((height + 1) >> 1, 8), 16);
>> +        break;
>> +    case V4L2_PIX_FMT_QC10C:
>> +        stride_y = ALIGN(width * 4 / 3, 256);
>> +        scanline_y = ALIGN(height, 16);
>> +        stride_uv = ALIGN(width * 4 / 3, 256);
>> +        scanline_uv = ALIGN((height + 1) >> 1, 16);
>> +        meta_stride_y = ALIGN(DIV_ROUND_UP(width, 48), 64);
>> +        meta_scanline_y = ALIGN(DIV_ROUND_UP(height, 4), 16);
>> +        meta_stride_uv = ALIGN(DIV_ROUND_UP((width + 1) >> 1, 24), 64);
>> +        meta_scanline_uv = ALIGN(DIV_ROUND_UP((height + 1) >> 1, 4), 16);
>> +        break;
>> +    default:
>> +        return 0;
>> +    }
>> +
>> +    payload[0] = stride_y << 16 | scanline_y;
>> +    payload[1] = stride_uv << 16 | scanline_uv;
>> +    payload[2] = meta_stride_y << 16 | meta_scanline_y;
>> +    payload[3] = meta_stride_uv << 16 | meta_scanline_uv;
>> +
>> +    return iris_hfi_gen2_session_set_property(inst,
>> +                          HFI_PROP_UBWC_STRIDE_SCANLINE,
>> +                          HFI_HOST_FLAGS_NONE,
>> +                          port,
>> +                          HFI_PAYLOAD_U32_ARRAY,
>> +                          &payload[0],
>> +                          sizeof(u32) * 4);
>> +}
>> +
>>   static int iris_hfi_gen2_set_tier(struct iris_inst *inst, u32 plane)
>>   {
>>       u32 port = iris_hfi_gen2_get_port(inst, V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE);
>> @@ -620,6 +688,7 @@ static int iris_hfi_gen2_session_set_config_params(struct iris_inst *inst, u32 p
>>           {HFI_PROP_OPB_ENABLE,                 iris_hfi_gen2_set_opb_enable             },
>>           {HFI_PROP_COLOR_FORMAT,               iris_hfi_gen2_set_colorformat            },
>>           {HFI_PROP_LINEAR_STRIDE_SCANLINE,     iris_hfi_gen2_set_linear_stride_scanline },
>> +        {HFI_PROP_UBWC_STRIDE_SCANLINE,       iris_hfi_gen2_set_ubwc_stride_scanline },
> 
> alignment
> 
>>           {HFI_PROP_TIER,                       iris_hfi_gen2_set_tier                   },
>>           {HFI_PROP_FRAME_RATE,                 iris_hfi_gen2_set_frame_rate             },
>>           {HFI_PROP_AV1_FILM_GRAIN_PRESENT,     iris_hfi_gen2_set_film_grain             },
>> diff --git a/drivers/media/platform/qcom/iris/iris_hfi_gen2_defines.h b/drivers/media/platform/qcom/iris/iris_hfi_gen2_defines.h
>> index cecf771c55dd..68f849232906 100644
>> --- a/drivers/media/platform/qcom/iris/iris_hfi_gen2_defines.h
>> +++ b/drivers/media/platform/qcom/iris/iris_hfi_gen2_defines.h
>> @@ -118,6 +118,7 @@ enum hfi_flip {
>>   #define HFI_PROP_OPB_ENABLE            0x03000184
>>   #define HFI_PROP_AV1_TILE_ROWS_COLUMNS        0x03000187
>>   #define HFI_PROP_AV1_DRAP_CONFIG        0x03000189
>> +#define HFI_PROP_UBWC_STRIDE_SCANLINE        0x03000190
>>   #define HFI_PROP_COMV_BUFFER_COUNT        0x03000193
>>   #define HFI_PROP_AV1_UNIFORM_TILE_SPACING    0x03000197
>>   #define HFI_PROP_END                0x03FFFFFF
>> diff --git a/drivers/media/platform/qcom/iris/iris_utils.c b/drivers/media/platform/qcom/iris/iris_utils.c
>> index bdedd6bfa87a..c75dcb8e671e 100644
>> --- a/drivers/media/platform/qcom/iris/iris_utils.c
>> +++ b/drivers/media/platform/qcom/iris/iris_utils.c
>> @@ -35,7 +35,9 @@ int iris_get_mbpf(struct iris_inst *inst)
>>   bool iris_split_mode_enabled(struct iris_inst *inst)
>>   {
>>       return inst->fmt_dst->fmt.pix_mp.pixelformat == V4L2_PIX_FMT_NV12 ||
>> -        inst->fmt_dst->fmt.pix_mp.pixelformat == V4L2_PIX_FMT_QC08C;
>> +        inst->fmt_dst->fmt.pix_mp.pixelformat == V4L2_PIX_FMT_QC08C ||
>> +        inst->fmt_dst->fmt.pix_mp.pixelformat == V4L2_PIX_FMT_P010 ||
>> +        inst->fmt_dst->fmt.pix_mp.pixelformat == V4L2_PIX_FMT_QC10C;
>>   }
>>   bool iris_fmt_is_8bit(__u32 pixelformat)
>>
> 

Thanks,
Neil

  reply	other threads:[~2026-05-18  7:32 UTC|newest]

Thread overview: 49+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <5Yg7em0Xca9girDZT52cxZaTg93xJtZD7C2ExswhAkholGSsMsWXMWxtbtsWmkGeJWjp56SmJlLhj55vO4e0nw==@protonmail.internalid>
2026-05-11  9:20 ` [PATCH v3 0/6] media: qcom: iris: add support for decoding 10bit formats Neil Armstrong
2026-05-11  9:20   ` [PATCH v3 1/6] media: qcom: iris: add helpers for 8bit and " Neil Armstrong
2026-05-13 10:25     ` Dmitry Baryshkov
2026-05-13 18:25     ` Vikash Garodia
2026-05-11  9:20   ` [PATCH v3 2/6] media: qcom: iris: add QC10C & P010 buffer size calculations Neil Armstrong
2026-05-13 18:43     ` Vikash Garodia
2026-05-21  8:50       ` Neil Armstrong
2026-05-11  9:20   ` [PATCH v3 3/6] media: qcom: iris: gen2: add support for 10bit decoding Neil Armstrong
2026-05-13 10:38     ` Dmitry Baryshkov
2026-05-13 18:50     ` Vikash Garodia
2026-05-18  7:32       ` Neil Armstrong [this message]
2026-05-21  9:44         ` Vikash Garodia
2026-05-21 12:57           ` Neil Armstrong
2026-05-11  9:20   ` [PATCH v3 4/6] media: qcom: iris: vdec: update size and stride calculations for 10bit formats Neil Armstrong
2026-05-13 10:39     ` Dmitry Baryshkov
2026-05-13 19:05     ` Vikash Garodia
2026-05-18  7:33       ` Neil Armstrong
2026-05-20 15:55         ` Vikash Garodia
2026-05-11  9:20   ` [PATCH v3 5/6] media: qcom: iris: vdec: update find_format to handle 8bit and " Neil Armstrong
2026-05-13 10:47     ` Dmitry Baryshkov
2026-05-13 19:27     ` Vikash Garodia
2026-05-18  7:36       ` Neil Armstrong
2026-05-20 15:30         ` Vikash Garodia
2026-05-20 15:39           ` Neil Armstrong
2026-05-20 15:47             ` Vikash Garodia
2026-05-21  7:18               ` Neil Armstrong
2026-05-15  9:37     ` Bryan O'Donoghue
2026-05-15  9:42     ` Bryan O'Donoghue
2026-05-11  9:20   ` [PATCH v3 6/6] media: qcom: iris: vdec: allow GEN2 decoding into 10bit format Neil Armstrong
2026-05-13 10:45     ` Dmitry Baryshkov
2026-05-13 11:59       ` Neil Armstrong
2026-05-13 12:04         ` Dmitry Baryshkov
2026-05-13 19:39     ` Vikash Garodia
2026-05-18  7:39       ` Neil Armstrong
2026-05-20 15:55         ` Vikash Garodia
2026-05-21  7:27           ` Neil Armstrong
2026-05-21  9:52             ` Vikash Garodia
2026-05-13  8:50   ` [PATCH v3 0/6] media: qcom: iris: add support for decoding 10bit formats Wangao Wang
2026-05-13 12:11     ` Neil Armstrong
2026-05-13 16:02       ` Neil Armstrong
2026-05-13 16:04         ` Dmitry Baryshkov
2026-05-13 17:33   ` Vikash Garodia
2026-05-18  7:42     ` Neil Armstrong
2026-05-20 15:44       ` Vikash Garodia
2026-05-21  7:24         ` Neil Armstrong
2026-05-21  9:33           ` Vikash Garodia
2026-05-15  9:35   ` Bryan O'Donoghue
2026-05-15  9:38     ` Vikash Garodia
2026-05-21  8:56     ` Neil Armstrong

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=febaa0cf-eecf-40ea-b243-4f03646af918@linaro.org \
    --to=neil.armstrong@linaro.org \
    --cc=abhinav.kumar@linux.dev \
    --cc=bod@kernel.org \
    --cc=dikshita.agarwal@oss.qualcomm.com \
    --cc=linux-arm-msm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-media@vger.kernel.org \
    --cc=mchehab@kernel.org \
    --cc=vikash.garodia@oss.qualcomm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.