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 | |
| 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>
| -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 */ |
