Hi, On Mon, Sep 24, 2018 at 5:37 PM Hans de Goede <hdegoede@xxxxxxxxxx> wrote: > > We were relying on the interrupt being shared with the ACPI SCI and the > ACPI core calling irq_set_wake. But that does not always happen on > Bay Trail devices, so we should do it ourselves. > > This fixes wake from USB not working on various Bay Trail devices. This patch breaks suspend on ASUS E202SA (bisecting pointed me to this patch, and if I revert it and build 4.20.5 without this patch, everything works flawlessly). This command fails with the following message: # echo mem > /sys/power/state Error while writing to stdout write_loop: Device or resource busy And here is dmesg output: [ 224.077275] PM: suspend entry (deep) [ 224.077286] PM: Syncing filesystems ... done. [ 225.495014] Freezing user space processes ... (elapsed 0.003 seconds) done. [ 225.498540] OOM killer disabled. [ 225.498543] Freezing remaining freezable tasks ... (elapsed 0.002 seconds) done. [ 225.500693] printk: Suspending console(s) (use no_console_suspend to debug) [ 225.502793] wlp1s0: deauthenticating from 00:03:7f:12:34:56 by local choice (Reason: 3=DEAUTH_LEAVING) [ 225.535333] sd 0:0:0:0: [sda] Synchronizing SCSI cache [ 225.535882] sd 0:0:0:0: [sda] Stopping disk [ 226.969070] ACPI: EC: interrupt blocked [ 227.002156] ACPI: Preparing to enter system sleep state S3 [ 227.007890] ACPI: EC: event blocked [ 227.007895] ACPI: EC: EC stopped [ 227.007900] PM: Saving platform NVS memory [ 227.008264] Disabling non-boot CPUs ... [ 227.034114] smpboot: CPU 1 is now offline [ 227.088320] smpboot: CPU 2 is now offline [ 227.141513] smpboot: CPU 3 is now offline [ 227.147086] Enabling non-boot CPUs ... [ 227.147187] x86: Booting SMP configuration: [ 227.147190] smpboot: Booting Node 0 Processor 1 APIC 0x2 [ 227.147916] cache: parent cpu1 should not be sleeping [ 227.148354] CPU1 is up [ 227.148424] smpboot: Booting Node 0 Processor 2 APIC 0x4 [ 227.149800] cache: parent cpu2 should not be sleeping [ 227.151143] CPU2 is up [ 227.151187] smpboot: Booting Node 0 Processor 3 APIC 0x6 [ 227.152399] cache: parent cpu3 should not be sleeping [ 227.153883] CPU3 is up [ 227.154876] ACPI: EC: EC started [ 227.155282] ACPI: Waking up from system sleep state S3 [ 227.159874] ACPI: button: The lid device is not compliant to SW_LID. [ 227.169441] ACPI: EC: interrupt unblocked [ 228.236790] ACPI: EC: event unblocked [ 228.241950] rtlwifi: rtlwifi: wireless switch is on [ 228.251865] sd 0:0:0:0: [sda] Starting disk [ 228.476637] usb 1-4: reset full-speed USB device number 2 using xhci_hcd [ 228.562879] ata1: SATA link up 6.0 Gbps (SStatus 133 SControl 300) [ 228.563924] ata2: SATA link down (SStatus 4 SControl 300) [ 228.564979] ata1.00: supports DRM functions and may not be fully accessible [ 228.565493] ata1.00: NCQ Send/Recv Log not supported [ 228.567649] ata1.00: supports DRM functions and may not be fully accessible [ 228.568252] ata1.00: NCQ Send/Recv Log not supported [ 228.570075] ata1.00: configured for UDMA/133 [ 228.580412] ahci 0000:00:13.0: port does not support device sleep [ 228.639349] Bluetooth: hci0: RTL: rtl: examining hci_ver=06 hci_rev=0e2f lmp_ver=06 lmp_subver=a041 [ 228.639368] Bluetooth: hci0: RTL: rtl: unknown IC info, lmp subver a041, hci rev 0e2f, hci ver 0006 [ 228.639742] acpi LNXPOWER:01: Turning OFF [ 228.640033] OOM killer enabled. [ 228.640040] Restarting tasks ... done. [ 228.795406] PM: suspend exit [ 228.800399] audit: type=1130 audit(1548962671.104:94): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=systemd-rfkill comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success' [ 229.067206] wlp1s0: authenticate with 12:34:56:78:90:12 [ 229.067823] wlp1s0: send auth to 12:34:56:78:90:12 (try 1/3) [ 229.070955] wlp1s0: authenticated [ 229.072395] wlp1s0: associate with 12:34:56:78:90:12 (try 1/3) [ 229.074505] wlp1s0: RX AssocResp from 12:34:56:78:90:12 (capab=0x11 status=0 aid=2) [ 229.074819] wlp1s0: associated [ 233.809200] audit: type=1131 audit(1548962676.106:95): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=systemd-rfkill comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success' The laptop doesn't go to sleep, the screen turns off, and in a couple of seconds it turns on. Please take a look at this regression. Feel free to ask me for any additional information you need. Thanks, Max > Signed-off-by: Hans de Goede <hdegoede@xxxxxxxxxx> > --- > drivers/platform/x86/intel_int0002_vgpio.c | 16 ++++++++++++++++ > 1 file changed, 16 insertions(+) > > diff --git a/drivers/platform/x86/intel_int0002_vgpio.c b/drivers/platform/x86/intel_int0002_vgpio.c > index 987a3b03f225..33c3489f5bc1 100644 > --- a/drivers/platform/x86/intel_int0002_vgpio.c > +++ b/drivers/platform/x86/intel_int0002_vgpio.c > @@ -106,6 +106,21 @@ static void int0002_irq_mask(struct irq_data *data) > outl(gpe_en_reg, GPE0A_EN_PORT); > } > > +static int int0002_irq_set_wake(struct irq_data *data, unsigned int on) > +{ > + struct gpio_chip *chip = irq_data_get_irq_chip_data(data); > + struct platform_device *pdev = to_platform_device(chip->parent); > + int irq = platform_get_irq(pdev, 0); > + > + /* Propagate to parent irq */ > + if (on) > + enable_irq_wake(irq); > + else > + disable_irq_wake(irq); > + > + return 0; > +} > + > static irqreturn_t int0002_irq(int irq, void *data) > { > struct gpio_chip *chip = data; > @@ -128,6 +143,7 @@ static struct irq_chip int0002_irqchip = { > .irq_ack = int0002_irq_ack, > .irq_mask = int0002_irq_mask, > .irq_unmask = int0002_irq_unmask, > + .irq_set_wake = int0002_irq_set_wake, > }; > > static int int0002_probe(struct platform_device *pdev)