All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ben Dooks <ben-linux@fluff.org>
To: Kukjin Kim <kgene.kim@samsung.com>
Cc: linux-samsung-soc@vger.kernel.org, ben-linux@fluff.org,
	Adityapratap Sharma <aditya.ps@samsung.com>,
	Thomas Abraham <thomas.ab@samsung.com>,
	Atul Dahiya <atul.dahiya@samsung.com>
Subject: Re: [PATCH v3 3/7] ARM: S5P6440: Add IRQ support
Date: Mon, 11 Jan 2010 06:18:25 +0000	[thread overview]
Message-ID: <20100111061825.GE3738@trinity.fluff.org> (raw)
In-Reply-To: <1263182099-14457-1-git-send-email-kgene.kim@samsung.com>

On Mon, Jan 11, 2010 at 12:54:59PM +0900, Kukjin Kim wrote:
> This patch adds IRQ support for S5P6440 CPU.
> 
> Signed-off-by: Kukjin Kim <kgene.kim@samsung.com>
> Signed-off-by: Adityapratap Sharma <aditya.ps@samsung.com>
> Signed-off-by: Thomas Abraham <thomas.ab@samsung.com>
> Signed-off-by: Atul Dahiya <atul.dahiya@samsung.com>

looks fine, will merge.

> ---
>  arch/arm/mach-s5p6440/include/mach/irqs.h     |  111 +++++++++++++++++++++++++
>  arch/arm/mach-s5p6440/include/mach/regs-irq.h |   19 ++++
>  arch/arm/plat-s5p/include/plat/irqs.h         |   80 ++++++++++++++++++
>  arch/arm/plat-s5p/irq.c                       |   73 ++++++++++++++++
>  4 files changed, 283 insertions(+), 0 deletions(-)
>  create mode 100644 arch/arm/mach-s5p6440/include/mach/irqs.h
>  create mode 100644 arch/arm/mach-s5p6440/include/mach/regs-irq.h
>  create mode 100644 arch/arm/plat-s5p/include/plat/irqs.h
>  create mode 100644 arch/arm/plat-s5p/irq.c
> 
> diff --git a/arch/arm/mach-s5p6440/include/mach/irqs.h b/arch/arm/mach-s5p6440/include/mach/irqs.h
> new file mode 100644
> index 0000000..a4b9b40
> --- /dev/null
> +++ b/arch/arm/mach-s5p6440/include/mach/irqs.h
> @@ -0,0 +1,111 @@
> +/* linux/arch/arm/mach-s5p6440/include/mach/irqs.h
> + *
> + * Copyright 2009 Samsung Electronics Co., Ltd.
> + *		http://www.samsung.com/
> + *
> + * S5P6440 - IRQ definitions
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License version 2 as
> + * published by the Free Software Foundation.
> +*/
> +
> +#ifndef __ASM_ARCH_S5P_IRQS_H
> +#define __ASM_ARCH_S5P_IRQS_H __FILE__
> +
> +#include <plat/irqs.h>
> +
> +/* VIC0 */
> +
> +#define IRQ_EINT0_3		S5P_IRQ_VIC0(0)
> +#define IRQ_EINT4_11		S5P_IRQ_VIC0(1)
> +#define IRQ_RTC_TIC		S5P_IRQ_VIC0(2)
> +#define IRQ_IIC1		S5P_IRQ_VIC0(5)
> +#define IRQ_I2SV40		S5P_IRQ_VIC0(6)
> +#define IRQ_GPS			S5P_IRQ_VIC0(7)
> +#define IRQ_POST0		S5P_IRQ_VIC0(9)
> +#define IRQ_2D			S5P_IRQ_VIC0(11)
> +#define IRQ_TIMER0_VIC		S5P_IRQ_VIC0(23)
> +#define IRQ_TIMER1_VIC		S5P_IRQ_VIC0(24)
> +#define IRQ_TIMER2_VIC		S5P_IRQ_VIC0(25)
> +#define IRQ_WDT			S5P_IRQ_VIC0(26)
> +#define IRQ_TIMER3_VIC		S5P_IRQ_VIC0(27)
> +#define IRQ_TIMER4_VIC		S5P_IRQ_VIC0(28)
> +#define IRQ_DISPCON0		S5P_IRQ_VIC0(29)
> +#define IRQ_DISPCON1		S5P_IRQ_VIC0(30)
> +#define IRQ_DISPCON2		S5P_IRQ_VIC0(31)
> +
> +/* VIC1 */
> +
> +#define IRQ_EINT12_15		S5P_IRQ_VIC1(0)
> +#define IRQ_PCM0		S5P_IRQ_VIC1(2)
> +#define IRQ_UART0		S5P_IRQ_VIC1(5)
> +#define IRQ_UART1		S5P_IRQ_VIC1(6)
> +#define IRQ_UART2		S5P_IRQ_VIC1(7)
> +#define IRQ_UART3		S5P_IRQ_VIC1(8)
> +#define IRQ_DMA0		S5P_IRQ_VIC1(9)
> +#define IRQ_NFC			S5P_IRQ_VIC1(13)
> +#define IRQ_SPI0		S5P_IRQ_VIC1(16)
> +#define IRQ_SPI1		S5P_IRQ_VIC1(17)
> +#define IRQ_IIC			S5P_IRQ_VIC1(18)
> +#define IRQ_DISPCON3		S5P_IRQ_VIC1(19)
> +#define IRQ_FIMGVG		S5P_IRQ_VIC1(20)
> +#define IRQ_EINT_GROUPS		S5P_IRQ_VIC1(21)
> +#define IRQ_PMUIRQ		S5P_IRQ_VIC1(23)
> +#define IRQ_HSMMC0		S5P_IRQ_VIC1(24)
> +#define IRQ_HSMMC1		S5P_IRQ_VIC1(25)
> +#define IRQ_HSMMC2		IRQ_SPI1	/* shared with SPI1 */
> +#define IRQ_OTG			S5P_IRQ_VIC1(26)
> +#define IRQ_DSI			S5P_IRQ_VIC1(27)
> +#define IRQ_RTC_ALARM		S5P_IRQ_VIC1(28)
> +#define IRQ_TSI			S5P_IRQ_VIC1(29)
> +#define IRQ_PENDN		S5P_IRQ_VIC1(30)
> +#define IRQ_TC			IRQ_PENDN
> +#define IRQ_ADC			S5P_IRQ_VIC1(31)
> +
> +/*
> + * Since the IRQ_EINT(x) are a linear mapping on s5p6440 we just defined
> + * them as an IRQ_EINT(x) macro from S5P_IRQ_EINT_BASE which we place
> + * after the pair of VICs.
> + */
> +
> +#define S5P_IRQ_EINT_BASE	(S5P_IRQ_VIC1(31) + 6)
> +
> +#define S5P_EINT(x)		((x) + S5P_IRQ_EINT_BASE)
> +#define IRQ_EINT(x)		S5P_EINT(x)
> +
> +/*
> + * Next the external interrupt groups. These are similar to the IRQ_EINT(x)
> + * that they are sourced from the GPIO pins but with a different scheme for
> + * priority and source indication.
> + *
> + * The IRQ_EINT(x) can be thought of as 'group 0' of the available GPIO
> + * interrupts, but for historical reasons they are kept apart from these
> + * next interrupts.
> + *
> + * Use IRQ_EINT_GROUP(group, offset) to get the number for use in the
> + * machine specific support files.
> + */
> +
> +/* Actually, #6 and #7 are missing in the EINT_GROUP1 */
> +#define IRQ_EINT_GROUP1_NR	(15)
> +#define IRQ_EINT_GROUP2_NR	(8)
> +#define IRQ_EINT_GROUP5_NR	(7)
> +#define IRQ_EINT_GROUP6_NR	(10)
> +/* Actually, #0, #1 and #2 are missing in the EINT_GROUP8 */
> +#define IRQ_EINT_GROUP8_NR	(11)
> +
> +#define IRQ_EINT_GROUP_BASE	S5P_EINT(16)
> +#define IRQ_EINT_GROUP1_BASE	(IRQ_EINT_GROUP_BASE + 0)
> +#define IRQ_EINT_GROUP2_BASE	(IRQ_EINT_GROUP1_BASE + IRQ_EINT_GROUP1_NR)
> +#define IRQ_EINT_GROUP5_BASE	(IRQ_EINT_GROUP2_BASE + IRQ_EINT_GROUP2_NR)
> +#define IRQ_EINT_GROUP6_BASE	(IRQ_EINT_GROUP5_BASE + IRQ_EINT_GROUP5_NR)
> +#define IRQ_EINT_GROUP8_BASE	(IRQ_EINT_GROUP6_BASE + IRQ_EINT_GROUP6_NR)
> +
> +#define IRQ_EINT_GROUP(grp, x)	(IRQ_EINT_GROUP##grp##_BASE + (x))
> +
> +/* Set the default NR_IRQS */
> +
> +#define NR_IRQS			(IRQ_EINT_GROUP8_BASE + IRQ_EINT_GROUP8_NR + 1)
> +
> +#endif /* __ASM_ARCH_S5P_IRQS_H */
> diff --git a/arch/arm/mach-s5p6440/include/mach/regs-irq.h b/arch/arm/mach-s5p6440/include/mach/regs-irq.h
> new file mode 100644
> index 0000000..a961f4b
> --- /dev/null
> +++ b/arch/arm/mach-s5p6440/include/mach/regs-irq.h
> @@ -0,0 +1,19 @@
> +/* linux/arch/arm/mach-s5p6440/include/mach/regs-irq.h
> + *
> + * Copyright (c) 2009 Samsung Electronics Co., Ltd.
> + *		http://www.samsung.com/
> + *
> + * S5P6440 - IRQ register definitions
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License version 2 as
> + * published by the Free Software Foundation.
> +*/
> +
> +#ifndef __ASM_ARCH_REGS_IRQ_H
> +#define __ASM_ARCH_REGS_IRQ_H __FILE__
> +
> +#include <asm/hardware/vic.h>
> +#include <mach/map.h>
> +
> +#endif /* __ASM_ARCH_REGS_IRQ_H */
> diff --git a/arch/arm/plat-s5p/include/plat/irqs.h b/arch/arm/plat-s5p/include/plat/irqs.h
> new file mode 100644
> index 0000000..1bc4bac
> --- /dev/null
> +++ b/arch/arm/plat-s5p/include/plat/irqs.h
> @@ -0,0 +1,80 @@
> +/* linux/arch/arm/plat-s5p/include/plat/irqs.h
> + *
> + * Copyright (c) 2009 Samsung Electronics Co., Ltd.
> + *		http://www.samsung.com/
> + *
> + * S5P Common IRQ support
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License version 2 as
> + * published by the Free Software Foundation.
> +*/
> +
> +#ifndef __ASM_PLAT_S5P_IRQS_H
> +#define __ASM_PLAT_S5P_IRQS_H __FILE__
> +
> +/* we keep the first set of CPU IRQs out of the range of
> + * the ISA space, so that the PC104 has them to itself
> + * and we don't end up having to do horrible things to the
> + * standard ISA drivers....
> + *
> + * note, since we're using the VICs, our start must be a
> + * mulitple of 32 to allow the common code to work
> + */
> +
> +#define S5P_IRQ_OFFSET		(32)
> +
> +#define S5P_IRQ(x)		((x) + S5P_IRQ_OFFSET)
> +
> +#define S5P_VIC0_BASE		S5P_IRQ(0)
> +#define S5P_VIC1_BASE		S5P_IRQ(32)
> +
> +/* UART interrupts, each UART has 4 intterupts per channel so
> + * use the space between the ISA and S3C main interrupts. Note, these
> + * are not in the same order as the S3C24XX series! */
> +
> +#define IRQ_S5P_UART_BASE0	(16)
> +#define IRQ_S5P_UART_BASE1	(20)
> +#define IRQ_S5P_UART_BASE2	(24)
> +#define IRQ_S5P_UART_BASE3	(28)
> +
> +#define UART_IRQ_RXD		(0)
> +#define UART_IRQ_ERR		(1)
> +#define UART_IRQ_TXD		(2)
> +
> +#define IRQ_S5P_UART_RX0	(IRQ_S5P_UART_BASE0 + UART_IRQ_RXD)
> +#define IRQ_S5P_UART_TX0	(IRQ_S5P_UART_BASE0 + UART_IRQ_TXD)
> +#define IRQ_S5P_UART_ERR0	(IRQ_S5P_UART_BASE0 + UART_IRQ_ERR)
> +
> +#define IRQ_S5P_UART_RX1	(IRQ_S5P_UART_BASE1 + UART_IRQ_RXD)
> +#define IRQ_S5P_UART_TX1	(IRQ_S5P_UART_BASE1 + UART_IRQ_TXD)
> +#define IRQ_S5P_UART_ERR1	(IRQ_S5P_UART_BASE1 + UART_IRQ_ERR)
> +
> +#define IRQ_S5P_UART_RX2	(IRQ_S5P_UART_BASE2 + UART_IRQ_RXD)
> +#define IRQ_S5P_UART_TX2	(IRQ_S5P_UART_BASE2 + UART_IRQ_TXD)
> +#define IRQ_S5P_UART_ERR2	(IRQ_S5P_UART_BASE2 + UART_IRQ_ERR)
> +
> +#define IRQ_S5P_UART_RX3	(IRQ_S5P_UART_BASE3 + UART_IRQ_RXD)
> +#define IRQ_S5P_UART_TX3	(IRQ_S5P_UART_BASE3 + UART_IRQ_TXD)
> +#define IRQ_S5P_UART_ERR3	(IRQ_S5P_UART_BASE3 + UART_IRQ_ERR)
> +
> +/* S3C compatibilty defines */
> +#define IRQ_S3CUART_RX0		IRQ_S5P_UART_RX0
> +#define IRQ_S3CUART_RX1		IRQ_S5P_UART_RX1
> +#define IRQ_S3CUART_RX2		IRQ_S5P_UART_RX2
> +#define IRQ_S3CUART_RX3		IRQ_S5P_UART_RX3
> +
> +/* VIC based IRQs */
> +
> +#define S5P_IRQ_VIC0(x)		(S5P_VIC0_BASE + (x))
> +#define S5P_IRQ_VIC1(x)		(S5P_VIC1_BASE + (x))
> +
> +#define S5P_TIMER_IRQ(x)	S5P_IRQ(64 + (x))
> +
> +#define IRQ_TIMER0		S5P_TIMER_IRQ(0)
> +#define IRQ_TIMER1		S5P_TIMER_IRQ(1)
> +#define IRQ_TIMER2		S5P_TIMER_IRQ(2)
> +#define IRQ_TIMER3		S5P_TIMER_IRQ(3)
> +#define IRQ_TIMER4		S5P_TIMER_IRQ(4)
> +
> +#endif /* __ASM_PLAT_S5P_IRQS_H */
> diff --git a/arch/arm/plat-s5p/irq.c b/arch/arm/plat-s5p/irq.c
> new file mode 100644
> index 0000000..eada40d
> --- /dev/null
> +++ b/arch/arm/plat-s5p/irq.c
> @@ -0,0 +1,73 @@
> +/* arch/arm/plat-s5p/irq.c
> + *
> + * Copyright (c) 2009 Samsung Electronics Co., Ltd.
> + *		http://www.samsung.com/
> + *
> + * S5P - Interrupt handling
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License version 2 as
> + * published by the Free Software Foundation.
> +*/
> +
> +#include <linux/kernel.h>
> +#include <linux/interrupt.h>
> +#include <linux/irq.h>
> +#include <linux/io.h>
> +
> +#include <asm/hardware/vic.h>
> +
> +#include <linux/serial_core.h>
> +#include <mach/map.h>
> +#include <plat/regs-timer.h>
> +#include <plat/regs-serial.h>
> +#include <plat/cpu.h>
> +#include <plat/irq-vic-timer.h>
> +#include <plat/irq-uart.h>
> +
> +#define VIC_VAADDR(no)	(S5P_VA_VIC0   + ((no)*0x10000))
> +#define VIC_BASE(no)	(S5P_VIC0_BASE + ((no)*32))
> +
> +/*
> + * Note, we make use of the fact that the parent IRQs, IRQ_UART[0..3]
> + * are consecutive when looking up the interrupt in the demux routines.
> + */
> +static struct s3c_uart_irq uart_irqs[] = {
> +	[0] = {
> +		.regs		= S5P_VA_UART0,
> +		.base_irq	= IRQ_S5P_UART_BASE0,
> +		.parent_irq	= IRQ_UART0,
> +	},
> +	[1] = {
> +		.regs		= S5P_VA_UART1,
> +		.base_irq	= IRQ_S5P_UART_BASE1,
> +		.parent_irq	= IRQ_UART1,
> +	},
> +	[2] = {
> +		.regs		= S5P_VA_UART2,
> +		.base_irq	= IRQ_S5P_UART_BASE2,
> +		.parent_irq	= IRQ_UART2,
> +	},
> +	[3] = {
> +		.regs		= S5P_VA_UART3,
> +		.base_irq	= IRQ_S5P_UART_BASE3,
> +		.parent_irq	= IRQ_UART3,
> +	},
> +};
> +
> +void __init s5p_init_irq(u32 *vic, u32 num_vic)
> +{
> +	int irq;
> +
> +	/* initialize the VICs */
> +	for (irq = 0; irq < num_vic; irq++)
> +		vic_init(VIC_VAADDR(irq), VIC_BASE(irq), vic[irq], 0);
> +
> +	s3c_init_vic_timer_irq(IRQ_TIMER0_VIC, IRQ_TIMER0);
> +	s3c_init_vic_timer_irq(IRQ_TIMER1_VIC, IRQ_TIMER1);
> +	s3c_init_vic_timer_irq(IRQ_TIMER2_VIC, IRQ_TIMER2);
> +	s3c_init_vic_timer_irq(IRQ_TIMER3_VIC, IRQ_TIMER3);
> +	s3c_init_vic_timer_irq(IRQ_TIMER4_VIC, IRQ_TIMER4);
> +
> +	s3c_init_uart_irqs(uart_irqs, ARRAY_SIZE(uart_irqs));
> +}
> -- 
> 1.6.2.5
> 

-- 
-- 
Ben

Q:      What's a light-year?
A:      One-third less calories than a regular year.

      reply	other threads:[~2010-01-11  6:18 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-01-11  3:54 [PATCH v3 3/7] ARM: S5P6440: Add IRQ support Kukjin Kim
2010-01-11  6:18 ` Ben Dooks [this message]

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=20100111061825.GE3738@trinity.fluff.org \
    --to=ben-linux@fluff.org \
    --cc=aditya.ps@samsung.com \
    --cc=atul.dahiya@samsung.com \
    --cc=kgene.kim@samsung.com \
    --cc=linux-samsung-soc@vger.kernel.org \
    --cc=thomas.ab@samsung.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 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.