Tracking down bug #12503, looking for comment on my theory
Alex Villacís Lasso
a_villacis at palosanto.com
Thu Jan 17 08:38:11 PST 2008
Alex Villacís Lasso escribió:
> I post this so that the experts on the mailing list can tell me whether
> my understanding of the problem is sane (or insane). All comments apply
> to my home machine, which reserves 16M for video memory reports the
> following on lspci -v:
>
> 01:00.0 VGA compatible controller: S3 Inc. VT8375 [ProSavage8 KM266/KL266]
> (prog-if 00 [VGA])
> Subsystem: S3 Inc. VT8375 [ProSavage8 KM266/KL266]
> Flags: bus master, 66MHz, medium devsel, latency 32, IRQ 11
> Memory at dfe80000 (32-bit, non-prefetchable) [size=512K]
> Memory at d0000000 (32-bit, prefetchable) [size=128M]
> Expansion ROM at dfe70000 [disabled] [size=64K]
> Capabilities: [dc] Power Management version 2
> Capabilities: [80] AGP version 2.0
>
>
>
>
> Looking at the code, there are several things that might be wrong with this:
> 1) Previously, all the areas got mapped with xf86MapPciMem() and the
> VIDMEM_MMIO flag, and the function sorted out the write-combining later.
> The proof is that the message (==) SAVAGE(0): Write-combining range
> (0xd0000000,0x8000000) eventually appeared. Now, all the areas
> (including MMIO) are being mapped as VIDMEM_FRAMEBUFFER. This can't be
> right... or is it?
>
> src/savage_driver.c line 3163
> -------------------
> if (psav->MmioRegion.memory == NULL) {
> #ifdef XSERVER_LIBPCIACCESS
> err = pci_device_map_range(psav->PciInfo, psav->MmioRegion.base,
> psav->MmioRegion.size,
> (PCI_DEV_MAP_FLAG_WRITABLE),
> & psav->MmioRegion.memory);
> #else
> psav->MmioRegion.memory =
> xf86MapPciMem(pScrn->scrnIndex, VIDMEM_FRAMEBUFFER, /* <---
> Should this be VIDMEM_MMIO instead? */
> psav->PciTag, psav->MmioRegion.base,
> psav->MmioRegion.size);
> err = (psav->MmioRegion.memory == NULL) ? errno : 0;
> #endif
> -------------------
> In my opinion, this is the most likely cause of the hang, since videoram
> detection, MCLK detection, and colormap all require register (MMIO)
> access, and all of these are affected prior to the hang.
>
As I suspected, changing the highlighted VIDMEM_FRAMEBUFFER to
VIDMEM_MMIO fixes the lockup and lets the X server start up normally.
Patch attached, already attached to bug #12503. However, now
acceleration is broken with the patch applied (but no lockups). If any
of you have a Savage card, could you please test this patch? I would
eventually like to have it merged into current git.
--
perl -e '$x=2.4;print sprintf("%.0f + %.0f = %.0f\n",$x,$x,$x+$x);'
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-MMIO-area-must-be-mapped-with-VIDMEM_MMIO-not-VID.patch
Type: text/x-patch
Size: 1045 bytes
Desc: not available
URL: <http://lists.x.org/archives/xorg/attachments/20080117/ceb18b33/attachment.bin>
More information about the xorg
mailing list