> -----Original Message-----
> From: Murthy, Arun R <[email protected]>
> Sent: Wednesday, October 4, 2023 12:13 PM
> To: Shankar, Uma <[email protected]>; [email protected]
> Cc: Nikula, Jani <[email protected]>
> Subject: RE: [Intel-gfx] [v4] drm/i915/display: Created exclusive version of 
> vga
> decode setup
> 
> 
> > -----Original Message-----
> > From: Intel-gfx <[email protected]> On Behalf Of
> > Uma Shankar
> > Sent: Friday, September 29, 2023 1:13 PM
> > To: [email protected]
> > Cc: Nikula, Jani <[email protected]>
> > Subject: [Intel-gfx] [v4] drm/i915/display: Created exclusive version
> > of vga decode setup
> >
> > Current vga arbiter implementation in i915 needs a re-design.
> > The current approach would cause real problems if anyone actually
> > needs to talk another GPU using legacy VGA resources.
> >
> > The main issue is that X becomes a slideshow if it thinks there are
> > multiple GPUs that have VGA decoding enabled as it insists on
> > adjusting the VGA routing pretty much for every little operation involving 
> > any of
> the GPUs.
> >
> > The cleanup will be planned for i915. Meanwhile to focus on Xe
> > upstreaming and have a cleaner separation, the said functionality is
> > being moved to a different file exclusive for i915. Xe driver will
> > re-use rest of the display code from i915.
> >
> > v2: Addressed Jani Nikula's review comments.
> >
> > v3: Dropped a duplicate function (Jani)
> >
> > v4: Updated commit message with reasoning as sugested by Ville.
> >
> > Signed-off-by: Uma Shankar <[email protected]>
> 
> Reviewed-by: Arun R Murthy <[email protected]>

Thanks Arun, Ville and Jani for the reviews.
Pushed the change to drm-intel-next.

Will create a follow-up internal task for vga cleanup and handling as suggested 
by Ville.

Regards,
Uma Shankar

> Thanks and Regards,
> Arun R Murthy
> --------------------
> > ---
> >  drivers/gpu/drm/i915/display/intel_vga.c | 18 +-----------------
> >  drivers/gpu/drm/i915/soc/intel_gmch.c    | 14 ++++++++++++++
> >  drivers/gpu/drm/i915/soc/intel_gmch.h    |  2 ++
> >  3 files changed, 17 insertions(+), 17 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/i915/display/intel_vga.c
> > b/drivers/gpu/drm/i915/display/intel_vga.c
> > index 286a0bdd28c6..4b98833bfa8c 100644
> > --- a/drivers/gpu/drm/i915/display/intel_vga.c
> > +++ b/drivers/gpu/drm/i915/display/intel_vga.c
> > @@ -3,11 +3,9 @@
> >   * Copyright © 2019 Intel Corporation
> >   */
> >
> > -#include <linux/pci.h>
> >  #include <linux/vgaarb.h>
> >
> >  #include <video/vga.h>
> > -
> >  #include "soc/intel_gmch.h"
> >
> >  #include "i915_drv.h"
> > @@ -99,20 +97,6 @@ void intel_vga_reset_io_mem(struct drm_i915_private
> > *i915)
> >     vga_put(pdev, VGA_RSRC_LEGACY_IO);
> >  }
> >
> > -static unsigned int
> > -intel_vga_set_decode(struct pci_dev *pdev, bool enable_decode) -{
> > -   struct drm_i915_private *i915 = pdev_to_i915(pdev);
> > -
> > -   intel_gmch_vga_set_state(i915, enable_decode);
> > -
> > -   if (enable_decode)
> > -           return VGA_RSRC_LEGACY_IO | VGA_RSRC_LEGACY_MEM |
> > -                  VGA_RSRC_NORMAL_IO | VGA_RSRC_NORMAL_MEM;
> > -   else
> > -           return VGA_RSRC_NORMAL_IO | VGA_RSRC_NORMAL_MEM;
> > -}
> > -
> >  int intel_vga_register(struct drm_i915_private *i915)  {
> >
> > @@ -127,7 +111,7 @@ int intel_vga_register(struct drm_i915_private *i915)
> >      * then we do not take part in VGA arbitration and the
> >      * vga_client_register() fails with -ENODEV.
> >      */
> > -   ret = vga_client_register(pdev, intel_vga_set_decode);
> > +   ret = vga_client_register(pdev, intel_gmch_vga_set_decode);
> >     if (ret && ret != -ENODEV)
> >             return ret;
> >
> > diff --git a/drivers/gpu/drm/i915/soc/intel_gmch.c
> > b/drivers/gpu/drm/i915/soc/intel_gmch.c
> > index 49c7fb16e934..f32e9f78770a 100644
> > --- a/drivers/gpu/drm/i915/soc/intel_gmch.c
> > +++ b/drivers/gpu/drm/i915/soc/intel_gmch.c
> > @@ -5,6 +5,7 @@
> >
> >  #include <linux/pci.h>
> >  #include <linux/pnp.h>
> > +#include <linux/vgaarb.h>
> >
> >  #include <drm/drm_managed.h>
> >  #include <drm/i915_drm.h>
> > @@ -167,3 +168,16 @@ int intel_gmch_vga_set_state(struct
> > drm_i915_private *i915, bool enable_decode)
> >
> >     return 0;
> >  }
> > +
> > +unsigned int intel_gmch_vga_set_decode(struct pci_dev *pdev, bool
> > +enable_decode) {
> > +   struct drm_i915_private *i915 = pdev_to_i915(pdev);
> > +
> > +   intel_gmch_vga_set_state(i915, enable_decode);
> > +
> > +   if (enable_decode)
> > +           return VGA_RSRC_LEGACY_IO | VGA_RSRC_LEGACY_MEM |
> > +                  VGA_RSRC_NORMAL_IO | VGA_RSRC_NORMAL_MEM;
> > +   else
> > +           return VGA_RSRC_NORMAL_IO | VGA_RSRC_NORMAL_MEM; }
> > diff --git a/drivers/gpu/drm/i915/soc/intel_gmch.h
> > b/drivers/gpu/drm/i915/soc/intel_gmch.h
> > index d0133eedc720..23be2d113afd 100644
> > --- a/drivers/gpu/drm/i915/soc/intel_gmch.h
> > +++ b/drivers/gpu/drm/i915/soc/intel_gmch.h
> > @@ -8,11 +8,13 @@
> >
> >  #include <linux/types.h>
> >
> > +struct pci_dev;
> >  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);
> > +unsigned int intel_gmch_vga_set_decode(struct pci_dev *pdev, bool
> > +enable_decode);
> >
> >  #endif /* __INTEL_GMCH_H__ */
> > --
> > 2.42.0

Reply via email to