diff options
author | Afzal Mohammed <afzal@ti.com> | 2013-12-02 07:18:57 -0500 |
---|---|---|
committer | Nishanth Menon <nm@ti.com> | 2014-05-05 15:34:37 -0400 |
commit | 27b7d5f3cc49f2e5cd6c005d73696058b7140c5c (patch) | |
tree | d8a8eb65bf9b001471aa4bddf87542683b07455e /drivers/bus | |
parent | 53a848be0a65c6fb105eb5ecb8b8b3edfa0f91ad (diff) |
bus: omap_l3_noc: Add AM4372 interconnect error data
Add AM4372 information to handle L3 error.
AM4372 has two clk domains 100f and 200s. Provide flagmux and data
associated with it.
NOTE: Timeout doesn't have STDERRLOG_MAIN register. And per hardware
team, L3 timeout error cannot be cleared the normal way (by setting
bit 31 in STDERRLOG_MAIN), instead it may be required to do system
reset. L3 error handler can't help in such scenarios.
Hence indicate timeout target offset as L3_TARGET_NOT_SUPPORTED as
done for undocumented bits.
Signed-off-by: Dave Gerlach <d-gerlach@ti.com>
Signed-off-by: Afzal Mohammed <afzal@ti.com>
Signed-off-by: Sekhar Nori <nsekhar@ti.com>
Signed-off-by: Nishanth Menon <nm@ti.com>
Acked-by: Santosh Shilimkar <santosh.shilimkar@ti.com>
Acked-by: Peter Ujfalusi <peter.ujfalusi@ti.com>
Tested-by: Darren Etheridge <detheridge@ti.com>
Tested-by: Sekhar Nori <nsekhar@ti.com>
Diffstat (limited to 'drivers/bus')
-rw-r--r-- | drivers/bus/omap_l3_noc.c | 1 | ||||
-rw-r--r-- | drivers/bus/omap_l3_noc.h | 91 |
2 files changed, 92 insertions, 0 deletions
diff --git a/drivers/bus/omap_l3_noc.c b/drivers/bus/omap_l3_noc.c index 6cdd02ef0909..531ae591783b 100644 --- a/drivers/bus/omap_l3_noc.c +++ b/drivers/bus/omap_l3_noc.c | |||
@@ -231,6 +231,7 @@ static irqreturn_t l3_interrupt_handler(int irq, void *_l3) | |||
231 | static const struct of_device_id l3_noc_match[] = { | 231 | static const struct of_device_id l3_noc_match[] = { |
232 | {.compatible = "ti,omap4-l3-noc", .data = &omap_l3_data}, | 232 | {.compatible = "ti,omap4-l3-noc", .data = &omap_l3_data}, |
233 | {.compatible = "ti,dra7-l3-noc", .data = &dra_l3_data}, | 233 | {.compatible = "ti,dra7-l3-noc", .data = &dra_l3_data}, |
234 | {.compatible = "ti,am4372-l3-noc", .data = &am4372_l3_data}, | ||
234 | {}, | 235 | {}, |
235 | }; | 236 | }; |
236 | MODULE_DEVICE_TABLE(of, l3_noc_match); | 237 | MODULE_DEVICE_TABLE(of, l3_noc_match); |
diff --git a/drivers/bus/omap_l3_noc.h b/drivers/bus/omap_l3_noc.h index 9562a75259c8..551e01061434 100644 --- a/drivers/bus/omap_l3_noc.h +++ b/drivers/bus/omap_l3_noc.h | |||
@@ -381,4 +381,95 @@ static const struct omap_l3 dra_l3_data = { | |||
381 | .mst_addr_mask = 0xFC, | 381 | .mst_addr_mask = 0xFC, |
382 | }; | 382 | }; |
383 | 383 | ||
384 | /* AM4372 data */ | ||
385 | static struct l3_target_data am4372_l3_target_data_200f[] = { | ||
386 | {0xf00, "EMIF",}, | ||
387 | {0x1200, "DES",}, | ||
388 | {0x400, "OCMCRAM",}, | ||
389 | {0x700, "TPTC0",}, | ||
390 | {0x800, "TPTC1",}, | ||
391 | {0x900, "TPTC2"}, | ||
392 | {0xb00, "TPCC",}, | ||
393 | {0xd00, "DEBUGSS",}, | ||
394 | {0xdead, L3_TARGET_NOT_SUPPORTED,}, | ||
395 | {0x200, "SHA",}, | ||
396 | {0xc00, "SGX530",}, | ||
397 | {0x500, "AES0",}, | ||
398 | {0xa00, "L4_FAST",}, | ||
399 | {0x300, "MPUSS_L2_RAM",}, | ||
400 | {0x100, "ICSS",}, | ||
401 | }; | ||
402 | |||
403 | static struct l3_flagmux_data am4372_l3_flagmux_200f = { | ||
404 | .offset = 0x1000, | ||
405 | .l3_targ = am4372_l3_target_data_200f, | ||
406 | .num_targ_data = ARRAY_SIZE(am4372_l3_target_data_200f), | ||
407 | }; | ||
408 | |||
409 | static struct l3_target_data am4372_l3_target_data_100s[] = { | ||
410 | {0x100, "L4_PER_0",}, | ||
411 | {0x200, "L4_PER_1",}, | ||
412 | {0x300, "L4_PER_2",}, | ||
413 | {0x400, "L4_PER_3",}, | ||
414 | {0x800, "McASP0",}, | ||
415 | {0x900, "McASP1",}, | ||
416 | {0xC00, "MMCHS2",}, | ||
417 | {0x700, "GPMC",}, | ||
418 | {0xD00, "L4_FW",}, | ||
419 | {0xdead, L3_TARGET_NOT_SUPPORTED,}, | ||
420 | {0x500, "ADCTSC",}, | ||
421 | {0xE00, "L4_WKUP",}, | ||
422 | {0xA00, "MAG_CARD",}, | ||
423 | }; | ||
424 | |||
425 | static struct l3_flagmux_data am4372_l3_flagmux_100s = { | ||
426 | .offset = 0x600, | ||
427 | .l3_targ = am4372_l3_target_data_100s, | ||
428 | .num_targ_data = ARRAY_SIZE(am4372_l3_target_data_100s), | ||
429 | }; | ||
430 | |||
431 | static struct l3_masters_data am4372_l3_masters[] = { | ||
432 | { 0x0, "M1 (128-bit)"}, | ||
433 | { 0x1, "M2 (64-bit)"}, | ||
434 | { 0x4, "DAP"}, | ||
435 | { 0x5, "P1500"}, | ||
436 | { 0xC, "ICSS0"}, | ||
437 | { 0xD, "ICSS1"}, | ||
438 | { 0x14, "Wakeup Processor"}, | ||
439 | { 0x18, "TPTC0 Read"}, | ||
440 | { 0x19, "TPTC0 Write"}, | ||
441 | { 0x1A, "TPTC1 Read"}, | ||
442 | { 0x1B, "TPTC1 Write"}, | ||
443 | { 0x1C, "TPTC2 Read"}, | ||
444 | { 0x1D, "TPTC2 Write"}, | ||
445 | { 0x20, "SGX530"}, | ||
446 | { 0x21, "OCP WP Traffic Probe"}, | ||
447 | { 0x22, "OCP WP DMA Profiling"}, | ||
448 | { 0x23, "OCP WP Event Trace"}, | ||
449 | { 0x25, "DSS"}, | ||
450 | { 0x28, "Crypto DMA RD"}, | ||
451 | { 0x29, "Crypto DMA WR"}, | ||
452 | { 0x2C, "VPFE0"}, | ||
453 | { 0x2D, "VPFE1"}, | ||
454 | { 0x30, "GEMAC"}, | ||
455 | { 0x34, "USB0 RD"}, | ||
456 | { 0x35, "USB0 WR"}, | ||
457 | { 0x36, "USB1 RD"}, | ||
458 | { 0x37, "USB1 WR"}, | ||
459 | }; | ||
460 | |||
461 | static struct l3_flagmux_data *am4372_l3_flagmux[] = { | ||
462 | &am4372_l3_flagmux_200f, | ||
463 | &am4372_l3_flagmux_100s, | ||
464 | }; | ||
465 | |||
466 | static const struct omap_l3 am4372_l3_data = { | ||
467 | .l3_flagmux = am4372_l3_flagmux, | ||
468 | .num_modules = ARRAY_SIZE(am4372_l3_flagmux), | ||
469 | .l3_masters = am4372_l3_masters, | ||
470 | .num_masters = ARRAY_SIZE(am4372_l3_masters), | ||
471 | /* All 6 bits of register field used to distinguish initiator */ | ||
472 | .mst_addr_mask = 0x3F, | ||
473 | }; | ||
474 | |||
384 | #endif /* __OMAP_L3_NOC_H */ | 475 | #endif /* __OMAP_L3_NOC_H */ |