Future PPGTT [part 4] (Dynamic page table allocations, 64 bit address space, GPU “mirroring”, and yeah, something about relocs too)

This entry is part 4 of 4 in the series i915 object mapping

Preface GPU mirroring provides a mechanism to have the CPU and the GPU use the same virtual address for the same physical (or IOMMU) page. An immediate result of this is that relocations can be eliminated. There are a few derivative benefits from the removal of the relocation mechanism, but it really all boils down […]

True PPGTT [part 3]

This entry is part 3 of 4 in the series i915 object mapping

EDIT1: I forgot to include a diagram I did of the software state machine for some presentation. I long lost the SVG, and it got kind of messed up, but it’s there at the bottom. EDIT2: (Apologies to aggregators) Grammar fixes. Fixed some bugs in a couple of the images. EDIT3: (Again, apologies to aggregators) […]

Aliasing PPGTT [part 2]

This entry is part 2 of 4 in the series i915 object mapping

Overview Pictures are the right way to start. There is exactly one thing to get from the above drawing, everything else is just to make it as close to fact as possible. The aliasing PPGTT (aliases|shadows|mimics) the global GTT. The wordy overview Support for Per-process Graphics Translation Tables (PPGTT) debuted on Sandybridge (GEN6). The features […]

The Global GTT [Part 1]

This entry is part 1 of 4 in the series i915 object mapping

Global Graphics Translation Tables Here goes the basics of how the GEN GPU interacts with memory. It will be focused on the lowest levels of the i915 driver, and the hardware interaction. My hope is that by going through this in excruciating detail, I might be able to take more liberties in the future posts. […]