diff options
author | Amaury Pouly <amaury.pouly@gmail.com> | 2014-02-02 04:29:22 +0100 |
---|---|---|
committer | Amaury Pouly <amaury.pouly@gmail.com> | 2014-02-10 23:14:24 +0100 |
commit | 91a8cd1ae9ebac9cf6a6fa1623873d22c87375d8 (patch) | |
tree | 207399745b3857303e736b5aafa5781c4d6e116f /firmware | |
parent | f7efa925fd570f87e3fb04a7f776a9130953f366 (diff) | |
download | rockbox-91a8cd1ae9ebac9cf6a6fa1623873d22c87375d8.tar.gz rockbox-91a8cd1ae9ebac9cf6a6fa1623873d22c87375d8.zip |
imx233: add code to debug menu to check nested IRQ actually work
Change-Id: I6b51e89222efa868c03944fc37bcc9f382853be1
Diffstat (limited to 'firmware')
-rw-r--r-- | firmware/target/arm/imx233/debug-imx233.c | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/firmware/target/arm/imx233/debug-imx233.c b/firmware/target/arm/imx233/debug-imx233.c index 1069c9ceaa..4da6985cc9 100644 --- a/firmware/target/arm/imx233/debug-imx233.c +++ b/firmware/target/arm/imx233/debug-imx233.c | |||
@@ -483,10 +483,51 @@ bool dbg_hw_info_dcp(void) | |||
483 | } | 483 | } |
484 | #endif | 484 | #endif |
485 | 485 | ||
486 | /** Nested IRQ check code */ | ||
487 | void INT_SOFTWARE(unsigned nr) | ||
488 | { | ||
489 | imx233_icoll_force_irq(INT_SRC_SOFTWARE(nr), false); | ||
490 | HW_DIGCTL_SCRATCH0 = nr; | ||
491 | if(nr < 3) | ||
492 | { | ||
493 | imx233_icoll_force_irq(INT_SRC_SOFTWARE(nr + 1), true); | ||
494 | udelay(10); | ||
495 | if(HW_DIGCTL_SCRATCH0 == nr) | ||
496 | panicf("Nestes IRQ bug (%d)", nr); | ||
497 | } | ||
498 | } | ||
499 | |||
500 | void INT_SOFTWARE0(void) { INT_SOFTWARE(0); } | ||
501 | void INT_SOFTWARE1(void) { INT_SOFTWARE(1); } | ||
502 | void INT_SOFTWARE2(void) { INT_SOFTWARE(2); } | ||
503 | void INT_SOFTWARE3(void) { INT_SOFTWARE(3); } | ||
504 | |||
505 | static void check_nested_irq(void) | ||
506 | { | ||
507 | /* Test protocol: setup SOFTWAREn IRQ as level n and apply: | ||
508 | * - enable SOFTWARE0 and soft IRQ'it | ||
509 | * - in SOFTWAREn, enable SOFTWARE(n+1) and soft IRQ'it, check it ran | ||
510 | */ | ||
511 | for(int i = 0; i < 4; i++) | ||
512 | { | ||
513 | imx233_icoll_enable_interrupt(INT_SRC_SOFTWARE(i), true); | ||
514 | imx233_icoll_set_priority(INT_SRC_SOFTWARE(i), i); | ||
515 | } | ||
516 | HW_DIGCTL_SCRATCH0 = 0; | ||
517 | imx233_icoll_force_irq(INT_SRC_SOFTWARE(0), true); | ||
518 | udelay(100); | ||
519 | if(HW_DIGCTL_SCRATCH0 != 3) | ||
520 | panicf("Nested IRQ broken (%lu)", HW_DIGCTL_SCRATCH0); | ||
521 | for(int i = 0; i < 4; i++) | ||
522 | imx233_icoll_enable_interrupt(INT_SRC_SOFTWARE(i), false); | ||
523 | } | ||
524 | |||
486 | bool dbg_hw_info_icoll(void) | 525 | bool dbg_hw_info_icoll(void) |
487 | { | 526 | { |
488 | lcd_setfont(FONT_SYSFIXED); | 527 | lcd_setfont(FONT_SYSFIXED); |
489 | 528 | ||
529 | check_nested_irq(); | ||
530 | |||
490 | int first_irq = 0; | 531 | int first_irq = 0; |
491 | int dbg_irqs_count = sizeof(dbg_irqs) / sizeof(dbg_irqs[0]); | 532 | int dbg_irqs_count = sizeof(dbg_irqs) / sizeof(dbg_irqs[0]); |
492 | int line_count = lcd_getheight() / font_get(lcd_getfont())->height; | 533 | int line_count = lcd_getheight() / font_get(lcd_getfont())->height; |