summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--0001-i2c-core-Restore-acpi_walk_dep_device_list-getting-c.patch70
-rw-r--r--kernel.spec9
2 files changed, 79 insertions, 0 deletions
diff --git a/0001-i2c-core-Restore-acpi_walk_dep_device_list-getting-c.patch b/0001-i2c-core-Restore-acpi_walk_dep_device_list-getting-c.patch
new file mode 100644
index 000000000..85c61145d
--- /dev/null
+++ b/0001-i2c-core-Restore-acpi_walk_dep_device_list-getting-c.patch
@@ -0,0 +1,70 @@
+From c342deae0807d249020e1edda9920255d76b58a1 Mon Sep 17 00:00:00 2001
+From: Hans de Goede <hdegoede@redhat.com>
+Date: Wed, 14 Oct 2020 13:59:06 +0200
+Subject: [PATCH] i2c: core: Restore acpi_walk_dep_device_list() getting called
+ after registering the ACPI i2c devs
+
+Commit 21653a4181ff ("i2c: core: Call i2c_acpi_install_space_handler()
+before i2c_acpi_register_devices()")'s intention was to only move the
+acpi_install_address_space_handler() call to the point before where
+the ACPI declared i2c-children of the adapter where instantiated by
+i2c_acpi_register_devices().
+
+But i2c_acpi_install_space_handler() had a call to
+acpi_walk_dep_device_list() hidden (that is I missed it) at the end
+of it, so as an unwanted side-effect now acpi_walk_dep_device_list()
+was also being called before i2c_acpi_register_devices().
+
+Move the acpi_walk_dep_device_list() call to the end of
+i2c_acpi_register_devices(), so that it is once again called *after*
+the i2c_client-s hanging of the adapter have been created.
+
+This fixes the Microsoft Surface Go 2 hanging at boot.
+
+Fixes: 21653a4181ff ("i2c: core: Call i2c_acpi_install_space_handler() before i2c_acpi_register_devices()")
+Suggested-by: Maximilian Luz <luzmaximilian@gmail.com>
+Reported-and-tested-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
+Signed-off-by: Hans de Goede <hdegoede@redhat.com>
+---
+ drivers/i2c/i2c-core-acpi.c | 11 ++++++++++-
+ 1 file changed, 10 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/i2c/i2c-core-acpi.c b/drivers/i2c/i2c-core-acpi.c
+index 2ade99b..bbf8dd4 100644
+--- a/drivers/i2c/i2c-core-acpi.c
++++ b/drivers/i2c/i2c-core-acpi.c
+@@ -264,6 +264,7 @@ static acpi_status i2c_acpi_add_device(acpi_handle handle, u32 level,
+ void i2c_acpi_register_devices(struct i2c_adapter *adap)
+ {
+ acpi_status status;
++ acpi_handle handle;
+
+ if (!has_acpi_companion(&adap->dev))
+ return;
+@@ -274,6 +275,15 @@ void i2c_acpi_register_devices(struct i2c_adapter *adap)
+ adap, NULL);
+ if (ACPI_FAILURE(status))
+ dev_warn(&adap->dev, "failed to enumerate I2C slaves\n");
++
++ if (!adap->dev.parent)
++ return;
++
++ handle = ACPI_HANDLE(adap->dev.parent);
++ if (!handle)
++ return;
++
++ acpi_walk_dep_device_list(handle);
+ }
+
+ const struct acpi_device_id *
+@@ -729,7 +739,6 @@ int i2c_acpi_install_space_handler(struct i2c_adapter *adapter)
+ return -ENOMEM;
+ }
+
+- acpi_walk_dep_device_list(handle);
+ return 0;
+ }
+
+--
+2.28.0
+
diff --git a/kernel.spec b/kernel.spec
index 4fb095677..a435cabb7 100644
--- a/kernel.spec
+++ b/kernel.spec
@@ -894,6 +894,12 @@ Patch121: CVE-2020-16119-DCCP-CCID-structure-use-after-free.patch
# CVE-2020-12351 CVE-2020-12352 rhbz 1886521 1888439 1886529 1888440
Patch122: bluetooth_cves.patch
+# Surface Go series not booting regression fix (rhbz 1886249)
+# Also fixes some touchscreen regressions:
+# https://bugzilla.kernel.org/show_bug.cgi?id=209627
+# Pending for inclusion into stable series
+Patch123: 0001-i2c-core-Restore-acpi_walk_dep_device_list-getting-c.patch
+
# END OF PATCH DEFINITIONS
%endif
@@ -3007,6 +3013,9 @@ fi
#
#
%changelog
+* Fri Oct 16 2020 Hans de Goede <hdegoede@redhat.com>
+- Fix Micrsoft Surface Go series boot regression (rhbz 1886249)
+
* Thu Oct 15 2020 Justin M. Forbes <jforbes@fedoraproject.org> - 5.8.15-301
- Fix BleedingTooth CVE-2020-12351 CVE-2020-12352 (rhbz 1886521 1888439 1886529 1888440)