From: Kishore Batta <kishore.batta@oss.qualcomm.com>
To: Jonathan Corbet <corbet@lwn.net>,
Shuah Khan <skhan@linuxfoundation.org>,
Jeff Hugo <jeff.hugo@oss.qualcomm.com>,
Carl Vanderlip <carl.vanderlip@oss.qualcomm.com>,
Oded Gabbay <ogabbay@kernel.org>,
Manivannan Sadhasivam <mani@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 <kishore.batta@oss.qualcomm.com>
Subject: [PATCH v3 5/9] bus: mhi: Add QDU100 variant and image_id firmware fallback
Date: Tue, 10 Mar 2026 12:52:02 +0530 [thread overview]
Message-ID: <20260310-sahara_protocol_new_v2-v3-5-994ea4b0d5ad@oss.qualcomm.com> (raw)
In-Reply-To: <20260310-sahara_protocol_new_v2-v3-0-994ea4b0d5ad@oss.qualcomm.com>
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 <kishore.batta@oss.qualcomm.com>
---
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
next prev parent reply other threads:[~2026-03-10 7:22 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-10 7:21 [PATCH v3 0/9] Qualcomm Sahara protocol enhancements Kishore Batta
2026-03-10 7:21 ` [PATCH v3 1/9] Add documentation for Sahara protocol Kishore Batta
2026-03-11 3:35 ` Claude review: " Claude Code Review Bot
2026-03-10 7:21 ` [PATCH v3 2/9] bus: mhi: Move sahara protocol driver under drivers/bus/mhi Kishore Batta
2026-03-11 3:35 ` Claude review: " Claude Code Review Bot
2026-03-10 7:22 ` [PATCH v3 3/9] bus: mhi: Match devices exposing the protocol on the SAHARA channel Kishore Batta
2026-03-11 3:35 ` Claude review: " Claude Code Review Bot
2026-03-10 7:22 ` [PATCH v3 4/9] bus: mhi: Centralize firmware image table selection at probe time Kishore Batta
2026-03-11 3:35 ` Claude review: " Claude Code Review Bot
2026-03-10 7:22 ` Kishore Batta [this message]
2026-03-11 3:35 ` Claude review: bus: mhi: Add QDU100 variant and image_id firmware fallback Claude Code Review Bot
2026-03-10 7:22 ` [PATCH v3 6/9] bus: mhi: Load DDR training data using per-device serial number Kishore Batta
2026-03-11 3:35 ` Claude review: " Claude Code Review Bot
2026-03-10 7:22 ` [PATCH v3 7/9] bus: mhi: Capture DDR training data using command mode Kishore Batta
2026-03-11 3:35 ` Claude review: " Claude Code Review Bot
2026-03-10 7:22 ` [PATCH v3 8/9] bus: mhi: Expose DDR training data via controller sysfs Kishore Batta
2026-03-11 3:35 ` Claude review: " Claude Code Review Bot
2026-03-10 7:22 ` [PATCH v3 9/9] Documentation: ABI: Add sysfs ABI documentation for DDR training data Kishore Batta
2026-03-11 3:35 ` Claude review: " Claude Code Review Bot
2026-03-11 3:35 ` Claude review: Qualcomm Sahara protocol enhancements Claude Code Review Bot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260310-sahara_protocol_new_v2-v3-5-994ea4b0d5ad@oss.qualcomm.com \
--to=kishore.batta@oss.qualcomm.com \
--cc=carl.vanderlip@oss.qualcomm.com \
--cc=corbet@lwn.net \
--cc=dri-devel@lists.freedesktop.org \
--cc=jeff.hugo@oss.qualcomm.com \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mani@kernel.org \
--cc=mhi@lists.linux.dev \
--cc=ogabbay@kernel.org \
--cc=skhan@linuxfoundation.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox