On Thu, Nov 07, 2024 at 06:51:03PM +0300, Konstantin Aladyshev wrote: > Hello! > > I'm trying to add I2C devices to I2C/SMBus buses via the ACPI SSDT > overlay method. I've managed to do it for the I2C buses, but can't get > it working for the SMBus (PIIX4). ... > Now I'm trying to add devices to the SMBus bus. Which in my case is > produced from the i2c_piix4 PCI device: > ``` > $ lspci -s 00:14.0 -vvvxxx > 00:14.0 SMBus: Advanced Micro Devices, Inc. [AMD] FCH SMBus Controller (rev 61) > Subsystem: Advanced Micro Devices, Inc. [AMD] FCH SMBus Controller > Control: I/O+ Mem+ BusMaster- SpecCycle- MemWINV- VGASnoop- > ParErr- Stepping- SERR- FastB2B- DisINTx+ > Status: Cap- 66MHz+ UDF- FastB2B- ParErr- DEVSEL=medium > >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx- > NUMA node: 0 > IOMMU group: 58 > Kernel driver in use: piix4_smbus > Kernel modules: i2c_piix4, sp5100_tco > 00: 22 10 0b 79 03 04 20 02 61 00 05 0c 00 00 80 00 > 10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 > 20: 00 00 00 00 00 00 00 00 00 00 00 00 22 10 0b 79 > 30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 > ``` > > It is described as simple as this in the system ACPI code: > ``` > Device (SMBS) // \_SB_.PCI0.SMBS > { > Name (_ADR, 0x00140000) // _ADR: Address So, you need to add Device objects here The driver (drivers/i2c/busses/i2c-piix4.c::1157) has this call: acpi_preset_companion(&adap->dev, ACPI_COMPANION(&dev->dev), hw_port_nr); Means, that the _ADR will be evaluated, but there is none for the ports, only for the physical device. So, you need something like this: Scope (\_SB_.PCI0.SMBS) { Device (SMB1) { Name (_ADR, 0) } Device (SMB1) { Name (_ADR, 1) } Device (SMB2) { Name (_ADR, 2) } } And then refer to the controller (respective port) as, for example, \_SB_.PCI0.SMBS.SMB1 in your SSDT. Note, the above _ADR assignments you should also add to SSDT (better to the same one). > } > ``` > And produces several I2C busses to the system: > ``` > i2c-7 unknown SMBus PIIX4 adapter port 0 at 0b00 N/A > i2c-8 unknown SMBus PIIX4 adapter port 2 at 0b00 N/A > i2c-9 unknown SMBus PIIX4 adapter port 1 at 0b20 N/A > ``` > > No matter how I've tried, I can't get to add my custom devices to > these SMBus buses. > > Apparently just using "\\_SB.PCI0.SMBS" is not enough for this case. > Maybe I need to somehow create port nodes for this Device? Or maybe it > is not possible at all with the current piix driver? > > Anyway I've started digging and I've noticed that for the I2C device > there are two physical_nodes in the sysfs. Where the 'physical_node' > is a standard folder and 'physical_node1' is a direct link to the > proper i2c bus: > Maybe I need to modify ACPI code somehow to create these > 'physical_nodesX' folders for the relevant i2c-7/8/9 buses? If you succeed with the above, please add the respective section to the Documentation/i2c/busses/i2c-piix4.rst and send a patch. It will be very appreciated! -- With Best Regards, Andy Shevchenko