Lines Matching +full:fsl +full:- +full:mc
1 // SPDX-License-Identifier: GPL-2.0
3 * Freescale Management Complex (MC) bus driver MSI support
5 * Copyright (C) 2015-2016 Freescale Semiconductor, Inc.
18 #include "fsl-mc-private.h"
32 return (irq_hw_number_t)(desc->msi_index + (dev->icid * 10000)); in fsl_mc_domain_calc_hwirq()
38 arg->desc = desc; in fsl_mc_msi_set_desc()
39 arg->hwirq = fsl_mc_domain_calc_hwirq(to_fsl_mc_device(desc->dev), in fsl_mc_msi_set_desc()
48 struct msi_domain_ops *ops = info->ops; in fsl_mc_msi_update_dom_ops()
56 if (!ops->set_desc) in fsl_mc_msi_update_dom_ops()
57 ops->set_desc = fsl_mc_msi_set_desc; in fsl_mc_msi_update_dom_ops()
65 struct fsl_mc_device *owner_mc_dev = mc_dev_irq->mc_dev; in __fsl_mc_msi_write_msg()
69 * msi_desc->msg.address is 0x0 when this function is invoked in in __fsl_mc_msi_write_msg()
70 * the free_irq() code path. In this case, for the MC, we don't in __fsl_mc_msi_write_msg()
73 if (msi_desc->msg.address_lo == 0x0 && msi_desc->msg.address_hi == 0x0) in __fsl_mc_msi_write_msg()
79 irq_cfg.paddr = ((u64)msi_desc->msg.address_hi << 32) | in __fsl_mc_msi_write_msg()
80 msi_desc->msg.address_lo; in __fsl_mc_msi_write_msg()
81 irq_cfg.val = msi_desc->msg.data; in __fsl_mc_msi_write_msg()
82 irq_cfg.irq_num = msi_desc->irq; in __fsl_mc_msi_write_msg()
88 error = dprc_set_irq(mc_bus_dev->mc_io, in __fsl_mc_msi_write_msg()
90 mc_bus_dev->mc_handle, in __fsl_mc_msi_write_msg()
91 mc_dev_irq->dev_irq_index, in __fsl_mc_msi_write_msg()
94 dev_err(&owner_mc_dev->dev, in __fsl_mc_msi_write_msg()
101 error = dprc_set_obj_irq(mc_bus_dev->mc_io, in __fsl_mc_msi_write_msg()
103 mc_bus_dev->mc_handle, in __fsl_mc_msi_write_msg()
104 owner_mc_dev->obj_desc.type, in __fsl_mc_msi_write_msg()
105 owner_mc_dev->obj_desc.id, in __fsl_mc_msi_write_msg()
106 mc_dev_irq->dev_irq_index, in __fsl_mc_msi_write_msg()
109 dev_err(&owner_mc_dev->dev, in __fsl_mc_msi_write_msg()
122 struct fsl_mc_device *mc_bus_dev = to_fsl_mc_device(msi_desc->dev); in fsl_mc_msi_write_msg()
125 &mc_bus->irq_resources[msi_desc->msi_index]; in fsl_mc_msi_write_msg()
127 msi_desc->msg = *msg; in fsl_mc_msi_write_msg()
137 struct irq_chip *chip = info->chip; in fsl_mc_msi_update_chip_ops()
145 if (!chip->irq_write_msi_msg) in fsl_mc_msi_update_chip_ops()
146 chip->irq_write_msi_msg = fsl_mc_msi_write_msg; in fsl_mc_msi_update_chip_ops()
150 * fsl_mc_msi_create_irq_domain - Create a fsl-mc MSI interrupt domain
155 * Updates the domain and chip ops and creates a fsl-mc MSI
167 if (WARN_ON((info->flags & MSI_FLAG_LEVEL_CAPABLE))) in fsl_mc_msi_create_irq_domain()
168 info->flags &= ~MSI_FLAG_LEVEL_CAPABLE; in fsl_mc_msi_create_irq_domain()
169 if (info->flags & MSI_FLAG_USE_DEF_DOM_OPS) in fsl_mc_msi_create_irq_domain()
171 if (info->flags & MSI_FLAG_USE_DEF_CHIP_OPS) in fsl_mc_msi_create_irq_domain()
173 info->flags |= MSI_FLAG_ALLOC_SIMPLE_MSI_DESCS | MSI_FLAG_FREE_MSI_DESCS; in fsl_mc_msi_create_irq_domain()
190 bus_dev = root_dprc_dev->parent; in fsl_mc_find_msi_domain()
192 if (bus_dev->of_node) { in fsl_mc_find_msi_domain()
194 mc_dev->icid, in fsl_mc_find_msi_domain()
198 * if the msi-map property is missing assume that all the in fsl_mc_find_msi_domain()
204 bus_dev->of_node, in fsl_mc_find_msi_domain()
207 msi_domain = iort_get_device_domain(dev, mc_dev->icid, in fsl_mc_find_msi_domain()
221 return -EINVAL; in fsl_mc_msi_domain_alloc_irqs()
229 error = -EINVAL; in fsl_mc_msi_domain_alloc_irqs()