summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/device/pci_ops.c9
-rw-r--r--src/drivers/wifi/generic/generic.c2
-rw-r--r--src/include/device/pci_ops.h2
-rw-r--r--src/soc/intel/alderlake/elog.c28
-rw-r--r--src/soc/intel/jasperlake/elog.c14
-rw-r--r--src/soc/intel/tigerlake/elog.c29
6 files changed, 25 insertions, 59 deletions
diff --git a/src/device/pci_ops.c b/src/device/pci_ops.c
index aaa9f95fb1f4..76d5e96aec54 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 5429f6ba4533..1ee7ab23eedc 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 7fe7d429e2fb..a1678255c451 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 1efba25eed0e..84765d9b586d 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 ccf6fd048b75..858b3714d4ed 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 878959a9b582..0fccf84d5c6b 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;
}