xref: /openbmc/linux/tools/testing/cxl/mock_acpi.c (revision 98d2d3a2)
1*67dcdd4dSDan Williams // SPDX-License-Identifier: GPL-2.0-only
2*67dcdd4dSDan Williams /* Copyright(c) 2021 Intel Corporation. All rights reserved. */
3*67dcdd4dSDan Williams 
4*67dcdd4dSDan Williams #include <linux/platform_device.h>
5*67dcdd4dSDan Williams #include <linux/device.h>
6*67dcdd4dSDan Williams #include <linux/acpi.h>
7*67dcdd4dSDan Williams #include <cxl.h>
8*67dcdd4dSDan Williams #include "test/mock.h"
9*67dcdd4dSDan Williams 
to_cxl_host_bridge(struct device * host,struct device * dev)10*67dcdd4dSDan Williams struct acpi_device *to_cxl_host_bridge(struct device *host, struct device *dev)
11*67dcdd4dSDan Williams {
12*67dcdd4dSDan Williams 	int index;
13*67dcdd4dSDan Williams 	struct acpi_device *adev, *found = NULL;
14*67dcdd4dSDan Williams 	struct cxl_mock_ops *ops = get_cxl_mock_ops(&index);
15*67dcdd4dSDan Williams 
16*67dcdd4dSDan Williams 	if (ops && ops->is_mock_bridge(dev)) {
17*67dcdd4dSDan Williams 		found = ACPI_COMPANION(dev);
18*67dcdd4dSDan Williams 		goto out;
19*67dcdd4dSDan Williams 	}
20*67dcdd4dSDan Williams 
21*67dcdd4dSDan Williams 	if (dev->bus == &platform_bus_type)
22*67dcdd4dSDan Williams 		goto out;
23*67dcdd4dSDan Williams 
24*67dcdd4dSDan Williams 	adev = to_acpi_device(dev);
25*67dcdd4dSDan Williams 	if (!acpi_pci_find_root(adev->handle))
26*67dcdd4dSDan Williams 		goto out;
27*67dcdd4dSDan Williams 
28*67dcdd4dSDan Williams 	if (strcmp(acpi_device_hid(adev), "ACPI0016") == 0) {
29*67dcdd4dSDan Williams 		found = adev;
30*67dcdd4dSDan Williams 		dev_dbg(host, "found host bridge %s\n", dev_name(&adev->dev));
31*67dcdd4dSDan Williams 	}
32*67dcdd4dSDan Williams out:
33*67dcdd4dSDan Williams 	put_cxl_mock_ops(index);
34*67dcdd4dSDan Williams 	return found;
35*67dcdd4dSDan Williams }
36