Skip to content

Commit e7a7186

Browse files
ahunter6alexandrebelloni
authored andcommitted
i3c: mipi-i3c-hci-pci: Enable IBI while runtime suspended for Intel controllers
Intel LPSS I3C controllers can wake from runtime suspend to receive in-band interrupts (IBIs), and they also implement the MIPI I3C HCI Multi-Bus Instance capability. When multiple I3C bus instances share the same PCI wakeup, the PCI parent must coordinate runtime PM so that all instances suspend together and their mipi-i3c-hci runtime suspend callbacks are invoked in a consistent manner. Enable IBI-based wakeup by setting HCI_QUIRK_RPM_IBI_ALLOWED for the intel-lpss-i3c platform device. Also set HCI_QUIRK_RPM_PARENT_MANAGED so that the mipi-i3c-hci core driver expects runtime PM to be controlled by the PCI parent rather than by individual instances. For all Intel HCI PCI configurations, enable the corresponding control_instance_pm flag in the PCI driver. Signed-off-by: Adrian Hunter <adrian.hunter@intel.com> Reviewed-by: Frank Li <Frank.Li@nxp.com> Link: https://patch.msgid.link/20260306085338.62955-6-adrian.hunter@intel.com Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
1 parent e813e7e commit e7a7186

2 files changed

Lines changed: 6 additions & 1 deletion

File tree

drivers/i3c/master/mipi-i3c-hci/core.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1042,7 +1042,9 @@ static const struct acpi_device_id i3c_hci_acpi_match[] = {
10421042
MODULE_DEVICE_TABLE(acpi, i3c_hci_acpi_match);
10431043

10441044
static const struct platform_device_id i3c_hci_driver_ids[] = {
1045-
{ .name = "intel-lpss-i3c", HCI_QUIRK_RPM_ALLOWED },
1045+
{ .name = "intel-lpss-i3c", HCI_QUIRK_RPM_ALLOWED |
1046+
HCI_QUIRK_RPM_IBI_ALLOWED |
1047+
HCI_QUIRK_RPM_PARENT_MANAGED },
10461048
{ /* sentinel */ }
10471049
};
10481050
MODULE_DEVICE_TABLE(platform, i3c_hci_driver_ids);

drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,7 @@ static const struct mipi_i3c_hci_pci_info intel_mi_1_info = {
200200
.id = {0, 1},
201201
.instance_offset = {0, 0x400},
202202
.instance_count = 2,
203+
.control_instance_pm = true,
203204
};
204205

205206
static const struct mipi_i3c_hci_pci_info intel_mi_2_info = {
@@ -209,6 +210,7 @@ static const struct mipi_i3c_hci_pci_info intel_mi_2_info = {
209210
.id = {2, 3},
210211
.instance_offset = {0, 0x400},
211212
.instance_count = 2,
213+
.control_instance_pm = true,
212214
};
213215

214216
static const struct mipi_i3c_hci_pci_info intel_si_2_info = {
@@ -218,6 +220,7 @@ static const struct mipi_i3c_hci_pci_info intel_si_2_info = {
218220
.id = {2},
219221
.instance_offset = {0},
220222
.instance_count = 1,
223+
.control_instance_pm = true,
221224
};
222225

223226
static int mipi_i3c_hci_pci_find_instance(struct mipi_i3c_hci_pci *hci, struct device *dev)

0 commit comments

Comments
 (0)