After looking at vdma.pdf on linux-mips ftp site, i have (dumb) question:
This DMA hardware was designed for User-Mode DMA, as well normal-style
kernel-mode DMA. For user-mode DMA hardware (located in MemoryController)
should (or simply can) translate virt->phys adresses, according to some
registers, updated on every context switch. But traditional DMA, with physical
addresses, should be more easy for setup? Code in Linux kernel tree has comment
about MC interrupts (they should be handled in driver, not in core code) - so,
if one want to add (V)DMA support to fb [currently - newport, may be others in
the future] driver , and then potentially to X driver as well (with some
drm-like kernel module, for handling interrupts and DMA itself) he must look at
HAL2 (audio ) sources as comment suggest, and try to figure out how to write
such code?
One more question: my SGI O2 has many hardware units, usually working together:
Rendering/Drawing Engine for graphics output, MemoryTransferEngine for moving
blocks of memory around, including video memory (O2 is UMA system), VICE
coprocessor, with two DMA channels and two execution units. (all this under
native OS, of course .. i know some details thanks to NetBSD project and work
done here at linux-mips.org). How (conceptually) add such wide functionality in
Linux kernel? I guess, recently-merged GEM (GraphicsExecutionManager, iirc) can
help here, for keeping track of currently used memory 'tiles' for graphics and
rest of memory. (front buffer/optional back buffer/optional Z buffer/optional
texture storage/optional offscreen render buffer, all can be tiled or not.
Working blocks of memory for VICE. Blocks, currently in-move, or in-clear due
to MTE activity). Not sure how to expose this machinery to userspace - just as
set of buffers, with some control
node(s), for requesting buffer, release buffer, clear buffer, move buffer
around, change buffer type? with list of "used-by-xxx" attributes?? May be
just expose MTE as `generic` DMA engine for start (if this unit really can move
blocks of memory in full 1GB [max memory size on O2] range)?
Also, patches for r10k O2 still unstable? I have only r5k, so i can't test
them, but if i remember correctly there was mostly driver issues, network and
scsi namely. I'm very unfamiliar with anything SCSI, PCI related - can someone
just look at current code and post some comments here?
|