diff options
author | Linus Walleij <linus.walleij@stericsson.com> | 2010-09-27 17:09:52 -0400 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2010-10-04 14:24:10 -0400 |
commit | 4d4a4b037c5d3620b8c55504a8c9e0cbf949f7fa (patch) | |
tree | 96d653bcf6d5d38bb591b26251ea7f089028e92a /arch/arm/mach-ux500 | |
parent | 4f724beace1be4ba3dbd1a75cff3940354e3ff4f (diff) |
ARM: 6413/1: ux500: resources for DB5500 mbox driver and modem irq handler
Platform resources found in the DB5500 for mailboxes and the modem
IRQ controller.
Signed-off-by: Stefan Nilsson XK <stefan.xk.nilsson@stericsson.com>
Signed-off-by: Linus Walleij <linus.walleij@stericsson.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch/arm/mach-ux500')
-rw-r--r-- | arch/arm/mach-ux500/cpu-db5500.c | 88 | ||||
-rw-r--r-- | arch/arm/mach-ux500/include/mach/db5500-regs.h | 14 | ||||
-rw-r--r-- | arch/arm/mach-ux500/include/mach/irqs-db5500.h | 1 | ||||
-rw-r--r-- | arch/arm/mach-ux500/include/mach/irqs.h | 15 |
4 files changed, 117 insertions, 1 deletions
diff --git a/arch/arm/mach-ux500/cpu-db5500.c b/arch/arm/mach-ux500/cpu-db5500.c index e9278f6d67aa..2f87075e9d6f 100644 --- a/arch/arm/mach-ux500/cpu-db5500.c +++ b/arch/arm/mach-ux500/cpu-db5500.c | |||
@@ -14,6 +14,7 @@ | |||
14 | #include <mach/hardware.h> | 14 | #include <mach/hardware.h> |
15 | #include <mach/devices.h> | 15 | #include <mach/devices.h> |
16 | #include <mach/setup.h> | 16 | #include <mach/setup.h> |
17 | #include <mach/irqs.h> | ||
17 | 18 | ||
18 | static struct map_desc u5500_io_desc[] __initdata = { | 19 | static struct map_desc u5500_io_desc[] __initdata = { |
19 | __IO_DEV_DESC(U5500_GPIO0_BASE, SZ_4K), | 20 | __IO_DEV_DESC(U5500_GPIO0_BASE, SZ_4K), |
@@ -24,6 +25,90 @@ static struct map_desc u5500_io_desc[] __initdata = { | |||
24 | __IO_DEV_DESC(U5500_PRCMU_BASE, SZ_4K), | 25 | __IO_DEV_DESC(U5500_PRCMU_BASE, SZ_4K), |
25 | }; | 26 | }; |
26 | 27 | ||
28 | static struct resource mbox0_resources[] = { | ||
29 | { | ||
30 | .name = "mbox_peer", | ||
31 | .start = U5500_MBOX0_PEER_START, | ||
32 | .end = U5500_MBOX0_PEER_END, | ||
33 | .flags = IORESOURCE_MEM, | ||
34 | }, | ||
35 | { | ||
36 | .name = "mbox_local", | ||
37 | .start = U5500_MBOX0_LOCAL_START, | ||
38 | .end = U5500_MBOX0_LOCAL_END, | ||
39 | .flags = IORESOURCE_MEM, | ||
40 | }, | ||
41 | { | ||
42 | .name = "mbox_irq", | ||
43 | .start = MBOX_PAIR0_VIRT_IRQ, | ||
44 | .end = MBOX_PAIR0_VIRT_IRQ, | ||
45 | .flags = IORESOURCE_IRQ, | ||
46 | } | ||
47 | }; | ||
48 | |||
49 | static struct resource mbox1_resources[] = { | ||
50 | { | ||
51 | .name = "mbox_peer", | ||
52 | .start = U5500_MBOX1_PEER_START, | ||
53 | .end = U5500_MBOX1_PEER_END, | ||
54 | .flags = IORESOURCE_MEM, | ||
55 | }, | ||
56 | { | ||
57 | .name = "mbox_local", | ||
58 | .start = U5500_MBOX1_LOCAL_START, | ||
59 | .end = U5500_MBOX1_LOCAL_END, | ||
60 | .flags = IORESOURCE_MEM, | ||
61 | }, | ||
62 | { | ||
63 | .name = "mbox_irq", | ||
64 | .start = MBOX_PAIR1_VIRT_IRQ, | ||
65 | .end = MBOX_PAIR1_VIRT_IRQ, | ||
66 | .flags = IORESOURCE_IRQ, | ||
67 | } | ||
68 | }; | ||
69 | |||
70 | static struct resource mbox2_resources[] = { | ||
71 | { | ||
72 | .name = "mbox_peer", | ||
73 | .start = U5500_MBOX2_PEER_START, | ||
74 | .end = U5500_MBOX2_PEER_END, | ||
75 | .flags = IORESOURCE_MEM, | ||
76 | }, | ||
77 | { | ||
78 | .name = "mbox_local", | ||
79 | .start = U5500_MBOX2_LOCAL_START, | ||
80 | .end = U5500_MBOX2_LOCAL_END, | ||
81 | .flags = IORESOURCE_MEM, | ||
82 | }, | ||
83 | { | ||
84 | .name = "mbox_irq", | ||
85 | .start = MBOX_PAIR2_VIRT_IRQ, | ||
86 | .end = MBOX_PAIR2_VIRT_IRQ, | ||
87 | .flags = IORESOURCE_IRQ, | ||
88 | } | ||
89 | }; | ||
90 | |||
91 | static struct platform_device mbox0_device = { | ||
92 | .id = 0, | ||
93 | .name = "mbox", | ||
94 | .resource = mbox0_resources, | ||
95 | .num_resources = ARRAY_SIZE(mbox0_resources), | ||
96 | }; | ||
97 | |||
98 | static struct platform_device mbox1_device = { | ||
99 | .id = 1, | ||
100 | .name = "mbox", | ||
101 | .resource = mbox1_resources, | ||
102 | .num_resources = ARRAY_SIZE(mbox1_resources), | ||
103 | }; | ||
104 | |||
105 | static struct platform_device mbox2_device = { | ||
106 | .id = 2, | ||
107 | .name = "mbox", | ||
108 | .resource = mbox2_resources, | ||
109 | .num_resources = ARRAY_SIZE(mbox2_resources), | ||
110 | }; | ||
111 | |||
27 | static struct platform_device *u5500_platform_devs[] __initdata = { | 112 | static struct platform_device *u5500_platform_devs[] __initdata = { |
28 | &u5500_gpio_devs[0], | 113 | &u5500_gpio_devs[0], |
29 | &u5500_gpio_devs[1], | 114 | &u5500_gpio_devs[1], |
@@ -33,6 +118,9 @@ static struct platform_device *u5500_platform_devs[] __initdata = { | |||
33 | &u5500_gpio_devs[5], | 118 | &u5500_gpio_devs[5], |
34 | &u5500_gpio_devs[6], | 119 | &u5500_gpio_devs[6], |
35 | &u5500_gpio_devs[7], | 120 | &u5500_gpio_devs[7], |
121 | &mbox0_device, | ||
122 | &mbox1_device, | ||
123 | &mbox2_device, | ||
36 | }; | 124 | }; |
37 | 125 | ||
38 | void __init u5500_map_io(void) | 126 | void __init u5500_map_io(void) |
diff --git a/arch/arm/mach-ux500/include/mach/db5500-regs.h b/arch/arm/mach-ux500/include/mach/db5500-regs.h index 545c80fc8024..3eafc0e24ba5 100644 --- a/arch/arm/mach-ux500/include/mach/db5500-regs.h +++ b/arch/arm/mach-ux500/include/mach/db5500-regs.h | |||
@@ -100,4 +100,18 @@ | |||
100 | #define U5500_GPIOBANK6_BASE (U5500_GPIO4_BASE + 0x80) | 100 | #define U5500_GPIOBANK6_BASE (U5500_GPIO4_BASE + 0x80) |
101 | #define U5500_GPIOBANK7_BASE (U5500_GPIO4_BASE + 0x100) | 101 | #define U5500_GPIOBANK7_BASE (U5500_GPIO4_BASE + 0x100) |
102 | 102 | ||
103 | #define U5500_MBOX_BASE (U5500_MODEM_BASE + 0xFFD1000) | ||
104 | #define U5500_MBOX0_PEER_START (U5500_MBOX_BASE + 0x40) | ||
105 | #define U5500_MBOX0_PEER_END (U5500_MBOX_BASE + 0x5F) | ||
106 | #define U5500_MBOX0_LOCAL_START (U5500_MBOX_BASE + 0x60) | ||
107 | #define U5500_MBOX0_LOCAL_END (U5500_MBOX_BASE + 0x7F) | ||
108 | #define U5500_MBOX1_PEER_START (U5500_MBOX_BASE + 0x80) | ||
109 | #define U5500_MBOX1_PEER_END (U5500_MBOX_BASE + 0x9F) | ||
110 | #define U5500_MBOX1_LOCAL_START (U5500_MBOX_BASE + 0xA0) | ||
111 | #define U5500_MBOX1_LOCAL_END (U5500_MBOX_BASE + 0xBF) | ||
112 | #define U5500_MBOX2_PEER_START (U5500_MBOX_BASE + 0x00) | ||
113 | #define U5500_MBOX2_PEER_END (U5500_MBOX_BASE + 0x1F) | ||
114 | #define U5500_MBOX2_LOCAL_START (U5500_MBOX_BASE + 0x20) | ||
115 | #define U5500_MBOX2_LOCAL_END (U5500_MBOX_BASE + 0x3F) | ||
116 | |||
103 | #endif | 117 | #endif |
diff --git a/arch/arm/mach-ux500/include/mach/irqs-db5500.h b/arch/arm/mach-ux500/include/mach/irqs-db5500.h index 6fbfe5e2065a..bfa123dbec3b 100644 --- a/arch/arm/mach-ux500/include/mach/irqs-db5500.h +++ b/arch/arm/mach-ux500/include/mach/irqs-db5500.h | |||
@@ -61,6 +61,7 @@ | |||
61 | #define IRQ_DB5500_SDMMC0 (IRQ_SHPI_START + 60) | 61 | #define IRQ_DB5500_SDMMC0 (IRQ_SHPI_START + 60) |
62 | #define IRQ_DB5500_HSEM (IRQ_SHPI_START + 61) | 62 | #define IRQ_DB5500_HSEM (IRQ_SHPI_START + 61) |
63 | #define IRQ_DB5500_SBAG (IRQ_SHPI_START + 63) | 63 | #define IRQ_DB5500_SBAG (IRQ_SHPI_START + 63) |
64 | #define IRQ_DB5500_MODEM (IRQ_SHPI_START + 65) | ||
64 | #define IRQ_DB5500_SPI1 (IRQ_SHPI_START + 96) | 65 | #define IRQ_DB5500_SPI1 (IRQ_SHPI_START + 96) |
65 | #define IRQ_DB5500_MSP2 (IRQ_SHPI_START + 98) | 66 | #define IRQ_DB5500_MSP2 (IRQ_SHPI_START + 98) |
66 | #define IRQ_DB5500_SRPTIMER (IRQ_SHPI_START + 101) | 67 | #define IRQ_DB5500_SRPTIMER (IRQ_SHPI_START + 101) |
diff --git a/arch/arm/mach-ux500/include/mach/irqs.h b/arch/arm/mach-ux500/include/mach/irqs.h index 0d552d9c9c00..693aa57de88d 100644 --- a/arch/arm/mach-ux500/include/mach/irqs.h +++ b/arch/arm/mach-ux500/include/mach/irqs.h | |||
@@ -84,6 +84,19 @@ | |||
84 | #include <mach/irqs-board-mop500.h> | 84 | #include <mach/irqs-board-mop500.h> |
85 | #endif | 85 | #endif |
86 | 86 | ||
87 | #define NR_IRQS IRQ_BOARD_END | 87 | /* |
88 | * After the board specific IRQ:s we reserve a range of IRQ:s in which virtual | ||
89 | * IRQ:s representing modem IRQ:s can be allocated | ||
90 | */ | ||
91 | #define IRQ_MODEM_EVENTS_BASE (IRQ_BOARD_END + 1) | ||
92 | #define IRQ_MODEM_EVENTS_NBR 72 | ||
93 | #define IRQ_MODEM_EVENTS_END (IRQ_MODEM_EVENTS_BASE + IRQ_MODEM_EVENTS_NBR) | ||
94 | |||
95 | /* List of virtual IRQ:s that are allocated from the range above */ | ||
96 | #define MBOX_PAIR0_VIRT_IRQ (IRQ_MODEM_EVENTS_BASE + 43) | ||
97 | #define MBOX_PAIR1_VIRT_IRQ (IRQ_MODEM_EVENTS_BASE + 45) | ||
98 | #define MBOX_PAIR2_VIRT_IRQ (IRQ_MODEM_EVENTS_BASE + 41) | ||
99 | |||
100 | #define NR_IRQS IRQ_MODEM_EVENTS_END | ||
88 | 101 | ||
89 | #endif /* ASM_ARCH_IRQS_H */ | 102 | #endif /* ASM_ARCH_IRQS_H */ |