diff options
author | xiota | 2023-10-14 18:00:27 -0700 |
---|---|---|
committer | xiota | 2023-10-14 18:00:27 -0700 |
commit | 7f75f409fcdd48982fa4f4bdf17bbc3ec12337f1 (patch) | |
tree | 4b575edb64acaa2ffe23d56e95d989ddf63c7e3d | |
parent | 5bbc03814f94baba2fad92251287bfc72aef4822 (diff) | |
download | aur-7f75f409fcdd48982fa4f4bdf17bbc3ec12337f1.tar.gz |
update patches
-rw-r--r-- | .SRCINFO | 8 | ||||
-rw-r--r-- | 1001-add-acs-overrides.patch (renamed from add-acs-overrides.patch) | 65 | ||||
-rw-r--r-- | 1002-i915-vga-arbiter.patch | 158 | ||||
-rw-r--r-- | PKGBUILD | 8 | ||||
-rw-r--r-- | i915-vga-arbiter.patch | 193 |
5 files changed, 179 insertions, 253 deletions
@@ -23,16 +23,16 @@ pkgbase = linux-vfio-lts source = https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.1.57.tar.sign source = config source = 0001-ZEN-Add-sysctl-and-CONFIG-to-disallow-unprivileged-C.patch - source = add-acs-overrides.patch - source = i915-vga-arbiter.patch + source = 1001-add-acs-overrides.patch + source = 1002-i915-vga-arbiter.patch validpgpkeys = ABAF11C65A2970B130ABE3C479BE3E4300411886 validpgpkeys = 647F28654894E3BD457199BE38DBBDC86092693E sha256sums = f9ebfe3ddc5152d87b37e33be30e31875d137433be10a57ce29d2eae7b6e91b1 sha256sums = SKIP sha256sums = fcf0b005d3cde29b54a61b25bef3efb42a12ac38c039200ac8f4756618270820 sha256sums = 21195509fded29d0256abfce947b5a8ce336d0d3e192f3f8ea90bde9dd95a889 - sha256sums = b90be7b79652be61f7d50691000f6a8c75a240dc2eee2667b68d984f67583f77 - sha256sums = 856230cfbdc2bb53a4920dfbcb6fb2d58427b7b184e5f94e21f08011d0a2fcc6 + sha256sums = bdd2a5a56e01e91723907afb40d28bed77b7d5107aba92c85adb3ce6967e713a + sha256sums = 9a698eaf1a0bd740981e909b6ad9bd41300488a2a771843bf30b9bdc94aa3c3b pkgname = linux-vfio-lts pkgdesc = The LTS Linux kernel and modules (ACS override and i915 VGA arbiter patches) diff --git a/add-acs-overrides.patch b/1001-add-acs-overrides.patch index f291975edb48..2b270d59fade 100644 --- a/add-acs-overrides.patch +++ b/1001-add-acs-overrides.patch @@ -1,58 +1,19 @@ -From 578d958c59002358abdeeb294c25ac28027b9f7a Mon Sep 17 00:00:00 2001 -From: Mark Weiman <mark.weiman@markzz.com> -Date: Wed, 27 Jan 2021 13:28:09 -0500 -Subject: [PATCH] pci: Enable overrides for missing ACS capabilities (5.10.11+) +From b41eb63d48790c92ac171fd92ad6355cb724e7ad Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=C3=A9clairevoyant?= + <848000+eclairevoyant@users.noreply.github.com> +Date: Tue, 14 Mar 2023 17:06:39 -0400 +Subject: [PATCH 1/2] add-acs-overrides -This an updated version of Alex Williamson's patch from: -https://lkml.org/lkml/2013/5/30/513 - -Original commit message follows: ---- -PCIe ACS (Access Control Services) is the PCIe 2.0+ feature that -allows us to control whether transactions are allowed to be redirected -in various subnodes of a PCIe topology. For instance, if two -endpoints are below a root port or downsteam switch port, the -downstream port may optionally redirect transactions between the -devices, bypassing upstream devices. The same can happen internally -on multifunction devices. The transaction may never be visible to the -upstream devices. - -One upstream device that we particularly care about is the IOMMU. If -a redirection occurs in the topology below the IOMMU, then the IOMMU -cannot provide isolation between devices. This is why the PCIe spec -encourages topologies to include ACS support. Without it, we have to -assume peer-to-peer DMA within a hierarchy can bypass IOMMU isolation. - -Unfortunately, far too many topologies do not support ACS to make this -a steadfast requirement. Even the latest chipsets from Intel are only -sporadically supporting ACS. We have trouble getting interconnect -vendors to include the PCIe spec required PCIe capability, let alone -suggested features. - -Therefore, we need to add some flexibility. The pcie_acs_override= -boot option lets users opt-in specific devices or sets of devices to -assume ACS support. The "downstream" option assumes full ACS support -on root ports and downstream switch ports. The "multifunction" -option assumes the subset of ACS features available on multifunction -endpoints and upstream switch ports are supported. The "id:nnnn:nnnn" -option enables ACS support on devices matching the provided vendor -and device IDs, allowing more strategic ACS overrides. These options -may be combined in any order. A maximum of 16 id specific overrides -are available. It's suggested to use the most limited set of options -necessary to avoid completely disabling ACS across the topology. -Note to hardware vendors, we have facilities to permanently quirk -specific devices which enforce isolation but not provide an ACS -capability. Please contact me to have your devicstarting --- .../admin-guide/kernel-parameters.txt | 8 ++ drivers/pci/quirks.c | 102 ++++++++++++++++++ 2 files changed, 110 insertions(+) diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt -index 26bfe7ae711b..7babcf646686 100644 +index 6cfa6e3996cf..fdbe34c0fbf3 100644 --- a/Documentation/admin-guide/kernel-parameters.txt +++ b/Documentation/admin-guide/kernel-parameters.txt -@@ -3629,6 +3629,14 @@ +@@ -4178,6 +4178,14 @@ nomsi [MSI] If the PCI_MSI kernel config parameter is enabled, this kernel boot option can be used to disable the use of MSI interrupts system-wide. @@ -68,10 +29,10 @@ index 26bfe7ae711b..7babcf646686 100644 Safety option to keep boot IRQs enabled. This should never be necessary. diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c -index fb1dc11e7cc5..8748df0fe1e1 100644 +index 494fa46f5767..41150eb8bd4c 100644 --- a/drivers/pci/quirks.c +++ b/drivers/pci/quirks.c -@@ -192,6 +192,106 @@ static int __init pci_apply_final_quirks(void) +@@ -194,6 +194,106 @@ static int __init pci_apply_final_quirks(void) } fs_initcall_sync(pci_apply_final_quirks); @@ -178,15 +139,15 @@ index fb1dc11e7cc5..8748df0fe1e1 100644 /* * Decoding should be disabled for a PCI device during BAR sizing to avoid * conflict. But doing so may cause problems on host bridge and perhaps other -@@ -4769,6 +4869,8 @@ static const struct pci_dev_acs_enabled { - { PCI_VENDOR_ID_ZHAOXIN, 0x9083, pci_quirk_mf_endpoint_acs }, - /* Zhaoxin Root/Downstream Ports */ +@@ -5002,6 +5102,8 @@ static const struct pci_dev_acs_enabled { { PCI_VENDOR_ID_ZHAOXIN, PCI_ANY_ID, pci_quirk_zhaoxin_pcie_ports_acs }, + /* Wangxun nics */ + { PCI_VENDOR_ID_WANGXUN, PCI_ANY_ID, pci_quirk_wangxun_nic_acs }, + /* allow acs for any */ + { PCI_ANY_ID, PCI_ANY_ID, pcie_acs_overrides }, { 0 } }; -- -2.30.0 +2.39.2 diff --git a/1002-i915-vga-arbiter.patch b/1002-i915-vga-arbiter.patch new file mode 100644 index 000000000000..fc546d8a9791 --- /dev/null +++ b/1002-i915-vga-arbiter.patch @@ -0,0 +1,158 @@ +From 61009bd54ec93d15f9c26325cf5e5c68ac98becc Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=C3=A9clairevoyant?= + <848000+eclairevoyant@users.noreply.github.com> +Date: Tue, 14 Mar 2023 17:07:40 -0400 +Subject: [PATCH 2/2] i915-vga-arbiter + +--- + drivers/gpu/drm/i915/display/intel_display.c | 15 ++++++++-- + drivers/gpu/drm/i915/display/intel_display.h | 1 + + drivers/gpu/drm/i915/display/intel_vga.c | 31 ++++++++++++++++++++ + drivers/gpu/drm/i915/display/intel_vga.h | 4 +++ + drivers/gpu/drm/i915/i915_params.c | 3 ++ + drivers/gpu/drm/i915/i915_params.h | 1 + + 6 files changed, 52 insertions(+), 3 deletions(-) + +diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c +index dedbdb175f8b..e7e95308f6e6 100644 +--- a/drivers/gpu/drm/i915/display/intel_display.c ++++ b/drivers/gpu/drm/i915/display/intel_display.c +@@ -8646,9 +8646,11 @@ int intel_modeset_init_noirq(struct drm_i915_private *i915) + + intel_bios_init(i915); + +- ret = intel_vga_register(i915); +- if (ret) +- goto cleanup_bios; ++ if (!i915_modparams.enable_hd_vgaarb || !HAS_PCH_SPLIT(i915)) { ++ ret = intel_vga_register(i915); ++ if (ret) ++ goto cleanup_bios; ++ } + + /* FIXME: completely on the wrong abstraction layer */ + intel_power_domains_init_hw(i915, false); +@@ -8796,6 +8798,12 @@ int intel_modeset_init(struct drm_i915_private *i915) + if (ret) + return ret; + ++ /* ++ * Must do this after fbcon init so that ++ * vgacon_save_screen() works during the handover. ++ */ ++ intel_vga_disable_mem(i915); ++ + /* Only enable hotplug handling once the fbdev is fully set up. */ + intel_hpd_init(i915); + intel_hpd_poll_disable(i915); +@@ -8966,6 +8974,7 @@ void intel_modeset_driver_remove(struct drm_i915_private *i915) + if (!HAS_DISPLAY(i915)) + return; + ++ intel_vga_enable_mem(i915); + flush_workqueue(i915->display.wq.flip); + flush_workqueue(i915->display.wq.modeset); + +diff --git a/drivers/gpu/drm/i915/display/intel_display.h b/drivers/gpu/drm/i915/display/intel_display.h +index 714030136b7f..fbd500249ab1 100644 +--- a/drivers/gpu/drm/i915/display/intel_display.h ++++ b/drivers/gpu/drm/i915/display/intel_display.h +@@ -535,6 +535,7 @@ void i830_disable_pipe(struct drm_i915_private *dev_priv, enum pipe pipe); + int vlv_get_hpll_vco(struct drm_i915_private *dev_priv); + int vlv_get_cck_clock(struct drm_i915_private *dev_priv, + const char *name, u32 reg, int ref_freq); ++extern void intel_vga_disable_mem(struct drm_i915_private *dev_priv); + int vlv_get_cck_clock_hpll(struct drm_i915_private *dev_priv, + const char *name, u32 reg); + void intel_init_display_hooks(struct drm_i915_private *dev_priv); +diff --git a/drivers/gpu/drm/i915/display/intel_vga.c b/drivers/gpu/drm/i915/display/intel_vga.c +index a69bfcac9a94..4cafe1f812f5 100644 +--- a/drivers/gpu/drm/i915/display/intel_vga.c ++++ b/drivers/gpu/drm/i915/display/intel_vga.c +@@ -46,6 +46,36 @@ void intel_vga_disable(struct drm_i915_private *dev_priv) + intel_de_posting_read(dev_priv, vga_reg); + } + ++void intel_vga_enable_mem(struct drm_i915_private *dev_priv) ++{ ++ struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev); ++ ++ /* Enable VGA memory on Intel HD */ ++ if (i915_modparams.enable_hd_vgaarb && HAS_PCH_SPLIT(dev_priv)) { ++ vga_get_uninterruptible(pdev, VGA_RSRC_LEGACY_IO); ++ outb(inb(VGA_MIS_R) | (1 << 1), VGA_MIS_W); ++ vga_set_legacy_decoding(pdev, VGA_RSRC_LEGACY_IO | ++ VGA_RSRC_LEGACY_MEM | ++ VGA_RSRC_NORMAL_IO | ++ VGA_RSRC_NORMAL_MEM); ++ vga_put(pdev, VGA_RSRC_LEGACY_IO); ++ } ++} ++ ++void intel_vga_disable_mem(struct drm_i915_private *dev_priv) ++{ ++ struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev); ++ /* Disable VGA memory on Intel HD */ ++ if (i915_modparams.enable_hd_vgaarb && HAS_PCH_SPLIT(dev_priv)) { ++ vga_get_uninterruptible(pdev, VGA_RSRC_LEGACY_IO); ++ outb(inb(VGA_MIS_R) & ~(1 << 1), VGA_MIS_W); ++ vga_set_legacy_decoding(pdev, VGA_RSRC_LEGACY_IO | ++ VGA_RSRC_NORMAL_IO | ++ VGA_RSRC_NORMAL_MEM); ++ vga_put(pdev, VGA_RSRC_LEGACY_IO); ++ } ++} ++ + void intel_vga_redisable_power_on(struct drm_i915_private *dev_priv) + { + i915_reg_t vga_reg = intel_vga_cntrl_reg(dev_priv); +@@ -54,6 +84,7 @@ void intel_vga_redisable_power_on(struct drm_i915_private *dev_priv) + drm_dbg_kms(&dev_priv->drm, + "Something enabled VGA plane, disabling it\n"); + intel_vga_disable(dev_priv); ++ intel_vga_disable_mem(dev_priv); + } + } + +diff --git a/drivers/gpu/drm/i915/display/intel_vga.h b/drivers/gpu/drm/i915/display/intel_vga.h +index ba5b55b917f0..7e2af7924e99 100644 +--- a/drivers/gpu/drm/i915/display/intel_vga.h ++++ b/drivers/gpu/drm/i915/display/intel_vga.h +@@ -15,4 +15,8 @@ void intel_vga_redisable_power_on(struct drm_i915_private *i915); + int intel_vga_register(struct drm_i915_private *i915); + void intel_vga_unregister(struct drm_i915_private *i915); + ++/* i915 vga arb patch */ ++void intel_vga_enable_mem(struct drm_i915_private *i915); ++void intel_vga_disable_mem(struct drm_i915_private *i915); ++ + #endif /* __INTEL_VGA_H__ */ +diff --git a/drivers/gpu/drm/i915/i915_params.c b/drivers/gpu/drm/i915/i915_params.c +index d1e4d528cb17..a00cbc6591b0 100644 +--- a/drivers/gpu/drm/i915/i915_params.c ++++ b/drivers/gpu/drm/i915/i915_params.c +@@ -154,6 +154,9 @@ i915_param_named_unsafe(invert_brightness, int, 0400, + i915_param_named(disable_display, bool, 0400, + "Disable display (default: false)"); + ++i915_param_named(enable_hd_vgaarb, bool, 0444, ++ "Enable support for VGA arbitration on Intel HD IGD. (default: false)"); ++ + i915_param_named(memtest, bool, 0400, + "Perform a read/write test of all device memory on module load (default: off)"); + +diff --git a/drivers/gpu/drm/i915/i915_params.h b/drivers/gpu/drm/i915/i915_params.h +index 2733cb6cfe09..f21c5b1529cc 100644 +--- a/drivers/gpu/drm/i915/i915_params.h ++++ b/drivers/gpu/drm/i915/i915_params.h +@@ -76,6 +76,7 @@ struct drm_printer; + param(unsigned int, lmem_size, 0, 0400) \ + param(unsigned int, lmem_bar_size, 0, 0400) \ + /* leave bools at the end to not create holes */ \ ++ param(bool, enable_hd_vgaarb, false, 0600) \ + param(bool, enable_hangcheck, true, 0600) \ + param(bool, load_detect_test, false, 0600) \ + param(bool, force_reset_modeset_test, false, 0600) \ +-- +2.39.2 + @@ -37,8 +37,8 @@ source=( 0001-ZEN-Add-sysctl-and-CONFIG-to-disallow-unprivileged-C.patch #0002-PCI-Add-more-NVIDIA-controllers-to-the-MSI-masking-q.patch #0003-iommu-intel-do-deep-dma-unmapping-to-avoid-kernel-fl.patch - add-acs-overrides.patch - i915-vga-arbiter.patch + 1001-add-acs-overrides.patch + 1002-i915-vga-arbiter.patch ) validpgpkeys=( ABAF11C65A2970B130ABE3C479BE3E4300411886 # Linus Torvalds @@ -53,8 +53,8 @@ sha256sums=( '21195509fded29d0256abfce947b5a8ce336d0d3e192f3f8ea90bde9dd95a889' #'39649dc1dfcb06b411ad124e123769e955a78961b4ea17538c0919a930925549' #'56c12551e859cc67520909e64feecbf1b190cee8addef150c5b9d1bb1d40981e' - 'b90be7b79652be61f7d50691000f6a8c75a240dc2eee2667b68d984f67583f77' - '856230cfbdc2bb53a4920dfbcb6fb2d58427b7b184e5f94e21f08011d0a2fcc6' + 'bdd2a5a56e01e91723907afb40d28bed77b7d5107aba92c85adb3ce6967e713a' + '9a698eaf1a0bd740981e909b6ad9bd41300488a2a771843bf30b9bdc94aa3c3b' ) export KBUILD_BUILD_HOST=archlinux diff --git a/i915-vga-arbiter.patch b/i915-vga-arbiter.patch deleted file mode 100644 index b73ff5558b18..000000000000 --- a/i915-vga-arbiter.patch +++ /dev/null @@ -1,193 +0,0 @@ -From a59b6ecac96eab5e80fa5ee918ddbc8e2fad3a7a Mon Sep 17 00:00:00 2001 -From: Mark Weiman <mark.weiman@markzz.com> -Date: Wed, 27 Jan 2021 13:28:46 -0500 -Subject: [PATCH] i915: Add module option to support VGA arbiter on HD devices - (5.14) - -Updated version of Mark Weiman's i915 patch for 5.14. - -Original patch messages follow. ---- -This is an updated version of Alex Williamson's patch from: -https://lkml.org/lkml/2014/5/9/517 - -I don't have i915 graphics, so this is completely untested. - -Original commit message follows: ---- -Commit 81b5c7bc found that the current VGA arbiter support in i915 -only works for ancient GMCH-based IGD devices and attempted to update -support for newer HD devices. Unfortunately newer devices cannot -completely opt-out of VGA arbitration like the old devices could. -The VGA I/O space cannot be disabled internally. The only way to -route VGA I/O elsewhere is by disabling I/O at the device PCI command -register. This means that with commit 81b5c7bc and multiple VGA -adapters, the VGA arbiter will report that multiple VGA devices are -participating in arbitration, Xorg will notice this and disable DRI. -Therefore, 81b5c7bc was reverted because DRI is more important than -being correct. - -There is however an actual need for i915 to correctly participate in -VGA arbitration; VGA device assignment. If we want to use VFIO to -assign a VGA device to a virtual machine, we need to be able to -access the VGA resources of that device. By adding an i915 module -option we can allow i915 to continue with its charade by default, but -also allow an easy path for users who require working VGA arbitration. -Hopefully Xorg can someday be taught to behave better with multiple -VGA devices. - -This also rolls in reverted commit 6e1b4fda, which corrected an -ordering issue with 81b5c7bc by delaying the disabling of VGA memory -until after vgacon->fbcon handoff. ---- - drivers/gpu/drm/i915/display/intel_display.c | 15 +++++++-- - drivers/gpu/drm/i915/display/intel_display.h | 1 + - drivers/gpu/drm/i915/display/intel_vga.c | 32 ++++++++++++++++++++ - drivers/gpu/drm/i915/display/intel_vga.h | 4 +++ - drivers/gpu/drm/i915/i915_params.c | 3 ++ - drivers/gpu/drm/i915/i915_params.h | 1 + - 6 files changed, 53 insertions(+), 3 deletions(-) - -diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c -index aabf09f89cad..528c6886a0b5 100644 ---- a/drivers/gpu/drm/i915/display/intel_display.c -+++ b/drivers/gpu/drm/i915/display/intel_display.c -@@ -12304,9 +12304,11 @@ - - intel_bios_init(i915); - -- ret = intel_vga_register(i915); -- if (ret) -+ if (!i915_modparams.enable_hd_vgaarb || !HAS_PCH_SPLIT(i915)) { -+ ret = intel_vga_register(i915); -+ if (ret) - goto cleanup_bios; -+ } - - /* FIXME: completely on the wrong abstraction layer */ - intel_power_domains_init_hw(i915, false); -@@ -12476,6 +12478,12 @@ - if (ret) - return ret; - -+ /* -+ * Must do this after fbcon init so that -+ * vgacon_save_screen() works during the handover. -+ */ -+ intel_vga_disable_mem(i915); -+ - /* Only enable hotplug handling once the fbdev is fully set up. */ - intel_hpd_init(i915); - intel_hpd_poll_disable(i915); -@@ -13375,6 +13383,7 @@ - if (!HAS_DISPLAY(i915)) - return; - -+ intel_vga_enable_mem(i915); - flush_workqueue(i915->flip_wq); - flush_workqueue(i915->modeset_wq); - -diff --git a/drivers/gpu/drm/i915/display/intel_display.h b/drivers/gpu/drm/i915/display/intel_display.h -index d10b7c8cde3f..3daaa0bd3b60 100644 ---- a/drivers/gpu/drm/i915/display/intel_display.h -+++ b/drivers/gpu/drm/i915/display/intel_display.h -@@ -514,6 +514,7 @@ int vlv_get_cck_clock_hpll(struct drm_i915_private *dev_priv, - void lpt_pch_enable(const struct intel_crtc_state *crtc_state); - void lpt_disable_pch_transcoder(struct drm_i915_private *dev_priv); - void lpt_disable_iclkip(struct drm_i915_private *dev_priv); -+extern void intel_vga_disable_mem(struct drm_i915_private *dev_priv); - void intel_init_display_hooks(struct drm_i915_private *dev_priv); - unsigned int intel_fb_xy_to_linear(int x, int y, - const struct intel_plane_state *state, -diff --git a/drivers/gpu/drm/i915/display/intel_vga.c b/drivers/gpu/drm/i915/display/intel_vga.c -index be333699c515..a76aa52cde76 100644 ---- a/drivers/gpu/drm/i915/display/intel_vga.c -+++ b/drivers/gpu/drm/i915/display/intel_vga.c -@@ -41,6 +41,37 @@ void intel_vga_disable(struct drm_i915_private *dev_priv) - intel_de_posting_read(dev_priv, vga_reg); - } - -+ -+void intel_vga_enable_mem(struct drm_i915_private *dev_priv) -+{ -+ struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev); -+ -+ /* Enable VGA memory on Intel HD */ -+ if (i915_modparams.enable_hd_vgaarb && HAS_PCH_SPLIT(dev_priv)) { -+ vga_get_uninterruptible(pdev, VGA_RSRC_LEGACY_IO); -+ outb(inb(VGA_MSR_READ) | VGA_MSR_MEM_EN, VGA_MSR_WRITE); -+ vga_set_legacy_decoding(pdev, VGA_RSRC_LEGACY_IO | -+ VGA_RSRC_LEGACY_MEM | -+ VGA_RSRC_NORMAL_IO | -+ VGA_RSRC_NORMAL_MEM); -+ vga_put(pdev, VGA_RSRC_LEGACY_IO); -+ } -+} -+ -+void intel_vga_disable_mem(struct drm_i915_private *dev_priv) -+{ -+ struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev); -+ /* Disable VGA memory on Intel HD */ -+ if (i915_modparams.enable_hd_vgaarb && HAS_PCH_SPLIT(dev_priv)) { -+ vga_get_uninterruptible(pdev, VGA_RSRC_LEGACY_IO); -+ outb(inb(VGA_MSR_READ) & ~VGA_MSR_MEM_EN, VGA_MSR_WRITE); -+ vga_set_legacy_decoding(pdev, VGA_RSRC_LEGACY_IO | -+ VGA_RSRC_NORMAL_IO | -+ VGA_RSRC_NORMAL_MEM); -+ vga_put(pdev, VGA_RSRC_LEGACY_IO); -+ } -+} -+ - void intel_vga_redisable_power_on(struct drm_i915_private *dev_priv) - { - i915_reg_t vga_reg = intel_vga_cntrl_reg(dev_priv); -@@ -49,6 +80,7 @@ void intel_vga_redisable_power_on(struct drm_i915_private *dev_priv) - drm_dbg_kms(&dev_priv->drm, - "Something enabled VGA plane, disabling it\n"); - intel_vga_disable(dev_priv); -+ intel_vga_disable_mem(dev_priv); - } - } - -diff --git a/drivers/gpu/drm/i915/display/intel_vga.h b/drivers/gpu/drm/i915/display/intel_vga.h -index ba5b55b917f0..7e2af7924e99 100644 ---- a/drivers/gpu/drm/i915/display/intel_vga.h -+++ b/drivers/gpu/drm/i915/display/intel_vga.h -@@ -15,4 +15,8 @@ void intel_vga_redisable_power_on(struct drm_i915_private *i915); - int intel_vga_register(struct drm_i915_private *i915); - void intel_vga_unregister(struct drm_i915_private *i915); - -+/* i915 vga arb patch */ -+void intel_vga_enable_mem(struct drm_i915_private *i915); -+void intel_vga_disable_mem(struct drm_i915_private *i915); -+ - #endif /* __INTEL_VGA_H__ */ -diff --git a/drivers/gpu/drm/i915/i915_params.c b/drivers/gpu/drm/i915/i915_params.c -index 7f139ea4a90b..f23476551569 100644 ---- a/drivers/gpu/drm/i915/i915_params.c -+++ b/drivers/gpu/drm/i915/i915_params.c -@@ -140,6 +140,9 @@ i915_param_named_unsafe(invert_brightness, int, 0400, - i915_param_named(disable_display, bool, 0400, - "Disable display (default: false)"); - -+i915_param_named(enable_hd_vgaarb, bool, 0444, -+ "Enable support for VGA arbitration on Intel HD IGD. (default: false)"); -+ - i915_param_named(mmio_debug, int, 0400, - "Enable the MMIO debug code for the first N failures (default: off). " - "This may negatively affect performance."); -diff --git a/drivers/gpu/drm/i915/i915_params.h b/drivers/gpu/drm/i915/i915_params.h -index 330c03e2b4f7..b44a4b7dba4d 100644 ---- a/drivers/gpu/drm/i915/i915_params.h -+++ b/drivers/gpu/drm/i915/i915_params.h -@@ -72,6 +72,7 @@ struct drm_printer; - param(char *, force_probe, CONFIG_DRM_I915_FORCE_PROBE, 0400) \ - param(unsigned long, fake_lmem_start, 0, 0400) \ - /* leave bools at the end to not create holes */ \ -+ param(bool, enable_hd_vgaarb, false, 0600) \ - param(bool, enable_hangcheck, true, 0600) \ - param(bool, load_detect_test, false, 0600) \ - param(bool, force_reset_modeset_test, false, 0600) \ --- -2.30.0 - |