Pablo Greco 7b2c62
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
Pablo Greco 7b2c62
From: Mark Salter <msalter@redhat.com>
Pablo Greco 7b2c62
Date: Thu, 10 May 2018 17:38:44 -0400
Pablo Greco 7b2c62
Subject: [PATCH] aarch64: acpi scan: Fix regression related to X-Gene UARTs
Pablo Greco 7b2c62
Pablo Greco 7b2c62
Message-id: <20180510173844.29580-4-msalter@redhat.com>
Pablo Greco 7b2c62
Patchwork-id: 214381
Pablo Greco 7b2c62
O-Subject: [RHEL-8 BZ1519554 3/3] aarch64: acpi scan: Fix regression related to X-Gene UARTs
Pablo Greco 7b2c62
Bugzilla: 1519554
Pablo Greco 7b2c62
RH-Acked-by: Al Stone <astone@redhat.com>
Pablo Greco 7b2c62
RH-Acked-by: Tony Camuso <tcamuso@redhat.com>
Pablo Greco 7b2c62
Pablo Greco 7b2c62
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1519554
Pablo Greco 7b2c62
Brew: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=16144520
Pablo Greco 7b2c62
Pablo Greco 7b2c62
Commit e361d1f85855 ("ACPI / scan: Fix enumeration for special UART
Pablo Greco 7b2c62
devices") caused a regression with some X-Gene based platforms (Mustang
Pablo Greco 7b2c62
and M400) with invalid DSDT. The DSDT makes it appear that the UART
Pablo Greco 7b2c62
device is also a slave device attached to itself. With the above commit
Pablo Greco 7b2c62
the UART won't be enumerated by ACPI scan (slave serial devices shouldn't
Pablo Greco 7b2c62
be). So check for X-Gene UART device and skip slace device check on it.
Pablo Greco 7b2c62
Pablo Greco 7b2c62
Upstream Status: RHEL only
Pablo Greco 7b2c62
Signed-off-by: Mark Salter <msalter@redhat.com>
Pablo Greco 7b2c62
Signed-off-by: Herton R. Krzesinski <herton@redhat.com>
Pablo Greco 7b2c62
---
Pablo Greco 7b2c62
 drivers/acpi/scan.c | 9 +++++++++
Pablo Greco 7b2c62
 1 file changed, 9 insertions(+)
Pablo Greco 7b2c62
Pablo Greco 7b2c62
diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c
Pablo Greco 7b2c62
index 2142f1554761..f5fdf6f3650c 100644
Pablo Greco 7b2c62
--- a/drivers/acpi/scan.c
Pablo Greco 7b2c62
+++ b/drivers/acpi/scan.c
Pablo Greco 1ac9df
@@ -1614,6 +1614,15 @@ static bool acpi_device_enumeration_by_parent(struct acpi_device *device)
Pablo Greco 1ac9df
 	if (!acpi_match_device_ids(device, ignore_serial_bus_ids))
Pablo Greco 7b2c62
 		return false;
Pablo Greco 1ac9df
 
Pablo Greco 7b2c62
+	/*
Pablo Greco 7b2c62
+	 * Firmware on some arm64 X-Gene platforms will make the UART
Pablo Greco 7b2c62
+	 * device appear as both a UART and a slave of that UART. Just
Pablo Greco 7b2c62
+	 * bail out here for X-Gene UARTs.
Pablo Greco 7b2c62
+	 */
Pablo Greco 7b2c62
+	if (IS_ENABLED(CONFIG_ARM64) &&
Pablo Greco 7b2c62
+	    !strcmp(acpi_device_hid(device), "APMC0D08"))
Pablo Greco 7b2c62
+		return false;
Pablo Greco 7b2c62
+
Pablo Greco 7b2c62
 	INIT_LIST_HEAD(&resource_list);
Pablo Greco 7b2c62
 	acpi_dev_get_resources(device, &resource_list,
Pablo Greco 7b2c62
 			       acpi_check_serial_bus_slave,
Pablo Greco 7b2c62
-- 
Pablo Greco 7b2c62
2.28.0
Pablo Greco 7b2c62