Re: [PATCH] ACPI / LPSS: Don't skip late system PM ops for hibernate on BYT/CHT

From: Robert R. Howell
Date: Fri Apr 19 2019 - 18:45:09 EST


On 4/18/19 5:42 AM, Hans de Goede wrote:

>> On 4/8/19 2:16 AM, Hans de Goede wrote:>
>>>
>>> Hmm, interesting so you have hibernation working on a T100TA
>>> (with 5.0 + 02e45646d53b reverted), right ?
>>>

> Still since my patch is regressing things for you I will try to
> take a look at this and see if I can reproduce and come up with
> a fix. But this is not going to be a high priority thing for me to
> work on.
>
> In the mean time I've gone ahead and submitted my version of the
> fix for the problem Kai-Heng was seeing, since that does not seem
> to make your problem worse; and it will be good to get that problem
> fixed.
>
> Regards,
>
> Hans
>

I've managed to find a way around the i2c_designware timeout issues
on the T100TA's. The key is to NOT set DPM_FLAG_SMART_SUSPEND,
which was added in the 02e45646d53b commit.

To test that I've started with a 5.1-rc5 kernel, applied your recent patch
to acpi_lpss.c, then apply the following patch of mine, removing
DPM_FLAG_SMART_SUSPEND. (For the T100 hardware I need to apply some
other patches as well but those are not related to the i2c-designware or
acpi issues addressed here.)

On a resume from hibernation I still see one error:
"i2c_designware 80860F41:00: Error i2c_dw_xfer called while suspended"
but I no longer get the i2c_designware timeouts, and audio does now work
after the resume.

Removing DPM_FLAG_SMART_SUSPEND may not be what you want for other
hardware, but perhaps this will give you a clue as to what is going
wrong with hibernate/resume on the T100TA's.

With the above now working I've also experimented with my systemd
hibernate script and at least in limited testing I only need to
remove the brcmfmac and hci_uart drivers before hibernate.
I no longer need to remove sound drivers or the other ones shown in
my earlier script. Without more testing I'm not sure at what point
in kernel development those other driver removals stopped being necessary.

Let me know if I can do any other tests to help.

Bob Howell



---
diff -uprN linux_original/drivers/i2c/busses/i2c-designware-platdrv.c linux/drivers/i2c/busses/i2c-designware-platdrv.c
--- linux_original/drivers/i2c/busses/i2c-designware-platdrv.c 2019-04-14 16:17:41.000000000 -0600
+++ linux/drivers/i2c/busses/i2c-designware-platdrv.c 2019-04-18 22:45:58.836246889 -0600
@@ -367,7 +367,6 @@ static int dw_i2c_plat_probe(struct plat

dev_pm_set_driver_flags(&pdev->dev,
DPM_FLAG_SMART_PREPARE |
- DPM_FLAG_SMART_SUSPEND |
DPM_FLAG_LEAVE_SUSPENDED);

/* The code below assumes runtime PM to be disabled. */
---