1 /* 2 * omap_hwmod_2xxx_interconnect_data.c - common interconnect data for OMAP2xxx 3 * 4 * Copyright (C) 2009-2011 Nokia Corporation 5 * Paul Walmsley 6 * 7 * This program is free software; you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License version 2 as 9 * published by the Free Software Foundation. 10 * 11 * XXX handle crossbar/shared link difference for L3? 12 * XXX these should be marked initdata for multi-OMAP kernels 13 */ 14 #include <asm/sizes.h> 15 16 #include <plat/omap_hwmod.h> 17 #include <plat/serial.h> 18 #include <plat/l3_2xxx.h> 19 #include <plat/l4_2xxx.h> 20 21 #include "omap_hwmod_common_data.h" 22 23 static struct omap_hwmod_addr_space omap2xxx_uart1_addr_space[] = { 24 { 25 .pa_start = OMAP2_UART1_BASE, 26 .pa_end = OMAP2_UART1_BASE + SZ_8K - 1, 27 .flags = ADDR_MAP_ON_INIT | ADDR_TYPE_RT, 28 }, 29 { } 30 }; 31 32 static struct omap_hwmod_addr_space omap2xxx_uart2_addr_space[] = { 33 { 34 .pa_start = OMAP2_UART2_BASE, 35 .pa_end = OMAP2_UART2_BASE + SZ_1K - 1, 36 .flags = ADDR_MAP_ON_INIT | ADDR_TYPE_RT, 37 }, 38 { } 39 }; 40 41 static struct omap_hwmod_addr_space omap2xxx_uart3_addr_space[] = { 42 { 43 .pa_start = OMAP2_UART3_BASE, 44 .pa_end = OMAP2_UART3_BASE + SZ_1K - 1, 45 .flags = ADDR_MAP_ON_INIT | ADDR_TYPE_RT, 46 }, 47 { } 48 }; 49 50 static struct omap_hwmod_addr_space omap2xxx_timer2_addrs[] = { 51 { 52 .pa_start = 0x4802a000, 53 .pa_end = 0x4802a000 + SZ_1K - 1, 54 .flags = ADDR_TYPE_RT 55 }, 56 { } 57 }; 58 59 static struct omap_hwmod_addr_space omap2xxx_timer3_addrs[] = { 60 { 61 .pa_start = 0x48078000, 62 .pa_end = 0x48078000 + SZ_1K - 1, 63 .flags = ADDR_TYPE_RT 64 }, 65 { } 66 }; 67 68 static struct omap_hwmod_addr_space omap2xxx_timer4_addrs[] = { 69 { 70 .pa_start = 0x4807a000, 71 .pa_end = 0x4807a000 + SZ_1K - 1, 72 .flags = ADDR_TYPE_RT 73 }, 74 { } 75 }; 76 77 static struct omap_hwmod_addr_space omap2xxx_timer5_addrs[] = { 78 { 79 .pa_start = 0x4807c000, 80 .pa_end = 0x4807c000 + SZ_1K - 1, 81 .flags = ADDR_TYPE_RT 82 }, 83 { } 84 }; 85 86 static struct omap_hwmod_addr_space omap2xxx_timer6_addrs[] = { 87 { 88 .pa_start = 0x4807e000, 89 .pa_end = 0x4807e000 + SZ_1K - 1, 90 .flags = ADDR_TYPE_RT 91 }, 92 { } 93 }; 94 95 static struct omap_hwmod_addr_space omap2xxx_timer7_addrs[] = { 96 { 97 .pa_start = 0x48080000, 98 .pa_end = 0x48080000 + SZ_1K - 1, 99 .flags = ADDR_TYPE_RT 100 }, 101 { } 102 }; 103 104 static struct omap_hwmod_addr_space omap2xxx_timer8_addrs[] = { 105 { 106 .pa_start = 0x48082000, 107 .pa_end = 0x48082000 + SZ_1K - 1, 108 .flags = ADDR_TYPE_RT 109 }, 110 { } 111 }; 112 113 static struct omap_hwmod_addr_space omap2xxx_timer9_addrs[] = { 114 { 115 .pa_start = 0x48084000, 116 .pa_end = 0x48084000 + SZ_1K - 1, 117 .flags = ADDR_TYPE_RT 118 }, 119 { } 120 }; 121 122 struct omap_hwmod_addr_space omap2xxx_mcbsp2_addrs[] = { 123 { 124 .name = "mpu", 125 .pa_start = 0x48076000, 126 .pa_end = 0x480760ff, 127 .flags = ADDR_TYPE_RT 128 }, 129 { } 130 }; 131 132 /* 133 * Common interconnect data 134 */ 135 136 /* L3 -> L4_CORE interface */ 137 struct omap_hwmod_ocp_if omap2xxx_l3_main__l4_core = { 138 .master = &omap2xxx_l3_main_hwmod, 139 .slave = &omap2xxx_l4_core_hwmod, 140 .user = OCP_USER_MPU | OCP_USER_SDMA, 141 }; 142 143 /* MPU -> L3 interface */ 144 struct omap_hwmod_ocp_if omap2xxx_mpu__l3_main = { 145 .master = &omap2xxx_mpu_hwmod, 146 .slave = &omap2xxx_l3_main_hwmod, 147 .user = OCP_USER_MPU, 148 }; 149 150 /* DSS -> l3 */ 151 struct omap_hwmod_ocp_if omap2xxx_dss__l3 = { 152 .master = &omap2xxx_dss_core_hwmod, 153 .slave = &omap2xxx_l3_main_hwmod, 154 .fw = { 155 .omap2 = { 156 .l3_perm_bit = OMAP2_L3_CORE_FW_CONNID_DSS, 157 .flags = OMAP_FIREWALL_L3, 158 } 159 }, 160 .user = OCP_USER_MPU | OCP_USER_SDMA, 161 }; 162 163 /* L4_CORE -> L4_WKUP interface */ 164 struct omap_hwmod_ocp_if omap2xxx_l4_core__l4_wkup = { 165 .master = &omap2xxx_l4_core_hwmod, 166 .slave = &omap2xxx_l4_wkup_hwmod, 167 .user = OCP_USER_MPU | OCP_USER_SDMA, 168 }; 169 170 /* L4 CORE -> UART1 interface */ 171 struct omap_hwmod_ocp_if omap2_l4_core__uart1 = { 172 .master = &omap2xxx_l4_core_hwmod, 173 .slave = &omap2xxx_uart1_hwmod, 174 .clk = "uart1_ick", 175 .addr = omap2xxx_uart1_addr_space, 176 .user = OCP_USER_MPU | OCP_USER_SDMA, 177 }; 178 179 /* L4 CORE -> UART2 interface */ 180 struct omap_hwmod_ocp_if omap2_l4_core__uart2 = { 181 .master = &omap2xxx_l4_core_hwmod, 182 .slave = &omap2xxx_uart2_hwmod, 183 .clk = "uart2_ick", 184 .addr = omap2xxx_uart2_addr_space, 185 .user = OCP_USER_MPU | OCP_USER_SDMA, 186 }; 187 188 /* L4 PER -> UART3 interface */ 189 struct omap_hwmod_ocp_if omap2_l4_core__uart3 = { 190 .master = &omap2xxx_l4_core_hwmod, 191 .slave = &omap2xxx_uart3_hwmod, 192 .clk = "uart3_ick", 193 .addr = omap2xxx_uart3_addr_space, 194 .user = OCP_USER_MPU | OCP_USER_SDMA, 195 }; 196 197 /* l4 core -> mcspi1 interface */ 198 struct omap_hwmod_ocp_if omap2xxx_l4_core__mcspi1 = { 199 .master = &omap2xxx_l4_core_hwmod, 200 .slave = &omap2xxx_mcspi1_hwmod, 201 .clk = "mcspi1_ick", 202 .addr = omap2_mcspi1_addr_space, 203 .user = OCP_USER_MPU | OCP_USER_SDMA, 204 }; 205 206 /* l4 core -> mcspi2 interface */ 207 struct omap_hwmod_ocp_if omap2xxx_l4_core__mcspi2 = { 208 .master = &omap2xxx_l4_core_hwmod, 209 .slave = &omap2xxx_mcspi2_hwmod, 210 .clk = "mcspi2_ick", 211 .addr = omap2_mcspi2_addr_space, 212 .user = OCP_USER_MPU | OCP_USER_SDMA, 213 }; 214 215 /* l4_core -> timer2 */ 216 struct omap_hwmod_ocp_if omap2xxx_l4_core__timer2 = { 217 .master = &omap2xxx_l4_core_hwmod, 218 .slave = &omap2xxx_timer2_hwmod, 219 .clk = "gpt2_ick", 220 .addr = omap2xxx_timer2_addrs, 221 .user = OCP_USER_MPU | OCP_USER_SDMA, 222 }; 223 224 /* l4_core -> timer3 */ 225 struct omap_hwmod_ocp_if omap2xxx_l4_core__timer3 = { 226 .master = &omap2xxx_l4_core_hwmod, 227 .slave = &omap2xxx_timer3_hwmod, 228 .clk = "gpt3_ick", 229 .addr = omap2xxx_timer3_addrs, 230 .user = OCP_USER_MPU | OCP_USER_SDMA, 231 }; 232 233 /* l4_core -> timer4 */ 234 struct omap_hwmod_ocp_if omap2xxx_l4_core__timer4 = { 235 .master = &omap2xxx_l4_core_hwmod, 236 .slave = &omap2xxx_timer4_hwmod, 237 .clk = "gpt4_ick", 238 .addr = omap2xxx_timer4_addrs, 239 .user = OCP_USER_MPU | OCP_USER_SDMA, 240 }; 241 242 /* l4_core -> timer5 */ 243 struct omap_hwmod_ocp_if omap2xxx_l4_core__timer5 = { 244 .master = &omap2xxx_l4_core_hwmod, 245 .slave = &omap2xxx_timer5_hwmod, 246 .clk = "gpt5_ick", 247 .addr = omap2xxx_timer5_addrs, 248 .user = OCP_USER_MPU | OCP_USER_SDMA, 249 }; 250 251 /* l4_core -> timer6 */ 252 struct omap_hwmod_ocp_if omap2xxx_l4_core__timer6 = { 253 .master = &omap2xxx_l4_core_hwmod, 254 .slave = &omap2xxx_timer6_hwmod, 255 .clk = "gpt6_ick", 256 .addr = omap2xxx_timer6_addrs, 257 .user = OCP_USER_MPU | OCP_USER_SDMA, 258 }; 259 260 /* l4_core -> timer7 */ 261 struct omap_hwmod_ocp_if omap2xxx_l4_core__timer7 = { 262 .master = &omap2xxx_l4_core_hwmod, 263 .slave = &omap2xxx_timer7_hwmod, 264 .clk = "gpt7_ick", 265 .addr = omap2xxx_timer7_addrs, 266 .user = OCP_USER_MPU | OCP_USER_SDMA, 267 }; 268 269 /* l4_core -> timer8 */ 270 struct omap_hwmod_ocp_if omap2xxx_l4_core__timer8 = { 271 .master = &omap2xxx_l4_core_hwmod, 272 .slave = &omap2xxx_timer8_hwmod, 273 .clk = "gpt8_ick", 274 .addr = omap2xxx_timer8_addrs, 275 .user = OCP_USER_MPU | OCP_USER_SDMA, 276 }; 277 278 /* l4_core -> timer9 */ 279 struct omap_hwmod_ocp_if omap2xxx_l4_core__timer9 = { 280 .master = &omap2xxx_l4_core_hwmod, 281 .slave = &omap2xxx_timer9_hwmod, 282 .clk = "gpt9_ick", 283 .addr = omap2xxx_timer9_addrs, 284 .user = OCP_USER_MPU | OCP_USER_SDMA, 285 }; 286 287 /* l4_core -> timer10 */ 288 struct omap_hwmod_ocp_if omap2xxx_l4_core__timer10 = { 289 .master = &omap2xxx_l4_core_hwmod, 290 .slave = &omap2xxx_timer10_hwmod, 291 .clk = "gpt10_ick", 292 .addr = omap2_timer10_addrs, 293 .user = OCP_USER_MPU | OCP_USER_SDMA, 294 }; 295 296 /* l4_core -> timer11 */ 297 struct omap_hwmod_ocp_if omap2xxx_l4_core__timer11 = { 298 .master = &omap2xxx_l4_core_hwmod, 299 .slave = &omap2xxx_timer11_hwmod, 300 .clk = "gpt11_ick", 301 .addr = omap2_timer11_addrs, 302 .user = OCP_USER_MPU | OCP_USER_SDMA, 303 }; 304 305 /* l4_core -> timer12 */ 306 struct omap_hwmod_ocp_if omap2xxx_l4_core__timer12 = { 307 .master = &omap2xxx_l4_core_hwmod, 308 .slave = &omap2xxx_timer12_hwmod, 309 .clk = "gpt12_ick", 310 .addr = omap2xxx_timer12_addrs, 311 .user = OCP_USER_MPU | OCP_USER_SDMA, 312 }; 313 314 /* l4_core -> dss */ 315 struct omap_hwmod_ocp_if omap2xxx_l4_core__dss = { 316 .master = &omap2xxx_l4_core_hwmod, 317 .slave = &omap2xxx_dss_core_hwmod, 318 .clk = "dss_ick", 319 .addr = omap2_dss_addrs, 320 .fw = { 321 .omap2 = { 322 .l4_fw_region = OMAP2420_L4_CORE_FW_DSS_CORE_REGION, 323 .flags = OMAP_FIREWALL_L4, 324 } 325 }, 326 .user = OCP_USER_MPU | OCP_USER_SDMA, 327 }; 328 329 /* l4_core -> dss_dispc */ 330 struct omap_hwmod_ocp_if omap2xxx_l4_core__dss_dispc = { 331 .master = &omap2xxx_l4_core_hwmod, 332 .slave = &omap2xxx_dss_dispc_hwmod, 333 .clk = "dss_ick", 334 .addr = omap2_dss_dispc_addrs, 335 .fw = { 336 .omap2 = { 337 .l4_fw_region = OMAP2420_L4_CORE_FW_DSS_DISPC_REGION, 338 .flags = OMAP_FIREWALL_L4, 339 } 340 }, 341 .user = OCP_USER_MPU | OCP_USER_SDMA, 342 }; 343 344 /* l4_core -> dss_rfbi */ 345 struct omap_hwmod_ocp_if omap2xxx_l4_core__dss_rfbi = { 346 .master = &omap2xxx_l4_core_hwmod, 347 .slave = &omap2xxx_dss_rfbi_hwmod, 348 .clk = "dss_ick", 349 .addr = omap2_dss_rfbi_addrs, 350 .fw = { 351 .omap2 = { 352 .l4_fw_region = OMAP2420_L4_CORE_FW_DSS_CORE_REGION, 353 .flags = OMAP_FIREWALL_L4, 354 } 355 }, 356 .user = OCP_USER_MPU | OCP_USER_SDMA, 357 }; 358 359 /* l4_core -> dss_venc */ 360 struct omap_hwmod_ocp_if omap2xxx_l4_core__dss_venc = { 361 .master = &omap2xxx_l4_core_hwmod, 362 .slave = &omap2xxx_dss_venc_hwmod, 363 .clk = "dss_ick", 364 .addr = omap2_dss_venc_addrs, 365 .fw = { 366 .omap2 = { 367 .l4_fw_region = OMAP2420_L4_CORE_FW_DSS_VENC_REGION, 368 .flags = OMAP_FIREWALL_L4, 369 } 370 }, 371 .flags = OCPIF_SWSUP_IDLE, 372 .user = OCP_USER_MPU | OCP_USER_SDMA, 373 }; 374 375