device/device.h: Drop multiple links

Multiple links are unused throughout the tree and make the code more
confusing as an iteration over all busses is needed to get downstream
devices. This also not done consistently e.g. the allocator does not
care about multiple links on busses. A better way of dealing multiple
links below a device is to feature dummy devices with each their
respective bus.

This drops the sconfig capability to declare the same device multiple
times which was previously used to declare multiple links.

Signed-off-by: Arthur Heymans <arthur@aheymans.xyz>
Change-Id: Iab6fe269faef46ae77ed1ea425440cf5c7dbd49b
Reviewed-on: https://review.coreboot.org/c/coreboot/+/78328
Reviewed-by: Felix Held <felix-coreboot@felixheld.de>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Jincheng Li <jincheng.li@intel.com>
Reviewed-by: Lean Sheng Tan <sheng.tan@9elements.com>
diff --git a/src/soc/amd/common/block/acpi/ivrs.c b/src/soc/amd/common/block/acpi/ivrs.c
index 9d0ece1..57b5974 100644
--- a/src/soc/amd/common/block/acpi/ivrs.c
+++ b/src/soc/amd/common/block/acpi/ivrs.c
@@ -140,7 +140,6 @@
 				    unsigned long *current, uint16_t nb_bus)
 {
 	struct device *sibling;
-	struct bus *link;
 
 	if (!root_level)
 		return;
@@ -155,11 +154,11 @@
 				ivrs_add_device_or_bridge(parent, dev, current);
 	}
 
-	for (link = dev->link_list; link; link = link->next)
-		for (sibling = link->children; sibling; sibling =
-		     sibling->sibling)
-			add_ivhd_device_entries(dev, sibling, depth + 1, depth, root_level,
-						current, nb_bus);
+	if (!dev->link_list)
+		return;
+	for (sibling = dev->link_list->children; sibling; sibling = sibling->sibling)
+		add_ivhd_device_entries(dev, sibling, depth + 1, depth, root_level, current,
+					nb_bus);
 }
 
 static unsigned long acpi_ivhd_misc(unsigned long current, struct device *dev)
diff --git a/src/soc/amd/common/block/lpc/lpc.c b/src/soc/amd/common/block/lpc/lpc.c
index 4e81316..c076361 100644
--- a/src/soc/amd/common/block/lpc/lpc.c
+++ b/src/soc/amd/common/block/lpc/lpc.c
@@ -278,20 +278,20 @@
 
 static void lpc_enable_children_resources(struct device *dev)
 {
-	struct bus *link;
 	struct device *child;
 
-	for (link = dev->link_list; link; link = link->next) {
-		for (child = link->children; child; child = child->sibling) {
-			if (!child->enabled)
-				continue;
-			if (child->path.type != DEVICE_PATH_PNP)
-				continue;
-			if (CONFIG(SOC_AMD_COMMON_BLOCK_USE_ESPI))
-				configure_child_espi_windows(child);
-			else
-				configure_child_lpc_windows(dev, child);
-		}
+	if (!dev->link_list)
+		return;
+
+	for (child = dev->link_list->children; child; child = child->sibling) {
+		if (!child->enabled)
+			continue;
+		if (child->path.type != DEVICE_PATH_PNP)
+			continue;
+		if (CONFIG(SOC_AMD_COMMON_BLOCK_USE_ESPI))
+			configure_child_espi_windows(child);
+		else
+			configure_child_lpc_windows(dev, child);
 	}
 }
 
diff --git a/src/soc/amd/stoneyridge/northbridge.c b/src/soc/amd/stoneyridge/northbridge.c
index deebfb3..b95c4cd 100644
--- a/src/soc/amd/stoneyridge/northbridge.c
+++ b/src/soc/amd/stoneyridge/northbridge.c
@@ -52,16 +52,9 @@
 
 static void create_vga_resource(struct device *dev)
 {
-	struct bus *link;
-
-	/* find out which link the VGA card is connected,
-	 * we only deal with the 'first' vga card */
-	for (link = dev->link_list ; link ; link = link->next)
-		if (link->bridge_ctrl & PCI_BRIDGE_CTL_VGA)
-			break;
-
-	/* no VGA card installed */
-	if (link == NULL)
+	if (!dev->link_list)
+		return;
+	if (!(dev->link_list->bridge_ctrl & PCI_BRIDGE_CTL_VGA))
 		return;
 
 	printk(BIOS_DEBUG, "VGA: %s has VGA device\n",	dev_path(dev));
@@ -71,14 +64,11 @@
 
 static void set_resources(struct device *dev)
 {
-	struct bus *bus;
-
 	/* do we need this? */
 	create_vga_resource(dev);
 
-	for (bus = dev->link_list ; bus ; bus = bus->next)
-		if (bus->children)
-			assign_resources(bus);
+	if (dev->link_list && dev->link_list->children)
+		assign_resources(dev->link_list);
 }
 
 static void northbridge_init(struct device *dev)