> I think "SMBUSx11 I2CCommand" may be what you're looking for.
This has no effect and i know (probably) why.
In AMD documentation is address ending with 0x20 ASF, not SMBus. Some
registers
have same function and this is probably reason, why communication works.
This code should write 0x2c address to I2CCommand. If this is RW, then
reading
should return 0x2c, but it returns 0x00.
outb_p(0x2c, (0x11 + piix4_smba)); // I2CCommand
printk(KERN_INFO "smbus I2CCommand %02x\n", inb_p(0x11 + piix4_smba));
If this is ASF, then 0x11 is read only. 0x0e, 0x0f should have initial value
0xa8 0xaa. Here is register dump:
0000 0002 5802 0000 0f59 00ff ff00 a8aa 0000 0081 0002 0400 0000 0000
0000 0000
Now i am trying to change ASF registers instead of SMBus registers.
I have tried to enable interrupts and set listen address, but it don't
work or
i can't recognize the difference between interrupts generated by
transfers and
interrupts generated from slave.
outb_p(0x02, 0x15 + piix4_smba); // SlaveIntrListenEn
outb_p(0x2c << 1 | 0x01, 0x09 + piix4_smba); // ListenAdr | ListenAdrEn
Here is register dump for interrupts:
https://pastebin.com/eYnb30sL