[PATCH] Update fbdev fb_fix_screeninfo

2010-12-23 Thread James Simmons

If you change the color depth via fbset or some other framebuffer aware 
userland application struct fb_fix_screeninfo is not updated to this new
information. This patch fixes this issue. Also the function is changed to
just pass in struct drm_framebuffer so in the future we could use more 
fields. I'm hoping some day fix-smem* could be set here :-)

Signed-off-by: James Simmons jsimm...@infradead.org

diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c
index 5c4f9b9..0307d60 100644
--- a/drivers/gpu/drm/drm_fb_helper.c
+++ b/drivers/gpu/drm/drm_fb_helper.c
@@ -607,6 +607,25 @@ void drm_fb_helper_fini(struct drm_fb_helper *fb_helper)
 }
 EXPORT_SYMBOL(drm_fb_helper_fini);
 
+void drm_fb_helper_fill_fix(struct fb_info *info, struct drm_framebuffer *fb)
+{
+   info-fix.type = FB_TYPE_PACKED_PIXELS;
+   info-fix.visual = fb-depth == 8 ? FB_VISUAL_PSEUDOCOLOR :
+   FB_VISUAL_TRUECOLOR;
+   info-fix.mmio_start = 0;
+   info-fix.mmio_len = 0;
+   info-fix.type_aux = 0;
+   info-fix.xpanstep = 1; /* doing it in hw */
+   info-fix.ypanstep = 1; /* doing it in hw */
+   info-fix.ywrapstep = 0;
+   info-fix.accel = FB_ACCEL_NONE;
+   info-fix.type_aux = 0;
+
+   info-fix.line_length = fb-pitch;
+   return;
+}
+EXPORT_SYMBOL(drm_fb_helper_fill_fix);
+
 static int setcolreg(struct drm_crtc *crtc, u16 red, u16 green,
 u16 blue, u16 regno, struct fb_info *info)
 {
@@ -816,6 +835,7 @@ int drm_fb_helper_set_par(struct fb_info *info)
mutex_unlock(dev-mode_config.mutex);
return ret;
}
+   drm_fb_helper_fill_fix(info, fb_helper-fb);
}
mutex_unlock(dev-mode_config.mutex);
 
