Hi all,
> Any pointers to code already dealing with such indexed registers or
instructions how to do that would help me very much.

Info is on page 150 of that datasheet.

D0F0xE0 and D0F0xE4 are used to access D0F0xE4_x[FFFF_FFFF:0000_0000]. To read or write to one of these register, the address is written first into the address register D0F0xE0 and then the data is read from or written to the data register D0F0xE4.

You can imagine that as a "window" to some internal address space (in this case address space of SMU)

You can even access that through a cmdline:

setpci -s 0:0.0 e0.l

This will print current register value of e0


So, to read the counter value:

setpci -s  0:0.0 e0.l=013080F0
setpci -s  0:0.0 e4.l

So, to read the default counter rate:

setpci -s  0:0.0 e0.l=013080F1
setpci -s  0:0.0 e4.l


Program it to any value:

setpci -s  0:0.0 e0.l=013080F0
setpci -s  0:0.0 e4.l=aa55aa55


To program the rate to 42 MHz

setpci -s  0:0.0 e0.l=013080F1
setpci -s  0:0.0 e4.l=0000002a

The setpci command is equivalent of this code:

setpci -s  0:0.0 e0.l=013080F0
setpci -s  0:0.0 e4.l

is:

pci_write_config32(CI_DEV(0, 0, 0), 0xe4, 0x013080F0);
tmp = pci_read_config32(PCI_DEV(0, 0, 0), 0xe4);

Happy hacking,
Rudolf


--
coreboot mailing list: [email protected]
http://www.coreboot.org/mailman/listinfo/coreboot

Reply via email to