Skip to contentSkip to conversation

irqchip: irq-armada-370-xp: generic MSI infrastructure and assorted fixes

PATCH Superseded Thomas Petazzoni 4 participants 18 messages Jan 27, 2016 – Feb 10, 2016

Subsystems (4)

v2 of 3 Superseded Latest is v3 →

lore
Share & tools
lore
#0 lore raw

v2 cover irqchip: irq-armada-370-xp: generic MSI infrastructure and assorted fixes

Hello,

This patch series converts the Armada 370/XP irqchip driver (also used on Armada 375, 38x and 39x) to the new MSI infrastructure put in place by Marc. It doesn't bring any functional difference other than using the right, modern, MSI mechanism, which might ultimately allows Marc to remove the old way of implementing MSI support.

It has been tested on Armada 38x and Armada XP with an Intel e1000e NIC and an Intel IGB NIC, both of which use MSI interrupts.

Note that this patch series depends on the patch series from Marc Zyngier for proper operation (however there is no build dependency) :

https://lkml.org/lkml/2016/1/26/405

Changes since v1:

- Rebased on top of v4.5-rc1, and the latest version of Marc Zyngier irqchip core fixes, which are needed for this series to work.

- Added Acked-by from Gregory Clement on patch "irqchip:
irq-armada-370-xp: add Kconfig option for the driver"

- Add a new patch that changes hardcoded "16" values by the appropriate PCI_MSI_DOORBELL_START definition. Noticed by Gregory Clement.

- Drop the ->irq_enable() and ->irq_disable() callbacks from struct irq_chip armada_370_xp_msi_irq_chip, as they are not needed, since we already provide the same callbacks for ->irq_mask() and ->irq_unmask(). Noticed by Marc Zyngier.

- Drop the MSI_FLAG_MULTI_PCI_MSI, since we don't (yet) support allocating multiple MSIs as once. Noticed by Marc Zyngier.

- Added a separate commit actually implementing the allocation of multiple MSIs at once, and therefore adds the MSI_FLAG_MULTI_PCI_MSI.

- Reorder code in armada_370_xp_mpic_of_init() to make a BUG_ON() really useful. Noticed by Marc Zyngier.

Thanks!

Thomas

Thomas Petazzoni (6):
irqchip: irq-armada-370-xp: add Kconfig option for the driver
irqchip: irq-armada-370-xp: use the generic MSI infrastructure
irqchip: irq-armada-370-xp: use PCI_MSI_DOORBELL_START where
appropriate
irqchip: irq-armada-370-xp: use shorter names for irq_chip
irqchip: irq-armada-370-xp: allow allocation of multiple MSIs
ARM: mvebu: use the ARMADA_370_XP_IRQ option

 arch/arm/mach-mvebu/Kconfig         |   6 +-
 drivers/irqchip/Kconfig             |   6 ++
 drivers/irqchip/Makefile            |   2 +-
 drivers/irqchip/irq-armada-370-xp.c | 156 +++++++++++++++---------------------
 4 files changed, 78 insertions(+), 92 deletions(-)
Signature · 1 line
2.6.4
#1 lore raw

PATCH v2 1/6 irqchip: irq-armada-370-xp: add Kconfig option for the driver

Instead of building the irq-armada-370-xp driver directly when CONFIG_ARCH_MVEBU is enabled, this commit introduces an intermediate CONFIG_ARMADA_370_XP_IRQ hidden Kconfig option.

This allows this option to select other interrupt-related Kconfig options (which will be needed in follow-up commits) rather than having such selects done from arch/arm/mach-<foo>/.

---
 drivers/irqchip/Kconfig  | 5 +++++
 drivers/irqchip/Makefile | 2 +-
 2 files changed, 6 insertions(+), 1 deletion(-)
drivers/irqchip/Kconfig +5 -0
index 715923d..e2cab87 100644
@@ -60,6 +60,11 @@ config ARM_VIC_NR
 	  The maximum number of VICs available in the system, for
 	  power management.
 
+config ARMADA_370_XP_IRQ
+	bool
+	default y if ARCH_MVEBU
+	select GENERIC_IRQ_CHIP
+
 config ATMEL_AIC_IRQ
 	bool
 	select GENERIC_IRQ_CHIP
drivers/irqchip/Makefile +1 -1
index 18caacb..30dba04 100644
@@ -5,7 +5,6 @@ obj-$(CONFIG_ARCH_BCM2835)		+= irq-bcm2836.o
 obj-$(CONFIG_ARCH_EXYNOS)		+= exynos-combiner.o
 obj-$(CONFIG_ARCH_HIP04)		+= irq-hip04.o
 obj-$(CONFIG_ARCH_MMP)			+= irq-mmp.o
-obj-$(CONFIG_ARCH_MVEBU)		+= irq-armada-370-xp.o
 obj-$(CONFIG_IRQ_MXS)			+= irq-mxs.o
 obj-$(CONFIG_ARCH_TEGRA)		+= irq-tegra.o
 obj-$(CONFIG_ARCH_S3C24XX)		+= irq-s3c24xx.o
@@ -28,6 +27,7 @@ obj-$(CONFIG_ARM_GIC_V3_ITS)		+= irq-gic-v3-its.o irq-gic-v3-its-pci-msi.o irq-g
 obj-$(CONFIG_HISILICON_IRQ_MBIGEN)	+= irq-mbigen.o
 obj-$(CONFIG_ARM_NVIC)			+= irq-nvic.o
 obj-$(CONFIG_ARM_VIC)			+= irq-vic.o
+obj-$(CONFIG_ARMADA_370_XP_IRQ)		+= irq-armada-370-xp.o
 obj-$(CONFIG_ATMEL_AIC_IRQ)		+= irq-atmel-aic-common.o irq-atmel-aic.o
 obj-$(CONFIG_ATMEL_AIC5_IRQ)	+= irq-atmel-aic-common.o irq-atmel-aic5.o
 obj-$(CONFIG_I8259)			+= irq-i8259.o
Signature · 1 line
2.6.4
#2 lore raw

PATCH v2 2/6 irqchip: irq-armada-370-xp: use the generic MSI infrastructure

In reply to Thomas Petazzoni

This commit moves the irq-armada-370-xp driver from using the PCI-specific MSI infrastructure to the generic MSI infrastructure, to which drivers are progressively converted.

In this hardware, the MSI controller is directly bundled inside the interrupt controller, so we have a single Device Tree node to which multiple IRQ domaines are attached: the wired interrupt domain and the MSI interrupt domain. In order to ensure that they can be differentiated, we have to force the bus_token of the wired interrupt domain to be DOMAIN_BUS_WIRED. The MSI domain bus_token is automatically set to the appropriate value by pci_msi_create_irq_domain().

---
 drivers/irqchip/Kconfig             |   1 +
 drivers/irqchip/irq-armada-370-xp.c | 149 +++++++++++++++---------------------
 2 files changed, 62 insertions(+), 88 deletions(-)
drivers/irqchip/Kconfig +1 -0
index e2cab87..d233a80 100644
@@ -64,6 +64,7 @@ config ARMADA_370_XP_IRQ
 	bool
 	default y if ARCH_MVEBU
 	select GENERIC_IRQ_CHIP
+	select PCI_MSI_IRQ_DOMAIN if PCI_MSI
 
 config ATMEL_AIC_IRQ
 	bool
drivers/irqchip/irq-armada-370-xp.c +61 -88

214 lines not on this page · raw message

Signature · 1 line
2.6.4
#3 lore raw

PATCH v2 2/6 irqchip: irq-armada-370-xp: use the generic MSI infrastructure

Quoted 13 lines · Thomas Petazzoni

This commit moves the irq-armada-370-xp driver from using the PCI-specific MSI infrastructure to the generic MSI infrastructure, to which drivers are progressively converted.

In this hardware, the MSI controller is directly bundled inside the interrupt controller, so we have a single Device Tree node to which multiple IRQ domaines are attached: the wired interrupt domain and the MSI interrupt domain. In order to ensure that they can be differentiated, we have to force the bus_token of the wired interrupt domain to be DOMAIN_BUS_WIRED. The MSI domain bus_token is automatically set to the appropriate value by pci_msi_create_irq_domain().

Quoted 2 lines
	M.
Signature · 1 line
Jazz is not dead. It just smells funny...
#4 lore raw

PATCH v2 3/6 irqchip: irq-armada-370-xp: use PCI_MSI_DOORBELL_START where appropriate

In reply to Thomas Petazzoni

As suggested by Gregory Clement, this commit adjusts the irq-armada-370-xp driver to use the PCI_MSI_DOORBELL_START define in the armada_370_xp_handle_msi_irq() function, rather than hardcoding its value.

---
 drivers/irqchip/irq-armada-370-xp.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/irqchip/irq-armada-370-xp.c +2 -2
index e5738c5..f53eb71 100644
@@ -401,10 +401,10 @@ static void armada_370_xp_handle_msi_irq(struct pt_regs *regs, bool is_chained)
 
 		if (is_chained) {
 			irq = irq_find_mapping(armada_370_xp_msi_inner_domain,
-					       msinr - 16);
+					       msinr - PCI_MSI_DOORBELL_START);
 			generic_handle_irq(irq);
 		} else {
-			irq = msinr - 16;
+			irq = msinr - PCI_MSI_DOORBELL_START;
 			handle_domain_irq(armada_370_xp_msi_inner_domain,
 					  irq, regs);
 		}