@@ -953,6 +973,7 @@ int drm_fb_helper_single_fb_probe(struct drm_fb_helper 
*fb_helper,
 
if (new_fb) {
info-var.pixclock = 0;
+   drm_fb_helper_fill_fix(info, fb_helper-fb);
if (register_framebuffer(info)  0) {
return -EINVAL;
}
@@ -979,26 +1000,6 @@ int drm_fb_helper_single_fb_probe(struct drm_fb_helper 
*fb_helper,
 }
 EXPORT_SYMBOL(drm_fb_helper_single_fb_probe);
 
-void drm_fb_helper_fill_fix(struct fb_info *info, uint32_t pitch,
-   uint32_t depth)
-{
-   info-fix.type = FB_TYPE_PACKED_PIXELS;
-   info-fix.visual = depth == 8 ? FB_VISUAL_PSEUDOCOLOR :
-   FB_VISUAL_TRUECOLOR;
-   info-fix.mmio_start = 0;
-   info-fix.mmio_len = 0;
-   info-fix.type_aux = 0;
-   info-fix.xpanstep = 1; /* doing it in hw */
-   info-fix.ypanstep = 1; /* doing it in hw */
-   info-fix.ywrapstep = 0;
-   info-fix.accel = FB_ACCEL_NONE;
-   info-fix.type_aux = 0;
-
-   info-fix.line_length = pitch;
-   return;
-}
-EXPORT_SYMBOL(drm_fb_helper_fill_fix);
-
 void drm_fb_helper_fill_var(struct fb_info *info, struct drm_fb_helper 
*fb_helper,
uint32_t fb_width, uint32_t fb_height)
 {
diff --git a/drivers/gpu/drm/i915/intel_fb.c b/drivers/gpu/drm/i915/intel_fb.c
index 67738f3..701e830 100644
--- a/drivers/gpu/drm/i915/intel_fb.c
+++ b/drivers/gpu/drm/i915/intel_fb.c
@@ -150,7 +150,6 @@ static int intelfb_create(struct intel_fbdev *ifbdev,
 
 // memset(info-screen_base, 0, size);
 
-   drm_fb_helper_fill_fix(info, fb-pitch, fb-depth);
drm_fb_helper_fill_var(info, ifbdev-helper, sizes-fb_width, 
sizes-fb_height);
 
info-pixmap.size = 64*1024;
diff --git a/drivers/gpu/drm/nouveau/nouveau_fbcon.c 
b/drivers/gpu/drm/nouveau/nouveau_fbcon.c
index 6d56a54..a26d047 100644
--- a/drivers/gpu/drm/nouveau/nouveau_fbcon.c
+++ b/drivers/gpu/drm/nouveau/nouveau_fbcon.c
@@ -359,7 +359,6 @@ nouveau_fbcon_create(struct nouveau_fbdev *nfbdev,
info-screen_base = nvbo_kmap_obj_iovirtual(nouveau_fb-nvbo);
info-screen_size = size;
 
-   drm_fb_helper_fill_fix(info, fb-pitch, fb-depth);
drm_fb_helper_fill_var(info, nfbdev-helper, sizes-fb_width, 
sizes-fb_height);
 
/* Set aperture base/size for vesafb takeover */
diff --git a/drivers/gpu/drm/radeon/radeon_fb.c 
b/drivers/gpu/drm/radeon/radeon_fb.c
index f7b4762..80c1c7a 100644
--- a/drivers/gpu/drm/radeon/radeon_fb.c
+++ b/drivers/gpu/drm/radeon/radeon_fb.c
@@ -225,8 +225,6 @@ static int radeonfb_create(struct radeon_fbdev *rfbdev,
 
strcpy(info-fix.id, radeondrmfb);
 
-   drm_fb_helper_fill_fix(info, fb-pitch, fb-depth);
-
info-flags = FBINFO_DEFAULT | FBINFO_CAN_FORCE_OUTPUT;
info-fbops = radeonfb_ops;
 
diff --git a/include/drm/drm_fb_helper.h b/include/drm/drm_fb_helper.h
index f22e7fe..aac27bd 100644
--- a/include/drm/drm_fb_helper.h
+++ b/include/drm/drm_fb_helper.h
@@ -121,9 +121,6 @@ int drm_fb_helper_setcolreg(unsigned regno,
 void drm_fb_helper_restore(void);
 void drm_fb_helper_fill_var(struct fb_info *info, struct drm_fb_helper 
*fb_helper,

Re: [PATCH 1/3] fb: fix overlapping test off-by-one.

2010-12-23 Thread Paul Mundt
On Tue, Dec 21, 2010 at 08:29:03AM +0100, Michel D?nzer wrote:
 On Die, 2010-12-21 at 11:41 +1000, Dave Airlie wrote: 
  From: Dave Airlie airl...@redhat.com
  
  On my system with a radeon x2, the first GPU was not overlapping vesa
  but the test decided it was.
  
  Signed-off-by: Dave Airlie airl...@redhat.com
  ---
   drivers/video/fbmem.c |2 +-
   1 files changed, 1 insertions(+), 1 deletions(-)
  
  diff --git a/drivers/video/fbmem.c b/drivers/video/fbmem.c
  index 0e6aa3d..4ac1201 100644
  --- a/drivers/video/fbmem.c
  +++ b/drivers/video/fbmem.c
  @@ -1458,7 +1458,7 @@ static bool apertures_overlap(struct aperture *gen, 
  struct aperture *hw)
  if (gen-base == hw-base)
  return true;
  /* is the generic aperture base inside the hw base-hw base+size */
  -   if (gen-base  hw-base  gen-base = hw-base + hw-size)
  +   if (gen-base  hw-base  gen-base  hw-base + hw-size)
 
 Good catch.
 
 Reviewed-by: Michel D??nzer mic...@daenzer.net
 
I'll queue this for .37, thanks.

--
Learn how Oracle Real Application Clusters (RAC) One Node allows customers
to consolidate database storage, standardize their database environment, and, 
should the need arise, upgrade to a full multi-node Oracle RAC database 
without downtime or disruption
http://p.sf.net/sfu/oracle-sfdevnl
--
___
Dri-devel mailing list
Dri-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/dri-devel


Re: [PATCH 3/3] fbcon: fix situation where fbcon gets deinitialised and can't reinit.

2010-12-23 Thread Paul Mundt
On Tue, Dec 21, 2010 at 11:41:17AM +1000, Dave Airlie wrote:
 From: Dave Airlie airl...@redhat.com
 
 Situation as follow:
 2 GPUs + vesafb + kms.
 
 GPU 1 is primary, vesafb binds to it as fb0
 radeon loads
 GPU 0 loads as fb1
 GPU 1 loads, vesafb gets kicked off which causes fb0 to unbind
 console, which causes the dummy console to rebind.
 
 this means fbcon_deinit gets called, which calls fbcon_exit
 since the console isn't bound anymore and we set fbcon_has_exited.
 
 GPU 1 creates a new fb0 which is primary and we want to be console.
 fbcon_fb_registered gets called sets the primary up and calls set_con2fb_map,
 however as fbcon_has_exited is set nothing further ever happens.
 
 This patch bypasses the fbcon_has_exited and checks if the console is unbound,
 if its unbound it calls the fbcon_takeover which calls the vt layer to
 call the fbcon_startup method and everthing works.
 
 Signed-off-by: Dave Airlie airl...@redhat.com

This one looks fine, too. This does presumably depend on the change in
behaviour introduced by your 2/3 patch though. I'll hold off on applying
this until that one gets acked, then we can do this either for the next
-rc or for .38.

--
Learn how Oracle Real Application Clusters (RAC) One Node allows customers
to consolidate database storage, standardize their database environment, and, 
should the need arise, upgrade to a full multi-node Oracle RAC database 
without downtime or disruption
http://p.sf.net/sfu/oracle-sfdevnl
--
___
Dri-devel mailing list
Dri-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/dri-devel