mb/google/zork: Switch to using device pointers

This change replaces the device tree walks with device pointers by
using alias for following devices:
1. audio_rt5682
2. xhci0_bt
3. xhci1_bt
4. acp_machine
5. i2c2

Change-Id: I56921ab54716e4d771d9de1a479f191ca5657eba
Signed-off-by: Furquan Shaikh <furquan@google.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/57845
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Karthik Ramasubramanian <kramasub@google.com>
Reviewed-by: Tim Wawrzynczak <twawrzynczak@chromium.org>
diff --git a/src/mainboard/google/zork/variants/baseboard/devicetree_dalboz.cb b/src/mainboard/google/zork/variants/baseboard/devicetree_dalboz.cb
index f1300c6..9476723 100644
--- a/src/mainboard/google/zork/variants/baseboard/devicetree_dalboz.cb
+++ b/src/mainboard/google/zork/variants/baseboard/devicetree_dalboz.cb
@@ -296,7 +296,7 @@
 							register "desc" = ""Bluetooth""
 							register "type" = "UPC_TYPE_INTERNAL"
 							register "reset_gpio" = "ACPI_GPIO_OUTPUT_ACTIVE_HIGH(GPIO_143)"
-							device usb 2.5 on end
+							device usb 2.5 alias xhci0_bt on end
 						end
 						chip drivers/usb/acpi
 							register "desc" = ""Left Type-C Port""
@@ -338,7 +338,7 @@
 					# Set low (0) = Select DMIC0
 					# Set high (1) = Select DMIC1
 					register "dmic_select_gpio" = "ACPI_GPIO_OUTPUT(GPIO_67)"
-					device generic 0.0 on end
+					device generic 0.0 alias acp_machine on end
 				end
 			end # Audio
 			device ref hda off end # HDA
@@ -364,7 +364,7 @@
 								register "property_list[1].type" = "ACPI_DP_TYPE_STRING"
 								register "property_list[1].name" = ""realtek,mclk-name""
 								register "property_list[1].string" = ""oscout1""
-								device i2c 1a on end
+								device i2c 1a alias audio_rt5682 on end
 							end
 						end
 					end
diff --git a/src/mainboard/google/zork/variants/baseboard/devicetree_trembyle.cb b/src/mainboard/google/zork/variants/baseboard/devicetree_trembyle.cb
index f8e5d9a..ce01215 100644
--- a/src/mainboard/google/zork/variants/baseboard/devicetree_trembyle.cb
+++ b/src/mainboard/google/zork/variants/baseboard/devicetree_trembyle.cb
@@ -321,7 +321,7 @@
 							register "desc" = ""Bluetooth""
 							register "type" = "UPC_TYPE_INTERNAL"
 							register "reset_gpio" = "ACPI_GPIO_OUTPUT_ACTIVE_HIGH(GPIO_14)"
-							device usb 2.5 on end
+							device usb 2.5 alias xhci0_bt on end
 						end
 					end
 				end
@@ -341,7 +341,7 @@
 							register "desc" = ""Bluetooth""
 							register "type" = "UPC_TYPE_INTERNAL"
 							register "reset_gpio" = "ACPI_GPIO_OUTPUT_ACTIVE_HIGH(GPIO_14)"
-							device usb 2.1 on end
+							device usb 2.1 alias xhci1_bt on end
 						end
 						chip drivers/usb/acpi
 							register "desc" = ""World-Facing Camera""
@@ -364,7 +364,7 @@
 					# Set low (0) = Select DMIC0
 					# Set high (1) = Select DMIC1
 					register "dmic_select_gpio" = "ACPI_GPIO_OUTPUT(GPIO_67)"
-					device generic 0.0 on end
+					device generic 0.0 alias acp_machine on end
 				end
 			end # Audio
 			device ref hda off end # HDA
@@ -390,7 +390,7 @@
 								register "property_list[1].type" = "ACPI_DP_TYPE_STRING"
 								register "property_list[1].name" = ""realtek,mclk-name""
 								register "property_list[1].string" = ""oscout1""
