All of lore.kernel.org
 help / color / mirror / Atom feed
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



  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.