Commit 858e65af authored by Thomas Gleixner's avatar Thomas Gleixner
Browse files

irqdomain: Add device pointer to irq_domain_info and msi_domain_info



Add device pointer to irq_domain_info and msi_domain_info, so that the device
can be specified at domain creation time.

Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
Signed-off-by: default avatarNam Cao <namcao@linutronix.de>
Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
Link: https://lore.kernel.org/all/943e52403b20cf13c320d55bd4446b4562466aab.1750860131.git.namcao@linutronix.de
parent 41a5f828
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -279,6 +279,7 @@ struct irq_domain_chip_generic_info;
 *			domains are added using same fwnode
 * @ops:		Domain operation callbacks
 * @host_data:		Controller private data pointer
 * @dev:		Device which creates the domain
 * @dgc_info:		Geneneric chip information structure pointer used to
 *			create generic chips for the domain if not NULL.
 * @init:		Function called when the domain is created.
@@ -298,6 +299,7 @@ struct irq_domain_info {
	const char				*name_suffix;
	const struct irq_domain_ops		*ops;
	void					*host_data;
	struct device				*dev;
#ifdef CONFIG_IRQ_DOMAIN_HIERARCHY
	/**
	 * @parent: Pointer to the parent irq domain used in a hierarchy domain
+2 −0
Original line number Diff line number Diff line
@@ -488,6 +488,7 @@ struct msi_domain_ops {
 *			gets initialized to the maximum software index limit
 *			by the domain creation code.
 * @ops:		The callback data structure
 * @dev:		Device which creates the domain
 * @chip:		Optional: associated interrupt chip
 * @chip_data:		Optional: associated interrupt chip data
 * @handler:		Optional: associated interrupt flow handler
@@ -501,6 +502,7 @@ struct msi_domain_info {
	enum irq_domain_bus_token	bus_token;
	unsigned int			hwsize;
	struct msi_domain_ops		*ops;
	struct device			*dev;
	struct irq_chip			*chip;
	void				*chip_data;
	irq_flow_handler_t		handler;
+1 −0
Original line number Diff line number Diff line
@@ -317,6 +317,7 @@ static struct irq_domain *__irq_domain_instantiate(const struct irq_domain_info

	domain->flags |= info->domain_flags;
	domain->exit = info->exit;
	domain->dev = info->dev;

#ifdef CONFIG_IRQ_DOMAIN_HIERARCHY
	if (info->parent) {
+2 −1
Original line number Diff line number Diff line
@@ -889,6 +889,7 @@ static struct irq_domain *__msi_create_irq_domain(struct fwnode_handle *fwnode,

	if (domain) {
		irq_domain_update_bus_token(domain, info->bus_token);
		domain->dev = info->dev;
		if (info->flags & MSI_FLAG_PARENT_PM_DEV)
			domain->pm_dev = parent->pm_dev;
	}
@@ -1051,6 +1052,7 @@ bool msi_create_device_irq_domain(struct device *dev, unsigned int domid,
	bundle->info.data = domain_data;
	bundle->info.chip_data = chip_data;
	bundle->info.alloc_data = &bundle->alloc_info;
	bundle->info.dev = dev;

	pops = parent->msi_parent_ops;
	snprintf(bundle->name, sizeof(bundle->name), "%s%s-%s",
@@ -1089,7 +1091,6 @@ bool msi_create_device_irq_domain(struct device *dev, unsigned int domid,
	if (!domain)
		return false;

	domain->dev = dev;
	dev->msi.data->__domains[domid].domain = domain;

	if (msi_domain_prepare_irqs(domain, dev, hwsize, &bundle->alloc_info)) {