From nobody Mon Jun 8 11:07:05 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 A52273DB32F for ; Fri, 29 May 2026 14:37:00 +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=1780065423; cv=none; b=XsDL+8vPXRCs9akhuk18hiQ7UBhj9BT099iSYDSZJyMbhnpz4ujIFbH+n5tJWn5h6F5hnVwVtSEulQ/E5rBM+qKl+zpLdqzze/YNdCOjvxbBhbxUqE0VN1L79agBgPlDMPeGsKci6MQYDXi7KNB0cFgueMQadRYf1UC41McBntY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780065423; c=relaxed/simple; bh=UAxB3FbLEll7mPh4olvchmGWKKYFPfMHb+VfDd8w3QM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=thl5wOQGNYBYXu5XDs79ldyWOlP+eW8gc7dLTTEbfAxCAvmRpU3CrfcacFmKbvI4UzwFbTemGVlDUra4iqfJxr0bR071ha0k0xd+MENErHxufiA1DruzS09vPaE35DzWq92JEXONSR7sU3bGg9DWA/GYgO0m8QbqZIAbzTwvTgE= 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=hbDGnaUk; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=IPWNgl0A; 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="hbDGnaUk"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="IPWNgl0A" Received: from pps.filterd (m0279869.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 64TDL0NX2334950 for ; Fri, 29 May 2026 14:36:59 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= qVoT8vU1JD5H6cyjWhce4nmuiIGVZhevzhHyW5tT51s=; b=hbDGnaUkvebLYk7u v80fv4DPtJaNcIbVfMf7t4FZpjDj2jADMPADIjbH9BtvkaJ22HBdLJput1UDJhHf CbC9qpKzYK2ZYYTrGekg8Pd9fEWWHhKz2ykRXS72ev+DiRyVBu94OnxYSgyvivw0 DKvBJr9tar7couOADlGxx4mnNd3Gi21ee3sSEmRvHVSLvTjgcUKkMIC44UPN/1I3 ncAZNeb0GyKUZWbrSjBMRvmpA9r3k8AlJ2WrGzpznmPEOCT7uG5G76F3Xl/EnaTM TXrSpRD6dk0JYra1NWzzkWRKoMLvCR5scHUwVehs4YWg3hQ0G2jCEXKBOfujLlFe c+E/pg== Received: from mail-vs1-f71.google.com (mail-vs1-f71.google.com [209.85.217.71]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4ef4jj26w3-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 29 May 2026 14:36:59 +0000 (GMT) Received: by mail-vs1-f71.google.com with SMTP id ada2fe7eead31-636fce7dc8dso6788323137.2 for ; Fri, 29 May 2026 07:36:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1780065419; x=1780670219; 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=qVoT8vU1JD5H6cyjWhce4nmuiIGVZhevzhHyW5tT51s=; b=IPWNgl0A27v5yzMkF2nLKM004NI1f63/kX7zuuRT4BlK1D5f/ew/MNHXoyDtak1XYX VGqHbk/1dIRKDjVoOnEzosxfb1iCVLCB6+XWrDYRTR11TS4ZMX0qHRbP1r16BYLoPcH6 x5KQA7U54qJipaX+FpzkovwmBt8wmbgysd+xI57uGLapeQESqEpZcIZDLbUhaknmFn09 +8UiPldxHtUBZncwQQg1TNg3nzWO19MoZFjR+VrqFBWTMatWNpASnYVF0QhpfUGcK/hW 8qnB2Z9qIHojT67mN+MkHdHNHWHypIxrZnHLItHMWC/BrdaDXbmxxpX57IZmVrzmUVsT 948Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780065419; x=1780670219; 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=qVoT8vU1JD5H6cyjWhce4nmuiIGVZhevzhHyW5tT51s=; b=QcMRbJmCIjk+tT6Y7/buLig4e17mZuCoBI22ffDA7CyR+ZtEYsJI75Gfh+YPMqWDSH UYb7/YlY3j4WWM0yXDpe2S7sdmAX6h5L8/8Es2k3pwci1WJyXKUe0z3pXSWElPQ1nXNX urTzRY6rdvWss+VB7MRdikT+nWIjDxc4/C4eTBPdzWq6AHh6lwRLV6HFtdoudonK3iCk eBE4YumpDH5fRIzDOhfjmcjTv6rZMpSArR3XyvtDAR5vVtbFkNLbOYTxsu4+Ia5xNRn/ TNJg13ii0w+uoHlDZyglJx6B61t1FTMCKkUFH1OPwtuUZRW5eGq/CJgJxDoOrCyhFE/e I7Rw== X-Forwarded-Encrypted: i=1; AFNElJ+F3fAC8ZXciqGxdxdZXuehIcllB39hEbLe3/ug3M4sF71lN2MtifvrNA4aM1hwfizS74WxXPOZBuvTMxg=@vger.kernel.org X-Gm-Message-State: AOJu0Ywwf8MHrBRJcrHz7nMULSz+igsumNW5duE2PlUHEBt0e7gVoT2d 9lYeLZiDAO3zO1KO2Dkkvhu9a+Z89vExn4c0N2OZwkQszu4pRBuo58UQVBdLJPpH24Y2u4dm1xg 7/i6orlaKP3W/qcQdxmsS8LL5XYmfefkATq4c7A/zEsRFVsHG4DqxNIHDb9JGwuWoCE4= X-Gm-Gg: Acq92OF+pHWehlmAG7fI0MSkCdcsTZWE5qzyRHGNTECJFCdgnAMrmugSJ8iAS9A3Mxx zXAFFgeZBaMx7oEWm56aKQMUy+T5PzpD2Kc+yhayfUZo0NcJhpvSUANmPA9MiJUkwSyFUDSnzz4 RbpiRtfIbSyVdOL2EdaYuXKXH93g4YyJOyAy/JTiaFr/ExWDyJy4nDi9DE8fhLav2ZcxV6dEEqh Lo1zpFE3HCEZWnvDrA3YO5h5OZ193uakXDU6e46VjP6pcCzqyDs6dG6k9KMtX2wdQkumltv6sPn kBzUujWu5c4stCbBCVemZNJq/kZSQZeH9k4LfKbTWUGR41CUmZqn+QuWL2G3pkrNmNagol1gWmz KcNEHyD8+qbO9sTSohbnVFzFkpOJ/7TLYOV95cY4Uv215hhYwgc8YsnHPNuldXobE1NUP2L2ghj +baKblz2fmFgX7+GEAMFKDOtzX/yw3zoKEdE6Ej2q5JEc3NQ== X-Received: by 2002:a05:6102:3e05:b0:631:28c1:155c with SMTP id ada2fe7eead31-6bf2fd47168mr1410121137.7.1780065418537; Fri, 29 May 2026 07:36:58 -0700 (PDT) X-Received: by 2002:a05:6102:3e05:b0:631:28c1:155c with SMTP id ada2fe7eead31-6bf2fd47168mr1410105137.7.1780065418131; Fri, 29 May 2026 07:36:58 -0700 (PDT) Received: from umbar.lan (2001-14ba-a073-af00-264b-feff-fe8b-be8a.rev.dnainternet.fi. [2001:14ba:a073:af00:264b:feff:fe8b:be8a]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5aa5b068a9dsm316317e87.11.2026.05.29.07.36.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 29 May 2026 07:36:56 -0700 (PDT) From: Dmitry Baryshkov Date: Fri, 29 May 2026 17:36:54 +0300 Subject: [PATCH v6 1/2] media: iris: Initialize HFI ops after firmware load in core init 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: <20260529-kodiak-gen2-support-v4-v6-1-9a81bfa797d9@oss.qualcomm.com> References: <20260529-kodiak-gen2-support-v4-v6-0-9a81bfa797d9@oss.qualcomm.com> In-Reply-To: <20260529-kodiak-gen2-support-v4-v6-0-9a81bfa797d9@oss.qualcomm.com> To: Vikash Garodia , 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, Dikshita Agarwal , Bryan O'Donoghue X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1650; i=dmitry.baryshkov@oss.qualcomm.com; h=from:subject:message-id; bh=oZnKWHIxLAD7FiUYWHIMeDo3t9uClgh2ie7UGzCwNak=; b=owEBbQGS/pANAwAKAYs8ij4CKSjVAcsmYgBqGaSGO4FuZhnlQ20+b1/ECLy6cyVfhive9Ls1Q CtaC8CrmluJATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCahmkhgAKCRCLPIo+Aiko 1WX9B/9ZfPEaWiWlvdvlkDuSYhAeVY7HaiHJkIhYRrToEkWN3ojzK4/WNdSaR0Jdwvca6aTOUVC 6ZM2XqHGiurdDUAGNH+wCKmH4jb2rGIy7zhOFMZFPDANtMaGW56dFponaCUsGeP/4ooKFwTvhS9 WbfMcbDu7UEsLapOcN0g+nyxcOaTxGi9jk9VZWBcZwoCyazWMx6QROVgj08xoBfiOce2va3KF5s O8/UuIVmoCGr4LxS1vj1bs9gMUgy176gRDGtB37jDhmAgIyx81d+WeSoBTUS0QvHIC1hRYvSPUB f1Fen15ryIRnOH8zHcPaygPxbtlJSDpECIRpqUXS+6ZVhnV5 X-Developer-Key: i=dmitry.baryshkov@oss.qualcomm.com; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNTI5MDE0NCBTYWx0ZWRfX0SHwJcse3/uW wAd1W4WJ7hy7BiLB7K+ugn1comjHUZjZ4qz7KRE09MlEQ0cuxdA2SxCKP8uoZ168q692Gcxjyfz JrLapUZcAXaFr9xMS8ZzkNPLNDb8fVZf6EpGi+xWeq5R73FrfeMupLQcgKt/4yLaNl4o5sbrzz2 Wx8vjnczU1VH4OPH688ywTkLmQOxK3noIzFGFMRmbVMNxNEJK4JfkB4C5jCDQVgAm+C64E/ag4f j6R56Jh9fxEO7DYAdJB+OspDGbcFOvVKKUwRrQ9CCzyFCEhzdmlVaeEqFMT0wD6IHrTthKNjs3N QmK7Drx+e1tJqyZpfAq6g7x6rftPL+KpO8tGRGgsHMBuFWY99ECnsjG4njKGQc/shsy3Z6gf6sa C8TkVdDJIkDJtxbZ4Yot1AsE3AWMeYYWk37YbC6TC4wGQafHxkjzMpL3aG26kA1Cgsd9NX/7ESJ nKqnuX+4wu6x/QTOqHg== X-Proofpoint-ORIG-GUID: jZS7wdZQoakwGL9E4Is2ssa5va8LXong X-Authority-Analysis: v=2.4 cv=Tt7WQjXh c=1 sm=1 tr=0 ts=6a19a48b cx=c_pps a=P2rfLEam3zuxRRdjJWA2cw==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=NGcC8JguVDcA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_glEPmIy2e8OvE2BGh3C:22 a=EUspDBNiAAAA:8 a=KKAkSRfTAAAA:8 a=_zkiGRivnqQB5cGHL1IA:9 a=QEXdDO2ut3YA:10 a=ODZdjJIeia2B_SHc_B0f:22 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-GUID: jZS7wdZQoakwGL9E4Is2ssa5va8LXong X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.125,FMLib:17.12.100.49 definitions=2026-05-29_04,2026-05-28_03,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 lowpriorityscore=0 clxscore=1015 impostorscore=0 bulkscore=0 adultscore=0 malwarescore=0 phishscore=0 spamscore=0 priorityscore=1501 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2605210000 definitions=main-2605290144 From: Dikshita Agarwal The HFI sys ops were previously initialized in probe() but, we don't have firmware loaded at probe time. Since HFI is tightly coupled to firmware, initialize the HFI sys ops after firmware has been successfully loaded and booted. Reviewed-by: Bryan O'Donoghue Reviewed-by: Dmitry Baryshkov Signed-off-by: Dikshita Agarwal Signed-off-by: Dmitry Baryshkov --- drivers/media/platform/qcom/iris/iris_core.c | 2 ++ drivers/media/platform/qcom/iris/iris_probe.c | 1 - 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/media/platform/qcom/iris/iris_core.c b/drivers/media/p= latform/qcom/iris/iris_core.c index e6141012cd3d..a1823ded46e8 100644 --- a/drivers/media/platform/qcom/iris/iris_core.c +++ b/drivers/media/platform/qcom/iris/iris_core.c @@ -74,6 +74,8 @@ int iris_core_init(struct iris_core *core) if (ret) goto error_unload_fw; =20 + core->iris_firmware_data->init_hfi_ops(core); + ret =3D iris_hfi_core_init(core); if (ret) goto error_unload_fw; diff --git a/drivers/media/platform/qcom/iris/iris_probe.c b/drivers/media/= platform/qcom/iris/iris_probe.c index 9f8113ec7a50..40884582de55 100644 --- a/drivers/media/platform/qcom/iris/iris_probe.c +++ b/drivers/media/platform/qcom/iris/iris_probe.c @@ -266,7 +266,6 @@ static int iris_probe(struct platform_device *pdev) disable_irq_nosync(core->irq); =20 iris_init_ops(core); - core->iris_firmware_data->init_hfi_ops(core); =20 ret =3D iris_init_resources(core); if (ret) --=20 2.47.3 From nobody Mon Jun 8 11:07:05 2026 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.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 934FD30B51D for ; Fri, 29 May 2026 14:37:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780065427; cv=none; b=Z94kEZjdwZ2IQ2WkU3bWcrLQrj0lTEbSiSIbleg9GX3toDSshJbv/dpUM6Xc+nhZ1M05oTReObj9WkbMyGlk23PwYqW4ibB4zrx4I74HN9Myc4laxFmvNfjR4ilOdiBrFEAslD/XDhwmMVATmVJLzQEqwdl5Bk0dM4sEY7uaqrE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780065427; c=relaxed/simple; bh=1xy1gJ9PdVF6ss0PkG0mCWxg1U3DwqwbuaxRhZV4Yac=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=leSFtHIamkPF9PGJWM4DDrcgtMxI9b1LLhH728r6mWJoLTjiDeB8enp/OUbhAkTHQsGxfxLSg+aWfDUc6SJceyRZmkaZ+Mlu8oRkyCMWhkRhdbDhJwtrOHuOgpFhwXHJtbW6cxBXvCmKTQ5zMxQoe7vHin3A+tLmoqnnVQcj6Hc= 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=QHirG+2/; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=IXhixrxj; arc=none smtp.client-ip=205.220.168.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="QHirG+2/"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="IXhixrxj" Received: from pps.filterd (m0279864.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 64TDLGI7154898 for ; Fri, 29 May 2026 14:37:02 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= 9TF1XQ4ufcmi+3XoVjIjvt3xQiKe0bsNGyrpJZ5oa/I=; b=QHirG+2/CxGAHoqe 4QmJJtok8ay9luYI08Kb7LqRZDY7imeDwCQoYhL0ujycPRVRXS3PK7n8Q88uH28s qCByNpJfpj7mK28gZu8/KC+aXbu55xnuRKB/mosd87LNkGAYns921ar6SwBbDNzz c5bZsmbJQP7gaa1DDdCoAYA8TKB0KMTIMcc6vdWAxEMg3va9X68+fdJmwYgnii+C Z7+T39TrG4dG3MCQl23yrzLlcWxk//zJu9SNYb61sC4yCJZ3KBI4F91c7QuGYQZy Ng2F2wcpqwRMVRaunpPuXf7wsZDg61KZ9/sYXRPscPs27EtairUaLrzGmLtKFMhQ RId9Hw== Received: from mail-qt1-f198.google.com (mail-qt1-f198.google.com [209.85.160.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4eeuy5c768-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 29 May 2026 14:37:01 +0000 (GMT) Received: by mail-qt1-f198.google.com with SMTP id d75a77b69052e-514ae0e3ad6so344201011cf.0 for ; Fri, 29 May 2026 07:37:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1780065421; x=1780670221; 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=9TF1XQ4ufcmi+3XoVjIjvt3xQiKe0bsNGyrpJZ5oa/I=; b=IXhixrxjtZTzvf5fcS/x8R7ZJvM89mv5W74bD7C2k7YrSLLS2Nqu7FmTQTxZXelbQQ Jk/CYRMMMhSRwlPU31cHs1LprXNIcvbUPxsF+MgV0CgGRuY6AdpoaNKqIJ/wdSNGmVyS znEZsWpaghaEUYYa6Ry6nWV4Oh49Vyes0wi909dlurMyZb9IuADcmwFFH1XokGe4kvib kKaz8ULzMDI9xQluzVVPgbFKP5EEroXD0ITz/JBbcthnoRc35X62651HEdj/jCp8IDo9 Q5d9d72pAPizwPzPvpM8SFzQ+jg/zoLC1w2o5jf8pi+BvLTndajN5uLW/5nxbVNODwUM RZrQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780065421; x=1780670221; 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=9TF1XQ4ufcmi+3XoVjIjvt3xQiKe0bsNGyrpJZ5oa/I=; b=IPdeSN7XTSHMEWjgHCJF6oK/e/Iv7z2mXV6TySUcYFef1JRR1M10oL/Gi+AJ4vkwWf JTyol+vUsK5pn3wJR0pk6WJkgQPxFYS+p9utHPYMAK3y9Qfrc2IyWHro9UeGPJQvo2YG lUC3odiDFJylLPTMH0ZO18TemHyJdRHb4fLAa1Gtn/QQ3xmnMWEnlZ8f1gAZviFR6t+I LQTwNfeAOyj6NG6TqJnc8Zhe5ByyQ8ZjUnYe+pORVTgmIM6QPlD84KKmyyS05qzT5nXp 5ANZKozobpohiYLC2SdQp4X7/DveiAxbTY0SzehJREgIY52glvVr12QhU/lhMpL8v3DK uNlw== X-Forwarded-Encrypted: i=1; AFNElJ9xFqjwYlJkqmGtC02d/S5Z9NNbWxEgMtJi8YQ2mhp8WOLx5Kjc3KdE10x4lpNlrLsWr0BA61mcP30cUD4=@vger.kernel.org X-Gm-Message-State: AOJu0YxR4AO5nLEhoqtdCo28e5nK+Tr7MTFC9iAl+RcisRlyqtdfK19S LyEuMqFWJHxrSHyJEEYTKLIt/izwT6R2CgTBrPPUrysBmAOaZ4P6rwjs9lSHhVmWX7o5SroTQII KzNWtDjEpKNXDeP/hcMJpv57nrG4xyWoHpn/Tj78I5fPWwGeYlGHEtN+r21IA74yo0X8= X-Gm-Gg: Acq92OELjreEhML59YWm3yjj5ldOHrtIPV7EHMGp7rPZmZ9f1wVBB253uEAAZERIRVQ dndS/0lpy3U5z0NZrDW919bL+19ybm0v25hpT+SstyWJsEYND0qD3yaT7tjDDjzGnocWs3AAfb6 vnE9A9K2ShleS/JjJaRuuepwr9kxqPTUtUb1E36hUV+ReFRT+4e4kIeNDf1BzlPXcWCn8dY2SQN 0EH7o0ckppoiW1pci7cH46B1Uo06MpgRXfra1FB2VEo9GlUgKLRkvPXjKRGe6/RbFs0z/3+r/9A LbQtCc+LRr6zs7K9SGxvlz3tpNaCueA3j44ZGv61gXkZMlYuoaO9eKkk1W58YZ9v5QWCg2BzQLY fVy5x/IXseKLVgc1lixkjPVXQjA6tlPj11VZD6fBWp0YM2glBnMhNhcEKp/K00Xi/YLD75yN/YQ H0592rAa39WV+fMhtdZKUWIqiYLxJu7yVt+IOClcoG8NWMQA== X-Received: by 2002:a05:622a:15d3:b0:50d:9c1b:941f with SMTP id d75a77b69052e-5172db7232cmr35139021cf.8.1780065420528; Fri, 29 May 2026 07:37:00 -0700 (PDT) X-Received: by 2002:a05:622a:15d3:b0:50d:9c1b:941f with SMTP id d75a77b69052e-5172db7232cmr35138531cf.8.1780065419862; Fri, 29 May 2026 07:36:59 -0700 (PDT) Received: from umbar.lan (2001-14ba-a073-af00-264b-feff-fe8b-be8a.rev.dnainternet.fi. [2001:14ba:a073:af00:264b:feff:fe8b:be8a]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5aa5b068a9dsm316317e87.11.2026.05.29.07.36.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 29 May 2026 07:36:58 -0700 (PDT) From: Dmitry Baryshkov Date: Fri, 29 May 2026 17:36:55 +0300 Subject: [PATCH v6 2/2] media: iris: Add Gen2 firmware autodetect and fallback 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: <20260529-kodiak-gen2-support-v4-v6-2-9a81bfa797d9@oss.qualcomm.com> References: <20260529-kodiak-gen2-support-v4-v6-0-9a81bfa797d9@oss.qualcomm.com> In-Reply-To: <20260529-kodiak-gen2-support-v4-v6-0-9a81bfa797d9@oss.qualcomm.com> To: Vikash Garodia , 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, Dikshita Agarwal X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=12768; i=dmitry.baryshkov@oss.qualcomm.com; h=from:subject:message-id; bh=XE4opnEOqp3sFxCtfP83CTax2ufJuE0x11vwOejLU8E=; b=owEBbQGS/pANAwAKAYs8ij4CKSjVAcsmYgBqGaSGtyPb2VIq6SjWrBzMaEVp/jWaO2eGlOT09 8WgXMmqs/2JATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCahmkhgAKCRCLPIo+Aiko 1eEOCACjNxY1tuQ3Rt1+v3lnCjAgmLXjMWkqHinc8KJQcOSPw6m3SQaeHSfB16Fsms1RhRARMYi EvEd36Nfs+3SdALpOMEExHI/O0tXsMg391i8uLHDBNbK5HwFwcpnkafGiRkUVYsTv3utmmKiVTx 9BfCXr7zIiXvtw84r8kYSJWLqZg6+ottKRD9TwNZPDFNZ0ZJlDRsKm+lqbfFef/d0mv7VYB0C1y nMNDBHzZ0j/Owq0mi53N18p2gnn9lPHC2yBP5MS78oq5yAt5DxKDp81agLBKdU9zq3gisM7IFak afI4M8S4BI/a+fEJNuLqTOhYZIibwOcQJ8GdqDgqjrHNhv1r X-Developer-Key: i=dmitry.baryshkov@oss.qualcomm.com; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-Authority-Analysis: v=2.4 cv=SPtykuvH c=1 sm=1 tr=0 ts=6a19a48d cx=c_pps a=mPf7EqFMSY9/WdsSgAYMbA==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=NGcC8JguVDcA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=DJpcGTmdVt4CTyJn9g5Z:22 a=EUspDBNiAAAA:8 a=AJYS51BlHv6FyquiitgA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=dawVfQjAaf238kedN5IG:22 X-Proofpoint-GUID: G4atcRmK4SO3X7M8WbVDTEvC-z76U5Yg X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNTI5MDE0NCBTYWx0ZWRfX8xt/L0RiowV5 AxCZXGZhAOneFm8C+s57jGVLz5Un8Cu6xVR1upiGlXVoFggqjSR91AaDSeL71sB/tpDsxJCa+Kt WpfJgKqU079qQ+Ff3fjOlEsz7NPy3b+LJJFW3Nk8ftvUOuqdM6XFNIMxJAiP4N4AK1A9iJ/6Fb1 UglOq0pMu7uCEAS6OaKYjXD+X3fAJm31gyQtFSzlZnXqs+LJA9lZ+lLd34pdxVYAywxT1Ab9GcC FUxwfMjXfyITA4F4OP+mNcYAF7utqGZ2p5BShO6LXnyomFlz90HUmXerqV1vTJQQoE1rbTvb60m AGW6SO7lnVbxPbeWyikJEimLJw9bi2MKASFwu65hcqz8y9oraF+BBP0kBe3m17guVJuQcmh98iX e396LwiMbuC8Br1SgBQLtWOrixiuyPQadt2vcJSQq7vmitgPvhFdVeCjP6JSneDNqvS/OylR4YN 5ldSnBrbnDF7uZdTcLA== X-Proofpoint-ORIG-GUID: G4atcRmK4SO3X7M8WbVDTEvC-z76U5Yg X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.125,FMLib:17.12.100.49 definitions=2026-05-29_04,2026-05-28_03,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 lowpriorityscore=0 priorityscore=1501 impostorscore=0 suspectscore=0 malwarescore=0 clxscore=1015 phishscore=0 bulkscore=0 adultscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2605210000 definitions=main-2605290144 From: Dikshita Agarwal 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 >=3D 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=E2=80=91agnostic, preserves DT overrides, prefers newer Gen2 firmware when available, and maintains compatibility with platforms that only support Gen1. Signed-off-by: Dikshita Agarwal Reviewed-by: Vikash Garodia Co-developed-by: Dmitry Baryshkov Signed-off-by: Dmitry Baryshkov --- 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 | 10 +- drivers/media/platform/qcom/iris/iris_probe.c | 4 - drivers/media/platform/qcom/iris/iris_vidc.c | 3 + 6 files changed, 106 insertions(+), 33 deletions(-) diff --git a/drivers/media/platform/qcom/iris/iris_firmware.c b/drivers/med= ia/platform/qcom/iris/iris_firmware.c index 1a476146d758..64a2170bf538 100644 --- a/drivers/media/platform/qcom/iris/iris_firmware.c +++ b/drivers/media/platform/qcom/iris/iris_firmware.c @@ -16,20 +16,95 @@ =20 #define MAX_FIRMWARE_NAME_SIZE 128 =20 -static int iris_load_fw_to_memory(struct iris_core *core, const char *fw_n= ame) +/* 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 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 =3D NULL; + if (core->iris_platform_data->firmware_desc_gen2) + core->iris_firmware_desc =3D core->iris_platform_data->firmware_desc_gen= 2; + else if (core->iris_platform_data->firmware_desc_gen1) + core->iris_firmware_desc =3D core->iris_platform_data->firmware_desc_gen= 1; + else + return ERR_PTR(-EINVAL); + + has_both_gens =3D core->iris_platform_data->firmware_desc_gen2 && + core->iris_platform_data->firmware_desc_gen1; + + ret =3D of_property_read_string_index(dev_of_node(core->dev), "firmware-n= ame", 0, fw_name); + if (ret) { + *fw_name =3D core->iris_firmware_desc->fwname; + ret =3D request_firmware(&firmware, *fw_name, core->dev); + if (ret && has_both_gens) { + core->iris_firmware_desc =3D core->iris_platform_data->firmware_desc_ge= n1; + *fw_name =3D core->iris_firmware_desc->fwname; + ret =3D request_firmware(&firmware, *fw_name, core->dev); + } + + return ret ? ERR_PTR(ret) : firmware; + } + + ret =3D 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->s= ize)) { + dev_info(core->dev, "Gen1 FW detected in %s\n", *fw_name); + core->iris_firmware_desc =3D core->iris_platform_data->firmware_desc_gen= 1; + } + + return firmware; +} + +static int iris_load_fw_to_memory(struct iris_core *core) { const struct firmware *firmware =3D NULL; struct device *dev =3D 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; =20 - if (strlen(fw_name) >=3D MAX_FIRMWARE_NAME_SIZE - 4) - return -EINVAL; - ret =3D 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 *cor= e, const char *fw_name) mem_phys =3D res.start; res_size =3D resource_size(&res); =20 - ret =3D request_firmware(&firmware, fw_name, dev); - if (ret) - return ret; + firmware =3D iris_detect_firmware(core, &fw_name); + if (IS_ERR(firmware)) + return PTR_ERR(firmware); + + core->iris_firmware_data =3D core->iris_firmware_desc->firmware_data; =20 fw_size =3D 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 *co= re, const char *fw_name) int iris_fw_load(struct iris_core *core) { const struct tz_cp_config *cp_config; - const char *fwpath =3D NULL; int i, ret; =20 - ret =3D of_property_read_string_index(core->dev->of_node, "firmware-name"= , 0, - &fwpath); - if (ret) - fwpath =3D core->iris_firmware_desc->fwname; - - ret =3D iris_load_fw_to_memory(core, fwpath); + ret =3D 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; } =20 ret =3D qcom_scm_pas_auth_and_reset(IRIS_PAS_ID); @@ -99,7 +170,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 6d69a1e3dcd3..0c1f15558874 100644 --- a/drivers/media/platform/qcom/iris/iris_platform_common.h +++ b/drivers/media/platform/qcom/iris/iris_platform_common.h @@ -288,11 +288,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 6e06a32822bb..961dce2e6aa9 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 @@ static const struct iris_firmware_desc iris_vpu20_p1_gen= 1_desc =3D { .fwname =3D "qcom/vpu/vpu20_p1.mbn", }; =20 +static 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", +}; + static 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 2c63adbc5579..74626b35d9cb 100644 --- a/drivers/media/platform/qcom/iris/iris_platform_vpu3x.c +++ b/drivers/media/platform/qcom/iris/iris_platform_vpu3x.c @@ -90,7 +90,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), @@ -119,7 +119,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), @@ -154,7 +154,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), @@ -185,7 +185,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), @@ -220,7 +220,7 @@ const struct iris_platform_data sm8750_data =3D { * - different num_vpp_pipe */ const struct iris_platform_data x1p42100_data =3D { - .firmware_desc =3D &iris_vpu30_p1_gen2_desc, + .firmware_desc_gen2 =3D &iris_vpu30_p1_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), diff --git a/drivers/media/platform/qcom/iris/iris_probe.c b/drivers/media/= platform/qcom/iris/iris_probe.c index 40884582de55..c9b3beb4f1d5 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; =20 core->iris_platform_data =3D of_device_get_match_data(core->dev); - core->iris_firmware_desc =3D core->iris_platform_data->firmware_desc; - core->iris_firmware_data =3D core->iris_firmware_desc->firmware_data; =20 core->ubwc_cfg =3D 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; =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 807c9a20b6ba..6fbc20366f5f 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.47.3