diff mbox series

docs: i2c: piix4: Add ACPI section

Message ID 20241111115652.10831-1-aladyshev22@gmail.com
State Superseded
Headers show
Series docs: i2c: piix4: Add ACPI section | expand

Commit Message

Konstantin Aladyshev Nov. 11, 2024, 11:56 a.m. UTC
Provide information how to reference I2C busses created by the PIIX4
chip driver from the ACPI code.

Signed-off-by: Konstantin Aladyshev <aladyshev22@gmail.com>
---
 Documentation/i2c/busses/i2c-piix4.rst | 56 ++++++++++++++++++++++++++
 1 file changed, 56 insertions(+)

Comments

Andy Shevchenko Nov. 11, 2024, 12:52 p.m. UTC | #1
On Mon, Nov 11, 2024 at 02:56:52PM +0300, Konstantin Aladyshev wrote:
> Provide information how to reference I2C busses created by the PIIX4
> chip driver from the ACPI code.

...

> +Therefore if you want to access one of these busses in the ACPI code, you need to
> +declare port subdevices inside the PIIX device::
> +
> +    Scope (\_SB_.PCI0.SMBS)
> +    {
> +        Name (_ADR, 0x00140000)
> +
> +        Device (SMB0) {
> +            Name (_ADR, 0)
> +        }
> +        Device (SMB1) {
> +            Name (_ADR, 1)
> +        }
> +        Device (SMB2) {
> +            Name (_ADR, 2)
> +        }
> +    }

You need to elaborate that some of this data may be already present in the BIOS
DSDT (you give your example as it seems most common so far) and hence requires
an additional per-port addresses. With that you should add a note that this
will require to load SSDT quite in advance to make sure that the driver will
see these changes before its ->probe().

...

The rest is LGTM.
Andy Shevchenko Nov. 11, 2024, 12:53 p.m. UTC | #2
On Mon, Nov 11, 2024 at 02:52:57PM +0200, Andy Shevchenko wrote:
> On Mon, Nov 11, 2024 at 02:56:52PM +0300, Konstantin Aladyshev wrote:
> > Provide information how to reference I2C busses created by the PIIX4
> > chip driver from the ACPI code.

...

> > +Therefore if you want to access one of these busses in the ACPI code, you need to
> > +declare port subdevices inside the PIIX device::
> > +
> > +    Scope (\_SB_.PCI0.SMBS)
> > +    {
> > +        Name (_ADR, 0x00140000)
> > +
> > +        Device (SMB0) {
> > +            Name (_ADR, 0)
> > +        }
> > +        Device (SMB1) {
> > +            Name (_ADR, 1)
> > +        }
> > +        Device (SMB2) {
> > +            Name (_ADR, 2)
> > +        }
> > +    }
> 
> You need to elaborate that some of this data may be already present in the BIOS
> DSDT (you give your example as it seems most common so far) and hence requires
> an additional per-port addresses. With that you should add a note that this
> will require to load SSDT quite in advance to make sure that the driver will
> see these changes before its ->probe().
> 
> ...
> 
> The rest is LGTM.

Also Cc new version to Andi Shyti who is I2C host driver maintainer.
It's probably he who is going to apply the change.
diff mbox series

Patch

diff --git a/Documentation/i2c/busses/i2c-piix4.rst b/Documentation/i2c/busses/i2c-piix4.rst
index 07fe6f6f4b18..2a00158b508a 100644
--- a/Documentation/i2c/busses/i2c-piix4.rst
+++ b/Documentation/i2c/busses/i2c-piix4.rst
@@ -109,3 +109,59 @@  which can easily get corrupted due to a state machine bug. These are mostly
 Thinkpad laptops, but desktop systems may also be affected. We have no list
 of all affected systems, so the only safe solution was to prevent access to
 the SMBus on all IBM systems (detected using DMI data.)
+
+
+Description in the ACPI code
+----------------------------
+
+Device driver for the PIIX4 chip creates a separate I2C bus for each of its ports::
+
+    $ i2cdetect -l
+    ...
+    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
+    ...
+
+Therefore if you want to access one of these busses in the ACPI code, you need to
+declare port subdevices inside the PIIX device::
+
+    Scope (\_SB_.PCI0.SMBS)
+    {
+        Name (_ADR, 0x00140000)
+
+        Device (SMB0) {
+            Name (_ADR, 0)
+        }
+        Device (SMB1) {
+            Name (_ADR, 1)
+        }
+        Device (SMB2) {
+            Name (_ADR, 2)
+        }
+    }
+
+As an example of usage here is the ACPI snippet code that would assign jc42 driver
+to the 0x1C device on the I2C bus created by the PIIX port 0::
+
+    Device (JC42) {
+        Name (_HID, "PRP0001")
+        Name (_DDN, "JC42 Temperature sensor")
+        Name (_CRS, ResourceTemplate () {
+            I2cSerialBusV2 (
+                0x001c,
+                ControllerInitiated,
+                100000,
+                AddressingMode7Bit,
+                "\\_SB.PCI0.SMBS.SMB0",
+                0
+            )
+        })
+
+        Name (_DSD, Package () {
+            ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
+            Package () {
+                Package () { "compatible", Package() { "jedec,jc-42.4-temp" } },
+            }
+        })
+    }