From: Kishore Batta <kishore.batta@oss.qualcomm.com>
To: Manivannan Sadhasivam <mani@kernel.org>
Cc: 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>,
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
Subject: Re: [PATCH v6 4/7] bus: mhi: Add QDU100 Sahara variant and firmware fallback
Date: Thu, 8 Oct 2026 11:41:03 +0530 [thread overview]
Message-ID: <7e47ab9c-68e5-42ae-9c40-47c5c16fcbbc@oss.qualcomm.com> (raw)
In-Reply-To: <kwq7tajvlnm5sesmthseleenbah6d5kuj5d2msyspme7je6o2h@rx3dbqyqeywh>
On 7/13/2026 9:49 PM, Manivannan Sadhasivam wrote:
> On Mon, Jul 13, 2026 at 07:46:02PM +0530, Kishore Batta wrote:
>> On 7/9/2026 11:49 AM, Manivannan Sadhasivam wrote:
>>> On Wed, Jul 01, 2026 at 04:07:38PM +0530, Kishore Batta wrote:
>>>> 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 a firmware lookup
>>>> fallback for cases where an image does not have an explicit entry in the
>>>> device's firmware table. This allows required images to be provisioned by
>>>> the platform.
>>>>
>>>> This change only affects devices matched on the SAHARA MHI 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/host/clients/sahara/sahara.c | 27 +++++++++++++++--
>>>> drivers/bus/mhi/host/pci_generic.c | 45 ++++++++++++++++++++++++++++
>>>> 2 files changed, 70 insertions(+), 2 deletions(-)
>>>>
>>>> diff --git a/drivers/bus/mhi/host/clients/sahara/sahara.c b/drivers/bus/mhi/host/clients/sahara/sahara.c
>>>> index e339c67e236af271645ca81cc517efd9eead87e4..9adbd84859073d8024ba2a5fcfa33897439d6759 100644
>>>> --- a/drivers/bus/mhi/host/clients/sahara/sahara.c
>>>> +++ b/drivers/bus/mhi/host/clients/sahara/sahara.c
>>>> @@ -189,6 +189,7 @@ static bool is_streaming(struct sahara_context *context)
>>>> static int sahara_find_image(struct sahara_context *context, u32 image_id)
>>>> {
>>>> + char *fw_path;
>>>> int ret;
>>>> if (image_id == context->active_image_id)
>>>> @@ -201,8 +202,28 @@ 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/%u",
>>>> + context->fw_folder, image_id);
>>>> + if (!fw_path)
>>>> + return -ENOMEM;
>>>> +
>>>> + ret = firmware_request_nowarn(&context->firmware,
>>>> + fw_path,
>>>> + &context->mhi_dev->dev);
>>>> + 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;
>>>> }
>>>> /*
>>>> @@ -870,8 +891,10 @@ static void sahara_mhi_dl_xfer_cb(struct mhi_device *mhi_dev, struct mhi_result
>>>> static const struct mhi_device_id sahara_mhi_match_table[] = {
>>>> { .chan = "QAIC_SAHARA", },
>>>> + { .chan = "SAHARA"},
>>>> {},
>>>> };
>>>> +MODULE_DEVICE_TABLE(mhi, sahara_mhi_match_table);
>>> This change should belong to a separate patch.
>>>
>>>> static struct mhi_driver sahara_mhi_driver = {
>>>> .id_table = sahara_mhi_match_table,
>>>> diff --git a/drivers/bus/mhi/host/pci_generic.c b/drivers/bus/mhi/host/pci_generic.c
>>>> index 391ab146f501c6ce1c81f6138f7c491a49c2f264..82e41632afc555a53dec3d8395558ae039b33bbd 100644
>>>> --- a/drivers/bus/mhi/host/pci_generic.c
>>>> +++ b/drivers/bus/mhi/host/pci_generic.c
>>>> @@ -300,6 +300,43 @@ static const struct mhi_pci_dev_info mhi_qcom_qdu100_info = {
>>>> .reset_on_remove = true,
>>>> };
>>>> +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 mhi_sahara_fw_table qdu100_sahara_fw = {
>>>> + .image_table = qdu100_image_table,
>>>> + .table_size = ARRAY_SIZE(qdu100_image_table),
>>>> + .fw_folder = "qdu100",
>>>> + .non_streaming = false,
>>>> +};
>>>> +
>>>> static const struct mhi_channel_config mhi_qcom_sa8775p_channels[] = {
>>>> MHI_CHANNEL_CONFIG_UL(46, "IP_SW0", 2048, 1),
>>>> MHI_CHANNEL_CONFIG_DL(47, "IP_SW0", 2048, 2),
>>>> @@ -1399,6 +1436,14 @@ static int mhi_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
>>>> pci_set_drvdata(pdev, mhi_pdev);
>>>> + /*
>>>> + * Provide Sahara firmware mapping. Sahara consumes it via
>>>> + * mhi_dev->mhi_cntrl->sahara_fw at probe time.
>>>> + */
>>>> + if (info == &mhi_qcom_qdu100_info ||
>>>> + (info->name && !strcmp(info->name, "qcom-qdu100")))
>>>> + mhi_cntrl->sahara_fw = &qdu100_sahara_fw;
>>>> +
>>> Why are you adding QAIC MHI controller config in pci_generic driver? This driver
>>> only handles Modem devices.
>>>
>>> - Mani
>>
>> Hi Mani, Above one is for QDU100 device. QAIC is not added in this file.
>>
> Sorry, my bad. But anyhow, you should provide this mapping table pointer via
> 'struct mhi_pci_dev_info'.
>
> - Mani
ACK. I made required changes and will publish in v7 patch set.
next prev parent reply other threads:[~2026-10-08 6:11 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-01 10:37 [PATCH v6 0/7] Qualcomm Sahara protocol enhancements Kishore Batta
2026-07-01 10:37 ` [PATCH v6 1/7] Add documentation for Sahara protocol Kishore Batta
2026-07-08 4:46 ` Randy Dunlap
2026-07-13 7:20 ` Kishore Batta
2026-10-08 6:10 ` Kishore Batta
2026-07-01 10:37 ` [PATCH v6 2/7] bus: mhi: Move Sahara protocol driver under MHI host client drivers Kishore Batta
2026-07-01 10:37 ` [PATCH v6 3/7] bus: mhi: Centralize Sahara firmware image table selection at probe time Kishore Batta
2026-07-01 10:37 ` [PATCH v6 4/7] bus: mhi: Add QDU100 Sahara variant and firmware fallback Kishore Batta
2026-07-09 6:19 ` Manivannan Sadhasivam
2026-07-13 7:25 ` Kishore Batta
2026-07-13 17:11 ` Manivannan Sadhasivam
2026-10-08 6:11 ` Kishore Batta
2026-07-13 14:16 ` Kishore Batta
2026-07-13 16:19 ` Manivannan Sadhasivam
2026-10-08 6:11 ` Kishore Batta [this message]
2026-07-01 10:37 ` [PATCH v6 5/7] bus: mhi: Load DDR training data using device serial number Kishore Batta
2026-07-09 6:21 ` Manivannan Sadhasivam
2026-07-13 7:27 ` Kishore Batta
2026-10-08 6:11 ` Kishore Batta
2026-07-01 10:37 ` [PATCH v6 6/7] bus: mhi: Capture DDR training data via command mode Kishore Batta
2026-07-01 10:37 ` [PATCH v6 7/7] bus: mhi: Expose DDR training data via controller sysfs Kishore Batta
2026-07-09 6:57 ` Manivannan Sadhasivam
2026-07-13 7:30 ` Kishore Batta
2026-07-13 17:08 ` Manivannan Sadhasivam
2026-10-08 6:12 ` Kishore Batta
2026-10-08 6:12 ` Kishore Batta
2026-07-22 12:22 ` Manivannan Sadhasivam
2026-10-08 6:11 ` Kishore Batta
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=7e47ab9c-68e5-42ae-9c40-47c5c16fcbbc@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
all inboxes | Powered by JetHome®