Displaying 20 results from an estimated 96 matches for "pci_d0".
2017 Nov 21
2
[PATCH v2] drm: don't continue with anything after the GPU couldn't be woken up
...eau/nouveau_drm.c
+++ b/drm/nouveau/nouveau_drm.c
@@ -792,6 +792,27 @@ nouveau_pmops_suspend(struct device *dev)
return 0;
}
+static int
+nouveau_set_power_state_D0(struct pci_dev *pdev)
+{
+ struct nouveau_drm *drm = nouveau_drm(pci_get_drvdata(pdev));
+ int ret;
+
+ pci_set_power_state(pdev, PCI_D0);
+ /* abort if anything went wrong */
+ if (pdev->current_state != PCI_D0) {
+ NV_ERROR(drm, "couldn't wake up GPU!\n");
+ return -EBUSY;
+ }
+ pci_restore_state(pdev);
+ ret = pci_enable_device(pdev);
+ if (ret)
+ return ret;
+
+ pci_set_master(pdev);
+ return 0;
+}
+
int
no...
2011 Feb 28
12
[RFC PATCH] set current_state to D0 in register_slot
Hi all,
if a device doesn''t support power management (pm_cap == 0) but it is
acpi_pci_power_manageable() because there is a _PS0 method declared for
it and _EJ0 is also declared for the slot then nobody is going to set
current_state = PCI_D0 for this device. This is what I think it is
happening:
pci_enable_device
|
__pci_enable_device_flags
/* here we do not set current_state because !pm_cap */
|
do_pci_enable_device
|
pci_set_power_state
|
__pci_start_power_transition
|
pci_platform_power_transition
/* platform_...
2017 Nov 21
2
[PATCH v2] drm: don't continue with anything after the GPU couldn't be woken up
...ce *dev)
>> return 0;
>> }
>>
>> +static int
>> +nouveau_set_power_state_D0(struct pci_dev *pdev)
>> +{
>> + struct nouveau_drm *drm = nouveau_drm(pci_get_drvdata(pdev));
>> + int ret;
>> +
>> + pci_set_power_state(pdev, PCI_D0);
>> + /* abort if anything went wrong */
>> + if (pdev->current_state != PCI_D0) {
>> + NV_ERROR(drm, "couldn't wake up GPU!\n");
>> + return -EBUSY;
>> + }
>
> Looks to me like the more idiomatic way to do th...
2011 Dec 02
6
[PATCH] tools/firmware: remove "_PS0/3" Method
...ol the device power through its own specification but not through APCI.
Qemu pushes "_PS0/3" to guest will cause a mess between ACPI PM and PCI PM as a result of incorrect ACPI table shipped with the guest BIOS, it may cause a failure of PCI device PM state transition(from PCI_UNKNOWN to PCI_D0).
Signed-off-by: Xudong Hao <xudong.hao@intel.com>
Signed-off-by: Haitao Shan <haitao.shan@intel.com>
diff -r df7cec2c6c03 tools/firmware/hvmloader/acpi/mk_dsdt.c
--- a/tools/firmware/hvmloader/acpi/mk_dsdt.c Tue Nov 29 13:30:39 2011 -0500
+++ b/tools/firmware/hvmloader/acpi/mk_dsdt.c...
2017 Nov 21
0
[PATCH v2] drm: don't continue with anything after the GPU couldn't be woken up
...@@ -792,6 +792,27 @@ nouveau_pmops_suspend(struct device *dev)
> return 0;
> }
>
> +static int
> +nouveau_set_power_state_D0(struct pci_dev *pdev)
> +{
> + struct nouveau_drm *drm = nouveau_drm(pci_get_drvdata(pdev));
> + int ret;
> +
> + pci_set_power_state(pdev, PCI_D0);
> + /* abort if anything went wrong */
> + if (pdev->current_state != PCI_D0) {
> + NV_ERROR(drm, "couldn't wake up GPU!\n");
> + return -EBUSY;
> + }
Looks to me like the more idiomatic way to do this is:
ret = pci_set_power_state(pdev, PCI_D0);
if (ret <...
2017 Nov 22
0
[PATCH v2] drm: don't continue with anything after the GPU couldn't be woken up
...t; }
> >>
> >> +static int
> >> +nouveau_set_power_state_D0(struct pci_dev *pdev)
> >> +{
> >> + struct nouveau_drm *drm = nouveau_drm(pci_get_drvdata(pdev));
> >> + int ret;
> >> +
> >> + pci_set_power_state(pdev, PCI_D0);
> >> + /* abort if anything went wrong */
> >> + if (pdev->current_state != PCI_D0) {
> >> + NV_ERROR(drm, "couldn't wake up GPU!\n");
> >> + return -EBUSY;
> >> + }
> >
> > Looks to me l...
2019 May 07
2
[PATCH 1/5] drm: don't set the pci power state if the pci subsystem handles the ACPI bits
...drm = nouveau_drm(drm_dev);
> + struct nvif_device *device = &drm->client.device;
> int ret;
>
> if (!nouveau_pmops_runtime()) {
> @@ -933,7 +938,9 @@ nouveau_pmops_runtime_resume(struct device *dev)
> return -EBUSY;
> }
>
> - pci_set_power_state(pdev, PCI_D0);
> + drm_dev->switch_power_state = DRM_SWITCH_POWER_CHANGING;
> + if (drm->runpm_dsm)
> + pci_set_power_state(pdev, PCI_D0);
> pci_restore_state(pdev);
> ret = pci_enable_device(pdev);
> if (ret)
> diff --git a/drm/nouveau/nouveau_drv.h b/drm/nouveau/nouveau_drv.h...
2019 Sep 27
2
[RFC PATCH] pci: prevent putting pcie devices into lower device states on certain intel bridges
...roken intel bridge\n");
+ return true;
+ }
+ }
+
+ return false;
+}
+
/**
* pci_raw_set_power_state - Use PCI PM registers to set the power state of
* given PCI device
@@ -827,6 +863,9 @@ static int pci_raw_set_power_state(struct pci_dev *dev, pci_power_t state)
if (state < PCI_D0 || state > PCI_D3hot)
return -EINVAL;
+ if (state != PCI_D0 && intel_broken_pci_pm(dev->bus))
+ return 0;
+
/*
* Validate current state:
* Can enter D0 from any state, but if we can only go deeper
--
2.21.0
2014 Aug 20
1
[RFC PATCH 09/11] PCI/MSI: refactor PCI MSI driver
...e_msi_irq(dev, entry->irq);
> + list_for_each_entry(entry, &msi->msi_list, list) {
> + default_restore_msi_irq(msi, entry->irq);
> }
> }
>
> void __read_msi_msg(struct msi_desc *entry, struct msi_msg *msg)
> {
> - BUG_ON(entry->dev->current_state != PCI_D0);
> + struct pci_dev *dev = entry->msi->data;
> +
> + BUG_ON(dev->current_state != PCI_D0);
>
> if (entry->msi_attrib.is_msix) {
> void __iomem *base = entry->mask_base +
> @@ -271,7 +294,6 @@ void __read_msi_msg(struct msi_desc *entry, struct msi_msg
>...
2014 Aug 20
1
[RFC PATCH 09/11] PCI/MSI: refactor PCI MSI driver
...e_msi_irq(dev, entry->irq);
> + list_for_each_entry(entry, &msi->msi_list, list) {
> + default_restore_msi_irq(msi, entry->irq);
> }
> }
>
> void __read_msi_msg(struct msi_desc *entry, struct msi_msg *msg)
> {
> - BUG_ON(entry->dev->current_state != PCI_D0);
> + struct pci_dev *dev = entry->msi->data;
> +
> + BUG_ON(dev->current_state != PCI_D0);
>
> if (entry->msi_attrib.is_msix) {
> void __iomem *base = entry->mask_base +
> @@ -271,7 +294,6 @@ void __read_msi_msg(struct msi_desc *entry, struct msi_msg
>...
2014 Jul 26
0
[RFC PATCH 09/11] PCI/MSI: refactor PCI MSI driver
...>msi_list, list) {
- default_restore_msi_irq(dev, entry->irq);
+ list_for_each_entry(entry, &msi->msi_list, list) {
+ default_restore_msi_irq(msi, entry->irq);
}
}
void __read_msi_msg(struct msi_desc *entry, struct msi_msg *msg)
{
- BUG_ON(entry->dev->current_state != PCI_D0);
+ struct pci_dev *dev = entry->msi->data;
+
+ BUG_ON(dev->current_state != PCI_D0);
if (entry->msi_attrib.is_msix) {
void __iomem *base = entry->mask_base +
@@ -271,7 +294,6 @@ void __read_msi_msg(struct msi_desc *entry, struct msi_msg *msg)
msg->address_hi = readl(bas...
2017 Nov 16
0
[RFC] drm: don't continue with anything after the GPU couldn't be woken up
...nouveau_drm(drm_dev)->client.device;
+ struct nouveau_drm *drm = nouveau_drm(drm_dev);
+ struct nvif_device *device = &drm->client.device;
int ret;
if (!nouveau_pmops_runtime()) {
@@ -880,6 +881,11 @@ nouveau_pmops_runtime_resume(struct device *dev)
}
pci_set_power_state(pdev, PCI_D0);
+ /* abort if anything went wrong */
+ if (pdev->current_state != PCI_D0) {
+ NV_ERROR(drm, "couldn't wake up GPU!\n");
+ return -EBUSY;
+ }
pci_restore_state(pdev);
ret = pci_enable_device(pdev);
if (ret)
--
2.14.3
2016 Nov 08
2
[PATCH] drm/nouveau: Drop superfluous DRM_SWITCH_POWER_DYNAMIC_OFF checks
...ct drm_device *drm_dev = pci_get_drvdata(pdev);
int ret;
- if (drm_dev->switch_power_state == DRM_SWITCH_POWER_OFF ||
- drm_dev->switch_power_state == DRM_SWITCH_POWER_DYNAMIC_OFF)
+ if (drm_dev->switch_power_state == DRM_SWITCH_POWER_OFF)
return 0;
pci_set_power_state(pdev, PCI_D0);
--
2.10.1
2019 May 04
0
[PATCH 1/5] drm: don't set the pci power state if the pci subsystem handles the ACPI bits
...ev)->client.device;
+ struct nouveau_drm *drm = nouveau_drm(drm_dev);
+ struct nvif_device *device = &drm->client.device;
int ret;
if (!nouveau_pmops_runtime()) {
@@ -933,7 +938,9 @@ nouveau_pmops_runtime_resume(struct device *dev)
return -EBUSY;
}
- pci_set_power_state(pdev, PCI_D0);
+ drm_dev->switch_power_state = DRM_SWITCH_POWER_CHANGING;
+ if (drm->runpm_dsm)
+ pci_set_power_state(pdev, PCI_D0);
pci_restore_state(pdev);
ret = pci_enable_device(pdev);
if (ret)
diff --git a/drm/nouveau/nouveau_drv.h b/drm/nouveau/nouveau_drv.h
index da847244..941600e9 100644
--...
2019 May 07
0
[PATCH v2 1/4] drm: don't set the pci power state if the pci subsystem handles the ACPI bits
...ev)->client.device;
+ struct nouveau_drm *drm = nouveau_drm(drm_dev);
+ struct nvif_device *device = &drm->client.device;
int ret;
if (!nouveau_pmops_runtime()) {
@@ -933,7 +939,9 @@ nouveau_pmops_runtime_resume(struct device *dev)
return -EBUSY;
}
- pci_set_power_state(pdev, PCI_D0);
+ drm_dev->switch_power_state = DRM_SWITCH_POWER_CHANGING;
+ if (drm->runpm_dsm)
+ pci_set_power_state(pdev, PCI_D0);
pci_restore_state(pdev);
ret = pci_enable_device(pdev);
if (ret)
diff --git a/drm/nouveau/nouveau_drv.h b/drm/nouveau/nouveau_drv.h
index da847244..941600e9 100644
--...
2019 Jun 14
0
[PATCH] drm: don't set the pci power state if the pci subsystem handles the ACPI bits
...er_state(pdev, PCI_D3cold);
+ if (drm->runpm_dsm)
+ pci_set_power_state(pdev, PCI_D3cold);
+
drm_dev->switch_power_state = DRM_SWITCH_POWER_DYNAMIC_OFF;
return ret;
}
@@ -941,7 +946,9 @@ nouveau_pmops_runtime_resume(struct device *dev)
return -EBUSY;
}
- pci_set_power_state(pdev, PCI_D0);
+ drm_dev->switch_power_state = DRM_SWITCH_POWER_CHANGING;
+ if (drm->runpm_dsm)
+ pci_set_power_state(pdev, PCI_D0);
pci_restore_state(pdev);
ret = pci_enable_device(pdev);
if (ret)
diff --git a/drm/nouveau/nouveau_drv.h b/drm/nouveau/nouveau_drv.h
index e6665354..1e437612 100644
--...
2019 Jun 18
0
[PATCH v3] drm: don't set the pci power state if the pci subsystem handles the ACPI bits
...er_state(pdev, PCI_D3cold);
+ if (drm->runpm_dsm)
+ pci_set_power_state(pdev, PCI_D3cold);
+
drm_dev->switch_power_state = DRM_SWITCH_POWER_DYNAMIC_OFF;
return ret;
}
@@ -941,7 +946,9 @@ nouveau_pmops_runtime_resume(struct device *dev)
return -EBUSY;
}
- pci_set_power_state(pdev, PCI_D0);
+ drm_dev->switch_power_state = DRM_SWITCH_POWER_CHANGING;
+ if (drm->runpm_dsm)
+ pci_set_power_state(pdev, PCI_D0);
pci_restore_state(pdev);
ret = pci_enable_device(pdev);
if (ret)
diff --git a/drm/nouveau/nouveau_drv.h b/drm/nouveau/nouveau_drv.h
index e6665354e..1e4376128 100644...
2019 May 07
0
[PATCH 1/5] drm: don't set the pci power state if the pci subsystem handles the ACPI bits
...&drm->client.device;
> > int ret;
> >
> > if (!nouveau_pmops_runtime()) {
> > @@ -933,7 +938,9 @@ nouveau_pmops_runtime_resume(struct device *dev)
> > return -EBUSY;
> > }
> >
> > - pci_set_power_state(pdev, PCI_D0);
> > + drm_dev->switch_power_state = DRM_SWITCH_POWER_CHANGING;
> > + if (drm->runpm_dsm)
> > + pci_set_power_state(pdev, PCI_D0);
> > pci_restore_state(pdev);
> > ret = pci_enable_device(pdev);
> > if (ret)
> >...
2018 Jul 17
3
[PATCH 1/5] drm/nouveau: Prevent RPM callback recursion in suspend/resume paths
...ou include stack traces in the commit
message? My gut feeling is that this patch masks a deeper issue,
e.g. if the runtime_resume code path does in fact directly poll outputs,
that would seem wrong. Runtime resume should merely make the card
accessible, i.e. reinstate power if necessary, put into PCI_D0,
restore registers, etc. Output polling should be scheduled
asynchronously.
Thanks,
Lukas
2019 Sep 27
0
[RFC PATCH] pci: prevent putting pcie devices into lower device states on certain intel bridges
...> + }
> +
> + return false;
> +}
> +
> /**
> * pci_raw_set_power_state - Use PCI PM registers to set the power state of
> * given PCI device
> @@ -827,6 +863,9 @@ static int pci_raw_set_power_state(struct pci_dev *dev, pci_power_t state)
> if (state < PCI_D0 || state > PCI_D3hot)
> return -EINVAL;
>
> + if (state != PCI_D0 && intel_broken_pci_pm(dev->bus))
> + return 0;
> +
> /*
> * Validate current state:
> * Can enter D0 from any state, but if we can only go deeper
> --
> 2.21.0
>