Signature · 1 line
2.6.4
#5 lore raw

PATCH v2 3/6 irqchip: irq-armada-370-xp: use PCI_MSI_DOORBELL_START where appropriate

Hi Thomas,

Quoted 7 lines · Thomas Petazzoni

As suggested by Gregory Clement, this commit adjusts the irq-armada-370-xp driver to use the PCI_MSI_DOORBELL_START define in the armada_370_xp_handle_msi_irq() function, rather than hardcoding its value.

Thanks,

Gregory

Quoted 24 lines
---
 drivers/irqchip/irq-armada-370-xp.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/irqchip/irq-armada-370-xp.c +2 -2
index e5738c5..f53eb71 100644
@@ -401,10 +401,10 @@ static void armada_370_xp_handle_msi_irq(struct pt_regs *regs, bool is_chained)
 
 		if (is_chained) {
 			irq = irq_find_mapping(armada_370_xp_msi_inner_domain,
-					       msinr - 16);
+					       msinr - PCI_MSI_DOORBELL_START);
 			generic_handle_irq(irq);
 		} else {
-			irq = msinr - 16;
+			irq = msinr - PCI_MSI_DOORBELL_START;
 			handle_domain_irq(armada_370_xp_msi_inner_domain,
 					  irq, regs);
 		}
Signature · 1 line
2.6.4
Signature · 4 lines
Gregory Clement, Free Electrons
Kernel, drivers, real-time and embedded Linux
development, consulting, training and support.
http://free-electrons.com
#6 lore raw

PATCH v2 4/6 irqchip: irq-armada-370-xp: use shorter names for irq_chip

In reply to Thomas Petazzoni

In order to make the output of /proc/interrupts, use shorter names for the irq_chip registered by the irq-armada-370-xp driver. Using capital letters also matches better what is done for the GIC driver, which uses just "GIC" as the irq_chip->name.

---
 drivers/irqchip/irq-armada-370-xp.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)
drivers/irqchip/irq-armada-370-xp.c +3 -3
index f53eb71..c99ae5f 100644
@@ -117,7 +117,7 @@ static void armada_370_xp_irq_unmask(struct irq_data *d)
 #ifdef CONFIG_PCI_MSI
 
 static struct irq_chip armada_370_xp_msi_irq_chip = {
-	.name = "armada_370_xp_msi_irq",
+	.name = "MPIC MSI",
 	.irq_mask = pci_msi_mask_irq,
 	.irq_unmask = pci_msi_unmask_irq,
 };
@@ -141,7 +141,7 @@ static int armada_370_xp_msi_set_affinity(struct irq_data *irq_data,
 }
 
 static struct irq_chip armada_370_xp_msi_bottom_irq_chip = {
-	.name			= "armada_370_xp_msi_irq",
+	.name			= "MPIC MSI",
 	.irq_compose_msi_msg	= armada_370_xp_compose_msi_msg,
 	.irq_set_affinity	= armada_370_xp_msi_set_affinity,
 };
