From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id A882AFCC9D4 for ; Tue, 10 Mar 2026 07:22:36 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id E878110E65F; Tue, 10 Mar 2026 07:22:35 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=qualcomm.com header.i=@qualcomm.com header.b="D6/Hrakx"; dkim=pass (2048-bit key; unprotected) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="TK0EZ3wd"; dkim-atps=neutral Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) by gabe.freedesktop.org (Postfix) with ESMTPS id A45AF10E65F for ; Tue, 10 Mar 2026 07:22:34 +0000 (UTC) Received: from pps.filterd (m0279865.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62A2Ehix3087381 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-f198.google.com (mail-pl1-f198.google.com [209.85.214.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4csxy8397v-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Tue, 10 Mar 2026 07:22:34 +0000 (GMT) Received: by mail-pl1-f198.google.com with SMTP id d9443c01a7336-2ae5031c6c5so446447995ad.3 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=lists.freedesktop.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=TK0EZ3wdOl8XvQZXCa2mYt5vMLIPSqcYYJID8aPHVIxiKXAeqo5H+xZsgr9w4iuyMg 1DYFFhvfo0d1pDbRL8kp+zRGWBB7h660XdgwWoIzlvgpqlwt/FhRkqYwg4ONxKCMaGv0 T34MS8V3aSaS9t8hHq9o1qvSbUj8fJjrAFZorFQSrONL5ck8wZ5/2Rco7/Oia5lUcAav 8859CazeC6wV2KsTQfBewaCP5E60ABNSpUUVyAlhpolLHZbMXO7h6OJZ6p7atn1hw/ID DvhqION2Z8CSa6xiUMlM+dYdslMleIRksIVx8goFqSE2LscircVCKU8yXHFL3zmEFlVw 7ulw== 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=V6zV0xSQXa8oHf4KpUF7IjYjQgU4Fl7DMHtwJDgqD0w+4HS9mvLAzdwcx+VOH8RqE6 QYhw1/q+3xqAtPXnTUTCmAmuvOZuKC3/2O92Eo/B2A8loPygJ4HeVjZDRvzEmVBlZGGF iRB+S79ueYRSmZigONY+hecB3MzoIHLQTPxbAW3Y3AlECBKI0VIAluVru5p5yPFuwKDc iJxea1pTc4/QNOc8PQ6jZn0x8tqflRLBXiX9lUn5A04Ep63O5rB2kJ6pJCJ4GBwWTGgE ui3dZPP0U7USPtTRhlXK009lo1tS4ExFOMeACM6GKEffDklSxNcczz8MoccuS8A/qQnB +yoQ== X-Forwarded-Encrypted: i=1; AJvYcCV6oNtJdkRW/BjtGANhWMmxUXt/BSmbBLh1o1ktolzkPHJRj2/up9CcT4yB7iBaGnN6QSytzFOrd7M=@lists.freedesktop.org X-Gm-Message-State: AOJu0YwFTbQH0xOeVXqdiqLHRwa4or/bTfCNqJCdPGHHN+nJRyyUDKlv L5Pb31hbpVgomxh+0dYLNf0ndP7A0GEEjrd4/79CYShXF0wiD/zs4Boti/vDZMilcyIe4lhmnG0 arxL3eD7FOGFtHhsfKu2pZ8ljQas6/LVWhZw4da2kW4IMt1B3PcSNsFFl37DOqr9ybrqRSXU= X-Gm-Gg: ATEYQzz0otzEm6/dxvT14HlmQpAAtNpSlIHM4peAvWdf2a6pAOVSsN3sY4YC6SXzxEk u4QfiY6q6G1wl2ptDelyesqHeh19LKV67aeSG3jiBjWpHnuI59+mE0hTg83LuJ7v0HlfsVfs08j 4Ln9WL1MCBwxS9M/W2gPOOF6ygTUnO3nWD1MmJ6FuWl7Ipdx5uPhVVmzXAKF+t3jFZr3pzJoFcM 90N4rolMLrmsqq4JJDsqtfs32aPULhSwxxDrB3wctnL4Qmz8WalfFQmlFG6rZOc6GKR4nknBqu3 PeyekQiRhUCLVpu8BGYOV/b36TVK+26DSHKLZrsJH+hlmmV9ecPPipnqCD/v03OddzTAWbpz895 HOfqGhlVCk3D7ClS6J5o+9W56juNAcPq3Q/UeEBZiOqxylqOg/mY= X-Received: by 2002:a17:903:234a:b0:2a7:5751:5b30 with SMTP id d9443c01a7336-2ae82366c40mr129418185ad.12.1773127353265; 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 MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit 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-Authority-Analysis: v=2.4 cv=SvmdKfO0 c=1 sm=1 tr=0 ts=69afc6ba cx=c_pps a=MTSHoo12Qbhz2p7MsH1ifg==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=Um2Pa8k9VHT-vaBCBUpS:22 a=EUspDBNiAAAA:8 a=g53SEPjKJ_zQRiRrflAA:9 a=0bXxn9q0MV6snEgNplNhOjQmxlI=:19 a=QEXdDO2ut3YA:10 a=GvdueXVYPmCkWapjIL-Q:22 X-Proofpoint-GUID: sT2s5W2ZCGZ_vNvKGU-4sAKKfxRL8V3L X-Proofpoint-ORIG-GUID: sT2s5W2ZCGZ_vNvKGU-4sAKKfxRL8V3L X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzEwMDA2MSBTYWx0ZWRfX1XUXVhOZyvYx g7jMu3m5IinSJuIUG8i7HmfwXHtyPO7yhsmqfw+SFSY/mOl450yTaSOsVIWttdmKSVzZycJkPV3 flUYuhOvRAb8JSz2Oc5KO2wb+mFcFaCzNo19uqI+0SkzWDPhUUEmNYInWaTg65mvr/rSqsx0fA8 SGWV4e48Yo9u1TfeuREK9jD3Jb8jqAcjPRbJDMdV81mw81L/hIyfGMdbAJA4FAeIodSaRoqko19 Q3ymIZG5EMVmqOMkBPKEwM6hZzrZiONpJLrdtTyXjuDcQhJDwopXmI6rTpnj6Ij+9LE6oU5zDZV EtMmh1v6eh8qtp6Vh6coh0zQd1iBUJRzvwIGNuhJC4UhkTChfQaHLcy0MyEsTk+38jmRord+Nfm JOu3Ubye3qUzDNuC2uZd9tbfDehXou2yKL/49fcx1WrYc5AkQaamd0C+yq1gQIjVGu/hw8idqLP lOI7ZkR9VLev9n1UCiA== 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 impostorscore=0 spamscore=0 priorityscore=1501 clxscore=1015 lowpriorityscore=0 adultscore=0 bulkscore=0 phishscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2602130000 definitions=main-2603100061 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" 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/sahara.c index 8f1c0d72066c0cf80c09d78bfc51df2e482133b9..4ea14c57774f51a778289d7409372a6ab21fea60 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[] = { [78] = "qcom/aic200/pvs.bin", }; +static const char * const qdu100_image_table[] = { + [5] = "qcom/qdu100/uefi.elf", + [8] = "qcom/qdu100/qdsp6sw.mbn", + [16] = "qcom/qdu100/efs1.bin", + [17] = "qcom/qdu100/efs2.bin", + [20] = "qcom/qdu100/efs3.bin", + [23] = "qcom/qdu100/aop.mbn", + [25] = "qcom/qdu100/tz.mbn", + [29] = "qcom/qdu100/zeros_1sector.bin", + [33] = "qcom/qdu100/hypvm.mbn", + [34] = "qcom/qdu100/mdmddr.mbn", + [36] = "qcom/qdu100/multi_image_qti.mbn", + [37] = "qcom/qdu100/multi_image.mbn", + [38] = "qcom/qdu100/xbl_config.elf", + [39] = "qcom/qdu100/abl_userdebug.elf", + [40] = "qcom/qdu100/zeros_1sector.bin", + [41] = "qcom/qdu100/devcfg.mbn", + [42] = "qcom/qdu100/zeros_1sector.bin", + [45] = "qcom/qdu100/tools_l.elf", + [46] = "qcom/qdu100/Quantum.elf", + [47] = "qcom/qdu100/quest.elf", + [48] = "qcom/qdu100/xbl_ramdump.elf", + [49] = "qcom/qdu100/shrm.elf", + [50] = "qcom/qdu100/cpucp.elf", + [51] = "qcom/qdu100/aop_devcfg.mbn", + [52] = "qcom/qdu100/fw_csm_gsi_3.0.elf", + [53] = "qcom/qdu100/qdsp6sw_dtbs.elf", + [54] = "qcom/qdu100/qupv3fw.elf", +}; + static const struct sahara_variant sahara_variants[] = { { .match = "AIC100", @@ -250,6 +280,14 @@ static const struct sahara_variant sahara_variants[] = { .table_size = ARRAY_SIZE(aic200_image_table), .fw_folder = "aic200", .non_streaming = false, + }, + { + .match = "SAHARA", + .match_is_chan = true, + .image_table = qdu100_image_table, + .table_size = ARRAY_SIZE(qdu100_image_table), + .fw_folder = "qdu100", + .non_streaming = false, } }; @@ -278,8 +316,21 @@ static const struct sahara_variant *sahara_select_variant(struct mhi_device *mhi return NULL; } +static int sahara_request_fw(struct sahara_context *context, const char *path) +{ + int ret; + + ret = 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; if (image_id == context->active_image_id) @@ -292,8 +343,26 @@ static int sahara_find_image(struct sahara_context *context, u32 image_id) } if (image_id >= 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 = kasprintf(GFP_KERNEL, "qcom/%s/image_%u.elf", + context->fw_folder, image_id); + if (!fw_path) + return -ENOMEM; + + ret = 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 = image_id; + return 0; } /* @@ -301,9 +370,7 @@ static int sahara_find_image(struct sahara_context *context, u32 image_id) * Only the device knows. Suppress error messages that could suggest an * a problem when we were actually able to continue. */ - ret = firmware_request_nowarn(&context->firmware, - context->image_table[image_id], - &context->mhi_dev->dev); + ret = sahara_request_fw(context, context->image_table[image_id]); if (ret) { dev_dbg(&context->mhi_dev->dev, "request for image id %d / file %s failed %d\n", image_id, context->image_table[image_id], ret); -- 2.34.1