1 /**
2 * @file fault_mgmt.h
3 *
4 * @brief
5 * Header file for the Fault Management library. The file exposes the
6 * data structures and exported API which are available for use by
7 * applications.
8 *
9 * \par
10 * NOTE:
11 * (C) Copyright 2012-2014 Texas Instruments, Inc.
12 *
13 * Redistribution and use in source and binary forms, with or without
14 * modification, are permitted provided that the following conditions
15 * are met:
16 *
17 * Redistributions of source code must retain the above copyright
18 * notice, this list of conditions and the following disclaimer.
19 *
20 * Redistributions in binary form must reproduce the above copyright
21 * notice, this list of conditions and the following disclaimer in the
22 * documentation and/or other materials provided with the
23 * distribution.
24 *
25 * Neither the name of Texas Instruments Incorporated nor the names of
26 * its contributors may be used to endorse or promote products derived
27 * from this software without specific prior written permission.
28 *
29 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
30 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
31 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
32 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
33 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
34 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
35 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
36 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
37 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
38 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
39 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
40 *
41 */
43 /** @mainpage Fault Management Module
44 *
45 * @section intro Introduction
46 *
47 * The Fault Management Module can be used to save DSP state and notify the Host
48 * when an exception occurs. The module's APIs provide the following specific
49 * functionalities:
50 * - Notification of a local DSP core fault on all remote DSP cores through
51 * manual fault generation on remote DSP cores via the remote core's NMI.
52 * - ARM notification of a DSP core fault
53 * - Halting of all hardware data transfer mechanisms
54 * - Ability to exclude resources from the halt capability in case
55 * something the like the Linux kernel must continue to run after
56 * the DSP fault causes the IO halt code to execute.
57 * - Saving of system core register status. The register status can be used
58 * in a core dump to extract information as to where and how the exception
59 * occurred.
60 * - Cleanup of DSP peripherals after a DSP application crash. The peripheral
61 * resources can be excluded so that any resources used by another core
62 * (ARM Linux for example) will not be part of the cleanup process. The
63 * cleanup allows a DSP application to be reloaded to the DSP cores after
64 * exception without a hard or soft reset of the board. Only a DSP local
65 * reset is needed on all DSP cores..
66 *
67 * The IO halt feature currently allows disabling of the following IO
68 * - All CPDMA transmit and receive channels
69 * - AIF PE (transmit) and PD (receive) channels
70 * - SGMII
71 * - EDMA3 DMA, QDMA, and INT channels
72 *
73 * The exception APIs can be called from a system exception context in
74 * order to completely stop all data transfer, to preserve system crash state, and
75 * then notify all remote DSP cores and the ARM of an exception.
76 *
77 *
78 * The cleanup API is only available for TCI6614 devices
79 *
80 * The cleanup API is called from a standalone DSP application loaded onto a DSP
81 * core after an exception has occurred and a DSP local reset is performed. The
82 * fault management library provides the standalone DSP application in the
83 * fault_mgmt/util directory. On the Linux side the dsp_cleanup.sh script can be
84 * found at /sbin/dsp_cleanup.sh. The prebuilt cleanup utility can be copied
85 * into the Linux filesystem and executed using the dsp_cleanup.sh script. The
86 * script will handle the reset of DSPs and loading of the cleanup utility via
87 * remoteproc. Executing the dsp_cleanup.sh script with no input parameters
88 * will list the help. The cleanup utility will not clean a single DSP. It
89 * assumed all DSPs will be reloaded once the cleanup is complete.
90 *
91 * The cleanup API performs the following actions when cleanup for each of the
92 * following peripherals is enabled:
93 * - CPPI: Resets CPDMA tx channels, rx channels, and rx flows
94 * - QMSS: Disables QMSS accumulator channels and clears any pending
95 * accumulator channel INTD interrupts. Resets memory
96 * regions. Empties all QMSS queues. Queues owned by
97 * Linux are swept of all descriptors that originate
98 * from memory regions inserted by a DSP application
99 * - PA: Redownloads firmware for PDSPs 1-5. Resets LUT2. Delets
100 * all entries in LUT10 inserted by DSP. Resets PA global
101 * config to default values
102 * - EDMA3: Disables DMA channels and clears the primary and secondary
103 * channel events. Disables QDMA channels and clears primary
104 * and secondary events. Disables interrupts and clears
105 * pending events
106 * - AIF2: Resets AIF and powers down the AIF2 via the PSC
107 * - TCP3D: Powers down TCP3D A & B via the PSC
108 * - BCP: Powers down BCP via the PSC
109 * - FFTC: Powers down FFTC A & B via the PSC
110 * - VCP: Powers down the VCP via the PSC
111 * - SA: Clears the security context cache
112 * - CIC: Removes all CPINTC system to host interrupt mappings
113 * whose host interrupt is routed to the DSP. Clears all
114 * pending CPINTC events.
115 * - Timers: Disables and resets timers.
116 * - Semaphores: Soft resets semaphores
117 *
118 * The fault_mgmt/device/[platform]/fm_device.c contains the FM global configuration
119 * parameters and the exclusion list for the device. The global config list
120 * contains device peripheral information that could not be extracted from
121 * CSL or externally-visible LLD APIs. The exclusion list contains peripherals
122 * resources that are in use by Linux. These resources will not be halted or
123 * cleaned up when the IO halt and cleanup APIs are called, respectively.
124 *
125 */
127 /** @defgroup FAULT_MGMT_API Fault Management
128 */
130 #ifndef __FAULT_MGMT_H__
131 #define __FAULT_MGMT_H__
133 /* Standard includes */
134 #include <stdint.h>
136 /* CSL RL includes */
137 #include <ti/csl/cslr_cpintc.h>
138 #include <ti/csl/cslr_tmr.h>
140 #ifdef __cplusplus
141 extern "C" {
142 #endif
144 /**
145 @defgroup FAULT_MGMT_SYMBOL Fault Management Defined Symbols
146 @ingroup FAULT_MGMT_API
147 */
148 /**
149 @defgroup FAULT_MGMT_FUNCTION Fault Management Functions
150 @ingroup FAULT_MGMT_API
151 */
152 /**
153 @defgroup FAULT_MGMT_DATA_STRUCTURE Fault Management Data Structures
154 @ingroup FAULT_MGMT_API
155 */
156 /**
157 @defgroup FAULT_MGMT_OSAL_API Fault Management OSAL API
158 @ingroup FAULT_MGMT_API
159 */
161 /** @addtogroup FAULT_MGMT_SYMBOL
162 @{ */
164 /* FM return and error codes */
165 /** FM successful return code */
166 #define FM_OK 0
168 #if (!defined(DEVICE_K2H) && !defined(DEVICE_K2K) && !defined(DEVICE_K2L) && !defined(DEVICE_K2E))
169 /** FM fault cleanup successful return code */
170 #define FM_FAULT_CLEANUP_OK 1
172 /** FM fault cleanup status base */
173 #define FM_STATUS_BASE 64
174 /** FM fault cleanup process is being initialized */
175 #define FM_STATUS_CLEANUP_INITIALIZATION (FM_STATUS_BASE+1)
176 /** FM fault cleanup process has entered CPDMA cleanup */
177 #define FM_STATUS_CLEANUP_CPDMA (FM_STATUS_BASE+2)
178 /** FM fault cleanup process has entered QMSS accumulator cleanup */
179 #define FM_STATUS_CLEANUP_QMSS_ACCUM (FM_STATUS_BASE+3)
180 /** FM fault cleanup process has entered PA cleanup */
181 #define FM_STATUS_CLEANUP_PA (FM_STATUS_BASE+4)
182 /** FM fault cleanup process has entered EDMA3 cleanup */
183 #define FM_STATUS_CLEANUP_EDMA3 (FM_STATUS_BASE+5)
184 /** FM fault cleanup process has entered semaphore cleanup */
185 #define FM_STATUS_CLEANUP_SEMAPHORE (FM_STATUS_BASE+6)
186 /** FM fault cleanup process has entered QMSS queue cleanup */
187 #define FM_STATUS_CLEANUP_QMSS_QUEUE (FM_STATUS_BASE+7)
188 /** FM fault cleanup process has entered AIF2 cleanup */
189 #define FM_STATUS_CLEANUP_AIF2 (FM_STATUS_BASE+8)
190 /** FM fault cleanup process has entered TCP3D cleanup */
191 #define FM_STATUS_CLEANUP_TCP3D (FM_STATUS_BASE+9)
192 /** FM fault cleanup process has entered BCP cleanup */
193 #define FM_STATUS_CLEANUP_BCP (FM_STATUS_BASE+10)
194 /** FM fault cleanup process has entered FFTC cleanup */
195 #define FM_STATUS_CLEANUP_FFTC (FM_STATUS_BASE+11)
196 /** FM fault cleanup process has entered VCP cleanup */
197 #define FM_STATUS_CLEANUP_VCP (FM_STATUS_BASE+12)
198 /** FM fault cleanup process has entered SA cleanup */
199 #define FM_STATUS_CLEANUP_SA (FM_STATUS_BASE+13)
200 /** FM fault cleanup process has entered CIC cleanup */
201 #define FM_STATUS_CLEANUP_CIC (FM_STATUS_BASE+14)
202 /** FM fault cleanup process has entered Timer cleanup */
203 #define FM_STATUS_CLEANUP_TIMER (FM_STATUS_BASE+15)
204 #endif /* !(K2H && K2K && K2L && K2E) */
206 /** FM error base */
207 #define FM_ERROR_BASE (-64)
208 /** EDMA3 initialization failed during io halt initialization */
209 #define FM_ERROR_EDMA3_INIT_FAILED (FM_ERROR_BASE-1)
210 /** CPPI initialization failed during io halt or fault cleanup */
211 #define FM_ERROR_CPPI_INIT_FAILED (FM_ERROR_BASE-2)
212 /** QMSS initialization failed during io halt or fault cleanup */
213 #define FM_ERROR_QMSS_INIT_FAILED (FM_ERROR_BASE-3)
214 /** PA initialization failed during fault cleanup */
215 #define FM_ERROR_PA_INIT_FAILED (FM_ERROR_BASE-4)
216 /** An exclusion list entry's specified CPDMA type is incorrect based on
217 * fmGblCfgParams */
218 #define FM_ERROR_INVALID_CPDMA_IN_EXCLUSION_LIST (FM_ERROR_BASE-5)
219 /** An exclusion list entry's specified EDMA3 CC number is incorrect based on
220 * fmGblCfgParams */
221 #define FM_ERROR_INVALID_EDMA3_CC_IN_EXCLUSION_LIST (FM_ERROR_BASE-6)
222 /** An exclusion list entry's specified LUT number is incorrect based on
223 * fmGblCfgParams */
224 #define FM_ERROR_INVALID_LUT_IN_EXCLUSION_LIST (FM_ERROR_BASE-7)
225 /** Could not continue with cleanup because cleanup initialization did not
226 * complete */
227 #define FM_ERROR_CLEANUP_INIT_NOT_COMPLETE (FM_ERROR_BASE-8)
228 /** PA's command response indicated a LUT1 index could not be removed */
229 #define FM_ERROR_LUT1_INDEX_NOT_REMOVED (FM_ERROR_BASE-9)
230 /** CPPI initialization failed during the PA cleanup process */
231 #define FM_ERROR_CPPI_INIT_FAILED_DURING_PA_RECOV (FM_ERROR_BASE-10)
232 /** QMSS initialization failed during the PA cleanup process */
233 #define FM_ERROR_QMSS_INIT_FAILED_DURING_PA_RECOV (FM_ERROR_BASE-11)
234 /** CPPI channel that is to be disabled is invalid */
235 #define FM_ERROR_CPPI_TX_CHANNEL_INVALID (FM_ERROR_BASE-13)
236 /** Pa_control returned error when creating the command needed to reset
237 * the PA global configuration to default values */
238 #define FM_ERROR_PASS_SETTING_DEF_GLBL_CMD (FM_ERROR_BASE-14)
239 /** The command sent to PA to reset the global configuration failed */
240 #define FM_ERROR_PASS_GBL_DEF_CFG_NOT_SET (FM_ERROR_BASE-15)
241 /** Pa_control returned error when creating the command needed to reset
242 * the PA nat-t global configuration to default values */
243 #define FM_ERROR_PASS_SETTING_DEF_NATT_CMD (FM_ERROR_BASE-16)
244 /** The command sent to PA to reset the nat-t global configuration failed */
245 #define FM_ERROR_PASS_NATT_DEF_CFG_NOT_SET (FM_ERROR_BASE-17)
246 /** The monolithic descriptor buffer is not large enough to fit the
247 * LUT entry delete or reset global configuration commands sent to PA */
248 #define FM_ERROR_DESC_BUF_TOO_SMALL (FM_ERROR_BASE-18)
249 /** An exclusion list entry's specified CIC number is incorrect based on
250 * fmGblCfgParams */
251 #define FM_ERROR_INVALID_CIC_IN_EXCLUSION_LIST (FM_ERROR_BASE-19)
252 /** An exclusion list entry's specified Timer range is incorrect based on
253 * fmGblCfgParams */
254 #define FM_ERROR_INVALID_TIMER_IN_EXCLUSION_LIST (FM_ERROR_BASE-20)
255 /** Accumulator channel specified during INTD cleanup is not within the
256 * highAccum or loAccum ranges defined within the fmGblCfgParams */
257 #define FM_ERROR_INVALID_ACCUM_CH (FM_ERROR_BASE-21)
259 /**
260 * @brief
261 * Size of data section used by fault management library to store coredump data that is to be
262 * sent to ARM. The section size must be pre-defined at compile time since Linux Remoteproc
263 * must know the FM's coredump region location and size at the time of DSP image download.
264 */
265 #define FAULT_MGMT_DATA_SIZE 1024
267 /**
268 @}
269 */
271 /** @addtogroup FAULT_MGMT_DATA_STRUCTURE
272 @{ */
274 /**********************************************************************
275 ****************** EXPORTED DATA STRUCTURES **************************
276 **********************************************************************/
278 /**
279 * @brief
280 * This is the memory used by the fault management library to store any data that will be
281 * sent to the fault handling module. The region location must be pre-defined at compile time
282 * since the Linux DSP image downloader must know the FM's data dump region location and size
283 * at the time of download.
284 *
285 * The fault_mgmt_data section is placed in the ".crash" data section. The linker must place
286 * ".crash" section in memory visible to the ARM.
287 */
288 extern uint8_t fault_mgmt_data[FAULT_MGMT_DATA_SIZE];
290 #if (!defined(DEVICE_K2H) && !defined(DEVICE_K2K) && !defined(DEVICE_K2L) && !defined(DEVICE_K2E))
291 /**
292 * @brief
293 * First 32-bit word is used by FM cleanup code to report cleanup status to Host
294 */
295 extern int32_t fmCleanupStatus[32];
296 #endif /* !(K2H && K2K && K2L && K2E) */
298 /**********************************************************************
299 **************************** EXPORTED API ****************************
300 **********************************************************************/
302 /**
303 * @brief Fault Management return code.
304 */
305 typedef int32_t Fm_Result;
307 /**
308 * @brief Accumulator channel range
309 */
310 typedef struct {
311 /* Accumulator channel index start */
312 uint32_t start;
313 /* Accumulator channel index end */
314 uint32_t end;
315 } Fm_AccumChRange;
317 /**
318 * @brief CIC parameter structure containing information about each
319 * CIC on the device. A pointer to an array of these structures
320 * equal to the number of CICs on the device should be passed
321 * as part of the fmGlobalConfigParams structure.
322 */
323 typedef struct {
324 /** Pointer to the CIC's register base address */
325 volatile CSL_CPINTCRegs *cicRegs;
326 /** Input system events or interrupts */
327 uint32_t maxNumSysInt;
328 /** Output host events or inputerrupts */
329 uint32_t maxNumHostInt;
330 } Fm_CicParams;
332 /**
333 * @brief Timer parameter structure containing information about each
334 * Timer on the device. A pointer to an array of these structures
335 * equal to the number of Timers on the device should be passed
336 * as part of the fmGlobalConfigParams structure.
337 */
338 typedef struct {
339 /** Pointer to the Timer's register base address */
340 volatile CSL_TmrRegs *timerRegs;
341 } Fm_TimerParams;
343 /**
344 * @brief Fault Management global configuration structure
345 */
346 typedef struct {
347 /** Number of device cores to notify on exception */
348 uint32_t maxNumCores;
349 /** Number of EDMA3 CCs */
350 uint32_t maxEdma3Cc;
351 /** Max number of AIF PE (TX) channels */
352 uint32_t maxAifPeCh;
353 /** Max number of AIF PD (RX) channels */
354 uint32_t maxAifPdCh;
355 /** Max number of QMSS accumulator channels */
356 uint32_t maxQmssAccumCh;
357 /** High priority accumulator channels */
358 Fm_AccumChRange highAccum;
359 /** Low priority accumulator channels */
360 Fm_AccumChRange loAccum;
361 /** Max number of PA PDSPs */
362 uint32_t maxPaPdsps;
363 /** Max number of PA LUT1 entries */
364 uint32_t maxLut1Entries;
365 /** Number of CICs on device */
366 uint32_t maxCic;
367 /** Pointer to list of CIC param structures. One param structure
368 * per CIC */
369 Fm_CicParams *cicParams;
370 /** Number of Timers on device */
371 uint32_t maxTimers;
372 /** Pointer to list of timer param structures. One param structure
373 * per timers */
374 Fm_TimerParams *timerParams;
375 } Fm_GlobalConfigParams;
377 /**
378 * @brief IO halt resource exclusion types
379 */
380 typedef enum {
381 /** CPDMA RX channel */
382 Fm_res_CpdmaRxCh = 0,
383 /** CPDMA TX channel */
384 Fm_res_CpdmaTxCh,
385 /** CPDMA RX flow */
386 Fm_res_CpdmaRxFlow,
387 /** AIF PE (TX) channel */
388 Fm_res_AifPeCh,
389 /** AIF PD (RX) channel */
390 Fm_res_AifPdCh,
391 /** EDMA3 DMA channel */
392 Fm_res_Edma3DmaCh,
393 /** EDMA3 QDMA channel */
394 Fm_res_Edma3QdmaCh,
395 /** EDMA3 INT channel */
396 Fm_res_Edma3IntCh,
397 /** QMSS Accumulator channels */
398 Fm_res_QmssAccumCh,
399 /** QMSS Queues */
400 Fm_res_QmssQueue,
401 /** QMSS Memory Regions */
402 Fm_res_QmssMemRegion,
403 /** PA PDSPs */
404 Fm_res_PaPdsp,
405 /** PA LUT Entries */
406 Fm_res_PaLutEntry,
407 /** Chip Interrupt Controller Host interrupts */
408 Fm_res_CicHostInt,
409 /** Timers */
410 Fm_res_Timer,
411 /** End of exclusion array identifier */
412 Fm_res_END
413 } Fm_ResType;
415 /**
416 * @brief IO halt resource peripheral resource exclusion range
417 */
418 typedef struct {
419 /** Range start for which exclusion will apply */
420 int32_t exStart;
421 /** Range end for which exclusion will apply */
422 int32_t exEnd;
423 } Fm_ExRange;
425 /**
426 * @brief Describes a resource range that will be excluded from
427 * the halt logic in the Fault_Mgmt_haltIoProcessing API
428 */
429 typedef struct {
430 /** Defines the type of resource to be excluded */
431 Fm_ResType resType;
432 /** Peripheral resources exclusion range */
433 Fm_ExRange exRange;
434 /** Excluded resource's extra parsing info as described below:
435 * #Fm_res_CpdmaRxCh
436 * #Fm_res_CpdmaTxCh
437 * #Fm_res_CpdmaRxFlow
438 * - Maps to Cppi_CpDma type
439 *
440 * #Fm_res_Edma3DmaCh
441 * #Fm_res_Edma3QdmaCh
442 * #Fm_res_Edma3IntCh
443 * - Maps to CSL_InstNum EDMA3 Channel Controller (CC)
444 *
445 * #Fm_res_AifPeCh
446 * #Fm_res_AifPdCh
447 * #Fm_res_QmssAccumCh
448 * #Fm_res_QmssQueue
449 * #Fm_res_QmssMemRegion
450 * #Fm_res_PaPdsp
451 * #Fm_res_Timer
452 * - NULL
453 *
454 * #Fm_res_PaLutEntry
455 * - Maps to LUT 0, 1, or 2
456 *
457 * #Fm_res_CicHostInt
458 * - Maps to CIC number
459 */
460 uint32_t exResInfo;
461 } Fm_ExcludedResource;
463 #if (!defined(DEVICE_K2H) && !defined(DEVICE_K2K) && !defined(DEVICE_K2L) && !defined(DEVICE_K2E))
464 /**
465 * @brief
466 * DSP fault cleanup configuration parameters.
467 */
468 typedef struct {
469 /** Cleans CPDMA to PoR state if a non-zero value is written to this field */
470 int32_t cleanCpdma;
471 /** Cleans QMSS to PoR state if a non-zero value is written to this field */
472 int32_t cleanQmss;
473 /** Cleans PA to PoR state if a non-zero value is written to this field */
474 int32_t cleanPa;
475 /** Cleans EDMA3 to PoR state if a non-zero value is written to this field */
476 int32_t cleanEdma3;
477 /** Cleans AIF2 to PoR state if a non-zero value is written to this field */
478 int32_t cleanAif2;
479 /** Powers down TCP3D if a non-zero value is written to this field */
480 int32_t cleanTcp3d;
481 /** Powers down BCP if a non-zero value is written to this field */
482 int32_t cleanBcp;
483 /** Powers down FFTC (A & B) if a non-zero value is written to this field */
484 int32_t cleanFftc;
485 /** Powers down VCP if a non-zero value is written to this field */
486 int32_t cleanVcp;
487 /** Cleans SA security context entries */
488 int32_t cleanSa;
489 /** Cleans the Chip Interrupt Controllers (CIC) */
490 int32_t cleanCics;
491 /** Cleans the device timers */
492 int32_t cleanTimers;
493 /** List of resources to not reset when trying to cleanup from
494 * a DSP fault. Used to avoid resetting Linux kernel features, such
495 * as the network driver, that use may use CPDMA channels.
496 *
497 * Pass NULL to reset all peripherals to their PoR state. */
498 Fm_ExcludedResource *excludedResources;
499 } Fm_CleanupCfg;
500 #endif /* !(K2H && K2K && K2L && K2E) */
502 /**
503 * @brief
504 * DSP subsystem halt configuration parameters.
505 */
506 typedef struct {
507 /** Disables the AIF2 send and receive channels if a non-zero value is written to
508 * this field */
509 int32_t haltAif2;
510 /** Halts SGMII tx/rx logic if a non-zero value is written to this field */
511 int32_t haltSGMII;
512 /** Halts EDMA3 channels if a non-zero value is written to this field */
513 int32_t haltEdma3;
514 /** Halts CPDMA tx/rx channels if a non-zero value is written to this field */
515 int32_t haltCpdma;
516 /** List of resources to exclude from IO halt feature. Can be used
517 * to avoid halting key Linux kernel features, such as the network driver, that
518 * use may use CPDMA channels.
519 *
520 * Pass NULL to disable all receive channels for all resource types. */
521 Fm_ExcludedResource *excludedResources;
522 } Fm_HaltCfg;
524 /**
525 @}
526 */
528 /** @addtogroup FAULT_MGMT_FUNCTION
529 @{ */
531 #if (!defined(DEVICE_K2H) && !defined(DEVICE_K2K) && !defined(DEVICE_K2L) && !defined(DEVICE_K2E))
532 /**
533 * @b Description
534 * @n
535 * The function is used to clean the DSP peripherals to their power on reset state
536 * after a DSP crash occurs. The reset can be augmented to ignore peripheral resources
537 * in use by the ARM (specifically, Linux). The peripherals that are supported in
538 * PoR cleanup are:
539 * - CPPI
540 * - QMSS
541 * - PA
542 * - EDMA3
543 * - AIF2
544 * - TCP3D
545 * - BCP
546 * - FFTC
547 * - VCP
548 * - SA
549 * - CIC
550 * - Timers
551 * - Semaphores
552 *
553 * @param[in] *fmGblCfgParams
554 * Pointer to the fault managment device specific global configuration parameters
555 * @param[in] *cleanupCfg
556 * Configuration structure that allows control over which peripheral's should be recovered
557 * and which peripheral resources to avoid during cleanup.
558 *
559 * @retval
560 * Success - #FM_FAULT_CLEANUP_OK
561 * @retval
562 * Failure - return value <0
563 */
564 extern Fm_Result Fault_Mgmt_faultCleanup(Fm_GlobalConfigParams *fmGblCfgParams, Fm_CleanupCfg *cleanupCfg);
565 #endif /* !(K2H && K2K && K2L && K2E) */
567 /**
568 * @b Description
569 * @n
570 * The function is used to halt IO processing when a crash occurs. Currently disables:
571 * - EDMA3 DMA, QDMA, and INT channels
572 * - AIF PE/PD channels
573 * - SGMII switch
574 * - CPDMA tx/rx channels
575 *
576 * @param[in] *fmGblCfgParams
577 * Pointer to the fault managment device specific global configuration parameters
578 * @param[in] *haltCfg
579 * Configuration structure that allows control over what portions of the system can be
580 * disabled.
581 *
582 * @retval
583 * Success - #FM_OK
584 * @retval
585 * Failure - return value <0
586 */
587 extern Fm_Result Fault_Mgmt_haltIoProcessing(Fm_GlobalConfigParams *fmGblCfgParams, Fm_HaltCfg *haltCfg);
589 /**
590 * @b Description
591 * @n
592 * The function is used to get the register status and store it in the fault management
593 * data region.
594 *
595 * @retval
596 * Not Applicable
597 */
598 extern void Fault_Mgmt_getLastRegStatus(void);
600 /**
601 * @b Description
602 * @n
603 * The function is used to notify ARM the DSP core has faulted. The fault
604 * information collected are read by the ARM from the relevant sections.
605 *
606 * @retval
607 * Not Applicable
608 */
609 extern void Fault_Mgmt_notify(void);
611 /**
612 * @b Description
613 * @n
614 * The function is used to notify and manually fault a remote DSP core because
615 * a fault has occurred on the on the local core. The fault on the remote
616 * core is generated by a NMI pulse to the GEM. The fault information collected
617 * is read by the ARM from the relevant sections.
618 *
619 * @retval
620 * Not Applicable
621 */
622 extern void Fault_Mgmt_notify_remote_core(uint32_t core_id);
624 /**
625 * @b Description
626 * @n
627 * Returns the required size of the fault management data
628 * region containing the crash dump data.
629 *
630 * @retval
631 * Required size of the fault management crash dump data region in bytes
632 */
633 extern uint32_t Fault_Mgmt_getSizes(void);
635 /**
636 @}
637 */
639 #ifdef __cplusplus
640 }
641 #endif
643 #endif /* __FAULT_MGMT_H__ */