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 9C2C53451CF for ; Thu, 19 Mar 2026 06:32:06 +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=1773901928; cv=none; b=sJFr2QT0vWl3MH9MspAh833UpsIoOGkJ2+CY5iyEVTD9/n2/+5NRDVXc5mvZS4vd/kjQ/g7KzS8T2BOJItaPKwGj/1pO6mxpCuqmbH5xo9dGSw9Tjb/513+hWHGe5jWWj1xioMP2AgGxGiGRrxpxZvVud4IcT0KkAbfej5o/Q48= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773901928; c=relaxed/simple; bh=D9kJlDoQ6LGAQMXZQh6rystru1KGUPI8NHA/TRw7+VQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Y4hYyFnVkdnToqaYc93F4IKLCG71eJLOUS1Fbswl9qMvCvjTe1ZZn5TmdXMIzj5Bm03+VNp6BfpF8uc4PWGeBte/L9PuJoAcrFwf6NqNdvRj/oHMXlLdfyK8lm7h380XDa3PwmCHdihQiFBfrbFtK0y516uR6WUphVVy1RiHfis= 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=Whn166aW; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=cq2Hg05M; 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="Whn166aW"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="cq2Hg05M" Received: from pps.filterd (m0279863.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62J5Xb4I1702019 for ; Thu, 19 Mar 2026 06:32:06 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=Whn166aWF+XL6yG7 FGBOscb6eQy7j9Si80EhSoVjfzaM0FEkgX2cWAxkFlVNumEzhyPzOM9CmzWdG1qA MZQQI3LX3k7bg9IChdDCQsLasLxF2SAcluNgscqujtiG4IxilP9rK0D11/49d8DL ty21gWcNCSyy+9ULXhqcCZKLtXUj22qbjv+ag9nO1PJOjF/notp8RB1I6Jr9FqO6 cvRjn7Ex3O4eiegBLvHEkL4HhMZ6bxxYMIuZi6XeL7dvhczmWEwLGX5SWZHZw/Px uthjzhpknujr7XrPFNiCdVRPrBSlIMs7ySDYLOtD2q3kpdEYSwPE2dzw+XFhxCGR DvBxRw== Received: from mail-pl1-f199.google.com (mail-pl1-f199.google.com [209.85.214.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4cyyhgabk8-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 19 Mar 2026 06:32:05 +0000 (GMT) Received: by mail-pl1-f199.google.com with SMTP id d9443c01a7336-2b0601ff3d9so8407085ad.2 for ; Wed, 18 Mar 2026 23:32:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1773901925; x=1774506725; 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=cq2Hg05MKPH9MpCEJLuNPezx+7qHAsqd1LVTSgwTuUFYz9YPDoHze5GBC5GTomOjei uW56tuD7iGxmISqz1Mb6bYHoUoOSUVAGfaQIAGwRrwTmCG0oPy2f7DQJ5Y8URvwb4KYU kpXDVvpWxc7aLGjgD6CZIQgL+dsWnWvyTZ0u3HZFE6OgpKHQHKf5ddo8aUYKSnVPM5IS Z/ubzcChZh3mubPerruWWbgXR/y1gF+7tnRImdi0T2OwsoGrk4sWjOOk0p4oEh2xupZC c2BTt5RIl9aBS8vpdFhanLd6mjX/FhKViIWkNcAPh8IfSb3z4iicgarXkPPh9sQOeAJK r06Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773901925; x=1774506725; 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=E9p7JV26KPzSdZzT2ltB5shbc36MX0YZGGYr4UozBuEIpTI1YpC7HtlhEN8LFCf7qf I1cOu6eX1HRcPtYETBepxtzGFrIAGzEdmX1XgsXCEhiRMN33BxEeDsFC9pEBPRJz9Xdg 0Lup91ZE12gxr2raBE9h4cEm2+UrXzJFyZGRpuZ4qjUqb7Bm4vKr4+f6zhECXDIhRslg xiPH4wWAgLiGI1A6MT1FMNi7aSyE+9ZwmnsHnDBEUIl/fyl29ZpJ5KdYspy5YjOq7nB7 cBwPpGn9sbJEWQ210mPrdiQBHFAe9OTdbAgfMx4WgR6K6VZC1vA/48H3R4SkDmjjbGSx uCsw== X-Forwarded-Encrypted: i=1; AJvYcCW7M4OSlxe+6gZnTbWNZdDHL2wThSZoFcIAW3+onyWJnFszHqX7TnmfpwAQ2EB61dnxUW1Zn+s5+w413yw=@vger.kernel.org X-Gm-Message-State: AOJu0Yx77a2AtJdIDty0LzekGqLps3xBwg2XedlkEbb77cIWrQMu90L9 4fCA6vBYnXLyvee+IXVvkKcU8Jo/SKI2G7zT9BGLRbguIcLpL9l6GKP6bOy+QYGUiQZVD6Jv+ZE Cz1iTxkKIaI2H13/pVQBqYn7Yv7aghVnA5s04EvmJaHPkMxWLQS6hIlS07hFcRjz53jM= X-Gm-Gg: ATEYQzxs6tge8rEs4mf367VMShWvj+SJBfU1++oDvcqTT7F0iYh6E3F0SFQ0ag7lI0F weWnTFgVS87RzNSDhI4RJ9VaEKw166qLbnCmuLtcr9lI/zxzr9JLFAgZ3k8JsKvx1GY5eFK0AkN CWhHu/4EUHyjlRPgYUfo13VUw6auV+k8xhESI+tcmEuSVbdZjbf+zNBT2uYqDZD+Uk1kh9sbhmb i4qOrD2JZrR6dQmA7+TKrIMpVrVYqhrFM4Dse7TkicHM2LHYh6YG7cygtPMg9TuJiiu29cDtGWQ NHWN7yZKpC92wrKpetQxdfy/4Aq3wUkm7DonwAzLZ2Bp4HOVfGDOnjhfnwSW5Z/4dvvczntQX1M eZ2uP33KyVEhP20SI6S1e9ta+kf0MxlBYmvAwCIy3Ixb/192Vp+E= X-Received: by 2002:a17:902:f547:b0:2b0:7177:d5e5 with SMTP id d9443c01a7336-2b07177dc04mr45425285ad.43.1773901924746; Wed, 18 Mar 2026 23:32:04 -0700 (PDT) X-Received: by 2002:a17:902:f547:b0:2b0:7177:d5e5 with SMTP id d9443c01a7336-2b07177dc04mr45425075ad.43.1773901924217; Wed, 18 Mar 2026 23:32:04 -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.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 18 Mar 2026 23:32:03 -0700 (PDT) From: Kishore Batta Date: Thu, 19 Mar 2026 12:01:44 +0530 Subject: [PATCH v4 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: <20260319-sahara_protocol_new_v2-v4-4-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=3898; i=kishore.batta@oss.qualcomm.com; s=20260206; h=from:subject:message-id; bh=D9kJlDoQ6LGAQMXZQh6rystru1KGUPI8NHA/TRw7+VQ=; b=vr6s4lpUaWr2T9TkXlD+KdE+YQxiqHW3dkYcMsoUITH9JLmrkM1V1VinIAHZ1bzHa8OPBMlFX aLXDFnx7Qz7DIK4WvzLkJn0afD+UwqZPiaiR3bpdRalFoHWK91wWibP X-Developer-Key: i=kishore.batta@oss.qualcomm.com; a=ed25519; pk=vJo8RvTf+HZpRLK2oOIljmbn9l3zFkibCGh+blaqZCw= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzE5MDA0OSBTYWx0ZWRfX54K/cFamFWkE wR0MS7M5Ea07RcYt+okKyY0S56uh4KQDCL4L1sn63c0RBJynFFfEtbBYsbpMzxU0b4buemV16vd O7X+5eyC1n2WiH+GPvvKD1QIwCAR17e1HbubqrKpvDhpWriiG/sQKllr30VoCMBnuAryRmoguZ/ CPgtTaH6rXDMvGRGPO0Vw4WG4IxE00URjuXPDV7S1BZZhUqGVetVGOmhoAS1C0AELJ2J8IkGnAE BIKj8/DuRVPuUqLB2xBcbjNwidealMZ7K0qvjFwcllWnZa6DmqJLNHsg2WxSfRCGmFh+qC1hQ2t rLlQSmCBRJuJkBW4uu0oN8yRO+kMlZL93i9CbVsuCX3XVtChL1s7flQ+Vz4uNI2TKbNCeDTVrag joaQXnrvsTDUEU4NKZG5B8oHr2DiwzcCEK/GEqSO8GOEuf1qafE16wadvSyc3OchLi4pcxYM2Sa HKuDNJQT28EpDV7DVEA== X-Proofpoint-ORIG-GUID: 3GoDkODMMZcVn10F0JAf4pknWaTIhkIV X-Authority-Analysis: v=2.4 cv=IbSKmGqa c=1 sm=1 tr=0 ts=69bb9865 cx=c_pps a=JL+w9abYAAE89/QcEU+0QA==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=yOCtJkima9RkubShWh1s:22 a=EUspDBNiAAAA:8 a=hNMuCp7LqqrRSepR2eAA:9 a=0bXxn9q0MV6snEgNplNhOjQmxlI=:19 a=QEXdDO2ut3YA:10 a=324X-CrmTo6CU4MGRt3R:22 X-Proofpoint-GUID: 3GoDkODMMZcVn10F0JAf4pknWaTIhkIV 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 bulkscore=0 suspectscore=0 lowpriorityscore=0 spamscore=0 impostorscore=0 clxscore=1015 adultscore=0 malwarescore=0 phishscore=0 priorityscore=1501 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 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