ARM: davinci: modernize the irq support
v2 cover ARM: davinci: modernize the irq support
From: Bartosz Golaszewski <[email protected]>
This series ports the davinci platform to using SPARSE_IRQ, cleans up the irqchip drivers and moves them over to drivers/irqchip.
The series can be logically split into four parts. The first (1-8) aims at introducing support for SPARSE_IRQ. It contains a couple changes required for that functionality and the final patch actually selecting it.
Second part (9-19) makes the aintc driver suitable for drivers/irqchip and eventually moves it over there.
Part 3 (20-32) does the same for the cp-intc driver.
Last patch removes unnecessary code.
The series has been tested on da850-lcdk (for cp-intc) and dm365-evm (for aintc).
v1 -> v2:
- made commit messages readable without reading the subject line first
- collected David's Reviewed-by tags for patches that haven been significantly modified since v1
- added handling of spurious interrupts in cp-intc
- added comments explaining the irq handlers (C versions translated from assembly)
- dropped the patches removing the hardware interrupt numbers from the priority tables
- don't remove irqs.h, make it a local header instead
- rearranged the patches in order not to remove the code added by earlier ones
- renamed d*_init_irqs to d*_init_irq to fit the name of the relevant callback in machine info struct
- fixed license identifiers where needed
- added comments to config structures for irqchip drivers
- fixed all off-by-one errors in resource sizes
- clarified the comments on the weird handling of IRQ_TINT1_TINT34 as level irq and added missing calls to irq_set_handler() to dm3* SoCs
- fixed one function that was missing a correct prefix in cp_intc
- return value variables should be called ret not rv
- added a patch converting calls to _raw_readl/writel() to their _relaxed counterparts
- fixed the commit message prefix in patches that belong to the irqchip subsystem
- other minor tweaks
Bartosz Golaszewski (33):
ARM: davinci: remove intc_host_map from davinci_soc_info struct
ARM: davinci: aintc: use irq domain
ARM: davinci: select GENERIC_IRQ_MULTI_HANDLER
ARM: davinci: remove davinci_intc_type
ARM: davinci: pull davinci_intc_base into the respective intc drivers
ARM: davinci: wrap HW interrupt numbers with a macro
ARM: davinci: select SPARSE_IRQ
ARM: davinci: make irqs.h a local header
ARM: davinci: aintc: drop GPL license boilerplate
ARM: davinci: aintc: wrap davinci_irq_init() with a helper
ARM: davinci: aintc: use a common prefix for symbols in the driver
ARM: davinci: aintc: drop the 00 prefix from register offsets
ARM: davinci: aintc: use readl/writel_relaxed()
irqchip: davinci-aintc: add a new config structure
ARM: davinci: aintc: use the new irqchip config structure in dm* SoCs
ARM: davinci: aintc: use the new config structure
ARM: davinci: aintc: move timer-specific irq_set_handler() out of
irq.c
ARM: davinci: aintc: remove unnecessary includes
irqchip: davinci-aintc: move the driver to drivers/irqchip
ARM: davinci: cp-intc: remove cp_intc.h
ARM: davinci: cp-intc: add a wrapper around cp_intc_init()
irqchip: davinci-cp-intc: add a new config structure
ARM: davinci: cp-intc: add the new config structures for da8xx SoCs
ARM: davinci: cp-intc: use a common prefix for all symbols
ARM: davinci: cp-intc: convert all hex numbers to lowercase
ARM: davinci: cp-intc: use the new-style config structure
ARM: davinci: cp-intc: improve coding style
ARM: davinci: cp-intc: unify error handling
ARM: davinci: cp-intc: use readl/writel_relaxed()
ARM: davinci: cp-intc: drop GPL license boilerplate
ARM: davinci: cp-intc: remove redundant comments
irqchip: davinci-cp-intc: move the driver to drivers/irqchip
ARM: davinci: remove intc related fields from davinci_soc_info
arch/arm/Kconfig | 2 +
arch/arm/mach-davinci/Kconfig | 19 +-
arch/arm/mach-davinci/Makefile | 3 -
arch/arm/mach-davinci/asp.h | 8 +-
arch/arm/mach-davinci/board-da830-evm.c | 5 +-
arch/arm/mach-davinci/board-da850-evm.c | 5 +-
arch/arm/mach-davinci/board-dm355-evm.c | 2 +-
arch/arm/mach-davinci/board-dm355-leopard.c | 2 +-
arch/arm/mach-davinci/board-dm365-evm.c | 2 +-
arch/arm/mach-davinci/board-dm644x-evm.c | 8 +-
arch/arm/mach-davinci/board-dm646x-evm.c | 7 +-
arch/arm/mach-davinci/board-mityomapl138.c | 3 +-
arch/arm/mach-davinci/board-neuros-osd2.c | 2 +-
arch/arm/mach-davinci/board-omapl138-hawk.c | 3 +-
arch/arm/mach-davinci/board-sffsdr.c | 2 +-
arch/arm/mach-davinci/common.c | 3 -
arch/arm/mach-davinci/cp_intc.c | 215 ----------------
arch/arm/mach-davinci/cp_intc.h | 57 -----
arch/arm/mach-davinci/da830.c | 128 ++--------
arch/arm/mach-davinci/da850.c | 154 +++---------
arch/arm/mach-davinci/davinci.h | 4 +
arch/arm/mach-davinci/devices-da8xx.c | 147 +++++------
arch/arm/mach-davinci/devices.c | 40 +--
arch/arm/mach-davinci/dm355.c | 86 ++++---
arch/arm/mach-davinci/dm365.c | 110 ++++----
arch/arm/mach-davinci/dm644x.c | 76 +++---
arch/arm/mach-davinci/dm646x.c | 90 ++++---
arch/arm/mach-davinci/include/mach/common.h | 14 +-
arch/arm/mach-davinci/include/mach/da8xx.h | 2 +
.../mach-davinci/include/mach/entry-macro.S | 39 ---
arch/arm/mach-davinci/irq.c | 117 ---------
.../mach-davinci/{include/mach => }/irqs.h | 4 -
arch/arm/mach-davinci/usb-da8xx.c | 9 +-
arch/arm/mach-davinci/usb.c | 14 +-
drivers/irqchip/Kconfig | 10 +
drivers/irqchip/Makefile | 2 +
drivers/irqchip/irq-davinci-aintc.c | 144 +++++++++++
drivers/irqchip/irq-davinci-cp-intc.c | 238 ++++++++++++++++++
include/linux/irqchip/irq-davinci-aintc.h | 27 ++
include/linux/irqchip/irq-davinci-cp-intc.h | 25 ++
40 files changed, 872 insertions(+), 956 deletions(-)
delete mode 100644 arch/arm/mach-davinci/cp_intc.c
delete mode 100644 arch/arm/mach-davinci/cp_intc.h
delete mode 100644 arch/arm/mach-davinci/include/mach/entry-macro.S
delete mode 100644 arch/arm/mach-davinci/irq.c
rename arch/arm/mach-davinci/{include/mach => }/irqs.h (98%)
create mode 100644 drivers/irqchip/irq-davinci-aintc.c
create mode 100644 drivers/irqchip/irq-davinci-cp-intc.c
create mode 100644 include/linux/irqchip/irq-davinci-aintc.h
create mode 100644 include/linux/irqchip/irq-davinci-cp-intc.hSignature · 1 line
2.20.1
PATCH v2 1/33 ARM: davinci: remove intc_host_map from davinci_soc_info struct
From: Bartosz Golaszewski <[email protected]>
The intc_host_map field in struct davinci_soc_info is not used by any board. Remove it as part of the interrupt support cleanup.
--- arch/arm/mach-davinci/cp_intc.c | 5 ----- arch/arm/mach-davinci/include/mach/common.h | 1 - 2 files changed, 6 deletions(-)
arch/arm/mach-davinci/cp_intc.c +0 -5
@@ -117,7 +117,6 @@ int __init cp_intc_of_init(struct device_node *node, struct device_node *parent) {u32 num_irq = davinci_soc_info.intc_irq_num;u8 *irq_prio = davinci_soc_info.intc_irq_prios; -u32 *host_map = davinci_soc_info.intc_host_map;unsigned num_reg =BITS_TO_LONGS (num_irq);int i, irq_base;
@@ -182,10 +181,6 @@ int __init cp_intc_of_init(struct device_node *node, struct device_node *parent)cp_intc_write (0x0f0f0f0f ,CP_INTC_CHAN_MAP (i)); } -if (host_map) -for (i =0 ; host_map[i] !=-1 ; i++) -cp_intc_write (host_map[i],CP_INTC_HOST_MAP (i)); - irq_base =irq_alloc_descs (-1 ,0 , num_irq,0 );if (irq_base <0 ) {pr_warn ("Couldn't allocate IRQ numbers\n" );
arch/arm/mach-davinci/include/mach/common.h +0 -1
@@ -61,7 +61,6 @@ struct davinci_soc_info {int intc_type;u8 *intc_irq_prios;unsigned long intc_irq_num; -u32 *intc_host_map;struct davinci_timer_info *timer_info;int gpio_type;u32 gpio_base;
Signature · 1 line
2.20.1
PATCH v2 2/33 ARM: davinci: aintc: use irq domain
In reply to Bartosz GolaszewskiFrom: Bartosz Golaszewski <[email protected]>
We need to create an irq domain if we want to select SPARSE_IRQ. The cp-intc driver already supports it, but aintc doesn't. Use the helpers provided by the generic irq chip abstraction.
--- arch/arm/mach-davinci/irq.c | 35 +++++++++++++++++++++++++++-------- 1 file changed, 27 insertions(+), 8 deletions(-)
arch/arm/mach-davinci/irq.c +27 -8
@@ -23,6 +23,7 @@#include <linux/interrupt.h> #include <linux/irq.h> #include <linux/io.h> +#include <linux/irqdomain.h> #include <mach/hardware.h> #include <mach/cputype.h>
@@ -40,23 +41,23 @@#define IRQ_INTPRI0_REG_OFFSET 0x0030#define IRQ_INTPRI7_REG_OFFSET 0x004C +static struct irq_domain *davinci_irq_domain; +static inline void davinci_irq_writel (unsigned long value,int offset) {__raw_writel (value, davinci_intc_base + offset); }static __init void -davinci_alloc_gc (void __iomem *base,unsigned int irq_start,unsigned int num) +davinci_irq_setup_gc (void __iomem *base, +unsigned int irq_start,unsigned int num) {struct irq_chip_generic *gc;struct irq_chip_type *ct; - gc =irq_alloc_generic_chip ("AINTC" ,1 , irq_start, base, handle_edge_irq); -if (!gc) { -pr_err ("%s: irq_alloc_generic_chip for IRQ %u failed\n" , - __func__, irq_start); -return ; - } + gc =irq_get_domain_generic_chip (davinci_irq_domain, irq_start); + gc->reg_base = base; + gc->irq_base = irq_start; ct = gc->chip_types; ct->chip.irq_ack = irq_gc_ack_set_bit;
@@ -74,6 +75,7 @@ void __init davinci_irq_init(void) {unsigned i, j;const u8 *davinci_def_priorities = davinci_soc_info.intc_irq_prios; +int rv, irq_base; davinci_intc_type =DAVINCI_INTC_TYPE_AINTC ; davinci_intc_base =ioremap (davinci_soc_info.intc_base,SZ_4K );
@@ -110,8 +112,25 @@ void __init davinci_irq_init(void)davinci_irq_writel (pri, i); } + irq_base =irq_alloc_descs (-1 ,0 , davinci_soc_info.intc_irq_num,0 ); +if (WARN_ON (irq_base <0 )) +return ; + + davinci_irq_domain =irq_domain_add_legacy (NULL , + davinci_soc_info.intc_irq_num, + irq_base,0 , &irq_domain_simple_ops, +NULL ); +if (WARN_ON (!davinci_irq_domain)) +return ; + + rv =irq_alloc_domain_generic_chips (davinci_irq_domain,32 ,1 , +"AINTC" , handle_edge_irq, +IRQ_NOREQUEST |IRQ_NOPROBE ,0 ,0 ); +if (WARN_ON (rv)) +return ; +for (i =0 , j =0 ; i < davinci_soc_info.intc_irq_num; i +=32 , j +=0x04 ) -davinci_alloc_gc (davinci_intc_base + j, i,32 ); +davinci_irq_setup_gc (davinci_intc_base + j, irq_base + i,32 );irq_set_handler (IRQ_TINT1_TINT34 , handle_level_irq); }
Signature · 1 line
2.20.1
PATCH v2 3/33 ARM: davinci: select GENERIC_IRQ_MULTI_HANDLER
In reply to Bartosz GolaszewskiFrom: Bartosz Golaszewski <[email protected]>
In order to support SPARSE_IRQ we first need to make davinci use the generic irq handler for ARM. Translate the legacy assembly to C and put the irq handlers into their respective drivers (aintc and cp-intc).
--- arch/arm/Kconfig | 1 + arch/arm/mach-davinci/cp_intc.c | 28 +++++++++++++ .../mach-davinci/include/mach/entry-macro.S | 39 ------------------- arch/arm/mach-davinci/irq.c | 23 +++++++++++ 4 files changed, 52 insertions(+), 39 deletions(-) delete mode 100644 arch/arm/mach-davinci/include/mach/entry-macro.S
arch/arm/Kconfig +1 -0
@@ -589,6 +589,7 @@ config ARCH_DAVINCI select GENERIC_ALLOCATOR select GENERIC_CLOCKEVENTS select GENERIC_IRQ_CHIP + select GENERIC_IRQ_MULTI_HANDLER select GPIOLIB select HAVE_IDE select PM_GENERIC_DOMAINS if PM
arch/arm/mach-davinci/cp_intc.c +28 -0
@@ -19,9 +19,13 @@#include <linux/of_address.h> #include <linux/of_irq.h> +#include <asm/exception.h> #include <mach/common.h> #include "cp_intc.h" +#define DAVINCI_CP_INTC_PRI_INDX_MASK GENMASK(9, 0) +#define DAVINCI_CP_INTC_GPIR_NONE BIT(31) +static inline unsigned int cp_intc_read (unsigned offset) {return __raw_readl (davinci_intc_base + offset);
@@ -97,6 +101,28 @@ static struct irq_chip cp_intc_irq_chip = {static struct irq_domain *cp_intc_domain; +static asmlinkage void __exception_irq_entry +cp_intc_handle_irq (struct pt_regs *regs) +{ +int gpir, irqnr, none; + +/* +* The interrupt number is in first ten bits. The NONE field set to 1 +* indicates a spurious irq. +*/ + + gpir =cp_intc_read (CP_INTC_PRIO_IDX ); + irqnr = gpir &DAVINCI_CP_INTC_PRI_INDX_MASK ; + none = gpir &DAVINCI_CP_INTC_GPIR_NONE ; + +if (unlikely (none)) { +pr_err_once ("%s: spurious irq!\n" , __func__); +return ; + } + +handle_domain_irq (cp_intc_domain, irqnr, regs); +} +static int cp_intc_host_map (struct irq_domain *h,unsigned int virq,irq_hw_number_t hw) {
@@ -196,6 +222,8 @@ int __init cp_intc_of_init(struct device_node *node, struct device_node *parent)return -EINVAL ; } +set_handle_irq (cp_intc_handle_irq); +/* Enable global interrupt */ cp_intc_write (1 ,CP_INTC_GLOBAL_ENABLE );
arch/arm/mach-davinci/include/mach/entry-macro.S deleted +0 -39
@@ -1,39 +0,0 @@ -/* - * Low-level IRQ helper macros for TI DaVinci-based platforms - * - * Author: Kevin Hilman, MontaVista Software, Inc. <[email protected]> - * - * 2007 (c) MontaVista Software, Inc. This file is licensed under - * the terms of the GNU General Public License version 2. This program - * is licensed "as is" without any warranty of any kind, whether express - * or implied. - */ -#include <mach/irqs.h> - - .macro get_irqnr_preamble, base, tmp - ldr \base, =davinci_intc_base - ldr \base, [\base] - .endm - - .macro get_irqnr_and_base, irqnr, irqstat, base, tmp -#if defined(CONFIG_AINTC) && defined(CONFIG_CP_INTC) - ldr \tmp, =davinci_intc_type - ldr \tmp, [\tmp] - cmp \tmp, #DAVINCI_INTC_TYPE_CP_INTC - beq 1001f -#endif -#if defined(CONFIG_AINTC) - ldr \tmp, [\base, #0x14] - movs \tmp, \tmp, lsr #2 - sub \irqnr, \tmp, #1 - b 1002f -#endif -#if defined(CONFIG_CP_INTC) -1001: ldr \irqnr, [\base, #0x80] /* get irq number */ - mov \tmp, \irqnr, lsr #31 - and \irqnr, \irqnr, #0xff /* irq is in bits 0-9 */ - and \tmp, \tmp, #0x1 - cmp \tmp, #0x1 -#endif -1002: - .endm
arch/arm/mach-davinci/irq.c +23 -0
@@ -29,11 +29,13 @@#include <mach/cputype.h> #include <mach/common.h> #include <asm/mach/irq.h> +#include <asm/exception.h> #define FIQ_REG0_OFFSET 0x0000#define FIQ_REG1_OFFSET 0x0004#define IRQ_REG0_OFFSET 0x0008#define IRQ_REG1_OFFSET 0x000C +#define IRQ_IRQENTRY_OFFSET 0x0014#define IRQ_ENT_REG0_OFFSET 0x0018#define IRQ_ENT_REG1_OFFSET 0x001C#define IRQ_INCTL_REG_OFFSET 0x0020
@@ -48,6 +50,11 @@ static inline void davinci_irq_writel(unsigned long value, int offset)__raw_writel (value, davinci_intc_base + offset); } +static inline unsigned long davinci_irq_readl (int offset) +{ +return __raw_readl (davinci_intc_base + offset); +} +static __init void davinci_irq_setup_gc (void __iomem *base,unsigned int irq_start,unsigned int num)
@@ -70,6 +77,21 @@ davinci_irq_setup_gc(void __iomem *base, IRQ_NOREQUEST | IRQ_NOPROBE, 0); } +static asmlinkage void __exception_irq_entry +davinci_handle_irq (struct pt_regs *regs) +{ +int irqnr =davinci_irq_readl (IRQ_IRQENTRY_OFFSET ); + +/* +* Use the formula for entry vector index generation from section +* 8.3.3 of the manual. +*/ + irqnr >>=2 ; + irqnr -=1 ; + +handle_domain_irq (davinci_irq_domain, irqnr, regs); +} +/* ARM Interrupt Controller Initialization */ void __init davinci_irq_init (void ) {
@@ -133,4 +155,5 @@ void __init davinci_irq_init(void)davinci_irq_setup_gc (davinci_intc_base + j, irq_base + i,32 );irq_set_handler (IRQ_TINT1_TINT34 , handle_level_irq); +set_handle_irq (davinci_handle_irq); }
Signature · 1 line
2.20.1
PATCH v2 4/33 ARM: davinci: remove davinci_intc_type
In reply to Bartosz GolaszewskiFrom: Bartosz Golaszewski <[email protected]>
We now use the generic ARM irq handler on davinci. There are no more users that check davinci_intc_type. Remove the variable and all its references.
--- arch/arm/mach-davinci/common.c | 1 - arch/arm/mach-davinci/cp_intc.c | 1 - arch/arm/mach-davinci/da830.c | 1 - arch/arm/mach-davinci/da850.c | 1 - arch/arm/mach-davinci/dm355.c | 1 - arch/arm/mach-davinci/dm365.c | 1 - arch/arm/mach-davinci/dm644x.c | 1 - arch/arm/mach-davinci/dm646x.c | 1 - arch/arm/mach-davinci/include/mach/common.h | 2 -- arch/arm/mach-davinci/include/mach/irqs.h | 3 --- arch/arm/mach-davinci/irq.c | 1 - 11 files changed, 14 deletions(-)
arch/arm/mach-davinci/common.c +0 -1
@@ -24,7 +24,6 @@ struct davinci_soc_info davinci_soc_info;EXPORT_SYMBOL (davinci_soc_info);void __iomem *davinci_intc_base; -int davinci_intc_type;void davinci_get_mac_addr (struct nvmem_device *nvmem,void *context) {
arch/arm/mach-davinci/cp_intc.c +0 -1
@@ -146,7 +146,6 @@ int __init cp_intc_of_init(struct device_node *node, struct device_node *parent)unsigned num_reg =BITS_TO_LONGS (num_irq);int i, irq_base; - davinci_intc_type =DAVINCI_INTC_TYPE_CP_INTC ;if (node) { davinci_intc_base =of_iomap (node,0 );if (of_property_read_u32 (node,"ti,intc-size" , &num_irq))
arch/arm/mach-davinci/da830.c +0 -1
@@ -807,7 +807,6 @@ static const struct davinci_soc_info davinci_soc_info_da830 = { .pinmux_pins = da830_pins, .pinmux_pins_num = ARRAY_SIZE(da830_pins), .intc_base = DA8XX_CP_INTC_BASE, - .intc_type = DAVINCI_INTC_TYPE_CP_INTC, .intc_irq_prios = da830_default_priorities, .intc_irq_num = DA830_N_CP_INTC_IRQ, .timer_info = &da830_timer_info,
arch/arm/mach-davinci/da850.c +0 -1
@@ -739,7 +739,6 @@ static const struct davinci_soc_info davinci_soc_info_da850 = { .pinmux_pins = da850_pins, .pinmux_pins_num = ARRAY_SIZE(da850_pins), .intc_base = DA8XX_CP_INTC_BASE, - .intc_type = DAVINCI_INTC_TYPE_CP_INTC, .intc_irq_prios = da850_default_priorities, .intc_irq_num = DA850_N_CP_INTC_IRQ, .timer_info = &da850_timer_info,
arch/arm/mach-davinci/dm355.c +0 -1
@@ -705,7 +705,6 @@ static const struct davinci_soc_info davinci_soc_info_dm355 = { .pinmux_pins = dm355_pins, .pinmux_pins_num = ARRAY_SIZE(dm355_pins), .intc_base = DAVINCI_ARM_INTC_BASE, - .intc_type = DAVINCI_INTC_TYPE_AINTC, .intc_irq_prios = dm355_default_priorities, .intc_irq_num = DAVINCI_N_AINTC_IRQ, .timer_info = &dm355_timer_info,
arch/arm/mach-davinci/dm365.c +0 -1
@@ -722,7 +722,6 @@ static const struct davinci_soc_info davinci_soc_info_dm365 = { .pinmux_pins = dm365_pins, .pinmux_pins_num = ARRAY_SIZE(dm365_pins), .intc_base = DAVINCI_ARM_INTC_BASE, - .intc_type = DAVINCI_INTC_TYPE_AINTC, .intc_irq_prios = dm365_default_priorities, .intc_irq_num = DAVINCI_N_AINTC_IRQ, .timer_info = &dm365_timer_info,
arch/arm/mach-davinci/dm644x.c +0 -1
@@ -646,7 +646,6 @@ static const struct davinci_soc_info davinci_soc_info_dm644x = { .pinmux_pins = dm644x_pins, .pinmux_pins_num = ARRAY_SIZE(dm644x_pins), .intc_base = DAVINCI_ARM_INTC_BASE, - .intc_type = DAVINCI_INTC_TYPE_AINTC, .intc_irq_prios = dm644x_default_priorities, .intc_irq_num = DAVINCI_N_AINTC_IRQ, .timer_info = &dm644x_timer_info,
arch/arm/mach-davinci/dm646x.c +0 -1
@@ -586,7 +586,6 @@ static const struct davinci_soc_info davinci_soc_info_dm646x = { .pinmux_pins = dm646x_pins, .pinmux_pins_num = ARRAY_SIZE(dm646x_pins), .intc_base = DAVINCI_ARM_INTC_BASE, - .intc_type = DAVINCI_INTC_TYPE_AINTC, .intc_irq_prios = dm646x_default_priorities, .intc_irq_num = DAVINCI_N_AINTC_IRQ, .timer_info = &dm646x_timer_info,
arch/arm/mach-davinci/include/mach/common.h +0 -2
@@ -21,7 +21,6 @@ void davinci_timer_init(struct clk *clk);extern void davinci_irq_init (void );extern void __iomem *davinci_intc_base; -extern int davinci_intc_type;struct davinci_timer_instance {u32 base;
@@ -58,7 +57,6 @@ struct davinci_soc_info {const struct mux_config *pinmux_pins;unsigned long pinmux_pins_num;u32 intc_base; -int intc_type;u8 *intc_irq_prios;unsigned long intc_irq_num;struct davinci_timer_info *timer_info;
arch/arm/mach-davinci/include/mach/irqs.h +0 -3
@@ -30,9 +30,6 @@/* Base address */ #define DAVINCI_ARM_INTC_BASE 0x01C48000 -#define DAVINCI_INTC_TYPE_AINTC 0 -#define DAVINCI_INTC_TYPE_CP_INTC 1 -/* Interrupt lines */ #define IRQ_VDINT0 0#define IRQ_VDINT1 1
arch/arm/mach-davinci/irq.c +0 -1
@@ -99,7 +99,6 @@ void __init davinci_irq_init(void)const u8 *davinci_def_priorities = davinci_soc_info.intc_irq_prios;int rv, irq_base; - davinci_intc_type =DAVINCI_INTC_TYPE_AINTC ; davinci_intc_base =ioremap (davinci_soc_info.intc_base,SZ_4K );if (WARN_ON (!davinci_intc_base))return ;
Signature · 1 line
2.20.1
PATCH v2 5/33 ARM: davinci: pull davinci_intc_base into the respective intc drivers
In reply to Bartosz GolaszewskiFrom: Bartosz Golaszewski <[email protected]>
davinci_intc_base is defined globally in common.c. Define separate local variables for the aintc and cp-intc drivers and remove the global one.
--- arch/arm/mach-davinci/common.c | 2 -- arch/arm/mach-davinci/cp_intc.c | 2 ++ arch/arm/mach-davinci/include/mach/common.h | 1 - arch/arm/mach-davinci/irq.c | 1 + 4 files changed, 3 insertions(+), 3 deletions(-)
arch/arm/mach-davinci/common.c +0 -2
@@ -23,8 +23,6 @@struct davinci_soc_info davinci_soc_info;EXPORT_SYMBOL (davinci_soc_info); -void __iomem *davinci_intc_base; -void davinci_get_mac_addr (struct nvmem_device *nvmem,void *context) {char *mac_addr = davinci_soc_info.emac_pdata->mac_addr;
arch/arm/mach-davinci/cp_intc.c +2 -0
@@ -26,6 +26,8 @@#define DAVINCI_CP_INTC_PRI_INDX_MASK GENMASK(9, 0)#define DAVINCI_CP_INTC_GPIR_NONE BIT(31) +static void __iomem *davinci_intc_base; +static inline unsigned int cp_intc_read (unsigned offset) {return __raw_readl (davinci_intc_base + offset);
arch/arm/mach-davinci/include/mach/common.h +0 -1
@@ -20,7 +20,6 @@void davinci_timer_init (struct clk *clk);extern void davinci_irq_init (void ); -extern void __iomem *davinci_intc_base;struct davinci_timer_instance {u32 base;
arch/arm/mach-davinci/irq.c +1 -0
@@ -43,6 +43,7 @@#define IRQ_INTPRI0_REG_OFFSET 0x0030#define IRQ_INTPRI7_REG_OFFSET 0x004C +static void __iomem *davinci_intc_base;static struct irq_domain *davinci_irq_domain;static inline void davinci_irq_writel (unsigned long value,int offset)
Signature · 1 line
2.20.1
PATCH v2 6/33 ARM: davinci: wrap HW interrupt numbers with a macro
In reply to Bartosz GolaszewskiFrom: Bartosz Golaszewski <[email protected]>
Once we select SPARSE_IRQ, the interrupt numbers defined in mach/irqs.h will only signify the hardware interrupt offsets, not the interrupt numbers seen by linux. Introduce a wrapper macro that translates the hwirq number to virtual numbers. For now it's just a dummy. Use that macro when specifying the interrupts in resources for platform devices.
--- arch/arm/mach-davinci/asp.h | 8 +- arch/arm/mach-davinci/da830.c | 12 +- arch/arm/mach-davinci/da850.c | 28 ++-- arch/arm/mach-davinci/devices-da8xx.c | 146 ++++++++++---------- arch/arm/mach-davinci/devices.c | 31 +++-- arch/arm/mach-davinci/dm355.c | 56 ++++---- arch/arm/mach-davinci/dm365.c | 80 +++++------ arch/arm/mach-davinci/dm644x.c | 46 +++--- arch/arm/mach-davinci/dm646x.c | 60 ++++---- arch/arm/mach-davinci/include/mach/common.h | 3 + arch/arm/mach-davinci/irq.c | 2 +- arch/arm/mach-davinci/usb-da8xx.c | 6 +- arch/arm/mach-davinci/usb.c | 7 +- 13 files changed, 246 insertions(+), 239 deletions(-)
arch/arm/mach-davinci/asp.h +4 -4
@@ -49,9 +49,9 @@#define DAVINCI_DA830_DMA_MCASP2_AXEVT 5/* Interrupts */ -#define DAVINCI_ASP0_RX_INT IRQ_MBRINT -#define DAVINCI_ASP0_TX_INT IRQ_MBXINT -#define DAVINCI_ASP1_RX_INT IRQ_MBRINT -#define DAVINCI_ASP1_TX_INT IRQ_MBXINT +#define DAVINCI_ASP0_RX_INT DAVINCI_INTC_IRQ(IRQ_MBRINT) +#define DAVINCI_ASP0_TX_INT DAVINCI_INTC_IRQ(IRQ_MBXINT) +#define DAVINCI_ASP1_RX_INT DAVINCI_INTC_IRQ(IRQ_MBRINT) +#define DAVINCI_ASP1_TX_INT DAVINCI_INTC_IRQ(IRQ_MBXINT)#endif /* __ASM_ARCH_DAVINCI_ASP_H */
arch/arm/mach-davinci/da830.c +6 -6
@@ -772,17 +772,17 @@ int __init da830_register_gpio(void)static struct davinci_timer_instance da830_timer_instance[2 ] = { { .base =DA8XX_TIMER64P0_BASE , - .bottom_irq =IRQ_DA8XX_TINT12_0 , - .top_irq =IRQ_DA8XX_TINT34_0 , + .bottom_irq =DAVINCI_INTC_IRQ (IRQ_DA8XX_TINT12_0 ), + .top_irq =DAVINCI_INTC_IRQ (IRQ_DA8XX_TINT34_0 ), .cmp_off =DA830_CMP12_0 , - .cmp_irq =IRQ_DA830_T12CMPINT0_0 , + .cmp_irq =DAVINCI_INTC_IRQ (IRQ_DA830_T12CMPINT0_0 ), }, { .base =DA8XX_TIMER64P1_BASE , - .bottom_irq =IRQ_DA8XX_TINT12_1 , - .top_irq =IRQ_DA8XX_TINT34_1 , + .bottom_irq =DAVINCI_INTC_IRQ (IRQ_DA8XX_TINT12_1 ), + .top_irq =DAVINCI_INTC_IRQ (IRQ_DA8XX_TINT34_1 ), .cmp_off =DA830_CMP12_0 , - .cmp_irq =IRQ_DA830_T12CMPINT0_1 , + .cmp_irq =DAVINCI_INTC_IRQ (IRQ_DA830_T12CMPINT0_1 ), }, };
arch/arm/mach-davinci/da850.c +14 -14
@@ -439,23 +439,23 @@ static struct davinci_id da850_ids[] = {static struct davinci_timer_instance da850_timer_instance[4 ] = { { .base =DA8XX_TIMER64P0_BASE , - .bottom_irq =IRQ_DA8XX_TINT12_0 , - .top_irq =IRQ_DA8XX_TINT34_0 , + .bottom_irq =DAVINCI_INTC_IRQ (IRQ_DA8XX_TINT12_0 ), + .top_irq =DAVINCI_INTC_IRQ (IRQ_DA8XX_TINT34_0 ), }, { .base =DA8XX_TIMER64P1_BASE , - .bottom_irq =IRQ_DA8XX_TINT12_1 , - .top_irq =IRQ_DA8XX_TINT34_1 , + .bottom_irq =DAVINCI_INTC_IRQ (IRQ_DA8XX_TINT12_1 ), + .top_irq =DAVINCI_INTC_IRQ (IRQ_DA8XX_TINT34_1 ), }, { .base =DA850_TIMER64P2_BASE , - .bottom_irq =IRQ_DA850_TINT12_2 , - .top_irq =IRQ_DA850_TINT34_2 , + .bottom_irq =DAVINCI_INTC_IRQ (IRQ_DA850_TINT12_2 ), + .top_irq =DAVINCI_INTC_IRQ (IRQ_DA850_TINT34_2 ), }, { .base =DA850_TIMER64P3_BASE , - .bottom_irq =IRQ_DA850_TINT12_3 , - .top_irq =IRQ_DA850_TINT34_3 , + .bottom_irq =DAVINCI_INTC_IRQ (IRQ_DA850_TINT12_3 ), + .top_irq =DAVINCI_INTC_IRQ (IRQ_DA850_TINT34_3 ), }, };
@@ -658,8 +658,8 @@ static struct platform_device da850_vpif_dev = {static struct resource da850_vpif_display_resource[] = { { - .start =IRQ_DA850_VPIFINT , - .end =IRQ_DA850_VPIFINT , + .start =DAVINCI_INTC_IRQ (IRQ_DA850_VPIFINT ), + .end =DAVINCI_INTC_IRQ (IRQ_DA850_VPIFINT ), .flags =IORESOURCE_IRQ , }, };
@@ -677,13 +677,13 @@ static struct platform_device da850_vpif_display_dev = {static struct resource da850_vpif_capture_resource[] = { { - .start =IRQ_DA850_VPIFINT , - .end =IRQ_DA850_VPIFINT , + .start =DAVINCI_INTC_IRQ (IRQ_DA850_VPIFINT ), + .end =DAVINCI_INTC_IRQ (IRQ_DA850_VPIFINT ), .flags =IORESOURCE_IRQ , }, { - .start =IRQ_DA850_VPIFINT , - .end =IRQ_DA850_VPIFINT , + .start =DAVINCI_INTC_IRQ (IRQ_DA850_VPIFINT ), + .end =DAVINCI_INTC_IRQ (IRQ_DA850_VPIFINT ), .flags =IORESOURCE_IRQ , }, };
arch/arm/mach-davinci/devices-da8xx.c +73 -73
337 lines not on this page · raw message
arch/arm/mach-davinci/devices.c +17 -14
@@ -56,7 +56,7 @@ static struct resource i2c_resources[] = { .flags = IORESOURCE_MEM, }, { - .start = IRQ_I2C, + .start = DAVINCI_INTC_IRQ(IRQ_I2C), .flags = IORESOURCE_IRQ, }, };
@@ -84,8 +84,8 @@ static struct resource ide_resources[] = { .flags = IORESOURCE_MEM, }, { - .start = IRQ_IDE, - .end = IRQ_IDE, + .start = DAVINCI_INTC_IRQ(IRQ_IDE), + .end = DAVINCI_INTC_IRQ(IRQ_IDE), .flags = IORESOURCE_IRQ, }, };
@@ -133,11 +133,11 @@ static struct resource mmcsd0_resources[] = { },/* IRQs: MMC/SD, then SDIO */ { - .start = IRQ_MMCINT, + .start = DAVINCI_INTC_IRQ(IRQ_MMCINT), .flags = IORESOURCE_IRQ, }, {/* different on dm355 */ - .start = IRQ_SDIOINT, + .start = DAVINCI_INTC_IRQ(IRQ_SDIOINT), .flags = IORESOURCE_IRQ, }, };
@@ -163,10 +163,10 @@ static struct resource mmcsd1_resources[] = { },/* IRQs: MMC/SD, then SDIO */ { - .start = IRQ_DM355_MMCINT1, + .start = DAVINCI_INTC_IRQ(IRQ_DM355_MMCINT1), .flags = IORESOURCE_IRQ, }, { - .start = IRQ_DM355_SDIOINT1, + .start = DAVINCI_INTC_IRQ(IRQ_DM355_SDIOINT1), .flags = IORESOURCE_IRQ, }, };
@@ -219,7 +219,8 @@ void __init davinci_setup_mmc(int module, struct davinci_mmc_config *config) mmcsd1_resources[0 ].start =DM365_MMCSD1_BASE ; mmcsd1_resources[0 ].end =DM365_MMCSD1_BASE +SZ_4K -1 ; - mmcsd1_resources[2 ].start =IRQ_DM365_SDIOINT1 ; + mmcsd1_resources[2 ].start =DAVINCI_INTC_IRQ ( +IRQ_DM365_SDIOINT1 ); davinci_mmcsd1_device.name ="da830-mmc" ; }else break ;
@@ -230,7 +231,8 @@ void __init davinci_setup_mmc(int module, struct davinci_mmc_config *config)if (cpu_is_davinci_dm355 ()) { mmcsd0_resources[0 ].start =DM355_MMCSD0_BASE ; mmcsd0_resources[0 ].end =DM355_MMCSD0_BASE +SZ_4K -1 ; - mmcsd0_resources[2 ].start =IRQ_DM355_SDIOINT0 ; + mmcsd0_resources[2 ].start =DAVINCI_INTC_IRQ ( +IRQ_DM355_SDIOINT0 );/* expose all 6 MMC0 signals: CLK, CMD, DATA[0..3] */ davinci_cfg_reg (DM355_MMCSD0 );
@@ -241,7 +243,8 @@ void __init davinci_setup_mmc(int module, struct davinci_mmc_config *config) mmcsd0_resources[0 ].start =DM365_MMCSD0_BASE ; mmcsd0_resources[0 ].end =DM365_MMCSD0_BASE +SZ_4K -1 ; - mmcsd0_resources[2 ].start =IRQ_DM365_SDIOINT0 ; + mmcsd0_resources[2 ].start =DAVINCI_INTC_IRQ ( +IRQ_DM365_SDIOINT0 ); davinci_mmcsd0_device.name ="da830-mmc" ; }else if (cpu_is_davinci_dm644x ()) {/* REVISIT: should this be in board-init code? */
@@ -313,13 +316,13 @@ int davinci_gpio_register(struct resource *res, int size, void *pdata)struct davinci_timer_instance davinci_timer_instance[2 ] = { { .base =DAVINCI_TIMER0_BASE , - .bottom_irq =IRQ_TINT0_TINT12 , - .top_irq =IRQ_TINT0_TINT34 , + .bottom_irq =DAVINCI_INTC_IRQ (IRQ_TINT0_TINT12 ), + .top_irq =DAVINCI_INTC_IRQ (IRQ_TINT0_TINT34 ), }, { .base =DAVINCI_TIMER1_BASE , - .bottom_irq =IRQ_TINT1_TINT12 , - .top_irq =IRQ_TINT1_TINT34 , + .bottom_irq =DAVINCI_INTC_IRQ (IRQ_TINT1_TINT12 ), + .top_irq =DAVINCI_INTC_IRQ (IRQ_TINT1_TINT34 ), }, };
arch/arm/mach-davinci/dm355.c +28 -28
135 lines not on this page · raw message
arch/arm/mach-davinci/dm365.c +40 -40
183 lines not on this page · raw message
arch/arm/mach-davinci/dm644x.c +23 -23
113 lines not on this page · raw message
arch/arm/mach-davinci/dm646x.c +30 -30
149 lines not on this page · raw message
arch/arm/mach-davinci/include/mach/common.h +3 -0
@@ -17,6 +17,9 @@#include <linux/types.h> #include <linux/reboot.h> +#define DAVINCI_INTC_START 0 +#define DAVINCI_INTC_IRQ (_irqnum) (DAVINCI_INTC_START + (_irqnum)) +void davinci_timer_init (struct clk *clk);extern void davinci_irq_init (void );
arch/arm/mach-davinci/irq.c +1 -1
@@ -154,6 +154,6 @@ void __init davinci_irq_init(void)for (i =0 , j =0 ; i < davinci_soc_info.intc_irq_num; i +=32 , j +=0x04 )davinci_irq_setup_gc (davinci_intc_base + j, irq_base + i,32 ); -irq_set_handler (IRQ_TINT1_TINT34 , handle_level_irq); +irq_set_handler (DAVINCI_INTC_IRQ (IRQ_TINT1_TINT34 ), handle_level_irq);set_handle_irq (davinci_handle_irq); }
arch/arm/mach-davinci/usb-da8xx.c +3 -3
@@ -70,7 +70,7 @@ static struct resource da8xx_usb20_resources[] = { .flags = IORESOURCE_MEM, }, { - .start = IRQ_DA8XX_USB_INT, + .start = DAVINCI_INTC_IRQ(IRQ_DA8XX_USB_INT), .flags = IORESOURCE_IRQ, .name = "mc", },
@@ -105,8 +105,8 @@ static struct resource da8xx_usb11_resources[] = { .flags = IORESOURCE_MEM, }, [1] = { - .start = IRQ_DA8XX_IRQN, - .end = IRQ_DA8XX_IRQN, + .start = DAVINCI_INTC_IRQ(IRQ_DA8XX_IRQN), + .end = DAVINCI_INTC_IRQ(IRQ_DA8XX_IRQN), .flags = IORESOURCE_IRQ, }, };
arch/arm/mach-davinci/usb.c +4 -3
@@ -38,7 +38,7 @@ static struct resource usb_resources[] = { .flags = IORESOURCE_MEM, }, { - .start = IRQ_USBINT, + .start = DAVINCI_INTC_IRQ(IRQ_USBINT), .flags = IORESOURCE_IRQ, .name ="mc" },
@@ -70,8 +70,9 @@ void __init davinci_setup_usb(unsigned mA, unsigned potpgt_ms)if (cpu_is_davinci_dm646x ()) {/* Override the defaults as DM6467 uses different IRQs. */ - usb_dev.resource[1 ].start =IRQ_DM646X_USBINT ; - usb_dev.resource[2 ].start =IRQ_DM646X_USBDMAINT ; + usb_dev.resource[1 ].start =DAVINCI_INTC_IRQ (IRQ_DM646X_USBINT ); + usb_dev.resource[2 ].start =DAVINCI_INTC_IRQ ( +IRQ_DM646X_USBDMAINT ); }else /* other devices don't have dedicated CPPI IRQ */ usb_dev.num_resources =2 ;
Signature · 1 line
2.20.1
PATCH v2 7/33 ARM: davinci: select SPARSE_IRQ
In reply to Bartosz GolaszewskiFrom: Bartosz Golaszewski <[email protected]>
Everything is in place now for SPARSE_IRQ. Select it and set DAVINCI_INTC_START to NR_IRQS.
We now need to include mach/irqs.h in a couple places as it is no longer indirectly included after selecting SPARSE_IRQ.
--- arch/arm/Kconfig | 1 + arch/arm/mach-davinci/board-da830-evm.c | 1 + arch/arm/mach-davinci/board-da850-evm.c | 1 + arch/arm/mach-davinci/board-dm644x-evm.c | 1 + arch/arm/mach-davinci/devices-da8xx.c | 1 + arch/arm/mach-davinci/include/mach/common.h | 4 +++- arch/arm/mach-davinci/include/mach/irqs.h | 1 - arch/arm/mach-davinci/irq.c | 1 + 8 files changed, 9 insertions(+), 2 deletions(-)
arch/arm/Kconfig +1 -0
@@ -595,6 +595,7 @@ config ARCH_DAVINCI select PM_GENERIC_DOMAINS if PM select PM_GENERIC_DOMAINS_OF if PM && OF select RESET_CONTROLLER + select SPARSE_IRQ select USE_OF select ZONE_DMA help
arch/arm/mach-davinci/board-da830-evm.c +1 -0
@@ -36,6 +36,7 @@#include <asm/mach/arch.h> #include <mach/common.h> +#include <mach/irqs.h> #include "cp_intc.h" #include <mach/mux.h> #include <mach/da8xx.h>
arch/arm/mach-davinci/board-da850-evm.c +1 -0
@@ -46,6 +46,7 @@#include "cp_intc.h" #include <mach/da8xx.h> #include <mach/mux.h> +#include <mach/irqs.h> #include "sram.h" #include <asm/mach-types.h>
arch/arm/mach-davinci/board-dm644x-evm.c +1 -0
@@ -36,6 +36,7 @@#include <asm/mach/arch.h> #include <mach/common.h> +#include <mach/irqs.h> #include <linux/platform_data/i2c-davinci.h> #include <mach/serial.h> #include <mach/mux.h>
arch/arm/mach-davinci/devices-da8xx.c +1 -0
@@ -25,6 +25,7 @@#include <mach/cputype.h> #include <mach/da8xx.h> #include <mach/time.h> +#include <mach/irqs.h> #include "asp.h" #include "cpuidle.h"
arch/arm/mach-davinci/include/mach/common.h +3 -1
@@ -17,7 +17,9 @@#include <linux/types.h> #include <linux/reboot.h> -#define DAVINCI_INTC_START 0 +#include <asm/irq.h> + +#define DAVINCI_INTC_START NR_IRQS#define DAVINCI_INTC_IRQ (_irqnum) (DAVINCI_INTC_START + (_irqnum))void davinci_timer_init (struct clk *clk);
arch/arm/mach-davinci/include/mach/irqs.h +0 -1
@@ -401,6 +401,5 @@/* da850 currently has the most gpio pins (144) */ #define DAVINCI_N_GPIO 144/* da850 currently has the most irqs so use DA850_N_CP_INTC_IRQ */ -#define NR_IRQS (DA850_N_CP_INTC_IRQ + DAVINCI_N_GPIO)#endif /* __ASM_ARCH_IRQS_H */
arch/arm/mach-davinci/irq.c +1 -0
@@ -28,6 +28,7 @@#include <mach/hardware.h> #include <mach/cputype.h> #include <mach/common.h> +#include <mach/irqs.h> #include <asm/mach/irq.h> #include <asm/exception.h>
Signature · 1 line
2.20.1
PATCH v2 8/33 ARM: davinci: make irqs.h a local header
In reply to Bartosz GolaszewskiFrom: Bartosz Golaszewski <[email protected]>
The existence of irqs.h in mach-davinci/include/mach only makes sense without SPARSE_IRQ as it's then expected to define NR_IRQS and is included from asm/irq.h. As we now support SPARSE_IRQ, this header can be moved to mach-davinci and used as the source of HW interrupt numbers.
While updating the includes in various files - also rearrange the headers by directory (linux/asm/mach).
---
arch/arm/mach-davinci/board-da830-evm.c | 5 +++--
arch/arm/mach-davinci/board-da850-evm.c | 5 +++--
arch/arm/mach-davinci/board-dm644x-evm.c | 7 ++++---
arch/arm/mach-davinci/board-dm646x-evm.c | 3 ++-
arch/arm/mach-davinci/da830.c | 2 +-
arch/arm/mach-davinci/da850.c | 2 +-
arch/arm/mach-davinci/devices-da8xx.c | 2 +-
arch/arm/mach-davinci/devices.c | 9 ++++-----
arch/arm/mach-davinci/dm355.c | 2 +-
arch/arm/mach-davinci/dm365.c | 2 +-
arch/arm/mach-davinci/dm644x.c | 2 +-
arch/arm/mach-davinci/dm646x.c | 2 +-
arch/arm/mach-davinci/irq.c | 3 ++-
arch/arm/mach-davinci/{include/mach => }/irqs.h | 0
arch/arm/mach-davinci/usb-da8xx.c | 3 ++-
arch/arm/mach-davinci/usb.c | 7 ++++---
16 files changed, 31 insertions(+), 25 deletions(-)
rename arch/arm/mach-davinci/{include/mach => }/irqs.h (100%)arch/arm/mach-davinci/board-da830-evm.c +3 -2
@@ -36,11 +36,12 @@#include <asm/mach/arch.h> #include <mach/common.h> -#include <mach/irqs.h> -#include "cp_intc.h" #include <mach/mux.h> #include <mach/da8xx.h> +#include "cp_intc.h" +#include "irqs.h" +#define DA830_EVM_PHY_ID ""/* * USB1 VBUS is controlled by GPIO1[15], over-current is reported on GPIO2[4].
arch/arm/mach-davinci/board-da850-evm.c +3 -2
@@ -43,10 +43,11 @@#include <linux/spi/flash.h> #include <mach/common.h> -#include "cp_intc.h" #include <mach/da8xx.h> #include <mach/mux.h> -#include <mach/irqs.h> + +#include "cp_intc.h" +#include "irqs.h" #include "sram.h" #include <asm/mach-types.h>
arch/arm/mach-davinci/board-dm644x-evm.c +4 -3
@@ -36,10 +36,10 @@#include <asm/mach/arch.h> #include <mach/common.h> -#include <mach/irqs.h> -#include <linux/platform_data/i2c-davinci.h> -#include <mach/serial.h> #include <mach/mux.h> +#include <mach/serial.h> + +#include <linux/platform_data/i2c-davinci.h> #include <linux/platform_data/mtd-davinci.h> #include <linux/platform_data/mmc-davinci.h> #include <linux/platform_data/usb-davinci.h>
@@ -47,6 +47,7 @@#include <linux/platform_data/ti-aemif.h> #include "davinci.h" +#include "irqs.h" #define DM644X_EVM_PHY_ID "davinci_mdio-0:01"#define LXT971_PHY_ID (0x001378e2)
arch/arm/mach-davinci/board-dm646x-evm.c +2 -1
@@ -44,10 +44,11 @@#include <asm/mach/arch.h> #include <mach/common.h> -#include <mach/irqs.h> +#include <mach/serial.h> #include "davinci.h" +#include "irqs.h" #define NAND_BLOCK_SIZE SZ_128K
arch/arm/mach-davinci/da830.c +1 -1
@@ -19,9 +19,9 @@#include <mach/common.h> #include <mach/cputype.h> #include <mach/da8xx.h> -#include <mach/irqs.h> #include <mach/time.h> +#include "irqs.h" #include "mux.h" /* Offsets of the 8 compare registers on the da830 */
arch/arm/mach-davinci/da850.c +1 -1
@@ -32,10 +32,10 @@#include <mach/cpufreq.h> #include <mach/cputype.h> #include <mach/da8xx.h> -#include <mach/irqs.h> #include <mach/pm.h> #include <mach/time.h> +#include "irqs.h" #include "mux.h" #define DA850_PLL1_BASE 0x01e1a000
arch/arm/mach-davinci/devices-da8xx.c +1 -1
@@ -25,10 +25,10 @@#include <mach/cputype.h> #include <mach/da8xx.h> #include <mach/time.h> -#include <mach/irqs.h> #include "asp.h" #include "cpuidle.h" +#include "irqs.h" #include "sram.h" #define DA8XX_TPCC_BASE 0x01c00000
arch/arm/mach-davinci/devices.c +4 -5
@@ -11,21 +11,20 @@#include <linux/init.h> #include <linux/platform_device.h> +#include <linux/platform_data/i2c-davinci.h> +#include <linux/platform_data/mmc-davinci.h> +#include <linux/platform_data/edma.h> #include <linux/dma-mapping.h> #include <linux/io.h> #include <linux/reboot.h> #include <mach/hardware.h> -#include <linux/platform_data/i2c-davinci.h> -#include <mach/irqs.h> #include <mach/cputype.h> #include <mach/mux.h> -#include <linux/platform_data/mmc-davinci.h> #include <mach/time.h> -#include <linux/platform_data/edma.h> -#include "davinci.h" +#include "irqs.h" #define DAVINCI_I2C_BASE 0x01C21000#define DAVINCI_ATA_BASE 0x01C66000
arch/arm/mach-davinci/dm355.c +1 -1
@@ -26,13 +26,13 @@#include <mach/common.h> #include <mach/cputype.h> -#include <mach/irqs.h> #include <mach/mux.h> #include <mach/serial.h> #include <mach/time.h> #include "asp.h" #include "davinci.h" +#include "irqs.h" #include "mux.h" #define DM355_UART2_BASE (IO_PHYS + 0x206000)
arch/arm/mach-davinci/dm365.c +1 -1
@@ -31,13 +31,13 @@#include <mach/common.h> #include <mach/cputype.h> -#include <mach/irqs.h> #include <mach/mux.h> #include <mach/serial.h> #include <mach/time.h> #include "asp.h" #include "davinci.h" +#include "irqs.h" #include "mux.h" #define DM365_REF_FREQ 24000000/* 24 MHz on the DM365 EVM */
arch/arm/mach-davinci/dm644x.c +1 -1
@@ -23,13 +23,13 @@#include <mach/common.h> #include <mach/cputype.h> -#include <mach/irqs.h> #include <mach/mux.h> #include <mach/serial.h> #include <mach/time.h> #include "asp.h" #include "davinci.h" +#include "irqs.h" #include "mux.h" /*
arch/arm/mach-davinci/dm646x.c +1 -1
@@ -24,13 +24,13 @@#include <mach/common.h> #include <mach/cputype.h> -#include <mach/irqs.h> #include <mach/mux.h> #include <mach/serial.h> #include <mach/time.h> #include "asp.h" #include "davinci.h" +#include "irqs.h" #include "mux.h" #define DAVINCI_VPIF_BASE (0x01C12000)
arch/arm/mach-davinci/irq.c +2 -1
@@ -28,10 +28,11 @@#include <mach/hardware.h> #include <mach/cputype.h> #include <mach/common.h> -#include <mach/irqs.h> #include <asm/mach/irq.h> #include <asm/exception.h> +#include "irqs.h" +#define FIQ_REG0_OFFSET 0x0000#define FIQ_REG1_OFFSET 0x0004#define IRQ_REG0_OFFSET 0x0008
arch/arm/mach-davinci/irqs.h renamed from arch/arm/mach-davinci/include/mach/irqs.h +0 -0
arch/arm/mach-davinci/usb-da8xx.c +2 -1
@@ -18,7 +18,8 @@#include <mach/common.h> #include <mach/cputype.h> #include <mach/da8xx.h> -#include <mach/irqs.h> + +#include "irqs.h" #define DA8XX_USB0_BASE 0x01e00000#define DA8XX_USB1_BASE 0x01e25000
arch/arm/mach-davinci/usb.c +4 -3
@@ -5,13 +5,14 @@#include <linux/init.h> #include <linux/platform_device.h> #include <linux/dma-mapping.h> - +#include <linux/platform_data/usb-davinci.h> #include <linux/usb/musb.h> #include <mach/common.h> -#include <mach/irqs.h> #include <mach/cputype.h> -#include <linux/platform_data/usb-davinci.h> + + +#include "irqs.h" #define DAVINCI_USB_OTG_BASE 0x01c64000
Signature · 1 line
2.20.1
PATCH v2 9/33 ARM: davinci: aintc: drop GPL license boilerplate
In reply to Bartosz GolaszewskiFrom: Bartosz Golaszewski <[email protected]>
Replace the GPLv2 or later license boilerplate with an SPDX identifier.
--- arch/arm/mach-davinci/irq.c | 26 ++++++-------------------- 1 file changed, 6 insertions(+), 20 deletions(-)
arch/arm/mach-davinci/irq.c +6 -20
@@ -1,23 +1,9 @@ -/* -* Interrupt handler for DaVinci boards. -* -* Copyright (C) 2006 Texas Instruments. -* -* This program is free software; you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation; either version 2 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program; if not, write to the Free Software -* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -* -*/ +// SPDX-License-Identifier: GPL-2.0-or-later +// +// Copyright (C) 2006, 2019 Texas Instruments. +// +// Interrupt handler for DaVinci boards. +#include <linux/kernel.h> #include <linux/init.h> #include <linux/interrupt.h>
Signature · 1 line
2.20.1
PATCH v2 10/33 ARM: davinci: aintc: wrap davinci_irq_init() with a helper
In reply to Bartosz GolaszewskiFrom: Bartosz Golaszewski <[email protected]>
We're going to extend the davinci_irq_init() function with a config structure so we can drop the intc-related fields from davinci_soc_info.
Once we do it, we won't be able to use this routine directly as the init_irq callback. Wrap the calls in additional helpers that don't take parameters and can be assigned to init_irq.
--- arch/arm/mach-davinci/board-dm355-evm.c | 2 +- arch/arm/mach-davinci/board-dm355-leopard.c | 2 +- arch/arm/mach-davinci/board-dm365-evm.c | 2 +- arch/arm/mach-davinci/board-dm644x-evm.c | 2 +- arch/arm/mach-davinci/board-dm646x-evm.c | 4 ++-- arch/arm/mach-davinci/board-neuros-osd2.c | 2 +- arch/arm/mach-davinci/board-sffsdr.c | 2 +- arch/arm/mach-davinci/davinci.h | 4 ++++ arch/arm/mach-davinci/dm355.c | 5 +++++ arch/arm/mach-davinci/dm365.c | 5 +++++ arch/arm/mach-davinci/dm644x.c | 5 +++++ arch/arm/mach-davinci/dm646x.c | 5 +++++ 12 files changed, 32 insertions(+), 8 deletions(-)
arch/arm/mach-davinci/board-dm355-evm.c +1 -1
@@ -438,7 +438,7 @@ static __init void dm355_evm_init(void)MACHINE_START (DAVINCI_DM355_EVM ,"DaVinci DM355 EVM" ) .atag_offset = 0x100, .map_io = dm355_evm_map_io, - .init_irq = davinci_irq_init, + .init_irq = dm355_init_irq, .init_time = dm355_init_time, .init_machine = dm355_evm_init, .init_late = davinci_init_late,
arch/arm/mach-davinci/board-dm355-leopard.c +1 -1
@@ -273,7 +273,7 @@ static __init void dm355_leopard_init(void)MACHINE_START (DM355_LEOPARD ,"DaVinci DM355 leopard" ) .atag_offset = 0x100, .map_io = dm355_leopard_map_io, - .init_irq = davinci_irq_init, + .init_irq = dm355_init_irq, .init_time = dm355_init_time, .init_machine = dm355_leopard_init, .init_late = davinci_init_late,
arch/arm/mach-davinci/board-dm365-evm.c +1 -1
@@ -834,7 +834,7 @@ static __init void dm365_evm_init(void)MACHINE_START (DAVINCI_DM365_EVM ,"DaVinci DM365 EVM" ) .atag_offset = 0x100, .map_io = dm365_evm_map_io, - .init_irq = davinci_irq_init, + .init_irq = dm365_init_irq, .init_time = dm365_init_time, .init_machine = dm365_evm_init, .init_late = davinci_init_late,
arch/arm/mach-davinci/board-dm644x-evm.c +1 -1
@@ -891,7 +891,7 @@ MACHINE_START(DAVINCI_EVM, "DaVinci DM644x EVM")/* Maintainer: MontaVista Software <[email protected]> */ .atag_offset = 0x100, .map_io = davinci_evm_map_io, - .init_irq = davinci_irq_init, + .init_irq = dm644x_init_irq, .init_time = dm644x_init_time, .init_machine = davinci_evm_init, .init_late = davinci_init_late,
arch/arm/mach-davinci/board-dm646x-evm.c +2 -2
@@ -864,7 +864,7 @@ static __init void evm_init(void)MACHINE_START (DAVINCI_DM6467_EVM ,"DaVinci DM646x EVM" ) .atag_offset = 0x100, .map_io = davinci_map_io, - .init_irq = davinci_irq_init, + .init_irq = dm646x_init_irq, .init_time = dm646x_evm_init_time, .init_machine = evm_init, .init_late = davinci_init_late,
@@ -874,7 +874,7 @@ MACHINE_ENDMACHINE_START (DAVINCI_DM6467TEVM ,"DaVinci DM6467T EVM" ) .atag_offset = 0x100, .map_io = davinci_map_io, - .init_irq = davinci_irq_init, + .init_irq = dm646x_init_irq, .init_time = dm6467t_evm_init_time, .init_machine = evm_init, .init_late = davinci_init_late,
arch/arm/mach-davinci/board-neuros-osd2.c +1 -1
@@ -231,7 +231,7 @@ MACHINE_START(NEUROS_OSD2, "Neuros OSD2")/* Maintainer: Neuros Technologies <[email protected]> */ .atag_offset = 0x100, .map_io = davinci_ntosd2_map_io, - .init_irq = davinci_irq_init, + .init_irq = dm644x_init_irq, .init_time = dm644x_init_time, .init_machine = davinci_ntosd2_init, .init_late = davinci_init_late,
arch/arm/mach-davinci/board-sffsdr.c +1 -1
@@ -153,7 +153,7 @@ static __init void davinci_sffsdr_init(void)MACHINE_START (SFFSDR ,"Lyrtech SFFSDR" ) .atag_offset = 0x100, .map_io = davinci_sffsdr_map_io, - .init_irq = davinci_irq_init, + .init_irq = dm644x_init_irq, .init_time = dm644x_init_time, .init_machine = davinci_sffsdr_init, .init_late = davinci_init_late,
arch/arm/mach-davinci/davinci.h +4 -0
@@ -88,6 +88,7 @@ int davinci_init_wdt(void);/* DM355 function declarations */ void dm355_init (void );void dm355_init_time (void ); +void dm355_init_irq (void );void dm355_register_clocks (void );void dm355_init_spi0 (unsigned chipselect_mask,const struct spi_board_info *info,unsigned len);
@@ -97,6 +98,7 @@ int dm355_gpio_register(void);/* DM365 function declarations */ void dm365_init (void ); +void dm365_init_irq (void );void dm365_init_time (void );void dm365_register_clocks (void );void dm365_init_asp (void );
@@ -110,6 +112,7 @@ int dm365_gpio_register(void);/* DM644x function declarations */ void dm644x_init (void ); +void dm644x_init_irq (void );void dm644x_init_devices (void );void dm644x_init_time (void );void dm644x_register_clocks (void );
@@ -119,6 +122,7 @@ int dm644x_gpio_register(void);/* DM646x function declarations */ void dm646x_init (void ); +void dm646x_init_irq (void );void dm646x_init_time (unsigned long ref_clk_rate,unsigned long aux_clkin_rate);void dm646x_register_clocks (void );void dm646x_init_mcasp0 (struct snd_platform_data *pdata);
arch/arm/mach-davinci/dm355.c +5 -0
@@ -792,6 +792,11 @@ int __init dm355_init_video(struct vpfe_config *vpfe_cfg,return 0 ; } +void __init dm355_init_irq (void ) +{ +davinci_irq_init (); +} +static int __init dm355_init_devices (void ) {struct platform_device *edma_pdev;
arch/arm/mach-davinci/dm365.c +5 -0
@@ -1051,6 +1051,11 @@ int __init dm365_init_video(struct vpfe_config *vpfe_cfg,return 0 ; } +void __init dm365_init_irq (void ) +{ +davinci_irq_init (); +} +static int __init dm365_init_devices (void ) {struct platform_device *edma_pdev;
arch/arm/mach-davinci/dm644x.c +5 -0
@@ -728,6 +728,11 @@ int __init dm644x_init_video(struct vpfe_config *vpfe_cfg,return 0 ; } +void __init dm644x_init_irq (void ) +{ +davinci_irq_init (); +} +void __init dm644x_init_devices (void ) {struct platform_device *edma_pdev;
arch/arm/mach-davinci/dm646x.c +5 -0
@@ -689,6 +689,11 @@ void __init dm646x_register_clocks(void)platform_device_register (&dm646x_pll2_device); } +void __init dm646x_init_irq (void ) +{ +davinci_irq_init (); +} +static int __init dm646x_init_devices (void ) {int ret =0 ;
Signature · 1 line
2.20.1
PATCH v2 11/33 ARM: davinci: aintc: use a common prefix for symbols in the driver
In reply to Bartosz GolaszewskiFrom: Bartosz Golaszewski <[email protected]>
In preparation for moving the driver to drivers/irqchip do some
cleanup: use a common prefix for all symbols.
--- arch/arm/mach-davinci/dm355.c | 2 +- arch/arm/mach-davinci/dm365.c | 2 +- arch/arm/mach-davinci/dm644x.c | 2 +- arch/arm/mach-davinci/dm646x.c | 2 +- arch/arm/mach-davinci/include/mach/common.h | 2 +- arch/arm/mach-davinci/irq.c | 103 ++++++++++---------- 6 files changed, 58 insertions(+), 55 deletions(-)
arch/arm/mach-davinci/dm355.c +1 -1
@@ -794,7 +794,7 @@ int __init dm355_init_video(struct vpfe_config *vpfe_cfg,void __init dm355_init_irq (void ) { -davinci_irq_init (); +davinci_aintc_init (); }static int __init dm355_init_devices (void )
arch/arm/mach-davinci/dm365.c +1 -1
@@ -1053,7 +1053,7 @@ int __init dm365_init_video(struct vpfe_config *vpfe_cfg,void __init dm365_init_irq (void ) { -davinci_irq_init (); +davinci_aintc_init (); }static int __init dm365_init_devices (void )
arch/arm/mach-davinci/dm644x.c +1 -1
@@ -730,7 +730,7 @@ int __init dm644x_init_video(struct vpfe_config *vpfe_cfg,void __init dm644x_init_irq (void ) { -davinci_irq_init (); +davinci_aintc_init (); }void __init dm644x_init_devices (void )
arch/arm/mach-davinci/dm646x.c +1 -1
@@ -691,7 +691,7 @@ void __init dm646x_register_clocks(void)void __init dm646x_init_irq (void ) { -davinci_irq_init (); +davinci_aintc_init (); }static int __init dm646x_init_devices (void )
arch/arm/mach-davinci/include/mach/common.h +1 -1
@@ -24,7 +24,7 @@void davinci_timer_init (struct clk *clk); -extern void davinci_irq_init (void ); +extern void davinci_aintc_init (void );struct davinci_timer_instance {u32 base;
arch/arm/mach-davinci/irq.c +53 -50
178 lines not on this page · raw message
Signature · 1 line
2.20.1
PATCH v2 12/33 ARM: davinci: aintc: drop the 00 prefix from register offsets
In reply to Bartosz GolaszewskiFrom: Bartosz Golaszewski <[email protected]>
Since no offset goes past 0xff - let's drop the 00 prefix for better readability. While we're at it: convert all hex numbers to lower-case.
--- arch/arm/mach-davinci/irq.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-)
arch/arm/mach-davinci/irq.c +11 -11
@@ -19,17 +19,17 @@#include "irqs.h" -#define DAVINCI_AINTC_FIQ_REG0 0x0000 -#define DAVINCI_AINTC_FIQ_REG1 0x0004 -#define DAVINCI_AINTC_IRQ_REG0 0x0008 -#define DAVINCI_AINTC_IRQ_REG1 0x000C -#define DAVINCI_AINTC_IRQ_IRQENTRY 0x0014 -#define DAVINCI_AINTC_IRQ_ENT_REG0 0x0018 -#define DAVINCI_AINTC_IRQ_ENT_REG1 0x001C -#define DAVINCI_AINTC_IRQ_INCTL_REG 0x0020 -#define DAVINCI_AINTC_IRQ_EABASE_REG 0x0024 -#define DAVINCI_AINTC_IRQ_INTPRI0_REG 0x0030 -#define DAVINCI_AINTC_IRQ_INTPRI7_REG 0x004C +#define DAVINCI_AINTC_FIQ_REG0 0x00 +#define DAVINCI_AINTC_FIQ_REG1 0x04 +#define DAVINCI_AINTC_IRQ_REG0 0x08 +#define DAVINCI_AINTC_IRQ_REG1 0x0c +#define DAVINCI_AINTC_IRQ_IRQENTRY 0x14 +#define DAVINCI_AINTC_IRQ_ENT_REG0 0x18 +#define DAVINCI_AINTC_IRQ_ENT_REG1 0x1c +#define DAVINCI_AINTC_IRQ_INCTL_REG 0x20 +#define DAVINCI_AINTC_IRQ_EABASE_REG 0x24 +#define DAVINCI_AINTC_IRQ_INTPRI0_REG 0x30 +#define DAVINCI_AINTC_IRQ_INTPRI7_REG 0x4cstatic void __iomem *davinci_aintc_base;static struct irq_domain *davinci_aintc_irq_domain;
Signature · 1 line
2.20.1
PATCH v2 13/33 ARM: davinci: aintc: use readl/writel_relaxed()
In reply to Bartosz GolaszewskiFrom: Bartosz Golaszewski <[email protected]>
Raplace all calls to __raw_readl() & __raw_writel() with readl_relaxed() and writel_relaxed() respectively. It's safe to do as there's no endianness conversion being done in the code.
--- arch/arm/mach-davinci/irq.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
arch/arm/mach-davinci/irq.c +2 -2
@@ -36,12 +36,12 @@ static struct irq_domain *davinci_aintc_irq_domain;static inline void davinci_aintc_writel (unsigned long value,int offset) { -__raw_writel (value, davinci_aintc_base + offset); +writel_relaxed (value, davinci_aintc_base + offset); }static inline unsigned long davinci_aintc_readl (int offset) { -return __raw_readl (davinci_aintc_base + offset); +return readl_relaxed (davinci_aintc_base + offset); } static __init void
Signature · 1 line
2.20.1
PATCH v2 14/33 irqchip: davinci-aintc: add a new config structure
In reply to Bartosz GolaszewskiFrom: Bartosz Golaszewski <[email protected]>
Add a config structure that will be used by aintc-based platforms. It contains the register range resource, number of interrupts and a list of priorities.
--- include/linux/irqchip/irq-davinci-aintc.h | 25 +++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 include/linux/irqchip/irq-davinci-aintc.h
include/linux/irqchip/irq-davinci-aintc.h new file +25 -0
@@ -0,0 +1,25 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* +* Copyright (C) 2019 Texas Instruments +*/ + +#ifndef _LINUX_IRQ_DAVINCI_AINTC_ +#define _LINUX_IRQ_DAVINCI_AINTC_ + +#include <linux/ioport.h> + +/** +* struct davinci_aintc_config - configuration data for davinci-aintc driver. +* +* @reg: register range to map +* @num_irqs: number of HW interrupts supported by the controller +* @prios: an array of size num_irqs containing priority settings for +* each interrupt +*/ +struct davinci_aintc_config { +struct resource reg; +unsigned int num_irqs; +u8 *prios; +}; + +#endif /* _LINUX_IRQ_DAVINCI_AINTC_ */
Signature · 1 line
2.20.1
PATCH v2 15/33 ARM: davinci: aintc: use the new irqchip config structure in dm* SoCs
In reply to Bartosz GolaszewskiFrom: Bartosz Golaszewski <[email protected]>
Add the new-style config structures for dm* SoCs. They will be used once we make the aintc driver stop using davinci_soc_info.
--- arch/arm/mach-davinci/dm355.c | 11 +++++++++++ arch/arm/mach-davinci/dm365.c | 11 +++++++++++ arch/arm/mach-davinci/dm644x.c | 11 +++++++++++ arch/arm/mach-davinci/dm646x.c | 11 +++++++++++ 4 files changed, 44 insertions(+)
arch/arm/mach-davinci/dm355.c +11 -0
@@ -15,6 +15,7 @@#include <linux/dma-mapping.h> #include <linux/dmaengine.h> #include <linux/init.h> +#include <linux/irqchip/irq-davinci-aintc.h> #include <linux/platform_data/edma.h> #include <linux/platform_data/gpio-davinci.h> #include <linux/platform_data/spi-davinci.h>
@@ -792,6 +793,16 @@ int __init dm355_init_video(struct vpfe_config *vpfe_cfg,return 0 ; } +static const struct davinci_aintc_config dm355_aintc_config = { + .reg = { + .start =DAVINCI_ARM_INTC_BASE , + .end =DAVINCI_ARM_INTC_BASE +SZ_4K -1 , + .flags =IORESOURCE_MEM , + }, + .num_irqs =64 , + .prios = dm355_default_priorities, +}; +void __init dm355_init_irq (void ) {davinci_aintc_init ();
arch/arm/mach-davinci/dm365.c +11 -0
@@ -19,6 +19,7 @@#include <linux/dma-mapping.h> #include <linux/dmaengine.h> #include <linux/init.h> +#include <linux/irqchip/irq-davinci-aintc.h> #include <linux/platform_data/edma.h> #include <linux/platform_data/gpio-davinci.h> #include <linux/platform_data/keyscan-davinci.h>
@@ -1051,6 +1052,16 @@ int __init dm365_init_video(struct vpfe_config *vpfe_cfg,return 0 ; } +static const struct davinci_aintc_config dm365_aintc_config = { + .reg = { + .start =DAVINCI_ARM_INTC_BASE , + .end =DAVINCI_ARM_INTC_BASE +SZ_4K -1 , + .flags =IORESOURCE_MEM , + }, + .num_irqs =64 , + .prios = dm365_default_priorities, +}; +void __init dm365_init_irq (void ) {davinci_aintc_init ();
arch/arm/mach-davinci/dm644x.c +11 -0
@@ -14,6 +14,7 @@#include <linux/clkdev.h> #include <linux/dmaengine.h> #include <linux/init.h> +#include <linux/irqchip/irq-davinci-aintc.h> #include <linux/platform_data/edma.h> #include <linux/platform_data/gpio-davinci.h> #include <linux/platform_device.h>
@@ -728,6 +729,16 @@ int __init dm644x_init_video(struct vpfe_config *vpfe_cfg,return 0 ; } +static const struct davinci_aintc_config dm644x_aintc_config = { + .reg = { + .start =DAVINCI_ARM_INTC_BASE , + .end =DAVINCI_ARM_INTC_BASE +SZ_4K -1 , + .flags =IORESOURCE_MEM , + }, + .num_irqs =64 , + .prios = dm644x_default_priorities, +}; +void __init dm644x_init_irq (void ) {davinci_aintc_init ();
arch/arm/mach-davinci/dm646x.c +11 -0
@@ -15,6 +15,7 @@#include <linux/dma-mapping.h> #include <linux/dmaengine.h> #include <linux/init.h> +#include <linux/irqchip/irq-davinci-aintc.h> #include <linux/platform_data/edma.h> #include <linux/platform_data/gpio-davinci.h> #include <linux/platform_device.h>
@@ -689,6 +690,16 @@ void __init dm646x_register_clocks(void)platform_device_register (&dm646x_pll2_device); } +static const struct davinci_aintc_config dm646x_aintc_config = { + .reg = { + .start =DAVINCI_ARM_INTC_BASE , + .end =DAVINCI_ARM_INTC_BASE +SZ_4K -1 , + .flags =IORESOURCE_MEM , + }, + .num_irqs =64 , + .prios = dm646x_default_priorities, +}; +void __init dm646x_init_irq (void ) {davinci_aintc_init ();
Signature · 1 line
2.20.1
PATCH v2 16/33 ARM: davinci: aintc: use the new config structure
In reply to Bartosz GolaszewskiFrom: Bartosz Golaszewski <[email protected]>
Modify the aintc driver to take all its configuration from the new config structure. Stop referencing davinci_soc_info in any way. Move the declaration for davinci_aintc_init() to irq-davinci-aintc.h and make it take the new config structure as parameter. Convert all users to the new version.
--- arch/arm/mach-davinci/dm355.c | 2 +- arch/arm/mach-davinci/dm365.c | 2 +- arch/arm/mach-davinci/dm644x.c | 2 +- arch/arm/mach-davinci/dm646x.c | 2 +- arch/arm/mach-davinci/include/mach/common.h | 2 -- arch/arm/mach-davinci/irq.c | 39 +++++++++++---------- include/linux/irqchip/irq-davinci-aintc.h | 2 ++ 7 files changed, 26 insertions(+), 25 deletions(-)
arch/arm/mach-davinci/dm355.c +1 -1
@@ -805,7 +805,7 @@ static const struct davinci_aintc_config dm355_aintc_config = {void __init dm355_init_irq (void ) { -davinci_aintc_init (); +davinci_aintc_init (&dm355_aintc_config); }static int __init dm355_init_devices (void )
arch/arm/mach-davinci/dm365.c +1 -1
@@ -1064,7 +1064,7 @@ static const struct davinci_aintc_config dm365_aintc_config = {void __init dm365_init_irq (void ) { -davinci_aintc_init (); +davinci_aintc_init (&dm365_aintc_config); }static int __init dm365_init_devices (void )
arch/arm/mach-davinci/dm644x.c +1 -1
@@ -741,7 +741,7 @@ static const struct davinci_aintc_config dm644x_aintc_config = {void __init dm644x_init_irq (void ) { -davinci_aintc_init (); +davinci_aintc_init (&dm644x_aintc_config); }void __init dm644x_init_devices (void )
arch/arm/mach-davinci/dm646x.c +1 -1
@@ -702,7 +702,7 @@ static const struct davinci_aintc_config dm646x_aintc_config = {void __init dm646x_init_irq (void ) { -davinci_aintc_init (); +davinci_aintc_init (&dm646x_aintc_config); }static int __init dm646x_init_devices (void )
arch/arm/mach-davinci/include/mach/common.h +0 -2
@@ -24,8 +24,6 @@void davinci_timer_init (struct clk *clk); -extern void davinci_aintc_init (void ); -struct davinci_timer_instance {u32 base;u32 bottom_irq;
arch/arm/mach-davinci/irq.c +20 -19
@@ -8,6 +8,7 @@#include <linux/init.h> #include <linux/interrupt.h> #include <linux/irq.h> +#include <linux/irqchip/irq-davinci-aintc.h> #include <linux/io.h> #include <linux/irqdomain.h>
@@ -82,13 +83,14 @@ davinci_aintc_handle_irq(struct pt_regs *regs) }/* ARM Interrupt Controller Initialization */ -void __init davinci_aintc_init (void ) +void __init davinci_aintc_init (const struct davinci_aintc_config *config) { -unsigned i, j; -const u8 *davinci_def_priorities = davinci_soc_info.intc_irq_prios; +unsigned int irq_off, reg_off, prio, shift;int rv, irq_base; +const u8 *prios; - davinci_aintc_base =ioremap (davinci_soc_info.intc_base,SZ_4K ); + davinci_aintc_base =ioremap (config->reg.start, +resource_size (&config->reg));if (WARN_ON (!davinci_aintc_base))return ;
@@ -114,23 +116,21 @@ void __init davinci_aintc_init(void)davinci_aintc_writel (~0x0 ,DAVINCI_AINTC_IRQ_REG0 );davinci_aintc_writel (~0x0 ,DAVINCI_AINTC_IRQ_REG1 ); -for (i =DAVINCI_AINTC_IRQ_INTPRI0_REG ; - i <=DAVINCI_AINTC_IRQ_INTPRI7_REG ; i +=4 ) { -u32 pri; - -for (j =0 , pri =0 ; j <32 ; j +=4 , davinci_def_priorities++) - pri |= (*davinci_def_priorities &0x07 ) << j; -davinci_aintc_writel (pri, i); + prios = config->prios; +for (reg_off =DAVINCI_AINTC_IRQ_INTPRI0_REG ; + reg_off <=DAVINCI_AINTC_IRQ_INTPRI7_REG ; reg_off +=4 ) { +for (shift =0 , prio =0 ; shift <32 ; shift +=4 , prios++) + prio |= (*prios &0x07 ) << shift; +davinci_aintc_writel (prio, reg_off); } - irq_base =irq_alloc_descs (-1 ,0 , davinci_soc_info.intc_irq_num,0 ); + irq_base =irq_alloc_descs (-1 ,0 , config->num_irqs,0 );if (WARN_ON (irq_base <0 ))return ; davinci_aintc_irq_domain =irq_domain_add_legacy (NULL , - davinci_soc_info.intc_irq_num, - irq_base,0 , &irq_domain_simple_ops, -NULL ); + config->num_irqs, irq_base,0 , + &irq_domain_simple_ops,NULL );if (WARN_ON (!davinci_aintc_irq_domain))return ;
@@ -140,10 +140,11 @@ void __init davinci_aintc_init(void)if (WARN_ON (rv))return ; -for (i =0 , j =0 ; i < davinci_soc_info.intc_irq_num; - i +=32 , j +=0x04 ) -davinci_aintc_setup_gc (davinci_aintc_base + j, - irq_base + i,32 ); +for (irq_off =0 , reg_off =0 ; + irq_off < config->num_irqs; + irq_off +=32 , reg_off +=0x04 ) +davinci_aintc_setup_gc (davinci_aintc_base + reg_off, + irq_base + irq_off,32 );irq_set_handler (DAVINCI_INTC_IRQ (IRQ_TINT1_TINT34 ), handle_level_irq);set_handle_irq (davinci_aintc_handle_irq);
include/linux/irqchip/irq-davinci-aintc.h +2 -0
@@ -22,4 +22,6 @@ struct davinci_aintc_config { u8 *prios; }; +void davinci_aintc_init (const struct davinci_aintc_config *config); +#endif /* _LINUX_IRQ_DAVINCI_AINTC_ */
Signature · 1 line
2.20.1
PATCH v2 17/33 ARM: davinci: aintc: move timer-specific irq_set_handler() out of irq.c
In reply to Bartosz GolaszewskiFrom: Bartosz Golaszewski <[email protected]>
I've been unable to figure out exactly why, but it seems that the IRQ_TINT1_TINT34 interrupt for timer 1 needs to be handled as a level irq, not edge like all others.
Let's move the handler setup out of the aintc driver where it's lived since the beginning and into the dm* SoC-specific files where it belongs.
--- arch/arm/mach-davinci/dm355.c | 8 ++++++++ arch/arm/mach-davinci/dm365.c | 8 ++++++++ arch/arm/mach-davinci/dm644x.c | 8 ++++++++ arch/arm/mach-davinci/dm646x.c | 8 ++++++++ arch/arm/mach-davinci/irq.c | 3 --- 5 files changed, 32 insertions(+), 3 deletions(-)
arch/arm/mach-davinci/dm355.c +8 -0
@@ -15,6 +15,7 @@#include <linux/dma-mapping.h> #include <linux/dmaengine.h> #include <linux/init.h> +#include <linux/irq.h> #include <linux/irqchip/irq-davinci-aintc.h> #include <linux/platform_data/edma.h> #include <linux/platform_data/gpio-davinci.h>
@@ -744,6 +745,13 @@ void __init dm355_init_time(void) psc =ioremap (DAVINCI_PWR_SLEEP_CNTRL_BASE ,SZ_4K );dm355_psc_init (NULL , psc); +/* +* Nobody knows why anymore, but this interrupt has been handled as +* a level irq from the very beginning of davinci support in mainline +* linux. +*/ +irq_set_handler (DAVINCI_INTC_IRQ (IRQ_TINT1_TINT34 ), handle_level_irq); + clk =clk_get (NULL ,"timer0" );davinci_timer_init (clk);
arch/arm/mach-davinci/dm365.c +8 -0
@@ -19,6 +19,7 @@#include <linux/dma-mapping.h> #include <linux/dmaengine.h> #include <linux/init.h> +#include <linux/irq.h> #include <linux/irqchip/irq-davinci-aintc.h> #include <linux/platform_data/edma.h> #include <linux/platform_data/gpio-davinci.h>
@@ -785,6 +786,13 @@ void __init dm365_init_time(void) psc =ioremap (DAVINCI_PWR_SLEEP_CNTRL_BASE ,SZ_4K );dm365_psc_init (NULL , psc); +/* +* Nobody knows why anymore, but this interrupt has been handled as +* a level irq from the very beginning of davinci support in mainline +* linux. +*/ +irq_set_handler (DAVINCI_INTC_IRQ (IRQ_TINT1_TINT34 ), handle_level_irq); + clk =clk_get (NULL ,"timer0" );davinci_timer_init (clk);
arch/arm/mach-davinci/dm644x.c +8 -0
@@ -14,6 +14,7 @@#include <linux/clkdev.h> #include <linux/dmaengine.h> #include <linux/init.h> +#include <linux/irq.h> #include <linux/irqchip/irq-davinci-aintc.h> #include <linux/platform_data/edma.h> #include <linux/platform_data/gpio-davinci.h>
@@ -680,6 +681,13 @@ void __init dm644x_init_time(void) psc =ioremap (DAVINCI_PWR_SLEEP_CNTRL_BASE ,SZ_4K );dm644x_psc_init (NULL , psc); +/* +* Nobody knows why anymore, but this interrupt has been handled as +* a level irq from the very beginning of davinci support in mainline +* linux. +*/ +irq_set_handler (DAVINCI_INTC_IRQ (IRQ_TINT1_TINT34 ), handle_level_irq); + clk =clk_get (NULL ,"timer0" );davinci_timer_init (clk);
arch/arm/mach-davinci/dm646x.c +8 -0
@@ -15,6 +15,7 @@#include <linux/dma-mapping.h> #include <linux/dmaengine.h> #include <linux/init.h> +#include <linux/irq.h> #include <linux/irqchip/irq-davinci-aintc.h> #include <linux/platform_data/edma.h> #include <linux/platform_data/gpio-davinci.h>
@@ -664,6 +665,13 @@ void __init dm646x_init_time(unsigned long ref_clk_rate, psc =ioremap (DAVINCI_PWR_SLEEP_CNTRL_BASE ,SZ_4K );dm646x_psc_init (NULL , psc); +/* +* Nobody knows why anymore, but this interrupt has been handled as +* a level irq from the very beginning of davinci support in mainline +* linux. +*/ +irq_set_handler (DAVINCI_INTC_IRQ (IRQ_TINT1_TINT34 ), handle_level_irq); + clk =clk_get (NULL ,"timer0" );davinci_timer_init (clk);
arch/arm/mach-davinci/irq.c +0 -3
@@ -18,8 +18,6 @@#include <asm/mach/irq.h> #include <asm/exception.h> -#include "irqs.h" -#define DAVINCI_AINTC_FIQ_REG0 0x00#define DAVINCI_AINTC_FIQ_REG1 0x04#define DAVINCI_AINTC_IRQ_REG0 0x08
@@ -146,6 +144,5 @@ void __init davinci_aintc_init(const struct davinci_aintc_config *config)davinci_aintc_setup_gc (davinci_aintc_base + reg_off, irq_base + irq_off,32 ); -irq_set_handler (DAVINCI_INTC_IRQ (IRQ_TINT1_TINT34 ), handle_level_irq);set_handle_irq (davinci_aintc_handle_irq); }
Signature · 1 line
2.20.1
PATCH v2 18/33 ARM: davinci: aintc: remove unnecessary includes
In reply to Bartosz GolaszewskiFrom: Bartosz Golaszewski <[email protected]>
These includes are no longer required. Remove them.
--- arch/arm/mach-davinci/irq.c | 4 ---- 1 file changed, 4 deletions(-)
arch/arm/mach-davinci/irq.c +0 -4
@@ -12,10 +12,6 @@#include <linux/io.h> #include <linux/irqdomain.h> -#include <mach/hardware.h> -#include <mach/cputype.h> -#include <mach/common.h> -#include <asm/mach/irq.h> #include <asm/exception.h> #define DAVINCI_AINTC_FIQ_REG0 0x00
Signature · 1 line
2.20.1
PATCH v2 19/33 irqchip: davinci-aintc: move the driver to drivers/irqchip
In reply to Bartosz GolaszewskiFrom: Bartosz Golaszewski <[email protected]>
The aintc driver has now been cleaned up. Move it to drivers/irqchip where it belongs. There's no device-tree support for any dm* board so there's no IRQCHIP_OF_DECLARE() - there's only the exported init function called from machine code.
--- arch/arm/mach-davinci/Kconfig | 11 ++++------- arch/arm/mach-davinci/Makefile | 1 - drivers/irqchip/Kconfig | 5 +++++ drivers/irqchip/Makefile | 1 + .../irq.c => drivers/irqchip/irq-davinci-aintc.c | 0 5 files changed, 10 insertions(+), 8 deletions(-) rename arch/arm/mach-davinci/irq.c => drivers/irqchip/irq-davinci-aintc.c (100%)
arch/arm/mach-davinci/Kconfig +4 -7
@@ -1,9 +1,6 @@ # SPDX-License-Identifier: GPL-2.0 if ARCH_DAVINCI -config AINTC - bool - config CP_INTC bool select IRQ_DOMAIN
@@ -17,17 +14,17 @@ comment "DaVinci Core Type" config ARCH_DAVINCI_DM644x bool "DaVinci 644x based system" - select AINTC + select DAVINCI_AINTC select ARCH_DAVINCI_DMx config ARCH_DAVINCI_DM355 bool "DaVinci 355 based system" - select AINTC + select DAVINCI_AINTC select ARCH_DAVINCI_DMx config ARCH_DAVINCI_DM646x bool "DaVinci 646x based system" - select AINTC + select DAVINCI_AINTC select ARCH_DAVINCI_DMx config ARCH_DAVINCI_DA830
@@ -49,7 +46,7 @@ config ARCH_DAVINCI_DA8XX config ARCH_DAVINCI_DM365 bool "DaVinci 365 based system" - select AINTC + select DAVINCI_AINTC select ARCH_DAVINCI_DMx comment "DaVinci Board Type"
arch/arm/mach-davinci/Makefile +0 -1
@@ -18,7 +18,6 @@ obj-$(CONFIG_ARCH_DAVINCI_DM365) += dm365.o devices.o obj-$(CONFIG_ARCH_DAVINCI_DA830) += da830.o devices-da8xx.o usb-da8xx.o obj-$(CONFIG_ARCH_DAVINCI_DA850) += da850.o devices-da8xx.o usb-da8xx.o -obj-$(CONFIG_AINTC) += irq.o obj-$(CONFIG_CP_INTC) += cp_intc.o # Board specific
drivers/irqchip/Kconfig +5 -0
@@ -129,6 +129,11 @@ config BRCMSTB_L2_IRQ select GENERIC_IRQ_CHIP select IRQ_DOMAIN +config DAVINCI_AINTC + bool + select GENERIC_IRQ_CHIP + select IRQ_DOMAIN + config DW_APB_ICTL bool select GENERIC_IRQ_CHIP
drivers/irqchip/Makefile +1 -0
@@ -6,6 +6,7 @@ obj-$(CONFIG_ATH79) += irq-ath79-cpu.o obj-$(CONFIG_ATH79) += irq-ath79-misc.o obj-$(CONFIG_ARCH_BCM2835) += irq-bcm2835.o obj-$(CONFIG_ARCH_BCM2835) += irq-bcm2836.o +obj-$(CONFIG_DAVINCI_AINTC) += irq-davinci-aintc.o obj-$(CONFIG_ARCH_EXYNOS) += exynos-combiner.o obj-$(CONFIG_FARADAY_FTINTC010) += irq-ftintc010.o obj-$(CONFIG_ARCH_HIP04) += irq-hip04.o
drivers/irqchip/irq-davinci-aintc.c renamed from arch/arm/mach-davinci/irq.c +0 -0
Signature · 1 line
2.20.1
PATCH v2 20/33 ARM: davinci: cp-intc: remove cp_intc.h
In reply to Bartosz GolaszewskiFrom: Bartosz Golaszewski <[email protected]>
There's no need to have a local header for cp-intc. Move the only declaration for a public function to common.h. Move all register offsets into the driver source file and drop all unused defines. Make cp_intc_of_init() static.
--- arch/arm/mach-davinci/board-da830-evm.c | 1 - arch/arm/mach-davinci/board-da850-evm.c | 1 - arch/arm/mach-davinci/board-mityomapl138.c | 1 - arch/arm/mach-davinci/board-omapl138-hawk.c | 1 - arch/arm/mach-davinci/cp_intc.c | 20 +++++++- arch/arm/mach-davinci/cp_intc.h | 57 --------------------- arch/arm/mach-davinci/include/mach/common.h | 1 + 7 files changed, 19 insertions(+), 63 deletions(-) delete mode 100644 arch/arm/mach-davinci/cp_intc.h
arch/arm/mach-davinci/board-da830-evm.c +0 -1
@@ -39,7 +39,6 @@#include <mach/mux.h> #include <mach/da8xx.h> -#include "cp_intc.h" #include "irqs.h" #define DA830_EVM_PHY_ID ""
arch/arm/mach-davinci/board-da850-evm.c +0 -1
@@ -46,7 +46,6 @@#include <mach/da8xx.h> #include <mach/mux.h> -#include "cp_intc.h" #include "irqs.h" #include "sram.h"
arch/arm/mach-davinci/board-mityomapl138.c +0 -1
@@ -27,7 +27,6 @@#include <asm/mach-types.h> #include <asm/mach/arch.h> #include <mach/common.h> -#include "cp_intc.h" #include <mach/da8xx.h> #include <linux/platform_data/mtd-davinci.h> #include <linux/platform_data/mtd-davinci-aemif.h>
arch/arm/mach-davinci/board-omapl138-hawk.c +0 -1
@@ -27,7 +27,6 @@#include <asm/mach/arch.h> #include <mach/common.h> -#include "cp_intc.h" #include <mach/da8xx.h> #include <mach/mux.h>
arch/arm/mach-davinci/cp_intc.c +18 -2
@@ -21,7 +21,22 @@#include <asm/exception.h> #include <mach/common.h> -#include "cp_intc.h" + +#define CP_INTC_CTRL 0x04 +#define CP_INTC_HOST_CTRL 0x0C +#define CP_INTC_GLOBAL_ENABLE 0x10 +#define CP_INTC_SYS_STAT_IDX_CLR 0x24 +#define CP_INTC_SYS_ENABLE_IDX_SET 0x28 +#define CP_INTC_SYS_ENABLE_IDX_CLR 0x2C +#define CP_INTC_HOST_ENABLE_IDX_SET 0x34 +#define CP_INTC_HOST_ENABLE_IDX_CLR 0x38 +#define CP_INTC_PRIO_IDX 0x80 +#define CP_INTC_SYS_STAT_CLR (n) (0x0280 + (n << 2)) +#define CP_INTC_SYS_ENABLE_CLR (n) (0x0380 + (n << 2)) +#define CP_INTC_CHAN_MAP (n) (0x0400 + (n << 2)) +#define CP_INTC_SYS_POLARITY (n) (0x0D00 + (n << 2)) +#define CP_INTC_SYS_TYPE (n) (0x0D80 + (n << 2)) +#define CP_INTC_HOST_ENABLE (n) (0x1500 + (n << 2))#define DAVINCI_CP_INTC_PRI_INDX_MASK GENMASK(9, 0)#define DAVINCI_CP_INTC_GPIR_NONE BIT(31)
@@ -141,7 +156,8 @@ static const struct irq_domain_ops cp_intc_host_ops = { .xlate = irq_domain_xlate_onetwocell, }; -int __init cp_intc_of_init (struct device_node *node,struct device_node *parent) +static int __init cp_intc_of_init (struct device_node *node, +struct device_node *parent) {u32 num_irq = davinci_soc_info.intc_irq_num;u8 *irq_prio = davinci_soc_info.intc_irq_prios;
arch/arm/mach-davinci/cp_intc.h deleted +0 -57
57 lines not on this page · raw message
arch/arm/mach-davinci/include/mach/common.h +1 -0
@@ -22,6 +22,7 @@#define DAVINCI_INTC_START NR_IRQS#define DAVINCI_INTC_IRQ (_irqnum) (DAVINCI_INTC_START + (_irqnum)) +void cp_intc_init (void );void davinci_timer_init (struct clk *clk);struct davinci_timer_instance {
Signature · 1 line
2.20.1
PATCH v2 21/33 ARM: davinci: cp-intc: add a wrapper around cp_intc_init()
In reply to Bartosz GolaszewskiFrom: Bartosz Golaszewski <[email protected]>
We're going to extend the cp_intc_init() function with a config structure so we can drop the intc-related fields from davinci_soc_info.
Once we do it, we won't be able to use this routine directly as the init_irq callback. Wrap the calls in additional helpers that don't take parameters and can be assigned to init_irq.
--- arch/arm/mach-davinci/board-da830-evm.c | 2 +- arch/arm/mach-davinci/board-da850-evm.c | 2 +- arch/arm/mach-davinci/board-mityomapl138.c | 2 +- arch/arm/mach-davinci/board-omapl138-hawk.c | 2 +- arch/arm/mach-davinci/da830.c | 5 +++++ arch/arm/mach-davinci/da850.c | 5 +++++ arch/arm/mach-davinci/include/mach/da8xx.h | 2 ++ 7 files changed, 16 insertions(+), 4 deletions(-)
arch/arm/mach-davinci/board-da830-evm.c +1 -1
@@ -694,7 +694,7 @@ static void __init da830_evm_map_io(void)MACHINE_START (DAVINCI_DA830_EVM ,"DaVinci DA830/OMAP-L137/AM17x EVM" ) .atag_offset = 0x100, .map_io = da830_evm_map_io, - .init_irq = cp_intc_init, + .init_irq = da830_init_irq, .init_time = da830_init_time, .init_machine = da830_evm_init, .init_late = davinci_init_late,
arch/arm/mach-davinci/board-da850-evm.c +1 -1
@@ -1522,7 +1522,7 @@ static void __init da850_evm_map_io(void)MACHINE_START (DAVINCI_DA850_EVM ,"DaVinci DA850/OMAP-L138/AM18x EVM" ) .atag_offset = 0x100, .map_io = da850_evm_map_io, - .init_irq = cp_intc_init, + .init_irq = da850_init_irq, .init_time = da850_init_time, .init_machine = da850_evm_init, .init_late = davinci_init_late,
arch/arm/mach-davinci/board-mityomapl138.c +1 -1
@@ -623,7 +623,7 @@ static void __init mityomapl138_map_io(void)MACHINE_START (MITYOMAPL138 ,"MityDSP-L138/MityARM-1808" ) .atag_offset = 0x100, .map_io = mityomapl138_map_io, - .init_irq = cp_intc_init, + .init_irq = da850_init_irq, .init_time = da850_init_time, .init_machine = mityomapl138_init, .init_late = davinci_init_late,
arch/arm/mach-davinci/board-omapl138-hawk.c +1 -1
@@ -461,7 +461,7 @@ static void __init omapl138_hawk_map_io(void)MACHINE_START (OMAPL138_HAWKBOARD ,"AM18x/OMAP-L138 Hawkboard" ) .atag_offset = 0x100, .map_io = omapl138_hawk_map_io, - .init_irq = cp_intc_init, + .init_irq = da850_init_irq, .init_time = da850_init_time, .init_machine = omapl138_hawk_init, .init_late = davinci_init_late,
arch/arm/mach-davinci/da830.c +5 -0
@@ -821,6 +821,11 @@ void __init da830_init(void)WARN (!da8xx_syscfg0_base,"Unable to map syscfg0 module" ); } +void __init da830_init_irq (void ) +{ +cp_intc_init (); +} +void __init da830_init_time (void ) {void __iomem *pll;
arch/arm/mach-davinci/da850.c +5 -0
@@ -759,6 +759,11 @@ void __init da850_init(void)WARN (!da8xx_syscfg1_base,"Unable to map syscfg1 module" ); } +void __init da850_init_irq (void ) +{ +cp_intc_init (); +} +void __init da850_init_time (void ) {void __iomem *pll0;
arch/arm/mach-davinci/include/mach/da8xx.h +2 -0
@@ -88,10 +88,12 @@ extern unsigned int da850_max_speed;#define DA8XX_ARM_RAM_BASE 0xffff0000void da830_init (void ); +void da830_init_irq (void );void da830_init_time (void );void da830_register_clocks (void );void da850_init (void ); +void da850_init_irq (void );void da850_init_time (void );void da850_register_clocks (void );
Signature · 1 line
2.20.1
PATCH v2 22/33 irqchip: davinci-cp-intc: add a new config structure
In reply to Bartosz GolaszewskiFrom: Bartosz Golaszewski <[email protected]>
Add a config structure that will be used by cp-intc-based platforms. It contains the register range resource and the number of interrupts.
--- include/linux/irqchip/irq-davinci-cp-intc.h | 23 +++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 include/linux/irqchip/irq-davinci-cp-intc.h
include/linux/irqchip/irq-davinci-cp-intc.h new file +23 -0
@@ -0,0 +1,23 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* +* Copyright (C) 2019 Texas Instruments +*/ + +#ifndef _LINUX_IRQ_DAVINCI_CP_INTC_ +#define _LINUX_IRQ_DAVINCI_CP_INTC_ + +#include <linux/ioport.h> + +/** +* struct davinci_cp_intc_config - configuration data for davinci-cp-intc +* driver. +* +* @reg: register range to map +* @num_irqs: number of HW interrupts supported by the controller +*/ +struct davinci_cp_intc_config { +struct resource reg; +unsigned int num_irqs; +}; + +#endif /* _LINUX_IRQ_DAVINCI_CP_INTC_ */
Signature · 1 line
2.20.1
PATCH v2 23/33 ARM: davinci: cp-intc: add the new config structures for da8xx SoCs
In reply to Bartosz GolaszewskiFrom: Bartosz Golaszewski <[email protected]>
Add the new-style config structures for da8xx SoCs. They will be used once we make the cp-intc driver stop using davinci_soc_info.
--- arch/arm/mach-davinci/da830.c | 10 ++++++++++ arch/arm/mach-davinci/da850.c | 10 ++++++++++ 2 files changed, 20 insertions(+)
arch/arm/mach-davinci/da830.c +10 -0
@@ -12,6 +12,7 @@#include <linux/clk/davinci.h> #include <linux/gpio.h> #include <linux/init.h> +#include <linux/irqchip/irq-davinci-cp-intc.h> #include <linux/platform_data/gpio-davinci.h> #include <asm/mach/map.h>
@@ -821,6 +822,15 @@ void __init da830_init(void)WARN (!da8xx_syscfg0_base,"Unable to map syscfg0 module" ); } +static const struct davinci_cp_intc_config da830_cp_intc_config = { + .reg = { + .start =DA8XX_CP_INTC_BASE , + .end =DA8XX_CP_INTC_BASE +SZ_8K -1 , + .flags =IORESOURCE_MEM , + }, + .num_irqs =DA830_N_CP_INTC_IRQ , +}; +void __init da830_init_irq (void ) {cp_intc_init ();
arch/arm/mach-davinci/da850.c +10 -0
@@ -18,6 +18,7 @@#include <linux/cpufreq.h> #include <linux/gpio.h> #include <linux/init.h> +#include <linux/irqchip/irq-davinci-cp-intc.h> #include <linux/mfd/da8xx-cfgchip.h> #include <linux/platform_data/clk-da8xx-cfgchip.h> #include <linux/platform_data/clk-davinci-pll.h>
@@ -759,6 +760,15 @@ void __init da850_init(void)WARN (!da8xx_syscfg1_base,"Unable to map syscfg1 module" ); } +static const struct davinci_cp_intc_config da850_cp_intc_config = { + .reg = { + .start =DA8XX_CP_INTC_BASE , + .end =DA8XX_CP_INTC_BASE +SZ_8K -1 , + .flags =IORESOURCE_MEM , + }, + .num_irqs =DA850_N_CP_INTC_IRQ , +}; +void __init da850_init_irq (void ) {cp_intc_init ();
Signature · 1 line
2.20.1
PATCH v2 24/33 ARM: davinci: cp-intc: use a common prefix for all symbols
In reply to Bartosz GolaszewskiFrom: Bartosz Golaszewski <[email protected]>
In preparation for moving the driver to drivers/irqchip do some
cleanup: use a common prefix for all symbols.
--- arch/arm/mach-davinci/cp_intc.c | 144 ++++++++++---------- arch/arm/mach-davinci/da830.c | 2 +- arch/arm/mach-davinci/da850.c | 2 +- arch/arm/mach-davinci/include/mach/common.h | 2 +- 4 files changed, 77 insertions(+), 73 deletions(-)
arch/arm/mach-davinci/cp_intc.c +74 -70
@@ -22,63 +22,67 @@#include <asm/exception.h> #include <mach/common.h> -#define CP_INTC_CTRL 0x04 -#define CP_INTC_HOST_CTRL 0x0C -#define CP_INTC_GLOBAL_ENABLE 0x10 -#define CP_INTC_SYS_STAT_IDX_CLR 0x24 -#define CP_INTC_SYS_ENABLE_IDX_SET 0x28 -#define CP_INTC_SYS_ENABLE_IDX_CLR 0x2C -#define CP_INTC_HOST_ENABLE_IDX_SET 0x34 -#define CP_INTC_HOST_ENABLE_IDX_CLR 0x38 -#define CP_INTC_PRIO_IDX 0x80 -#define CP_INTC_SYS_STAT_CLR (n) (0x0280 + (n << 2)) -#define CP_INTC_SYS_ENABLE_CLR (n) (0x0380 + (n << 2)) -#define CP_INTC_CHAN_MAP (n) (0x0400 + (n << 2)) -#define CP_INTC_SYS_POLARITY (n) (0x0D00 + (n << 2)) -#define CP_INTC_SYS_TYPE (n) (0x0D80 + (n << 2)) -#define CP_INTC_HOST_ENABLE (n) (0x1500 + (n << 2)) - +#define DAVINCI_CP_INTC_CTRL 0x04 +#define DAVINCI_CP_INTC_HOST_CTRL 0x0C +#define DAVINCI_CP_INTC_GLOBAL_ENABLE 0x10 +#define DAVINCI_CP_INTC_SYS_STAT_IDX_CLR 0x24 +#define DAVINCI_CP_INTC_SYS_ENABLE_IDX_SET 0x28 +#define DAVINCI_CP_INTC_SYS_ENABLE_IDX_CLR 0x2C +#define DAVINCI_CP_INTC_HOST_ENABLE_IDX_SET 0x34 +#define DAVINCI_CP_INTC_HOST_ENABLE_IDX_CLR 0x38 +#define DAVINCI_CP_INTC_PRIO_IDX 0x80 +#define DAVINCI_CP_INTC_SYS_STAT_CLR (n) (0x0280 + (n << 2)) +#define DAVINCI_CP_INTC_SYS_ENABLE_CLR (n) (0x0380 + (n << 2)) +#define DAVINCI_CP_INTC_CHAN_MAP (n) (0x0400 + (n << 2)) +#define DAVINCI_CP_INTC_SYS_POLARITY (n) (0x0D00 + (n << 2)) +#define DAVINCI_CP_INTC_SYS_TYPE (n) (0x0D80 + (n << 2)) +#define DAVINCI_CP_INTC_HOST_ENABLE (n) (0x1500 + (n << 2))#define DAVINCI_CP_INTC_PRI_INDX_MASK GENMASK(9, 0)#define DAVINCI_CP_INTC_GPIR_NONE BIT(31) -static void __iomem *davinci_intc_base; +static void __iomem *davinci_cp_intc_base; +static struct irq_domain *davinci_cp_intc_irq_domain; -static inline unsigned int cp_intc_read (unsigned offset) +static inline unsigned int davinci_cp_intc_read (unsigned int offset) { -return __raw_readl (davinci_intc_base + offset); +return __raw_readl (davinci_cp_intc_base + offset); } -static inline void cp_intc_write (unsigned long value,unsigned offset) +static inline void davinci_cp_intc_write (unsigned long value, +unsigned int offset) { -__raw_writel (value, davinci_intc_base + offset); +__raw_writel (value, davinci_cp_intc_base + offset); } -static void cp_intc_ack_irq (struct irq_data *d) +static void davinci_cp_intc_ack_irq (struct irq_data *d) { -cp_intc_write (d->hwirq,CP_INTC_SYS_STAT_IDX_CLR ); +davinci_cp_intc_write (d->hwirq,DAVINCI_CP_INTC_SYS_STAT_IDX_CLR ); }/* Disable interrupt */ -static void cp_intc_mask_irq (struct irq_data *d) +static void davinci_cp_intc_mask_irq (struct irq_data *d) {/* XXX don't know why we need to disable nIRQ here... */ -cp_intc_write (1 ,CP_INTC_HOST_ENABLE_IDX_CLR ); -cp_intc_write (d->hwirq,CP_INTC_SYS_ENABLE_IDX_CLR ); -cp_intc_write (1 ,CP_INTC_HOST_ENABLE_IDX_SET ); +davinci_cp_intc_write (1 ,DAVINCI_CP_INTC_HOST_ENABLE_IDX_CLR ); +davinci_cp_intc_write (d->hwirq,DAVINCI_CP_INTC_SYS_ENABLE_IDX_CLR ); +davinci_cp_intc_write (1 ,DAVINCI_CP_INTC_HOST_ENABLE_IDX_SET ); }/* Enable interrupt */ -static void cp_intc_unmask_irq (struct irq_data *d) +static void davinci_cp_intc_unmask_irq (struct irq_data *d) { -cp_intc_write (d->hwirq,CP_INTC_SYS_ENABLE_IDX_SET ); +davinci_cp_intc_write (d->hwirq,DAVINCI_CP_INTC_SYS_ENABLE_IDX_SET ); } -static int cp_intc_set_irq_type (struct irq_data *d,unsigned int flow_type) +static int davinci_cp_intc_set_irq_type (struct irq_data *d, +unsigned int flow_type) {unsigned reg =BIT_WORD (d->hwirq);unsigned mask =BIT_MASK (d->hwirq); -unsigned polarity =cp_intc_read (CP_INTC_SYS_POLARITY (reg)); -unsigned type =cp_intc_read (CP_INTC_SYS_TYPE (reg)); +unsigned polarity =davinci_cp_intc_read ( +DAVINCI_CP_INTC_SYS_POLARITY (reg)); +unsigned type =davinci_cp_intc_read ( +DAVINCI_CP_INTC_SYS_TYPE (reg));switch (flow_type) {case IRQ_TYPE_EDGE_RISING :
@@ -101,25 +105,23 @@ static int cp_intc_set_irq_type(struct irq_data *d, unsigned int flow_type)return -EINVAL ; } -cp_intc_write (polarity,CP_INTC_SYS_POLARITY (reg)); -cp_intc_write (type,CP_INTC_SYS_TYPE (reg)); +davinci_cp_intc_write (polarity,DAVINCI_CP_INTC_SYS_POLARITY (reg)); +davinci_cp_intc_write (type,DAVINCI_CP_INTC_SYS_TYPE (reg));return 0 ; } -static struct irq_chip cp_intc_irq_chip = { +static struct irq_chip davinci_cp_intc_irq_chip = { .name ="cp_intc" , - .irq_ack = cp_intc_ack_irq, - .irq_mask = cp_intc_mask_irq, - .irq_unmask = cp_intc_unmask_irq, - .irq_set_type = cp_intc_set_irq_type, + .irq_ack = davinci_cp_intc_ack_irq, + .irq_mask = davinci_cp_intc_mask_irq, + .irq_unmask = davinci_cp_intc_unmask_irq, + .irq_set_type = davinci_cp_intc_set_irq_type, .flags =IRQCHIP_SKIP_SET_WAKE , }; -static struct irq_domain *cp_intc_domain; - static asmlinkage void __exception_irq_entry -cp_intc_handle_irq (struct pt_regs *regs) +davinci_cp_intc_handle_irq (struct pt_regs *regs) {int gpir, irqnr, none;
@@ -128,7 +130,7 @@ cp_intc_handle_irq(struct pt_regs *regs)* indicates a spurious irq. */ - gpir =cp_intc_read (CP_INTC_PRIO_IDX ); + gpir =davinci_cp_intc_read (DAVINCI_CP_INTC_PRIO_IDX ); irqnr = gpir &DAVINCI_CP_INTC_PRI_INDX_MASK ; none = gpir &DAVINCI_CP_INTC_GPIR_NONE ;
@@ -137,27 +139,27 @@ cp_intc_handle_irq(struct pt_regs *regs)return ; } -handle_domain_irq (cp_intc_domain, irqnr, regs); +handle_domain_irq (davinci_cp_intc_irq_domain, irqnr, regs); } -static int cp_intc_host_map (struct irq_domain *h,unsigned int virq, +static int davinci_cp_intc_host_map (struct irq_domain *h,unsigned int virq,irq_hw_number_t hw) {pr_debug ("cp_intc_host_map(%d, 0x%lx)\n" , virq, hw); -irq_set_chip (virq, &cp_intc_irq_chip); +irq_set_chip (virq, &davinci_cp_intc_irq_chip);irq_set_probe (virq);irq_set_handler (virq, handle_edge_irq);return 0 ; } -static const struct irq_domain_ops cp_intc_host_ops = { - .map = cp_intc_host_map, +static const struct irq_domain_ops davinci_cp_intc_irq_domain_ops = { + .map = davinci_cp_intc_host_map, .xlate = irq_domain_xlate_onetwocell, }; -static int __init cp_intc_of_init (struct device_node *node, -struct device_node *parent) +static int __init davinci_cp_intc_of_init (struct device_node *node, +struct device_node *parent) {u32 num_irq = davinci_soc_info.intc_irq_num;u8 *irq_prio = davinci_soc_info.intc_irq_prios;
@@ -165,35 +167,35 @@ static int __init cp_intc_of_init(struct device_node *node,int i, irq_base;if (node) { - davinci_intc_base =of_iomap (node,0 ); + davinci_cp_intc_base =of_iomap (node,0 );if (of_property_read_u32 (node,"ti,intc-size" , &num_irq))pr_warn ("unable to get intc-size, default to %d\n" , num_irq); }else { - davinci_intc_base =ioremap (davinci_soc_info.intc_base,SZ_8K ); + davinci_cp_intc_base =ioremap (davinci_soc_info.intc_base,SZ_8K ); } -if (WARN_ON (!davinci_intc_base)) +if (WARN_ON (!davinci_cp_intc_base))return -EINVAL ; -cp_intc_write (0 ,CP_INTC_GLOBAL_ENABLE ); +davinci_cp_intc_write (0 ,DAVINCI_CP_INTC_GLOBAL_ENABLE );/* Disable all host interrupts */ -cp_intc_write (0 ,CP_INTC_HOST_ENABLE (0 )); +davinci_cp_intc_write (0 ,DAVINCI_CP_INTC_HOST_ENABLE (0 ));/* Disable system interrupts */ for (i =0 ; i < num_reg; i++) -cp_intc_write (~0 ,CP_INTC_SYS_ENABLE_CLR (i)); +davinci_cp_intc_write (~0 ,DAVINCI_CP_INTC_SYS_ENABLE_CLR (i));/* Set to normal mode, no nesting, no priority hold */ -cp_intc_write (0 ,CP_INTC_CTRL ); -cp_intc_write (0 ,CP_INTC_HOST_CTRL ); +davinci_cp_intc_write (0 ,DAVINCI_CP_INTC_CTRL ); +davinci_cp_intc_write (0 ,DAVINCI_CP_INTC_HOST_CTRL );/* Clear system interrupt status */ for (i =0 ; i < num_reg; i++) -cp_intc_write (~0 ,CP_INTC_SYS_STAT_CLR (i)); +davinci_cp_intc_write (~0 ,DAVINCI_CP_INTC_SYS_STAT_CLR (i));/* Enable nIRQ (what about nFIQ?) */ -cp_intc_write (1 ,CP_INTC_HOST_ENABLE_IDX_SET ); +davinci_cp_intc_write (1 ,DAVINCI_CP_INTC_HOST_ENABLE_IDX_SET );/* * Priority is determined by host channel: lower channel number has
@@ -212,7 +214,7 @@ static int __init cp_intc_of_init(struct device_node *node, val |= irq_prio[k] <<24 ; } -cp_intc_write (val,CP_INTC_CHAN_MAP (i)); +davinci_cp_intc_write (val,DAVINCI_CP_INTC_CHAN_MAP (i)); } }else {/*
@@ -221,7 +223,8 @@ static int __init cp_intc_of_init(struct device_node *node,* are mapped to nIRQ. */ for (i =0 ; i < num_reg; i++) -cp_intc_write (0x0f0f0f0f ,CP_INTC_CHAN_MAP (i)); +davinci_cp_intc_write (0x0f0f0f0f , +DAVINCI_CP_INTC_CHAN_MAP (i)); } irq_base =irq_alloc_descs (-1 ,0 , num_irq,0 );
@@ -231,25 +234,26 @@ static int __init cp_intc_of_init(struct device_node *node, }/* create a legacy host */ - cp_intc_domain =irq_domain_add_legacy (node, num_irq, - irq_base,0 , &cp_intc_host_ops,NULL ); + davinci_cp_intc_irq_domain =irq_domain_add_legacy ( + node, num_irq, irq_base,0 , + &davinci_cp_intc_irq_domain_ops,NULL ); -if (!cp_intc_domain) { +if (!davinci_cp_intc_irq_domain) {pr_err ("cp_intc: failed to allocate irq host!\n" );return -EINVAL ; } -set_handle_irq (cp_intc_handle_irq); +set_handle_irq (davinci_cp_intc_handle_irq);/* Enable global interrupt */ -cp_intc_write (1 ,CP_INTC_GLOBAL_ENABLE ); +davinci_cp_intc_write (1 ,DAVINCI_CP_INTC_GLOBAL_ENABLE );return 0 ; } -void __init cp_intc_init (void ) +void __init davinci_cp_intc_init (void ) { -cp_intc_of_init (NULL ,NULL ); +davinci_cp_intc_of_init (NULL ,NULL ); } -IRQCHIP_DECLARE (cp_intc,"ti,cp-intc" , cp_intc_of_init); +IRQCHIP_DECLARE (cp_intc,"ti,cp-intc" , davinci_cp_intc_of_init);
arch/arm/mach-davinci/da830.c +1 -1
@@ -833,7 +833,7 @@ static const struct davinci_cp_intc_config da830_cp_intc_config = {void __init da830_init_irq (void ) { -cp_intc_init (); +davinci_cp_intc_init (); }void __init da830_init_time (void )
arch/arm/mach-davinci/da850.c +1 -1
@@ -771,7 +771,7 @@ static const struct davinci_cp_intc_config da850_cp_intc_config = {void __init da850_init_irq (void ) { -cp_intc_init (); +davinci_cp_intc_init (); }void __init da850_init_time (void )
arch/arm/mach-davinci/include/mach/common.h +1 -1
@@ -22,7 +22,7 @@#define DAVINCI_INTC_START NR_IRQS#define DAVINCI_INTC_IRQ (_irqnum) (DAVINCI_INTC_START + (_irqnum)) -void cp_intc_init (void ); +void davinci_cp_intc_init (void );void davinci_timer_init (struct clk *clk);struct davinci_timer_instance {
Signature · 1 line
2.20.1
PATCH v2 25/33 ARM: davinci: cp-intc: convert all hex numbers to lowercase
In reply to Bartosz GolaszewskiFrom: Bartosz Golaszewski <[email protected]>
Use lowercase letters in hexadecimal numbers in the cp-intc driver as is done in most of the kernel code base.
--- arch/arm/mach-davinci/cp_intc.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
arch/arm/mach-davinci/cp_intc.c +4 -4
@@ -23,19 +23,19 @@#include <mach/common.h> #define DAVINCI_CP_INTC_CTRL 0x04 -#define DAVINCI_CP_INTC_HOST_CTRL 0x0C +#define DAVINCI_CP_INTC_HOST_CTRL 0x0c#define DAVINCI_CP_INTC_GLOBAL_ENABLE 0x10#define DAVINCI_CP_INTC_SYS_STAT_IDX_CLR 0x24#define DAVINCI_CP_INTC_SYS_ENABLE_IDX_SET 0x28 -#define DAVINCI_CP_INTC_SYS_ENABLE_IDX_CLR 0x2C +#define DAVINCI_CP_INTC_SYS_ENABLE_IDX_CLR 0x2c#define DAVINCI_CP_INTC_HOST_ENABLE_IDX_SET 0x34#define DAVINCI_CP_INTC_HOST_ENABLE_IDX_CLR 0x38#define DAVINCI_CP_INTC_PRIO_IDX 0x80#define DAVINCI_CP_INTC_SYS_STAT_CLR (n) (0x0280 + (n << 2))#define DAVINCI_CP_INTC_SYS_ENABLE_CLR (n) (0x0380 + (n << 2))#define DAVINCI_CP_INTC_CHAN_MAP (n) (0x0400 + (n << 2)) -#define DAVINCI_CP_INTC_SYS_POLARITY (n) (0x0D00 + (n << 2)) -#define DAVINCI_CP_INTC_SYS_TYPE (n) (0x0D80 + (n << 2)) +#define DAVINCI_CP_INTC_SYS_POLARITY (n) (0x0d00 + (n << 2)) +#define DAVINCI_CP_INTC_SYS_TYPE (n) (0x0d80 + (n << 2))#define DAVINCI_CP_INTC_HOST_ENABLE (n) (0x1500 + (n << 2))#define DAVINCI_CP_INTC_PRI_INDX_MASK GENMASK(9, 0)#define DAVINCI_CP_INTC_GPIR_NONE BIT(31)
Signature · 1 line
2.20.1
PATCH v2 26/33 ARM: davinci: cp-intc: use the new-style config structure
In reply to Bartosz GolaszewskiFrom: Bartosz Golaszewski <[email protected]>
Modify the cp-intc driver to take all its configuration from the new config structure. Stop referencing davinci_soc_info in any way. Move the declaration for davinci_cp_intc_init() to irq-davinci-cp-intc.h and make it take the new config structure as parameter. Convert all users to the new version.
Also: since the two da8xx SoCs default all irq priorities to 7, just drop the priority configuration at all and hardcode the channels to 7.
It will simplify the driver code and make our lives easier when it comes to device-tree support.
--- arch/arm/mach-davinci/cp_intc.c | 93 +++++++++------------ arch/arm/mach-davinci/da830.c | 2 +- arch/arm/mach-davinci/da850.c | 2 +- arch/arm/mach-davinci/include/mach/common.h | 1 - include/linux/irqchip/irq-davinci-cp-intc.h | 2 + 5 files changed, 44 insertions(+), 56 deletions(-)
arch/arm/mach-davinci/cp_intc.c +40 -53
@@ -13,6 +13,7 @@#include <linux/init.h> #include <linux/irq.h> #include <linux/irqchip.h> +#include <linux/irqchip/irq-davinci-cp-intc.h> #include <linux/irqdomain.h> #include <linux/io.h> #include <linux/of.h>
@@ -20,7 +21,6 @@#include <linux/of_irq.h> #include <asm/exception.h> -#include <mach/common.h> #define DAVINCI_CP_INTC_CTRL 0x04#define DAVINCI_CP_INTC_HOST_CTRL 0x0c
@@ -158,22 +158,15 @@ static const struct irq_domain_ops davinci_cp_intc_irq_domain_ops = { .xlate = irq_domain_xlate_onetwocell, }; -static int __init davinci_cp_intc_of_init (struct device_node *node, -struct device_node *parent) +static int __init +davinci_cp_intc_do_init (const struct davinci_cp_intc_config *config, +struct device_node *node) { -u32 num_irq = davinci_soc_info.intc_irq_num; -u8 *irq_prio = davinci_soc_info.intc_irq_prios; -unsigned num_reg =BITS_TO_LONGS (num_irq); -int i, irq_base; - -if (node) { - davinci_cp_intc_base =of_iomap (node,0 ); -if (of_property_read_u32 (node,"ti,intc-size" , &num_irq)) -pr_warn ("unable to get intc-size, default to %d\n" , - num_irq); - }else { - davinci_cp_intc_base =ioremap (davinci_soc_info.intc_base,SZ_8K ); - } +unsigned int num_regs =BITS_TO_LONGS (config->num_irqs); +int offset, irq_base; + + davinci_cp_intc_base =ioremap (config->reg.start, +resource_size (&config->reg));if (WARN_ON (!davinci_cp_intc_base))return -EINVAL ;
@@ -183,51 +176,29 @@ static int __init davinci_cp_intc_of_init(struct device_node *node,davinci_cp_intc_write (0 ,DAVINCI_CP_INTC_HOST_ENABLE (0 ));/* Disable system interrupts */ -for (i =0 ; i < num_reg; i++) -davinci_cp_intc_write (~0 ,DAVINCI_CP_INTC_SYS_ENABLE_CLR (i)); +for (offset =0 ; offset < num_regs; offset++) +davinci_cp_intc_write (~0 , +DAVINCI_CP_INTC_SYS_ENABLE_CLR (offset));/* Set to normal mode, no nesting, no priority hold */ davinci_cp_intc_write (0 ,DAVINCI_CP_INTC_CTRL );davinci_cp_intc_write (0 ,DAVINCI_CP_INTC_HOST_CTRL );/* Clear system interrupt status */ -for (i =0 ; i < num_reg; i++) -davinci_cp_intc_write (~0 ,DAVINCI_CP_INTC_SYS_STAT_CLR (i)); +for (offset =0 ; offset < num_regs; offset++) +davinci_cp_intc_write (~0 , +DAVINCI_CP_INTC_SYS_STAT_CLR (offset));/* Enable nIRQ (what about nFIQ?) */ davinci_cp_intc_write (1 ,DAVINCI_CP_INTC_HOST_ENABLE_IDX_SET ); -/* -* Priority is determined by host channel: lower channel number has -* higher priority i.e. channel 0 has highest priority and channel 31 -* had the lowest priority. -*/ - num_reg = (num_irq +3 ) >>2 ;/* 4 channels per register */ -if (irq_prio) { -unsigned j, k; -u32 val; - -for (k = i =0 ; i < num_reg; i++) { -for (val = j =0 ; j <4 ; j++, k++) { - val >>=8 ; -if (k < num_irq) - val |= irq_prio[k] <<24 ; - } - -davinci_cp_intc_write (val,DAVINCI_CP_INTC_CHAN_MAP (i)); - } - }else { -/* -* Default everything to channel 15 if priority not specified. -* Note that channel 0-1 are mapped to nFIQ and channels 2-31 -* are mapped to nIRQ. -*/ -for (i =0 ; i < num_reg; i++) -davinci_cp_intc_write (0x0f0f0f0f , -DAVINCI_CP_INTC_CHAN_MAP (i)); - } +/* Default all priorities to channel 7. */ + num_regs = (config->num_irqs +3 ) >>2 ;/* 4 channels per register */ +for (offset =0 ; offset < num_regs; offset++) +davinci_cp_intc_write (0x07070707 , +DAVINCI_CP_INTC_CHAN_MAP (offset)); - irq_base =irq_alloc_descs (-1 ,0 , num_irq,0 ); + irq_base =irq_alloc_descs (-1 ,0 , config->num_irqs,0 );if (irq_base <0 ) {pr_warn ("Couldn't allocate IRQ numbers\n" ); irq_base =0 ;
@@ -235,7 +206,7 @@ static int __init davinci_cp_intc_of_init(struct device_node *node,/* create a legacy host */ davinci_cp_intc_irq_domain =irq_domain_add_legacy ( - node, num_irq, irq_base,0 , + node, config->num_irqs, irq_base,0 , &davinci_cp_intc_irq_domain_ops,NULL );if (!davinci_cp_intc_irq_domain) {
@@ -251,9 +222,25 @@ static int __init davinci_cp_intc_of_init(struct device_node *node,return 0 ; } -void __init davinci_cp_intc_init (void ) +int __init davinci_cp_intc_init (const struct davinci_cp_intc_config *config) { -davinci_cp_intc_of_init (NULL ,NULL ); +return davinci_cp_intc_do_init (config,NULL ); } +static int __init davinci_cp_intc_of_init (struct device_node *node, +struct device_node *parent) +{ +struct davinci_cp_intc_config config = { }; +int ret; + + ret =of_address_to_resource (node,0 , &config.reg); +if (WARN_ON (ret)) +return ret; + + ret =of_property_read_u32 (node,"ti,intc-size" , &config.num_irqs); +if (WARN_ON (ret)) +return ret; + +return davinci_cp_intc_do_init (&config, node); +}IRQCHIP_DECLARE (cp_intc,"ti,cp-intc" , davinci_cp_intc_of_init);
arch/arm/mach-davinci/da830.c +1 -1
@@ -833,7 +833,7 @@ static const struct davinci_cp_intc_config da830_cp_intc_config = {void __init da830_init_irq (void ) { -davinci_cp_intc_init (); +davinci_cp_intc_init (&da830_cp_intc_config); }void __init da830_init_time (void )
arch/arm/mach-davinci/da850.c +1 -1
@@ -771,7 +771,7 @@ static const struct davinci_cp_intc_config da850_cp_intc_config = {void __init da850_init_irq (void ) { -davinci_cp_intc_init (); +davinci_cp_intc_init (&da850_cp_intc_config); }void __init da850_init_time (void )
arch/arm/mach-davinci/include/mach/common.h +0 -1
@@ -22,7 +22,6 @@#define DAVINCI_INTC_START NR_IRQS#define DAVINCI_INTC_IRQ (_irqnum) (DAVINCI_INTC_START + (_irqnum)) -void davinci_cp_intc_init (void );void davinci_timer_init (struct clk *clk);struct davinci_timer_instance {
include/linux/irqchip/irq-davinci-cp-intc.h +2 -0
@@ -20,4 +20,6 @@ struct davinci_cp_intc_config { unsigned int num_irqs; }; +int davinci_cp_intc_init (const struct davinci_cp_intc_config *config); +#endif /* _LINUX_IRQ_DAVINCI_CP_INTC_ */
Signature · 1 line
2.20.1
PATCH v2 27/33 ARM: davinci: cp-intc: improve coding style
In reply to Bartosz GolaszewskiFrom: Bartosz Golaszewski <[email protected]>
Drop tabs from variable initialization. Arrange variables in reverse christmas-tree order. Add a newline before a return.
--- arch/arm/mach-davinci/cp_intc.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-)
arch/arm/mach-davinci/cp_intc.c +7 -6
@@ -77,12 +77,12 @@ static void davinci_cp_intc_unmask_irq(struct irq_data *d)static int davinci_cp_intc_set_irq_type (struct irq_data *d,unsigned int flow_type) { -unsigned reg =BIT_WORD (d->hwirq); -unsigned mask =BIT_MASK (d->hwirq); -unsigned polarity =davinci_cp_intc_read ( -DAVINCI_CP_INTC_SYS_POLARITY (reg)); -unsigned type =davinci_cp_intc_read ( -DAVINCI_CP_INTC_SYS_TYPE (reg)); +unsigned int reg, mask, polarity, type; + + reg =BIT_WORD (d->hwirq); + mask =BIT_MASK (d->hwirq); + polarity =davinci_cp_intc_read (DAVINCI_CP_INTC_SYS_POLARITY (reg)); + type =davinci_cp_intc_read (DAVINCI_CP_INTC_SYS_TYPE (reg));switch (flow_type) {case IRQ_TYPE_EDGE_RISING :
@@ -150,6 +150,7 @@ static int davinci_cp_intc_host_map(struct irq_domain *h, unsigned int virq,irq_set_chip (virq, &davinci_cp_intc_irq_chip);irq_set_probe (virq);irq_set_handler (virq, handle_edge_irq); +return 0 ; }
Signature · 1 line
2.20.1
PATCH v2 28/33 ARM: davinci: cp-intc: unify error handling
In reply to Bartosz GolaszewskiFrom: Bartosz Golaszewski <[email protected]>
Use WARN_ON() on eny error in cp-intc initialization and drop all custom error messages.
--- arch/arm/mach-davinci/cp_intc.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-)
arch/arm/mach-davinci/cp_intc.c +3 -7
@@ -200,20 +200,16 @@ davinci_cp_intc_do_init(const struct davinci_cp_intc_config *config, DAVINCI_CP_INTC_CHAN_MAP(offset)); irq_base =irq_alloc_descs (-1 ,0 , config->num_irqs,0 ); -if (irq_base <0 ) { -pr_warn ("Couldn't allocate IRQ numbers\n" ); - irq_base =0 ; - } +if (WARN_ON (irq_base <0 )) +return irq_base;/* create a legacy host */ davinci_cp_intc_irq_domain =irq_domain_add_legacy ( node, config->num_irqs, irq_base,0 , &davinci_cp_intc_irq_domain_ops,NULL ); -if (!davinci_cp_intc_irq_domain) { -pr_err ("cp_intc: failed to allocate irq host!\n" ); +if (WARN_ON (!davinci_cp_intc_irq_domain))return -EINVAL ; - }set_handle_irq (davinci_cp_intc_handle_irq);
Signature · 1 line
2.20.1
PATCH v2 29/33 ARM: davinci: cp-intc: use readl/writel_relaxed()
In reply to Bartosz GolaszewskiFrom: Bartosz Golaszewski <[email protected]>
Raplace all calls to __raw_readl() & __raw_writel() with readl_relaxed() and writel_relaxed() respectively. It's safe to do as there's no endianness conversion being done in the code.
--- arch/arm/mach-davinci/cp_intc.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
arch/arm/mach-davinci/cp_intc.c +2 -2
@@ -45,13 +45,13 @@ static struct irq_domain *davinci_cp_intc_irq_domain;static inline unsigned int davinci_cp_intc_read (unsigned int offset) { -return __raw_readl (davinci_cp_intc_base + offset); +return readl_relaxed (davinci_cp_intc_base + offset); }static inline void davinci_cp_intc_write (unsigned long value,unsigned int offset) { -__raw_writel (value, davinci_cp_intc_base + offset); +writel_relaxed (value, davinci_cp_intc_base + offset); }static void davinci_cp_intc_ack_irq (struct irq_data *d)
Signature · 1 line
2.20.1
PATCH v2 30/33 ARM: davinci: cp-intc: drop GPL license boilerplate
In reply to Bartosz GolaszewskiFrom: Bartosz Golaszewski <[email protected]>
Replace the GPLv2 license boilerplate with an SPDX identifier and add myself as a second author.
--- arch/arm/mach-davinci/cp_intc.c | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-)
arch/arm/mach-davinci/cp_intc.c +8 -10
@@ -1,13 +1,11 @@ -/* -* TI Common Platform Interrupt Controller (cp_intc) driver -* -* Author: Steve Chen <[email protected]> -* Copyright (C) 2008-2009, MontaVista Software, Inc. <[email protected]> -* -* This file is licensed under the terms of the GNU General Public License -* version 2. This program is licensed "as is" without any warranty of any -* kind, whether express or implied. -*/ +// SPDX-License-Identifier: GPL-2.0-only +// +// Author: Steve Chen <[email protected]> +// Copyright (C) 2008-2009, MontaVista Software, Inc. <[email protected]> +// Author: Bartosz Golaszewski <[email protected]> +// Copyright (C) 2019, Texas Instruments +// +// TI Common Platform Interrupt Controller (cp_intc) driver #include <linux/export.h> #include <linux/init.h>
Signature · 1 line
2.20.1
PATCH v2 31/33 ARM: davinci: cp-intc: remove redundant comments
In reply to Bartosz GolaszewskiFrom: Bartosz Golaszewski <[email protected]>
We don't need comments explaining what functions with obvious names do.
--- arch/arm/mach-davinci/cp_intc.c | 3 --- 1 file changed, 3 deletions(-)
arch/arm/mach-davinci/cp_intc.c +0 -3
@@ -57,7 +57,6 @@ static void davinci_cp_intc_ack_irq(struct irq_data *d)davinci_cp_intc_write (d->hwirq,DAVINCI_CP_INTC_SYS_STAT_IDX_CLR ); } -/* Disable interrupt */ static void davinci_cp_intc_mask_irq (struct irq_data *d) {/* XXX don't know why we need to disable nIRQ here... */
@@ -66,7 +65,6 @@ static void davinci_cp_intc_mask_irq(struct irq_data *d)davinci_cp_intc_write (1 ,DAVINCI_CP_INTC_HOST_ENABLE_IDX_SET ); } -/* Enable interrupt */ static void davinci_cp_intc_unmask_irq (struct irq_data *d) {davinci_cp_intc_write (d->hwirq,DAVINCI_CP_INTC_SYS_ENABLE_IDX_SET );
@@ -201,7 +199,6 @@ davinci_cp_intc_do_init(const struct davinci_cp_intc_config *config,if (WARN_ON (irq_base <0 ))return irq_base; -/* create a legacy host */ davinci_cp_intc_irq_domain =irq_domain_add_legacy ( node, config->num_irqs, irq_base,0 , &davinci_cp_intc_irq_domain_ops,NULL );
Signature · 1 line
2.20.1
PATCH v2 32/33 irqchip: davinci-cp-intc: move the driver to drivers/irqchip
In reply to Bartosz GolaszewskiFrom: Bartosz Golaszewski <[email protected]>
The cp-intc driver has now been cleaned up. Move it to drivers/irqchip where it belongs.
--- arch/arm/mach-davinci/Kconfig | 8 ++------ arch/arm/mach-davinci/Makefile | 2 -- drivers/irqchip/Kconfig | 5 +++++ drivers/irqchip/Makefile | 1 + .../cp_intc.c => drivers/irqchip/irq-davinci-cp-intc.c | 0 5 files changed, 8 insertions(+), 8 deletions(-) rename arch/arm/mach-davinci/cp_intc.c => drivers/irqchip/irq-davinci-cp-intc.c (100%)
arch/arm/mach-davinci/Kconfig +2 -6
@@ -1,10 +1,6 @@ # SPDX-License-Identifier: GPL-2.0 if ARCH_DAVINCI -config CP_INTC - bool - select IRQ_DOMAIN - config ARCH_DAVINCI_DMx bool
@@ -33,13 +29,13 @@ config ARCH_DAVINCI_DA830 select ARCH_DAVINCI_DA8XX # needed on silicon revs 1.0, 1.1: select CPU_DCACHE_WRITETHROUGH if !CPU_DCACHE_DISABLE - select CP_INTC + select DAVINCI_CP_INTC config ARCH_DAVINCI_DA850 bool "DA850/OMAP-L138/AM18x based system" depends on !ARCH_DAVINCI_DMx || (AUTO_ZRELADDR && ARM_PATCH_PHYS_VIRT) select ARCH_DAVINCI_DA8XX - select CP_INTC + select DAVINCI_CP_INTC config ARCH_DAVINCI_DA8XX bool
arch/arm/mach-davinci/Makefile +0 -2
@@ -18,8 +18,6 @@ obj-$(CONFIG_ARCH_DAVINCI_DM365) += dm365.o devices.o obj-$(CONFIG_ARCH_DAVINCI_DA830) += da830.o devices-da8xx.o usb-da8xx.o obj-$(CONFIG_ARCH_DAVINCI_DA850) += da850.o devices-da8xx.o usb-da8xx.o -obj-$(CONFIG_CP_INTC) += cp_intc.o - # Board specific obj-$(CONFIG_MACH_DA8XX_DT) += da8xx-dt.o pdata-quirks.o obj-$(CONFIG_MACH_DAVINCI_EVM) += board-dm644x-evm.o
drivers/irqchip/Kconfig +5 -0
@@ -134,6 +134,11 @@ config DAVINCI_AINTC select GENERIC_IRQ_CHIP select IRQ_DOMAIN +config DAVINCI_CP_INTC + bool + select GENERIC_IRQ_CHIP + select IRQ_DOMAIN + config DW_APB_ICTL bool select GENERIC_IRQ_CHIP
drivers/irqchip/Makefile +1 -0
@@ -7,6 +7,7 @@ obj-$(CONFIG_ATH79) += irq-ath79-misc.o obj-$(CONFIG_ARCH_BCM2835) += irq-bcm2835.o obj-$(CONFIG_ARCH_BCM2835) += irq-bcm2836.o obj-$(CONFIG_DAVINCI_AINTC) += irq-davinci-aintc.o +obj-$(CONFIG_DAVINCI_CP_INTC) += irq-davinci-cp-intc.o obj-$(CONFIG_ARCH_EXYNOS) += exynos-combiner.o obj-$(CONFIG_FARADAY_FTINTC010) += irq-ftintc010.o obj-$(CONFIG_ARCH_HIP04) += irq-hip04.o
drivers/irqchip/irq-davinci-cp-intc.c renamed from arch/arm/mach-davinci/cp_intc.c +0 -0
Signature · 1 line
2.20.1
PATCH v2 33/33 ARM: davinci: remove intc related fields from davinci_soc_info
In reply to Bartosz GolaszewskiFrom: Bartosz Golaszewski <[email protected]>
The fields related to the two davinci interrupt controllers are no longer used. Remove them.
--- arch/arm/mach-davinci/da830.c | 98 ------------------ arch/arm/mach-davinci/da850.c | 108 -------------------- arch/arm/mach-davinci/dm355.c | 3 - arch/arm/mach-davinci/dm365.c | 3 - arch/arm/mach-davinci/dm644x.c | 3 - arch/arm/mach-davinci/dm646x.c | 3 - arch/arm/mach-davinci/include/mach/common.h | 3 - 7 files changed, 221 deletions(-)
arch/arm/mach-davinci/da830.c +0 -98
@@ -624,101 +624,6 @@ const short da830_eqep1_pins[] __initconst = {-1 }; -/* FIQ are pri 0-1; otherwise 2-7, with 7 lowest priority */ -static u8 da830_default_priorities[DA830_N_CP_INTC_IRQ ] = { - [IRQ_DA8XX_COMMTX ] =7 , - [IRQ_DA8XX_COMMRX ] =7 , - [IRQ_DA8XX_NINT ] =7 , - [IRQ_DA8XX_EVTOUT0 ] =7 , - [IRQ_DA8XX_EVTOUT1 ] =7 , - [IRQ_DA8XX_EVTOUT2 ] =7 , - [IRQ_DA8XX_EVTOUT3 ] =7 , - [IRQ_DA8XX_EVTOUT4 ] =7 , - [IRQ_DA8XX_EVTOUT5 ] =7 , - [IRQ_DA8XX_EVTOUT6 ] =7 , - [IRQ_DA8XX_EVTOUT7 ] =7 , - [IRQ_DA8XX_CCINT0 ] =7 , - [IRQ_DA8XX_CCERRINT ] =7 , - [IRQ_DA8XX_TCERRINT0 ] =7 , - [IRQ_DA8XX_AEMIFINT ] =7 , - [IRQ_DA8XX_I2CINT0 ] =7 , - [IRQ_DA8XX_MMCSDINT0 ] =7 , - [IRQ_DA8XX_MMCSDINT1 ] =7 , - [IRQ_DA8XX_ALLINT0 ] =7 , - [IRQ_DA8XX_RTC ] =7 , - [IRQ_DA8XX_SPINT0 ] =7 , - [IRQ_DA8XX_TINT12_0 ] =7 , - [IRQ_DA8XX_TINT34_0 ] =7 , - [IRQ_DA8XX_TINT12_1 ] =7 , - [IRQ_DA8XX_TINT34_1 ] =7 , - [IRQ_DA8XX_UARTINT0 ] =7 , - [IRQ_DA8XX_KEYMGRINT ] =7 , - [IRQ_DA830_MPUERR ] =7 , - [IRQ_DA8XX_CHIPINT0 ] =7 , - [IRQ_DA8XX_CHIPINT1 ] =7 , - [IRQ_DA8XX_CHIPINT2 ] =7 , - [IRQ_DA8XX_CHIPINT3 ] =7 , - [IRQ_DA8XX_TCERRINT1 ] =7 , - [IRQ_DA8XX_C0_RX_THRESH_PULSE ] =7 , - [IRQ_DA8XX_C0_RX_PULSE ] =7 , - [IRQ_DA8XX_C0_TX_PULSE ] =7 , - [IRQ_DA8XX_C0_MISC_PULSE ] =7 , - [IRQ_DA8XX_C1_RX_THRESH_PULSE ] =7 , - [IRQ_DA8XX_C1_RX_PULSE ] =7 , - [IRQ_DA8XX_C1_TX_PULSE ] =7 , - [IRQ_DA8XX_C1_MISC_PULSE ] =7 , - [IRQ_DA8XX_MEMERR ] =7 , - [IRQ_DA8XX_GPIO0 ] =7 , - [IRQ_DA8XX_GPIO1 ] =7 , - [IRQ_DA8XX_GPIO2 ] =7 , - [IRQ_DA8XX_GPIO3 ] =7 , - [IRQ_DA8XX_GPIO4 ] =7 , - [IRQ_DA8XX_GPIO5 ] =7 , - [IRQ_DA8XX_GPIO6 ] =7 , - [IRQ_DA8XX_GPIO7 ] =7 , - [IRQ_DA8XX_GPIO8 ] =7 , - [IRQ_DA8XX_I2CINT1 ] =7 , - [IRQ_DA8XX_LCDINT ] =7 , - [IRQ_DA8XX_UARTINT1 ] =7 , - [IRQ_DA8XX_MCASPINT ] =7 , - [IRQ_DA8XX_ALLINT1 ] =7 , - [IRQ_DA8XX_SPINT1 ] =7 , - [IRQ_DA8XX_UHPI_INT1 ] =7 , - [IRQ_DA8XX_USB_INT ] =7 , - [IRQ_DA8XX_IRQN ] =7 , - [IRQ_DA8XX_RWAKEUP ] =7 , - [IRQ_DA8XX_UARTINT2 ] =7 , - [IRQ_DA8XX_DFTSSINT ] =7 , - [IRQ_DA8XX_EHRPWM0 ] =7 , - [IRQ_DA8XX_EHRPWM0TZ ] =7 , - [IRQ_DA8XX_EHRPWM1 ] =7 , - [IRQ_DA8XX_EHRPWM1TZ ] =7 , - [IRQ_DA830_EHRPWM2 ] =7 , - [IRQ_DA830_EHRPWM2TZ ] =7 , - [IRQ_DA8XX_ECAP0 ] =7 , - [IRQ_DA8XX_ECAP1 ] =7 , - [IRQ_DA8XX_ECAP2 ] =7 , - [IRQ_DA830_EQEP0 ] =7 , - [IRQ_DA830_EQEP1 ] =7 , - [IRQ_DA830_T12CMPINT0_0 ] =7 , - [IRQ_DA830_T12CMPINT1_0 ] =7 , - [IRQ_DA830_T12CMPINT2_0 ] =7 , - [IRQ_DA830_T12CMPINT3_0 ] =7 , - [IRQ_DA830_T12CMPINT4_0 ] =7 , - [IRQ_DA830_T12CMPINT5_0 ] =7 , - [IRQ_DA830_T12CMPINT6_0 ] =7 , - [IRQ_DA830_T12CMPINT7_0 ] =7 , - [IRQ_DA830_T12CMPINT0_1 ] =7 , - [IRQ_DA830_T12CMPINT1_1 ] =7 , - [IRQ_DA830_T12CMPINT2_1 ] =7 , - [IRQ_DA830_T12CMPINT3_1 ] =7 , - [IRQ_DA830_T12CMPINT4_1 ] =7 , - [IRQ_DA830_T12CMPINT5_1 ] =7 , - [IRQ_DA830_T12CMPINT6_1 ] =7 , - [IRQ_DA830_T12CMPINT7_1 ] =7 , - [IRQ_DA8XX_ARMCLKSTOPREQ ] =7 , -}; -static struct map_desc da830_io_desc[] = { { .virtual =IO_VIRT ,
@@ -807,9 +712,6 @@ static const struct davinci_soc_info davinci_soc_info_da830 = { .pinmux_base = DA8XX_SYSCFG0_BASE + 0x120, .pinmux_pins = da830_pins, .pinmux_pins_num = ARRAY_SIZE(da830_pins), - .intc_base = DA8XX_CP_INTC_BASE, - .intc_irq_prios = da830_default_priorities, - .intc_irq_num = DA830_N_CP_INTC_IRQ, .timer_info = &da830_timer_info, .emac_pdata = &da8xx_emac_pdata, };
arch/arm/mach-davinci/da850.c +0 -108
120 lines not on this page · raw message
arch/arm/mach-davinci/dm355.c +0 -3
@@ -706,9 +706,6 @@ static const struct davinci_soc_info davinci_soc_info_dm355 = { .pinmux_base = DAVINCI_SYSTEM_MODULE_BASE, .pinmux_pins = dm355_pins, .pinmux_pins_num = ARRAY_SIZE(dm355_pins), - .intc_base = DAVINCI_ARM_INTC_BASE, - .intc_irq_prios = dm355_default_priorities, - .intc_irq_num = DAVINCI_N_AINTC_IRQ, .timer_info = &dm355_timer_info, .sram_dma = 0x00010000, .sram_len = SZ_32K,
arch/arm/mach-davinci/dm365.c +0 -3
@@ -723,9 +723,6 @@ static const struct davinci_soc_info davinci_soc_info_dm365 = { .pinmux_base = DAVINCI_SYSTEM_MODULE_BASE, .pinmux_pins = dm365_pins, .pinmux_pins_num = ARRAY_SIZE(dm365_pins), - .intc_base = DAVINCI_ARM_INTC_BASE, - .intc_irq_prios = dm365_default_priorities, - .intc_irq_num = DAVINCI_N_AINTC_IRQ, .timer_info = &dm365_timer_info, .emac_pdata = &dm365_emac_pdata, .sram_dma = 0x00010000,
arch/arm/mach-davinci/dm644x.c +0 -3
@@ -647,9 +647,6 @@ static const struct davinci_soc_info davinci_soc_info_dm644x = { .pinmux_base = DAVINCI_SYSTEM_MODULE_BASE, .pinmux_pins = dm644x_pins, .pinmux_pins_num = ARRAY_SIZE(dm644x_pins), - .intc_base = DAVINCI_ARM_INTC_BASE, - .intc_irq_prios = dm644x_default_priorities, - .intc_irq_num = DAVINCI_N_AINTC_IRQ, .timer_info = &dm644x_timer_info, .emac_pdata = &dm644x_emac_pdata, .sram_dma = 0x00008000,
arch/arm/mach-davinci/dm646x.c +0 -3
@@ -587,9 +587,6 @@ static const struct davinci_soc_info davinci_soc_info_dm646x = { .pinmux_base = DAVINCI_SYSTEM_MODULE_BASE, .pinmux_pins = dm646x_pins, .pinmux_pins_num = ARRAY_SIZE(dm646x_pins), - .intc_base = DAVINCI_ARM_INTC_BASE, - .intc_irq_prios = dm646x_default_priorities, - .intc_irq_num = DAVINCI_N_AINTC_IRQ, .timer_info = &dm646x_timer_info, .emac_pdata = &dm646x_emac_pdata, .sram_dma = 0x10010000,
arch/arm/mach-davinci/include/mach/common.h +0 -3
@@ -58,9 +58,6 @@ struct davinci_soc_info {u32 pinmux_base;const struct mux_config *pinmux_pins;unsigned long pinmux_pins_num; -u32 intc_base; -u8 *intc_irq_prios; -unsigned long intc_irq_num;struct davinci_timer_info *timer_info;int gpio_type;u32 gpio_base;
Signature · 1 line
2.20.1