summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Brown <broonie@kernel.org>2026-10-01 15:55:15 +0100
committerMark Brown <broonie@kernel.org>2026-10-01 15:55:15 +0100
commit7d742a0bc032450fba143ef083ace0fa0047190d (patch)
treed7f65dde3a8029d6f75780ea9a76a95eebfbafac
parent0a7964c5562482b183ad0b187559ec6608ce53f6 (diff)
parent710bf7329abf86e37db529f19c8f394099238892 (diff)
downloadlinux-next-7d742a0bc032450fba143ef083ace0fa0047190d.tar.gz
linux-next-7d742a0bc032450fba143ef083ace0fa0047190d.zip
Merge branch 'mhi-next' of https://git.kernel.org/pub/scm/linux/kernel/git/mani/mhi.git
-rw-r--r--drivers/bus/mhi/ep/main.c4
-rw-r--r--drivers/bus/mhi/host/debugfs.c4
-rw-r--r--drivers/bus/mhi/host/pci_generic.c9
-rw-r--r--include/linux/mhi.h2
4 files changed, 13 insertions, 6 deletions
diff --git a/drivers/bus/mhi/ep/main.c b/drivers/bus/mhi/ep/main.c
index db7ee6547eef..da498570113a 100644
--- a/drivers/bus/mhi/ep/main.c
+++ b/drivers/bus/mhi/ep/main.c
@@ -1534,8 +1534,8 @@ int mhi_ep_register_controller(struct mhi_ep_cntrl *mhi_cntrl,
mhi_cntrl->index = ret;
- irq_set_status_flags(mhi_cntrl->irq, IRQ_NOAUTOEN);
- ret = request_irq(mhi_cntrl->irq, mhi_ep_irq, IRQF_TRIGGER_HIGH,
+ ret = request_irq(mhi_cntrl->irq, mhi_ep_irq,
+ IRQF_TRIGGER_HIGH | IRQF_NO_AUTOEN,
"doorbell_irq", mhi_cntrl);
if (ret) {
dev_err(mhi_cntrl->cntrl_dev, "Failed to request Doorbell IRQ\n");
diff --git a/drivers/bus/mhi/host/debugfs.c b/drivers/bus/mhi/host/debugfs.c
index 39e45748a24c..93f458a2557d 100644
--- a/drivers/bus/mhi/host/debugfs.c
+++ b/drivers/bus/mhi/host/debugfs.c
@@ -72,7 +72,7 @@ static int mhi_debugfs_events_show(struct seq_file *m, void *d)
seq_printf(m, " rp: 0x%llx wp: 0x%llx", le64_to_cpu(er_ctxt->rp),
le64_to_cpu(er_ctxt->wp));
- seq_printf(m, " local rp: 0x%pK db: 0x%pad\n", ring->rp,
+ seq_printf(m, " local rp: 0x%p db: 0x%pad\n", ring->rp,
&mhi_event->db_cfg.db_val);
}
@@ -120,7 +120,7 @@ static int mhi_debugfs_channels_show(struct seq_file *m, void *d)
le64_to_cpu(chan_ctxt->rbase), le64_to_cpu(chan_ctxt->rlen),
le64_to_cpu(chan_ctxt->rp), le64_to_cpu(chan_ctxt->wp));
- seq_printf(m, " local rp: 0x%pK local wp: 0x%pK db: 0x%pad\n",
+ seq_printf(m, " local rp: 0x%p local wp: 0x%p db: 0x%pad\n",
ring->rp, ring->wp,
&mhi_chan->db_cfg.db_val);
}
diff --git a/drivers/bus/mhi/host/pci_generic.c b/drivers/bus/mhi/host/pci_generic.c
index b636e2c23b4d..5471a6a0f128 100644
--- a/drivers/bus/mhi/host/pci_generic.c
+++ b/drivers/bus/mhi/host/pci_generic.c
@@ -322,6 +322,8 @@ static const struct mhi_channel_config modem_qcom_v1_mhi_channels[] = {
MHI_CHANNEL_CONFIG_DL(15, "QMI", 4, 0),
MHI_CHANNEL_CONFIG_UL(20, "IPCR", 8, 0),
MHI_CHANNEL_CONFIG_DL(21, "IPCR", 8, 0),
+ MHI_CHANNEL_CONFIG_UL(32, "DUN", 32, 0),
+ MHI_CHANNEL_CONFIG_DL(33, "DUN", 32, 0),
MHI_CHANNEL_CONFIG_UL_FP(34, "FIREHOSE", 32, 0),
MHI_CHANNEL_CONFIG_DL_FP(35, "FIREHOSE", 32, 0),
MHI_CHANNEL_CONFIG_UL(46, "IP_SW0", 64, 2),
@@ -732,6 +734,8 @@ static const struct mhi_channel_config mhi_sierra_em919x_channels[] = {
MHI_CHANNEL_CONFIG_DL(13, "MBIM", 128, 0),
MHI_CHANNEL_CONFIG_UL(14, "QMI", 32, 0),
MHI_CHANNEL_CONFIG_DL(15, "QMI", 32, 0),
+ MHI_CHANNEL_CONFIG_UL(18, "IP_CTRL", 32, 0),
+ MHI_CHANNEL_CONFIG_DL(19, "IP_CTRL", 32, 0),
MHI_CHANNEL_CONFIG_UL(32, "DUN", 32, 0),
MHI_CHANNEL_CONFIG_DL(33, "DUN", 32, 0),
MHI_CHANNEL_CONFIG_HW_UL(100, "IP_HW0", 512, 1),
@@ -1097,6 +1101,7 @@ struct mhi_pci_device {
struct work_struct recovery_work;
struct timer_list health_check_timer;
unsigned long status;
+ bool no_m3;
bool reset_on_remove;
};
@@ -1409,6 +1414,8 @@ static int mhi_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
mhi_cntrl->mru = info->mru_default;
mhi_cntrl->name = info->name;
+ mhi_pdev->no_m3 = info->no_m3;
+
if (!pdev->is_virtfn)
mhi_pdev->reset_on_remove = info->reset_on_remove;
@@ -1497,7 +1504,7 @@ static void mhi_pci_remove(struct pci_dev *pdev)
}
/* balancing probe put_noidle */
- if (pci_pme_capable(pdev, PCI_D3hot))
+ if (pci_pme_capable(pdev, PCI_D3hot) && !mhi_pdev->no_m3)
pm_runtime_get_noresume(&pdev->dev);
if (mhi_pdev->reset_on_remove)
diff --git a/include/linux/mhi.h b/include/linux/mhi.h
index 8616bacd8675..65e8a397cc50 100644
--- a/include/linux/mhi.h
+++ b/include/linux/mhi.h
@@ -687,7 +687,7 @@ int mhi_pm_resume(struct mhi_controller *mhi_cntrl);
* Resume the device irrespective of its MHI state. As per the MHI spec, devices
* has to be in M3 state during resume. But some devices seem to be in a
* different MHI state other than M3 but they continue working fine if allowed.
- * This API is intented to be used for such devices.
+ * This API is intended to be used for such devices.
*
* Return: 0 if the resume succeeds, a negative error code otherwise
*/