Comment 35 for bug 91966

Revision history for this message
Peter Clifton (pcjc2) wrote :

Jamie.. 32bit or 64bit?

(EE) intel(0): Non-contiguous GTT entries: (6295552,0x163ffbe000) vs (131072,0x 3f820000)
                                                                                             ^ Greater than 32 bits... (ok, a 32bit processor can do this math, but it is an interesting result given the code)

The code operates using the uint64_t type, however on anything but G33 class and 965 HW, the page table bits which correspond to an address space > 32bits are masked out. Something "strange" is going on with the above message. By my reading of the code, this shouldn't happen if you've got a 945GM

This commit looks generally interesting...

commit f3168e3b0c5664a322ca6bb1c81fc94844cb30ab
Author: Eric Anholt <email address hidden>
Date: Wed May 2 14:08:30 2007 -0700

    Disable non-working GTT decoding on i830, and fix map/unmap of GTT.

Specifically the latter part, which adds these lines (I'm ignoring the 830 changes since this bug is hitting 945 hardware):

@@ -584,6 +587,15 @@ I830UnmapMMIO(ScrnInfoPtr pScrn)
    xf86UnMapVidMem(pScrn->scrnIndex, (pointer) pI830->MMIOBase,
                   I810_REG_SIZE);
    pI830->MMIOBase = NULL;
+
+ if (IS_I9XX(pI830)) {
+ if (IS_I965G(pI830))
+ xf86UnMapVidMem(pScrn->scrnIndex, pI830->GTTBase, 512 * 1024);
+ else {
+ xf86UnMapVidMem(pScrn->scrnIndex, pI830->GTTBase,
+ pI830->FbMapSize / 1024);
+ }
+ }
 }

 static Bool
@@ -2279,6 +2291,9 @@ I830ScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
       pI830->used3D = pI8301->used3D;
    }

+ /* Need MMIO mapped to do GTT lookups during memory allocation. */
+ I830MapMMIO(pScrn);
+
 #if defined(XF86DRI)
    /*
     * If DRI is potentially usable, check if there is enough memory available
@@ -2419,6 +2434,8 @@ I830ScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
       allocation_done = TRUE;
    }

+ I830UnmapMMIO(pScrn);
+
    i830_describe_allocations(pScrn, 1, "");

    if (!IS_I965G(pI830) && pScrn->displayWidth > 2048) {