diff options
author | Jamie Lenehan <lenehan@twibble.org> | 2006-12-05 22:05:02 -0500 |
---|---|---|
committer | Paul Mundt <lethal@linux-sh.org> | 2006-12-05 22:05:02 -0500 |
commit | ea0f8feaa041f3ccec3d6b8ee51325b177daef06 (patch) | |
tree | 261c7d75e5caccbaface63370bae029ecd81b98a /arch/sh/boards | |
parent | fe9687dec0400c6de7187ab5efa91facd958ca84 (diff) |
sh: sh775x/titan fixes for irq header changes.
The following moves the creation of IPR interupts into setup-7750.c
and updates a few other things to make it all work after the "Drop
CPU subtype IRQ headers" commit. It boots and runs fine on my titan
board.
- adds an ipr_idx to the ipr_data and uses a function in the subtype
code to calculate the address of the IPR registers
- adds a function to enable individual interrupt mode for externals
in the subtype code and calls that from the titan board code
instead of doing it directly.
- I changed the shift in the ipr_data to be the actual # of bits to
shift, instead of the numnber / 4 - made it easier to match with
the manual.
Signed-off-by: Jamie Lenehan <lenehan@twibble.org>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
Diffstat (limited to 'arch/sh/boards')
-rw-r--r-- | arch/sh/boards/titan/setup.c | 27 |
1 files changed, 15 insertions, 12 deletions
diff --git a/arch/sh/boards/titan/setup.c b/arch/sh/boards/titan/setup.c index a6046d93758b..6bcd939bfaed 100644 --- a/arch/sh/boards/titan/setup.c +++ b/arch/sh/boards/titan/setup.c | |||
@@ -1,26 +1,30 @@ | |||
1 | /* | 1 | /* |
2 | * Setup for Titan | 2 | * arch/sh/boards/titan/setup.c - Setup for Titan |
3 | * | ||
4 | * Copyright (C) 2006 Jamie Lenehan | ||
5 | * | ||
6 | * This file is subject to the terms and conditions of the GNU General Public | ||
7 | * License. See the file "COPYING" in the main directory of this archive | ||
8 | * for more details. | ||
3 | */ | 9 | */ |
4 | |||
5 | #include <linux/init.h> | 10 | #include <linux/init.h> |
6 | #include <asm/irq.h> | 11 | #include <linux/irq.h> |
7 | #include <asm/titan.h> | 12 | #include <asm/titan.h> |
8 | #include <asm/io.h> | 13 | #include <asm/io.h> |
9 | 14 | ||
10 | extern void __init pcibios_init_platform(void); | ||
11 | |||
12 | static struct ipr_data titan_ipr_map[] = { | 15 | static struct ipr_data titan_ipr_map[] = { |
13 | { TITAN_IRQ_WAN, IRL0_IPR_ADDR, IRL0_IPR_POS, IRL0_PRIORITY }, | 16 | /* IRQ, IPR idx, shift, prio */ |
14 | { TITAN_IRQ_LAN, IRL1_IPR_ADDR, IRL1_IPR_POS, IRL1_PRIORITY }, | 17 | { TITAN_IRQ_WAN, 3, 12, 8 }, /* eth0 (WAN) */ |
15 | { TITAN_IRQ_MPCIA, IRL2_IPR_ADDR, IRL2_IPR_POS, IRL2_PRIORITY }, | 18 | { TITAN_IRQ_LAN, 3, 8, 8 }, /* eth1 (LAN) */ |
16 | { TITAN_IRQ_USB, IRL3_IPR_ADDR, IRL3_IPR_POS, IRL3_PRIORITY }, | 19 | { TITAN_IRQ_MPCIA, 3, 4, 8 }, /* mPCI A (top) */ |
20 | { TITAN_IRQ_USB, 3, 0, 8 }, /* mPCI B (bottom), USB */ | ||
17 | }; | 21 | }; |
18 | 22 | ||
19 | static void __init init_titan_irq(void) | 23 | static void __init init_titan_irq(void) |
20 | { | 24 | { |
21 | /* enable individual interrupt mode for externals */ | 25 | /* enable individual interrupt mode for externals */ |
22 | ctrl_outw(ctrl_inw(INTC_ICR) | INTC_ICR_IRLM, INTC_ICR); | 26 | ipr_irq_enable_irlm(); |
23 | 27 | /* register ipr irqs */ | |
24 | make_ipr_irq(titan_ipr_map, ARRAY_SIZE(titan_ipr_map)); | 28 | make_ipr_irq(titan_ipr_map, ARRAY_SIZE(titan_ipr_map)); |
25 | } | 29 | } |
26 | 30 | ||
@@ -47,6 +51,5 @@ struct sh_machine_vector mv_titan __initmv = { | |||
47 | .mv_ioport_map = titan_ioport_map, | 51 | .mv_ioport_map = titan_ioport_map, |
48 | 52 | ||
49 | .mv_init_irq = init_titan_irq, | 53 | .mv_init_irq = init_titan_irq, |
50 | .mv_init_pci = pcibios_init_platform, | ||
51 | }; | 54 | }; |
52 | ALIAS_MV(titan) | 55 | ALIAS_MV(titan) |