Re: [Intel-gfx] [PATCH 05/13] drm/i915: Wrap the preallocated BIOS framebuffer and preserve for KMS fbcon

2013-03-26 Thread Jesse Barnes
On Wed, 20 Mar 2013 14:31:38 +0200
Imre Deak imre.d...@intel.com wrote:

  +   offset = I915_READ(DSPSURF(plane));
  +   } else
  +   offset = I915_READ(DSPADDR(plane));
 
 Nitpick: the second branch should be inside { } too.

Fixed.

 
  +   if (!obj_offset)
  +   obj_offset = offset;
  +
  +   pitch = I915_READ(DSPSTRIDE(plane));
  +   if (mode_cmd.pitches[0] == 0)
  +   mode_cmd.pitches[0] = pitch;
  +
  +   if (offset != obj_offset || pitch != mode_cmd.pitches[0]) {
  +   DRM_DEBUG_KMS(multiple pipe setup not in clone mode, 
  sjipping\n);
 
 s/sjipping/skipping/

Fixed.

  +   list_for_each_entry(crtc, dev-mode_config.crtc_list, head) {
  +   int ret;
  +
  +   if ((active  (1  to_intel_crtc(crtc)-pipe)) == 0)
  +   continue;
  +
  +   ret = intel_pin_and_fence_fb_obj(dev, obj, NULL);
  +   if (ret)
  +   goto out_unref_obj;
 
 Since fb will be destroyed, is it ok to leave references to it in
 crtc-fb set in previous iterations?

It should only fail the first time (if ever).  I've commented it.  I
think we need to keep it in the loop so that each crtc has a ref on the
fb right?

  ret = drm_fb_helper_init(dev, ifbdev-helper,
  -dev_priv-num_pipe,
  -INTELFB_CONN_LIMIT);
  +   dev_priv-num_pipe,
  +   INTELFB_CONN_LIMIT);
 
 Unnecessary w/s change.

Things look correct here, maybe I've fixed it or made the tabs sensible.

Thanks,
-- 
Jesse Barnes, Intel Open Source Technology Center
___
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx


Re: [Intel-gfx] [PATCH 05/13] drm/i915: Wrap the preallocated BIOS framebuffer and preserve for KMS fbcon

2013-03-20 Thread Imre Deak
On Tue, 2013-02-19 at 13:31 -0800, Jesse Barnes wrote:
 From: Chris Wilson ch...@chris-wilson.co.uk
 
 Signed-off-by: Chris Wilson ch...@chris-wilson.co.uk
 Signed-off-by: Jesse Barnes jbar...@virtuousgeek.org
 ---
  drivers/gpu/drm/i915/i915_dma.c  |8 +-
  drivers/gpu/drm/i915/i915_drv.h  |2 +-
  drivers/gpu/drm/i915/intel_display.c |   14 +-
  drivers/gpu/drm/i915/intel_drv.h |4 +
  drivers/gpu/drm/i915/intel_fb.c  |  305 
 +++---
  5 files changed, 306 insertions(+), 27 deletions(-)
 
 diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c
 index 4fa6beb..f2b7db7 100644
 --- a/drivers/gpu/drm/i915/i915_dma.c
 +++ b/drivers/gpu/drm/i915/i915_dma.c
 @@ -1273,6 +1273,7 @@ static const struct vga_switcheroo_client_ops 
 i915_switcheroo_ops = {
  static int i915_load_modeset_init(struct drm_device *dev)
  {
   struct drm_i915_private *dev_priv = dev-dev_private;
 + bool was_vga_enabled;
   int ret;
  
   ret = intel_parse_bios(dev);
 @@ -1309,7 +1310,11 @@ static int i915_load_modeset_init(struct drm_device 
 *dev)
  
   /* Important: The output setup functions called by modeset_init need
* working irqs for e.g. gmbus and dp aux transfers. */
 - intel_modeset_init(dev);
 + intel_modeset_init(dev, was_vga_enabled);
 +
 + /* Wrap existing BIOS mode configuration prior to GEM takeover */
 + if (!was_vga_enabled)
 + intel_fbdev_init_bios(dev);
  
   ret = i915_gem_init(dev);
   if (ret)
 @@ -1323,6 +1328,7 @@ static int i915_load_modeset_init(struct drm_device 
 *dev)
   /* FIXME: do pre/post-mode set stuff in core KMS code */
   dev-vblank_disable_allowed = 1;
  
 + /* Install a default KMS/GEM fbcon if we failed to wrap the BIOS fb */
   ret = intel_fbdev_init(dev);
   if (ret)
   goto cleanup_gem;
 diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
 index 9b5478f..30cf7e6 100644
 --- a/drivers/gpu/drm/i915/i915_drv.h
 +++ b/drivers/gpu/drm/i915/i915_drv.h
 @@ -1811,7 +1811,7 @@ static inline void intel_unregister_dsm_handler(void) { 
 return; }
  
  /* modesetting */
  extern void intel_modeset_init_hw(struct drm_device *dev);
 -extern void intel_modeset_init(struct drm_device *dev);
 +extern void intel_modeset_init(struct drm_device *dev, bool 
 *was_vga_enabled);
  extern void intel_modeset_gem_init(struct drm_device *dev);
  extern void intel_modeset_cleanup(struct drm_device *dev);
  extern int intel_modeset_vga_set_state(struct drm_device *dev, bool state);
 diff --git a/drivers/gpu/drm/i915/intel_display.c 
 b/drivers/gpu/drm/i915/intel_display.c
 index dc58b01..9793e66 100644
 --- a/drivers/gpu/drm/i915/intel_display.c
 +++ b/drivers/gpu/drm/i915/intel_display.c
 @@ -8735,12 +8735,17 @@ static void intel_init_quirks(struct drm_device *dev)
  }
  
  /* Disable the VGA plane that we never use */
 -static void i915_disable_vga(struct drm_device *dev)
 +static bool i915_disable_vga(struct drm_device *dev)
  {
   struct drm_i915_private *dev_priv = dev-dev_private;
 + bool was_enabled;
   u8 sr1;
   u32 vga_reg = i915_vgacntrl_reg(dev);
  
 + was_enabled = !(I915_READ(vga_reg)  VGA_DISP_DISABLE);
 + DRM_DEBUG_KMS(VGA output is currently %s\n,
 +   was_enabled ? enabled : disabled);
 +
   vga_get_uninterruptible(dev-pdev, VGA_RSRC_LEGACY_IO);
   outb(SR01, VGA_SR_INDEX);
   sr1 = inb(VGA_SR_DATA);
 @@ -8750,6 +8755,8 @@ static void i915_disable_vga(struct drm_device *dev)
  
   I915_WRITE(vga_reg, VGA_DISP_DISABLE);
   POSTING_READ(vga_reg);
 +
 + return was_enabled;
  }
  
  void intel_modeset_init_hw(struct drm_device *dev)
 @@ -8765,7 +8772,8 @@ void intel_modeset_init_hw(struct drm_device *dev)
   mutex_unlock(dev-struct_mutex);
  }
  
 -void intel_modeset_init(struct drm_device *dev)
 +void intel_modeset_init(struct drm_device *dev,
 + bool *was_vga_enabled)
  {
   struct drm_i915_private *dev_priv = dev-dev_private;
   int i, ret;
 @@ -8812,7 +8820,7 @@ void intel_modeset_init(struct drm_device *dev)
   intel_pch_pll_init(dev);
  
   /* Just disable it once at startup */
 - i915_disable_vga(dev);
 + *was_vga_enabled = i915_disable_vga(dev);
   intel_setup_outputs(dev);
  
   /* Just in case the BIOS is doing something questionable. */
 diff --git a/drivers/gpu/drm/i915/intel_drv.h 
 b/drivers/gpu/drm/i915/intel_drv.h
 index f93653d..9cf794f 100644
 --- a/drivers/gpu/drm/i915/intel_drv.h
 +++ b/drivers/gpu/drm/i915/intel_drv.h
 @@ -146,6 +146,8 @@ struct intel_fbdev {
   struct intel_framebuffer ifb;
   struct list_head fbdev_list;
   struct drm_display_mode *our_mode;
 + bool stolen;
 + int preferred_bpp;
  };
  
  struct intel_encoder {
 @@ -212,6 +214,7 @@ struct intel_crtc {
   enum plane plane;
   enum transcoder cpu_transcoder;
   u8 lut_r[256], 

[Intel-gfx] [PATCH 05/13] drm/i915: Wrap the preallocated BIOS framebuffer and preserve for KMS fbcon

2013-02-19 Thread Jesse Barnes
From: Chris Wilson ch...@chris-wilson.co.uk

Signed-off-by: Chris Wilson ch...@chris-wilson.co.uk
Signed-off-by: Jesse Barnes jbar...@virtuousgeek.org
---
 drivers/gpu/drm/i915/i915_dma.c  |8 +-
 drivers/gpu/drm/i915/i915_drv.h  |2 +-
 drivers/gpu/drm/i915/intel_display.c |   14 +-
 drivers/gpu/drm/i915/intel_drv.h |4 +
 drivers/gpu/drm/i915/intel_fb.c  |  305 +++---
 5 files changed, 306 insertions(+), 27 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c
index 4fa6beb..f2b7db7 100644
--- a/drivers/gpu/drm/i915/i915_dma.c
+++ b/drivers/gpu/drm/i915/i915_dma.c
@@ -1273,6 +1273,7 @@ static const struct vga_switcheroo_client_ops 
i915_switcheroo_ops = {
 static int i915_load_modeset_init(struct drm_device *dev)
 {
struct drm_i915_private *dev_priv = dev-dev_private;
+   bool was_vga_enabled;
int ret;
 
ret = intel_parse_bios(dev);
@@ -1309,7 +1310,11 @@ static int i915_load_modeset_init(struct drm_device *dev)
 
/* Important: The output setup functions called by modeset_init need
 * working irqs for e.g. gmbus and dp aux transfers. */
-   intel_modeset_init(dev);
+   intel_modeset_init(dev, was_vga_enabled);
+
+   /* Wrap existing BIOS mode configuration prior to GEM takeover */
+   if (!was_vga_enabled)
+   intel_fbdev_init_bios(dev);
 
ret = i915_gem_init(dev);
if (ret)
@@ -1323,6 +1328,7 @@ static int i915_load_modeset_init(struct drm_device *dev)
/* FIXME: do pre/post-mode set stuff in core KMS code */
dev-vblank_disable_allowed = 1;
 
+   /* Install a default KMS/GEM fbcon if we failed to wrap the BIOS fb */
ret = intel_fbdev_init(dev);
if (ret)
goto cleanup_gem;
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 9b5478f..30cf7e6 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -1811,7 +1811,7 @@ static inline void intel_unregister_dsm_handler(void) { 
return; }
 
 /* modesetting */
 extern void intel_modeset_init_hw(struct drm_device *dev);
-extern void intel_modeset_init(struct drm_device *dev);
+extern void intel_modeset_init(struct drm_device *dev, bool *was_vga_enabled);
 extern void intel_modeset_gem_init(struct drm_device *dev);
 extern void intel_modeset_cleanup(struct drm_device *dev);
 extern int intel_modeset_vga_set_state(struct drm_device *dev, bool state);
diff --git a/drivers/gpu/drm/i915/intel_display.c 
b/drivers/gpu/drm/i915/intel_display.c
index dc58b01..9793e66 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -8735,12 +8735,17 @@ static void intel_init_quirks(struct drm_device *dev)
 }
 
 /* Disable the VGA plane that we never use */
-static void i915_disable_vga(struct drm_device *dev)
+static bool i915_disable_vga(struct drm_device *dev)
 {
struct drm_i915_private *dev_priv = dev-dev_private;
+   bool was_enabled;
u8 sr1;
u32 vga_reg = i915_vgacntrl_reg(dev);
 
+   was_enabled = !(I915_READ(vga_reg)  VGA_DISP_DISABLE);
+   DRM_DEBUG_KMS(VGA output is currently %s\n,
+ was_enabled ? enabled : disabled);
+
vga_get_uninterruptible(dev-pdev, VGA_RSRC_LEGACY_IO);
outb(SR01, VGA_SR_INDEX);
sr1 = inb(VGA_SR_DATA);
@@ -8750,6 +8755,8 @@ static void i915_disable_vga(struct drm_device *dev)
 
I915_WRITE(vga_reg, VGA_DISP_DISABLE);
POSTING_READ(vga_reg);
+
+   return was_enabled;
 }
 
 void intel_modeset_init_hw(struct drm_device *dev)
@@ -8765,7 +8772,8 @@ void intel_modeset_init_hw(struct drm_device *dev)
mutex_unlock(dev-struct_mutex);
 }
 
-void intel_modeset_init(struct drm_device *dev)
+void intel_modeset_init(struct drm_device *dev,
+   bool *was_vga_enabled)
 {
struct drm_i915_private *dev_priv = dev-dev_private;
int i, ret;
@@ -8812,7 +8820,7 @@ void intel_modeset_init(struct drm_device *dev)
intel_pch_pll_init(dev);
 
/* Just disable it once at startup */
-   i915_disable_vga(dev);
+   *was_vga_enabled = i915_disable_vga(dev);
intel_setup_outputs(dev);
 
/* Just in case the BIOS is doing something questionable. */
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index f93653d..9cf794f 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -146,6 +146,8 @@ struct intel_fbdev {
struct intel_framebuffer ifb;
struct list_head fbdev_list;
struct drm_display_mode *our_mode;
+   bool stolen;
+   int preferred_bpp;
 };
 
 struct intel_encoder {
@@ -212,6 +214,7 @@ struct intel_crtc {
enum plane plane;
enum transcoder cpu_transcoder;
u8 lut_r[256], lut_g[256], lut_b[256];
+   bool mode_valid;
/*
 * Whether the crtc and the