162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only 262306a36Sopenharmony_ci/* Copyright(c) 2021 Intel Corporation. All rights reserved. */ 362306a36Sopenharmony_ci 462306a36Sopenharmony_ci#include <linux/platform_device.h> 562306a36Sopenharmony_ci#include <linux/device.h> 662306a36Sopenharmony_ci#include <linux/acpi.h> 762306a36Sopenharmony_ci#include <cxl.h> 862306a36Sopenharmony_ci#include "test/mock.h" 962306a36Sopenharmony_ci 1062306a36Sopenharmony_cistruct acpi_device *to_cxl_host_bridge(struct device *host, struct device *dev) 1162306a36Sopenharmony_ci{ 1262306a36Sopenharmony_ci int index; 1362306a36Sopenharmony_ci struct acpi_device *adev, *found = NULL; 1462306a36Sopenharmony_ci struct cxl_mock_ops *ops = get_cxl_mock_ops(&index); 1562306a36Sopenharmony_ci 1662306a36Sopenharmony_ci if (ops && ops->is_mock_bridge(dev)) { 1762306a36Sopenharmony_ci found = ACPI_COMPANION(dev); 1862306a36Sopenharmony_ci goto out; 1962306a36Sopenharmony_ci } 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_ci if (dev->bus == &platform_bus_type) 2262306a36Sopenharmony_ci goto out; 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_ci adev = to_acpi_device(dev); 2562306a36Sopenharmony_ci if (!acpi_pci_find_root(adev->handle)) 2662306a36Sopenharmony_ci goto out; 2762306a36Sopenharmony_ci 2862306a36Sopenharmony_ci if (strcmp(acpi_device_hid(adev), "ACPI0016") == 0) { 2962306a36Sopenharmony_ci found = adev; 3062306a36Sopenharmony_ci dev_dbg(host, "found host bridge %s\n", dev_name(&adev->dev)); 3162306a36Sopenharmony_ci } 3262306a36Sopenharmony_ciout: 3362306a36Sopenharmony_ci put_cxl_mock_ops(index); 3462306a36Sopenharmony_ci return found; 3562306a36Sopenharmony_ci} 36