aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Walmsley <paul@pwsan.com>2012-04-19 15:33:54 -0400
committerPaul Walmsley <paul@pwsan.com>2012-04-19 15:33:54 -0400
commit42b9e38728d5b810b2f1c1d15d6ee170c8eca9d6 (patch)
tree0dd602229815508d86ab431ef737b4775c4464ef
parent896d4e98c0b5e3a9894b62a88fe4798eef14ba02 (diff)
ARM: OMAP4: hwmod data: add some interconnect-related IP blocks
Add the SL2 interface IP block and interconnect data. The SL2 is related to the IVA-HD subsystem. Add IP block and interconnect data for the C2C ("Chip-to-chip") interconnect. This can provide a direct system interconnect link to other devices stacked on the OMAP package. Add the ELM IP block and interconnect data. The ELM can be used to locate errors in NAND flash connected to the GPMC. Signed-off-by: Paul Walmsley <paul@pwsan.com> Signed-off-by: BenoƮt Cousson <b-cousson@ti.com>
-rw-r--r--arch/arm/mach-omap2/omap_hwmod_44xx_data.c224
-rw-r--r--arch/arm/plat-omap/include/plat/omap_hwmod.h1
2 files changed, 221 insertions, 4 deletions
diff --git a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
index 330cafe5656..62b283f3b33 100644
--- a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
+++ b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
@@ -51,6 +51,27 @@
51 */ 51 */
52 52
53/* 53/*
54 * 'c2c_target_fw' class
55 * instance(s): c2c_target_fw
56 */
57static struct omap_hwmod_class omap44xx_c2c_target_fw_hwmod_class = {
58 .name = "c2c_target_fw",
59};
60
61/* c2c_target_fw */
62static struct omap_hwmod omap44xx_c2c_target_fw_hwmod = {
63 .name = "c2c_target_fw",
64 .class = &omap44xx_c2c_target_fw_hwmod_class,
65 .clkdm_name = "d2d_clkdm",
66 .prcm = {
67 .omap4 = {
68 .clkctrl_offs = OMAP4_CM_D2D_SAD2D_FW_CLKCTRL_OFFSET,
69 .context_offs = OMAP4_RM_D2D_SAD2D_FW_CONTEXT_OFFSET,
70 },
71 },
72};
73
74/*
54 * 'dmm' class 75 * 'dmm' class
55 * instance(s): dmm 76 * instance(s): dmm
56 */ 77 */
@@ -249,8 +270,6 @@ static struct omap_hwmod omap44xx_mpu_private_hwmod = {
249 * - They still need to be validated with the driver 270 * - They still need to be validated with the driver
250 * properly adapted to omap_hwmod / omap_device 271 * properly adapted to omap_hwmod / omap_device
251 * 272 *
252 * c2c
253 * c2c_target_fw
254 * cm_core 273 * cm_core
255 * cm_core_aon 274 * cm_core_aon
256 * ctrl_module_core 275 * ctrl_module_core
@@ -260,7 +279,6 @@ static struct omap_hwmod omap44xx_mpu_private_hwmod = {
260 * debugss 279 * debugss
261 * efuse_ctrl_cust 280 * efuse_ctrl_cust
262 * efuse_ctrl_std 281 * efuse_ctrl_std
263 * elm
264 * mpu_c0 282 * mpu_c0
265 * mpu_c1 283 * mpu_c1
266 * ocmc_ram 284 * ocmc_ram
@@ -269,7 +287,6 @@ static struct omap_hwmod omap44xx_mpu_private_hwmod = {
269 * prcm_mpu 287 * prcm_mpu
270 * prm 288 * prm
271 * scrm 289 * scrm
272 * sl2if
273 * usb_host_fs 290 * usb_host_fs
274 * usb_host_hs 291 * usb_host_hs
275 * usb_phy_cm 292 * usb_phy_cm
@@ -332,6 +349,41 @@ static struct omap_hwmod omap44xx_aess_hwmod = {
332}; 349};
333 350
334/* 351/*
352 * 'c2c' class
353 * chip 2 chip interface used to plug the ape soc (omap) with an external modem
354 * soc
355 */
356
357static struct omap_hwmod_class omap44xx_c2c_hwmod_class = {
358 .name = "c2c",
359};
360
361/* c2c */
362static struct omap_hwmod_irq_info omap44xx_c2c_irqs[] = {
363 { .irq = 88 + OMAP44XX_IRQ_GIC_START },
364 { .irq = -1 }
365};
366
367static struct omap_hwmod_dma_info omap44xx_c2c_sdma_reqs[] = {
368 { .dma_req = 68 + OMAP44XX_DMA_REQ_START },
369 { .dma_req = -1 }
370};
371
372static struct omap_hwmod omap44xx_c2c_hwmod = {
373 .name = "c2c",
374 .class = &omap44xx_c2c_hwmod_class,
375 .clkdm_name = "d2d_clkdm",
376 .mpu_irqs = omap44xx_c2c_irqs,
377 .sdma_reqs = omap44xx_c2c_sdma_reqs,
378 .prcm = {
379 .omap4 = {
380 .clkctrl_offs = OMAP4_CM_D2D_SAD2D_CLKCTRL_OFFSET,
381 .context_offs = OMAP4_RM_D2D_SAD2D_CONTEXT_OFFSET,
382 },
383 },
384};
385
386/*
335 * 'counter' class 387 * 'counter' class
336 * 32-bit ordinary counter, clocked by the falling edge of the 32 khz clock 388 * 32-bit ordinary counter, clocked by the falling edge of the 32 khz clock
337 */ 389 */
@@ -807,6 +859,46 @@ static struct omap_hwmod omap44xx_dss_venc_hwmod = {
807}; 859};
808 860
809/* 861/*
862 * 'elm' class
863 * bch error location module
864 */
865
866static struct omap_hwmod_class_sysconfig omap44xx_elm_sysc = {
867 .rev_offs = 0x0000,
868 .sysc_offs = 0x0010,
869 .syss_offs = 0x0014,
870 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
871 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
872 SYSS_HAS_RESET_STATUS),
873 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
874 .sysc_fields = &omap_hwmod_sysc_type1,
875};
876
877static struct omap_hwmod_class omap44xx_elm_hwmod_class = {
878 .name = "elm",
879 .sysc = &omap44xx_elm_sysc,
880};
881
882/* elm */
883static struct omap_hwmod_irq_info omap44xx_elm_irqs[] = {
884 { .irq = 4 + OMAP44XX_IRQ_GIC_START },
885 { .irq = -1 }
886};
887
888static struct omap_hwmod omap44xx_elm_hwmod = {
889 .name = "elm",
890 .class = &omap44xx_elm_hwmod_class,
891 .clkdm_name = "l4_per_clkdm",
892 .mpu_irqs = omap44xx_elm_irqs,
893 .prcm = {
894 .omap4 = {
895 .clkctrl_offs = OMAP4_CM_L4PER_ELM_CLKCTRL_OFFSET,
896 .context_offs = OMAP4_RM_L4PER_ELM_CONTEXT_OFFSET,
897 },
898 },
899};
900
901/*
810 * 'emif' class 902 * 'emif' class
811 * external memory interface no1 903 * external memory interface no1
812 */ 904 */
@@ -2297,6 +2389,29 @@ static struct omap_hwmod omap44xx_mpu_hwmod = {
2297}; 2389};
2298 2390
2299/* 2391/*
2392 * 'sl2if' class
2393 * shared level 2 memory interface
2394 */
2395
2396static struct omap_hwmod_class omap44xx_sl2if_hwmod_class = {
2397 .name = "sl2if",
2398};
2399
2400/* sl2if */
2401static struct omap_hwmod omap44xx_sl2if_hwmod = {
2402 .name = "sl2if",
2403 .class = &omap44xx_sl2if_hwmod_class,
2404 .clkdm_name = "ivahd_clkdm",
2405 .prcm = {
2406 .omap4 = {
2407 .clkctrl_offs = OMAP4_CM_IVAHD_SL2_CLKCTRL_OFFSET,
2408 .context_offs = OMAP4_RM_IVAHD_SL2_CONTEXT_OFFSET,
2409 .modulemode = MODULEMODE_HWCTRL,
2410 },
2411 },
2412};
2413
2414/*
2300 * 'slimbus' class 2415 * 'slimbus' class
2301 * bidirectional, multi-drop, multi-channel two-line serial interface between 2416 * bidirectional, multi-drop, multi-channel two-line serial interface between
2302 * the device and external components 2417 * the device and external components
@@ -3222,6 +3337,32 @@ static struct omap_hwmod omap44xx_wd_timer3_hwmod = {
3222 * interfaces 3337 * interfaces
3223 */ 3338 */
3224 3339
3340static struct omap_hwmod_addr_space omap44xx_c2c_target_fw_addrs[] = {
3341 {
3342 .pa_start = 0x4a204000,
3343 .pa_end = 0x4a2040ff,
3344 .flags = ADDR_TYPE_RT
3345 },
3346 { }
3347};
3348
3349/* c2c -> c2c_target_fw */
3350static struct omap_hwmod_ocp_if omap44xx_c2c__c2c_target_fw = {
3351 .master = &omap44xx_c2c_hwmod,
3352 .slave = &omap44xx_c2c_target_fw_hwmod,
3353 .clk = "div_core_ck",
3354 .addr = omap44xx_c2c_target_fw_addrs,
3355 .user = OCP_USER_MPU,
3356};
3357
3358/* l4_cfg -> c2c_target_fw */
3359static struct omap_hwmod_ocp_if omap44xx_l4_cfg__c2c_target_fw = {
3360 .master = &omap44xx_l4_cfg_hwmod,
3361 .slave = &omap44xx_c2c_target_fw_hwmod,
3362 .clk = "l4_div_ck",
3363 .user = OCP_USER_MPU | OCP_USER_SDMA,
3364};
3365
3225/* l3_main_1 -> dmm */ 3366/* l3_main_1 -> dmm */
3226static struct omap_hwmod_ocp_if omap44xx_l3_main_1__dmm = { 3367static struct omap_hwmod_ocp_if omap44xx_l3_main_1__dmm = {
3227 .master = &omap44xx_l3_main_1_hwmod, 3368 .master = &omap44xx_l3_main_1_hwmod,
@@ -3248,6 +3389,14 @@ static struct omap_hwmod_ocp_if omap44xx_mpu__dmm = {
3248 .user = OCP_USER_MPU, 3389 .user = OCP_USER_MPU,
3249}; 3390};
3250 3391
3392/* c2c -> emif_fw */
3393static struct omap_hwmod_ocp_if omap44xx_c2c__emif_fw = {
3394 .master = &omap44xx_c2c_hwmod,
3395 .slave = &omap44xx_emif_fw_hwmod,
3396 .clk = "div_core_ck",
3397 .user = OCP_USER_MPU | OCP_USER_SDMA,
3398};
3399
3251/* dmm -> emif_fw */ 3400/* dmm -> emif_fw */
3252static struct omap_hwmod_ocp_if omap44xx_dmm__emif_fw = { 3401static struct omap_hwmod_ocp_if omap44xx_dmm__emif_fw = {
3253 .master = &omap44xx_dmm_hwmod, 3402 .master = &omap44xx_dmm_hwmod,
@@ -3356,6 +3505,14 @@ static struct omap_hwmod_ocp_if omap44xx_mpu__l3_main_1 = {
3356 .user = OCP_USER_MPU, 3505 .user = OCP_USER_MPU,
3357}; 3506};
3358 3507
3508/* c2c_target_fw -> l3_main_2 */
3509static struct omap_hwmod_ocp_if omap44xx_c2c_target_fw__l3_main_2 = {
3510 .master = &omap44xx_c2c_target_fw_hwmod,
3511 .slave = &omap44xx_l3_main_2_hwmod,
3512 .clk = "l3_div_ck",
3513 .user = OCP_USER_MPU | OCP_USER_SDMA,
3514};
3515
3359/* dma_system -> l3_main_2 */ 3516/* dma_system -> l3_main_2 */
3360static struct omap_hwmod_ocp_if omap44xx_dma_system__l3_main_2 = { 3517static struct omap_hwmod_ocp_if omap44xx_dma_system__l3_main_2 = {
3361 .master = &omap44xx_dma_system_hwmod, 3518 .master = &omap44xx_dma_system_hwmod,
@@ -3588,6 +3745,14 @@ static struct omap_hwmod_ocp_if omap44xx_l4_abe__aess_dma = {
3588 .user = OCP_USER_SDMA, 3745 .user = OCP_USER_SDMA,
3589}; 3746};
3590 3747
3748/* l3_main_2 -> c2c */
3749static struct omap_hwmod_ocp_if omap44xx_l3_main_2__c2c = {
3750 .master = &omap44xx_l3_main_2_hwmod,
3751 .slave = &omap44xx_c2c_hwmod,
3752 .clk = "l3_div_ck",
3753 .user = OCP_USER_MPU | OCP_USER_SDMA,
3754};
3755
3591static struct omap_hwmod_addr_space omap44xx_counter_32k_addrs[] = { 3756static struct omap_hwmod_addr_space omap44xx_counter_32k_addrs[] = {
3592 { 3757 {
3593 .pa_start = 0x4a304000, 3758 .pa_start = 0x4a304000,
@@ -3670,6 +3835,14 @@ static struct omap_hwmod_ocp_if omap44xx_dsp__iva = {
3670 .user = OCP_USER_DSP, 3835 .user = OCP_USER_DSP,
3671}; 3836};
3672 3837
3838/* dsp -> sl2if */
3839static struct omap_hwmod_ocp_if omap44xx_dsp__sl2if = {
3840 .master = &omap44xx_dsp_hwmod,
3841 .slave = &omap44xx_sl2if_hwmod,
3842 .clk = "dpll_iva_m5x2_ck",
3843 .user = OCP_USER_DSP,
3844};
3845
3673/* l4_cfg -> dsp */ 3846/* l4_cfg -> dsp */
3674static struct omap_hwmod_ocp_if omap44xx_l4_cfg__dsp = { 3847static struct omap_hwmod_ocp_if omap44xx_l4_cfg__dsp = {
3675 .master = &omap44xx_l4_cfg_hwmod, 3848 .master = &omap44xx_l4_cfg_hwmod,
@@ -3930,6 +4103,24 @@ static struct omap_hwmod_ocp_if omap44xx_l4_per__dss_venc = {
3930 .user = OCP_USER_MPU, 4103 .user = OCP_USER_MPU,
3931}; 4104};
3932 4105
4106static struct omap_hwmod_addr_space omap44xx_elm_addrs[] = {
4107 {
4108 .pa_start = 0x48078000,
4109 .pa_end = 0x48078fff,
4110 .flags = ADDR_TYPE_RT
4111 },
4112 { }
4113};
4114
4115/* l4_per -> elm */
4116static struct omap_hwmod_ocp_if omap44xx_l4_per__elm = {
4117 .master = &omap44xx_l4_per_hwmod,
4118 .slave = &omap44xx_elm_hwmod,
4119 .clk = "l4_div_ck",
4120 .addr = omap44xx_elm_addrs,
4121 .user = OCP_USER_MPU | OCP_USER_SDMA,
4122};
4123
3933static struct omap_hwmod_addr_space omap44xx_emif1_addrs[] = { 4124static struct omap_hwmod_addr_space omap44xx_emif1_addrs[] = {
3934 { 4125 {
3935 .pa_start = 0x4c000000, 4126 .pa_start = 0x4c000000,
@@ -4262,6 +4453,14 @@ static struct omap_hwmod_ocp_if omap44xx_l3_main_2__iss = {
4262 .user = OCP_USER_MPU | OCP_USER_SDMA, 4453 .user = OCP_USER_MPU | OCP_USER_SDMA,
4263}; 4454};
4264 4455
4456/* iva -> sl2if */
4457static struct omap_hwmod_ocp_if omap44xx_iva__sl2if = {
4458 .master = &omap44xx_iva_hwmod,
4459 .slave = &omap44xx_sl2if_hwmod,
4460 .clk = "dpll_iva_m5x2_ck",
4461 .user = OCP_USER_IVA,
4462};
4463
4265static struct omap_hwmod_addr_space omap44xx_iva_addrs[] = { 4464static struct omap_hwmod_addr_space omap44xx_iva_addrs[] = {
4266 { 4465 {
4267 .pa_start = 0x5a000000, 4466 .pa_start = 0x5a000000,
@@ -4682,6 +4881,14 @@ static struct omap_hwmod_ocp_if omap44xx_l4_per__mmc5 = {
4682 .user = OCP_USER_MPU | OCP_USER_SDMA, 4881 .user = OCP_USER_MPU | OCP_USER_SDMA,
4683}; 4882};
4684 4883
4884/* l3_main_2 -> sl2if */
4885static struct omap_hwmod_ocp_if omap44xx_l3_main_2__sl2if = {
4886 .master = &omap44xx_l3_main_2_hwmod,
4887 .slave = &omap44xx_sl2if_hwmod,
4888 .clk = "l3_div_ck",
4889 .user = OCP_USER_MPU | OCP_USER_SDMA,
4890};
4891
4685static struct omap_hwmod_addr_space omap44xx_slimbus1_addrs[] = { 4892static struct omap_hwmod_addr_space omap44xx_slimbus1_addrs[] = {
4686 { 4893 {
4687 .pa_start = 0x4012c000, 4894 .pa_start = 0x4012c000,
@@ -5271,8 +5478,11 @@ static struct omap_hwmod_ocp_if omap44xx_l4_abe__wd_timer3_dma = {
5271}; 5478};
5272 5479
5273static struct omap_hwmod_ocp_if *omap44xx_hwmod_ocp_ifs[] __initdata = { 5480static struct omap_hwmod_ocp_if *omap44xx_hwmod_ocp_ifs[] __initdata = {
5481 &omap44xx_c2c__c2c_target_fw,
5482 &omap44xx_l4_cfg__c2c_target_fw,
5274 &omap44xx_l3_main_1__dmm, 5483 &omap44xx_l3_main_1__dmm,
5275 &omap44xx_mpu__dmm, 5484 &omap44xx_mpu__dmm,
5485 &omap44xx_c2c__emif_fw,
5276 &omap44xx_dmm__emif_fw, 5486 &omap44xx_dmm__emif_fw,
5277 &omap44xx_l4_cfg__emif_fw, 5487 &omap44xx_l4_cfg__emif_fw,
5278 &omap44xx_iva__l3_instr, 5488 &omap44xx_iva__l3_instr,
@@ -5284,6 +5494,7 @@ static struct omap_hwmod_ocp_if *omap44xx_hwmod_ocp_ifs[] __initdata = {
5284 &omap44xx_mmc1__l3_main_1, 5494 &omap44xx_mmc1__l3_main_1,
5285 &omap44xx_mmc2__l3_main_1, 5495 &omap44xx_mmc2__l3_main_1,
5286 &omap44xx_mpu__l3_main_1, 5496 &omap44xx_mpu__l3_main_1,
5497 &omap44xx_c2c_target_fw__l3_main_2,
5287 &omap44xx_dma_system__l3_main_2, 5498 &omap44xx_dma_system__l3_main_2,
5288 &omap44xx_fdif__l3_main_2, 5499 &omap44xx_fdif__l3_main_2,
5289 &omap44xx_gpu__l3_main_2, 5500 &omap44xx_gpu__l3_main_2,
@@ -5308,11 +5519,13 @@ static struct omap_hwmod_ocp_if *omap44xx_hwmod_ocp_ifs[] __initdata = {
5308 &omap44xx_mpu__mpu_private, 5519 &omap44xx_mpu__mpu_private,
5309 &omap44xx_l4_abe__aess, 5520 &omap44xx_l4_abe__aess,
5310 &omap44xx_l4_abe__aess_dma, 5521 &omap44xx_l4_abe__aess_dma,
5522 &omap44xx_l3_main_2__c2c,
5311 &omap44xx_l4_wkup__counter_32k, 5523 &omap44xx_l4_wkup__counter_32k,
5312 &omap44xx_l4_cfg__dma_system, 5524 &omap44xx_l4_cfg__dma_system,
5313 &omap44xx_l4_abe__dmic, 5525 &omap44xx_l4_abe__dmic,
5314 &omap44xx_l4_abe__dmic_dma, 5526 &omap44xx_l4_abe__dmic_dma,
5315 &omap44xx_dsp__iva, 5527 &omap44xx_dsp__iva,
5528 &omap44xx_dsp__sl2if,
5316 &omap44xx_l4_cfg__dsp, 5529 &omap44xx_l4_cfg__dsp,
5317 &omap44xx_l3_main_2__dss, 5530 &omap44xx_l3_main_2__dss,
5318 &omap44xx_l4_per__dss, 5531 &omap44xx_l4_per__dss,
@@ -5328,6 +5541,7 @@ static struct omap_hwmod_ocp_if *omap44xx_hwmod_ocp_ifs[] __initdata = {
5328 &omap44xx_l4_per__dss_rfbi, 5541 &omap44xx_l4_per__dss_rfbi,
5329 &omap44xx_l3_main_2__dss_venc, 5542 &omap44xx_l3_main_2__dss_venc,
5330 &omap44xx_l4_per__dss_venc, 5543 &omap44xx_l4_per__dss_venc,
5544 &omap44xx_l4_per__elm,
5331 &omap44xx_emif_fw__emif1, 5545 &omap44xx_emif_fw__emif1,
5332 &omap44xx_emif_fw__emif2, 5546 &omap44xx_emif_fw__emif2,
5333 &omap44xx_l4_cfg__fdif, 5547 &omap44xx_l4_cfg__fdif,
@@ -5347,6 +5561,7 @@ static struct omap_hwmod_ocp_if *omap44xx_hwmod_ocp_ifs[] __initdata = {
5347 &omap44xx_l4_per__i2c4, 5561 &omap44xx_l4_per__i2c4,
5348 &omap44xx_l3_main_2__ipu, 5562 &omap44xx_l3_main_2__ipu,
5349 &omap44xx_l3_main_2__iss, 5563 &omap44xx_l3_main_2__iss,
5564 &omap44xx_iva__sl2if,
5350 &omap44xx_l3_main_2__iva, 5565 &omap44xx_l3_main_2__iva,
5351 &omap44xx_l4_wkup__kbd, 5566 &omap44xx_l4_wkup__kbd,
5352 &omap44xx_l4_cfg__mailbox, 5567 &omap44xx_l4_cfg__mailbox,
@@ -5370,6 +5585,7 @@ static struct omap_hwmod_ocp_if *omap44xx_hwmod_ocp_ifs[] __initdata = {
5370 &omap44xx_l4_per__mmc3, 5585 &omap44xx_l4_per__mmc3,
5371 &omap44xx_l4_per__mmc4, 5586 &omap44xx_l4_per__mmc4,
5372 &omap44xx_l4_per__mmc5, 5587 &omap44xx_l4_per__mmc5,
5588 &omap44xx_l3_main_2__sl2if,
5373 &omap44xx_l4_abe__slimbus1, 5589 &omap44xx_l4_abe__slimbus1,
5374 &omap44xx_l4_abe__slimbus1_dma, 5590 &omap44xx_l4_abe__slimbus1_dma,
5375 &omap44xx_l4_per__slimbus2, 5591 &omap44xx_l4_per__slimbus2,
diff --git a/arch/arm/plat-omap/include/plat/omap_hwmod.h b/arch/arm/plat-omap/include/plat/omap_hwmod.h
index 14dde32cd40..c835b7194ff 100644
--- a/arch/arm/plat-omap/include/plat/omap_hwmod.h
+++ b/arch/arm/plat-omap/include/plat/omap_hwmod.h
@@ -214,6 +214,7 @@ struct omap_hwmod_addr_space {
214#define OCP_USER_MPU (1 << 0) 214#define OCP_USER_MPU (1 << 0)
215#define OCP_USER_SDMA (1 << 1) 215#define OCP_USER_SDMA (1 << 1)
216#define OCP_USER_DSP (1 << 2) 216#define OCP_USER_DSP (1 << 2)
217#define OCP_USER_IVA (1 << 3)
217 218
218/* omap_hwmod_ocp_if.flags bits */ 219/* omap_hwmod_ocp_if.flags bits */
219#define OCPIF_SWSUP_IDLE (1 << 0) 220#define OCPIF_SWSUP_IDLE (1 << 0)