[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