Lines Matching +full:msi +full:- +full:parent
1 // SPDX-License-Identifier: GPL-2.0-only
2 // Copyright (C) 2013-2015 ARM Limited, All Rights Reserved.
10 #include "irq-gic-common.h"
11 #include "irq-msi-lib.h"
24 int msi, msix, *count = data; in its_pci_msi_vec_count() local
26 msi = max(pci_msi_vec_count(pdev), 0); in its_pci_msi_vec_count()
28 *count += max(msi, msix); in its_pci_msi_vec_count()
50 return -EINVAL; in its_pci_msi_prepare()
61 if (alias_dev->subordinate) in its_pci_msi_prepare()
62 pci_walk_bus(alias_dev->subordinate, in its_pci_msi_prepare()
64 info->flags |= MSI_ALLOC_FLAGS_PROXY_DEVICE; in its_pci_msi_prepare()
68 info->scratchpad[0].ul = pci_msi_domain_get_msi_rid(domain->parent, pdev); in its_pci_msi_prepare()
71 * @domain->msi_domain_info->hwsize contains the size of the in its_pci_msi_prepare()
72 * MSI[-X] domain, but vector allocation happens one by one. This in its_pci_msi_prepare()
73 * needs some thought when MSI comes into play as the size of MSI in its_pci_msi_prepare()
78 if (msi_info->hwsize > nvec) in its_pci_msi_prepare()
79 nvec = msi_info->hwsize; in its_pci_msi_prepare()
89 if (!info->scratchpad[0].ul) in its_pci_msi_prepare()
93 msi_info = msi_get_domain_info(domain->parent); in its_pci_msi_prepare()
94 return msi_info->ops->msi_prepare(domain->parent, dev, nvec, info); in its_pci_msi_prepare()
105 /* Suck the DeviceID out of the msi-parent property */ in of_pmsi_get_dev_id()
109 ret = of_parse_phandle_with_args(dev->of_node, in of_pmsi_get_dev_id()
110 "msi-parent", "#msi-cells", in of_pmsi_get_dev_id()
114 return -EINVAL; in of_pmsi_get_dev_id()
126 return -1; in iort_pmsi_get_dev_id()
136 if (dev->of_node) in its_pmsi_prepare()
137 ret = of_pmsi_get_dev_id(domain->parent, dev, &dev_id); in its_pmsi_prepare()
144 info->scratchpad[0].ul = dev_id; in its_pmsi_prepare()
147 * @domain->msi_domain_info->hwsize contains the size of the device in its_pmsi_prepare()
151 if (msi_info->hwsize > nvec) in its_pmsi_prepare()
152 nvec = msi_info->hwsize; in its_pmsi_prepare()
157 msi_info = msi_get_domain_info(domain->parent); in its_pmsi_prepare()
158 return msi_info->ops->msi_prepare(domain->parent, in its_pmsi_prepare()
168 switch(info->bus_token) { in its_init_dev_msi_info()
174 * support for dynamic post-enable MSI-X allocations in its_init_dev_msi_info()
177 * time via info->hwsize. in its_init_dev_msi_info()
179 * That should work perfectly fine for MSI/MSI-X but needs in its_init_dev_msi_info()
180 * some thoughts for purely software managed MSI domains in its_init_dev_msi_info()
184 info->ops->msi_prepare = its_pci_msi_prepare; in its_init_dev_msi_info()
192 info->ops->msi_prepare = its_pmsi_prepare; in its_init_dev_msi_info()
208 .prefix = "ITS-",