Commit 9ab460c2 authored by Hanjun Guo's avatar Hanjun Guo Committed by Marc Zyngier

irqchip/gicv3-its: platform-msi: Refactor its_pmsi_prepare()

By adding ACPI support for platform MSI, the gicv3 driver has to
provide code to retrieve the dev id through ACPI instead of device
tree bindings; given that its_pmsi_prepare() allows already to get
the dev id but it is OF dependent, factor OF related code out into
a single function to make its_pmsi_prepare() ready to be used with
other firmware interfaces.
Signed-off-by: default avatarHanjun Guo <hanjun.guo@linaro.org>
[lorenzo.pieralisi@arm.com: rewrote commit log]
Signed-off-by: default avatarLorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Reviewed-by: default avatarMatthias Brugger <mbrugger@suse.com>
Tested-by: default avatarMing Lei <ming.lei@canonical.com>
Tested-by: default avatarWei Xu <xuwei5@hisilicon.com>
Tested-by: default avatarSinan Kaya <okaya@codeaurora.org>
Cc: Tomasz Nowicki <tn@semihalf.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: default avatarMarc Zyngier <marc.zyngier@arm.com>
parent 8d3554b8
...@@ -24,15 +24,11 @@ static struct irq_chip its_pmsi_irq_chip = { ...@@ -24,15 +24,11 @@ static struct irq_chip its_pmsi_irq_chip = {
.name = "ITS-pMSI", .name = "ITS-pMSI",
}; };
static int its_pmsi_prepare(struct irq_domain *domain, struct device *dev, static int of_pmsi_get_dev_id(struct irq_domain *domain, struct device *dev,
int nvec, msi_alloc_info_t *info) u32 *dev_id)
{ {
struct msi_domain_info *msi_info;
u32 dev_id;
int ret, index = 0; int ret, index = 0;
msi_info = msi_get_domain_info(domain->parent);
/* Suck the DeviceID out of the msi-parent property */ /* Suck the DeviceID out of the msi-parent property */
do { do {
struct of_phandle_args args; struct of_phandle_args args;
...@@ -43,11 +39,24 @@ static int its_pmsi_prepare(struct irq_domain *domain, struct device *dev, ...@@ -43,11 +39,24 @@ static int its_pmsi_prepare(struct irq_domain *domain, struct device *dev,
if (args.np == irq_domain_get_of_node(domain)) { if (args.np == irq_domain_get_of_node(domain)) {
if (WARN_ON(args.args_count != 1)) if (WARN_ON(args.args_count != 1))
return -EINVAL; return -EINVAL;
dev_id = args.args[0]; *dev_id = args.args[0];
break; break;
} }
} while (!ret); } while (!ret);
return ret;
}
static int its_pmsi_prepare(struct irq_domain *domain, struct device *dev,
int nvec, msi_alloc_info_t *info)
{
struct msi_domain_info *msi_info;
u32 dev_id;
int ret;
msi_info = msi_get_domain_info(domain->parent);
ret = of_pmsi_get_dev_id(domain, dev, &dev_id);
if (ret) if (ret)
return ret; return ret;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment