Karol Herbst
2019-Aug-14 21:31 UTC
[Nouveau] [PATCH 0/7] Adding a proper workaround for fixing RTD3 issues with Nouveau
First three patches are removing ACPI workarounds which should have never landed. The last four are adding a workaround to nouveau which seem to help quite a lot with the RTD3 issues with Nouveau, so let's discuss and get wider testing of those and see if there is any fallout or laptops where the issues don't get fixed. Karol Herbst (7): Revert "ACPI / OSI: Add OEM _OSI string to enable dGPU direct output" Revert "ACPI / OSI: Add OEM _OSI string to enable NVidia HDMI audio" Revert "ACPI / OSI: Add OEM _OSI strings to disable NVidia RTD3" drm/nouveau/pci: enable pcie link changes for pascal drm/nouveau/pci: add nvkm_pcie_get_speed drm/nouveau/pci: save the boot pcie link speed and restore it on fini drm/nouveau: abort runtime suspend if we hit an error drivers/acpi/osi.c | 24 ---------- .../drm/nouveau/include/nvkm/core/device.h | 2 + .../gpu/drm/nouveau/include/nvkm/subdev/pci.h | 9 ++-- drivers/gpu/drm/nouveau/nouveau_drm.c | 6 +++ .../gpu/drm/nouveau/nvkm/subdev/clk/base.c | 2 +- .../gpu/drm/nouveau/nvkm/subdev/pci/base.c | 9 +++- .../gpu/drm/nouveau/nvkm/subdev/pci/gk104.c | 8 ++-- .../gpu/drm/nouveau/nvkm/subdev/pci/gp100.c | 10 ++++ .../gpu/drm/nouveau/nvkm/subdev/pci/pcie.c | 46 +++++++++++++++++-- .../gpu/drm/nouveau/nvkm/subdev/pci/priv.h | 7 +++ 10 files changed, 84 insertions(+), 39 deletions(-) -- 2.21.0
Karol Herbst
2019-Aug-14 21:31 UTC
[Nouveau] [PATCH 1/7] Revert "ACPI / OSI: Add OEM _OSI string to enable dGPU direct output"
This reverts commit 28586a51eea666d5531bcaef2f68e4abbd87242c. The original commit message didn't even make sense. AMD _does_ support it and it works with Nouveau as well. Also what was the issue being solved here? No references to any bugs and not even explaining any issue at all isn't the way we do things. And even if it means a muxed design, then the fix is to make it work inside the driver, not adding some hacky workaround through ACPI tricks. And what out of tree drivers do or do not support we don't care one bit anyway. Signed-off-by: Karol Herbst <kherbst at redhat.com> CC: Alex Hung <alex.hung at canonical.com> CC: Rafael J. Wysocki <rafael.j.wysocki at intel.com> CC: Dave Airlie <airlied at redhat.com> CC: Lyude Paul <lyude at redhat.com> CC: Ben Skeggs <bskeggs at redhat.com> --- drivers/acpi/osi.c | 7 ------- 1 file changed, 7 deletions(-) diff --git a/drivers/acpi/osi.c b/drivers/acpi/osi.c index bec0bebc7f52..9b20ac4d79a0 100644 --- a/drivers/acpi/osi.c +++ b/drivers/acpi/osi.c @@ -61,13 +61,6 @@ osi_setup_entries[OSI_STRING_ENTRIES_MAX] __initdata = { * a BIOS workaround. */ {"Linux-Lenovo-NV-HDMI-Audio", true}, - /* - * Linux-HPI-Hybrid-Graphics is used by BIOS to enable dGPU to - * output video directly to external monitors on HP Inc. mobile - * workstations as Nvidia and AMD VGA drivers provide limited - * hybrid graphics supports. - */ - {"Linux-HPI-Hybrid-Graphics", true}, }; static u32 acpi_osi_handler(acpi_string interface, u32 supported) -- 2.21.0
Karol Herbst
2019-Aug-14 21:31 UTC
[Nouveau] [PATCH 2/7] Revert "ACPI / OSI: Add OEM _OSI string to enable NVidia HDMI audio"
This reverts commit 887532ca7ca59fcf0547a79211756791128030a3. We have a better solution for this: b516ea586d717 And same as with the last commit: "NVidia Linux driver" that's Nouveau, any out of tree driver does _not_ matter. And with Nouveau all of this works even though it required a proper fix first, but we have that now. Signed-off-by: Karol Herbst <kherbst at redhat.com> CC: Alex Hung <alex.hung at canonical.com> CC: Rafael J. Wysocki <rafael.j.wysocki at intel.com> CC: Dave Airlie <airlied at redhat.com> CC: Lyude Paul <lyude at redhat.com> CC: Ben Skeggs <bskeggs at redhat.com> --- drivers/acpi/osi.c | 8 -------- 1 file changed, 8 deletions(-) diff --git a/drivers/acpi/osi.c b/drivers/acpi/osi.c index 9b20ac4d79a0..56cc95b6b724 100644 --- a/drivers/acpi/osi.c +++ b/drivers/acpi/osi.c @@ -53,14 +53,6 @@ osi_setup_entries[OSI_STRING_ENTRIES_MAX] __initdata = { * be removed if both new and old graphics cards are supported. */ {"Linux-Dell-Video", true}, - /* - * Linux-Lenovo-NV-HDMI-Audio is used by BIOS to power on NVidia's HDMI - * audio device which is turned off for power-saving in Windows OS. - * This power management feature observed on some Lenovo Thinkpad - * systems which will not be able to output audio via HDMI without - * a BIOS workaround. - */ - {"Linux-Lenovo-NV-HDMI-Audio", true}, }; static u32 acpi_osi_handler(acpi_string interface, u32 supported) -- 2.21.0
Karol Herbst
2019-Aug-14 21:31 UTC
[Nouveau] [PATCH 3/7] Revert "ACPI / OSI: Add OEM _OSI strings to disable NVidia RTD3"
This reverts commit 9251a71db62ca9cc7e7cf364218610b0f018c291. This was never discussed with anybody Nouveau related and we would have NACKed this change immediately. We have a better workaround, which makes it actually work with Nouveau. No idea why the comment mentions the Nvidia driver and assumes it gives any weight to the reasoning.... we don't care about out of tree drivers. Nouveau does support RTD3, but we had some issues with that. And we even have a better fix for this issue. Also, can we _please_ do it in a way worthy of an upstream community the next time? If some distribution feels like they have to please companies not wanting to be part of the linux community, please do so downstream and don't try to push something like this upstream. Signed-off-by: Karol Herbst <kherbst at redhat.com> CC: Alex Hung <alex.hung at canonical.com> CC: Rafael J. Wysocki <rafael.j.wysocki at intel.com> CC: Dave Airlie <airlied at redhat.com> CC: Lyude Paul <lyude at redhat.com> CC: Ben Skeggs <bskeggs at redhat.com> --- drivers/acpi/osi.c | 9 --------- 1 file changed, 9 deletions(-) diff --git a/drivers/acpi/osi.c b/drivers/acpi/osi.c index 56cc95b6b724..f5d559a2ff14 100644 --- a/drivers/acpi/osi.c +++ b/drivers/acpi/osi.c @@ -44,15 +44,6 @@ osi_setup_entries[OSI_STRING_ENTRIES_MAX] __initdata = { {"Processor Device", true}, {"3.0 _SCP Extensions", true}, {"Processor Aggregator Device", true}, - /* - * Linux-Dell-Video is used by BIOS to disable RTD3 for NVidia graphics - * cards as RTD3 is not supported by drivers now. Systems with NVidia - * cards will hang without RTD3 disabled. - * - * Once NVidia drivers officially support RTD3, this _OSI strings can - * be removed if both new and old graphics cards are supported. - */ - {"Linux-Dell-Video", true}, }; static u32 acpi_osi_handler(acpi_string interface, u32 supported) -- 2.21.0
Karol Herbst
2019-Aug-14 21:31 UTC
[Nouveau] [PATCH 4/7] drm/nouveau/pci: enable pcie link changes for pascal
Signed-off-by: Karol Herbst <kherbst at redhat.com> Reviewed-by: Lyude Paul <lyude at redhat.com> CC: Alex Hung <alex.hung at canonical.com> CC: Rafael J. Wysocki <rafael.j.wysocki at intel.com> CC: Dave Airlie <airlied at redhat.com> CC: Lyude Paul <lyude at redhat.com> CC: Ben Skeggs <bskeggs at redhat.com> --- drivers/gpu/drm/nouveau/nvkm/subdev/pci/gk104.c | 8 ++++---- drivers/gpu/drm/nouveau/nvkm/subdev/pci/gp100.c | 10 ++++++++++ drivers/gpu/drm/nouveau/nvkm/subdev/pci/priv.h | 5 +++++ 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/gk104.c b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/gk104.c index e68030507d88..664890185e15 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/gk104.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/gk104.c @@ -23,7 +23,7 @@ */ #include "priv.h" -static int +int gk104_pcie_version_supported(struct nvkm_pci *pci) { return (nvkm_rd32(pci->subdev.device, 0x8c1c0) & 0x4) == 0x4 ? 2 : 1; @@ -108,7 +108,7 @@ gk104_pcie_lnkctl_speed(struct nvkm_pci *pci) return -1; } -static enum nvkm_pcie_speed +enum nvkm_pcie_speed gk104_pcie_max_speed(struct nvkm_pci *pci) { u32 max_speed = nvkm_rd32(pci->subdev.device, 0x8c1c0) & 0x300000; @@ -146,7 +146,7 @@ gk104_pcie_set_link_speed(struct nvkm_pci *pci, enum nvkm_pcie_speed speed) nvkm_mask(device, 0x8c040, 0x1, 0x1); } -static int +int gk104_pcie_init(struct nvkm_pci * pci) { enum nvkm_pcie_speed lnkctl_speed, max_speed, cap_speed; @@ -178,7 +178,7 @@ gk104_pcie_init(struct nvkm_pci * pci) return 0; } -static int +int gk104_pcie_set_link(struct nvkm_pci *pci, enum nvkm_pcie_speed speed, u8 width) { struct nvkm_subdev *subdev = &pci->subdev; diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/gp100.c b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/gp100.c index 82c5234a06ff..eb19c7a44561 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/gp100.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/gp100.c @@ -35,6 +35,16 @@ gp100_pci_func = { .wr08 = nv40_pci_wr08, .wr32 = nv40_pci_wr32, .msi_rearm = gp100_pci_msi_rearm, + + .pcie.init = gk104_pcie_init, + .pcie.set_link = gk104_pcie_set_link, + + .pcie.max_speed = gk104_pcie_max_speed, + .pcie.cur_speed = g84_pcie_cur_speed, + + .pcie.set_version = gf100_pcie_set_version, + .pcie.version = gf100_pcie_version, + .pcie.version_supported = gk104_pcie_version_supported, }; int diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/priv.h b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/priv.h index 7009aad86b6e..162ed5dc6fc3 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/priv.h +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/priv.h @@ -54,6 +54,11 @@ int gf100_pcie_cap_speed(struct nvkm_pci *); int gf100_pcie_init(struct nvkm_pci *); int gf100_pcie_set_link(struct nvkm_pci *, enum nvkm_pcie_speed, u8); +int gk104_pcie_init(struct nvkm_pci *); +int gk104_pcie_set_link(struct nvkm_pci *, enum nvkm_pcie_speed, u8 width); +enum nvkm_pcie_speed gk104_pcie_max_speed(struct nvkm_pci *); +int gk104_pcie_version_supported(struct nvkm_pci *); + int nvkm_pcie_oneinit(struct nvkm_pci *); int nvkm_pcie_init(struct nvkm_pci *); #endif -- 2.21.0
Karol Herbst
2019-Aug-14 21:31 UTC
[Nouveau] [PATCH 5/7] drm/nouveau/pci: add nvkm_pcie_get_speed
v2: fixed compilation error Signed-off-by: Karol Herbst <kherbst at redhat.com> Reviewed-by: Lyude Paul <lyude at redhat.com> CC: Alex Hung <alex.hung at canonical.com> CC: Rafael J. Wysocki <rafael.j.wysocki at intel.com> CC: Dave Airlie <airlied at redhat.com> CC: Lyude Paul <lyude at redhat.com> CC: Ben Skeggs <bskeggs at redhat.com> --- drivers/gpu/drm/nouveau/include/nvkm/subdev/pci.h | 1 + drivers/gpu/drm/nouveau/nvkm/subdev/pci/pcie.c | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/subdev/pci.h b/drivers/gpu/drm/nouveau/include/nvkm/subdev/pci.h index 4803a4fad4a2..b29101e485f9 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/subdev/pci.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/subdev/pci.h @@ -53,4 +53,5 @@ int gp100_pci_new(struct nvkm_device *, int, struct nvkm_pci **); /* pcie functions */ int nvkm_pcie_set_link(struct nvkm_pci *, enum nvkm_pcie_speed, u8 width); +enum nvkm_pcie_speed nvkm_pcie_get_speed(struct nvkm_pci *); #endif diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/pcie.c b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/pcie.c index d71e5db5028a..03be24930c0e 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/pcie.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/pcie.c @@ -163,3 +163,11 @@ nvkm_pcie_set_link(struct nvkm_pci *pci, enum nvkm_pcie_speed speed, u8 width) return ret; } + +enum nvkm_pcie_speed +nvkm_pcie_get_speed(struct nvkm_pci *pci) +{ + if (!pci || !pci_is_pcie(pci->pdev) || !pci->func->pcie.cur_speed) + return -ENODEV; + return pci->func->pcie.cur_speed(pci); +} -- 2.21.0
Karol Herbst
2019-Aug-14 21:31 UTC
[Nouveau] [PATCH 6/7] drm/nouveau/pci: save the boot pcie link speed and restore it on fini
Apperantly things go south if we suspend the device with a different PCIE link speed set than it got booted with. Fixes runtime suspend on my gp107. This all looks like some bug inside the pci subsystem and I would prefer a fix there instead of nouveau, but maybe there is no real nice way of doing that outside of drivers? v2: squashed together patch 4 and 5 v3: only restore pcie speed on machines with runpm add NvRunpmWorkaround config option to disable the workaround Signed-off-by: Karol Herbst <kherbst at redhat.com> Reviewed-by: Lyude Paul <lyude at redhat.com> (v2) CC: Alex Hung <alex.hung at canonical.com> CC: Rafael J. Wysocki <rafael.j.wysocki at intel.com> CC: Dave Airlie <airlied at redhat.com> CC: Lyude Paul <lyude at redhat.com> CC: Ben Skeggs <bskeggs at redhat.com> --- .../drm/nouveau/include/nvkm/core/device.h | 2 + .../gpu/drm/nouveau/include/nvkm/subdev/pci.h | 8 ++-- drivers/gpu/drm/nouveau/nouveau_drm.c | 1 + .../gpu/drm/nouveau/nvkm/subdev/clk/base.c | 2 +- .../gpu/drm/nouveau/nvkm/subdev/pci/base.c | 9 ++++- .../gpu/drm/nouveau/nvkm/subdev/pci/pcie.c | 38 ++++++++++++++++--- .../gpu/drm/nouveau/nvkm/subdev/pci/priv.h | 2 + 7 files changed, 51 insertions(+), 11 deletions(-) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h index 6d55cd0476aa..4fb3f972ff97 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h @@ -125,6 +125,8 @@ struct nvkm_device { u8 chiprev; u32 crystal; + bool has_runpm; + struct { struct notifier_block nb; } acpi; diff --git a/drivers/gpu/drm/nouveau/include/nvkm/subdev/pci.h b/drivers/gpu/drm/nouveau/include/nvkm/subdev/pci.h index b29101e485f9..56e73412fe4a 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/subdev/pci.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/subdev/pci.h @@ -26,8 +26,9 @@ struct nvkm_pci { } agp; struct { - enum nvkm_pcie_speed speed; - u8 width; + enum nvkm_pcie_speed cur_speed; + enum nvkm_pcie_speed def_speed; + u8 cur_width; } pcie; bool msi; @@ -52,6 +53,7 @@ int gk104_pci_new(struct nvkm_device *, int, struct nvkm_pci **); int gp100_pci_new(struct nvkm_device *, int, struct nvkm_pci **); /* pcie functions */ -int nvkm_pcie_set_link(struct nvkm_pci *, enum nvkm_pcie_speed, u8 width); +int nvkm_pcie_set_link(struct nvkm_pci *, enum nvkm_pcie_speed, u8 width, + bool save); enum nvkm_pcie_speed nvkm_pcie_get_speed(struct nvkm_pci *); #endif diff --git a/drivers/gpu/drm/nouveau/nouveau_drm.c b/drivers/gpu/drm/nouveau/nouveau_drm.c index 7c2fcaba42d6..16441c5bf29c 100644 --- a/drivers/gpu/drm/nouveau/nouveau_drm.c +++ b/drivers/gpu/drm/nouveau/nouveau_drm.c @@ -675,6 +675,7 @@ static int nouveau_drm_probe(struct pci_dev *pdev, if (nouveau_atomic) driver_pci.driver_features |= DRIVER_ATOMIC; + device->has_runpm = nouveau_pmops_runtime(); drm_dev = drm_dev_alloc(&driver_pci, &pdev->dev); if (IS_ERR(drm_dev)) { diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/clk/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/clk/base.c index 40e564524b7a..1a524ffa77a3 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/clk/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/clk/base.c @@ -278,7 +278,7 @@ nvkm_pstate_prog(struct nvkm_clk *clk, int pstatei) nvkm_debug(subdev, "setting performance state %d\n", pstatei); clk->pstate = pstatei; - nvkm_pcie_set_link(pci, pstate->pcie_speed, pstate->pcie_width); + nvkm_pcie_set_link(pci, pstate->pcie_speed, pstate->pcie_width, true); if (fb && fb->ram && fb->ram->func->calc) { struct nvkm_ram *ram = fb->ram; diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/base.c index ee2431a7804e..d9fb5a83f7d2 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/base.c @@ -90,6 +90,8 @@ nvkm_pci_fini(struct nvkm_subdev *subdev, bool suspend) if (pci->agp.bridge) nvkm_agp_fini(pci); + else if (pci_is_pcie(pci->pdev)) + nvkm_pcie_fini(pci); return 0; } @@ -100,6 +102,8 @@ nvkm_pci_preinit(struct nvkm_subdev *subdev) struct nvkm_pci *pci = nvkm_pci(subdev); if (pci->agp.bridge) nvkm_agp_preinit(pci); + else if (pci_is_pcie(pci->pdev)) + nvkm_pcie_preinit(pci); return 0; } @@ -193,8 +197,9 @@ nvkm_pci_new_(const struct nvkm_pci_func *func, struct nvkm_device *device, pci->func = func; pci->pdev = device->func->pci(device)->pdev; pci->irq = -1; - pci->pcie.speed = -1; - pci->pcie.width = -1; + pci->pcie.cur_speed = -1; + pci->pcie.def_speed = -1; + pci->pcie.cur_width = -1; if (device->type == NVKM_DEVICE_AGP) nvkm_agp_ctor(pci); diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/pcie.c b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/pcie.c index 03be24930c0e..d6b7ad6a8d0d 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/pcie.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/pcie.c @@ -23,6 +23,8 @@ */ #include "priv.h" +#include <core/option.h> + static char *nvkm_pcie_speeds[] = { "2.5GT/s", "5.0GT/s", @@ -85,6 +87,13 @@ nvkm_pcie_oneinit(struct nvkm_pci *pci) return 0; } +int +nvkm_pcie_preinit(struct nvkm_pci *pci) +{ + pci->pcie.def_speed = nvkm_pcie_get_speed(pci); + return 0; +} + int nvkm_pcie_init(struct nvkm_pci *pci) { @@ -105,14 +114,31 @@ nvkm_pcie_init(struct nvkm_pci *pci) if (pci->func->pcie.init) pci->func->pcie.init(pci); - if (pci->pcie.speed != -1) - nvkm_pcie_set_link(pci, pci->pcie.speed, pci->pcie.width); + if (pci->pcie.cur_speed != -1) + nvkm_pcie_set_link(pci, pci->pcie.cur_speed, + pci->pcie.cur_width, false); + + return 0; +} + +int +nvkm_pcie_fini(struct nvkm_pci *pci) +{ + struct nvkm_device *device = pci->subdev.device; + if (!device->has_runpm) + return 0; + + if (!nvkm_boolopt(device->cfgopt, "NvRunpmWorkaround", true)) + return 0; + if (!IS_ERR_VALUE(pci->pcie.def_speed)) + return nvkm_pcie_set_link(pci, pci->pcie.def_speed, 16, false); return 0; } int -nvkm_pcie_set_link(struct nvkm_pci *pci, enum nvkm_pcie_speed speed, u8 width) +nvkm_pcie_set_link(struct nvkm_pci *pci, enum nvkm_pcie_speed speed, u8 width, + bool save) { struct nvkm_subdev *subdev = &pci->subdev; enum nvkm_pcie_speed cur_speed, max_speed; @@ -146,8 +172,10 @@ nvkm_pcie_set_link(struct nvkm_pci *pci, enum nvkm_pcie_speed speed, u8 width) speed = max_speed; } - pci->pcie.speed = speed; - pci->pcie.width = width; + if (save) { + pci->pcie.cur_speed = speed; + pci->pcie.cur_width = width; + } if (speed == cur_speed) { nvkm_debug(subdev, "requested matches current speed\n"); diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/priv.h b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/priv.h index 162ed5dc6fc3..85be0594f11b 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/priv.h +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/priv.h @@ -60,5 +60,7 @@ enum nvkm_pcie_speed gk104_pcie_max_speed(struct nvkm_pci *); int gk104_pcie_version_supported(struct nvkm_pci *); int nvkm_pcie_oneinit(struct nvkm_pci *); +int nvkm_pcie_preinit(struct nvkm_pci *); int nvkm_pcie_init(struct nvkm_pci *); +int nvkm_pcie_fini(struct nvkm_pci *); #endif -- 2.21.0
Karol Herbst
2019-Aug-14 21:31 UTC
[Nouveau] [PATCH 7/7] drm/nouveau: abort runtime suspend if we hit an error
Signed-off-by: Karol Herbst <kherbst at redhat.com> CC: Alex Hung <alex.hung at canonical.com> CC: Rafael J. Wysocki <rafael.j.wysocki at intel.com> CC: Dave Airlie <airlied at redhat.com> CC: Lyude Paul <lyude at redhat.com> CC: Ben Skeggs <bskeggs at redhat.com> --- drivers/gpu/drm/nouveau/nouveau_drm.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/drivers/gpu/drm/nouveau/nouveau_drm.c b/drivers/gpu/drm/nouveau/nouveau_drm.c index 16441c5bf29c..b16157a9c736 100644 --- a/drivers/gpu/drm/nouveau/nouveau_drm.c +++ b/drivers/gpu/drm/nouveau/nouveau_drm.c @@ -910,6 +910,7 @@ nouveau_pmops_runtime_suspend(struct device *dev) { struct pci_dev *pdev = to_pci_dev(dev); struct drm_device *drm_dev = pci_get_drvdata(pdev); + struct nouveau_drm *drm = nouveau_drm(drm_dev); int ret; if (!nouveau_pmops_runtime()) { @@ -919,6 +920,10 @@ nouveau_pmops_runtime_suspend(struct device *dev) nouveau_switcheroo_optimus_dsm(); ret = nouveau_do_suspend(drm_dev, true); + if (ret) { + NV_ERROR(drm, "suspend failed with: %d\n", ret); + return ret; + } pci_save_state(pdev); pci_disable_device(pdev); pci_ignore_hotplug(pdev); -- 2.21.0
Alex Hung
2019-Aug-14 21:49 UTC
[Nouveau] [PATCH 1/7] Revert "ACPI / OSI: Add OEM _OSI string to enable dGPU direct output"
Thanks for the series of fixes. I will check whether these fixes work on the original intended systems. On Wed, Aug 14, 2019 at 3:31 PM Karol Herbst <kherbst at redhat.com> wrote:> > This reverts commit 28586a51eea666d5531bcaef2f68e4abbd87242c. > > The original commit message didn't even make sense. AMD _does_ support it and > it works with Nouveau as well. > > Also what was the issue being solved here? No references to any bugs and not > even explaining any issue at all isn't the way we do things. > > And even if it means a muxed design, then the fix is to make it work inside the > driver, not adding some hacky workaround through ACPI tricks. > > And what out of tree drivers do or do not support we don't care one bit anyway. > > Signed-off-by: Karol Herbst <kherbst at redhat.com> > CC: Alex Hung <alex.hung at canonical.com> > CC: Rafael J. Wysocki <rafael.j.wysocki at intel.com> > CC: Dave Airlie <airlied at redhat.com> > CC: Lyude Paul <lyude at redhat.com> > CC: Ben Skeggs <bskeggs at redhat.com> > --- > drivers/acpi/osi.c | 7 ------- > 1 file changed, 7 deletions(-) > > diff --git a/drivers/acpi/osi.c b/drivers/acpi/osi.c > index bec0bebc7f52..9b20ac4d79a0 100644 > --- a/drivers/acpi/osi.c > +++ b/drivers/acpi/osi.c > @@ -61,13 +61,6 @@ osi_setup_entries[OSI_STRING_ENTRIES_MAX] __initdata = { > * a BIOS workaround. > */ > {"Linux-Lenovo-NV-HDMI-Audio", true}, > - /* > - * Linux-HPI-Hybrid-Graphics is used by BIOS to enable dGPU to > - * output video directly to external monitors on HP Inc. mobile > - * workstations as Nvidia and AMD VGA drivers provide limited > - * hybrid graphics supports. > - */ > - {"Linux-HPI-Hybrid-Graphics", true}, > }; > > static u32 acpi_osi_handler(acpi_string interface, u32 supported) > -- > 2.21.0 >-- Cheers, Alex Hung
Dave Airlie
2019-Aug-14 22:47 UTC
[Nouveau] [PATCH 1/7] Revert "ACPI / OSI: Add OEM _OSI string to enable dGPU direct output"
On Thu, 15 Aug 2019 at 07:31, Karol Herbst <kherbst at redhat.com> wrote:> > This reverts commit 28586a51eea666d5531bcaef2f68e4abbd87242c. > > The original commit message didn't even make sense. AMD _does_ support it and > it works with Nouveau as well. > > Also what was the issue being solved here? No references to any bugs and not > even explaining any issue at all isn't the way we do things. > > And even if it means a muxed design, then the fix is to make it work inside the > driver, not adding some hacky workaround through ACPI tricks. > > And what out of tree drivers do or do not support we don't care one bit anyway. >I think the reverts should be merged via Rafael's tree as the original patches went in via there, and we should get them in asap. Acked-by: Dave Airlie <airlied at redhat.com> Dave.
Alex Hung
2019-Aug-14 23:34 UTC
[Nouveau] [PATCH 3/7] Revert "ACPI / OSI: Add OEM _OSI strings to disable NVidia RTD3"
On Wed, Aug 14, 2019 at 3:31 PM Karol Herbst <kherbst at redhat.com> wrote:> > This reverts commit 9251a71db62ca9cc7e7cf364218610b0f018c291. > > This was never discussed with anybody Nouveau related and we would have NACKed > this change immediately. > > We have a better workaround, which makes it actually work with Nouveau. No idea > why the comment mentions the Nvidia driver and assumes it gives any weight to > the reasoning.... we don't care about out of tree drivers. > > Nouveau does support RTD3, but we had some issues with that. And we even have > a better fix for this issue. Also, can we _please_ do it in a way worthy of an > upstream community the next time? > > If some distribution feels like they have to please companies not wanting to > be part of the linux community, please do so downstream and don't try to push > something like this upstream.Hi Karol, A lot of appreciation for your hard-work on this issue, but unfriendly comments aren't necessary. At the time this was discussed with hardware vendors and platform vendors and it worked for many systems and benefit for many people buying these platforms. Last but not least, I do appreciate better fixes and want to retire the hacks too. I am going to notify hardware owners to test these patches on the original intended systems, and will report whether there are regressions.> > Signed-off-by: Karol Herbst <kherbst at redhat.com> > CC: Alex Hung <alex.hung at canonical.com> > CC: Rafael J. Wysocki <rafael.j.wysocki at intel.com> > CC: Dave Airlie <airlied at redhat.com> > CC: Lyude Paul <lyude at redhat.com> > CC: Ben Skeggs <bskeggs at redhat.com> > --- > drivers/acpi/osi.c | 9 --------- > 1 file changed, 9 deletions(-) > > diff --git a/drivers/acpi/osi.c b/drivers/acpi/osi.c > index 56cc95b6b724..f5d559a2ff14 100644 > --- a/drivers/acpi/osi.c > +++ b/drivers/acpi/osi.c > @@ -44,15 +44,6 @@ osi_setup_entries[OSI_STRING_ENTRIES_MAX] __initdata = { > {"Processor Device", true}, > {"3.0 _SCP Extensions", true}, > {"Processor Aggregator Device", true}, > - /* > - * Linux-Dell-Video is used by BIOS to disable RTD3 for NVidia graphics > - * cards as RTD3 is not supported by drivers now. Systems with NVidia > - * cards will hang without RTD3 disabled. > - * > - * Once NVidia drivers officially support RTD3, this _OSI strings can > - * be removed if both new and old graphics cards are supported. > - */ > - {"Linux-Dell-Video", true}, > }; > > static u32 acpi_osi_handler(acpi_string interface, u32 supported) > -- > 2.21.0 >-- Cheers, Alex Hung
Apparently Analagous Threads
- [PATCH v4 0/4] add PCIe workaround to fix runpm on laptops
- [PATCH 1/4] pci: enable pcie link changes for pascal
- [PATCH 0/5] Potential fix for runpm issues on various laptops
- [PATCH v2 0/4] Potential fix for runpm issues on various laptops
- [PATCH v2 4/4] pci: save the boot pcie link speed and restore it on fini