intel-gfx.lists.freedesktop.org archive mirror
 help / color / mirror / Atom feed
From: Jani Nikula <jani.nikula@linux.intel.com>
To: Ville Syrjala <ville.syrjala@linux.intel.com>,
	intel-gfx@lists.freedesktop.org
Cc: intel-xe@lists.freedesktop.org
Subject: Re: [PATCH 12/19] drm/i915/vga: Introduce intel_vga_{read,write}()
Date: Tue, 09 Dec 2025 12:52:07 +0200	[thread overview]
Message-ID: <d19af77c05c8e56ba3d450e21f5e77379ed9e51f@intel.com> (raw)
In-Reply-To: <20251208182637.334-13-ville.syrjala@linux.intel.com>

On Mon, 08 Dec 2025, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> VGA register are rather special since they either get accessed
> via the global IO addresses, or possibly through MMIO on
> pre-g4x platforms. Wrap all VGA register accesses in
> intel_vga_{read,write}() to make it obvious where they get
> accessed.
>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>

Reviewed-by: Jani Nikula <jani.nikula@intel.com>

> ---
>  drivers/gpu/drm/i915/display/intel_crt.c      |  6 +++--
>  drivers/gpu/drm/i915/display/intel_crt_regs.h |  2 --
>  drivers/gpu/drm/i915/display/intel_vga.c      | 27 +++++++++++++++----
>  drivers/gpu/drm/i915/display/intel_vga.h      |  3 +++
>  4 files changed, 29 insertions(+), 9 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_crt.c b/drivers/gpu/drm/i915/display/intel_crt.c
> index 5f9a03877ea9..dedc26f6a2b2 100644
> --- a/drivers/gpu/drm/i915/display/intel_crt.c
> +++ b/drivers/gpu/drm/i915/display/intel_crt.c
> @@ -33,6 +33,7 @@
>  #include <drm/drm_edid.h>
>  #include <drm/drm_print.h>
>  #include <drm/drm_probe_helper.h>
> +#include <video/vga.h>
>  
>  #include "intel_connector.h"
>  #include "intel_crt.h"
> @@ -55,6 +56,7 @@
>  #include "intel_pch_display.h"
>  #include "intel_pch_refclk.h"
>  #include "intel_pfit.h"
> +#include "intel_vga.h"
>  
>  /* Here's the desired hotplug mode */
>  #define ADPA_HOTPLUG_BITS (ADPA_CRT_HOTPLUG_ENABLE |			\
> @@ -736,7 +738,7 @@ intel_crt_load_detect(struct intel_crt *crt, enum pipe pipe)
>  		 * border color for Color info.
>  		 */
>  		intel_crtc_wait_for_next_vblank(intel_crtc_for_pipe(display, pipe));
> -		st00 = intel_de_read8(display, _VGA_MSR_WRITE);
> +		st00 = intel_vga_read(display, VGA_MIS_W, true);
>  		status = ((st00 & (1 << 4)) != 0) ?
>  			connector_status_connected :
>  			connector_status_disconnected;
> @@ -784,7 +786,7 @@ intel_crt_load_detect(struct intel_crt *crt, enum pipe pipe)
>  		do {
>  			count++;
>  			/* Read the ST00 VGA status register */
> -			st00 = intel_de_read8(display, _VGA_MSR_WRITE);
> +			st00 = intel_vga_read(display, VGA_MIS_W, true);
>  			if (st00 & (1 << 4))
>  				detect++;
>  		} while ((intel_de_read(display, PIPEDSL(display, pipe)) == dsl));
> diff --git a/drivers/gpu/drm/i915/display/intel_crt_regs.h b/drivers/gpu/drm/i915/display/intel_crt_regs.h
> index 571a67ae9afa..9a93020b9a7e 100644
> --- a/drivers/gpu/drm/i915/display/intel_crt_regs.h
> +++ b/drivers/gpu/drm/i915/display/intel_crt_regs.h
> @@ -45,6 +45,4 @@
>  #define   ADPA_VSYNC_ACTIVE_HIGH		REG_BIT(4)
>  #define   ADPA_HSYNC_ACTIVE_HIGH		REG_BIT(3)
>  
> -#define _VGA_MSR_WRITE _MMIO(0x3c2)
> -
>  #endif /* __INTEL_CRT_REGS_H__ */
> diff --git a/drivers/gpu/drm/i915/display/intel_vga.c b/drivers/gpu/drm/i915/display/intel_vga.c
> index e51451966f72..c1942520c765 100644
> --- a/drivers/gpu/drm/i915/display/intel_vga.c
> +++ b/drivers/gpu/drm/i915/display/intel_vga.c
> @@ -140,6 +140,22 @@ static void intel_vga_put(struct intel_display *display, bool io_decode)
>  		vga_put(pdev, VGA_RSRC_LEGACY_IO);
>  }
>  
> +u8 intel_vga_read(struct intel_display *display, u16 reg, bool mmio)
> +{
> +	if (mmio)
> +		return intel_de_read8(display, _MMIO(reg));
> +	else
> +		return inb(reg);
> +}
> +
> +static void intel_vga_write(struct intel_display *display, u16 reg, u8 val, bool mmio)
> +{
> +	if (mmio)
> +		intel_de_write8(display, _MMIO(reg), val);
> +	else
> +		outb(val, reg);
> +}
> +
>  /* Disable the VGA plane that we never use */
>  void intel_vga_disable(struct intel_display *display)
>  {
> @@ -193,11 +209,12 @@ void intel_vga_disable(struct intel_display *display)
>  
>  	drm_WARN_ON(display->drm, !intel_pci_has_vga_io_decode(pdev));
>  
> -	outb(0x01, VGA_SEQ_I);
> -	sr1 = inb(VGA_SEQ_D);
> -	outb(sr1 | VGA_SR01_SCREEN_OFF, VGA_SEQ_D);
> +	intel_vga_write(display, VGA_SEQ_I, 0x01, false);
> +	sr1 = intel_vga_read(display, VGA_SEQ_D, false);
> +	sr1 |= VGA_SR01_SCREEN_OFF;
> +	intel_vga_write(display, VGA_SEQ_D, sr1, false);
>  
> -	msr = inb(VGA_MIS_R);
> +	msr = intel_vga_read(display, VGA_MIS_R, false);
>  	/*
>  	 * Always disable VGA memory decode for iGPU so that
>  	 * intel_vga_set_decode() doesn't need to access VGA registers.
> @@ -217,7 +234,7 @@ void intel_vga_disable(struct intel_display *display)
>  	 * RMbus NoClaim errors.
>  	 */
>  	msr &= ~VGA_MIS_COLOR;
> -	outb(msr, VGA_MIS_W);
> +	intel_vga_write(display, VGA_MIS_W, msr, false);
>  
>  	intel_vga_put(display, io_decode);
>  
> diff --git a/drivers/gpu/drm/i915/display/intel_vga.h b/drivers/gpu/drm/i915/display/intel_vga.h
> index 80084265c6cd..72131cb536cd 100644
> --- a/drivers/gpu/drm/i915/display/intel_vga.h
> +++ b/drivers/gpu/drm/i915/display/intel_vga.h
> @@ -6,8 +6,11 @@
>  #ifndef __INTEL_VGA_H__
>  #define __INTEL_VGA_H__
>  
> +#include <linux/types.h>
> +
>  struct intel_display;
>  
> +u8 intel_vga_read(struct intel_display *display, u16 reg, bool mmio);
>  void intel_vga_reset_io_mem(struct intel_display *display);
>  void intel_vga_disable(struct intel_display *display);
>  void intel_vga_register(struct intel_display *display);

-- 
Jani Nikula, Intel

  reply	other threads:[~2025-12-09 10:52 UTC|newest]

Thread overview: 51+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-12-08 18:26 [PATCH 00/19] drm/i915/vga: Try to sort out the VGA decode mess Ville Syrjala
2025-12-08 18:26 ` [PATCH 01/19] drm/i915/vga: Register vgaarb client later Ville Syrjala
2025-12-09 10:23   ` Jani Nikula
2025-12-08 18:26 ` [PATCH 02/19] drm/i915/vga: Get rid of intel_vga_reset_io_mem() Ville Syrjala
2025-12-09 10:26   ` Jani Nikula
2025-12-08 18:26 ` [PATCH 03/19] drm/i915/power: Remove i915_power_well_desc::has_vga Ville Syrjala
2025-12-09 10:27   ` Jani Nikula
2025-12-08 18:26 ` [PATCH 04/19] drm/i915/vga: Extract intel_gmch_ctrl_reg() Ville Syrjala
2025-12-09 10:28   ` Jani Nikula
2025-12-08 18:26 ` [PATCH 05/19] drm/i915/vga: Don't touch VGA registers if VGA decode is fully disabled Ville Syrjala
2025-12-09 10:29   ` Jani Nikula
2025-12-08 18:26 ` [PATCH 06/19] drm/i915/vga: Clean up VGA registers even if VGA plane is disabled Ville Syrjala
2025-12-09 10:32   ` Jani Nikula
2025-12-08 18:26 ` [PATCH 07/19] drm/i915/vga: Avoid VGA arbiter during intel_vga_disable() for iGPUs Ville Syrjala
2025-12-09 10:35   ` Jani Nikula
2025-12-09 12:17     ` Ville Syrjälä
2025-12-08 18:26 ` [PATCH 08/19] drm/i915/vga: Stop trying to use GMCH_CTRL for VGA decode control Ville Syrjala
2025-12-09 10:39   ` Jani Nikula
2025-12-08 18:26 ` [PATCH 09/19] drm/i915/vga: Assert that VGA register accesses are going to the right GPU Ville Syrjala
2025-12-09 10:40   ` Jani Nikula
2025-12-08 18:26 ` [PATCH 10/19] drm/i915/de: Simplify intel_de_read8() Ville Syrjala
2025-12-09 10:47   ` Jani Nikula
2025-12-08 18:26 ` [PATCH 11/19] drm/i915/de: Add intel_de_write8() Ville Syrjala
2025-12-09 10:49   ` Jani Nikula
2025-12-08 18:26 ` [PATCH 12/19] drm/i915/vga: Introduce intel_vga_{read,write}() Ville Syrjala
2025-12-09 10:52   ` Jani Nikula [this message]
2025-12-08 18:26 ` [PATCH 13/19] drm/i915/vga: Use MMIO for VGA registers on pre-g4x Ville Syrjala
2025-12-09 10:53   ` Jani Nikula
2025-12-08 18:26 ` [PATCH 14/19] video/vga: Add VGA_IS0_R Ville Syrjala
2025-12-08 21:07   ` kernel test robot
2025-12-08 21:18   ` kernel test robot
2025-12-08 22:22   ` kernel test robot
2025-12-09  7:55   ` [PATCH v2 " Ville Syrjala
2025-12-09 10:55     ` Jani Nikula
2025-12-10 14:13   ` [PATCH " kernel test robot
2025-12-10 14:24   ` kernel test robot
2025-12-08 18:26 ` [PATCH 15/19] drm/i915/crt: Use IS0_R instead of VGA_MIS_W Ville Syrjala
2025-12-09 10:56   ` Jani Nikula
2025-12-08 18:26 ` [PATCH 16/19] drm/i915/crt: Extract intel_crt_sense_above_threshold() Ville Syrjala
2025-12-09 10:57   ` Jani Nikula
2025-12-08 18:26 ` [PATCH 17/19] drm/i915: Get rid of the INTEL_GMCH_CTRL alias Ville Syrjala
2025-12-09 10:58   ` Jani Nikula
2025-12-08 18:26 ` [PATCH 18/19] drm/i915: Clean up PCI config space reg defines Ville Syrjala
2025-12-09 11:00   ` Jani Nikula
2025-12-09 11:01   ` Jani Nikula
2025-12-08 18:26 ` [PATCH 19/19] drm/i915: Document the GMCH_CTRL register a bit Ville Syrjala
2025-12-09 11:03   ` Jani Nikula
2025-12-08 19:11 ` ✗ Fi.CI.BUILD: failure for drm/i915/vga: Try to sort out the VGA decode mess Patchwork
2025-12-09 11:31 ` ✗ i915.CI.BAT: failure for drm/i915/vga: Try to sort out the VGA decode mess (rev2) Patchwork
2025-12-10 19:14 ` ✓ i915.CI.BAT: success for drm/i915/vga: Try to sort out the VGA decode mess (rev3) Patchwork
2025-12-11  3:23 ` ✓ i915.CI.Full: " Patchwork

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=d19af77c05c8e56ba3d450e21f5e77379ed9e51f@intel.com \
    --to=jani.nikula@linux.intel.com \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=intel-xe@lists.freedesktop.org \
    --cc=ville.syrjala@linux.intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).