[PATCH 0/1] ACPI / LPSS: Exclude I2C busses shared with PUNIT from pmc_atom_d3_mask

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi All,

The purpose of this patch is to make BYT/CHT devices which use s2idle
properly enter/reach S0i3 mode when suspended. Specifically BYT/CHT
devices which have an I2C bus connected to the PMIC which the kernel
shares with the SoC's PUNIT.

Some background info, recently commit a09c59130688 ("ACPI / LPSS: Avoid PM
quirks on suspend and resume from S3") got added to the acpi_lpss.c code:

https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=a09c59130688

We quicky got a couple of reports that this commit had an interesting
unintended side-effect, BYT and CHT devices with the shared bus now all
of a sudden where showing residency in S0ix modes including S0i3.

This was happening because the conditions for lpss_iosf_enter_d3_state()
never become true on those devices and after this commit
lpss_iosf_exit_d3_state() was a nop unless lpss_iosf_enter_d3_state()
executed successfully first.

This did trigger an issue in another part of the kernel, but that got fixed
soon afterwards, see commit 9d9a152ebaa8 ("i2c: designware: Re-init
controllers with pm_disabled set on resume"):

https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=9d9a152ebaa8

Yesterday another acpi_lpss.c change landed fixing a regression caused
by the other acpi_lpss.c change: commit f11fc4bc669b ("ACPI / LPSS: Force
LPSS quirks on boot").

This makes lpss_iosf_exit_d3_state() run at least once, restoring
BYT and CHT devices with the shared bus to their old state of not reaching
any S0ix states at all.

So this is where this patch comes in, this whole adventures has thought
me (us) that on devices where the I2C bus is shared with the PUNIT the
I2C controller never gets put in D3 (at least not by us), the ACPI
_PS3 method for the device is a no-op. Note it does seem to get powered-off
automatically at some point during suspend, but not directly under our
control. So we never see the PMC_D3_STS_0 register report D3 for this
I2C controller, so we should not wait for this to happen.

Not checking the D3 state of the shared I2C bus makes it possible for
these devices to properly reach S0ix states. While everything keeps working
as it should after a suspend/resume/

Regards,

Hans




[Index of Archives]     [Linux IBM ACPI]     [Linux Power Management]     [Linux Kernel]     [Linux Laptop]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]

  Powered by Linux