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 Williamsstruct 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