From: Thomas Gleixner <tglx@linutronix.de>
To: LKML <linux-kernel@vger.kernel.org>
Cc: linux-arm-kernel@lists.infradead.org, linux-pci@vger.kernel.org,
maz@kernel.org, tglx@linutronix.de, anna-maria@linutronix.de,
shawnguo@kernel.org, s.hauer@pengutronix.de, festevam@gmail.com,
bhelgaas@google.com, rdunlap@infradead.org, vidyas@nvidia.com,
ilpo.jarvinen@linux.intel.com, apatel@ventanamicro.com,
kevin.tian@intel.com, nipun.gupta@amd.com, den@valinux.co.jp,
andrew@lunn.ch, gregory.clement@bootlin.com,
sebastian.hesselbarth@gmail.com, gregkh@linuxfoundation.org,
rafael@kernel.org, alex.williamson@redhat.com, will@kernel.org,
lorenzo.pieralisi@arm.com, jgg@mellanox.com,
ammarfaizi2@gnuweeb.org, robin.murphy@arm.com,
lpieralisi@kernel.org, nm@ti.com, kristo@kernel.org,
vkoul@kernel.org, okaya@kernel.org, agross@kernel.org,
andersson@kernel.org, mark.rutland@arm.com,
shameerali.kolothum.thodi@huawei.com, yuzenghui@huawei.com,
shivamurthy.shastri@linutronix.de
Subject: [patch V4 19/21] irqchip/irq-mvebu-icu: Remove platform MSI leftovers
Date: Sun, 23 Jun 2024 17:19:04 +0200 (CEST) [thread overview]
Message-ID: <20240623142235.881677325@linutronix.de> (raw)
In-Reply-To: <20240623142137.448898081@linutronix.de>
From: Thomas Gleixner <tglx@linutronix.de>
All related domains provide MSI parent functionality, so the fallback code
to the original platform MSI implementation is not longer required.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Anna-Maria Behnsen <anna-maria@linutronix.de>
Signed-off-by: Shivamurthy Shastri <shivamurthy.shastri@linutronix.de>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
drivers/irqchip/irq-mvebu-icu.c | 212 +-------------------------------
1 file changed, 6 insertions(+), 206 deletions(-)
diff --git a/drivers/irqchip/irq-mvebu-icu.c b/drivers/irqchip/irq-mvebu-icu.c
index 2a210cd9482e..b337f6c05f18 100644
--- a/drivers/irqchip/irq-mvebu-icu.c
+++ b/drivers/irqchip/irq-mvebu-icu.c
@@ -129,196 +129,6 @@ static void mvebu_icu_init(struct mvebu_icu *icu,
writel_relaxed(msg[1].address_lo, icu->base + subset->offset_clr_al);
}
-/* Start of area to be removed once all parent chips provide MSI parent */
-
-struct mvebu_icu_irq_data {
- struct mvebu_icu *icu;
- unsigned int icu_group;
- unsigned int type;
-};
-
-static void mvebu_icu_write_msg(struct msi_desc *desc, struct msi_msg *msg)
-{
- struct irq_data *d = irq_get_irq_data(desc->irq);
- struct mvebu_icu_msi_data *msi_data = platform_msi_get_host_data(d->domain);
- struct mvebu_icu_irq_data *icu_irqd = d->chip_data;
- struct mvebu_icu *icu = icu_irqd->icu;
- unsigned int icu_int;
-
- if (msg->address_lo || msg->address_hi) {
- /* One off initialization per domain */
- mvebu_icu_init(icu, msi_data, msg);
- /* Configure the ICU with irq number & type */
- icu_int = msg->data | ICU_INT_ENABLE;
- if (icu_irqd->type & IRQ_TYPE_EDGE_RISING)
- icu_int |= ICU_IS_EDGE;
- icu_int |= icu_irqd->icu_group << ICU_GROUP_SHIFT;
- } else {
- /* De-configure the ICU */
- icu_int = 0;
- }
-
- writel_relaxed(icu_int, icu->base + ICU_INT_CFG(d->hwirq));
-
- /*
- * The SATA unit has 2 ports, and a dedicated ICU entry per
- * port. The ahci sata driver supports only one irq interrupt
- * per SATA unit. To solve this conflict, we configure the 2
- * SATA wired interrupts in the south bridge into 1 GIC
- * interrupt in the north bridge. Even if only a single port
- * is enabled, if sata node is enabled, both interrupts are
- * configured (regardless of which port is actually in use).
- */
- if (d->hwirq == ICU_SATA0_ICU_ID || d->hwirq == ICU_SATA1_ICU_ID) {
- writel_relaxed(icu_int,
- icu->base + ICU_INT_CFG(ICU_SATA0_ICU_ID));
- writel_relaxed(icu_int,
- icu->base + ICU_INT_CFG(ICU_SATA1_ICU_ID));
- }
-}
-
-static struct irq_chip mvebu_icu_nsr_chip = {
- .name = "ICU-NSR",
- .irq_mask = irq_chip_mask_parent,
- .irq_unmask = irq_chip_unmask_parent,
- .irq_eoi = irq_chip_eoi_parent,
- .irq_set_type = irq_chip_set_type_parent,
- .irq_set_affinity = irq_chip_set_affinity_parent,
-};
-
-static struct irq_chip mvebu_icu_sei_chip = {
- .name = "ICU-SEI",
- .irq_ack = irq_chip_ack_parent,
- .irq_mask = irq_chip_mask_parent,
- .irq_unmask = irq_chip_unmask_parent,
- .irq_set_type = irq_chip_set_type_parent,
- .irq_set_affinity = irq_chip_set_affinity_parent,
-};
-
-static int
-mvebu_icu_irq_domain_translate(struct irq_domain *d, struct irq_fwspec *fwspec,
- unsigned long *hwirq, unsigned int *type)
-{
- unsigned int param_count = static_branch_unlikely(&legacy_bindings) ? 3 : 2;
- struct mvebu_icu_msi_data *msi_data = platform_msi_get_host_data(d);
- struct mvebu_icu *icu = msi_data->icu;
-
- /* Check the count of the parameters in dt */
- if (WARN_ON(fwspec->param_count != param_count)) {
- dev_err(icu->dev, "wrong ICU parameter count %d\n",
- fwspec->param_count);
- return -EINVAL;
- }
-
- if (static_branch_unlikely(&legacy_bindings)) {
- *hwirq = fwspec->param[1];
- *type = fwspec->param[2] & IRQ_TYPE_SENSE_MASK;
- if (fwspec->param[0] != ICU_GRP_NSR) {
- dev_err(icu->dev, "wrong ICU group type %x\n",
- fwspec->param[0]);
- return -EINVAL;
- }
- } else {
- *hwirq = fwspec->param[0];
- *type = fwspec->param[1] & IRQ_TYPE_SENSE_MASK;
-
- /*
- * The ICU receives level interrupts. While the NSR are also
- * level interrupts, SEI are edge interrupts. Force the type
- * here in this case. Please note that this makes the interrupt
- * handling unreliable.
- */
- if (msi_data->subset_data->icu_group == ICU_GRP_SEI)
- *type = IRQ_TYPE_EDGE_RISING;
- }
-
- if (*hwirq >= ICU_MAX_IRQS) {
- dev_err(icu->dev, "invalid interrupt number %ld\n", *hwirq);
- return -EINVAL;
- }
-
- return 0;
-}
-
-static int
-mvebu_icu_irq_domain_alloc(struct irq_domain *domain, unsigned int virq,
- unsigned int nr_irqs, void *args)
-{
- int err;
- unsigned long hwirq;
- struct irq_fwspec *fwspec = args;
- struct mvebu_icu_msi_data *msi_data = platform_msi_get_host_data(domain);
- struct mvebu_icu *icu = msi_data->icu;
- struct mvebu_icu_irq_data *icu_irqd;
- struct irq_chip *chip = &mvebu_icu_nsr_chip;
-
- icu_irqd = kmalloc(sizeof(*icu_irqd), GFP_KERNEL);
- if (!icu_irqd)
- return -ENOMEM;
-
- err = mvebu_icu_irq_domain_translate(domain, fwspec, &hwirq,
- &icu_irqd->type);
- if (err) {
- dev_err(icu->dev, "failed to translate ICU parameters\n");
- goto free_irqd;
- }
-
- if (static_branch_unlikely(&legacy_bindings))
- icu_irqd->icu_group = fwspec->param[0];
- else
- icu_irqd->icu_group = msi_data->subset_data->icu_group;
- icu_irqd->icu = icu;
-
- err = platform_msi_device_domain_alloc(domain, virq, nr_irqs);
- if (err) {
- dev_err(icu->dev, "failed to allocate ICU interrupt in parent domain\n");
- goto free_irqd;
- }
-
- /* Make sure there is no interrupt left pending by the firmware */
- err = irq_set_irqchip_state(virq, IRQCHIP_STATE_PENDING, false);
- if (err)
- goto free_msi;
-
- if (icu_irqd->icu_group == ICU_GRP_SEI)
- chip = &mvebu_icu_sei_chip;
-
- err = irq_domain_set_hwirq_and_chip(domain, virq, hwirq,
- chip, icu_irqd);
- if (err) {
- dev_err(icu->dev, "failed to set the data to IRQ domain\n");
- goto free_msi;
- }
-
- return 0;
-
-free_msi:
- platform_msi_device_domain_free(domain, virq, nr_irqs);
-free_irqd:
- kfree(icu_irqd);
- return err;
-}
-
-static void
-mvebu_icu_irq_domain_free(struct irq_domain *domain, unsigned int virq,
- unsigned int nr_irqs)
-{
- struct irq_data *d = irq_get_irq_data(virq);
- struct mvebu_icu_irq_data *icu_irqd = d->chip_data;
-
- kfree(icu_irqd);
-
- platform_msi_device_domain_free(domain, virq, nr_irqs);
-}
-
-static const struct irq_domain_ops mvebu_icu_domain_ops = {
- .translate = mvebu_icu_irq_domain_translate,
- .alloc = mvebu_icu_irq_domain_alloc,
- .free = mvebu_icu_irq_domain_free,
-};
-
-/* End of removal area */
-
static int mvebu_icu_msi_init(struct irq_domain *domain, struct msi_domain_info *info,
unsigned int virq, irq_hw_number_t hwirq, msi_alloc_info_t *arg)
{
@@ -448,9 +258,10 @@ static const struct of_device_id mvebu_icu_subset_of_match[] = {
static int mvebu_icu_subset_probe(struct platform_device *pdev)
{
+ const struct msi_domain_template *tmpl;
struct mvebu_icu_msi_data *msi_data;
struct device *dev = &pdev->dev;
- struct irq_domain *irq_domain;
+ bool sei;
msi_data = devm_kzalloc(dev, sizeof(*msi_data), GFP_KERNEL);
if (!msi_data)
@@ -471,22 +282,11 @@ static int mvebu_icu_subset_probe(struct platform_device *pdev)
if (!irq_domain_get_of_node(dev->msi.domain))
return -ENODEV;
- if (irq_domain_is_msi_parent(dev->msi.domain)) {
- bool sei = msi_data->subset_data->icu_group == ICU_GRP_SEI;
- const struct msi_domain_template *tmpl;
-
- tmpl = sei ? &mvebu_icu_sei_msi_template : &mvebu_icu_nsr_msi_template;
-
- if (!msi_create_device_irq_domain(dev, MSI_DEFAULT_DOMAIN, tmpl,
- ICU_MAX_IRQS, NULL, msi_data))
- return -ENOMEM;
- }
+ sei = msi_data->subset_data->icu_group == ICU_GRP_SEI;
+ tmpl = sei ? &mvebu_icu_sei_msi_template : &mvebu_icu_nsr_msi_template;
- irq_domain = platform_msi_create_device_tree_domain(dev, ICU_MAX_IRQS,
- mvebu_icu_write_msg,
- &mvebu_icu_domain_ops,
- msi_data);
- if (!irq_domain) {
+ if (!msi_create_device_irq_domain(dev, MSI_DEFAULT_DOMAIN, tmpl,
+ ICU_MAX_IRQS, NULL, msi_data)) {
dev_err(dev, "Failed to create ICU MSI domain\n");
return -ENOMEM;
}
--
2.34.1
next prev parent reply other threads:[~2024-06-23 15:19 UTC|newest]
Thread overview: 94+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-06-23 15:18 [patch V4 00/21] genirq, irqchip: Convert ARM MSI handling to per device MSI domains Thomas Gleixner
2024-06-23 15:18 ` [patch V4 01/21] PCI/MSI: Provide MSI_FLAG_PCI_MSI_MASK_PARENT Thomas Gleixner
2024-06-26 19:05 ` [patch V4-1 " Thomas Gleixner
2024-07-10 16:25 ` [tip: irq/core] " tip-bot2 for Shivamurthy Shastri
2024-07-18 18:39 ` [tip: irq/msi] " tip-bot2 for Shivamurthy Shastri
2024-06-23 15:18 ` [patch V4 02/21] irqchip: Provide irq-msi-lib Thomas Gleixner
2024-07-01 10:18 ` Lorenzo Pieralisi
2024-07-03 13:57 ` Thomas Gleixner
2024-07-10 16:25 ` [tip: irq/core] " tip-bot2 for Thomas Gleixner
2024-07-18 18:39 ` [tip: irq/msi] " tip-bot2 for Thomas Gleixner
2024-06-23 15:18 ` [patch V4 03/21] irqchip/gic-v3-its: Provide MSI parent infrastructure Thomas Gleixner
2024-07-10 16:25 ` [tip: irq/core] " tip-bot2 for Thomas Gleixner
2024-07-18 18:39 ` [tip: irq/msi] " tip-bot2 for Thomas Gleixner
2024-06-23 15:18 ` [patch V4 04/21] irqchip/irq-msi-lib: Prepare for PCI MSI/MSIX Thomas Gleixner
2024-07-10 16:25 ` [tip: irq/core] " tip-bot2 for Thomas Gleixner
2024-07-18 18:39 ` [tip: irq/msi] " tip-bot2 for Thomas Gleixner
2024-06-23 15:18 ` [patch V4 05/21] irqchip/gic-v3-its: Provide MSI parent for PCI/MSI[-X] Thomas Gleixner
2024-06-28 22:24 ` Catalin Marinas
2024-06-29 8:37 ` Thomas Gleixner
2024-06-29 9:42 ` Marc Zyngier
2024-06-29 9:50 ` Marc Zyngier
2024-06-29 10:11 ` Marc Zyngier
2024-06-29 10:44 ` Thomas Gleixner
2024-06-29 19:51 ` Thomas Gleixner
2024-06-30 9:55 ` Catalin Marinas
2024-06-29 9:18 ` Marc Zyngier
2024-07-10 16:25 ` [tip: irq/core] " tip-bot2 for Thomas Gleixner
2024-07-18 18:39 ` [tip: irq/msi] " tip-bot2 for Thomas Gleixner
2024-06-23 15:18 ` [patch V4 06/21] irqchip/irq-msi-lib: Prepare for DEVICE MSI to replace platform MSI Thomas Gleixner
2024-07-10 16:25 ` [tip: irq/core] " tip-bot2 for Thomas Gleixner
2024-07-18 18:39 ` [tip: irq/msi] " tip-bot2 for Thomas Gleixner
2024-06-23 15:18 ` [patch V4 07/21] irqchip/mbigen: Prepare for real per device MSI Thomas Gleixner
2024-07-10 16:25 ` [tip: irq/core] " tip-bot2 for Thomas Gleixner
2024-07-18 18:39 ` [tip: irq/msi] " tip-bot2 for Thomas Gleixner
2024-06-23 15:18 ` [patch V4 08/21] irqchip/irq-msi-lib: Prepare for DOMAIN_BUS_WIRED_TO_MSI Thomas Gleixner
2024-07-10 16:25 ` [tip: irq/core] " tip-bot2 for Thomas Gleixner
2024-07-18 18:39 ` [tip: irq/msi] " tip-bot2 for Thomas Gleixner
2024-06-23 15:18 ` [patch V4 09/21] irqchip/gic-v3-its: Switch platform MSI to MSI parent Thomas Gleixner
2024-07-10 16:25 ` [tip: irq/core] " tip-bot2 for Thomas Gleixner
2024-07-18 18:39 ` [tip: irq/msi] " tip-bot2 for Thomas Gleixner
2024-06-23 15:18 ` [patch V4 10/21] irqchip/mbigen: Remove platform_msi_create_device_domain() fallback Thomas Gleixner
2024-06-25 14:42 ` Lorenzo Pieralisi
2024-06-26 9:13 ` Hanjun Guo
2024-07-10 16:25 ` [tip: irq/core] " tip-bot2 for Thomas Gleixner
2024-07-18 18:39 ` [tip: irq/msi] " tip-bot2 for Thomas Gleixner
2024-06-23 15:18 ` [patch V4 11/21] genirq/msi: Remove platform_msi_create_device_domain() Thomas Gleixner
2024-07-10 16:25 ` [tip: irq/core] " tip-bot2 for Thomas Gleixner
2024-07-18 18:39 ` [tip: irq/msi] " tip-bot2 for Thomas Gleixner
2024-06-23 15:18 ` [patch V4 12/21] irqchip/gic_v3_mbi: Switch over to parent domain Thomas Gleixner
2024-07-10 16:25 ` [tip: irq/core] " tip-bot2 for Thomas Gleixner
2024-07-18 18:38 ` [tip: irq/msi] " tip-bot2 for Thomas Gleixner
2024-06-23 15:18 ` [patch V4 13/21] irqchip/gic-v2m: Switch to device MSI Thomas Gleixner
2024-07-10 16:25 ` [tip: irq/core] " tip-bot2 for Thomas Gleixner
2024-07-18 18:38 ` [tip: irq/msi] " tip-bot2 for Thomas Gleixner
2024-06-23 15:18 ` [patch V4 14/21] irqchip/imx-mu-msi: Switch to MSI parent Thomas Gleixner
2024-07-10 16:25 ` [tip: irq/core] " tip-bot2 for Thomas Gleixner
2024-07-18 18:38 ` [tip: irq/msi] " tip-bot2 for Thomas Gleixner
2024-06-23 15:18 ` [patch V4 15/21] irqchip/irq-mvebu-icu: Prepare for real per device MSI Thomas Gleixner
2024-07-10 16:25 ` [tip: irq/core] " tip-bot2 for Thomas Gleixner
2024-07-18 18:38 ` [tip: irq/msi] " tip-bot2 for Thomas Gleixner
2024-06-23 15:18 ` [patch V4 16/21] irqchip/mvebu-gicp: Switch to MSI parent Thomas Gleixner
2024-07-10 16:25 ` [tip: irq/core] " tip-bot2 for Thomas Gleixner
2024-07-18 18:38 ` [tip: irq/msi] " tip-bot2 for Thomas Gleixner
2024-06-23 15:19 ` [patch V4 17/21] irqchip/mvebu-odmi: Switch to parent MSI Thomas Gleixner
2024-07-10 16:25 ` [tip: irq/core] " tip-bot2 for Thomas Gleixner
2024-07-18 18:38 ` [tip: irq/msi] " tip-bot2 for Thomas Gleixner
2024-06-23 15:19 ` [patch V4 18/21] irqchip/irq-mvebu-sei: Switch to MSI parent Thomas Gleixner
2024-07-10 16:25 ` [tip: irq/core] " tip-bot2 for Thomas Gleixner
2024-07-18 18:38 ` [tip: irq/msi] " tip-bot2 for Thomas Gleixner
2024-06-23 15:19 ` Thomas Gleixner [this message]
2024-07-10 16:25 ` [tip: irq/core] irqchip/irq-mvebu-icu: Remove platform MSI leftovers tip-bot2 for Thomas Gleixner
2024-07-18 18:38 ` [tip: irq/msi] " tip-bot2 for Thomas Gleixner
2024-06-23 15:19 ` [patch V4 20/21] genirq/msi: " Thomas Gleixner
2024-06-25 10:02 ` Greg KH
2024-07-10 16:25 ` [tip: irq/core] " tip-bot2 for Thomas Gleixner
2024-07-18 18:38 ` [tip: irq/msi] " tip-bot2 for Thomas Gleixner
2024-06-23 15:19 ` [patch V4 21/21] genirq/msi: Move msi_device_data to core Thomas Gleixner
2024-07-10 16:25 ` [tip: irq/core] " tip-bot2 for Thomas Gleixner
2024-07-18 18:38 ` [tip: irq/msi] " tip-bot2 for Thomas Gleixner
2024-06-25 19:46 ` [patch V4 00/21] genirq, irqchip: Convert ARM MSI handling to per device MSI domains Rob Herring
2024-06-26 19:03 ` Thomas Gleixner
2024-07-15 11:18 ` Johan Hovold
2024-07-15 12:58 ` Marc Zyngier
2024-07-15 14:10 ` Johan Hovold
2024-07-16 10:30 ` Marc Zyngier
2024-07-16 14:53 ` Johan Hovold
2024-07-16 18:21 ` Marc Zyngier
2024-07-17 7:23 ` Johan Hovold
2024-07-17 12:54 ` Marc Zyngier
2024-07-17 13:38 ` Johan Hovold
2024-07-17 18:07 ` Marc Zyngier
2024-07-17 20:10 ` Marc Zyngier
2024-07-18 7:30 ` Johan Hovold
2024-07-15 13:10 ` Thomas Gleixner
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240623142235.881677325@linutronix.de \
--to=tglx@linutronix.de \
--cc=agross@kernel.org \
--cc=alex.williamson@redhat.com \
--cc=ammarfaizi2@gnuweeb.org \
--cc=andersson@kernel.org \
--cc=andrew@lunn.ch \
--cc=anna-maria@linutronix.de \
--cc=apatel@ventanamicro.com \
--cc=bhelgaas@google.com \
--cc=den@valinux.co.jp \
--cc=festevam@gmail.com \
--cc=gregkh@linuxfoundation.org \
--cc=gregory.clement@bootlin.com \
--cc=ilpo.jarvinen@linux.intel.com \
--cc=jgg@mellanox.com \
--cc=kevin.tian@intel.com \
--cc=kristo@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=lorenzo.pieralisi@arm.com \
--cc=lpieralisi@kernel.org \
--cc=mark.rutland@arm.com \
--cc=maz@kernel.org \
--cc=nipun.gupta@amd.com \
--cc=nm@ti.com \
--cc=okaya@kernel.org \
--cc=rafael@kernel.org \
--cc=rdunlap@infradead.org \
--cc=robin.murphy@arm.com \
--cc=s.hauer@pengutronix.de \
--cc=sebastian.hesselbarth@gmail.com \
--cc=shameerali.kolothum.thodi@huawei.com \
--cc=shawnguo@kernel.org \
--cc=shivamurthy.shastri@linutronix.de \
--cc=vidyas@nvidia.com \
--cc=vkoul@kernel.org \
--cc=will@kernel.org \
--cc=yuzenghui@huawei.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®