From: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
As per the 'PCI Bus Power Management Interface Specification' v1.2, all
devices should support D3 states (both D3Hot and D3Cold). So the term
'possible' doesn't make sense for the bridge devices, since D3 states
should be possible as per the design. But due to various circumstances,
D3 states might not be allowed for the bridges.
In those cases, the API should be called 'pci_bridge_d3_allowed()' to
reflect the actual behavior. So let's rename it.
This also warrants renaming the variable 'bridge_d3' in 'struct pci_dev'
to 'bridge_d3_allowed' for the reason cited above.
No functional change.
Reported-by: Bjorn Helgaas <helgaas@kernel.org>
Closes: https://lore.kernel.org/linux-pci/20240305175107.GA539676@bhelgaas/
Tested-by: Hsin-Yi Wang <hsinyi@chromium.org>
Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
---
drivers/pci/pci-acpi.c | 8 ++++----
drivers/pci/pci.c | 18 +++++++++---------
drivers/pci/pci.h | 4 ++--
drivers/pci/pcie/portdrv.c | 14 +++++++-------
include/linux/pci.h | 2 +-
5 files changed, 23 insertions(+), 23 deletions(-)
diff --git a/drivers/pci/pci-acpi.c b/drivers/pci/pci-acpi.c
index 004575091596..0f260cdc4592 100644
--- a/drivers/pci/pci-acpi.c
+++ b/drivers/pci/pci-acpi.c
@@ -1429,12 +1429,12 @@ void pci_acpi_setup(struct device *dev, struct acpi_device *adev)
device_set_wakeup_capable(dev, true);
/*
- * For bridges that can do D3 we enable wake automatically (as
- * we do for the power management itself in that case). The
+ * For bridges that are allowed to do D3, we enable wake automatically
+ * (as we do for the power management itself in that case). The
* reason is that the bridge may have additional methods such as
* _DSW that need to be called.
*/
- if (pci_dev->bridge_d3)
+ if (pci_dev->bridge_d3_allowed)
device_wakeup_enable(dev);
acpi_pci_wakeup(pci_dev, false);
@@ -1452,7 +1452,7 @@ void pci_acpi_cleanup(struct device *dev, struct acpi_device *adev)
pci_acpi_remove_pm_notifier(adev);
if (adev->wakeup.flags.valid) {
acpi_device_power_remove_dependent(adev, dev);
- if (pci_dev->bridge_d3)
+ if (pci_dev->bridge_d3_allowed)
device_wakeup_disable(dev);
device_set_wakeup_capable(dev, false);
diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
index e5f243dd4288..0edc4e448c2d 100644
--- a/drivers/pci/pci.c
+++ b/drivers/pci/pci.c
@@ -2967,13 +2967,13 @@ static const struct dmi_system_id bridge_d3_blacklist[] = {
};
/**
- * pci_bridge_d3_possible - Is it possible to put the bridge into D3
+ * pci_bridge_d3_allowed - Is it allowed to put the bridge into D3
* @bridge: Bridge to check
*
- * This function checks if it is possible to move the bridge to D3.
+ * This function checks if the bridge is allowed to move to D3.
* Currently we only allow D3 for recent enough PCIe ports and Thunderbolt.
*/
-bool pci_bridge_d3_possible(struct pci_dev *bridge)
+bool pci_bridge_d3_allowed(struct pci_dev *bridge)
{
if (!pci_is_pcie(bridge))
return false;
@@ -3060,14 +3060,14 @@ void pci_bridge_d3_update(struct pci_dev *dev)
bool d3cold_ok = true;
bridge = pci_upstream_bridge(dev);
- if (!bridge || !pci_bridge_d3_possible(bridge))
+ if (!bridge || !pci_bridge_d3_allowed(bridge))
return;
/*
* If D3 is currently allowed for the bridge, removing one of its
* children won't change that.
*/
- if (remove && bridge->bridge_d3)
+ if (remove && bridge->bridge_d3_allowed)
return;
/*
@@ -3087,12 +3087,12 @@ void pci_bridge_d3_update(struct pci_dev *dev)
* so we need to go through all children to find out if one of them
* continues to block D3.
*/
- if (d3cold_ok && !bridge->bridge_d3)
+ if (d3cold_ok && !bridge->bridge_d3_allowed)
pci_walk_bus(bridge->subordinate, pci_dev_check_d3cold,
&d3cold_ok);
- if (bridge->bridge_d3 != d3cold_ok) {
- bridge->bridge_d3 = d3cold_ok;
+ if (bridge->bridge_d3_allowed != d3cold_ok) {
+ bridge->bridge_d3_allowed = d3cold_ok;
/* Propagate change to upstream bridges */
pci_bridge_d3_update(bridge);
}
@@ -3167,7 +3167,7 @@ void pci_pm_init(struct pci_dev *dev)
dev->pm_cap = pm;
dev->d3hot_delay = PCI_PM_D3HOT_WAIT;
dev->d3cold_delay = PCI_PM_D3COLD_WAIT;
- dev->bridge_d3 = pci_bridge_d3_possible(dev);
+ dev->bridge_d3_allowed = pci_bridge_d3_allowed(dev);
dev->d3cold_allowed = true;
dev->d1_support = false;
diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h
index 17fed1846847..53ca75639201 100644
--- a/drivers/pci/pci.h
+++ b/drivers/pci/pci.h
@@ -92,7 +92,7 @@ void pci_pm_init(struct pci_dev *dev);
void pci_ea_init(struct pci_dev *dev);
void pci_msi_init(struct pci_dev *dev);
void pci_msix_init(struct pci_dev *dev);
-bool pci_bridge_d3_possible(struct pci_dev *dev);
+bool pci_bridge_d3_allowed(struct pci_dev *dev);
void pci_bridge_d3_update(struct pci_dev *dev);
int pci_bridge_wait_for_secondary_bus(struct pci_dev *dev, char *reset_type);
@@ -113,7 +113,7 @@ static inline bool pci_power_manageable(struct pci_dev *pci_dev)
* Currently we allow normal PCI devices and PCI bridges transition
* into D3 if their bridge_d3 is set.
*/
- return !pci_has_subordinate(pci_dev) || pci_dev->bridge_d3;
+ return !pci_has_subordinate(pci_dev) || pci_dev->bridge_d3_allowed;
}
static inline bool pcie_downstream_port(const struct pci_dev *dev)
diff --git a/drivers/pci/pcie/portdrv.c b/drivers/pci/pcie/portdrv.c
index 1f02e5d7b2e9..8401a0f7b394 100644
--- a/drivers/pci/pcie/portdrv.c
+++ b/drivers/pci/pcie/portdrv.c
@@ -632,7 +632,7 @@ __setup("pcie_ports=", pcie_port_setup);
#ifdef CONFIG_PM
static int pcie_port_runtime_suspend(struct device *dev)
{
- if (!to_pci_dev(dev)->bridge_d3)
+ if (!to_pci_dev(dev)->bridge_d3_allowed)
return -EBUSY;
return pcie_port_device_runtime_suspend(dev);
@@ -641,11 +641,11 @@ static int pcie_port_runtime_suspend(struct device *dev)
static int pcie_port_runtime_idle(struct device *dev)
{
/*
- * Assume the PCI core has set bridge_d3 whenever it thinks the port
- * should be good to go to D3. Everything else, including moving
+ * Assume the PCI core has set bridge_d3_allowed whenever it thinks the
+ * port should be good to go to D3. Everything else, including moving
* the port to D3, is handled by the PCI core.
*/
- return to_pci_dev(dev)->bridge_d3 ? 0 : -EBUSY;
+ return to_pci_dev(dev)->bridge_d3_allowed ? 0 : -EBUSY;
}
static const struct dev_pm_ops pcie_portdrv_pm_ops = {
@@ -702,7 +702,7 @@ static int pcie_portdrv_probe(struct pci_dev *dev,
dev_pm_set_driver_flags(&dev->dev, DPM_FLAG_NO_DIRECT_COMPLETE |
DPM_FLAG_SMART_SUSPEND);
- if (dev->bridge_d3) {
+ if (dev->bridge_d3_allowed) {
/*
* Keep the port resumed 100ms to make sure things like
* config space accesses from userspace (lspci) will not
@@ -720,7 +720,7 @@ static int pcie_portdrv_probe(struct pci_dev *dev,
static void pcie_portdrv_remove(struct pci_dev *dev)
{
- if (dev->bridge_d3) {
+ if (dev->bridge_d3_allowed) {
pm_runtime_forbid(&dev->dev);
pm_runtime_get_noresume(&dev->dev);
pm_runtime_dont_use_autosuspend(&dev->dev);
@@ -733,7 +733,7 @@ static void pcie_portdrv_remove(struct pci_dev *dev)
static void pcie_portdrv_shutdown(struct pci_dev *dev)
{
- if (dev->bridge_d3) {
+ if (dev->bridge_d3_allowed) {
pm_runtime_forbid(&dev->dev);
pm_runtime_get_noresume(&dev->dev);
pm_runtime_dont_use_autosuspend(&dev->dev);
diff --git a/include/linux/pci.h b/include/linux/pci.h
index 16493426a04f..2a48c88512e1 100644
--- a/include/linux/pci.h
+++ b/include/linux/pci.h
@@ -375,7 +375,7 @@ struct pci_dev {
unsigned int d2_support:1; /* Low power state D2 is supported */
unsigned int no_d1d2:1; /* D1 and D2 are forbidden */
unsigned int no_d3cold:1; /* D3cold is forbidden */
- unsigned int bridge_d3:1; /* Allow D3 for bridge */
+ unsigned int bridge_d3_allowed:1; /* Allow D3 for bridge */
unsigned int d3cold_allowed:1; /* D3cold is allowed by user */
unsigned int mmio_always_on:1; /* Disallow turning off io/mem
decoding during BAR sizing */
--
2.25.1
Hi Manivannan,
kernel test robot noticed the following build errors:
[auto build test ERROR on 705c1da8fa4816fb0159b5602fef1df5946a3ee2]
url: https://github.com/intel-lab-lkp/linux/commits/Manivannan-Sadhasivam-via-B4-Relay/PCI-portdrv-Make-use-of-pci_dev-bridge_d3-for-checking-the-D3-possibility/20240803-074434
base: 705c1da8fa4816fb0159b5602fef1df5946a3ee2
patch link: https://lore.kernel.org/r/20240802-pci-bridge-d3-v5-2-2426dd9e8e27%40linaro.org
patch subject: [PATCH v5 2/4] PCI: Rename pci_bridge_d3_possible() to pci_bridge_d3_allowed()
config: i386-allyesconfig (https://download.01.org/0day-ci/archive/20240803/202408031855.TEPJlfzl-lkp@intel.com/config)
compiler: gcc-12 (Debian 12.2.0-14) 12.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240803/202408031855.TEPJlfzl-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202408031855.TEPJlfzl-lkp@intel.com/
All errors (new ones prefixed by >>):
drivers/gpu/drm/radeon/radeon_atpx_handler.c: In function 'radeon_atpx_detect':
>> drivers/gpu/drm/radeon/radeon_atpx_handler.c:568:59: error: 'struct pci_dev' has no member named 'bridge_d3'
568 | d3_supported |= parent_pdev && parent_pdev->bridge_d3;
| ^~
drivers/gpu/drm/radeon/radeon_atpx_handler.c:578:59: error: 'struct pci_dev' has no member named 'bridge_d3'
578 | d3_supported |= parent_pdev && parent_pdev->bridge_d3;
| ^~
--
drivers/gpu/drm/amd/amdgpu/amdgpu_atpx_handler.c: In function 'amdgpu_atpx_detect':
>> drivers/gpu/drm/amd/amdgpu/amdgpu_atpx_handler.c:628:59: error: 'struct pci_dev' has no member named 'bridge_d3'
628 | d3_supported |= parent_pdev && parent_pdev->bridge_d3;
| ^~
drivers/gpu/drm/amd/amdgpu/amdgpu_atpx_handler.c:638:59: error: 'struct pci_dev' has no member named 'bridge_d3'
638 | d3_supported |= parent_pdev && parent_pdev->bridge_d3;
| ^~
--
drivers/gpu/drm/nouveau/nouveau_acpi.c: In function 'nouveau_dsm_pci_probe':
>> drivers/gpu/drm/nouveau/nouveau_acpi.c:229:32: error: 'struct pci_dev' has no member named 'bridge_d3'
229 | if (parent_pdev->bridge_d3)
| ^~
vim +568 drivers/gpu/drm/radeon/radeon_atpx_handler.c
6a9ee8af344e3b Dave Airlie 2010-02-01 545
82e029357d4726 Alex Deucher 2012-08-16 546 /**
82e029357d4726 Alex Deucher 2012-08-16 547 * radeon_atpx_detect - detect whether we have PX
82e029357d4726 Alex Deucher 2012-08-16 548 *
82e029357d4726 Alex Deucher 2012-08-16 549 * Check if we have a PX system (all asics).
82e029357d4726 Alex Deucher 2012-08-16 550 * Returns true if we have a PX system, false if not.
82e029357d4726 Alex Deucher 2012-08-16 551 */
6a9ee8af344e3b Dave Airlie 2010-02-01 552 static bool radeon_atpx_detect(void)
6a9ee8af344e3b Dave Airlie 2010-02-01 553 {
6a9ee8af344e3b Dave Airlie 2010-02-01 554 char acpi_method_name[255] = { 0 };
6a9ee8af344e3b Dave Airlie 2010-02-01 555 struct acpi_buffer buffer = {sizeof(acpi_method_name), acpi_method_name};
6a9ee8af344e3b Dave Airlie 2010-02-01 556 struct pci_dev *pdev = NULL;
6a9ee8af344e3b Dave Airlie 2010-02-01 557 bool has_atpx = false;
6a9ee8af344e3b Dave Airlie 2010-02-01 558 int vga_count = 0;
bcfdd5d5105087 Alex Deucher 2016-11-28 559 bool d3_supported = false;
bcfdd5d5105087 Alex Deucher 2016-11-28 560 struct pci_dev *parent_pdev;
6a9ee8af344e3b Dave Airlie 2010-02-01 561
6a9ee8af344e3b Dave Airlie 2010-02-01 562 while ((pdev = pci_get_class(PCI_CLASS_DISPLAY_VGA << 8, pdev)) != NULL) {
6a9ee8af344e3b Dave Airlie 2010-02-01 563 vga_count++;
6a9ee8af344e3b Dave Airlie 2010-02-01 564
6a9ee8af344e3b Dave Airlie 2010-02-01 565 has_atpx |= (radeon_atpx_pci_probe_handle(pdev) == true);
bcfdd5d5105087 Alex Deucher 2016-11-28 566
bcfdd5d5105087 Alex Deucher 2016-11-28 567 parent_pdev = pci_upstream_bridge(pdev);
bcfdd5d5105087 Alex Deucher 2016-11-28 @568 d3_supported |= parent_pdev && parent_pdev->bridge_d3;
6a9ee8af344e3b Dave Airlie 2010-02-01 569 }
6a9ee8af344e3b Dave Airlie 2010-02-01 570
e9a4099a59cc59 Alex Deucher 2014-04-15 571 /* some newer PX laptops mark the dGPU as a non-VGA display device */
e9a4099a59cc59 Alex Deucher 2014-04-15 572 while ((pdev = pci_get_class(PCI_CLASS_DISPLAY_OTHER << 8, pdev)) != NULL) {
e9a4099a59cc59 Alex Deucher 2014-04-15 573 vga_count++;
e9a4099a59cc59 Alex Deucher 2014-04-15 574
e9a4099a59cc59 Alex Deucher 2014-04-15 575 has_atpx |= (radeon_atpx_pci_probe_handle(pdev) == true);
bcfdd5d5105087 Alex Deucher 2016-11-28 576
bcfdd5d5105087 Alex Deucher 2016-11-28 577 parent_pdev = pci_upstream_bridge(pdev);
bcfdd5d5105087 Alex Deucher 2016-11-28 578 d3_supported |= parent_pdev && parent_pdev->bridge_d3;
e9a4099a59cc59 Alex Deucher 2014-04-15 579 }
e9a4099a59cc59 Alex Deucher 2014-04-15 580
6a9ee8af344e3b Dave Airlie 2010-02-01 581 if (has_atpx && vga_count == 2) {
492b49a2f21a7c Alex Deucher 2012-08-16 582 acpi_get_name(radeon_atpx_priv.atpx.handle, ACPI_FULL_PATHNAME, &buffer);
7ca85295d8cc28 Joe Perches 2017-02-28 583 pr_info("vga_switcheroo: detected switching method %s handle\n",
6a9ee8af344e3b Dave Airlie 2010-02-01 584 acpi_method_name);
6a9ee8af344e3b Dave Airlie 2010-02-01 585 radeon_atpx_priv.atpx_detected = true;
bcfdd5d5105087 Alex Deucher 2016-11-28 586 radeon_atpx_priv.bridge_pm_usable = d3_supported;
69ee9742f945cd Alex Deucher 2016-07-27 587 radeon_atpx_init();
6a9ee8af344e3b Dave Airlie 2010-02-01 588 return true;
6a9ee8af344e3b Dave Airlie 2010-02-01 589 }
6a9ee8af344e3b Dave Airlie 2010-02-01 590 return false;
6a9ee8af344e3b Dave Airlie 2010-02-01 591 }
6a9ee8af344e3b Dave Airlie 2010-02-01 592
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
On Sat, Aug 03, 2024 at 07:03:56PM +0800, kernel test robot wrote:
> Hi Manivannan,
>
> kernel test robot noticed the following build errors:
>
> [auto build test ERROR on 705c1da8fa4816fb0159b5602fef1df5946a3ee2]
>
> url: https://github.com/intel-lab-lkp/linux/commits/Manivannan-Sadhasivam-via-B4-Relay/PCI-portdrv-Make-use-of-pci_dev-bridge_d3-for-checking-the-D3-possibility/20240803-074434
> base: 705c1da8fa4816fb0159b5602fef1df5946a3ee2
> patch link: https://lore.kernel.org/r/20240802-pci-bridge-d3-v5-2-2426dd9e8e27%40linaro.org
> patch subject: [PATCH v5 2/4] PCI: Rename pci_bridge_d3_possible() to pci_bridge_d3_allowed()
> config: i386-allyesconfig (https://download.01.org/0day-ci/archive/20240803/202408031855.TEPJlfzl-lkp@intel.com/config)
> compiler: gcc-12 (Debian 12.2.0-14) 12.2.0
> reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240803/202408031855.TEPJlfzl-lkp@intel.com/reproduce)
>
> If you fix the issue in a separate patch/commit (i.e. not just a new version of
> the same patch/commit), kindly add following tags
> | Reported-by: kernel test robot <lkp@intel.com>
> | Closes: https://lore.kernel.org/oe-kbuild-all/202408031855.TEPJlfzl-lkp@intel.com/
>
> All errors (new ones prefixed by >>):
>
> drivers/gpu/drm/radeon/radeon_atpx_handler.c: In function 'radeon_atpx_detect':
> >> drivers/gpu/drm/radeon/radeon_atpx_handler.c:568:59: error: 'struct pci_dev' has no member named 'bridge_d3'
> 568 | d3_supported |= parent_pdev && parent_pdev->bridge_d3;
> | ^~
> drivers/gpu/drm/radeon/radeon_atpx_handler.c:578:59: error: 'struct pci_dev' has no member named 'bridge_d3'
> 578 | d3_supported |= parent_pdev && parent_pdev->bridge_d3;
> | ^~
> --
> drivers/gpu/drm/amd/amdgpu/amdgpu_atpx_handler.c: In function 'amdgpu_atpx_detect':
> >> drivers/gpu/drm/amd/amdgpu/amdgpu_atpx_handler.c:628:59: error: 'struct pci_dev' has no member named 'bridge_d3'
> 628 | d3_supported |= parent_pdev && parent_pdev->bridge_d3;
> | ^~
> drivers/gpu/drm/amd/amdgpu/amdgpu_atpx_handler.c:638:59: error: 'struct pci_dev' has no member named 'bridge_d3'
> 638 | d3_supported |= parent_pdev && parent_pdev->bridge_d3;
> | ^~
> --
> drivers/gpu/drm/nouveau/nouveau_acpi.c: In function 'nouveau_dsm_pci_probe':
> >> drivers/gpu/drm/nouveau/nouveau_acpi.c:229:32: error: 'struct pci_dev' has no member named 'bridge_d3'
> 229 | if (parent_pdev->bridge_d3)
> | ^~
Ok, there seems to be a couple of drivers making use of pci_dev::bridge_d3 to
check if D3Cold is supported or not. And this further strengthens the fact that
PCI core should not rely on pci_bridge_d3_possible() as proposed in patch 1.
- Mani
>
>
> vim +568 drivers/gpu/drm/radeon/radeon_atpx_handler.c
>
> 6a9ee8af344e3b Dave Airlie 2010-02-01 545
> 82e029357d4726 Alex Deucher 2012-08-16 546 /**
> 82e029357d4726 Alex Deucher 2012-08-16 547 * radeon_atpx_detect - detect whether we have PX
> 82e029357d4726 Alex Deucher 2012-08-16 548 *
> 82e029357d4726 Alex Deucher 2012-08-16 549 * Check if we have a PX system (all asics).
> 82e029357d4726 Alex Deucher 2012-08-16 550 * Returns true if we have a PX system, false if not.
> 82e029357d4726 Alex Deucher 2012-08-16 551 */
> 6a9ee8af344e3b Dave Airlie 2010-02-01 552 static bool radeon_atpx_detect(void)
> 6a9ee8af344e3b Dave Airlie 2010-02-01 553 {
> 6a9ee8af344e3b Dave Airlie 2010-02-01 554 char acpi_method_name[255] = { 0 };
> 6a9ee8af344e3b Dave Airlie 2010-02-01 555 struct acpi_buffer buffer = {sizeof(acpi_method_name), acpi_method_name};
> 6a9ee8af344e3b Dave Airlie 2010-02-01 556 struct pci_dev *pdev = NULL;
> 6a9ee8af344e3b Dave Airlie 2010-02-01 557 bool has_atpx = false;
> 6a9ee8af344e3b Dave Airlie 2010-02-01 558 int vga_count = 0;
> bcfdd5d5105087 Alex Deucher 2016-11-28 559 bool d3_supported = false;
> bcfdd5d5105087 Alex Deucher 2016-11-28 560 struct pci_dev *parent_pdev;
> 6a9ee8af344e3b Dave Airlie 2010-02-01 561
> 6a9ee8af344e3b Dave Airlie 2010-02-01 562 while ((pdev = pci_get_class(PCI_CLASS_DISPLAY_VGA << 8, pdev)) != NULL) {
> 6a9ee8af344e3b Dave Airlie 2010-02-01 563 vga_count++;
> 6a9ee8af344e3b Dave Airlie 2010-02-01 564
> 6a9ee8af344e3b Dave Airlie 2010-02-01 565 has_atpx |= (radeon_atpx_pci_probe_handle(pdev) == true);
> bcfdd5d5105087 Alex Deucher 2016-11-28 566
> bcfdd5d5105087 Alex Deucher 2016-11-28 567 parent_pdev = pci_upstream_bridge(pdev);
> bcfdd5d5105087 Alex Deucher 2016-11-28 @568 d3_supported |= parent_pdev && parent_pdev->bridge_d3;
> 6a9ee8af344e3b Dave Airlie 2010-02-01 569 }
> 6a9ee8af344e3b Dave Airlie 2010-02-01 570
> e9a4099a59cc59 Alex Deucher 2014-04-15 571 /* some newer PX laptops mark the dGPU as a non-VGA display device */
> e9a4099a59cc59 Alex Deucher 2014-04-15 572 while ((pdev = pci_get_class(PCI_CLASS_DISPLAY_OTHER << 8, pdev)) != NULL) {
> e9a4099a59cc59 Alex Deucher 2014-04-15 573 vga_count++;
> e9a4099a59cc59 Alex Deucher 2014-04-15 574
> e9a4099a59cc59 Alex Deucher 2014-04-15 575 has_atpx |= (radeon_atpx_pci_probe_handle(pdev) == true);
> bcfdd5d5105087 Alex Deucher 2016-11-28 576
> bcfdd5d5105087 Alex Deucher 2016-11-28 577 parent_pdev = pci_upstream_bridge(pdev);
> bcfdd5d5105087 Alex Deucher 2016-11-28 578 d3_supported |= parent_pdev && parent_pdev->bridge_d3;
> e9a4099a59cc59 Alex Deucher 2014-04-15 579 }
> e9a4099a59cc59 Alex Deucher 2014-04-15 580
> 6a9ee8af344e3b Dave Airlie 2010-02-01 581 if (has_atpx && vga_count == 2) {
> 492b49a2f21a7c Alex Deucher 2012-08-16 582 acpi_get_name(radeon_atpx_priv.atpx.handle, ACPI_FULL_PATHNAME, &buffer);
> 7ca85295d8cc28 Joe Perches 2017-02-28 583 pr_info("vga_switcheroo: detected switching method %s handle\n",
> 6a9ee8af344e3b Dave Airlie 2010-02-01 584 acpi_method_name);
> 6a9ee8af344e3b Dave Airlie 2010-02-01 585 radeon_atpx_priv.atpx_detected = true;
> bcfdd5d5105087 Alex Deucher 2016-11-28 586 radeon_atpx_priv.bridge_pm_usable = d3_supported;
> 69ee9742f945cd Alex Deucher 2016-07-27 587 radeon_atpx_init();
> 6a9ee8af344e3b Dave Airlie 2010-02-01 588 return true;
> 6a9ee8af344e3b Dave Airlie 2010-02-01 589 }
> 6a9ee8af344e3b Dave Airlie 2010-02-01 590 return false;
> 6a9ee8af344e3b Dave Airlie 2010-02-01 591 }
> 6a9ee8af344e3b Dave Airlie 2010-02-01 592
>
> --
> 0-DAY CI Kernel Test Service
> https://github.com/intel/lkp-tests/wiki
--
மணிவண்ணன் சதாசிவம்
© 2016 - 2026 Red Hat, Inc.