From: <syl...@wo...> - 2005-05-27 22:09:42
|
From: Sylvain Meyer <syl...@wo...> - Add voffset option to avoid conficts with Xorg i810 driver - Remove __initdata from module param variables Signed-off-by: Sylvain Meyer <syl...@wo...> --- linux-2.6.12-rc4-root/drivers/video/intelfb/intelfbdrv.c | 38 +++++++++------ 1 files changed, 23 insertions(+), 15 deletions(-) diff -puN drivers/video/intelfb/intelfbdrv.c~intelfb-voffset drivers/video/intelfb/intelfbdrv.c --- linux-2.6.12-rc4/drivers/video/intelfb/intelfbdrv.c~intelfb-voffset 2005-05-27 23:55:33.000000000 +0200 +++ linux-2.6.12-rc4-root/drivers/video/intelfb/intelfbdrv.c 2005-05-28 00:01:20.000000000 +0200 @@ -228,22 +228,25 @@ MODULE_DESCRIPTION( MODULE_LICENSE("Dual BSD/GPL"); MODULE_DEVICE_TABLE(pci, intelfb_pci_table); -static int accel __initdata = 1; -static int vram __initdata = 4; -static int hwcursor __initdata = 1; -static int mtrr __initdata = 1; -static int fixed __initdata = 0; -static int noinit __initdata = 0; -static int noregister __initdata = 0; -static int probeonly __initdata = 0; -static int idonly __initdata = 0; -static int bailearly __initdata = 0; -static char *mode __initdata = NULL; +static int accel = 1; +static int vram = 4; +static int voffset = 48; +static int hwcursor = 1; +static int mtrr = 1; +static int fixed = 0; +static int noinit = 0; +static int noregister = 0; +static int probeonly = 0; +static int idonly = 0; +static int bailearly = 0; +static char *mode = NULL; module_param(accel, bool, S_IRUGO); MODULE_PARM_DESC(accel, "Enable console acceleration"); module_param(vram, int, S_IRUGO); MODULE_PARM_DESC(vram, "System RAM to allocate to framebuffer in MiB"); +module_param(voffset, int, S_IRUGO); +MODULE_PARM_DESC(voffset, "Offset of framebuffer in MiB"); module_param(hwcursor, bool, S_IRUGO); MODULE_PARM_DESC(hwcursor, "Enable HW cursor"); module_param(mtrr, bool, S_IRUGO); @@ -503,6 +506,7 @@ intelfb_pci_register(struct pci_dev *pde struct agp_bridge_data *bridge; int aperture_bar = 0; int mmio_bar = 1; + int offset; DBG_MSG("intelfb_pci_register\n"); @@ -659,17 +663,21 @@ intelfb_pci_register(struct pci_dev *pde 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 */ if (dinfo->accel) { - dinfo->ring.offset = (stolen_size >> 12) - + gtt_info.current_memory; + dinfo->ring.offset = offset + gtt_info.current_memory; } if (dinfo->hwcursor) { - dinfo->cursor.offset = (stolen_size >> 12) + + dinfo->cursor.offset = offset + + gtt_info.current_memory + (dinfo->ring.size >> 12); } if (dinfo->fbmem_gart) { - dinfo->fb.offset = (stolen_size >> 12) + + dinfo->fb.offset = offset + + gtt_info.current_memory + (dinfo->ring.size >> 12) + (dinfo->cursor.size >> 12); } _ |
From: Andrew M. <ak...@os...> - 2005-05-27 22:50:15
|
syl...@wo... wrote: > > - Add voffset option to avoid conficts with Xorg i810 driver Please provide more info. - How does it "avoid conflicts"? - How is the user to know that he needs to provide this module parameter? - Is it not possible to prevent these "conflicts" without the use of a module parameter? IOW: it's really a cop-out to require that the user know about some obscure module parameter to be able to amke their system work correctly. We really, really want these things to "just work". |
From: Sylvain M. <syl...@wo...> - 2005-05-28 09:04:39
|
Andrew Morton a =E9crit: >syl...@wo... wrote: > =20 > >>- Add voffset option to avoid conficts with Xorg i810 driver >> =20 >> > >Please provide more info. > >- How does it "avoid conflicts"? > It avoids conflicts in using memory allocations for framebuffer, hw=20 cursor and ring buffer which cannot be corrupted by the X driver. The=20 problem seems to be the exclusive use of BIOS calls in the X driver=20 instead of direct access to the hardware as in the intelfb driver. I=20 don't know what the BIOS do but i can see the corruption. In the X=20 driver, the BIOS is called to increase the stolen memory (part of the=20 aperture memory already allocated by the BIOS) if it is too small. I=20 think it's part of the problem. > >- How is the user to know that he needs to provide this module parameter= ? > The default parameter should be ok with default configuration of the=20 X driver. If VideoRam parameter is increased in xorg.conf, maybe a=20 different voffset should be passed to the linux kernel (now VideoRam=20 defaults to 32MB, voffset to 48 MB). Anyway, if i have spare time this week-end, i'll come with a small=20 doc. Just to to know, i borrowed this idea to the i810 driver, so the=20 parameter is already in use today. > >- Is it not possible to prevent these "conflicts" without the use of a > module parameter? > If i had the datasheet of the chips, maybe but now without lobbying=20 Intel and working blind, my answer is no. Sorry. >IOW: it's really a cop-out to require that the user know about some obsc= ure >module parameter to be able to amke their system work correctly. We >really, really want these things to "just work". > =20 > Yes, I share your concern but now I don't know how to do it. Sylvain |