Lines Matching +full:gic +full:- +full:v5

1 // SPDX-License-Identifier: GPL-2.0-only
3 * Copyright (C) 2024-2025 ARM Limited, All Rights Reserved.
15 #include <linux/irqchip/arm-gic-v5.h>
24 return readl_relaxed(iwb_node->iwb_base + reg_offset); in iwb_readl_relaxed()
30 writel_relaxed(val, iwb_node->iwb_base + reg_offset); in iwb_writel_relaxed()
35 return gicv5_wait_for_op_atomic(iwb_node->iwb_base, GICV5_IWB_WENABLE_STATUSR, in gicv5_iwb_wait_for_wenabler()
46 if (n >= iwb_node->nr_regs) { in __gicv5_iwb_set_wire_enable()
48 return -EINVAL; in __gicv5_iwb_set_wire_enable()
81 gicv5_iwb_disable_wire(iwb_node, d->hwirq); in gicv5_iwb_irq_disable()
89 gicv5_iwb_enable_wire(iwb_node, d->hwirq); in gicv5_iwb_irq_enable()
99 iwb_wire = d->hwirq; in gicv5_iwb_set_type()
103 if (n >= iwb_node->nr_regs) { in gicv5_iwb_set_type()
105 return -EINVAL; in gicv5_iwb_set_type()
121 return -EINVAL; in gicv5_iwb_set_type()
131 alloc_info->desc = desc; in gicv5_iwb_domain_set_desc()
132 alloc_info->hwirq = (u32)desc->data.icookie.value; in gicv5_iwb_domain_set_desc()
139 if (!is_of_node(fwspec->fwnode)) in gicv5_iwb_irq_domain_translate()
140 return -EINVAL; in gicv5_iwb_irq_domain_translate()
142 if (fwspec->param_count < 2) in gicv5_iwb_irq_domain_translate()
143 return -EINVAL; in gicv5_iwb_irq_domain_translate()
149 *hwirq = fwspec->param[0]; in gicv5_iwb_irq_domain_translate()
150 *type = fwspec->param[1] & IRQ_TYPE_SENSE_MASK; in gicv5_iwb_irq_domain_translate()
159 .name = "GICv5-IWB",
193 if (WARN_ON_ONCE(!dev->msi.domain)) in gicv5_iwb_create_device_domain()
211 return ERR_PTR(-ENOMEM); in gicv5_iwb_init_bases()
213 iwb_node->iwb_base = iwb_base; in gicv5_iwb_init_bases()
220 dev_err(&pdev->dev, "IWB must be enabled in firmware\n"); in gicv5_iwb_init_bases()
221 return ERR_PTR(-EINVAL); in gicv5_iwb_init_bases()
224 iwb_node->nr_regs = FIELD_GET(GICV5_IWB_IDR0_IW_RANGE, idr0) + 1; in gicv5_iwb_init_bases()
226 for (n = 0; n < iwb_node->nr_regs; n++) in gicv5_iwb_init_bases()
233 if (!gicv5_iwb_create_device_domain(&pdev->dev, nr_wires, iwb_node)) in gicv5_iwb_init_bases()
234 return ERR_PTR(-ENOMEM); in gicv5_iwb_init_bases()
247 return -EINVAL; in gicv5_iwb_device_probe()
249 iwb_base = devm_ioremap(&pdev->dev, res->start, resource_size(res)); in gicv5_iwb_device_probe()
251 dev_err(&pdev->dev, "failed to ioremap %pR\n", res); in gicv5_iwb_device_probe()
252 return -ENOMEM; in gicv5_iwb_device_probe()
263 { .compatible = "arm,gic-v5-iwb" },