aboutsummarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorxiota2023-10-14 18:00:27 -0700
committerxiota2023-10-14 18:00:27 -0700
commit7f75f409fcdd48982fa4f4bdf17bbc3ec12337f1 (patch)
tree4b575edb64acaa2ffe23d56e95d989ddf63c7e3d
parent5bbc03814f94baba2fad92251287bfc72aef4822 (diff)
downloadaur-7f75f409fcdd48982fa4f4bdf17bbc3ec12337f1.tar.gz
update patches
-rw-r--r--.SRCINFO8
-rw-r--r--1001-add-acs-overrides.patch (renamed from add-acs-overrides.patch)65
-rw-r--r--1002-i915-vga-arbiter.patch158
-rw-r--r--PKGBUILD8
-rw-r--r--i915-vga-arbiter.patch193
5 files changed, 179 insertions, 253 deletions
diff --git a/.SRCINFO b/.SRCINFO
index 813f6d524133..e6865f964919 100644
--- a/.SRCINFO
+++ b/.SRCINFO
@@ -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
+
diff --git a/PKGBUILD b/PKGBUILD
index 256545061a2d..f65aa5ca5176 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -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
-