From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A54D63A1699 for ; Thu, 7 May 2026 19:04:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778180662; cv=none; b=fZJH4pCuc28/dSwgwO0B6cJ5G2RwN8QqVntXRY84ys4jDOEv6W8CZAI+Sp2x5pwVx41Uy4C49mVqDYhcWMl5w+Vvcedvdqtig0uEISsStdYJE0pRAKtjDXTO+IWUgsXP3tyO4ZFpliyiURS4wUJoBOqB7ktKKkJlb6ar/vxd0jg= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778180662; c=relaxed/simple; bh=d6/WH+j+oQxlbSAkKtJERHb87arl4pQBDRpq1U3j2ew=; h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From: In-Reply-To:Content-Type; b=mL7wfXVH7/0W+4sfdKhZCea8JZxLwrjB+ZoKZ/AqMRODBWEresgChNp1er6oqyK5EPfFhhDyBzacAcDjlwcIPNw26sB8kShV74msOXvJRryas6HmzGJ/8fugbZ7Pxg7LEnVRtgiXr5Qxyvcy2qEU68M+XB8fRa+OByfxpYOUTXY= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=YzCAKU6W; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=L9mGAltd; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="YzCAKU6W"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="L9mGAltd" Received: from pps.filterd (m0279873.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 647HGvei151029 for ; Thu, 7 May 2026 19:04:19 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= dcJYetvgM9irFeBjD/y3oLu4bvqECSfQYthIqylzDHk=; b=YzCAKU6WCVZ6B7vy C5AJlh88oPPEe+2bJ/6tlClG65K+Lq/6EyLjeLVlVgk21HYOSMDIb41l++XElYbA PmKCtpUi8hc9pakWeiZV9dkJRUURxBGra13cyHnr6VpIHRnW6+NDLReMceX8adrp KwDntZdR994X4biKeVV+5hNryLMrkW4tIHL48XxQ8DYHW5j37cptyBv+tLWAevA3 c5XiJBAsbkMweax6dyU+trra2dIICNWAIW+NKYB+ZWKPIwxqMhH7NJGOKMa1je3e EqQ68n0ZBllm7z5tZsQXAYYLMPADLCEQONdWv8IM8MwCG3LS2IhGwBcavVWTA8G8 Wp3tdQ== Received: from mail-pj1-f69.google.com (mail-pj1-f69.google.com [209.85.216.69]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4e0kctue8n-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 07 May 2026 19:04:19 +0000 (GMT) Received: by mail-pj1-f69.google.com with SMTP id 98e67ed59e1d1-36529b265cfso1562506a91.2 for ; Thu, 07 May 2026 12:04:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1778180652; x=1778785452; darn=vger.kernel.org; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=dcJYetvgM9irFeBjD/y3oLu4bvqECSfQYthIqylzDHk=; b=L9mGAltd/XnldJXvNqn709AgIKRF4Lm2jI1R6H4Y4zXZkTvqL4L0BAUAghVc8sh3Lo EU/edwve04xsy4PXBlDNcuTMeEyMdmIASr4GqvXUKhnzUNRhH0mB+uZ4dh/YtUJfxBwV PVTGPFenkS2x0D2CeO6IuhhevdZzcr2rdTOfBPApJG4o0pSmMVpmz6KhK1EMbjCrsByd 1CzcxDjmzv1IQVDznfDBM3ARhDa5Plz5Tv2PRN1xHGDo5JsY/M3NG7ZLOUXyUCx+cnpE 6AIO58OhZXAJNsh2wyjgsWsKtaaukHeAB8qfXHRV0tXU0WgjS4gilEqSBH0bRy5luPWa hIew== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778180652; x=1778785452; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=dcJYetvgM9irFeBjD/y3oLu4bvqECSfQYthIqylzDHk=; b=OK+GxMRl5wW/bEe3izwNSdZU5g3xdhX3A4cu9VxFJ3NffMfwxZGLCUqwHbDVg5EY0v bcPt8gSl8DyEPg6s050islSCeDJ/K0hShiOB8lGZhix4R8WvHkh5TRKwutsVnTMDoYcM 9oTLf6w0VKWwkQsTogbgb/oodQSmt0HbaMtVSMU9PtaCWSZOmBRh+UwZctpr3BP2Bslm nL0thhm6elUPbL00q6SmjuYx0VY43aV9JT24GTVsQqJYtC1+N4jJr+jSTFXjPmhVFciR HzgA10YUhkYTEhuUaWwV8k2BL8IsBO6K1PGm6XhAZRhxchw8h2DLvCvGJaHKZy7NznQY QSeA== X-Forwarded-Encrypted: i=1; AFNElJ+NIgyJMn6kat073h5/1dunIux/72N2j4P/mcTwxBY4EtUyaD2mQxDeTHda1tLDj7KNK/rvcMDWBdCpR7Q=@vger.kernel.org X-Gm-Message-State: AOJu0YyN3eR70ruuQJ6QGGu0CmB0o1yGr0pWSbSfrSm5CAl8nuNsm2xA m8t8jXlslabqJSZ6h5kV6CugFF5nabCGweceLa3VL2tPCD4/uerSqXJhmdG/aUMGAM+EFeVvIU6 cRwsgpa8ePB38UjD0KJ0GtKP1uUOKHadf2daIZunNkbPBdiCUi0Tf7Dwpi2EwJhYbgaPsFxyrg/ k= X-Gm-Gg: Acq92OF8cVjGMwHb8U3C0N+icZb6Cq66DeF3A6shSnmQinjckKFXgpevt502Nx09TAi nNwc+NGaAuhKgso2b/pH4TSJxQVfAe7WWKgFXGoBT8KYhBXCtpImjYQUa2uYhZhs8PmHWiizwm0 zBwKh5HWTLpDHh7c6+NEoUdSZct1HfmktfeStI07IqqsVBy8g+6jESQ4EfOs8hyXQPH/g7pBiH+ 4Mx6jI3FM5YVYIbr3qGYMzRdhwXml+tWYTLOBzSysnmCL6AB+TwT+QAflB3QGtUesUHFSaU3XgY R17q4t39X0nehZWMWhfPxqUakfrqSyddnV4Sy7bWzs6ASkHzVNsCU/vcJiLIJe4NWRX2jtTC5uI JiH4XOxK5eJzKIlz1QbCKnhtnArNf572Fif6uXRs3zDKaEh67ENDanS9O X-Received: by 2002:a17:90a:38a4:b0:366:159a:c1c6 with SMTP id 98e67ed59e1d1-36615b94aacmr2125673a91.2.1778180652277; Thu, 07 May 2026 12:04:12 -0700 (PDT) X-Received: by 2002:a17:90a:38a4:b0:366:159a:c1c6 with SMTP id 98e67ed59e1d1-36615b94aacmr2125642a91.2.1778180651681; Thu, 07 May 2026 12:04:11 -0700 (PDT) Received: from [192.168.0.172] ([49.205.248.139]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-c8263ff4d1esm494215a12.13.2026.05.07.12.04.07 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 07 May 2026 12:04:10 -0700 (PDT) Message-ID: <74457b34-4b08-4b9d-984c-2e9045159ed5@oss.qualcomm.com> Date: Fri, 8 May 2026 00:34:04 +0530 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v4 3/3] media: iris: Add Gen2 firmware autodetect and fallback To: Dikshita Agarwal , Abhinav Kumar , Bryan O'Donoghue , Mauro Carvalho Chehab , Vishnu Reddy , Hans Verkuil , Dmitry Baryshkov Cc: linux-media@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org References: <20260429-kodiak-gen2-support-v4-v4-0-1b607d13f9b8@oss.qualcomm.com> <20260429-kodiak-gen2-support-v4-v4-3-1b607d13f9b8@oss.qualcomm.com> Content-Language: en-US From: Vikash Garodia In-Reply-To: <20260429-kodiak-gen2-support-v4-v4-3-1b607d13f9b8@oss.qualcomm.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Authority-Analysis: v=2.4 cv=XsPK/1F9 c=1 sm=1 tr=0 ts=69fce233 cx=c_pps a=vVfyC5vLCtgYJKYeQD43oA==:117 a=EkRsrf7Hk27R9rd+nIzaeA==:17 a=IkcTkHD0fZMA:10 a=NGcC8JguVDcA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=rJkE3RaqiGZ5pbrm-msn:22 a=EUspDBNiAAAA:8 a=jxN9ARRhxhLWbUx4_G4A:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=rl5im9kqc5Lf4LNbBjHf:22 X-Proofpoint-GUID: 4UsRyFE6COvl5zIg4kF1lD-RdldDdVtZ X-Proofpoint-ORIG-GUID: 4UsRyFE6COvl5zIg4kF1lD-RdldDdVtZ X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNTA3MDE5MiBTYWx0ZWRfXylJWn28EJZBE aq8/GfRnD5BZySh4KbefR20iA5PhewzjEr6BvwrxU3JNxTSEuw+7XraB+RmW/6uYCh50zXCwm9k mssc6rAxs4cNmqGaWnNoUh0xIKWc3OOaDUd+eblQidZ4qvfTZiVSILg6fRxk8wHQ1E9Pb31mkvj XPYPtUeKmP14X6zkf63JSQuZRLXZkz/KvGC8x7TbKY/7CMZp99lWdhMXK5uriAjRYRWM9wOe+ow ZQ+7qoEO9cVLfuClcF2AfD+zlwWsdw+GV00CyH0PHtDMIxYQ+I9oHuBbGWdUs8bCw4xcawsWPmc ZUX84TZk0INKLehus4Q0Iksiht9Hy6LIovbm2vI6k+BZBAzzwuJyXspeIx0f/tgEj9cYd6V8LRI 2kmL6ZFOesppqjxI6Z2m/93mTYtzXh06LUY5sSXniMOTL/l/MUj3qzqVgchaq2w8ztVkncE/TtU P22R0CdZt7htiLO8+oQ== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-05-07_02,2026-05-06_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 lowpriorityscore=0 impostorscore=0 adultscore=0 suspectscore=0 phishscore=0 priorityscore=1501 malwarescore=0 bulkscore=0 spamscore=0 clxscore=1015 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2604200000 definitions=main-2605070192 On 4/29/2026 5:39 PM, Dikshita Agarwal wrote: > Some Iris platforms support both Gen1 and Gen2 HFI firmware images. > Update the firmware loading logic to handle this generically by > preferring Gen2 when available, while safely falling back to Gen1 > when required. > > The firmware loading logic is updated with the following priority: > 1. Device Tree (`firmware-name`): If specified, load unconditionally. > 2. Gen2 default : If no DT override exists, select the Gen2 firmware > descriptor when present and attempt to load the corresponding > firmware image. > 3. Gen1 Fallback: If loading the Gen2 firmware fails and a Gen1 > descriptor is available, retry with the Gen1 firmware image. > > When a platform provides both Gen1 and Gen2 firmware descriptors and the > firmware is loaded via a DT override, the driver detects the > firmware generation at runtime before authentication by inspecting > the firmware data. The firmware is classified as Gen2 if the > QC_IMAGE_VERSION_STRING starts with "vfw" or matches the > "video-firmware.N.M" format with N >= 2. > > If a Gen1 firmware image is detected in this case, the driver switches > to the Gen1 firmware descriptor and associated platform data so that > the correct HFI implementation is used. > > This change makes firmware generation detection platform‑agnostic, > preserves DT overrides, prefers newer Gen2 firmware when available, > and maintains compatibility with platforms that only support Gen1. > > Co-developed-by: Dmitry Baryshkov > Signed-off-by: Dmitry Baryshkov > Signed-off-by: Dikshita Agarwal > --- > drivers/media/platform/qcom/iris/iris_firmware.c | 105 +++++++++++++++++---- > .../platform/qcom/iris/iris_platform_common.h | 6 +- > .../media/platform/qcom/iris/iris_platform_vpu2.c | 11 ++- > .../media/platform/qcom/iris/iris_platform_vpu3x.c | 8 +- > drivers/media/platform/qcom/iris/iris_probe.c | 4 - > drivers/media/platform/qcom/iris/iris_vidc.c | 3 + > 6 files changed, 105 insertions(+), 32 deletions(-) > > diff --git a/drivers/media/platform/qcom/iris/iris_firmware.c b/drivers/media/platform/qcom/iris/iris_firmware.c > index 1a476146d7580849d7b68c7c15dd7f82f89a680b..64a2170bf538a6d291b3d909f5563408a3a75e50 100644 > --- a/drivers/media/platform/qcom/iris/iris_firmware.c > +++ b/drivers/media/platform/qcom/iris/iris_firmware.c > @@ -16,20 +16,95 @@ > > #define MAX_FIRMWARE_NAME_SIZE 128 > > -static int iris_load_fw_to_memory(struct iris_core *core, const char *fw_name) > +/* Detect Gen2 firmware by scanning the blob for: > + * QC_IMAGE_VERSION_STRING= > + * and then checking: > + * - version starts with "vfw", OR > + * - version matches "video-firmware.N.M" with N >= 2 > + */ > + > +static bool iris_detect_gen2_from_fwdata(const u8 *data, size_t size) > +{ > + const char *marker = "QC_IMAGE_VERSION_STRING="; > + const size_t mlen = strlen(marker); > + int major = 0, minor = 0; > + char version_buf[64]; > + size_t max; > + > + max = (size > mlen) ? size - mlen : 0; better to limit the size of the blob to be parsed to 4K ? version strings should be in the initial part of the firmware image. A bad (and big enough) firmware blob might slow down the system with the current logic something like size = min(size, (size_t)SZ_4K); > + for (size_t i = 0; i < max; i++) { > + if (!memcmp(data + i, marker, mlen)) { > + const char *found = (const char *)(data + i + mlen); > + > + strscpy(version_buf, found, sizeof(version_buf)); > + if (!strncmp(version_buf, "vfw", 3)) > + return true; > + if (sscanf(version_buf, "video-firmware.%d.%d", &major, &minor) == 2 && > + major >= 2) > + return true; > + break; > + } > + } > + > + return false; > +} > + > +static const struct firmware *iris_detect_firmware(struct iris_core *core, > + const char **fw_name) > +{ > + const struct firmware *firmware; > + bool has_both_gens; > + int ret; > + > + *fw_name = NULL; > + if (core->iris_platform_data->firmware_desc_gen2) > + core->iris_firmware_desc = core->iris_platform_data->firmware_desc_gen2; > + else if (core->iris_platform_data->firmware_desc_gen1) > + core->iris_firmware_desc = core->iris_platform_data->firmware_desc_gen1; > + else > + return ERR_PTR(-EINVAL); > + > + has_both_gens = core->iris_platform_data->firmware_desc_gen2 && > + core->iris_platform_data->firmware_desc_gen1; > + > + ret = of_property_read_string_index(dev_of_node(core->dev), "firmware-name", 0, fw_name); > + if (ret) { > + *fw_name = core->iris_firmware_desc->fwname; > + ret = request_firmware(&firmware, *fw_name, core->dev); > + if (ret && has_both_gens) { > + core->iris_firmware_desc = core->iris_platform_data->firmware_desc_gen1; > + *fw_name = core->iris_firmware_desc->fwname; > + ret = request_firmware(&firmware, *fw_name, core->dev); > + } > + > + return ret ? ERR_PTR(ret) : firmware; > + } > + > + ret = request_firmware(&firmware, *fw_name, core->dev); > + if (ret) > + return ERR_PTR(ret); > + > + if (has_both_gens && > + !iris_detect_gen2_from_fwdata((const u8 *)firmware->data, firmware->size)) { > + dev_info(core->dev, "Gen1 FW detected in %s\n", *fw_name); > + core->iris_firmware_desc = core->iris_platform_data->firmware_desc_gen1; > + } > + > + return firmware; > +} > + > +static int iris_load_fw_to_memory(struct iris_core *core) > { > const struct firmware *firmware = NULL; > struct device *dev = core->dev; > struct resource res; > phys_addr_t mem_phys; > + const char *fw_name; > size_t res_size; > ssize_t fw_size; > void *mem_virt; > int ret; > > - if (strlen(fw_name) >= MAX_FIRMWARE_NAME_SIZE - 4) > - return -EINVAL; > - > ret = of_reserved_mem_region_to_resource(dev->of_node, 0, &res); > if (ret) > return ret; > @@ -37,9 +112,11 @@ static int iris_load_fw_to_memory(struct iris_core *core, const char *fw_name) > mem_phys = res.start; > res_size = resource_size(&res); > > - ret = request_firmware(&firmware, fw_name, dev); > - if (ret) > - return ret; > + firmware = iris_detect_firmware(core, &fw_name); > + if (IS_ERR(firmware)) > + return PTR_ERR(firmware); > + > + core->iris_firmware_data = core->iris_firmware_desc->firmware_data; > > fw_size = qcom_mdt_get_size(firmware); > if (fw_size < 0 || res_size < (size_t)fw_size) { > @@ -66,18 +143,12 @@ static int iris_load_fw_to_memory(struct iris_core *core, const char *fw_name) > int iris_fw_load(struct iris_core *core) > { > const struct tz_cp_config *cp_config; > - const char *fwpath = NULL; > int i, ret; > > - ret = of_property_read_string_index(core->dev->of_node, "firmware-name", 0, > - &fwpath); > - if (ret) > - fwpath = core->iris_firmware_desc->fwname; > - > - ret = iris_load_fw_to_memory(core, fwpath); > + ret = iris_load_fw_to_memory(core); > if (ret) { > - dev_err(core->dev, "firmware download failed\n"); > - return -ENOMEM; > + dev_err(core->dev, "firmware download failed %d\n", ret); > + return ret; > } > > ret = qcom_scm_pas_auth_and_reset(IRIS_PAS_ID); > @@ -99,7 +170,7 @@ int iris_fw_load(struct iris_core *core) > } > } > > - return ret; > + return 0; > } > > int iris_fw_unload(struct iris_core *core) > diff --git a/drivers/media/platform/qcom/iris/iris_platform_common.h b/drivers/media/platform/qcom/iris/iris_platform_common.h > index 0408d51188b27251986780de6b4672b155ab1005..7acb073f719746f57ebaa2afd9061db9239f860e 100644 > --- a/drivers/media/platform/qcom/iris/iris_platform_common.h > +++ b/drivers/media/platform/qcom/iris/iris_platform_common.h > @@ -257,11 +257,7 @@ struct iris_firmware_desc { > }; > > struct iris_platform_data { > - /* > - * XXX: replace with gen1 / gen2 pointers once we have platforms > - * supporting both firmware kinds. > - */ > - const struct iris_firmware_desc *firmware_desc; > + const struct iris_firmware_desc *firmware_desc_gen1, *firmware_desc_gen2; > > const struct vpu_ops *vpu_ops; > const struct icc_info *icc_tbl; > diff --git a/drivers/media/platform/qcom/iris/iris_platform_vpu2.c b/drivers/media/platform/qcom/iris/iris_platform_vpu2.c > index 00d6244bc92fd9216bd7c0e6153689e7d8982a67..8259709ba203eac2230da3048166b33892b337b2 100644 > --- a/drivers/media/platform/qcom/iris/iris_platform_vpu2.c > +++ b/drivers/media/platform/qcom/iris/iris_platform_vpu2.c > @@ -22,6 +22,12 @@ const struct iris_firmware_desc iris_vpu20_p1_gen1_desc = { > .fwname = "qcom/vpu/vpu20_p1.mbn", > }; > > +const struct iris_firmware_desc iris_vpu20_p1_gen2_s6_desc = { > + .firmware_data = &iris_hfi_gen2_data, > + .get_vpu_buffer_size = iris_vpu33_buf_size, > + .fwname = "qcom/vpu/vpu20_p1_gen2_s6.mbn", > +}; > + > const struct iris_firmware_desc iris_vpu20_p4_gen1_desc = { > .firmware_data = &iris_hfi_gen1_data, > .get_vpu_buffer_size = iris_vpu_buf_size, > @@ -65,7 +71,8 @@ static const struct tz_cp_config tz_cp_config_vpu2[] = { > }; > > const struct iris_platform_data sc7280_data = { > - .firmware_desc = &iris_vpu20_p1_gen1_desc, > + .firmware_desc_gen1 = &iris_vpu20_p1_gen1_desc, > + .firmware_desc_gen2 = &iris_vpu20_p1_gen2_s6_desc, > .vpu_ops = &iris_vpu2_ops, > .icc_tbl = iris_icc_info_vpu2, > .icc_tbl_size = ARRAY_SIZE(iris_icc_info_vpu2), > @@ -94,7 +101,7 @@ const struct iris_platform_data sc7280_data = { > }; > > const struct iris_platform_data sm8250_data = { > - .firmware_desc = &iris_vpu20_p4_gen1_desc, > + .firmware_desc_gen1 = &iris_vpu20_p4_gen1_desc, > .vpu_ops = &iris_vpu2_ops, > .icc_tbl = iris_icc_info_vpu2, > .icc_tbl_size = ARRAY_SIZE(iris_icc_info_vpu2), > diff --git a/drivers/media/platform/qcom/iris/iris_platform_vpu3x.c b/drivers/media/platform/qcom/iris/iris_platform_vpu3x.c > index 6180104f3b94bf0d5e3206481816802fbd09849d..829dc37b4058101e7dddd484533724272b502560 100644 > --- a/drivers/media/platform/qcom/iris/iris_platform_vpu3x.c > +++ b/drivers/media/platform/qcom/iris/iris_platform_vpu3x.c > @@ -83,7 +83,7 @@ static const struct tz_cp_config tz_cp_config_vpu3[] = { > * - inst_caps to platform_inst_cap_qcs8300 > */ > const struct iris_platform_data qcs8300_data = { > - .firmware_desc = &iris_vpu30_p4_s6_gen2_desc, > + .firmware_desc_gen2 = &iris_vpu30_p4_s6_gen2_desc, > .vpu_ops = &iris_vpu3_ops, > .icc_tbl = iris_icc_info_vpu3x, > .icc_tbl_size = ARRAY_SIZE(iris_icc_info_vpu3x), > @@ -112,7 +112,7 @@ const struct iris_platform_data qcs8300_data = { > }; > > const struct iris_platform_data sm8550_data = { > - .firmware_desc = &iris_vpu30_p4_gen2_desc, > + .firmware_desc_gen2 = &iris_vpu30_p4_gen2_desc, > .vpu_ops = &iris_vpu3_ops, > .icc_tbl = iris_icc_info_vpu3x, > .icc_tbl_size = ARRAY_SIZE(iris_icc_info_vpu3x), > @@ -147,7 +147,7 @@ const struct iris_platform_data sm8550_data = { > * - controller_rst_tbl to sm8650_controller_reset_table > */ > const struct iris_platform_data sm8650_data = { > - .firmware_desc = &iris_vpu33_p4_gen2_desc, > + .firmware_desc_gen2 = &iris_vpu33_p4_gen2_desc, > .vpu_ops = &iris_vpu33_ops, > .icc_tbl = iris_icc_info_vpu3x, > .icc_tbl_size = ARRAY_SIZE(iris_icc_info_vpu3x), > @@ -178,7 +178,7 @@ const struct iris_platform_data sm8650_data = { > }; > > const struct iris_platform_data sm8750_data = { > - .firmware_desc = &iris_vpu35_p4_gen2_desc, > + .firmware_desc_gen2 = &iris_vpu35_p4_gen2_desc, > .vpu_ops = &iris_vpu35_ops, > .icc_tbl = iris_icc_info_vpu3x, > .icc_tbl_size = ARRAY_SIZE(iris_icc_info_vpu3x), > diff --git a/drivers/media/platform/qcom/iris/iris_probe.c b/drivers/media/platform/qcom/iris/iris_probe.c > index dbc15edc602b72fdec8bb2d8d3623676afee728c..89426ed42facca7729c987c5b283d11e862e4fe1 100644 > --- a/drivers/media/platform/qcom/iris/iris_probe.c > +++ b/drivers/media/platform/qcom/iris/iris_probe.c > @@ -251,8 +251,6 @@ static int iris_probe(struct platform_device *pdev) > return core->irq; > > core->iris_platform_data = of_device_get_match_data(core->dev); > - core->iris_firmware_desc = core->iris_platform_data->firmware_desc; > - core->iris_firmware_data = core->iris_firmware_desc->firmware_data; > > core->ubwc_cfg = qcom_ubwc_config_get_data(); > if (IS_ERR(core->ubwc_cfg)) > @@ -271,8 +269,6 @@ static int iris_probe(struct platform_device *pdev) > if (ret) > return ret; > > - iris_session_init_caps(core); > - > ret = v4l2_device_register(dev, &core->v4l2_dev); > if (ret) > return ret; > diff --git a/drivers/media/platform/qcom/iris/iris_vidc.c b/drivers/media/platform/qcom/iris/iris_vidc.c > index 807c9a20b6ba17fdda8e7e91956bdf19e83a3ad8..6fbc20366f5fd3a80468d90d813851ecf54e4cef 100644 > --- a/drivers/media/platform/qcom/iris/iris_vidc.c > +++ b/drivers/media/platform/qcom/iris/iris_vidc.c > @@ -9,6 +9,7 @@ > #include > #include > > +#include "iris_ctrls.h" > #include "iris_vidc.h" > #include "iris_instance.h" > #include "iris_vdec.h" > @@ -196,6 +197,8 @@ int iris_open(struct file *filp) > goto fail_m2m_release; > } > > + iris_session_init_caps(core); > + > if (inst->domain == DECODER) > ret = iris_vdec_inst_init(inst); > else if (inst->domain == ENCODER) >