Lines Matching refs:node
47 * @iort_node: IORT table node associated with the IOMMU
48 * @fwnode: fwnode associated with the IORT node
75 * iort_get_fwnode() - Retrieve fwnode associated with an IORT node
77 * @node: IORT table node to be looked-up
82 struct acpi_iort_node *node)
89 if (curr->iort_node == node) {
100 * iort_delete_fwnode() - Delete fwnode associated with an IORT node
102 * @node: IORT table node associated with fwnode to delete
104 static inline void iort_delete_fwnode(struct acpi_iort_node *node)
110 if (curr->iort_node == node) {
145 (struct acpi_iort_node *node, void *context);
237 /* Get the first IORT node */
246 "IORT node pointer overflows, bad table!\n"))
260 static acpi_status iort_match_node_callback(struct acpi_iort_node *node,
266 if (node->type == ACPI_IORT_NODE_NAMED_COMPONENT) {
296 ncomp = (struct acpi_iort_named_component *)node->node_data;
300 } else if (node->type == ACPI_IORT_NODE_PCI_ROOT_COMPLEX) {
305 pci_rc = (struct acpi_iort_root_complex *)node->node_data;
330 pr_warn(FW_BUG "[map %p] SINGLE MAPPING flag not allowed for node type %d, skipping ID map\n",
369 static struct acpi_iort_node *iort_node_get_id(struct acpi_iort_node *node,
375 if (!node->mapping_offset || !node->mapping_count ||
376 index >= node->mapping_count)
379 map = ACPI_ADD_PTR(struct acpi_iort_id_mapping, node,
380 node->mapping_offset + index * sizeof(*map));
384 pr_err(FW_BUG "[node %p type %d] ID map has NULL parent reference\n",
385 node, node->type);
393 if (node->type == ACPI_IORT_NODE_NAMED_COMPONENT ||
394 node->type == ACPI_IORT_NODE_PCI_ROOT_COMPLEX ||
395 node->type == ACPI_IORT_NODE_SMMU_V3 ||
396 node->type == ACPI_IORT_NODE_PMCG) {
405 static int iort_get_id_mapping_index(struct acpi_iort_node *node)
410 switch (node->type) {
416 if (node->revision < 1)
419 smmu = (struct acpi_iort_smmu_v3 *)node->node_data;
428 if (smmu->id_mapping_index >= node->mapping_count) {
429 pr_err(FW_BUG "[node %p type %d] ID mapping index overflows valid mappings\n",
430 node, node->type);
436 pmcg = (struct acpi_iort_pmcg *)node->node_data;
437 if (pmcg->overflow_gsiv || node->mapping_count == 0)
446 static struct acpi_iort_node *iort_node_map_id(struct acpi_iort_node *node,
452 /* Parse the ID mapping tree to find specified node type */
453 while (node) {
458 if (IORT_TYPE_MASK(node->type) & type_mask) {
461 return node;
464 if (!node->mapping_offset || !node->mapping_count)
467 map = ACPI_ADD_PTR(struct acpi_iort_id_mapping, node,
468 node->mapping_offset);
472 pr_err(FW_BUG "[node %p type %d] ID map has NULL parent reference\n",
473 node, node->type);
482 index = iort_get_id_mapping_index(node);
485 for (i = 0; i < node->mapping_count; i++, map++) {
490 rc = iort_id_map(map, node->type, map_id, &id, out_ref);
497 if (i == node->mapping_count && !out_ref)
500 node = ACPI_ADD_PTR(struct acpi_iort_node, iort_table,
513 struct acpi_iort_node *node, u32 *id_out, u8 type_mask,
520 parent = iort_node_get_id(node, &id, index);
544 struct acpi_iort_node *node;
547 * device (such as SMMU, PMCG),its iort node already cached
551 node = iort_get_iort_node(dev->fwnode);
552 if (node)
553 return node;
556 * DSDT/SSDT (with Named Component node in IORT)
577 struct acpi_iort_node *node;
580 node = iort_find_dev_node(dev);
581 if (!node)
584 iort_node_map_id(node, input_id, &dev_id, IORT_MSI_TYPE);
598 struct acpi_iort_node *node;
600 node = iort_find_dev_node(dev);
601 if (!node)
604 index = iort_get_id_mapping_index(node);
607 if (iort_node_get_id(node, dev_id, index))
610 for (i = 0; i < node->mapping_count; i++) {
611 if (iort_node_map_platform_id(node, dev_id,
651 struct acpi_iort_node *node;
653 node = iort_find_dev_node(dev);
654 if (!node)
657 node = iort_node_map_id(node, id, NULL, IORT_MSI_TYPE);
658 if (!node)
662 its = (struct acpi_iort_its_group *)node->node_data;
698 struct acpi_iort_node *node)
707 index = iort_get_id_mapping_index(node);
711 map = ACPI_ADD_PTR(struct acpi_iort_id_mapping, node,
712 node->mapping_offset + index * sizeof(*map));
717 pr_err(FW_BUG "[node %p type %d] Invalid MSI mapping\n",
718 node, node->type);
749 struct acpi_iort_node *node, *msi_parent = NULL;
754 /* find its associated iort node */
755 node = iort_scan_node(ACPI_IORT_NODE_NAMED_COMPONENT,
757 if (!node)
760 /* then find its msi parent node */
761 for (i = 0; i < node->mapping_count; i++) {
762 msi_parent = iort_node_map_platform_id(node, NULL,
898 pr_warn("IORT node type %u does not describe an SMMU\n", type);
915 static bool iort_pci_rc_supports_ats(struct acpi_iort_node *node)
919 pci_rc = (struct acpi_iort_root_complex *)node->node_data;
923 static int iort_iommu_xlate(struct device *dev, struct acpi_iort_node *node,
929 if (!node)
932 iort_fwnode = iort_get_fwnode(node);
946 return iort_iommu_driver_enabled(node->type) ?
954 struct acpi_iort_node *node;
963 parent = iort_node_map_id(info->node, alias, &streamid,
969 struct acpi_iort_node *node)
977 nc = (struct acpi_iort_named_component *)node->node_data;
982 static int iort_nc_iommu_map(struct device *dev, struct acpi_iort_node *node)
990 parent = iort_node_map_platform_id(node, &streamid,
1002 struct acpi_iort_node *node,
1008 parent = iort_node_map_id(node, *in_id, &streamid, IORT_IOMMU_TYPE);
1028 struct acpi_iort_node *node;
1045 node = iort_scan_node(ACPI_IORT_NODE_PCI_ROOT_COMPLEX,
1047 if (!node)
1050 info.node = node;
1055 if (fwspec && iort_pci_rc_supports_ats(node))
1058 node = iort_scan_node(ACPI_IORT_NODE_NAMED_COMPONENT,
1060 if (!node)
1063 err = id_in ? iort_nc_iommu_map_id(dev, node, id_in) :
1064 iort_nc_iommu_map(dev, node);
1067 iort_named_component_init(dev, node);
1100 struct acpi_iort_node *node;
1103 node = iort_scan_node(ACPI_IORT_NODE_NAMED_COMPONENT,
1105 if (!node)
1108 ncomp = (struct acpi_iort_named_component *)node->node_data;
1123 struct acpi_iort_node *node;
1127 node = iort_scan_node(ACPI_IORT_NODE_PCI_ROOT_COMPLEX,
1129 if (!node || node->revision < 1)
1132 rc = (struct acpi_iort_root_complex *)node->node_data;
1179 static int __init arm_smmu_v3_count_resources(struct acpi_iort_node *node)
1186 smmu = (struct acpi_iort_smmu_v3 *)node->node_data;
1234 struct acpi_iort_node *node)
1240 smmu = (struct acpi_iort_smmu_v3 *)node->node_data;
1278 struct acpi_iort_node *node)
1284 smmu = (struct acpi_iort_smmu_v3 *)node->node_data;
1301 struct acpi_iort_node *node)
1305 smmu = (struct acpi_iort_smmu_v3 *)node->node_data;
1323 static int __init arm_smmu_count_resources(struct acpi_iort_node *node)
1328 smmu = (struct acpi_iort_smmu *)node->node_data;
1342 struct acpi_iort_node *node)
1349 smmu = (struct acpi_iort_smmu *)node->node_data;
1356 glb_irq = ACPI_ADD_PTR(u64, node, smmu->global_interrupt_offset);
1365 ctx_irq = ACPI_ADD_PTR(u64, node, smmu->context_interrupt_offset);
1376 struct acpi_iort_node *node)
1382 smmu = (struct acpi_iort_smmu *)node->node_data;
1394 static int __init arm_smmu_v3_pmcg_count_resources(struct acpi_iort_node *node)
1399 pmcg = (struct acpi_iort_pmcg *)node->node_data;
1409 struct acpi_iort_node *node)
1414 pmcg = (struct acpi_iort_pmcg *)node->node_data;
1425 if (node->revision > 0) {
1462 int (*dev_init)(struct acpi_iort_node *node);
1464 struct acpi_iort_node *node);
1465 int (*dev_count_resources)(struct acpi_iort_node *node);
1467 struct acpi_iort_node *node);
1469 struct acpi_iort_node *node);
1496 struct acpi_iort_node *node)
1498 switch (node->type) {
1511 * iort_add_platform_device() - Allocate a platform device for IORT node
1512 * @node: Pointer to device ACPI IORT node
1517 static int __init iort_add_platform_device(struct acpi_iort_node *node,
1530 ret = ops->dev_set_proximity(&pdev->dev, node);
1535 count = ops->dev_count_resources(node);
1543 ops->dev_init_resources(r, node);
1558 * a copy of IORT node pointer to platform_data to be used to
1564 ret = platform_device_add_data(pdev, &node, sizeof(node));
1569 fwnode = iort_get_fwnode(node);
1579 ops->dev_dma_configure(&pdev->dev, node);
1581 iort_set_device_domain(&pdev->dev, node);
1650 /* Get the first IORT node */
1658 pr_err("iort node pointer overflows, bad table\n");
1715 struct acpi_iort_node *node, *end;
1728 node = ACPI_ADD_PTR(struct acpi_iort_node, iort, iort->node_offset);
1732 if (node >= end)
1735 switch (node->type) {
1741 ncomp = (struct acpi_iort_named_component *)node->node_data;
1747 if (node->revision < 1)
1750 rc = (struct acpi_iort_root_complex *)node->node_data;
1755 node = ACPI_ADD_PTR(struct acpi_iort_node, node, node->length);