All of lore.kernel.org
 help / color / mirror / Atom feed
From: jamie@jamieiles.com (Jamie Iles)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 1/3] ARM: at91/aic: add device tree support for AIC
Date: Thu, 24 Nov 2011 22:26:01 +0000	[thread overview]
Message-ID: <20111124222601.GA28582@gallagher> (raw)
In-Reply-To: <167b5ccfc31d9637186c5201cd83cb62df81fc0f.1322171620.git.nicolas.ferre@atmel.com>

Hi Nicolas,

On Thu, Nov 24, 2011 at 10:56:27PM +0100, Nicolas Ferre wrote:
> Ioremap registers from DT specification and adding
> of a simple irq domain for AIC interrupts.
> 
> Signed-off-by: Nicolas Ferre <nicolas.ferre@atmel.com>
> Acked-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
> ---

Apologies if I've missed it somewhere but I think this needs to be 
documented in Documentation/devicetree.

[...]
> diff --git a/arch/arm/mach-at91/irq.c b/arch/arm/mach-at91/irq.c
> index be6b639..80783b0 100644
> --- a/arch/arm/mach-at91/irq.c
> +++ b/arch/arm/mach-at91/irq.c
> @@ -24,6 +24,8 @@
>  #include <linux/module.h>
>  #include <linux/mm.h>
>  #include <linux/types.h>
> +#include <linux/of_address.h>
> +#include <linux/irqdomain.h>
>  
>  #include <mach/hardware.h>
>  #include <asm/irq.h>
> @@ -34,6 +36,7 @@
>  #include <asm/mach/map.h>
>  
>  void __iomem *at91_aic_base;
> +static struct irq_domain at91_aic_domain;
>  
>  static void at91_aic_mask_irq(struct irq_data *d)
>  {
> @@ -127,14 +130,44 @@ static struct irq_chip at91_aic_chip = {
>  	.irq_set_wake	= at91_aic_set_wake,
>  };
>  
> +#if defined(CONFIG_OF)
> +static struct of_device_id aic_ids[]  = {
> +	{ .compatible = "atmel,at91rm9200-aic" },
> +	{ /*sentinel*/ }
> +};
> +
> +static int __init at91_aic_of_init(void)
> +{
> +	struct device_node *np;
> +
> +	np = of_find_matching_node(NULL, aic_ids);
> +	if (np == NULL)
> +		return -ENODEV;
> +
> +	at91_aic_base = of_iomap(np, 0);
> +	at91_aic_domain.of_node = np;

I think this needs to be:

	at91_aic_domain.of_node = of_node_get(np);

to keep the reference count.

> +	/* Keep refcount of the node */
> +
> +	return 0;
> +}
> +#else
> +static int __init at91_aic_of_init(void)
> +{
> +	return -ENOSYS;
> +}
> +#endif

I think it's preferred if you use of_irq_init() here as it can handle 
the ordering of IRQ controllers.  There are GIC and VIC bindings in 
-next that use this and provide a way for non-DT platforms to still use 
the drivers.

>  /*
>   * Initialize the AIC interrupt controller.
>   */
>  void __init at91_aic_init(unsigned int priority[NR_AIC_IRQS])
>  {
>  	unsigned int i;
> +	int ret;
>  
> -	at91_aic_base = ioremap(AT91_AIC, 512);
> +	ret = at91_aic_of_init();
> +	if (ret < 0)
> +		at91_aic_base = ioremap(AT91_AIC, 512);
>  
>  	if (!at91_aic_base)
>  		panic("Impossible to ioremap AT91_AIC\n");
> @@ -169,4 +202,10 @@ void __init at91_aic_init(unsigned int priority[NR_AIC_IRQS])
>  	/* Disable and clear all interrupts initially */
>  	at91_aic_write(AT91_AIC_IDCR, 0xFFFFFFFF);
>  	at91_aic_write(AT91_AIC_ICCR, 0xFFFFFFFF);
> +
> +	/* Add irq domain for AIC */
> +	at91_aic_domain.irq_base = at91_aic_domain.hwirq_base = 0;
> +	at91_aic_domain.nr_irq = NR_AIC_IRQS;
> +	at91_aic_domain.ops = &irq_domain_simple_ops;

irq_domain_simple_ops is only exported when CONFIG_OF_IRQ=y, so this 
probably won't work for !CONFIG_USE_OF.

> +	irq_domain_add(&at91_aic_domain);
>  }
> -- 
> 1.7.5.4
> 
> _______________________________________________
> devicetree-discuss mailing list
> devicetree-discuss at lists.ozlabs.org
> https://lists.ozlabs.org/listinfo/devicetree-discuss

WARNING: multiple messages have this Message-ID (diff)
From: Jamie Iles <jamie@jamieiles.com>
To: Nicolas Ferre <nicolas.ferre@atmel.com>
Cc: linux-arm-kernel@lists.infradead.org, robherring2@gmail.com,
	grant.likely@secretlab.ca, devicetree-discuss@lists.ozlabs.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH 1/3] ARM: at91/aic: add device tree support for AIC
