From nobody Fri Jun 12 21:15:10 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 2F17135CB6E for ; Tue, 12 May 2026 15:21:15 +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=1778599277; cv=none; b=ZJZiKvbJve0eLAN75bQEt0UdQUNDhzIlSkm8+x80kN0NeQzNwPko3geRT02kuUTs8LYHpmjBB+SDH29estsFllf0tARg7wYcHOs2ydejTmSI2gvvBklR5IqlAh4JlziNLrUnk4qPsvKeoawgPdZGHBEFWNo76PLsK/wlU+BhRqk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778599277; c=relaxed/simple; bh=HCRGBUtkrSoGUk8jEGoVTJVZHXmbNMegp9Xp5SSwp60=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=cXJMisa3vp8u9ynyHrlBvEkcSfkf2tCQIUq5j4lA++gD2je78kX0ZnhBFy6nOFxloywK1QTPq6ZDLnmWg4bwZbNN8I6W0iCavsPXLnRQxQlEGUq2cDKvRfrp5tVxBuun5WZI84fwmEA55RtlYiyMibQB9mePldB0tgHWcsi85Ao= 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=D33mOYUn; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=eZmJv8Rh; 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="D33mOYUn"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="eZmJv8Rh" Received: from pps.filterd (m0279862.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 64CChAZe1410273 for ; Tue, 12 May 2026 15:21:15 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= 02ovJpLqS/OJQIwZyeSKKeC+6lmXh6VPbB9glk5k+CY=; b=D33mOYUnSqrJbovu J6zlRYOyZ5QcoVa2I8B7m7nWtzLVP3WjUbq9mtapvqzjurJ/c3N2TJnLoOHCyRiq gv2aYdkKoNFYg3wl7DOs2cJbYdlOk0GUJcFgW5yt1MfiVqaPKldZKNRTiJmiLtlz ZowXgMzTrVOlRNp+jzAgTMB3Tl+5syx+b6yRIldOPjrPwj3thUMOcea8nfyNEPR/ SJWiWD8TE75CEPjXBn+lmnDeA1Pr0blYzTinEjVX9fQDW8GHkyDn0194CLBk1MW9 1ESTchTOjyZYSpLPbbbeKby4nuzfmTacbf30Z6/faUF3KRqWTkQslHY3AUkmbTnN knSpIA== Received: from mail-oo1-f70.google.com (mail-oo1-f70.google.com [209.85.161.70]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4e44f30kjh-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Tue, 12 May 2026 15:21:15 +0000 (GMT) Received: by mail-oo1-f70.google.com with SMTP id 006d021491bc7-6949742b3ebso11030907eaf.3 for ; Tue, 12 May 2026 08:21:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1778599274; x=1779204074; 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=02ovJpLqS/OJQIwZyeSKKeC+6lmXh6VPbB9glk5k+CY=; b=eZmJv8RhQh0rZX4aT+j87hAl0eJvKOd9tE2sD4KpWlUBmce1WCALJlsk/yUAbiWkjR xGztCib0fWHriX0TIxtOThwoui2tktc8bjzYvAUXQF0epVbHoFPuj5xXoBE+G8febq5r aGMO5Bw20Sa2MtxLsECi/d5q4p8iHYCQhwrzrHnlecuctR76IEmxOiT+mIcI7DNstNba AnHC/19d6TtPomk7KTQgv9cMschN1dsSCGhtOmRFueWVlKRo3fBgm4cyBoGMeQgD9W1S R1FscNofqs9olZkZ3APSNkKP68ep3ETR2qBUrk5e7yZV2H3tdsu41oOjW8fzHhnroafS fS7A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778599274; x=1779204074; 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=02ovJpLqS/OJQIwZyeSKKeC+6lmXh6VPbB9glk5k+CY=; b=AV0sG8mjBdjif86n1zAtbDFJ+pNKMq1ERT7xYwEcicjSGd3uZ4cbnnK/ykYsnkMkjF C0CEBcuwWzfH+bsDE7ra2K4M2odkqlI9StieTmoQUsjTjfCS35rANmIYGLAV8mQeUOcM FOvcucv/AEBBqg3tASu5uVhYMPKtjlM21juie3bYs+gjYd+uuTkPutFR+WbOs2yqCvp6 ZrX0ScDDOHORhkqYsRkZ5esc90P5P6NiTD41C6lNgVGLgrUJpCQMcGCMu7OwFa+Cucxa 6UWQmi8Dzjws1ptRU/uj+u3taOwjp3LPe/he9Ctj0mEhGHry3WRSSwdarUYh40HNOjSb 0nMQ== X-Forwarded-Encrypted: i=1; AFNElJ9oBVcjdGCo69m+5aKMXaA0uY8+Q3ax2L7ADVfGxsBrgaL41sJ3HuCJt8uJ9hRMn9jI3Lq31p9ZqCdI+bg=@vger.kernel.org X-Gm-Message-State: AOJu0YxK5Z+0Kh5QKmkm2BodvedrRvRDu9qjMNa+44E0uR5IjuuAPzcl gA53PF28efw+MIuP0jAcUS3d+LoqOEN1AHycTbcVnyAys1E+CnaEps9DDoO25eMEwKZ2tis25vE ZizdZNE08EiEdbipJdzaz5jIIcH8VMx7/zRwmAOPqFeZ44lzbPBoTMEIRokbi1EyxCNb2BDtJBh o= X-Gm-Gg: Acq92OGQDc/XCwUnUQj79PnkVL+NGQebbMv0hEchRatQWNliYsxt/dvEMrWur1wPUCv cGsJL+OWAAQYPw2sVrl1RK05nBW+R2hiSGQTFz5nSHZSEN3yCtt+T1W6BKYDfbuIhhcF97lLmec j2mblYV4Xj0zZ0k/VYLVFyMQmrjr6oa0eVT5jCfQdFzqZyi+FPVLGyr9WkkDnBUS1TvD3NyvpI3 OYN21KOMXBJ9KjyEW9p8ZVLmrsWlax6e3olgl5T9FKWlHGmLlEPAyJGGn896HOACvcj/ZyNu61E cw4QoJeBGBLA6caQdT2Z1ssW/yldconLinCDhKIMLFp6SJ9VUHwrqH2PJZw0BniFWmJq7ECWInM O/UYoZUAV2Quv5za6D0XFSssPVjTCZyT3NoIrDDkAzTBpHqAnH7q+wt1jPXTGyPqQBd/78i5MaF xTFHvGgnMX9zZaIuGa4nLVjKfSZSmTzsbH18o= X-Received: by 2002:a05:6820:80a:b0:695:818c:e56c with SMTP id 006d021491bc7-69998c8f448mr15047270eaf.7.1778599273919; Tue, 12 May 2026 08:21:13 -0700 (PDT) X-Received: by 2002:a05:6820:80a:b0:695:818c:e56c with SMTP id 006d021491bc7-69998c8f448mr15047244eaf.7.1778599273394; Tue, 12 May 2026 08:21:13 -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 38308e7fff4ca-393f6268ddesm34036571fa.37.2026.05.12.08.21.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 May 2026 08:21:12 -0700 (PDT) From: Dmitry Baryshkov Date: Tue, 12 May 2026 18:21:09 +0300 Subject: [PATCH v5 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: <20260512-kodiak-gen2-support-v4-v5-1-a98968423d24@oss.qualcomm.com> References: <20260512-kodiak-gen2-support-v4-v5-0-a98968423d24@oss.qualcomm.com> In-Reply-To: <20260512-kodiak-gen2-support-v4-v5-0-a98968423d24@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.1 X-Developer-Signature: v=1; a=openpgp-sha256; l=1650; i=dmitry.baryshkov@oss.qualcomm.com; h=from:subject:message-id; bh=KiFa/JqpExwVeRLpQRB6b6/r3uzswFx4pVVeS9KUMuI=; b=owEBbQGS/pANAwAKAYs8ij4CKSjVAcsmYgBqA0Vl//QAeOSbmqNmESKLZA9iLZNeydJOb/N4M rfYk4itFsCJATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCagNFZQAKCRCLPIo+Aiko 1fIbB/9IgdORjEiBFONrCN3BW+BB1uI+80ILQKcUydZQF6tznJWOsDwUoxTlHHmF2qo8ke8f4yd SAtcRnP0SKkyWTruPN/p86izEdk41GtPjCdkZnHK6Moaa4QTLKcNFVXi4O57Mu/HnHAX7beDAyL CAMLGnM0VjvQ6YZcPO4q5k9HrfEtO0xXw88Z9RgG7T3x/wwEuk8+tC8+1B4sypiXYvhHjmXUd8K LtnvW6h9ml9pMYYqNNx+K+GR6hLOMFKpOEz/cH3Aa4IsARb7T41DTMd+R+0XYzilihQG9ZwYQY3 DO8iBGwjIZsVALiF4KUN8Z1adJS9Dutpm75RNK9Jb3IMZJrl X-Developer-Key: i=dmitry.baryshkov@oss.qualcomm.com; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-Proofpoint-ORIG-GUID: ysCqTk8-3PW_p4rREJ0tLvWXgMKkPuRX X-Authority-Analysis: v=2.4 cv=SpSgLvO0 c=1 sm=1 tr=0 ts=6a03456b cx=c_pps a=lkkFf9KBb43tY3aOjL++dA==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=NGcC8JguVDcA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_K5XuSEh1TEqbUxoQ0s3:22 a=EUspDBNiAAAA:8 a=KKAkSRfTAAAA:8 a=_zkiGRivnqQB5cGHL1IA:9 a=QEXdDO2ut3YA:10 a=k4UEASGLJojhI9HsvVT1:22 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNTEyMDE1OSBTYWx0ZWRfX0wsJNzjXSPOb chjJRwb1MrUY5ZsfmFlpnfOjPM/KYfnwQAKvCbJ3w3ZTMo271KWNFW9v4gBwOfgD1kovhwxxgz7 xwfGpYrKlR3lVOc1QhGl/rLXAMr7uiczSS7uNaGZ0hy1WZJY86eldiLBTsdSzV34aPaa65hkTNw g/HQlftzajJToyZqlRlCxmCfTUPNNAYYdejCZFsKqLBVS+ptM+84KpxTVLoRX2BfA+qlvrAM+vg 6s6ai/c/wook5o1hdgyEWbXGRT4YlDSMPkcBv06Gf5oskDwyYVCmg9AyDGOgbBHW4IV34zMtPpb cuZnZ32aU+5Wofu4hAvxuv7tNvwPS/9n9on0dkZcJ4G/NmNP01RNuL8fRvjcwOuva16khNpkRlW XgllaNdLRd2u2KtntnALGL11NvtRM4n0KliGJr3kLEFFl2a65pra1OPRwzguYNoumej89POMzoy 79sMWfAVYo2Cuek0JRw== X-Proofpoint-GUID: ysCqTk8-3PW_p4rREJ0tLvWXgMKkPuRX 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-11_05,2026-05-08_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 malwarescore=0 suspectscore=0 impostorscore=0 bulkscore=0 spamscore=0 phishscore=0 priorityscore=1501 adultscore=0 lowpriorityscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2605050000 definitions=main-2605120159 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 1f326f696d08..52bf56e517f9 100644 --- a/drivers/media/platform/qcom/iris/iris_core.c +++ b/drivers/media/platform/qcom/iris/iris_core.c @@ -78,6 +78,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 d36f0c0e785b..dbc15edc602b 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 Fri Jun 12 21:15:10 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 42D7A3B83EF for ; Tue, 12 May 2026 15:21:18 +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=1778599281; cv=none; b=WZ9ULGIiE/t7DkwL+h+lMPgU4NRxOeWhOyD0+9VHgrHkdIfluR/oUgikwjs+wpcFpzV8cXWSSBDMuGSEs8BdcC4jLXCpBu4tiX+95vT4VC5vkCPMv7ohkAtGBiEqTpQteSEPivI1SQDcE5ZRJbcf7MvHqV84m/ZBhHYkGK4UhOU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778599281; c=relaxed/simple; bh=HdPSzjRWBc35/YgPY7tgZ5p+LtadBuPxVUcK0Yl2ZRc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=qbGAUi6NepzpGjE4wlBxCbqknRGnn7HBv52Tt8Ums3dTy2C0hBU+7OJ9jGwfZjrFouHTSOdnFKOlWliE3Jut2et9ryfHBDJQooJj2WqepBAn1hRH6CZd8Nd2PF3XPfNAzICIkYSqvJxnEzSSdit8z8g6DObMxTJaNK2zYtOAsP8= 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=Iw5rHe0j; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=iz3HBUVn; 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="Iw5rHe0j"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="iz3HBUVn" Received: from pps.filterd (m0279871.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 64CAkZjw739995 for ; Tue, 12 May 2026 15:21:17 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= hVlEUdGdtYwePqSCJIzsJZbCsq1btIHtvAOYZEpKAEE=; b=Iw5rHe0jeKcTz7do ap1IJ069jXq/r8uglqsZQpOMeFQ/XstOZnWmvbD+tXHgCei47zMgHqkbLrlV14Fw towXlBdb2y8Wx/TDWApMEE3lOzLTGm4/9e5bu7foS095mg8ktFmydEWIAk1lKWtq dqYpgOM3N0AdkJDM4uJSDAxTBHJYOvI8hgpovzk65FbRUslqtnDtz5VSEZda0GwS /yojsN1Gb6s3b5Ald+z/7Ox15gRrYtkaRB46/CGF5OL3EMstwY/Yc/VDpJtSQK9n UVfYMK1EVVa4vjvGdd53l96pduDnoDGAovekNW0M+N3pyMv3jbw8dd3qgy2CchCM R1eirA== Received: from mail-oo1-f70.google.com (mail-oo1-f70.google.com [209.85.161.70]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4e42rhs5e8-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Tue, 12 May 2026 15:21:17 +0000 (GMT) Received: by mail-oo1-f70.google.com with SMTP id 006d021491bc7-695aebf3cc7so6715013eaf.0 for ; Tue, 12 May 2026 08:21:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1778599276; x=1779204076; 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=hVlEUdGdtYwePqSCJIzsJZbCsq1btIHtvAOYZEpKAEE=; b=iz3HBUVnLlZ/u+REuxtb7PerPcY8SEgpokCAKO/VF6J545igLqYytfFDHwccFF2Usn fo3lOGVElZoPBqJKJVBd7lHqgHPkMEABRODqH0z9hnyuZSoSa13GL3tc/R2D9EihHPsK NtGBsGx8YO8/AvfLC6qD5A5LTyOIz4s3wusVJnLJJ/gRssj++un2SzwMKQvVvqeDR8ui +KggQ3PMSbzFjAGckhjcfzmpVscoWm2xbqttiYAe7SoNTB2WojjhNCA8GfgfnnjNzQfE VQ8Wq0TbtVssG+Xe8BP9k81ZACFcduHcM3WN7MncJdkt23aTMZ2S+YIyM0UJ9gubX4zX XoeQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778599276; x=1779204076; 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=hVlEUdGdtYwePqSCJIzsJZbCsq1btIHtvAOYZEpKAEE=; b=XzCwMXpefOaMXGLJU+JiKTTpQ81PJKbswySq0eTXHr97fqvF8pykePzMznVkscrb8Z 3z7TKpch+jhX8qYTI4d7B0Wwn8xgQh69K63Q6iPRJvYjj9P1epx3+S3xEOIUw9nXHvLH N9+TygeHCAXT7SkVEk+g27YFIprA6kHlTmLTdTMJKhOoNdHr5Y9oBHns52xqPupqRdwX psBbCm7blCVGUKm9OgrEsB3HMH37t2M8os18VYxhuok02jDmhYQ9t2db4L11YJbZU2jB 9nfzk+OM7cnY9h24RWX//bYB8jVkLmI0AkH9hF6+SkGOLbYmkFR4xvWIhN8aRGBegPQC RDVw== X-Forwarded-Encrypted: i=1; AFNElJ+uNSpWloFK4jTjpYmYgg8IHj2soce2JywEnB4Yfq/MBlECydo/GqfbYvxzjk4V3QBjJnqoy7zXZ2A35oQ=@vger.kernel.org X-Gm-Message-State: AOJu0YzHy+Akwz+nZ5IuA9/DszXZpcrJxUe9WhHmUvE0R2xl2AyQ+J/8 7Hy3hMPbUCyEQEy6N29/KfuI8nLejENN9j2FKo40kazeT0sH1FQ3Ju4STQpCpZbjRX2tkAFnmqA gT9OWHnwjJ6tZKGJNl6nGuMp01tLPH1kYkqSdbE7ZkiXveIoPf8efAAeHCYHIav+mD8s= X-Gm-Gg: Acq92OG0+9McmFeM7qNEXSgfq5eInwEYtzCig5M/BSuQWK2OJGmNrNTmxqLmymyE1k6 i1hVW0YIEbchViVMnnI3hckJhmf59Lgb6nZX30zatICBhlotwONFlDgc73PF+06vyIGHl9ZsX2T G/Fd4BgY4935rQmuF7u2jy/qbx+QURJeXR9tSLbL8S5Ev0B+V1/c9ASBewcIJeGfII3+lpJD9pE 6wj4mkNQYylTO7rKrBn0l5WsEMWuwtxRdc4J4Mh5POv4+iyujgp6brCZjoS9IpK741t9t+W0QnH I9meajzwZeRHRh8e43peJh+U749nBYQT5B8vdWyYqRFnnsy45bvalDoClNVcVtwkO6S/TwbWXh0 49OOaeDtyrmtridliBxVK3jDK+Yj2ICgK4ZLKQC8ZF9KTd9LiqEZmCtwuJu2HmyALyKneK+pbbi zXguSUJ3l45RDaaH05DQeEfLY7bKXPWAjDgko= X-Received: by 2002:a05:6820:1388:b0:694:9707:4e59 with SMTP id 006d021491bc7-69b36d95102mr7367461eaf.46.1778599276323; Tue, 12 May 2026 08:21:16 -0700 (PDT) X-Received: by 2002:a05:6820:1388:b0:694:9707:4e59 with SMTP id 006d021491bc7-69b36d95102mr7367438eaf.46.1778599275772; Tue, 12 May 2026 08:21:15 -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 38308e7fff4ca-393f6268ddesm34036571fa.37.2026.05.12.08.21.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 May 2026 08:21:13 -0700 (PDT) From: Dmitry Baryshkov Date: Tue, 12 May 2026 18:21:10 +0300 Subject: [PATCH v5 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: <20260512-kodiak-gen2-support-v4-v5-2-a98968423d24@oss.qualcomm.com> References: <20260512-kodiak-gen2-support-v4-v5-0-a98968423d24@oss.qualcomm.com> In-Reply-To: <20260512-kodiak-gen2-support-v4-v5-0-a98968423d24@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.1 X-Developer-Signature: v=1; a=openpgp-sha256; l=12334; i=dmitry.baryshkov@oss.qualcomm.com; h=from:subject:message-id; bh=1txGwldQSjgLClsGqOr+nzNedmiJND3oMJ/msrD8Rw8=; b=owEBbQGS/pANAwAKAYs8ij4CKSjVAcsmYgBqA0VmOBC6jlgUt2fz8Tqvb9sFH1uqi3aox5vJM UsWuGSLR3yJATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCagNFZgAKCRCLPIo+Aiko 1f8SB/4tyw0AkYV43ApM8DnG7RY5/Mh0nNIO+Li2Q5FxBZkQYQCejPqkFXsT6K24GywXss56SOp LiEv8Vkx4Eb6JH8H05OTcUyGTxY12mJ9wHnNbENAt1+iKOZmZAfwVyv4AJrZ9GkrLuqgE9/v/SE ftx0OkA6cM4DQ6NYNmfUkxJF3hwD5C7+KO49V3pk9MnfXa3DKVv7zeytn3xJJUrcWgtnZMChl3/ aVP30gA9eTuGiwUBBf+6Fp1XG6XaH5jtdDGuUfIYTBEpA6yoEh9tbpEalbOSpRdgV2igymkdJEy mkagqPXLqYuKJP4I+NphuZ14PnPO7vL8zw5Z1W8llTJIPZ5H X-Developer-Key: i=dmitry.baryshkov@oss.qualcomm.com; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNTEyMDE1OSBTYWx0ZWRfXy0HqkqC5L44Y L1B2iYDLXRUKPK4zxtGz1C6qaR2H1lMyR+gRX1Piw+wOMWIj3DKB3nGexHkg3XUSVDeo2t+iXF0 PSAdBu6QHph0HWmihHCweLqQhpg0VdUOeBzs5dxiVrDbTkSq7tWHVK8hBGzAEmmmH8hVinDh84s zaKBJ3VU8TkPiZNbstklAGFjVMSBYxZIfTmDozJqX5FHxbGlSj/qcoVWmDi+GCyGRNDgfXcTuDC E+ULtMuDvSFhtP+jhJKm+w1ji5MVnxj4sJ4hRKf57H9DtX5swgS37tNInAVX1LTrnhGF/7LOCdW ouSxIOTG+20H6xdWeUy/nhpJrCeOHMgsjUGcWyyI677O0nPPFuzvol9qO/w5C8fQq7XsJpyPXTH Hj+RQNISZCyBy+CNfGgsHoiKlh95lUV5nFk3fNHa6LFKUnh8G6vY3rEK99eNi+md92dfWTxPVoB S7lnPEHNKNGkM/SfaFA== X-Proofpoint-GUID: r_HMIzv5sGeom048_qL-wDec2losHUvz X-Authority-Analysis: v=2.4 cv=GbMnWwXL c=1 sm=1 tr=0 ts=6a03456d cx=c_pps a=lkkFf9KBb43tY3aOjL++dA==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=NGcC8JguVDcA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=3WHJM1ZQz_JShphwDgj5:22 a=EUspDBNiAAAA:8 a=AJYS51BlHv6FyquiitgA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=k4UEASGLJojhI9HsvVT1:22 X-Proofpoint-ORIG-GUID: r_HMIzv5sGeom048_qL-wDec2losHUvz 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-11_05,2026-05-08_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 phishscore=0 bulkscore=0 adultscore=0 clxscore=1015 priorityscore=1501 suspectscore=0 lowpriorityscore=0 impostorscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2605050000 definitions=main-2605120159 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 Co-developed-by: Dmitry Baryshkov Signed-off-by: Dmitry Baryshkov Reviewed-by: Vikash Garodia --- 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/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 0408d51188b2..7acb073f7197 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 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 85aa0c87338b..9a76149f37b7 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 dbc15edc602b..89426ed42fac 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