From nobody Thu Apr 9 10:36:20 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 4A5DB3E5EFE for ; Tue, 10 Mar 2026 07:22:31 +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=1773127352; cv=none; b=e/iDABOzDFbha4hnf0ZRevdKWgmNdPnOikDX/JqW+lBWnlhN28QugbGFAGysTnYUukAPgxoNapn2S1uSCPVqzb+5Ok3t+y6guCAWVJUSiondsLsZKGNXKHIwdQhAfgkCpnTpNTt/xE34IrIwEN4GC2WlL+5h4NOWJInx/G2fYZQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773127352; c=relaxed/simple; bh=D9kJlDoQ6LGAQMXZQh6rystru1KGUPI8NHA/TRw7+VQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=bVz6HD2KksjXo9wxrMe1HicodQEQmprRGNgmkpa64p+UlsPGMoA302uurlo/SfsLNaSaqXk8qC4npgKGq69a/Jx1B07YwxExT9ePufdRf/tvIGl5BsweMMVCQEPrna1+D+PzQCnpFuPid+jtgtqI7Mem1SE+hgCSEpSthHfT0jY= 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=dWrtB+Yk; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=QKK2QAMR; 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="dWrtB+Yk"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="QKK2QAMR" 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 62A5lZTL568942 for ; Tue, 10 Mar 2026 07:22:30 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= iImuO6SGxaLTCiAHgKuG3rSRhW0OgS17DvZFF+54V/Y=; b=dWrtB+YkkeoZVD5l dBFkknMK73pt1U9W74yJib2y3ulLziyenaDahhjvZ9t4ziBrpCDmWruMXWoHjkvA +wJ7JJFub+qHEbbjgs+a6kW/9y42jPK8PO7KHLjOm2cRsvBmb7gN7XaqgGN/TPZJ JEtkg4qNoW4BMt80YI7HtRC2+oQ0/WR7fylCDmlraX+U7JE/HY6IXXKvBkfvq+hE 83fPNy2XAtlEQfKRuK5PvtY0hYa8nI90pynbbVBLvY/KKWAhPSrTR+V37Ehaa++N ZSOTeMwl9aNU881G3Euk/MEd6o6xqIUSht/bMcjqiaEyvD8sWEt9jpcB3e/4PApe 9t2gCw== 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 4ctdf8ga9c-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Tue, 10 Mar 2026 07:22:30 +0000 (GMT) Received: by mail-pl1-f197.google.com with SMTP id d9443c01a7336-2ae50463c39so87033125ad.1 for ; Tue, 10 Mar 2026 00:22:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1773127349; x=1773732149; 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=iImuO6SGxaLTCiAHgKuG3rSRhW0OgS17DvZFF+54V/Y=; b=QKK2QAMRJHF3Pb3CKrR1pPjYjo42G14IPTOlOK1qvKoH3etoZqRTJbr3j5Ezl2OKo7 ZOEwHXEYUnngMIsCzkZkfM5pMoxKQeHkpkSRJTTrrTH8xpLcMvJawXkTf7UbxW5CiwYv Ro1HPmaWAFV6yjc+fWJySprsbpV7Z5SJzOoXoM9TM+2SaHcF6h7VNg10TxQKgbzH4Ea6 8LTDJT3rY8dHbJiDxFro6iKHYO9HyAgtdy7tvrPy7R6AdlBp7zWydHe7VlvEpzhCghOV UHShwlzF3oxkYpWZQFFgOwOXKnjITlaMUepb+CirfMcEfRBQWOGUZDX7nK4/BfukFpz2 ZfFw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773127349; x=1773732149; 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=iImuO6SGxaLTCiAHgKuG3rSRhW0OgS17DvZFF+54V/Y=; b=twEXHy1WK2bBb22wGtCKDiC8UpJlQMxlkW8zgcPvRWVCy5M0pIKt2jbzF2Q1qai7Gu 4UB9jWcYCSr/PBAuyOuejTUD5w7ItwNE6FRL4exeKQLMniaouo0zATvE8w9eDOw65mpc VqOHKtXR1ev+qjw8xs/FhP7jrjeqmZcK2klz7R+p6EbjOPM0Q4ayRZAH4KaDdz3u+EZG gH2rqiVMmJQeB9S7+NnJ/F09q9gLyVs/bD74WTxRu8lInTctfDCTQYt2pij/yA3orjaU TNhY/XxZfTc7WHikNJlOz/rfirYZdI0XG0wEhJhgzE/5Tv7DIk72N+i6IpK1Wc+kGu/P ySLg== X-Forwarded-Encrypted: i=1; AJvYcCUnoMAKr2VOBRI3ZZo9PbM9zBOu3ISo23OZBZgk2tbetp1kgxocV7+/dAjRILrSpyjPDB+OjvN0Ur4jmv8=@vger.kernel.org X-Gm-Message-State: AOJu0Yw+SFmN6J23ZduEbPijwzKgVP1PxsVaY6sFRTFPXBn63CWNmKHc Yu8fRvPba4HQwnI0pru8PQos2YDChHYrwadWvlPxzM0NYq0Cr+IOBEkHcnb5fEv8+ktyfeo0Dxt OboG60CYec2wjRGzK7FA9H6U85dmPC9221LwDWsTVZejxyseNdD+4uW2xVdIpe+WrNsw= X-Gm-Gg: ATEYQzz2dGu+Lh7XqcKU6tVrQ9OtKCBZgAGyOLTFDp0mwP0fdwvaH8H8gyVvJIMS/H1 xoj/7U2J3ivxIw0fS50Ca9NrmK2vsullBvvhlVZmYSc11bUtJAUdHqYgGRtasXq8ySRW2pnfyDs wzGxLcgtRaAOFTzWUewwruWgZ5rRO5X5lCHVwY9aKlFm0xVYI8WJX+oJtGlc6UK4pTO3U3n2pBP Fq8r1qcMB9l7IYEWCTjpBDxCXRJkLUFe+paXQyzJHxBOq2B/NsQW8c0lvNz+sr9qPrnJw9ZLeYy r5lPXILmii8Ey5YEYhuMnNS1gjqi6Oi7gu8Xoe6+F18L8X8UWEEqvOxqBBnb8B2okhVl2JMbSww Gf6PxGL0fI/g1l43ng/pzMbPajnv1ePD3VQp6S8o4IDie1N/zYjg= X-Received: by 2002:a17:902:e790:b0:2aa:d630:cd5d with SMTP id d9443c01a7336-2ae82505f47mr138797275ad.44.1773127349340; Tue, 10 Mar 2026 00:22:29 -0700 (PDT) X-Received: by 2002:a17:902:e790:b0:2aa:d630:cd5d with SMTP id d9443c01a7336-2ae82505f47mr138796965ad.44.1773127348780; Tue, 10 Mar 2026 00:22:28 -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.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 10 Mar 2026 00:22:28 -0700 (PDT) From: Kishore Batta Date: Tue, 10 Mar 2026 12:52:01 +0530 Subject: [PATCH v3 4/9] bus: mhi: Centralize firmware image table selection at probe time 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-4-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=3898; i=kishore.batta@oss.qualcomm.com; s=20260206; h=from:subject:message-id; bh=D9kJlDoQ6LGAQMXZQh6rystru1KGUPI8NHA/TRw7+VQ=; b=CTZh2FV9FQiyZwGLQPHTzXB9kJsW6bpaNzbyq0P/Z7ViUQFDLg9+WJ+aT6EaDJ4D/XXTwoGOe oXks72SrrRJAHcr4haYbVSjBADZoIijZ2z4edmqXtFNpuZGaHlJRE6T X-Developer-Key: i=kishore.batta@oss.qualcomm.com; a=ed25519; pk=vJo8RvTf+HZpRLK2oOIljmbn9l3zFkibCGh+blaqZCw= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzEwMDA2MSBTYWx0ZWRfX6+SqS8ZFG1Dw NarFv2xndQMUOgscBNzTP5EKBEslFItX01SupHQnHJSm987z4CFkH2sLy1CpoRJxZKVggMnU3Bx s5JcZDKnL9F4fW6//VOBMNlTDKNvV65yju/Qg8P0Gt+HlfEOa2dNQuNlhuHuVWYGVNDwsSoGZ1/ V42vt8MKgGtBLQec7JIHjVH4/Cq7cg6PMjHPyNfcsqE+Y7dYPesawwiWzDkvPLeuKxSz9oGgZ7S OmxiUF+U3PASBpOp7Ocl9t/JAsIakQdSSPEuOW8T9Po+iRCpn3xGJmz9s/jhpx+iN8jGwi7hKzC mG+3Eatai0VVqV+vrZYMGw8H0AV6I7IJQgc3DPevdcfxX4udw/3Rw3dFrvcmauciccgAsHUAnL6 VgRn5fpFgo2ciFWrAT1pkHOynLRzDLmSxmpNScfGOu1c3LDTeXF8QjVSX0ftA0qjCdpBXgWwM2x coYjNRjr+axUBC5jWMg== X-Proofpoint-ORIG-GUID: 2NtekCSUwn6jdVOPgggnL4AovxFEumYy X-Proofpoint-GUID: 2NtekCSUwn6jdVOPgggnL4AovxFEumYy X-Authority-Analysis: v=2.4 cv=b+W/I9Gx c=1 sm=1 tr=0 ts=69afc6b6 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=_glEPmIy2e8OvE2BGh3C:22 a=EUspDBNiAAAA:8 a=hNMuCp7LqqrRSepR2eAA:9 a=0bXxn9q0MV6snEgNplNhOjQmxlI=:19 a=QEXdDO2ut3YA:10 a=1OuFwYUASf3TG4hYMiVC:22 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 bulkscore=0 adultscore=0 suspectscore=0 phishscore=0 priorityscore=1501 clxscore=1015 impostorscore=0 malwarescore=0 lowpriorityscore=0 spamscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2602130000 definitions=main-2603100061 The Sahara driver currently selects firmware image tables using scattered, device specific conditionals in the probe path, making the logic harder to follow and extend. Refactor firmware image table selection into a single, explicit probe-time mechanism by introducing a variant table that captures device matching, firmware image tables, firmware folder names, and streaming behavior in one place. This centralizes device specific decisions, simplifies the probe logic, and avoids ad-hoc conditionals while preserving the existing behavior for all supported AIC devices. Signed-off-by: Kishore Batta --- drivers/bus/mhi/sahara/sahara.c | 66 ++++++++++++++++++++++++++++++++++++-= ---- 1 file changed, 58 insertions(+), 8 deletions(-) diff --git a/drivers/bus/mhi/sahara/sahara.c b/drivers/bus/mhi/sahara/sahar= a.c index e3499977e7c6b53bc624a8eb00d0636f2ea63307..8f1c0d72066c0cf80c09d78bfc5= 1df2e482133b9 100644 --- a/drivers/bus/mhi/sahara/sahara.c +++ b/drivers/bus/mhi/sahara/sahara.c @@ -180,6 +180,16 @@ struct sahara_context { u32 read_data_length; bool is_mem_dump_mode; bool non_streaming; + const char *fw_folder; +}; + +struct sahara_variant { + const char *match; + bool match_is_chan; + const char * const *image_table; + size_t table_size; + const char *fw_folder; + bool non_streaming; }; =20 static const char * const aic100_image_table[] =3D { @@ -224,11 +234,50 @@ static const char * const aic200_image_table[] =3D { [78] =3D "qcom/aic200/pvs.bin", }; =20 +static const struct sahara_variant sahara_variants[] =3D { + { + .match =3D "AIC100", + .match_is_chan =3D false, + .image_table =3D aic100_image_table, + .table_size =3D ARRAY_SIZE(aic100_image_table), + .fw_folder =3D "aic100", + .non_streaming =3D true, + }, + { + .match =3D "AIC200", + .match_is_chan =3D false, + .image_table =3D aic200_image_table, + .table_size =3D ARRAY_SIZE(aic200_image_table), + .fw_folder =3D "aic200", + .non_streaming =3D false, + } +}; + static bool is_streaming(struct sahara_context *context) { return !context->non_streaming; } =20 +static const struct sahara_variant *sahara_select_variant(struct mhi_devic= e *mhi_dev, + const struct mhi_device_id *id) +{ + int i; + + for (i =3D 0; i < ARRAY_SIZE(sahara_variants); i++) { + const struct sahara_variant *v =3D &sahara_variants[i]; + + if (v->match_is_chan) { + if (id && id->chan && !strcmp(id->chan, v->match)) + return v; + } else { + if (mhi_dev->mhi_cntrl && mhi_dev->mhi_cntrl->name && + !strcmp(mhi_dev->mhi_cntrl->name, v->match)) + return v; + } + } + return NULL; +} + static int sahara_find_image(struct sahara_context *context, u32 image_id) { int ret; @@ -797,6 +846,7 @@ static void sahara_read_data_processing(struct work_str= uct *work) =20 static int sahara_mhi_probe(struct mhi_device *mhi_dev, const struct mhi_d= evice_id *id) { + const struct sahara_variant *variant; struct sahara_context *context; int ret; int i; @@ -809,14 +859,14 @@ static int sahara_mhi_probe(struct mhi_device *mhi_de= v, const struct mhi_device_ if (!context->rx) return -ENOMEM; =20 - if (!strcmp(mhi_dev->mhi_cntrl->name, "AIC200")) { - context->image_table =3D aic200_image_table; - context->table_size =3D ARRAY_SIZE(aic200_image_table); - } else { - context->image_table =3D aic100_image_table; - context->table_size =3D ARRAY_SIZE(aic100_image_table); - context->non_streaming =3D true; - } + variant =3D sahara_select_variant(mhi_dev, id); + if (!variant) + return -ENODEV; + + context->image_table =3D variant->image_table; + context->table_size =3D variant->table_size; + context->non_streaming =3D variant->non_streaming; + context->fw_folder =3D variant->fw_folder; =20 /* * There are two firmware implementations for READ_DATA handling. --=20 2.34.1