From nobody Thu Apr 9 10:36:20 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 8F1993E5EF5 for ; Tue, 10 Mar 2026 07:22:34 +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=1773127355; cv=none; b=f/PAvR4XeFHBSi/mlvc5iVc8TCotYzt7+p72aCSCBJjVKIna5RNxwK3Rdb4CPIt3UZlyvXPdm+NYIZsJsY6PmVeoxrsh9kZLTFJrleJWUutbR/81GOodAO/BUkQWJgqSJilGwvL35NrM+O+im+T2Oz7CzDVHlJGfBjVGjCPxY9I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773127355; c=relaxed/simple; bh=9iJZxHKj6ceRf6SQQXFuF0UcjhRsGt64qimhRUDtN+M=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=dvC+LWwa3hEw52AdszntWX248cXft/Z2gy5jwvFOjVo1lLrLxDTREZdh4cg6vs7b/ZYmN+0kguacXhfQwJjPSelFZugl3GyavEY7iSzL4y71gJQiLBtJyrIGZlz7nYOXT32di53LPRiELOrNS30NjO+zvAHMNNcA6ehLIW0tJ4k= 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=D6/Hrakx; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=MOLS7+av; 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="D6/Hrakx"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="MOLS7+av" 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 62A2EBBV246495 for ; Tue, 10 Mar 2026 07:22:34 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=D6/HrakxRUbaY0yc AiUzk5o3nE8Re/VbNXda+Hj6Kat8Bq2Ld9G3m7IASBI/HexLvJPNRla49BIA0jl1 t4wgnGgAdaPuZatlUst1ra5G8RynhRmCzkKiVisIkaBAvKyEPm+1sIVFsi05xQj1 W6UR0sdvuSa2mQE0VEWPHnqzLzp9/jpyyzvBPWamCqnaIJgve0rzF0JRFgl/y97E p4/nwLZ1Xrs2DjpdYg9g9TlyWK4hgYLtEB5YmEGymI4KRm8S2d+R+2tNptUgmOvu Gof4OMd8nomh8nJL8ugN9t6ssRHCg/IGmdVBkgF8dUBi4RCntL3401zQGWNT5WBs 3EIxAg== Received: from mail-pl1-f200.google.com (mail-pl1-f200.google.com [209.85.214.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4ct88019yf-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Tue, 10 Mar 2026 07:22:33 +0000 (GMT) Received: by mail-pl1-f200.google.com with SMTP id d9443c01a7336-2ae4e9577ceso448379465ad.1 for ; Tue, 10 Mar 2026 00:22:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1773127353; x=1773732153; 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=MOLS7+av9SHxQ4BhOHbWQmKjNmszAl+ZSO6CfcJal4bdeYvX1NiPopNjfucxXxERNs tYxmCWFtTenmadOwsbyFzLHYGP/+hToWuXCzPH0aMXHxRkGT2WBljijINvYHzMg/99GB OUXeRlHhpeK7YyNV/iVgcpdYrYYsc5ScCdBWKvAhhM+q01Pi5QCMXrtAkmMlotfISlXi v6WlIby6PheTipiqpNf++CgKDFoO95/NAaSQQlOPen7+FlMqlkKa2s0cgXloVG+0vI5B M3vrIAbUx/1W1f15OwAN2iCyK8i1DcR2HcOlqixz8t3eGkrJwVOV2SZGBXWC1ine3OMI Z0VQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773127353; x=1773732153; 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=Gg2GNGaiE+bwtml7eXzcFUq0akJ26NyeREonOAcfK35lp8LsLDnxaeNfMfvi/yM2V2 w29iTO8pnsgdNZXfs+gSAPallmKLY8AsuYSoAzhHrbwsyWJmgB4RrRPhnPyEN6nwbRoj oVmovMAMJYMN0wDHd3yYvbO4XGXpE0bCdlm8yNZW6/43tQov1X74NE+K5yEnVt84WGML ZeD5CKOCaExqawAjnFxGumyqSwEcA6oXvp89QWiK0lP2Fd92023Z7MdtS8HMXdyWtbcQ RPGD2PWJcwbvk2rTpY1Jqzt5oxyKmE7lDMgbKuK7Jn/pauQy+Y/o79Rr6QnfQ5b44rEV uQow== X-Forwarded-Encrypted: i=1; AJvYcCUMvKvWX6oKZQRhluSImVTdtWxQcMNWzKWsqrcoNrKoLwKW6BOgHbOxzBv9P6o4VJCtNFm2Gfwx8kjptes=@vger.kernel.org X-Gm-Message-State: AOJu0YwEzaiYIdcwjzd7R2trfsVVXHORyo620/6YFlUvrb+VGOSinM+2 rVTHzwyePY0Grkwz9KSj3/RwzseCDp11hnU5wnqXF/g0Py9Lzzh5hNV3xR0sNDkOnL9czg7UCoW LVlPzl1eLD8HqwcCGdvm3GTLm80dcRPNScNuX/elyEY+PQ+yKvqDTrp4npRk9d1/RVPs= X-Gm-Gg: ATEYQzwETg7FsD/6Gt+2TxtBECgSXrFoJy03A313KHsWFmDDM6Dfzt8sXLOwsABDZVE o7BbTbRPVjt96l/2Q/ipiGv2lHZXXKVjisjcpTkZQ8YelgQ1UP59142gVnrEMklFwh0K24qW48w j2YTppSutKU/9i9CJrnFZkFu4jgytzhyv42dUMrexdW1EyDPuJl+AqE0g4paaYi7Q73c1Bcf/a2 tqLsgfaW8NdCn0jr3Ug+LxLEqaNglm7mAtIWZUF90gs9Z0xpAmwhfVJiIABU0nEzmK/dRNGag5e AvH7cNfSq9hPs/QG6YSPx1rdcwDTFQDnknp68ZF2U6p01FsHoCVLcYwIboSUB9eV3hkxsuTuhyx 0YskWZ2XmZxU95fey/0c1HhPIBlP55o7M/m/Li4BtUlpillUuPiw= X-Received: by 2002:a17:903:234a:b0:2a7:5751:5b30 with SMTP id d9443c01a7336-2ae82366c40mr129418095ad.12.1773127353258; Tue, 10 Mar 2026 00:22:33 -0700 (PDT) X-Received: by 2002:a17:903:234a:b0:2a7:5751:5b30 with SMTP id d9443c01a7336-2ae82366c40mr129417885ad.12.1773127352754; Tue, 10 Mar 2026 00:22:32 -0700 (PDT) Received: from hu-batta-hyd.qualcomm.com ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ae840b2e9dsm185200325ad.85.2026.03.10.00.22.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 10 Mar 2026 00:22:32 -0700 (PDT) From: Kishore Batta Date: Tue, 10 Mar 2026 12:52:02 +0530 Subject: [PATCH v3 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: <20260310-sahara_protocol_new_v2-v3-5-994ea4b0d5ad@oss.qualcomm.com> References: <20260310-sahara_protocol_new_v2-v3-0-994ea4b0d5ad@oss.qualcomm.com> In-Reply-To: <20260310-sahara_protocol_new_v2-v3-0-994ea4b0d5ad@oss.qualcomm.com> To: Jonathan Corbet , Shuah Khan , Jeff Hugo , Carl Vanderlip , Oded Gabbay , Manivannan Sadhasivam 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=1773127328; l=5038; i=kishore.batta@oss.qualcomm.com; s=20260206; h=from:subject:message-id; bh=9iJZxHKj6ceRf6SQQXFuF0UcjhRsGt64qimhRUDtN+M=; b=HnrMHtkX8FIsJClYbn+h4QhrfuuSrzMST560LuFe5QBkSaiJ1edFD/28P0xY66nkAjHpU98kf ojhe/Omotw7B23lcSMYYNgqORG9DgEW2TZwFCOw/x/hKHwO6FM1VR1m X-Developer-Key: i=kishore.batta@oss.qualcomm.com; a=ed25519; pk=vJo8RvTf+HZpRLK2oOIljmbn9l3zFkibCGh+blaqZCw= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzEwMDA2MCBTYWx0ZWRfXwu1cDLki/t5K FMoY3EAdK/5V52JLZA2W+DUATXKD1o+T62vOGnRbGiBF45RxkxbaQPA+VJJRpLXwTsax9oQ/s0L AKHR97ypfI0ZBahw5EqCrukvTWaZRIQYnxnfANNjYK4qn7+xcZCq52VNuRHVDSjjqnoPCV0Gbl/ eQ7yg2n7P0SBgS1IoDnkAyHda3eecyXz+/VXjK1rMl+KUo0iA5z91DZiQmhdPm+sBiahwYeHwQ2 SpvvrXH0jaLCuc5TYwfQT02vfoCZyEYSDe5KdTZ0LT2nsxhGuUkr6CeBo0KYvx+k6E9+u6Xn2pW oLJOm/gFWKJpbAsCEnpwkHOtYkKJrdahpOuwNDM95sEni9Ng3b/gUOK323pN/a89hF2bFbWz/CN B96tL1xMnz1IRIfgpMNYi91+v6mBe5EayUhRj65PkGZBGNrNudWTgMJ1c5eDbS7sAtFPwNXJBUQ ruD8+1McPLcMT+mdMcQ== X-Proofpoint-GUID: 5M0KARi3jiu7Zg0hZOSHNUh7Om-xOfHC X-Authority-Analysis: v=2.4 cv=Jtf8bc4C c=1 sm=1 tr=0 ts=69afc6b9 cx=c_pps a=IZJwPbhc+fLeJZngyXXI0A==: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=uG9DUKGECoFWVXl0Dc02:22 X-Proofpoint-ORIG-GUID: 5M0KARi3jiu7Zg0hZOSHNUh7Om-xOfHC 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-10_01,2026-03-09_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 adultscore=0 malwarescore=0 priorityscore=1501 phishscore=0 impostorscore=0 bulkscore=0 clxscore=1015 spamscore=0 lowpriorityscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2602130000 definitions=main-2603100060 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