[Nouveau] SERIALIZE command
Marcin Kościelnicki
koriakin at 0x04.net
Fri Apr 9 14:16:33 PDT 2010
> I tried inserting the 0x110 commands with NvSubM2MF (subc=0), MvSubSw
> (subc=1), NvSub2D (subc=2), NvSubGdiRect (subc=3), NvSubImageBlit (subc=4).
> As a result, I got the PFIFO_CACHE_ERROR interrupts, with respect to those
> with NvSubSw and NvSubImageBlit. I am really not certain what
> PFIFO_CACHE_ERROR indicates, but seems they do not work correctly? Well,
> those with NvSubM2MF, NvSub2D and NvSubGdiRect are still very helpful
> though.
This is not how it works.
The command channels on nvidia hardware are split into 8 identical so-called
subchannels. The consts you're refering to are subchannel numbers.
However, these subchannels aren't constantly bound to the same objects - you
bind an object to a subchannel by executing command 0 with data being the
RAMHT handle of an object.
The Nv* consts you're referring to are only valid in kernel, and represent the
bindings it sets up at start. Most of them don't even apply to NV50. Also,
NvSubSw is bound to a software object.
PFIFO_CACHE_ERROR is an error that happens when the PFIFO puller encounters
some problems. One of the causes is submitting a command on a subchannel which
isn't actually bound to anything, which is what happens here.
Software objects are fake objects where you don't actually bind any object to
a subchannel, and instead trap the PFIFO_CACHE_ERROR this causes on command
submission and do something on the host side. We use this for syncing with
vblank on nv50. These don't support the SERIALIZE command because they're not
real objects.
Basically, there exist only 4 types of real objects you can submit commands on
and bind to subchans:
- m2mf [5039]: memory copies
- eng2d [502d]: 2d engine
- tesla [5097, 8297, 8397, 8597]: 3d engine
- turing [50c0, 85c0]: computation engine: CUDA and the like
Very likely there are more types, using different engine than PGRAPH, but we
don't know anything about them yet. At the very least there should be the
video decoding engine.
Marcin Kościelnicki
More information about the Nouveau
mailing list