-								device i2c 1a on end
+								device i2c 1a alias audio_rt5682 on end
 							end
 						end
 					end
diff --git a/src/mainboard/google/zork/variants/baseboard/ramstage_common.c b/src/mainboard/google/zork/variants/baseboard/ramstage_common.c
index f7b8ed4..afb890b 100644
--- a/src/mainboard/google/zork/variants/baseboard/ramstage_common.c
+++ b/src/mainboard/google/zork/variants/baseboard/ramstage_common.c
@@ -13,34 +13,14 @@
 #include <soc/iomap.h>
 #include <soc/pci_devs.h>
 
-extern struct chip_operations drivers_amd_i2s_machine_dev_ops;
 extern struct chip_operations drivers_i2c_generic_ops;
 extern struct chip_operations drivers_i2c_hid_ops;
 
+WEAK_DEV_PTR(xhci1_bt);
+
 static void update_hp_int_odl(void)
 {
-	static const struct device_path rt5682_path[] = {
-		{
-			.type = DEVICE_PATH_PCI,
-			.pci.devfn = LPC_DEVFN
-		},
-		{
-			.type = DEVICE_PATH_PNP,
-			.pnp.port = 0xc09,
-			.pnp.device = 0x0
-		},
-		{
-			.type = DEVICE_PATH_GENERIC,
-			.generic.id = 0,
-			.generic.subid = 0
-		},
-		{
-			.type = DEVICE_PATH_I2C,
-			.i2c.device = 0x1a
-		}
-	};
-
-	const struct device *rt5682_dev;
+	const struct device *rt5682_dev = DEV_PTR(audio_rt5682);
 	struct drivers_i2c_generic_config *cfg;
 	struct acpi_gpio *gpio;
 	struct soc_amd_picasso_config *soc_cfg;
@@ -48,19 +28,6 @@
 	if (!variant_uses_codec_gpi())
 		return;
 
-	rt5682_dev = find_dev_nested_path(
-		pci_root_bus(), rt5682_path, ARRAY_SIZE(rt5682_path));
-	if (!rt5682_dev) {
-		printk(BIOS_ERR, "%s: Failed to find audio device\n",
-				__func__);
-		return;
-	}
-
-	if (rt5682_dev->chip_ops != &drivers_i2c_generic_ops) {
-		printk(BIOS_ERR, "%s: Incorrect device found\n", __func__);
-		return;
-	}
-
 	cfg = config_of(rt5682_dev);
 	gpio = &cfg->irq_gpio;
 	gpio->pins[0] = 62;
@@ -76,41 +43,13 @@
 
 static void update_dmic_gpio(void)
 {
-	static const struct device_path acp_machine_path[] = {
-		{
-			.type = DEVICE_PATH_PCI,
-			.pci.devfn = PCIE_GPP_A_DEVFN
-		},
-		{
-			.type = DEVICE_PATH_PCI,
-			.pci.devfn = AUDIO_DEVFN
-		},
-		{
-			.type = DEVICE_PATH_GENERIC,
-			.generic.id = 0,
-			.generic.subid = 0
-		}
-	};
-
-	const struct device *machine_dev;
+	const struct device *machine_dev = DEV_PTR(acp_machine);
 	struct drivers_amd_i2s_machine_dev_config *cfg;
 	struct acpi_gpio *gpio;
 
 	if (variant_uses_v3_schematics())
 		return;
 
-	machine_dev = find_dev_nested_path(
-		pci_root_bus(), acp_machine_path, ARRAY_SIZE(acp_machine_path));
-	if (!machine_dev) {
-		printk(BIOS_ERR, "%s: Failed to find ACP machine device\n", __func__);
-		return;
-	}
-
-	if (machine_dev->chip_ops != &drivers_amd_i2s_machine_dev_ops) {
-		printk(BIOS_ERR, "%s: Incorrect device found\n", __func__);
-		return;
-	}
-
 	cfg = config_of(machine_dev);
 	gpio = &cfg->dmic_select_gpio;
 
@@ -132,18 +71,10 @@
  *
  * debug_device_name is used for debug messaging only.
  */
-static void remove_usb_device_reset_gpio(const struct device_path usb_path[],
-					 size_t path_length, const char *debug_device_name)
+static void remove_usb_device_reset_gpio(const struct device *usb_dev)
 {
 
-	const struct device *usb_dev;
 	struct drivers_usb_acpi_config *usb_cfg;
-
-	usb_dev = find_dev_nested_path(pci_root_bus(), usb_path, path_length);
-	if (!usb_dev) {
-		printk(BIOS_ERR, "%s: Failed to find %s!", __func__, debug_device_name);
-		return;
-	}
 	/* config_of dies on failure, so a NULL check is not required */
 	usb_cfg = config_of(usb_dev);
 	usb_cfg->reset_gpio.pin_count = 0;
@@ -155,51 +86,8 @@
  */
 static void baseboard_trembyle_remove_bluetooth_reset_gpio(void)
 {
-	static const struct device_path xhci0_bt_path[] = {
-		{
-			.type = DEVICE_PATH_PCI,
-			.pci.devfn = PCIE_GPP_A_DEVFN
-		},
-		{
-			.type = DEVICE_PATH_PCI,
-			.pci.devfn = XHCI0_DEVFN
-		},
-		{
-			.type = DEVICE_PATH_USB,
-			.usb.port_type = 0,
-			.usb.port_id = 0
-		},
-		{
-			.type = DEVICE_PATH_USB,
-			.usb.port_type = 2,
-			.usb.port_id = 5
-		}
-	};
-	static const struct device_path xhci1_bt_path[] = {
-		{
-			.type = DEVICE_PATH_PCI,
-			.pci.devfn = PCIE_GPP_A_DEVFN
-		},
-		{
-			.type = DEVICE_PATH_PCI,
-			.pci.devfn = XHCI1_DEVFN
-		},
-		{
-			.type = DEVICE_PATH_USB,
-			.usb.port_type = 0,
-			.usb.port_id = 0
-		},
-		{
-			.type = DEVICE_PATH_USB,
-			.usb.port_type = 2,
-			.usb.port_id = 1
-		}
-	};
-
-	remove_usb_device_reset_gpio(xhci0_bt_path, ARRAY_SIZE(xhci0_bt_path),
-				     "XHCI0 Bluetoth USB Device");
-	remove_usb_device_reset_gpio(xhci1_bt_path, ARRAY_SIZE(xhci1_bt_path),
-				     "XHCI1 Bluetoth USB Device");
+	remove_usb_device_reset_gpio(DEV_PTR(xhci0_bt));
+	remove_usb_device_reset_gpio(DEV_PTR(xhci1_bt));
 }
 
 void variant_bluetooth_update(void)
@@ -212,7 +100,7 @@
 
 void variant_touchscreen_update(void)
 {
-	DEVTREE_CONST struct device *mmio_dev = NULL;
+	DEVTREE_CONST struct device *mmio_dev = DEV_PTR(i2c_2);
 	struct device *child = NULL;
 
 	/*
@@ -227,17 +115,6 @@
 	if (variant_uses_v3_6_schematics())
 		return;
 
-	while (1) {
-		mmio_dev = dev_find_path(mmio_dev, DEVICE_PATH_MMIO);
-		if (mmio_dev == NULL)
-			break;
-		if (mmio_dev->path.mmio.addr == APU_I2C2_BASE)
-			break;
-	}
-
-	if (mmio_dev == NULL)
-		return;
-
 	while ((child = dev_bus_each_child(mmio_dev->link_list, child)) != NULL) {
 		struct drivers_i2c_generic_config *cfg;
 
diff --git a/src/mainboard/google/zork/variants/dalboz/variant.c b/src/mainboard/google/zork/variants/dalboz/variant.c
index 21aaec8..b4e5bcc 100644
--- a/src/mainboard/google/zork/variants/dalboz/variant.c
+++ b/src/mainboard/google/zork/variants/dalboz/variant.c
@@ -3,61 +3,12 @@
 #include <baseboard/variants.h>
 #include <console/console.h>
 #include <device/device.h>
-#include <drivers/i2c/generic/chip.h>
-#include <soc/pci_devs.h>
 #include <ec/google/chromeec/ec.h>
 #include <ec/google/chromeec/i2c_tunnel/chip.h>
 #include <string.h>
 
-#define EC_PNP_ID 0x0c09
-#define DALBOZ_DB_USBC 0x0
 #define DALBOZ_DB_HDMI 0x1
 
-/* Look for an EC device of type PNP with id 0x0c09 */
-static bool match_ec_dev(DEVTREE_CONST struct device *dev)
-{
-	if (dev->path.type != DEVICE_PATH_PNP)
-		return false;
-
-	if (dev->path.pnp.port != EC_PNP_ID)
-		return false;
-
-	return true;
-}
-
-extern struct chip_operations drivers_i2c_generic_ops;
-
-/* Look for an I2C device with HID "10EC5682" */
-static bool match_audio_dev(DEVTREE_CONST struct device *dev)
-{
-	struct drivers_i2c_generic_config *cfg;
-
-	if (dev->chip_ops != &drivers_i2c_generic_ops)
-		return false;
-
-	cfg = dev->chip_info;
-
-	return !strcmp(cfg->hid, "10EC5682");
-}
-
-extern struct chip_operations ec_google_chromeec_i2c_tunnel_ops;
-
-/* Look for Cros EC tunnel device which has audio device under it. */
-static bool match_audio_tunnel(DEVTREE_CONST struct device *dev)
-{
-	const struct device *audio_dev;
-
-	if (dev->chip_ops != &ec_google_chromeec_i2c_tunnel_ops)
-		return false;
-
-	audio_dev = dev_find_matching_device_on_bus(dev->link_list, match_audio_dev);
-
-	if (!audio_dev)
-		return false;
-
-	return true;
-}
-
 /*
  * This is to allow support for audio on older board versions (< 2). [b/153458561]. This
  * should be removed once these boards are phased out.
@@ -65,9 +16,7 @@
 static void update_audio_configuration(void)
 {
 	uint32_t board_version;
-	const struct device *lpc_controller;
-	const struct device *ec_dev;
-	const struct device *i2c_tunnel_dev;
+	const struct device *i2c_tunnel_dev = DEV_PTR(audio_rt5682);
 	struct ec_google_chromeec_i2c_tunnel_config *cfg;
 
 	/* If CBI board version cannot be read, assume this is an older revision of hardware. */
@@ -77,32 +26,7 @@
 	if (board_version >= 2)
 		return;
 
-	lpc_controller = SOC_LPC_DEV;
-	if (lpc_controller == NULL) {
-		printk(BIOS_ERR, "%s: LPC controller device not found!\n", __func__);
-		return;
-	}
-
-	ec_dev = dev_find_matching_device_on_bus(lpc_controller->link_list, match_ec_dev);
-
-	if (ec_dev == NULL) {
-		printk(BIOS_ERR, "%s: EC device not found!\n", __func__);
-		return;
-	}
-
-	i2c_tunnel_dev = dev_find_matching_device_on_bus(ec_dev->link_list, match_audio_tunnel);
-
-	if (i2c_tunnel_dev == NULL) {
-		printk(BIOS_ERR, "%s: I2C tunnel device not found!\n", __func__);
-		return;
-	}
-
-	cfg = i2c_tunnel_dev->chip_info;
-	if (cfg == NULL) {
-		printk(BIOS_ERR, "%s: I2C tunnel device config not found!\n", __func__);
-		return;
-	}
-
+	cfg = config_of(i2c_tunnel_dev);
 	cfg->remote_bus = 5;
 }