2009/6/5 Rafał Miłecki
W dniu 5 czerwca 2009 20:11 użytkownik Alex Deucher
napisał: 2009/6/5 Rafał Miłecki
: There is one more command I don't understand:
SET_REG_BLOCK 0000 SET_REG_BLOCK 0001
what does it do?
There are lots of sets of registers that have multiple instances in register space (e.g., there are two identical sets of CRTC registers, one for each CRTC, DACs and DIG PHYs on newer chips, etc.). That command is used to select the offset added to the registers in order to access different register blocks. Take a look at SetCRTC_Timing:
0009: 3da50400 COMP param[04] [.X..] <- 00 000d: 441300 JUMP_Equal 0013 0010: 3a0002 SET_REG_BLOCK 0200
if you've selected crtc 1, add an offset of 0x200 dwords (0x800 bytes) to the registers, if it's crtc 0, do not.
Alex
Thanks for explaination with nice example. Nice way to handle 2 pll/crtc/... in one code :)
Still one more (hopefully last?) question. How do work (and what is difference) TEST and COMP?
COMP looks to see if src and dst are equal, TEST tests using logical AND. You can follow the logic of any of these commands by looking at AtomBios/CD_Operations.c. See ProcessCompare() and ProcessTest().
param[00] == 0x12345678 X: 4be50004 TEST param[00] [X...] <- 04 Y: 441700 JUMP_Equal 0017 12 != 04, so jump won't happen, right?
This would be equate to: (0x12 & 0x4) ? NotEqual : Equal So the jump would happen.
param[00] == 0x12345678 0017: 3d0d000000 COMP param[00] [..XX] <- 0000 001c: 448c00 JUMP_Equal 008c 5678 != 0000, so jump won't happen, right?
correct. Alex -- To unsubscribe, e-mail: radeonhd+unsubscribe@opensuse.org For additional commands, e-mail: radeonhd+help@opensuse.org