@@ -253,7 +253,7 @@ static int armada_xp_set_affinity(struct irq_data *d,
 #endif
 
 static struct irq_chip armada_370_xp_irq_chip = {
-	.name		= "armada_370_xp_irq",
+	.name		= "MPIC",
 	.irq_mask       = armada_370_xp_irq_mask,
 	.irq_mask_ack   = armada_370_xp_irq_mask,
 	.irq_unmask     = armada_370_xp_irq_unmask,
Signature · 1 line
2.6.4
#7 lore raw

PATCH v2 4/6 irqchip: irq-armada-370-xp: use shorter names for irq_chip

Hi Thomas,

Quoted 6 lines · Thomas Petazzoni

In order to make the output of /proc/interrupts, use shorter names for the irq_chip registered by the irq-armada-370-xp driver. Using capital letters also matches better what is done for the GIC driver, which uses just "GIC" as the irq_chip->name.

As you managed to convince me:

Thanks,

Gregory

Quoted 38 lines
---
 drivers/irqchip/irq-armada-370-xp.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)
drivers/irqchip/irq-armada-370-xp.c +3 -3
index f53eb71..c99ae5f 100644
@@ -117,7 +117,7 @@ static void armada_370_xp_irq_unmask(struct irq_data *d)
 #ifdef CONFIG_PCI_MSI
 
 static struct irq_chip armada_370_xp_msi_irq_chip = {
-	.name = "armada_370_xp_msi_irq",
+	.name = "MPIC MSI",
 	.irq_mask = pci_msi_mask_irq,
 	.irq_unmask = pci_msi_unmask_irq,
 };
@@ -141,7 +141,7 @@ static int armada_370_xp_msi_set_affinity(struct irq_data *irq_data,
 }
 
 static struct irq_chip armada_370_xp_msi_bottom_irq_chip = {
-	.name			= "armada_370_xp_msi_irq",
+	.name			= "MPIC MSI",
 	.irq_compose_msi_msg	= armada_370_xp_compose_msi_msg,
 	.irq_set_affinity	= armada_370_xp_msi_set_affinity,
 };
@@ -253,7 +253,7 @@ static int armada_xp_set_affinity(struct irq_data *d,
 #endif
 
 static struct irq_chip armada_370_xp_irq_chip = {
-	.name		= "armada_370_xp_irq",
+	.name		= "MPIC",
 	.irq_mask       = armada_370_xp_irq_mask,
 	.irq_mask_ack   = armada_370_xp_irq_mask,
 	.irq_unmask     = armada_370_xp_irq_unmask,
Signature · 1 line
2.6.4
Signature · 4 lines
Gregory Clement, Free Electrons
Kernel, drivers, real-time and embedded Linux
development, consulting, training and support.
http://free-electrons.com
#8 lore raw

PATCH v2 5/6 irqchip: irq-armada-370-xp: allow allocation of multiple MSIs

In reply to Thomas Petazzoni

Add support for allocating multiple MSIs at the same time, so that the MSI_FLAG_MULTI_PCI_MSI flag can be added to the msi_domain_info structure.

---
 drivers/irqchip/irq-armada-370-xp.c | 25 ++++++++++++++-----------
 1 file changed, 14 insertions(+), 11 deletions(-)
drivers/irqchip/irq-armada-370-xp.c +14 -11
index c99ae5f..e7dc6cb 100644
@@ -123,7 +123,8 @@ static struct irq_chip armada_370_xp_msi_irq_chip = {
 };
 
 static struct msi_domain_info armada_370_xp_msi_domain_info = {
-	.flags	= (MSI_FLAG_USE_DEF_DOM_OPS | MSI_FLAG_USE_DEF_CHIP_OPS),
+	.flags	= (MSI_FLAG_USE_DEF_DOM_OPS | MSI_FLAG_USE_DEF_CHIP_OPS |
+		   MSI_FLAG_MULTI_PCI_MSI),
 	.chip	= &armada_370_xp_msi_irq_chip,
 };
 
@@ -149,21 +150,26 @@ static struct irq_chip armada_370_xp_msi_bottom_irq_chip = {
 static int armada_370_xp_msi_alloc(struct irq_domain *domain, unsigned int virq,
 				   unsigned int nr_irqs, void *args)
 {
-	int hwirq;
+	int hwirq, i;
 
 	mutex_lock(&msi_used_lock);
-	hwirq = find_first_zero_bit(&msi_used, PCI_MSI_DOORBELL_NR);
+
+	hwirq = bitmap_find_next_zero_area(msi_used, PCI_MSI_DOORBELL_NR,
+					   0, nr_irqs, 0);
 	if (hwirq >= PCI_MSI_DOORBELL_NR) {
 		mutex_unlock(&msi_used_lock);
 		return -ENOSPC;
 	}
 
-	set_bit(hwirq, msi_used);
+	bitmap_set(msi_used, hwirq, nr_irqs);
 	mutex_unlock(&msi_used_lock);
 
-	irq_domain_set_info(domain, virq, hwirq, &armada_370_xp_msi_bottom_irq_chip,
-			    domain->host_data, handle_simple_irq,
-			    NULL, NULL);
+	for (i = 0; i < nr_irqs; i++) {
+		irq_domain_set_info(domain, virq + i, hwirq + i,
+				    &armada_370_xp_msi_bottom_irq_chip,
+				    domain->host_data, handle_simple_irq,
+				    NULL, NULL);
+	}
 
 	return hwirq;
 }
@@ -174,10 +180,7 @@ static void armada_370_xp_msi_free(struct irq_domain *domain,
 	struct irq_data *d = irq_domain_get_irq_data(domain, virq);
 
 	mutex_lock(&msi_used_lock);
-	if (!test_bit(d->hwirq, msi_used))
-		pr_err("trying to free unused MSI#%lu\n", d->hwirq);
-	else
-		clear_bit(d->hwirq, msi_used);
+	bitmap_clear(msi_used, d->hwirq, nr_irqs);
 	mutex_unlock(&msi_used_lock);
 }
 
Signature · 1 line
2.6.4
#9 lore raw

PATCH v2 5/6 irqchip: irq-armada-370-xp: allow allocation of multiple MSIs

Hi Thomas,

Quoted 5 lines · Thomas Petazzoni

Add support for allocating multiple MSIs at the same time, so that the MSI_FLAG_MULTI_PCI_MSI flag can be added to the msi_domain_info structure.

Thanks,

Gregory

Quoted 66 lines
---
 drivers/irqchip/irq-armada-370-xp.c | 25 ++++++++++++++-----------
 1 file changed, 14 insertions(+), 11 deletions(-)
drivers/irqchip/irq-armada-370-xp.c +14 -11
index c99ae5f..e7dc6cb 100644
@@ -123,7 +123,8 @@ static struct irq_chip armada_370_xp_msi_irq_chip = {
 };
 
 static struct msi_domain_info armada_370_xp_msi_domain_info = {
-	.flags	= (MSI_FLAG_USE_DEF_DOM_OPS | MSI_FLAG_USE_DEF_CHIP_OPS),
+	.flags	= (MSI_FLAG_USE_DEF_DOM_OPS | MSI_FLAG_USE_DEF_CHIP_OPS |
+		   MSI_FLAG_MULTI_PCI_MSI),
 	.chip	= &armada_370_xp_msi_irq_chip,
 };
 
@@ -149,21 +150,26 @@ static struct irq_chip armada_370_xp_msi_bottom_irq_chip = {
 static int armada_370_xp_msi_alloc(struct irq_domain *domain, unsigned int virq,
 				   unsigned int nr_irqs, void *args)
 {
-	int hwirq;
+	int hwirq, i;
 
 	mutex_lock(&msi_used_lock);
-	hwirq = find_first_zero_bit(&msi_used, PCI_MSI_DOORBELL_NR);
+
+	hwirq = bitmap_find_next_zero_area(msi_used, PCI_MSI_DOORBELL_NR,
+					   0, nr_irqs, 0);
 	if (hwirq >= PCI_MSI_DOORBELL_NR) {
 		mutex_unlock(&msi_used_lock);
 		return -ENOSPC;
 	}
 
-	set_bit(hwirq, msi_used);
+	bitmap_set(msi_used, hwirq, nr_irqs);
 	mutex_unlock(&msi_used_lock);
 
-	irq_domain_set_info(domain, virq, hwirq, &armada_370_xp_msi_bottom_irq_chip,
-			    domain->host_data, handle_simple_irq,
-			    NULL, NULL);
+	for (i = 0; i < nr_irqs; i++) {
+		irq_domain_set_info(domain, virq + i, hwirq + i,
+				    &armada_370_xp_msi_bottom_irq_chip,
+				    domain->host_data, handle_simple_irq,
+				    NULL, NULL);
+	}
 
 	return hwirq;
 }
@@ -174,10 +180,7 @@ static void armada_370_xp_msi_free(struct irq_domain *domain,
 	struct irq_data *d = irq_domain_get_irq_data(domain, virq);
 
 	mutex_lock(&msi_used_lock);
-	if (!test_bit(d->hwirq, msi_used))
-		pr_err("trying to free unused MSI#%lu\n", d->hwirq);
-	else
-		clear_bit(d->hwirq, msi_used);
+	bitmap_clear(msi_used, d->hwirq, nr_irqs);
 	mutex_unlock(&msi_used_lock);
 }
 
Signature · 1 line
2.6.4
Signature · 4 lines
Gregory Clement, Free Electrons
Kernel, drivers, real-time and embedded Linux
development, consulting, training and support.
http://free-electrons.com
#10 lore raw

PATCH v2 6/6 ARM: mvebu: use the ARMADA_370_XP_IRQ option

In reply to Thomas Petazzoni

Now that there is a ARMADA_370_XP_IRQ option to enable the irqchip driver for Armada 370, XP, 375, 38x and 39x, let's select this option when needed. Note that this selection is currently not mandatory because ARMADA_370_XP_IRQ is for now always enabled when ARCH_MVEBU=y, but this is something that we will change in the future, and therefore we should make the relevant platforms select ARMADA_370_XP_IRQ when needed.

Due to this, selecting GENERIC_IRQ_CHIP is no longer needed.

---
 arch/arm/mach-mvebu/Kconfig | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)
arch/arm/mach-mvebu/Kconfig +5 -1
index 64e3d2c..b003e3a 100644
@@ -3,7 +3,6 @@ menuconfig ARCH_MVEBU
 	depends on ARCH_MULTI_V7 || ARCH_MULTI_V5
 	select ARCH_SUPPORTS_BIG_ENDIAN
 	select CLKSRC_MMIO
-	select GENERIC_IRQ_CHIP
 	select PINCTRL
 	select PLAT_ORION
 	select SOC_BUS
@@ -29,6 +28,7 @@ config MACH_ARMADA_370
 	bool "Marvell Armada 370 boards"
 	depends on ARCH_MULTI_V7
 	select ARMADA_370_CLK
+	select ARMADA_370_XP_IRQ
 	select CPU_PJ4B
 	select MACH_MVEBU_V7
 	select PINCTRL_ARMADA_370
@@ -39,6 +39,7 @@ config MACH_ARMADA_370
 config MACH_ARMADA_375
 	bool "Marvell Armada 375 boards"
 	depends on ARCH_MULTI_V7
+	select ARMADA_370_XP_IRQ
 	select ARM_ERRATA_720789
 	select ARM_ERRATA_753970
 	select ARM_GIC
@@ -58,6 +59,7 @@ config MACH_ARMADA_38X
 	select ARM_ERRATA_720789
 	select ARM_ERRATA_753970
 	select ARM_GIC
+	select ARMADA_370_XP_IRQ
 	select ARMADA_38X_CLK
 	select HAVE_ARM_SCU
 	select HAVE_ARM_TWD if SMP
@@ -72,6 +74,7 @@ config MACH_ARMADA_39X
 	bool "Marvell Armada 39x boards"
 	depends on ARCH_MULTI_V7
 	select ARM_GIC
+	select ARMADA_370_XP_IRQ
 	select ARMADA_39X_CLK
 	select CACHE_L2X0
 	select HAVE_ARM_SCU
@@ -86,6 +89,7 @@ config MACH_ARMADA_39X
 config MACH_ARMADA_XP
 	bool "Marvell Armada XP boards"
 	depends on ARCH_MULTI_V7
+	select ARMADA_370_XP_IRQ
 	select ARMADA_XP_CLK
 	select CPU_PJ4B
 	select MACH_MVEBU_V7
Signature · 1 line
2.6.4
#11 lore raw

PATCH v2 6/6 ARM: mvebu: use the ARMADA_370_XP_IRQ option

Hi Thomas,

Quoted 11 lines · Thomas Petazzoni

Now that there is a ARMADA_370_XP_IRQ option to enable the irqchip driver for Armada 370, XP, 375, 38x and 39x, let's select this option when needed. Note that this selection is currently not mandatory because ARMADA_370_XP_IRQ is for now always enabled when ARCH_MVEBU=y, but this is something that we will change in the future, and therefore we should make the relevant platforms select ARMADA_370_XP_IRQ when needed.

Due to this, selecting GENERIC_IRQ_CHIP is no longer needed.

This patch can also be merged through the irqchip tree to be sure that will be merged after the 2st patch whiwh select GENERIC_IRQ_CHIP when ARMADA_370_XP_IRQ is selected.

Thanks,

Gregory

Quoted 59 lines
---
 arch/arm/mach-mvebu/Kconfig | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)
arch/arm/mach-mvebu/Kconfig +5 -1
index 64e3d2c..b003e3a 100644
@@ -3,7 +3,6 @@ menuconfig ARCH_MVEBU
 	depends on ARCH_MULTI_V7 || ARCH_MULTI_V5
 	select ARCH_SUPPORTS_BIG_ENDIAN
 	select CLKSRC_MMIO
-	select GENERIC_IRQ_CHIP
 	select PINCTRL
 	select PLAT_ORION
 	select SOC_BUS
@@ -29,6 +28,7 @@ config MACH_ARMADA_370
 	bool "Marvell Armada 370 boards"
 	depends on ARCH_MULTI_V7
 	select ARMADA_370_CLK
+	select ARMADA_370_XP_IRQ
 	select CPU_PJ4B
 	select MACH_MVEBU_V7
 	select PINCTRL_ARMADA_370
@@ -39,6 +39,7 @@ config MACH_ARMADA_370
 config MACH_ARMADA_375
 	bool "Marvell Armada 375 boards"
 	depends on ARCH_MULTI_V7
+	select ARMADA_370_XP_IRQ
 	select ARM_ERRATA_720789
 	select ARM_ERRATA_753970
 	select ARM_GIC
@@ -58,6 +59,7 @@ config MACH_ARMADA_38X
 	select ARM_ERRATA_720789
 	select ARM_ERRATA_753970
 	select ARM_GIC
+	select ARMADA_370_XP_IRQ
 	select ARMADA_38X_CLK
 	select HAVE_ARM_SCU
 	select HAVE_ARM_TWD if SMP
@@ -72,6 +74,7 @@ config MACH_ARMADA_39X
 	bool "Marvell Armada 39x boards"
 	depends on ARCH_MULTI_V7
 	select ARM_GIC
+	select ARMADA_370_XP_IRQ
 	select ARMADA_39X_CLK
 	select CACHE_L2X0
 	select HAVE_ARM_SCU
@@ -86,6 +89,7 @@ config MACH_ARMADA_39X
 config MACH_ARMADA_XP
 	bool "Marvell Armada XP boards"
 	depends on ARCH_MULTI_V7
+	select ARMADA_370_XP_IRQ
 	select ARMADA_XP_CLK
 	select CPU_PJ4B
 	select MACH_MVEBU_V7
Signature · 1 line
2.6.4
Signature · 4 lines
Gregory Clement, Free Electrons
Kernel, drivers, real-time and embedded Linux
development, consulting, training and support.
http://free-electrons.com
#12 lore raw

v2 cover irqchip: irq-armada-370-xp: generic MSI infrastructure and assorted fixes

In reply to Thomas Petazzoni

Hello,

Quoted 8 lines · Thomas Petazzoni

Thomas Petazzoni (6):
irqchip: irq-armada-370-xp: add Kconfig option for the driver
irqchip: irq-armada-370-xp: use the generic MSI infrastructure
irqchip: irq-armada-370-xp: use PCI_MSI_DOORBELL_START where
appropriate
irqchip: irq-armada-370-xp: use shorter names for irq_chip
irqchip: irq-armada-370-xp: allow allocation of multiple MSIs
ARM: mvebu: use the ARMADA_370_XP_IRQ option

Jason, Thomas, any chance to get this applied soonish?

The core patch of the series, which migrates the irq-armada-370-xp driver to use the generic MSI infrastructure has been Reviewed-by: Marc Zyngier, and the other patches in the series have Acked-by/Reviewed-by from Gregory Clement.

Of course, if there's anything left to be changed, I'd be happy to respin a new version of this series.

Thanks a lot!

Thomas

Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com
#13 lore raw

v2 cover irqchip: irq-armada-370-xp: generic MSI infrastructure and assorted fixes

Quoted 15 lines · Thomas Petazzoni

Hello,

Quoted 8 lines · Thomas Petazzoni

Thomas Petazzoni (6):
irqchip: irq-armada-370-xp: add Kconfig option for the driver
irqchip: irq-armada-370-xp: use the generic MSI infrastructure
irqchip: irq-armada-370-xp: use PCI_MSI_DOORBELL_START where
appropriate
irqchip: irq-armada-370-xp: use shorter names for irq_chip
irqchip: irq-armada-370-xp: allow allocation of multiple MSIs
ARM: mvebu: use the ARMADA_370_XP_IRQ option

Jason, Thomas, any chance to get this applied soonish?

Quoted 8 lines

The core patch of the series, which migrates the irq-armada-370-xp driver to use the generic MSI infrastructure has been Reviewed-by: Marc Zyngier, and the other patches in the series have Acked-by/Reviewed-by from Gregory Clement.

Of course, if there's anything left to be changed, I'd be happy to respin a new version of this series.

Noticing the distribution list, it would be good to repost these patches with acks and co to LKML...

Thanks,

	M.
Signature · 1 line
Jazz is not dead. It just smells funny...
#14 lore raw

v2 cover irqchip: irq-armada-370-xp: generic MSI infrastructure and assorted fixes

Hello,

Quoted 7 lines · Marc Zyngier
Quoted 7 lines

Jason, Thomas, any chance to get this applied soonish?

The core patch of the series, which migrates the irq-armada-370-xp driver to use the generic MSI infrastructure has been Reviewed-by: Marc Zyngier, and the other patches in the series have Acked-by/Reviewed-by from Gregory Clement.

Quoted 6 lines
Quoted 3 lines

Of course, if there's anything left to be changed, I'd be happy to respin a new version of this series.

Noticing the distribution list, it would be good to repost these patches with acks and co to LKML...

Right, will do. Thanks for the suggestion.

Thomas

Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com
#15 lore raw

v2 cover irqchip: irq-armada-370-xp: generic MSI infrastructure and assorted fixes

In reply to Marc Zyngier
Quoted 21 lines · Marc Zyngier
Quoted 20 lines · Thomas Petazzoni

Hello,

Quoted 8 lines · Thomas Petazzoni

Thomas Petazzoni (6):
irqchip: irq-armada-370-xp: add Kconfig option for the driver
irqchip: irq-armada-370-xp: use the generic MSI infrastructure
irqchip: irq-armada-370-xp: use PCI_MSI_DOORBELL_START where
appropriate
irqchip: irq-armada-370-xp: use shorter names for irq_chip
irqchip: irq-armada-370-xp: allow allocation of multiple MSIs
ARM: mvebu: use the ARMADA_370_XP_IRQ option

Jason, Thomas, any chance to get this applied soonish?

The core patch of the series, which migrates the irq-armada-370-xp driver to use the generic MSI infrastructure has been Reviewed-by: Marc Zyngier, and the other patches in the series have Acked-by/Reviewed-by from Gregory Clement.

Quoted 6 lines
Quoted 3 lines

Of course, if there's anything left to be changed, I'd be happy to respin a new version of this series.

Noticing the distribution list, it would be good to repost these patches with acks and co to LKML...

agreed, and I'll pick it up within the next day or so. Still getting my home network setup... too much wifi. :(

thx,

Jason.

#16 lore raw

v2 cover irqchip: irq-armada-370-xp: generic MSI infrastructure and assorted fixes

Hi Jason,

Quoted 26 lines · Jason Cooper
Quoted 25 lines · Marc Zyngier
Quoted 23 lines · Thomas Petazzoni

Hello,

Quoted 8 lines · Thomas Petazzoni

Thomas Petazzoni (6):
irqchip: irq-armada-370-xp: add Kconfig option for the driver
irqchip: irq-armada-370-xp: use the generic MSI infrastructure
irqchip: irq-armada-370-xp: use PCI_MSI_DOORBELL_START where
appropriate
irqchip: irq-armada-370-xp: use shorter names for irq_chip
irqchip: irq-armada-370-xp: allow allocation of multiple MSIs
ARM: mvebu: use the ARMADA_370_XP_IRQ option

Jason, Thomas, any chance to get this applied soonish?

The core patch of the series, which migrates the irq-armada-370-xp driver to use the generic MSI infrastructure has been Reviewed-by: Marc Zyngier, and the other patches in the series have Acked-by/Reviewed-by from Gregory Clement.

Of course, if there's anything left to be changed, I'd be happy to respin a new version of this series.

Quoted 5 lines
Quoted 2 lines

Noticing the distribution list, it would be good to repost these patches with acks and co to LKML...

agreed, and I'll pick it up within the next day or so. Still getting my home network setup... too much wifi. :(

I proposed that you take the 6th patch to ensure that this driver will always be selected for the mvebu platform which need it. It is still OK but, since this offer, I sent a series which depend of the 1st patch:
http://thread.gmane.org/gmane.linux.ide/61178

Would you agree to provide an immutable tag containing the first patch? Thanks to this I will be able to provide it to the arm-soc maintainer for my pull request.

Thanks,

Gregory

Signature · 4 lines
Gregory Clement, Free Electrons
Kernel, drivers, real-time and embedded Linux
development, consulting, training and support.
http://free-electrons.com
#17 lore raw

v2 cover irqchip: irq-armada-370-xp: generic MSI infrastructure and assorted fixes

Quoted 33 lines · Gregory CLEMENT

Hi Jason,

Quoted 29 lines · Jason Cooper
Quoted 27 lines · Marc Zyngier
Quoted 15 lines · Thomas Petazzoni

Hello,

Quoted 8 lines · Thomas Petazzoni

Thomas Petazzoni (6):
irqchip: irq-armada-370-xp: add Kconfig option for the driver
irqchip: irq-armada-370-xp: use the generic MSI infrastructure
irqchip: irq-armada-370-xp: use PCI_MSI_DOORBELL_START where
appropriate
irqchip: irq-armada-370-xp: use shorter names for irq_chip
irqchip: irq-armada-370-xp: allow allocation of multiple MSIs
ARM: mvebu: use the ARMADA_370_XP_IRQ option

Jason, Thomas, any chance to get this applied soonish?

Quoted 8 lines

The core patch of the series, which migrates the irq-armada-370-xp driver to use the generic MSI infrastructure has been Reviewed-by: Marc Zyngier, and the other patches in the series have Acked-by/Reviewed-by from Gregory Clement.

Of course, if there's anything left to be changed, I'd be happy to respin a new version of this series.

Noticing the distribution list, it would be good to repost these patches with acks and co to LKML...

Quoted 7 lines
Quoted 2 lines

agreed, and I'll pick it up within the next day or so. Still getting my home network setup... too much wifi. :(

I proposed that you take the 6th patch to ensure that this driver will always be selected for the mvebu platform which need it. It is still OK but, since this offer, I sent a series which depend of the 1st patch:
http://thread.gmane.org/gmane.linux.ide/61178

I saw that. ;-)

Quoted 3 lines

Would you agree to provide an immutable tag containing the first patch? Thanks to this I will be able to provide it to the arm-soc maintainer for my pull request.

Sure, that's my default MO since most of the time, people only touch irqchip drivers when they are changing something else. Thus, there's usually a dependency on the irqchip changes.

thx,

Jason.