Lines Matching +full:gic +full:- +full:v5 +full:- +full:its
1 // SPDX-License-Identifier: GPL-2.0-only
2 // Copyright (C) 2013-2015 ARM Limited, All Rights Reserved.
11 #include "irq-gic-its-msi-parent.h"
12 #include <linux/irqchip/irq-msi-lib.h>
27 ret = of_property_match_string(msi_node, "reg-names", "ns-translate"); in its_translate_frame_address()
68 return -EINVAL; in its_pci_msi_prepare()
74 * Also tell the ITS that the signalling will come from a proxy in its_pci_msi_prepare()
79 if (alias_dev->subordinate) in its_pci_msi_prepare()
80 pci_walk_bus(alias_dev->subordinate, in its_pci_msi_prepare()
82 info->flags |= MSI_ALLOC_FLAGS_PROXY_DEVICE; in its_pci_msi_prepare()
85 /* ITS specific DeviceID, as the core ITS ignores dev. */ in its_pci_msi_prepare()
86 info->scratchpad[0].ul = pci_msi_domain_get_msi_rid(domain->parent, pdev); in its_pci_msi_prepare()
96 if (!info->scratchpad[0].ul) in its_pci_msi_prepare()
100 msi_info = msi_get_domain_info(domain->parent); in its_pci_msi_prepare()
101 return msi_info->ops->msi_prepare(domain->parent, dev, nvec, info); in its_pci_msi_prepare()
115 return -EINVAL; in its_v5_pci_msi_prepare()
121 return -ENODEV; in its_v5_pci_msi_prepare()
125 return -ENODEV; in its_v5_pci_msi_prepare()
129 /* ITS specific DeviceID */ in its_v5_pci_msi_prepare()
130 info->scratchpad[0].ul = rid; in its_v5_pci_msi_prepare()
131 /* ITS translate frame physical address */ in its_v5_pci_msi_prepare()
132 info->scratchpad[1].ul = pa; in its_v5_pci_msi_prepare()
137 msi_info = msi_get_domain_info(domain->parent); in its_v5_pci_msi_prepare()
138 return msi_info->ops->msi_prepare(domain->parent, dev, nvec, info); in its_v5_pci_msi_prepare()
150 /* Suck the DeviceID out of the msi-parent property */ in of_pmsi_get_dev_id()
154 ret = of_parse_phandle_with_args(dev->of_node, in of_pmsi_get_dev_id()
155 "msi-parent", "#msi-cells", in of_pmsi_get_dev_id()
159 return -EINVAL; in of_pmsi_get_dev_id()
169 ret = of_map_id(dev->of_node, dev->id, "msi-map", "msi-map-mask", &np, dev_id); in of_pmsi_get_dev_id()
182 * Retrieve the DeviceID and the ITS translate frame node pointer in of_v5_pmsi_get_msi_info()
183 * out of the msi-parent property. in of_v5_pmsi_get_msi_info()
188 ret = of_parse_phandle_with_args(dev->of_node, in of_v5_pmsi_get_msi_info()
189 "msi-parent", "#msi-cells", in of_v5_pmsi_get_msi_info()
196 * ITS translate frames). in of_v5_pmsi_get_msi_info()
198 if (args.np->parent == irq_domain_get_of_node(domain)) { in of_v5_pmsi_get_msi_info()
200 return -EINVAL; in of_v5_pmsi_get_msi_info()
205 return -ENODEV; in of_v5_pmsi_get_msi_info()
214 ret = of_map_id(dev->of_node, dev->id, "msi-map", "msi-map-mask", &np, dev_id); in of_v5_pmsi_get_msi_info()
226 return -1; in iort_pmsi_get_dev_id()
236 if (dev->of_node) in its_pmsi_prepare()
237 ret = of_pmsi_get_dev_id(domain->parent, dev, &dev_id); in its_pmsi_prepare()
243 /* ITS specific DeviceID, as the core ITS ignores dev. */ in its_pmsi_prepare()
244 info->scratchpad[0].ul = dev_id; in its_pmsi_prepare()
249 msi_info = msi_get_domain_info(domain->parent); in its_pmsi_prepare()
250 return msi_info->ops->msi_prepare(domain->parent, in its_pmsi_prepare()
262 if (!dev->of_node) in its_v5_pmsi_prepare()
263 return -ENODEV; in its_v5_pmsi_prepare()
265 ret = of_v5_pmsi_get_msi_info(domain->parent, dev, &dev_id, &pa); in its_v5_pmsi_prepare()
269 /* ITS specific DeviceID */ in its_v5_pmsi_prepare()
270 info->scratchpad[0].ul = dev_id; in its_v5_pmsi_prepare()
271 /* ITS translate frame physical address */ in its_v5_pmsi_prepare()
272 info->scratchpad[1].ul = pa; in its_v5_pmsi_prepare()
277 msi_info = msi_get_domain_info(domain->parent); in its_v5_pmsi_prepare()
278 return msi_info->ops->msi_prepare(domain->parent, dev, nvec, info); in its_v5_pmsi_prepare()
285 msi_info = msi_get_domain_info(domain->parent); in its_msi_teardown()
286 msi_info->ops->msi_teardown(domain->parent, info); in its_msi_teardown()
295 switch(info->bus_token) { in its_init_dev_msi_info()
301 * support for dynamic post-enable MSI-X allocations in its_init_dev_msi_info()
304 * time via info->hwsize. in its_init_dev_msi_info()
306 * That should work perfectly fine for MSI/MSI-X but needs in its_init_dev_msi_info()
311 info->ops->msi_prepare = its_pci_msi_prepare; in its_init_dev_msi_info()
312 info->ops->msi_teardown = its_msi_teardown; in its_init_dev_msi_info()
320 info->ops->msi_prepare = its_pmsi_prepare; in its_init_dev_msi_info()
321 info->ops->msi_teardown = its_msi_teardown; in its_init_dev_msi_info()
338 switch (info->bus_token) { in its_v5_init_dev_msi_info()
341 info->ops->msi_prepare = its_v5_pci_msi_prepare; in its_v5_init_dev_msi_info()
342 info->ops->msi_teardown = its_msi_teardown; in its_v5_init_dev_msi_info()
346 info->ops->msi_prepare = its_v5_pmsi_prepare; in its_v5_init_dev_msi_info()
347 info->ops->msi_teardown = its_msi_teardown; in its_v5_init_dev_msi_info()
364 .prefix = "ITS-",
374 .prefix = "ITS-v5-",