Date: Thu, 24 Nov 2011 22:26:01 +0000	[thread overview]
Message-ID: <20111124222601.GA28582@gallagher> (raw)
In-Reply-To: <167b5ccfc31d9637186c5201cd83cb62df81fc0f.1322171620.git.nicolas.ferre@atmel.com>

Hi Nicolas,

On Thu, Nov 24, 2011 at 10:56:27PM +0100, Nicolas Ferre wrote:
> Ioremap registers from DT specification and adding
> of a simple irq domain for AIC interrupts.
> 
> Signed-off-by: Nicolas Ferre <nicolas.ferre@atmel.com>
> Acked-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
> ---

Apologies if I've missed it somewhere but I think this needs to be 
documented in Documentation/devicetree.

[...]
> diff --git a/arch/arm/mach-at91/irq.c b/arch/arm/mach-at91/irq.c
> index be6b639..80783b0 100644
> --- a/arch/arm/mach-at91/irq.c
> +++ b/arch/arm/mach-at91/irq.c
> @@ -24,6 +24,8 @@
>  #include <linux/module.h>
>  #include <linux/mm.h>
>  #include <linux/types.h>
> +#include <linux/of_address.h>
> +#include <linux/irqdomain.h>
>  
>  #include <mach/hardware.h>
>  #include <asm/irq.h>
> @@ -34,6 +36,7 @@
>  #include <asm/mach/map.h>
>  
>  void __iomem *at91_aic_base;
> +static struct irq_domain at91_aic_domain;
>  
>  static void at91_aic_mask_irq(struct irq_data *d)
>  {
> @@ -127,14 +130,44 @@ static struct irq_chip at91_aic_chip = {
>  	.irq_set_wake	= at91_aic_set_wake,
>  };
>  
> +#if defined(CONFIG_OF)
> +static struct of_device_id aic_ids[]  = {
> +	{ .compatible = "atmel,at91rm9200-aic" },
> +	{ /*sentinel*/ }
> +};
> +
> +static int __init at91_aic_of_init(void)
> +{
> +	struct device_node *np;
> +
> +	np = of_find_matching_node(NULL, aic_ids);
> +	if (np == NULL)
> +		return -ENODEV;
> +
> +	at91_aic_base = of_iomap(np, 0);
> +	at91_aic_domain.of_node = np;

I think this needs to be:

	at91_aic_domain.of_node = of_node_get(np);

to keep the reference count.

> +	/* Keep refcount of the node */
> +
> +	return 0;
> +}
> +#else
> +static int __init at91_aic_of_init(void)
> +{
> +	return -ENOSYS;
> +}
> +#endif

I think it's preferred if you use of_irq_init() here as it can handle 
the ordering of IRQ controllers.  There are GIC and VIC bindings in 
-next that use this and provide a way for non-DT platforms to still use 
the drivers.

>  /*
>   * Initialize the AIC interrupt controller.
>   */
>  void __init at91_aic_init(unsigned int priority[NR_AIC_IRQS])
>  {
>  	unsigned int i;
> +	int ret;
>  
> -	at91_aic_base = ioremap(AT91_AIC, 512);
> +	ret = at91_aic_of_init();
> +	if (ret < 0)
> +		at91_aic_base = ioremap(AT91_AIC, 512);
>  
>  	if (!at91_aic_base)
>  		panic("Impossible to ioremap AT91_AIC\n");
> @@ -169,4 +202,10 @@ void __init at91_aic_init(unsigned int priority[NR_AIC_IRQS])
>  	/* Disable and clear all interrupts initially */
>  	at91_aic_write(AT91_AIC_IDCR, 0xFFFFFFFF);
>  	at91_aic_write(AT91_AIC_ICCR, 0xFFFFFFFF);
> +
> +	/* Add irq domain for AIC */
> +	at91_aic_domain.irq_base = at91_aic_domain.hwirq_base = 0;
> +	at91_aic_domain.nr_irq = NR_AIC_IRQS;
> +	at91_aic_domain.ops = &irq_domain_simple_ops;

irq_domain_simple_ops is only exported when CONFIG_OF_IRQ=y, so this 
probably won't work for !CONFIG_USE_OF.

> +	irq_domain_add(&at91_aic_domain);
>  }
> -- 
> 1.7.5.4
> 
> _______________________________________________
> devicetree-discuss mailing list
> devicetree-discuss@lists.ozlabs.org
> https://lists.ozlabs.org/listinfo/devicetree-discuss

  parent reply	other threads:[~2011-11-24 22:26 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-11-24 21:56 [PATCH 1/3] ARM: at91/aic: add device tree support for AIC Nicolas Ferre
2011-11-24 21:56 ` Nicolas Ferre
2011-11-24 21:56 ` Nicolas Ferre
2011-11-24 21:56 ` [PATCH 2/3] ARM: at91/gpio: add irqdomain to gpio interrupts Nicolas Ferre
2011-11-24 21:56   ` Nicolas Ferre
2011-11-24 21:56   ` Nicolas Ferre
2011-11-25 15:36   ` Rob Herring
2011-11-25 15:36     ` Rob Herring
2011-11-25 15:36     ` Rob Herring
2011-11-24 21:56 ` [PATCH 3/3] ARM: at91/board-dt: remove AIC irq domain from board file Nicolas Ferre
2011-11-24 21:56   ` Nicolas Ferre
2011-11-24 21:56   ` Nicolas Ferre
2011-11-24 22:26 ` Jamie Iles [this message]
2011-11-24 22:26   ` [PATCH 1/3] ARM: at91/aic: add device tree support for AIC Jamie Iles
2011-11-25 13:51   ` Jean-Christophe PLAGNIOL-VILLARD
2011-11-25 13:51     ` Jean-Christophe PLAGNIOL-VILLARD
2011-11-25 13:51     ` Jean-Christophe PLAGNIOL-VILLARD
2011-11-25 15:28     ` Jamie Iles
2011-11-25 15:28       ` Jamie Iles
2011-11-29 13:04       ` Nicolas Ferre
2011-11-29 13:04         ` Nicolas Ferre
2011-11-29 13:04         ` Nicolas Ferre
2011-11-29 13:56         ` Nicolas Ferre
2011-11-29 13:56           ` Nicolas Ferre
2011-11-29 13:56           ` Nicolas Ferre
2011-11-29 18:07 ` [PATCH v2 " Nicolas Ferre
2011-11-29 18:07   ` Nicolas Ferre
2011-12-01 15:42   ` [PATCH v3 1/3] ARM: at91/aic: add irq domain and device tree support Nicolas Ferre
2011-12-01 15:42     ` Nicolas Ferre
2011-12-01 15:42     ` Nicolas Ferre
2011-12-06  6:34     ` Jean-Christophe PLAGNIOL-VILLARD
2011-12-06  6:34       ` Jean-Christophe PLAGNIOL-VILLARD

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=20111124222601.GA28582@gallagher \
    --to=jamie@jamieiles.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.