From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
To: Konstantin Aladyshev <aladyshev22@gmail.com>,
Florian Eckert <fe@dev.tdt.de>
Cc: linux-acpi@vger.kernel.org, linux-i2c@vger.kernel.org
Subject: Re: Adding I2C devices to the SMBus (PIIX4) via the ACPI SSDT overlay method
Date: Fri, 8 Nov 2024 10:46:38 +0200 [thread overview]
Message-ID: <Zy3P7ld7UUL8XCrR@smile.fi.intel.com> (raw)
In-Reply-To: <CACSj6VX77y6K9FNFZn-rMvEL9XSPS6rFDt-STGf1UxgkuS6msw@mail.gmail.com>
+Cc: Florian (as this indeed rang a bell to me)
https://lore.kernel.org/all/d84fb798722762862a7fb08f1e343b6a@dev.tdt.de/
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 the long description of what I've tried and learned.
>
> I've successfully managed to add my I2C devices to the I2C buses. In
> this case I2C buses are described in the ACPI code of my system like
> this:
> ```
> Device (I2CF)
> {
> Name (_HID, "AMDI0010")
> Name (_UID, 0x05)
> Method (_CRS, 0, Serialized) {...}
> Method (_STA, 0, NotSerialized) {...}
> }
> ```
>
> These buses are present in the system as:
> ```
> $ i2cdetect -l
> i2c-0 unknown Synopsys DesignWare I2C adapter N/A
> ...
> ```
>
> For my custom device (at24 EEPROM) I've created SSDT table:
> ```
> DefinitionBlock ("at24.aml", "SSDT", 5, "", "AT24", 1)
> {
> External (_SB_.I2CF, DeviceObj)
>
> Scope (\_SB.I2CF)
> {
> Device (EEP0) {
> Name (_HID, "PRP0001")
> Name (_DDN, "Atmel AT24 compatible EEPROM")
> Name (_CRS, ResourceTemplate () {
> I2cSerialBusV2 (
> 0x0050, // I2C Slave Address
> ControllerInitiated,
> 400000, // Bus speed
> AddressingMode7Bit,
> "\\_SB.I2CF", // Link to ACPI I2C host controller
> 0
> )
> })
>
> Name (_DSD, Package () {
> ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
> Package () {
> Package () { "compatible", Package() { "atmel,24c128" } },
> }
> })
> }
> }
> }
> ```
>
> And after I've loaded it via 'acpi_configfs' I can successfully see
> EEPROM in the system:
> ```
> root@ubuntu-SP3:/home/ubuntu/acpi/custom# hexdump -C
> /sys/bus/i2c/devices/i2c-PRP0001\:00/eeprom
> 00000000 63 6a a9 05 00 65 14 35 9f 81 a7 60 aa c2 18 d2 |cj...e.5...`....|
> 00000010 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
> *
> 00004000
> ```
>
>
> 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
> }
> ```
> 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:
> ```
> $ ls -la /sys/bus/acpi/devices/AMDI0010\:03/
> total 0
> drwxr-xr-x 4 root root 0 Nov 7 18:07 .
> drwxr-xr-x 294 root root 0 Nov 7 18:05 ..
> -r--r--r-- 1 root root 4096 Nov 7 18:06 hid
> -r--r--r-- 1 root root 4096 Nov 7 18:06 modalias
> -r--r--r-- 1 root root 4096 Nov 7 18:06 path
> lrwxrwxrwx 1 root root 0 Nov 7 18:06 physical_node ->
> ../../../platform/AMDI0010:03
> lrwxrwxrwx 1 root root 0 Nov 7 18:06 physical_node1 ->
> ../../../platform/AMDI0010:03/i2c-1
> drwxr-xr-x 2 root root 0 Nov 7 18:06 power
> -r--r--r-- 1 root root 4096 Nov 7 18:06 status
> lrwxrwxrwx 1 root root 0 Nov 7 18:05 subsystem -> ../../../../bus/acpi
> -rw-r--r-- 1 root root 4096 Nov 7 18:05 uevent
> -r--r--r-- 1 root root 4096 Nov 7 18:06 uid
> drwxr-xr-x 3 root root 0 Nov 7 18:05 wakeup
>
> $ ls -la /sys/bus/acpi/devices/AMDI0010\:03/physical_node/
> total 0
> drwxr-xr-x 4 root root 0 Nov 7 18:08 .
> drwxr-xr-x 7335 root root 0 Nov 7 18:05 ..
> lrwxrwxrwx 1 root root 0 Nov 7 18:05 driver ->
> ../../../bus/platform/drivers/i2c_designware
> -rw-r--r-- 1 root root 4096 Nov 7 18:08 driver_override
> lrwxrwxrwx 1 root root 0 Nov 7 18:08 firmware_node ->
> ../../LNXSYSTM:00/LNXSYBUS:00/AMDI0010:03
> drwxr-xr-x 4 root root 0 Nov 7 18:05 i2c-1
> -r--r--r-- 1 root root 4096 Nov 7 18:08 modalias
> drwxr-xr-x 2 root root 0 Nov 7 18:08 power
> lrwxrwxrwx 1 root root 0 Nov 7 18:05 subsystem -> ../../../bus/platform
> -rw-r--r-- 1 root root 4096 Nov 7 18:05 uevent
>
> $ ls -la /sys/bus/acpi/devices/AMDI0010\:03/physical_node1/
> total 0
> drwxr-xr-x 4 root root 0 Nov 7 18:08 .
> drwxr-xr-x 4 root root 0 Nov 7 18:08 ..
> --w------- 1 root root 4096 Nov 7 18:08 delete_device
> lrwxrwxrwx 1 root root 0 Nov 7 18:08 device -> ../../AMDI0010:03
> lrwxrwxrwx 1 root root 0 Nov 7 18:08 firmware_node ->
> ../../../LNXSYSTM:00/LNXSYBUS:00/AMDI0010:03
> drwxr-xr-x 3 root root 0 Nov 7 18:05 i2c-dev
> -r--r--r-- 1 root root 4096 Nov 7 18:05 name
> --w------- 1 root root 4096 Nov 7 18:08 new_device
> drwxr-xr-x 2 root root 0 Nov 7 18:08 power
> lrwxrwxrwx 1 root root 0 Nov 7 18:05 subsystem -> ../../../../bus/i2c
> -rw-r--r-- 1 root root 4096 Nov 7 18:05 uevent
> -r--r--r-- 1 root root 4096 Nov 7 18:08 waiting_for_supplier
> ```
>
> But in the case of SMBus there is only one 'physical_node' folder (but
> 3 i2c buses) :
> ```
> $ ls -l /sys/bus/acpi/devices/device\:25/
> total 0
> -r--r--r-- 1 root root 4096 Nov 7 18:07 adr
> -r--r--r-- 1 root root 4096 Nov 7 18:07 path
> lrwxrwxrwx 1 root root 0 Nov 7 18:07 physical_node ->
> ../../../../pci0000:00/0000:00:14.0
> drwxr-xr-x 2 root root 0 Nov 7 18:07 power
> lrwxrwxrwx 1 root root 0 Nov 7 18:05 subsystem -> ../../../../../bus/acpi
> -rw-r--r-- 1 root root 4096 Nov 7 18:05 uevent
> drwxr-xr-x 3 root root 0 Nov 7 18:05 wakeup
>
> $ ls -l /sys/bus/acpi/devices/device\:25/physical_node/
> total 0
> -r--r--r-- 1 root root 4096 Nov 7 18:07 ari_enabled
> -rw-r--r-- 1 root root 4096 Nov 7 18:07 broken_parity_status
> -r--r--r-- 1 root root 4096 Nov 7 18:05 class
> -rw-r--r-- 1 root root 256 Nov 7 18:07 config
> -r--r--r-- 1 root root 4096 Nov 7 18:07 consistent_dma_mask_bits
> -rw-r--r-- 1 root root 4096 Nov 7 18:07 d3cold_allowed
> -r--r--r-- 1 root root 4096 Nov 7 18:05 device
> -r--r--r-- 1 root root 4096 Nov 7 18:07 dma_mask_bits
> lrwxrwxrwx 1 root root 0 Nov 7 18:05 driver ->
> ../../../bus/pci/drivers/piix4_smbus
> -rw-r--r-- 1 root root 4096 Nov 7 18:07 driver_override
> -rw-r--r-- 1 root root 4096 Nov 7 18:07 enable
> lrwxrwxrwx 1 root root 0 Nov 7 18:07 firmware_node ->
> ../../LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:25
> drwxr-xr-x 4 root root 0 Nov 7 18:05 i2c-7
> drwxr-xr-x 4 root root 0 Nov 7 18:05 i2c-8
> drwxr-xr-x 4 root root 0 Nov 7 18:05 i2c-9
> lrwxrwxrwx 1 root root 0 Nov 7 18:07 iommu -> ../0000:00:00.2/iommu/ivhd3
> lrwxrwxrwx 1 root root 0 Nov 7 18:07 iommu_group ->
> ../../../kernel/iommu_groups/58
> -r--r--r-- 1 root root 4096 Nov 7 18:07 irq
> drwxr-xr-x 2 root root 0 Nov 7 18:07 link
> -r--r--r-- 1 root root 4096 Nov 7 18:07 local_cpulist
> -r--r--r-- 1 root root 4096 Nov 7 18:07 local_cpus
> -r--r--r-- 1 root root 4096 Nov 7 18:07 modalias
> -rw-r--r-- 1 root root 4096 Nov 7 18:07 msi_bus
> -rw-r--r-- 1 root root 4096 Nov 7 18:07 numa_node
> drwxr-xr-x 2 root root 0 Nov 7 18:07 power
> -r--r--r-- 1 root root 4096 Nov 7 18:07 power_state
> --w--w---- 1 root root 4096 Nov 7 18:07 remove
> --w------- 1 root root 4096 Nov 7 18:07 rescan
> -r--r--r-- 1 root root 4096 Nov 7 18:05 resource
> -r--r--r-- 1 root root 4096 Nov 7 18:07 revision
> lrwxrwxrwx 1 root root 0 Nov 7 18:05 subsystem -> ../../../bus/pci
> -r--r--r-- 1 root root 4096 Nov 7 18:07 subsystem_device
> -r--r--r-- 1 root root 4096 Nov 7 18:07 subsystem_vendor
> -rw-r--r-- 1 root root 4096 Nov 7 18:05 uevent
> -r--r--r-- 1 root root 4096 Nov 7 18:05 vendor
> ```
>
> Maybe I need to modify ACPI code somehow to create these
> 'physical_nodesX' folders for the relevant i2c-7/8/9 buses?
>
> Any feedback is appreciated.
--
With Best Regards,
Andy Shevchenko
next prev parent reply other threads:[~2024-11-08 8:46 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-11-07 15:51 Adding I2C devices to the SMBus (PIIX4) via the ACPI SSDT overlay method Konstantin Aladyshev
2024-11-08 8:26 ` Andy Shevchenko
2024-11-08 8:29 ` Andy Shevchenko
2024-11-08 8:46 ` Andy Shevchenko [this message]
2024-11-08 9:27 ` Florian Eckert
2024-11-08 11:23 ` Andy Shevchenko
2024-11-08 11:48 ` Konstantin Aladyshev
2024-11-08 12:47 ` Andy Shevchenko
2024-11-11 12:09 ` Konstantin Aladyshev
2024-11-11 12:48 ` Andy Shevchenko
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Zy3P7ld7UUL8XCrR@smile.fi.intel.com \
--to=andriy.shevchenko@linux.intel.com \
--cc=aladyshev22@gmail.com \
--cc=fe@dev.tdt.de \
--cc=linux-acpi@vger.kernel.org \
--cc=linux-i2c@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.