mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-23 09:19:51 +00:00
drm/i915/gmch: move VGA set state to GMCH code
This is the only user for the GMCH bridge device in display. Move it to GMCH code. Signed-off-by: Jani Nikula <jani.nikula@intel.com> Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com> Acked-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/9bd50fe508246a547cf6e7abfe44ed686a4b3e3a.1673958757.git.jani.nikula@intel.com
This commit is contained in:
parent
b1e7d8b008
commit
eee838e40a
3 changed files with 33 additions and 29 deletions
|
@ -6,9 +6,10 @@
|
|||
#include <linux/pci.h>
|
||||
#include <linux/vgaarb.h>
|
||||
|
||||
#include <drm/i915_drm.h>
|
||||
#include <video/vga.h>
|
||||
|
||||
#include "soc/intel_gmch.h"
|
||||
|
||||
#include "i915_drv.h"
|
||||
#include "i915_reg.h"
|
||||
#include "intel_de.h"
|
||||
|
@ -98,39 +99,12 @@ void intel_vga_reset_io_mem(struct drm_i915_private *i915)
|
|||
vga_put(pdev, VGA_RSRC_LEGACY_IO);
|
||||
}
|
||||
|
||||
static int
|
||||
intel_vga_set_state(struct drm_i915_private *i915, bool enable_decode)
|
||||
{
|
||||
unsigned int reg = DISPLAY_VER(i915) >= 6 ? SNB_GMCH_CTRL : INTEL_GMCH_CTRL;
|
||||
u16 gmch_ctrl;
|
||||
|
||||
if (pci_read_config_word(i915->gmch.pdev, reg, &gmch_ctrl)) {
|
||||
drm_err(&i915->drm, "failed to read control word\n");
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
if (!!(gmch_ctrl & INTEL_GMCH_VGA_DISABLE) == !enable_decode)
|
||||
return 0;
|
||||
|
||||
if (enable_decode)
|
||||
gmch_ctrl &= ~INTEL_GMCH_VGA_DISABLE;
|
||||
else
|
||||
gmch_ctrl |= INTEL_GMCH_VGA_DISABLE;
|
||||
|
||||
if (pci_write_config_word(i915->gmch.pdev, reg, gmch_ctrl)) {
|
||||
drm_err(&i915->drm, "failed to write control word\n");
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static unsigned int
|
||||
intel_vga_set_decode(struct pci_dev *pdev, bool enable_decode)
|
||||
{
|
||||
struct drm_i915_private *i915 = pdev_to_i915(pdev);
|
||||
|
||||
intel_vga_set_state(i915, enable_decode);
|
||||
intel_gmch_vga_set_state(i915, enable_decode);
|
||||
|
||||
if (enable_decode)
|
||||
return VGA_RSRC_LEGACY_IO | VGA_RSRC_LEGACY_MEM |
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
#include <linux/pnp.h>
|
||||
|
||||
#include <drm/drm_managed.h>
|
||||
#include <drm/i915_drm.h>
|
||||
|
||||
#include "i915_drv.h"
|
||||
#include "intel_gmch.h"
|
||||
|
@ -142,3 +143,29 @@ void intel_gmch_bar_teardown(struct drm_i915_private *i915)
|
|||
if (i915->gmch.mch_res.start)
|
||||
release_resource(&i915->gmch.mch_res);
|
||||
}
|
||||
|
||||
int intel_gmch_vga_set_state(struct drm_i915_private *i915, bool enable_decode)
|
||||
{
|
||||
unsigned int reg = DISPLAY_VER(i915) >= 6 ? SNB_GMCH_CTRL : INTEL_GMCH_CTRL;
|
||||
u16 gmch_ctrl;
|
||||
|
||||
if (pci_read_config_word(i915->gmch.pdev, reg, &gmch_ctrl)) {
|
||||
drm_err(&i915->drm, "failed to read control word\n");
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
if (!!(gmch_ctrl & INTEL_GMCH_VGA_DISABLE) == !enable_decode)
|
||||
return 0;
|
||||
|
||||
if (enable_decode)
|
||||
gmch_ctrl &= ~INTEL_GMCH_VGA_DISABLE;
|
||||
else
|
||||
gmch_ctrl |= INTEL_GMCH_VGA_DISABLE;
|
||||
|
||||
if (pci_write_config_word(i915->gmch.pdev, reg, gmch_ctrl)) {
|
||||
drm_err(&i915->drm, "failed to write control word\n");
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -6,10 +6,13 @@
|
|||
#ifndef __INTEL_GMCH_H__
|
||||
#define __INTEL_GMCH_H__
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
struct drm_i915_private;
|
||||
|
||||
int intel_gmch_bridge_setup(struct drm_i915_private *i915);
|
||||
void intel_gmch_bar_setup(struct drm_i915_private *i915);
|
||||
void intel_gmch_bar_teardown(struct drm_i915_private *i915);
|
||||
int intel_gmch_vga_set_state(struct drm_i915_private *i915, bool enable_decode);
|
||||
|
||||
#endif /* __INTEL_GMCH_H__ */
|
||||
|
|
Loading…
Reference in a new issue