From nobody Wed Apr 1 14:08:46 2026 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 A4A6E3CEB89 for ; Tue, 31 Mar 2026 07:40:14 +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=1774942820; cv=none; b=daqdyWfVSThgHRpbR/o7NZVMAhqMVvkOMJxkr4co1FSwS+pTzETKBklVKe9Cos1MJ2lXd1T/u6H7bIdyXiXrhLIuco5naVwKNazsmvTPd1V5KMa56kO51kVo/NvEza7dIG98ZElWP1s0bi9RSjMGYNZpE0lN6BZ830HpRQUQdt8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774942820; c=relaxed/simple; bh=ubBf2121TImJmlaj+0em6aEAJSYd5uuMpFcNUZPBaEQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=t2GUCVT2SNbhKySoha03Erkxi677RpqrwB/AcQ9FgdwXMF7ZNCLoSgS3nCI+VK8mUeci61FJtx6SpQa5IeyyIpdQ+IBxvlc55dqvgPbFi+F/ZsiKstBzCDRHr20d6bGK9shlMO9vMwPJtc9Ee88A+s+9s45tcaWopexWeivR4G0= 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=Ke2ISejk; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=OEAO3rG5; 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="Ke2ISejk"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="OEAO3rG5" Received: from pps.filterd (m0279870.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62V5iR1h1841169 for ; Tue, 31 Mar 2026 07:40:13 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= PJD18L49SwGKWLraguoebu9FhTRdw/qTlGqA/By89ME=; b=Ke2ISejkSugl5mpx mR+9SFQh+BhC7/tvp0bl2BQiW4i869uAgBkJDbiSq6k0GPAzr5wJZTk6Tm18STvc NzCEGYYYH8u6+NX52rNHvW+r2iaU8svOeSbakHfOcAGRDwaqWO9NhnyPs9S6PSJ0 am6kmunxNGmS27wC4fonROUK9jNfLAxReklheVtcSAsNGfX7ljS/Iimx4UNc2kEi nS68rccWn7rBXXcZrxrBCqRyw8k+R/XcNga3z36l2hcPpD0M7Hhc6yNtf//m6Utm mC33X9ho/666ls6ykgJ7KZ5yEfmSP5kq8HYuExI+X3e1sCss2R8ylkFwCmXtVh/0 2+Pbcg== Received: from mail-pj1-f71.google.com (mail-pj1-f71.google.com [209.85.216.71]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4d80rshvsc-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Tue, 31 Mar 2026 07:40:13 +0000 (GMT) Received: by mail-pj1-f71.google.com with SMTP id 98e67ed59e1d1-35d9e67f6dcso7158921a91.1 for ; Tue, 31 Mar 2026 00:40:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1774942812; x=1775547612; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=PJD18L49SwGKWLraguoebu9FhTRdw/qTlGqA/By89ME=; b=OEAO3rG5IBaJBe0PUuUlQDBYyCVosgJrLIwlGeJeadKRJGlGOdYGB1VVkl7CVQ/1AW U6O/sV8Qe0b7/4itlcwsUwsJjTxtDiG1XgLWj6WU50U+uCJkzLc1LdO1e/DXT+knzxp7 sBUzijwRhTkF99YwLVAnA4ph3/YubsUZsT9TGb60gwCwWeMM34FsGUvT2kgKgJkJmxfi 8i6dBuM+ztMpX1+aMhQ5C4LhQsxNWBKzJakGkgkTmFpDIrppRpqBgIQ4y64QKUUyztA3 44+hureFPkWkPAc2a4nuspjPKUOBAA6nHOVd4ep9XQDYwDVjs0CO9IbokvSSXYqZrPub n82g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774942812; x=1775547612; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=PJD18L49SwGKWLraguoebu9FhTRdw/qTlGqA/By89ME=; b=VP0js+7WX1eiYdMVhZPEbUG5wXJH6Jke7CAaReX1136NjrftbTpccrrWpKAlyQN77c hG9avVJConmme4vn1hkCeRrZ3fLdEvKyqPcXSZ3QHHgLMglxTfzmj0Aat7z9ML35BFk5 cr3euIAV9q1dB/9XpTt7Do79THj2xIY1cXj2niIC78wZIFzwrpXqaRC4YpHcRb6fvGyX +fM0EUpNIglo8u/A+24Rwy0iRyYEE/yj++dz407Hlk8sAVdcWaDHl9IVSWRcAXBJB6HB r7EDPRrpA7fNNqDQoHYuQlcZsoBtWIsXDD3G4JM7bPh/fzZ6V080SyBLscGbLLZijb6w eWFA== X-Forwarded-Encrypted: i=1; AJvYcCWOvyfN9Vx92RpZfYqE39HWN3wP77AlqUhPP6fP5gbqCdoZl1skK/gsXoVisaWbpjOwi+jUtMEkklBvnEo=@vger.kernel.org X-Gm-Message-State: AOJu0YyudS1it3IVfwW01Mzz71M04elDJkc+tbmU3qLS3F1EFwte4Hp1 J2eSHt06zIf9Vc0F2O3q/usm/M93ObdzpfziJBsrb6ZopQSjOOBVurboP2u88yah+ciwgR5RJLM mT0y5CPp+0rj0zun4ObKG4YqBj4V5dpUOZ/Ya2l+MMOO9eZMxL/O6qEWDBObVzybZ1bagR8QU5k M= X-Gm-Gg: ATEYQzwfZ1ObcjtTkQCSDI+GLKDLrBfu7osAp261mIhue3MYXS0Bs2nonw2+7l34pdn APrGcuw6H//IwmH23hoEDDfPEzgr9JyBH4tN/gVYy6BDhdfCFf1GfUQY6KsqFwwLFA82x+D6ztf cceR1nC6clzdwXJ5GjHD2Kc38E3n3oXJku6SF59oV9ZjCEeQ4YfXfdHGAXF0S8uEYYlIuX1ho80 EPaAYLqozF7nFs/uY+KcM2bztKbtaSQkS0lWAMQX6dvmGGUDhPYQn+LfjHXgCdSnsCwZuc40819 w9pk/Klx77EicKCU4trQ8Piz+YPf8YcLBWhrBGp6rBIUv8ZNISFVhsfzHbKmIZUsJf4jgr4150h V+otk7vznOMneyyaWK3/FJmbi10p5V1tVNILK7jpxplCZ/hd9nYyIg6VQbFw= X-Received: by 2002:a05:6a20:7fa4:b0:39c:787:f185 with SMTP id adf61e73a8af0-39c87915751mr16954128637.29.1774942811782; Tue, 31 Mar 2026 00:40:11 -0700 (PDT) X-Received: by 2002:a05:6a20:7fa4:b0:39c:787:f185 with SMTP id adf61e73a8af0-39c87915751mr16954104637.29.1774942811329; Tue, 31 Mar 2026 00:40:11 -0700 (PDT) Received: from hu-dikshita-hyd.qualcomm.com ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-c76916baab6sm8013076a12.2.2026.03.31.00.40.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 31 Mar 2026 00:40:11 -0700 (PDT) From: Dikshita Agarwal Date: Tue, 31 Mar 2026 13:09:57 +0530 Subject: [PATCH v3 3/3] media: iris: Add Gen2 firmware autodetect and fallback on SC7280 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: <20260331-kodiak-gen2-support-v3-3-958296fab838@oss.qualcomm.com> References: <20260331-kodiak-gen2-support-v3-0-958296fab838@oss.qualcomm.com> In-Reply-To: <20260331-kodiak-gen2-support-v3-0-958296fab838@oss.qualcomm.com> To: Vikash Garodia , Abhinav Kumar , Bryan O'Donoghue , Mauro Carvalho Chehab , Hans Verkuil , Vishnu Reddy Cc: linux-media@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, Dikshita Agarwal X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1774942796; l=11196; i=dikshita.agarwal@oss.qualcomm.com; s=20240917; h=from:subject:message-id; bh=ubBf2121TImJmlaj+0em6aEAJSYd5uuMpFcNUZPBaEQ=; b=/NfBT/WGh9zQpaHcv8Bnejscd18jYgr/xTJk/Zl9mqpBgG8ZwQgdep1orJqNxnVesIldRcugG CuBOtmcJfA+CwoDJtv8aIJsox2/cZjgWgUNW2sd2lm3WauAnrdS/3aG X-Developer-Key: i=dikshita.agarwal@oss.qualcomm.com; a=ed25519; pk=EEvKY6Ar1OI5SWf44FJ1Ebo1KuQEVbbf5UNPO+UHVhM= X-Proofpoint-GUID: Eml7jZEgKRCaSwXj4843ckHqih1yqelt X-Authority-Analysis: v=2.4 cv=VInQXtPX c=1 sm=1 tr=0 ts=69cb7a5d cx=c_pps a=UNFcQwm+pnOIJct1K4W+Mw==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=gowsoOTTUOVcmtlkKump:22 a=EUspDBNiAAAA:8 a=Bx_ZIWocDv9EhjstIRYA:9 a=QEXdDO2ut3YA:10 a=uKXjsCUrEbL0IQVhDsJ9:22 X-Proofpoint-ORIG-GUID: Eml7jZEgKRCaSwXj4843ckHqih1yqelt X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzMxMDA3MiBTYWx0ZWRfX4wMB+Dj1e0sL NTrfayToZLQLaUPEMfLV5H0iN/f637q/C5LWTsbwqyq6wwsLHWFFbvLE933e9441bzQYL1HexgP WBLN/fGeXsN3acBzLs8bIlp5m9QuFA7Ud04CCG6DUvi1KapJejcafLZn9XvfcCX3nJwWFpCwdsv 0EQW80zlqWNIJhL+yrdXS62GIqws0+JUBaePEL+J5azCPLF1WTMcSVL3O/jlwlsVUsla2JMB5X/ yqLX523tUuvA+0UY65e4zzx0On2woc1ibf0AQfQNoToog+5cwYkQXGDPlYcU/fZyiODyn44Ya9t CvhriL3CWxBQiYm+dWKGyFE8QNMiNk0qE+9AsadS2EhwkmE/4M8WZ6w8jbUY52yStEyL077Mmsz wUxZwsGhHHyUynneVOtI9bTpzz9J4wRdQstwWaZbNpH1mkrPVlYeLVweR2Mgd2dt3Si5OCp649a B1iNkj6/S6S/rkWsZzw== 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-03-31_02,2026-03-28_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 adultscore=0 malwarescore=0 clxscore=1015 priorityscore=1501 spamscore=0 impostorscore=0 lowpriorityscore=0 phishscore=0 bulkscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603310072 SC7280 supports both Gen1 and Gen2 HFI firmware. To support both dynamically, update the firmware loading mechanism to prioritize Gen2 availability and detect the loaded firmware version at runtime. The firmware loading logic is updated with the following priority: 1. Device Tree (`firmware-name`): If specified, load unconditionally. 2. Gen2 Autodetect : If no DT property exists, attempt to load the Gen2 firmware image. 3. Gen1 Fallback (SC7280 only): If Gen2 loading fails, fallback to the Gen1 firmware image. At probe time, SC7280 now defaults to the Gen2 firmware descriptor and Gen2 HFI when available. Introduce iris_detect_gen2_from_fwdata() to detect the firmware generation by inspecting the loaded firmware image before authentication, based on QC_IMAGE_VERSION_STRING and classify the firmware as Gen2 if the version string starts with "vfw" or matches "video-firmware.N.M" with N >=3D 2. If the loaded firmware on SC7280 is detected as Gen1, the driver switches the firmware descriptor and platform data to the Gen1 configuration so that the correct HFI implementation is used. This preserves DT overrides, prefers Gen2 firmware, and maintains compatibility with Gen1-only SC7280 devices. Signed-off-by: Dikshita Agarwal --- drivers/media/platform/qcom/iris/iris_firmware.c | 65 ++++++++++++++++++= +--- .../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 | 8 ++- drivers/media/platform/qcom/iris/iris_vidc.c | 3 + 6 files changed, 80 insertions(+), 21 deletions(-) diff --git a/drivers/media/platform/qcom/iris/iris_firmware.c b/drivers/med= ia/platform/qcom/iris/iris_firmware.c index 1a476146d7580849d7b68c7c15dd7f82f89a680b..481c33c9fb4daa0d547c43f776f= 188c17de6b35e 100644 --- a/drivers/media/platform/qcom/iris/iris_firmware.c +++ b/drivers/media/platform/qcom/iris/iris_firmware.c @@ -16,6 +16,39 @@ =20 #define MAX_FIRMWARE_NAME_SIZE 128 =20 +/* Detect Gen2 firmware by scanning the blob for: + * QC_IMAGE_VERSION_STRING=3D + * and then checking: + * - version starts with "vfw", OR + * - version matches "video-firmware.N.M" with N >=3D 2 + */ + +static bool iris_detect_gen2_from_fwdata(const u8 *data, size_t size) +{ + const char *marker =3D "QC_IMAGE_VERSION_STRING=3D"; + const size_t mlen =3D strlen(marker); + int major =3D 0, minor =3D 0; + char version_buf[64]; + size_t max; + + max =3D (size > mlen) ? size - mlen : 0; + for (size_t i =3D 0; i < max; i++) { + if (!memcmp(data + i, marker, mlen)) { + const char *found =3D (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) =3D=3D = 2 && + major >=3D 2) + return true; + break; + } + } + + return false; +} + static int iris_load_fw_to_memory(struct iris_core *core, const char *fw_n= ame) { const struct firmware *firmware =3D NULL; @@ -47,6 +80,14 @@ static int iris_load_fw_to_memory(struct iris_core *core= , const char *fw_name) goto err_release_fw; } =20 + if (of_device_is_compatible(core->dev->of_node, "qcom,sc7280-venus")) { + if (!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 =3D core->iris_platform_data->firmware_desc_ge= n1; + core->iris_firmware_data =3D core->iris_firmware_desc->firmware_data; + } + } + mem_virt =3D memremap(mem_phys, res_size, MEMREMAP_WC); if (!mem_virt) { ret =3D -ENOMEM; @@ -65,19 +106,29 @@ static int iris_load_fw_to_memory(struct iris_core *co= re, const char *fw_name) =20 int iris_fw_load(struct iris_core *core) { + struct device_node *node =3D core->dev->of_node; const struct tz_cp_config *cp_config; const char *fwpath =3D NULL; + bool is_sc7280; int i, ret; =20 - ret =3D of_property_read_string_index(core->dev->of_node, "firmware-name"= , 0, - &fwpath); - if (ret) + is_sc7280 =3D of_device_is_compatible(node, "qcom,sc7280-venus"); + + ret =3D of_property_read_string_index(node, "firmware-name", 0, &fwpath); + if (!ret) { + ret =3D iris_load_fw_to_memory(core, fwpath); + } else { fwpath =3D core->iris_firmware_desc->fwname; + ret =3D iris_load_fw_to_memory(core, fwpath); + if (ret =3D=3D -ENOENT && is_sc7280) { + dev_dbg(core->dev, "Gen2 FW not found, falling back to Gen1\n"); + ret =3D iris_load_fw_to_memory(core, sc7280_data.firmware_desc_gen1->fw= name); + } + } =20 - ret =3D iris_load_fw_to_memory(core, fwpath); if (ret) { - dev_err(core->dev, "firmware download failed\n"); - return -ENOMEM; + dev_err(core->dev, "firmware download failed %d\n", ret); + return ret; } =20 ret =3D qcom_scm_pas_auth_and_reset(IRIS_PAS_ID); @@ -99,7 +150,7 @@ int iris_fw_load(struct iris_core *core) } } =20 - return ret; + return 0; } =20 int iris_fw_unload(struct iris_core *core) diff --git a/drivers/media/platform/qcom/iris/iris_platform_common.h b/driv= ers/media/platform/qcom/iris/iris_platform_common.h index 0408d51188b27251986780de6b4672b155ab1005..7acb073f719746f57ebaa2afd90= 61db9239f860e 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 { }; =20 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; =20 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/driver= s/media/platform/qcom/iris/iris_platform_vpu2.c index 00d6244bc92fd9216bd7c0e6153689e7d8982a67..8259709ba203eac2230da304816= 6b33892b337b2 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 = =3D { .fwname =3D "qcom/vpu/vpu20_p1.mbn", }; =20 +const struct iris_firmware_desc iris_vpu20_p1_gen2_s6_desc =3D { + .firmware_data =3D &iris_hfi_gen2_data, + .get_vpu_buffer_size =3D iris_vpu33_buf_size, + .fwname =3D "qcom/vpu/vpu20_p1_gen2_s6.mbn", +}; + const struct iris_firmware_desc iris_vpu20_p4_gen1_desc =3D { .firmware_data =3D &iris_hfi_gen1_data, .get_vpu_buffer_size =3D iris_vpu_buf_size, @@ -65,7 +71,8 @@ static const struct tz_cp_config tz_cp_config_vpu2[] =3D { }; =20 const struct iris_platform_data sc7280_data =3D { - .firmware_desc =3D &iris_vpu20_p1_gen1_desc, + .firmware_desc_gen1 =3D &iris_vpu20_p1_gen1_desc, + .firmware_desc_gen2 =3D &iris_vpu20_p1_gen2_s6_desc, .vpu_ops =3D &iris_vpu2_ops, .icc_tbl =3D iris_icc_info_vpu2, .icc_tbl_size =3D ARRAY_SIZE(iris_icc_info_vpu2), @@ -94,7 +101,7 @@ const struct iris_platform_data sc7280_data =3D { }; =20 const struct iris_platform_data sm8250_data =3D { - .firmware_desc =3D &iris_vpu20_p4_gen1_desc, + .firmware_desc_gen1 =3D &iris_vpu20_p4_gen1_desc, .vpu_ops =3D &iris_vpu2_ops, .icc_tbl =3D iris_icc_info_vpu2, .icc_tbl_size =3D ARRAY_SIZE(iris_icc_info_vpu2), diff --git a/drivers/media/platform/qcom/iris/iris_platform_vpu3x.c b/drive= rs/media/platform/qcom/iris/iris_platform_vpu3x.c index 6180104f3b94bf0d5e3206481816802fbd09849d..829dc37b4058101e7dddd484533= 724272b502560 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[] =3D { * - inst_caps to platform_inst_cap_qcs8300 */ const struct iris_platform_data qcs8300_data =3D { - .firmware_desc =3D &iris_vpu30_p4_s6_gen2_desc, + .firmware_desc_gen2 =3D &iris_vpu30_p4_s6_gen2_desc, .vpu_ops =3D &iris_vpu3_ops, .icc_tbl =3D iris_icc_info_vpu3x, .icc_tbl_size =3D ARRAY_SIZE(iris_icc_info_vpu3x), @@ -112,7 +112,7 @@ const struct iris_platform_data qcs8300_data =3D { }; =20 const struct iris_platform_data sm8550_data =3D { - .firmware_desc =3D &iris_vpu30_p4_gen2_desc, + .firmware_desc_gen2 =3D &iris_vpu30_p4_gen2_desc, .vpu_ops =3D &iris_vpu3_ops, .icc_tbl =3D iris_icc_info_vpu3x, .icc_tbl_size =3D ARRAY_SIZE(iris_icc_info_vpu3x), @@ -147,7 +147,7 @@ const struct iris_platform_data sm8550_data =3D { * - controller_rst_tbl to sm8650_controller_reset_table */ const struct iris_platform_data sm8650_data =3D { - .firmware_desc =3D &iris_vpu33_p4_gen2_desc, + .firmware_desc_gen2 =3D &iris_vpu33_p4_gen2_desc, .vpu_ops =3D &iris_vpu33_ops, .icc_tbl =3D iris_icc_info_vpu3x, .icc_tbl_size =3D ARRAY_SIZE(iris_icc_info_vpu3x), @@ -178,7 +178,7 @@ const struct iris_platform_data sm8650_data =3D { }; =20 const struct iris_platform_data sm8750_data =3D { - .firmware_desc =3D &iris_vpu35_p4_gen2_desc, + .firmware_desc_gen2 =3D &iris_vpu35_p4_gen2_desc, .vpu_ops =3D &iris_vpu35_ops, .icc_tbl =3D iris_icc_info_vpu3x, .icc_tbl_size =3D 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..898260a1a1ea65ba8e082b1d1df= 0ef5f34a733eb 100644 --- a/drivers/media/platform/qcom/iris/iris_probe.c +++ b/drivers/media/platform/qcom/iris/iris_probe.c @@ -251,7 +251,11 @@ static int iris_probe(struct platform_device *pdev) return core->irq; =20 core->iris_platform_data =3D of_device_get_match_data(core->dev); - core->iris_firmware_desc =3D core->iris_platform_data->firmware_desc; + + if (core->iris_platform_data->firmware_desc_gen2) + core->iris_firmware_desc =3D core->iris_platform_data->firmware_desc_gen= 2; + else + core->iris_firmware_desc =3D core->iris_platform_data->firmware_desc_gen= 1; core->iris_firmware_data =3D core->iris_firmware_desc->firmware_data; =20 core->ubwc_cfg =3D qcom_ubwc_config_get_data(); @@ -271,8 +275,6 @@ static int iris_probe(struct platform_device *pdev) if (ret) return ret; =20 - iris_session_init_caps(core); - ret =3D 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/p= latform/qcom/iris/iris_vidc.c index 807c9a20b6ba17fdda8e7e91956bdf19e83a3ad8..6fbc20366f5fd3a80468d90d813= 851ecf54e4cef 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 =20 +#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; } =20 + iris_session_init_caps(core); + if (inst->domain =3D=3D DECODER) ret =3D iris_vdec_inst_init(inst); else if (inst->domain =3D=3D ENCODER) --=20 2.34.1