I've been working on reverse engineering Asus and friends' Aura RGB lighting system that is found on many Asus motherboards along with DDR4 RAM modules from G.Skill, ADATA, and others. This RGB lighting system uses the SMBus interface to communicate with lighting controllers on the motherboard and RAM modules. I have reverse engineered much of the Aura controller's register map and have code to configure and set colors to the module from Linux. I also utilized the Linux I2C code along with InpOut32 on Windows to drive the SMBus controllers from userspace and control the lighting without the official application. In doing this research, I learned that the AMD X370 chipset actually has two PIIX4-compatible SMBus controllers, one at I/O 0x0B00 and one at I/O 0x0B20. This seems to be the case with at least X470 and X399 as well, according to GitLab user reports. I discovered that the RAM controllers are on the first bus at 0x0B00 (which also has the SPD EEPROMs) while the motherboard's Aura controller is on the second bus at 0x0B20. With the current Linux driver on kernel 4.15.0-45, this second bus is not detected and as such I cannot control the motherboard's Aura lighting. In addition, I believe the timeouts in the Linux i2c-piix4.c driver are unnecessarily high and would like to have them reduced or at least a userspace-accessible option to reduce them. I have no problem with my Windows implementation writing to 4 RAM modules as well as the motherboard module with 5 RGB zones each (5*5*3 = 75 bytes, not including overhead) at 25ms or faster update rates. I created a music visualizer application using the RGB lighting and thus a high update rate is important to get a smoothly animated visualization. On Linux, I notice a major delay just setting single registers on the RAM modules in a loop, to the point that they don't appear to update all at once. For more information, my reverse engineering and reimplementation project can be found on GitLab here: https://gitlab.com/CalcProgrammer1/OpenAuraSDK
Has there been any movement or review on this?
Do the 2 SMBus controllers appear as separate PCI devices, or as 1 PCI device with multiple I/O resources? lspci -nnv should tell.
I believe it's just one PCI device. On Windows, the I/O resources are not shown. I'll try the lspci -nnv on my friend's B450 later today as I'm away from my X370 system for a few days. In our testing it looks like all AM4 chipsets have this second bus.
ASUS ROG Strix B450-F GAMING, Socket-AM4 lspci -nnv 00:14.0 SMBus [0c05]: Advanced Micro Devices, Inc. [AMD] FCH SMBus Controller [1022:790b] (rev 61) Subsystem: ASUSTeK Computer Inc. FCH SMBus Controller [1043:87c0] Flags: 66MHz, medium devsel Kernel driver in use: piix4_smbus Kernel modules: i2c_piix4, sp5100_tco
Gigabyte X570 I Aorus Pro Wifi lspci -nnv 00:14.0 SMBus [0c05]: Advanced Micro Devices, Inc. [AMD] FCH SMBus Controller [1022:790b] (rev 61) Subsystem: Gigabyte Technology Co., Ltd Device [1458:5001] Flags: 66MHz, medium devsel Kernel modules: i2c_piix4, sp5100_tco Just one device for me
Only a single SMBus-device on Asus PRIME X370-PR as well: 00:14.0 SMBus [0c05]: Advanced Micro Devices, Inc. [AMD] FCH SMBus Controller [1022:790b] (rev 59) Subsystem: ASUSTeK Computer Inc. FCH SMBus Controller [1043:8747] Flags: 66MHz, medium devsel Kernel driver in use: piix4_smbus Kernel modules: i2c_piix4, sp5100_tco
Same here with my PRIME 370-PRO 00:14.0 SMBus [0c05]: Advanced Micro Devices, Inc. [AMD] FCH SMBus Controller [1022:790b] (rev 61) Subsystem: ASUSTeK Computer Inc. FCH SMBus Controller [1043:87c0] Flags: 66MHz, medium devsel Kernel driver in use: piix4_smbus Kernel modules: sp5100_tco, i2c_piix4
This patch works(and is needed) on my ASROCK B450M Pro 4 mainboard to make the port at at I/O 0x0B20 visible. After this, I can use the OpenRGB tool to control the RGB lighting on the Mainboard. Can you please include it in the mainline
I suppose it was fixed: it was backported to stable 5.4.49.
My patch has been merged and backported. Closing.
ASRock AB350M Pro4 00:14.0 SMBus [0c05]: Advanced Micro Devices, Inc. [AMD] FCH SMBus Controller [1022:790b] (rev 59) Subsystem: ASRock Incorporation Device [1849:790b] Flags: 66MHz, medium devsel, IOMMU group 11 Kernel driver in use: piix4_smbus Kernel modules: i2c_piix4, sp5100_tco