Commit 375726d7 authored by Antonino A. Daplas's avatar Antonino A. Daplas Committed by Linus Torvalds

[PATCH] intelfb: Fix regression (blank display) from ioremap patch

- Workaround for the ioremap patch that produces a blank display on some
  chipsets
- Make hwcursor = 0 the default.  The hardware cursor does not work with all
  hardware.
Signed-off-by: default avatarAntonino Daplas <adaplas@pol.net>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent b2846dfa
...@@ -768,6 +768,7 @@ config FB_INTEL ...@@ -768,6 +768,7 @@ config FB_INTEL
select FB_CFB_FILLRECT select FB_CFB_FILLRECT
select FB_CFB_COPYAREA select FB_CFB_COPYAREA
select FB_CFB_IMAGEBLIT select FB_CFB_IMAGEBLIT
select FB_SOFT_CURSOR
help help
This driver supports the on-board graphics built in to the Intel This driver supports the on-board graphics built in to the Intel
830M/845G/852GM/855GM/865G chipsets. 830M/845G/852GM/855GM/865G chipsets.
......
...@@ -226,7 +226,7 @@ MODULE_DEVICE_TABLE(pci, intelfb_pci_table); ...@@ -226,7 +226,7 @@ MODULE_DEVICE_TABLE(pci, intelfb_pci_table);
static int accel = 1; static int accel = 1;
static int vram = 4; static int vram = 4;
static int hwcursor = 1; static int hwcursor = 0;
static int mtrr = 1; static int mtrr = 1;
static int fixed = 0; static int fixed = 0;
static int noinit = 0; static int noinit = 0;
...@@ -609,15 +609,9 @@ intelfb_pci_register(struct pci_dev *pdev, const struct pci_device_id *ent) ...@@ -609,15 +609,9 @@ intelfb_pci_register(struct pci_dev *pdev, const struct pci_device_id *ent)
dinfo->accel = 0; dinfo->accel = 0;
} }
if (MB(voffset) < stolen_size)
offset = (stolen_size >> 12);
else
offset = ROUND_UP_TO_PAGE(MB(voffset))/GTT_PAGE_SIZE;
/* Framebuffer parameters - Use all the stolen memory if >= vram */ /* Framebuffer parameters - Use all the stolen memory if >= vram */
if (ROUND_UP_TO_PAGE(stolen_size) >= ((offset << 12) + MB(vram))) { if (ROUND_UP_TO_PAGE(stolen_size) >= MB(vram)) {
dinfo->fb.size = ROUND_UP_TO_PAGE(stolen_size); dinfo->fb.size = ROUND_UP_TO_PAGE(stolen_size);
dinfo->fb.offset = 0;
dinfo->fbmem_gart = 0; dinfo->fbmem_gart = 0;
} else { } else {
dinfo->fb.size = MB(vram); dinfo->fb.size = MB(vram);
...@@ -648,6 +642,11 @@ intelfb_pci_register(struct pci_dev *pdev, const struct pci_device_id *ent) ...@@ -648,6 +642,11 @@ intelfb_pci_register(struct pci_dev *pdev, const struct pci_device_id *ent)
return -ENODEV; return -ENODEV;
} }
if (MB(voffset) < stolen_size)
offset = (stolen_size >> 12);
else
offset = ROUND_UP_TO_PAGE(MB(voffset))/GTT_PAGE_SIZE;
/* set the mem offsets - set them after the already used pages */ /* set the mem offsets - set them after the already used pages */
if (dinfo->accel) { if (dinfo->accel) {
dinfo->ring.offset = offset + gtt_info.current_memory; dinfo->ring.offset = offset + gtt_info.current_memory;
...@@ -662,10 +661,11 @@ intelfb_pci_register(struct pci_dev *pdev, const struct pci_device_id *ent) ...@@ -662,10 +661,11 @@ intelfb_pci_register(struct pci_dev *pdev, const struct pci_device_id *ent)
+ (dinfo->cursor.size >> 12); + (dinfo->cursor.size >> 12);
} }
/* Allocate memories (which aren't stolen) */
/* Map the fb and MMIO regions */ /* Map the fb and MMIO regions */
/* ioremap only up to the end of used aperture */ /* ioremap only up to the end of used aperture */
dinfo->aperture.virtual = (u8 __iomem *)ioremap_nocache dinfo->aperture.virtual = (u8 __iomem *)ioremap_nocache
(dinfo->aperture.physical, (dinfo->fb.offset << 12) (dinfo->aperture.physical, ((offset + dinfo->fb.offset) << 12)
+ dinfo->fb.size); + dinfo->fb.size);
if (!dinfo->aperture.virtual) { if (!dinfo->aperture.virtual) {
ERR_MSG("Cannot remap FB region.\n"); ERR_MSG("Cannot remap FB region.\n");
...@@ -682,7 +682,6 @@ intelfb_pci_register(struct pci_dev *pdev, const struct pci_device_id *ent) ...@@ -682,7 +682,6 @@ intelfb_pci_register(struct pci_dev *pdev, const struct pci_device_id *ent)
return -ENODEV; return -ENODEV;
} }
/* Allocate memories (which aren't stolen) */
if (dinfo->accel) { if (dinfo->accel) {
if (!(dinfo->gtt_ring_mem = if (!(dinfo->gtt_ring_mem =
agp_allocate_memory(bridge, dinfo->ring.size >> 12, agp_allocate_memory(bridge, dinfo->ring.size >> 12,
...@@ -1484,7 +1483,7 @@ intelfb_cursor(struct fb_info *info, struct fb_cursor *cursor) ...@@ -1484,7 +1483,7 @@ intelfb_cursor(struct fb_info *info, struct fb_cursor *cursor)
#endif #endif
if (!dinfo->hwcursor) if (!dinfo->hwcursor)
return -ENXIO; return soft_cursor(info, cursor);
intelfbhw_cursor_hide(dinfo); intelfbhw_cursor_hide(dinfo);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment