1 /*
2 * Copyright (c) 2012-2014, Texas Instruments Incorporated
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 *
12 * * Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
15 *
16 * * Neither the name of Texas Instruments Incorporated nor the names of
17 * its contributors may be used to endorse or promote products derived
18 * from this software without specific prior written permission.
19 *
20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
22 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
24 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
27 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
28 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
29 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
30 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 *
32 */
34 /*
35 * ======== DehDsp.c ========
36 *
37 */
39 #include <xdc/runtime/System.h>
40 #include <xdc/runtime/Startup.h>
42 #include <ti/sysbios/BIOS.h>
43 #if defined(HAS_AMMU)
44 #include <ti/sysbios/hal/ammu/AMMU.h>
45 #endif
46 #include <ti/sysbios/family/c64p/Hwi.h>
47 #include <ti/sysbios/family/c64p/Exception.h>
49 #include <ti/ipc/MultiProc.h>
50 #include <ti/deh/Watchdog.h>
52 #include "package/internal/Deh.xdc.h"
54 /*
55 * ======== Deh_Module_startup ========
56 *
57 * Uses SYS/BIOS Exception handler function for Hwi-based Watchdog ISR.
58 * This is used in order to cause the Watchdog expiration to appear like
59 * an exception, but since Exception_handler() is not called from the
60 * exception dispatcher (Hwi 1, NMI vector) the register and stack
61 * information that is printed is not valid (all zeroes for my runs).
62 * And we can't just plug the exception dispatcher into an Hwi, since it
63 * looks for an actual exception status and returns immediately (through
64 * NRP, which wasn't set for an Hwi) when no real exception is seen.
65 */
66 Int Deh_Module_startup(Int phase)
67 {
68 #if defined(HAS_AMMU)
69 if (AMMU_Module_startupDone() == TRUE) {
70 Watchdog_init((Void (*)(Void))ti_sysbios_family_c64p_Exception_handler);
71 return Startup_DONE;
72 }
74 return Startup_NOTDONE;
75 #else
76 Watchdog_init((Void (*)(Void))ti_sysbios_family_c64p_Exception_handler);
78 return Startup_DONE;
79 #endif
80 }
82 /*
83 * ======== Deh_idleBegin ========
84 */
85 Void Deh_idleBegin(Void)
86 {
87 Watchdog_idleBegin();
88 }
90 /*
91 * ======== Deh_excHandlerDsp ========
92 * Read data from exception handler and print it to crash dump buffer
93 */
94 Void Deh_excHandlerDsp()
95 {
96 Exception_Status excStatus;
97 Exception_getLastStatus(&excStatus);
98 memcpy(module->outbuf, excStatus.excContext, sizeof(*excStatus.excContext));
100 System_abort("Terminating execution...\n");
101 }