From nobody Mon Apr 6 16:31:56 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 6107632FA30 for ; Thu, 19 Mar 2026 06:32:10 +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=1773901931; cv=none; b=AZExiQjl9zbi+DnOF3uBdtpsTT9NC89cpgzJbDhq7iHJ3J7aZj+M54H2poF8xTahMaBeaQkCWuMm3FsbjCtT5cb/rBtpImcngAmOjyeckTB7YJkA7l1TpbsxehuqEIv/MAou8mGYkFcaltL9THSooaRxbkputP3VErTie8lGE3s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773901931; c=relaxed/simple; bh=9iJZxHKj6ceRf6SQQXFuF0UcjhRsGt64qimhRUDtN+M=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=nXHZpKvXmhMPedUy6Lf03znGztBfBVv23Zt3eT+xIVZXo4RE3vhxrxw4yHN7stJbBG9dAtHGn1hfEE8Zn533oQr+0X6M+zWCKyECJHPtPKIlD+Q4ShyS7OZYXmCoyTEgFcvY09/hEQEByeouAtTCc5oYIsNYXKkL4FPZ6Ce7Nd4= 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=GiVy1Vmx; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=kPHl5Woc; 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="GiVy1Vmx"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="kPHl5Woc" 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 62J5XJOu3573649 for ; Thu, 19 Mar 2026 06:32:10 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= qq0/fBoVIDcZl7c9idmvD5vhhJIbEk2C9ivXkYLSvdo=; b=GiVy1VmxXUBWGMVw rhBiReMM+VZlAF5Etd/nwMhrISpyo4tFZD26N2zTt4WQltNJOYewDgkfCQyjYiF7 Dj6yC/Z6vNnG7c19WCxdYeb0ydErGZgWfT7gFZ49NrGIi/+BhF8RB9yljIzMmgl5 8Hg0N/mUpIY85mlUM1/bjndxLwsHDEflDIELwmqB9eKSpzazjuyQ2GN+f9nflL2l XCxP+xzxwZfwPd5SBI6SwlEQCS+w1atfye01pJpCe1xwmkTh2DCaU7QxmjIR/Shk DA/VwLsZiEWBOk9gyN1UySyCxS+JK3zEzFCn5P+TZSPpCc3qPAtKuVr/lpik7Bqp QYM9Pw== Received: from mail-pl1-f197.google.com (mail-pl1-f197.google.com [209.85.214.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4d083r8ne6-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 19 Mar 2026 06:32:09 +0000 (GMT) Received: by mail-pl1-f197.google.com with SMTP id d9443c01a7336-2ae3badc00dso6694335ad.3 for ; Wed, 18 Mar 2026 23:32:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1773901929; x=1774506729; 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=qq0/fBoVIDcZl7c9idmvD5vhhJIbEk2C9ivXkYLSvdo=; b=kPHl5Woc89wBPJkmFT8SFtWZhiF3pRMTFGypEfSjqyJQ6Mmqay3gX9FBpwM9rsqN4v Yop+vPbhc/jf9ELo4gaa0Jj8yz45gGfSfy7NLjGNbCPpR64YZHR7lQeXamxJrXiO7O+C pUdHezF61bDGzudkYaml30eu4+ugEOLlBBe4NKTb0rkje9r0uXcNm8bu9C5nmzSY1HyC 5um47qFJZzCowOe2vrgc0h6eLlua/Z87JF4IzKXBZKe9y2N1bSou6SbOKGOmHYM/Sgen Z8YyTMO29S5DjwJpJjdDWNogQUpxtv2F/TC+R7HiC1hWH6ZWpaOAy3VbE2zt6GmWYOeS WtMg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773901929; x=1774506729; 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=qq0/fBoVIDcZl7c9idmvD5vhhJIbEk2C9ivXkYLSvdo=; b=swKl4tALAmpk3++VG8ctmGVn3uPDOfC8vv7IvSWB2ANad0Wb8OZwBsm5tSXo3fTbM/ FuQ+tnyR/Iv2yQQLEij9s42tStuDjNtAD2ZiBtbDsLfSG1etn7b3ZG9Izp69/QzACMjb j6UtMDhyG3W/naY/GeX8lxVMg/ID5z0u1ss/unDD35GcPc6Gg+JASeDJN+Q+3WMCazsF +Ueu2uK6PO/ZiEIXrkozlr3H0esEIwlZMnMRrhMojvFI8VwOsIcwgN+ogSZXJ4fBeJ3x Rfh/B+la0Y3eWAfdkmBm76OZFE+HsQOGiRaBZCZlErdeDh3sfg0oxEy2/bIvuhVwalvw Z+9A== X-Forwarded-Encrypted: i=1; AJvYcCVMpRuU6rYhmBHI7dHixPkdgN+GLvfbRR086UwBqTM6ElsSpZfbptyy/De6/dDXjEkA7WDTSa37uaigHBk=@vger.kernel.org X-Gm-Message-State: AOJu0YywE+YzL6sV9OBNbDQc1k9UXg8pdU9dj9hX3EuHtHDmmO/1bEIg QtM7LJAjEJJ0koIhWEBlIYE2ALGQqmGIah2rPLP+fpvg5QvfpjEpui3XE2hhJU/HbgMCVnVZPuq PWpRrE7K9w8VN0+ly9jshVLOsx29GUK8eddHrCrPZgMuQNIIZohc0aUYYfRFnYcu6pes= X-Gm-Gg: ATEYQzzh8/lqwUOCkAF5sjCNdPHiVpqRvSlK44nZlXoYgMm0DJ7On7XpJuriRtzlUOD RtGMeC/zlJk/cjh+D5SUB/oaVt4KR6Hm+PEpxjADudI1F4JvH53C0JF3doK8Eg2K+oz63YL6YtA CWkazCRMNQbxo6uIWYRJzEr9XfnMvviIfSmJ51bPECu7e9ldAhiRkRw6Hb7an84GUv9hb8SFycR ckbvh8GSSR1f0jBOYOIEMc7ogv3RHd+7J+d0X2PbfQemp2vHcW0U1/UbnYVoiTrzqT3bFS5zuOG dIy6HIyyFMJ3jHRGYb3s7/+77fa6gDv4PVFljAOAbwt0+X70/6WXwfgsWuwt0vWYNpnL42yrIIN /3J+Xqq+GnE9RQbDathkPf00EtWUYM8K3REQpM5TA8MSkbmL4er8= X-Received: by 2002:a17:902:f705:b0:2b0:5d60:7f3f with SMTP id d9443c01a7336-2b06e35b4demr63812545ad.16.1773901929103; Wed, 18 Mar 2026 23:32:09 -0700 (PDT) X-Received: by 2002:a17:902:f705:b0:2b0:5d60:7f3f with SMTP id d9443c01a7336-2b06e35b4demr63812295ad.16.1773901928598; Wed, 18 Mar 2026 23:32:08 -0700 (PDT) Received: from hu-batta-hyd.qualcomm.com ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b06e603937sm48572485ad.57.2026.03.18.23.32.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 18 Mar 2026 23:32:08 -0700 (PDT) From: Kishore Batta Date: Thu, 19 Mar 2026 12:01:45 +0530 Subject: [PATCH v4 5/9] bus: mhi: Add QDU100 variant and image_id firmware 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: <20260319-sahara_protocol_new_v2-v4-5-47ad79308762@oss.qualcomm.com> References: <20260319-sahara_protocol_new_v2-v4-0-47ad79308762@oss.qualcomm.com> In-Reply-To: <20260319-sahara_protocol_new_v2-v4-0-47ad79308762@oss.qualcomm.com> To: Jonathan Corbet , Shuah Khan , Jeff Hugo , Carl Vanderlip , Oded Gabbay , Manivannan Sadhasivam , andersson@kernel.org Cc: linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, mhi@lists.linux.dev, Kishore Batta X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1773901902; l=5038; i=kishore.batta@oss.qualcomm.com; s=20260206; h=from:subject:message-id; bh=9iJZxHKj6ceRf6SQQXFuF0UcjhRsGt64qimhRUDtN+M=; b=/wsjS4Mb50XnI6cIGT6SBvW/dCirIKCjrFdPrSRkNy9DwEoc48RM2a7D6ERQqxMoFRMNyY6GT nS7kxdbRRAfB1mI2EAuRyKzKX0ZxgWz0uvulhmpiwIc51noTnTYm9+I X-Developer-Key: i=kishore.batta@oss.qualcomm.com; a=ed25519; pk=vJo8RvTf+HZpRLK2oOIljmbn9l3zFkibCGh+blaqZCw= X-Proofpoint-GUID: A7XanqOEMNVpNvFVUwIWhyRAxMtEXLew X-Proofpoint-ORIG-GUID: A7XanqOEMNVpNvFVUwIWhyRAxMtEXLew X-Authority-Analysis: v=2.4 cv=ApTjHe9P c=1 sm=1 tr=0 ts=69bb9869 cx=c_pps a=cmESyDAEBpBGqyK7t0alAg==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_K5XuSEh1TEqbUxoQ0s3:22 a=EUspDBNiAAAA:8 a=g53SEPjKJ_zQRiRrflAA:9 a=0bXxn9q0MV6snEgNplNhOjQmxlI=:19 a=QEXdDO2ut3YA:10 a=1OuFwYUASf3TG4hYMiVC:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzE5MDA0OSBTYWx0ZWRfXzEhRTGidFyTO kmhapnOP888FpehO70uarB4QZ2dxhDH2hsr4/gWItZXbPwzLAnqHwqW9HeflH8rbWNWAJ4Rbyis kmUNDiKa7DpbiW35mxNeaKN+UrL4/p2w4MRlSMfB7eANT9DvYW5A6SPqZWCucnFnJvxCmj5/Nrb Mpj/6fUrUYMC/rQj7IrucudiPcJKFR7h/TUqrBf4w1RoenbL5afLRzYSYRbYVtvzC2u+ueqSkOL lAbYwX5XIWdOTy7f2sx5UQ8qjhJhbTKj751XOsaeSzfe3AQB8KnaPHjrJuRooihtWySnQfb6dJu b01QgZ4+0qkkPy4mCe3GwHGiySR24HD2X0afVSP/nS+mDgAuqN6hsSfj4YhFT/PiKwlxYMTPASe L9FwXDGf3HmU8DJ7tRl3IkUTeBmJN80VbvF6rPvXzZAnsPTo8r2bnFsg+rseiHwLwWJ1LqmR5Ko CUxV9uZGga4oDJXk+pg== 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-19_01,2026-03-17_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 lowpriorityscore=0 adultscore=0 malwarescore=0 suspectscore=0 clxscore=1015 impostorscore=0 priorityscore=1501 spamscore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603190049 The Sahara driver currently selects a firmware image table based on the attached device, but it does not recognize QDU100 devices that expose the protocol on the SAHARA MHI channel. As a result, the host cannot associate QDU100 devices with the correct firmware namespace during image transfer. Extend the probe-time variant selection to match the SAHARA MHI channel and associate it with the QDU100 firmware folder. Add an image_id based firmware lookup fallback for cases where an image does not have an explicit table entry. This allows required images to be provisioned by the platform without requiring device specific client drivers or additional registration mechanisms. This change only affects devices matched on the SAHARA channel and does not change behavior for existing AIC100 and AIC200 devices. Signed-off-by: Kishore Batta --- drivers/bus/mhi/sahara/sahara.c | 77 +++++++++++++++++++++++++++++++++++++= +--- 1 file changed, 72 insertions(+), 5 deletions(-) diff --git a/drivers/bus/mhi/sahara/sahara.c b/drivers/bus/mhi/sahara/sahar= a.c index 8f1c0d72066c0cf80c09d78bfc51df2e482133b9..4ea14c57774f51a778289d74093= 72a6ab21fea60 100644 --- a/drivers/bus/mhi/sahara/sahara.c +++ b/drivers/bus/mhi/sahara/sahara.c @@ -234,6 +234,36 @@ static const char * const aic200_image_table[] =3D { [78] =3D "qcom/aic200/pvs.bin", }; =20 +static const char * const qdu100_image_table[] =3D { + [5] =3D "qcom/qdu100/uefi.elf", + [8] =3D "qcom/qdu100/qdsp6sw.mbn", + [16] =3D "qcom/qdu100/efs1.bin", + [17] =3D "qcom/qdu100/efs2.bin", + [20] =3D "qcom/qdu100/efs3.bin", + [23] =3D "qcom/qdu100/aop.mbn", + [25] =3D "qcom/qdu100/tz.mbn", + [29] =3D "qcom/qdu100/zeros_1sector.bin", + [33] =3D "qcom/qdu100/hypvm.mbn", + [34] =3D "qcom/qdu100/mdmddr.mbn", + [36] =3D "qcom/qdu100/multi_image_qti.mbn", + [37] =3D "qcom/qdu100/multi_image.mbn", + [38] =3D "qcom/qdu100/xbl_config.elf", + [39] =3D "qcom/qdu100/abl_userdebug.elf", + [40] =3D "qcom/qdu100/zeros_1sector.bin", + [41] =3D "qcom/qdu100/devcfg.mbn", + [42] =3D "qcom/qdu100/zeros_1sector.bin", + [45] =3D "qcom/qdu100/tools_l.elf", + [46] =3D "qcom/qdu100/Quantum.elf", + [47] =3D "qcom/qdu100/quest.elf", + [48] =3D "qcom/qdu100/xbl_ramdump.elf", + [49] =3D "qcom/qdu100/shrm.elf", + [50] =3D "qcom/qdu100/cpucp.elf", + [51] =3D "qcom/qdu100/aop_devcfg.mbn", + [52] =3D "qcom/qdu100/fw_csm_gsi_3.0.elf", + [53] =3D "qcom/qdu100/qdsp6sw_dtbs.elf", + [54] =3D "qcom/qdu100/qupv3fw.elf", +}; + static const struct sahara_variant sahara_variants[] =3D { { .match =3D "AIC100", @@ -250,6 +280,14 @@ static const struct sahara_variant sahara_variants[] = =3D { .table_size =3D ARRAY_SIZE(aic200_image_table), .fw_folder =3D "aic200", .non_streaming =3D false, + }, + { + .match =3D "SAHARA", + .match_is_chan =3D true, + .image_table =3D qdu100_image_table, + .table_size =3D ARRAY_SIZE(qdu100_image_table), + .fw_folder =3D "qdu100", + .non_streaming =3D false, } }; =20 @@ -278,8 +316,21 @@ static const struct sahara_variant *sahara_select_vari= ant(struct mhi_device *mhi return NULL; } =20 +static int sahara_request_fw(struct sahara_context *context, const char *p= ath) +{ + int ret; + + ret =3D firmware_request_nowarn(&context->firmware, path, + &context->mhi_dev->dev); + if (ret) + dev_dbg(&context->mhi_dev->dev, + "Request for file %s failed %d\n", path, ret); + return ret; +} + static int sahara_find_image(struct sahara_context *context, u32 image_id) { + char *fw_path; int ret; =20 if (image_id =3D=3D context->active_image_id) @@ -292,8 +343,26 @@ static int sahara_find_image(struct sahara_context *co= ntext, u32 image_id) } =20 if (image_id >=3D context->table_size || !context->image_table[image_id])= { - dev_err(&context->mhi_dev->dev, "request for unknown image: %d\n", image= _id); - return -EINVAL; + if (!context->fw_folder) { + dev_err(&context->mhi_dev->dev, + "Request for unknown image: %u (no fw folder)\n", image_id); + return -EINVAL; + } + + fw_path =3D kasprintf(GFP_KERNEL, "qcom/%s/image_%u.elf", + context->fw_folder, image_id); + if (!fw_path) + return -ENOMEM; + + ret =3D sahara_request_fw(context, fw_path); + kfree(fw_path); + if (ret) { + dev_err(&context->mhi_dev->dev, + "request for unknown image: %d\n", image_id); + return -EINVAL; + } + context->active_image_id =3D image_id; + return 0; } =20 /* @@ -301,9 +370,7 @@ static int sahara_find_image(struct sahara_context *con= text, u32 image_id) * Only the device knows. Suppress error messages that could suggest an * a problem when we were actually able to continue. */ - ret =3D firmware_request_nowarn(&context->firmware, - context->image_table[image_id], - &context->mhi_dev->dev); + ret =3D sahara_request_fw(context, context->image_table[image_id]); if (ret) { dev_dbg(&context->mhi_dev->dev, "request for image id %d / file %s faile= d %d\n", image_id, context->image_table[image_id], ret); --=20 2.34.1