diff --git a/src/device/pci_ops.c b/src/device/pci_ops.c index aaa9f95fb1..76d5e96aec 100644 --- a/src/device/pci_ops.c +++ b/src/device/pci_ops.c @@ -79,19 +79,16 @@ void __noreturn pcidev_die(void) die("PCI: dev is NULL!\n"); } -bool pci_dev_is_wake_source(const struct device *dev) +bool pci_dev_is_wake_source(pci_devfn_t dev) { unsigned int pm_cap; uint16_t pmcs; - if (dev->path.type != DEVICE_PATH_PCI) - return false; - - pm_cap = pci_find_capability(dev, PCI_CAP_ID_PM); + pm_cap = pci_s_find_capability(dev, PCI_CAP_ID_PM); if (!pm_cap) return false; - pmcs = pci_s_read_config16(PCI_BDF(dev), pm_cap + PCI_PM_CTRL); + pmcs = pci_s_read_config16(dev, pm_cap + PCI_PM_CTRL); /* PCI Device is a wake source if PME_ENABLE and PME_STATUS are set in PMCS register. */ return (pmcs & PCI_PM_CTRL_PME_ENABLE) && (pmcs & PCI_PM_CTRL_PME_STATUS); diff --git a/src/drivers/wifi/generic/generic.c b/src/drivers/wifi/generic/generic.c index 5429f6ba45..1ee7ab23ee 100644 --- a/src/drivers/wifi/generic/generic.c +++ b/src/drivers/wifi/generic/generic.c @@ -10,7 +10,7 @@ static void wifi_pci_dev_init(struct device *dev) { - if (pci_dev_is_wake_source(dev)) + if (pci_dev_is_wake_source(PCI_BDF(dev))) elog_add_event_wake(ELOG_WAKE_SOURCE_PME_WIFI, 0); } diff --git a/src/include/device/pci_ops.h b/src/include/device/pci_ops.h index 7fe7d429e2..a1678255c4 100644 --- a/src/include/device/pci_ops.h +++ b/src/include/device/pci_ops.h @@ -215,6 +215,6 @@ u16 pci_find_capability(const struct device *dev, u16 cap) * * Returns true if PCI device is wake source, false otherwise. */ -bool pci_dev_is_wake_source(const struct device *dev); +bool pci_dev_is_wake_source(pci_devfn_t dev); #endif /* PCI_OPS_H */ diff --git a/src/soc/intel/alderlake/elog.c b/src/soc/intel/alderlake/elog.c index 1efba25eed..84765d9b58 100644 --- a/src/soc/intel/alderlake/elog.c +++ b/src/soc/intel/alderlake/elog.c @@ -48,11 +48,8 @@ static void pch_log_rp_wake_source(void) }; for (i = 0; i < MIN(CONFIG_MAX_ROOT_PORTS, ARRAY_SIZE(pme_map)); ++i) { - const struct device *dev = pcidev_path_on_root(pme_map[i].devfn); - if (!dev) - continue; - - if (pci_dev_is_wake_source(dev)) + if (pci_dev_is_wake_source(PCI_DEV(0, PCI_SLOT(pme_map[i].devfn), + PCI_FUNC(pme_map[i].devfn)))) elog_add_event_wake(pme_map[i].wake_source, 0); } } @@ -77,11 +74,8 @@ static void pch_log_pme_internal_wake_source(void) size_t i; for (i = 0; i < ARRAY_SIZE(ipme_map); i++) { - const struct device *dev = pcidev_path_on_root(ipme_map[i].devfn); - if (!dev) - continue; - - if (pci_dev_is_wake_source(dev)) { + unsigned int devfn = ipme_map[i].devfn; + if (pci_dev_is_wake_source(PCI_DEV(0, PCI_SLOT(devfn), PCI_FUNC(devfn)))) { elog_add_event_wake(ipme_map[i].wake_source, 0); dev_found = true; } @@ -89,11 +83,8 @@ static void pch_log_pme_internal_wake_source(void) /* Check Thunderbolt ports */ for (i = 0; i < NUM_TBT_FUNCTIONS; i++) { - const struct device *dev = pcidev_path_on_root(SA_DEVFN_TBT(i)); - if (!dev) - continue; - - if (pci_dev_is_wake_source(dev)) { + unsigned int devfn = SA_DEVFN_TBT(i); + if (pci_dev_is_wake_source(PCI_DEV(0, PCI_SLOT(devfn), PCI_FUNC(devfn)))) { elog_add_event_wake(ELOG_WAKE_SOURCE_PME_TBT, i); dev_found = true; } @@ -101,11 +92,8 @@ static void pch_log_pme_internal_wake_source(void) /* Check DMA devices */ for (i = 0; i < NUM_TCSS_DMA_FUNCTIONS; i++) { - const struct device *dev = pcidev_path_on_root(SA_DEVFN_TCSS_DMA(i)); - if (!dev) - continue; - - if (pci_dev_is_wake_source(dev)) { + unsigned int devfn = SA_DEVFN_TCSS_DMA(i); + if (pci_dev_is_wake_source(PCI_DEV(0, PCI_SLOT(devfn), PCI_FUNC(devfn)))) { elog_add_event_wake(ELOG_WAKE_SOURCE_PME_TCSS_DMA, i); dev_found = true; } diff --git a/src/soc/intel/jasperlake/elog.c b/src/soc/intel/jasperlake/elog.c index ccf6fd048b..858b3714d4 100644 --- a/src/soc/intel/jasperlake/elog.c +++ b/src/soc/intel/jasperlake/elog.c @@ -48,11 +48,8 @@ static void pch_log_rp_wake_source(void) }; for (i = 0; i < MIN(CONFIG_MAX_ROOT_PORTS, ARRAY_SIZE(pme_map)); ++i) { - const struct device *dev = pcidev_path_on_root(pme_map[i].devfn); - if (!dev) - continue; - - if (pci_dev_is_wake_source(dev)) + if (pci_dev_is_wake_source(PCI_DEV(0, PCI_SLOT(pme_map[i].devfn), + PCI_FUNC(pme_map[i].devfn)))) elog_add_event_wake(pme_map[i].wake_source, 0); } } @@ -75,11 +72,8 @@ static void pch_log_pme_internal_wake_source(void) }; for (i = 0; i < ARRAY_SIZE(ipme_map); i++) { - const struct device *dev = pcidev_path_on_root(ipme_map[i].devfn); - if (!dev) - continue; - - if (pci_dev_is_wake_source(dev)) { + if (pci_dev_is_wake_source(PCI_DEV(0, PCI_SLOT(ipme_map[i].devfn), + PCI_FUNC(ipme_map[i].devfn)))) { elog_add_event_wake(ipme_map[i].wake_source, 0); dev_found = true; } diff --git a/src/soc/intel/tigerlake/elog.c b/src/soc/intel/tigerlake/elog.c index 878959a9b5..0fccf84d5c 100644 --- a/src/soc/intel/tigerlake/elog.c +++ b/src/soc/intel/tigerlake/elog.c @@ -48,11 +48,8 @@ static void pch_log_rp_wake_source(void) }; for (i = 0; i < MIN(CONFIG_MAX_ROOT_PORTS, ARRAY_SIZE(pme_map)); ++i) { - const struct device *dev = pcidev_path_on_root(pme_map[i].devfn); - if (!dev) - continue; - - if (pci_dev_is_wake_source(dev)) + if (pci_dev_is_wake_source(PCI_DEV(0, PCI_SLOT(pme_map[i].devfn), + PCI_FUNC(pme_map[i].devfn)))) elog_add_event_wake(pme_map[i].wake_source, 0); } } @@ -76,12 +73,8 @@ static void pch_log_pme_internal_wake_source(void) size_t i; for (i = 0; i < ARRAY_SIZE(ipme_map); i++) { - const struct device *dev = - pcidev_path_on_root(ipme_map[i].devfn); - if (!dev) - continue; - - if (pci_dev_is_wake_source(dev)) { + if (pci_dev_is_wake_source(PCI_DEV(0, PCI_SLOT(ipme_map[i].devfn), + PCI_FUNC(ipme_map[i].devfn)))) { elog_add_event_wake(ipme_map[i].wake_source, 0); dev_found = true; } @@ -89,11 +82,8 @@ static void pch_log_pme_internal_wake_source(void) /* Check Thunderbolt ports */ for (i = 0; i < NUM_TBT_FUNCTIONS; i++) { - const struct device *dev = pcidev_path_on_root(SA_DEVFN_TBT(i)); - if (!dev) - continue; - - if (pci_dev_is_wake_source(dev)) { + const unsigned int devfn = SA_DEVFN_TBT(i); + if (pci_dev_is_wake_source(PCI_DEV(0, PCI_SLOT(devfn), PCI_FUNC(devfn)))) { elog_add_event_wake(ELOG_WAKE_SOURCE_PME_TBT, i); dev_found = true; } @@ -101,11 +91,8 @@ static void pch_log_pme_internal_wake_source(void) /* Check DMA devices */ for (i = 0; i < NUM_TCSS_DMA_FUNCTIONS; i++) { - const struct device *dev = pcidev_path_on_root(SA_DEVFN_TCSS_DMA(i)); - if (!dev) - continue; - - if (pci_dev_is_wake_source(dev)) { + const unsigned int devfn = SA_DEVFN_TCSS_DMA(i); + if (pci_dev_is_wake_source(PCI_DEV(0, PCI_SLOT(devfn), PCI_FUNC(devfn)))) { elog_add_event_wake(ELOG_WAKE_SOURCE_PME_TCSS_DMA, i); dev_found = true; }