source: svn/trunk/newcon3bcm2_21bu/magnum/portinginterface/vdc/7552/bvdc_dbg.c

Last change on this file was 2, checked in by phkim, 11 years ago

1.phkim

  1. revision copy newcon3sk r27
  • Property svn:executable set to *
File size: 29.1 KB
Line 
1/***************************************************************************
2 *     Copyright (c) 2006-2011, Broadcom Corporation
3 *     All Rights Reserved
4 *     Confidential Property of Broadcom Corporation
5 *
6 *  THIS SOFTWARE MAY ONLY BE USED SUBJECT TO AN EXECUTED SOFTWARE LICENSE
7 *  AGREEMENT  BETWEEN THE USER AND BROADCOM.  YOU HAVE NO RIGHT TO USE OR
8 *  EXPLOIT THIS MATERIAL EXCEPT SUBJECT TO THE TERMS OF SUCH AN AGREEMENT.
9 *
10 * $brcm_Workfile: bvdc_dbg.c $
11 * $brcm_Revision: Hydra_Software_Devel/47 $
12 * $brcm_Date: 11/23/11 4:25p $
13 *
14 * Module Description:
15 *   This module print out helpful information to debug BVN
16 *
17 * Revision History:
18 *
19 * $brcm_Log: /magnum/portinginterface/vdc/7038/bvdc_dbg.c $
20 *
21 * Hydra_Software_Devel/47   11/23/11 4:25p tdo
22 * SW7435-9: Add support for CMP4-5, GFD4-5, MFD3, VFD5
23 *
24 * Hydra_Software_Devel/46   8/15/11 4:21p tdo
25 * SW7420-2017: Add debug function to get SCL status register
26 *
27 * Hydra_Software_Devel/45   7/22/11 11:13p pntruong
28 * SW7425-983: Corrected deinterlacer's hscaler threshold.
29 *
30 * Hydra_Software_Devel/44   3/15/11 4:22p yuxiaz
31 * SW7400-2882: Added support to enable / disable multi-buffering logging
32 * for a specific window.
33 *
34 * Hydra_Software_Devel/43   2/9/11 3:59p yuxiaz
35 * SW7400-2882: Ported multi-buffing event logging scheme to VDC. Move
36 * related APIs to bvdc_dbg.h
37 *
38 * Hydra_Software_Devel/42   10/4/10 5:24p hongtaoz
39 * SW7425-33: added the 4th compositor support;
40 *
41 * Hydra_Software_Devel/41   9/30/10 3:18p tdo
42 * SW7422-47: VDC: Need to handle re-arragnement of core level interrupts
43 *
44 * Hydra_Software_Devel/40   9/13/10 4:35p yuxiaz
45 * SW7358-4: Added initial VDC support for 7358.
46 *
47 * Hydra_Software_Devel/39   8/30/10 4:15p tdo
48 * SW7425-11, SW7425-13: Add 7425 support for VDC
49 *
50 * Hydra_Software_Devel/38   8/26/10 5:25p tdo
51 * SW7422-57: Add simple vdc support
52 *
53 * Hydra_Software_Devel/37   6/14/10 3:36p hongtaoz
54 * SW3548-2976: soft init GFD when DCX switches from ON to OFF, and when
55 * GFD source is created; added GFD BVB error monitoring to debug build;
56 *
57 * Hydra_Software_Devel/36   4/19/10 10:13p tdo
58 * SW3548-2814: Improvements to VDC ulBlackMagic. Move
59 * BDBG_OBJECT_ID_DECLARE private header files instead of .c.
60 *
61 * Hydra_Software_Devel/35   4/7/10 11:28a tdo
62 * SW3548-2814: Improvements to VDC ulBlackMagic.  Rename TLA
63 *
64 * Hydra_Software_Devel/34   4/5/10 4:04p tdo
65 * SW3548-2814: Improvements to VDC ulBlackMagic
66 *
67 * Hydra_Software_Devel/33   2/9/10 2:26p tdo
68 * SW7420-575: Name change MCDI_* -> MDI_*
69 *
70 * Hydra_Software_Devel/32   3/9/09 1:23p rpan
71 * PR52203: Fixed the inconsistency caused by various flags used for
72 * compilation checking.
73 *
74 * Hydra_Software_Devel/31   3/9/09 11:18a rpan
75 * PR52203: More checks before turn on MCVP error checking.
76 *
77 * Hydra_Software_Devel/30   3/9/09 10:05a rpan
78 * PR52203: Add error bit handling for newly added cores.
79 *
80 * Hydra_Software_Devel/27   9/5/08 4:46p tdo
81 * PR46484: Bringup appframework for7420
82 *
83 * Hydra_Software_Devel/26   6/24/08 6:57p hongtaoz
84 * PR40499: added ANR error debug callback;
85 *
86 * Hydra_Software_Devel/25   5/16/08 9:35a yuxiaz
87 * PR42732: Coverity Defect ID:7846 FORWARD_NULL bvdc_dbg.c
88 *
89 * Hydra_Software_Devel/24   2/12/08 8:18p pntruong
90 * PR38929: Make more files compile.
91 *
92 * Hydra_Software_Devel/23   1/29/08 6:08p pntruong
93 * PR34870: Added get handle debug functions for video tool library.
94 *
95 * Hydra_Software_Devel/22   1/18/08 12:08p hongtaoz
96 * PR38756: added MAD to the BVN error debug handling;
97 *
98 * Hydra_Software_Devel/21   9/21/07 3:59p hongtaoz
99 * PR34955: added Progressive Segmented Frame(PsF) 1080p support; fixed
100 * 1080p pass-through condition; fixed bvdc_dbg register access error;
101 * fixed general progressive capture interlaced playback feeder
102 * programming problem;
103 *
104 * Hydra_Software_Devel/20   4/4/07 3:44p syang
105 * PR 29243: change VnetMode def (now use bit-fields)
106 *
107 * Hydra_Software_Devel/19   2/16/07 4:32p pntruong
108 * PR15284, PR27951: Enabled error printing for all errors, and correct
109 * data corruption.
110 *
111 * Hydra_Software_Devel/18   2/16/07 11:36a pntruong
112 * PR15284, PR27951: Fixed build error for bvn debug disabled.
113 *
114 * Hydra_Software_Devel/17   2/16/07 9:37a pntruong
115 * PR15284, PR27951: Graphics shimmering on HD path when video is scaled
116 * down (PIG).  HW fixed.  Removed software work-around to avoid bvb
117 * error interrupts from window surface.  Make bvdc dbg more portable.
118 *
119 * Hydra_Software_Devel/16   2/12/07 1:49p pntruong
120 * PR27821:  Remove unused lagacy and work-around code (7038) from
121 * mainline.
122 *
123 ***************************************************************************/
124#include "bstd.h"
125#include "bdbg.h"
126#include "bvdc.h"
127#include "brdc_dbg.h"
128#include "bvdc_priv.h"
129#include "bvdc_source_priv.h"
130#include "bvdc_compositor_priv.h"
131
132/* Interrupt and regs */
133#include "bchp_common.h"
134#include "bchp_cap_0.h"
135#include "bchp_cmp_0.h"
136#include "bchp_gfd_0.h"
137#include "bchp_mfd_0.h"
138#include "bchp_vfd_0.h"
139#include "bchp_scl_0.h"
140#include "bchp_int_id_bvnb_intr2.h"
141#include "bchp_int_id_bvnf_intr2_5.h"
142
143#if BVDC_P_SUPPORT_BVNM_INTR
144#include "bchp_int_id_bvnm_intr2_0.h"
145#endif
146
147#ifdef BCHP_INT_ID_ANR_0_ERROR_INTR
148#include "bchp_hd_anr_mctf_0.h"
149#include "bchp_int_id_bvnm_intr2_0.h"
150#endif
151
152#ifdef BCHP_INT_ID_DNR_0_ERR_INTR
153#include "bchp_dnr_0.h"
154#endif
155
156#ifdef BCHP_INT_ID_MAD_0_BVB_IN_INTR
157#include "bchp_mad_0.h"
158#endif
159
160#ifdef BCHP_INT_ID_HSCL_INTR
161#include "bchp_hscl_0.h"
162#endif
163
164#ifdef BCHP_INT_ID_HSCL_0_INTR
165#include "bchp_hscl_0.h"
166#endif
167
168#ifdef BCHP_INT_ID_MCDI_BVB_IN_INTR
169#include "bchp_mdi_top_0.h"
170#endif
171
172#ifdef BCHP_INT_ID_MDI_0_BVB_IN_INTR
173#include "bchp_mdi_top_0.h"
174#endif
175
176#ifdef BCHP_INT_ID_MCTF_0_INTR
177#include "bchp_hd_anr_mctf_0.h"
178#endif
179
180BDBG_MODULE(BVDC_DBG);
181
182/* Short hand for table entry */
183#define BVDC_P_MAKE_DBG(int_id, core_reg_base, core_id)                 \
184{                                                                       \
185        BCHP_INT_ID_##int_id,                                               \
186        BVDC_P_ErrHandler_isr,                                              \
187        #int_id,                                                            \
188        (core_reg_base),                                                    \
189        (core_id),                                                          \
190}
191
192/* count of bint entry */
193#define BVDC_P_DBG_COUNT \
194        (sizeof(s_apfErrorHandlers) / sizeof(BVDC_P_IntCbTbl))
195
196/* Table for interrupt name and callback. */
197typedef struct
198{
199        BINT_Id                            InterruptName;
200        BINT_CallbackFunc                  pfCallback;
201        const char                        *pchInterruptName;
202        uint32_t                           ulRegBase;
203        uint32_t                           ulId;
204
205} BVDC_P_IntCbTbl;
206
207
208/***************************************************************************
209 * Error recovery handler
210 */
211static void BVDC_P_ErrHandler_isr
212        ( void                            *pvhVdc,
213          int                              iIdx );
214
215/***************************************************************************
216 * Error recovery handler
217 */
218static const BVDC_P_IntCbTbl s_apfErrorHandlers[] =
219{
220        /* 1st display & gfx */
221        BVDC_P_MAKE_DBG(CMP0_V0_INTR  , BCHP_CMP_0_REG_START, 0),
222        BVDC_P_MAKE_DBG(CMP0_G0_INTR  , BCHP_CMP_0_REG_START, 2),
223        BVDC_P_MAKE_DBG(GFD0_INTR     , BCHP_GFD_0_REG_START, 0),
224
225        /* 2nd display & gfx*/
226#ifdef BCHP_INT_ID_CMP1_V0_INTR
227        BVDC_P_MAKE_DBG(CMP1_V0_INTR  , BCHP_CMP_1_REG_START, 0),
228        BVDC_P_MAKE_DBG(CMP1_G0_INTR  , BCHP_CMP_1_REG_START, 2),
229        BVDC_P_MAKE_DBG(GFD1_INTR     , BCHP_GFD_1_REG_START, 0),
230#endif
231
232        /* 3rd display & gfx */
233#ifdef BCHP_INT_ID_CMP2_G0_INTR
234        BVDC_P_MAKE_DBG(CMP2_V0_INTR  , BCHP_CMP_2_REG_START, 0),
235        BVDC_P_MAKE_DBG(CMP2_G0_INTR  , BCHP_CMP_2_REG_START, 2),
236        BVDC_P_MAKE_DBG(GFD2_INTR     , BCHP_GFD_2_REG_START, 0),
237#endif
238
239        /* 4th display & gfx */
240#ifdef BCHP_INT_ID_CMP3_G0_INTR
241        BVDC_P_MAKE_DBG(CMP3_V0_INTR  , BCHP_CMP_3_REG_START, 0),
242        BVDC_P_MAKE_DBG(CMP3_G0_INTR  , BCHP_CMP_3_REG_START, 2),
243        BVDC_P_MAKE_DBG(GFD3_INTR     , BCHP_GFD_3_REG_START, 0),
244#endif
245
246        /* 1st display PIP */
247#ifdef BCHP_INT_ID_CMP0_V1_INTR
248        BVDC_P_MAKE_DBG(CMP0_V1_INTR  , BCHP_CMP_0_REG_START, 1),
249#endif
250
251        /* 2nd display PIP */
252#ifdef BCHP_INT_ID_CMP1_V1_INTR
253        BVDC_P_MAKE_DBG(CMP1_V1_INTR  , BCHP_CMP_1_REG_START, 1),
254#endif
255
256        /* Support multiple gfx layer on main display */
257#ifdef BCHP_INT_ID_CMP0_G3_INTR
258        BVDC_P_MAKE_DBG(CMP0_G1_INTR  , BCHP_CMP_0_REG_START, 2),
259        BVDC_P_MAKE_DBG(CMP0_G2_INTR  , BCHP_CMP_0_REG_START, 2),
260        BVDC_P_MAKE_DBG(CMP0_G3_INTR  , BCHP_CMP_0_REG_START, 2),
261#endif
262
263        /* 1st decoder */
264        BVDC_P_MAKE_DBG(MFD_0_INTR    , BCHP_MFD_0_REG_START, 0),
265
266        /* 2nd decoder */
267#ifdef BCHP_INT_ID_MFD_1_INTR
268        BVDC_P_MAKE_DBG(MFD_1_INTR    , BCHP_MFD_1_REG_START, 0),
269#endif
270
271        /* 3nd decoder */
272#ifdef BCHP_INT_ID_MFD_2_INTR
273        BVDC_P_MAKE_DBG(MFD_2_INTR    , BCHP_MFD_2_REG_START, 0),
274#endif
275
276        /* 1st window */
277        BVDC_P_MAKE_DBG(CAP0_INTR     , BCHP_CAP_0_REG_START, 0),
278        BVDC_P_MAKE_DBG(VFD_0_INTR    , BCHP_VFD_0_REG_START, 0),
279        BVDC_P_MAKE_DBG(SCL_0_ERR_INTR, BCHP_SCL_0_REG_START, 0),
280
281        /* 2nd window */
282#ifdef BCHP_INT_ID_CMP0_V1_INTR
283        BVDC_P_MAKE_DBG(CAP1_INTR     , BCHP_CAP_1_REG_START, 0),
284        BVDC_P_MAKE_DBG(VFD_1_INTR    , BCHP_VFD_1_REG_START, 0),
285        BVDC_P_MAKE_DBG(SCL_1_ERR_INTR, BCHP_SCL_1_REG_START, 0),
286#endif
287
288        /* 3rd widnow */
289#ifdef BCHP_INT_ID_CAP2_INTR
290        BVDC_P_MAKE_DBG(CAP2_INTR     , BCHP_CAP_2_REG_START, 0),
291        BVDC_P_MAKE_DBG(VFD_2_INTR    , BCHP_VFD_2_REG_START, 0),
292        BVDC_P_MAKE_DBG(SCL_2_ERR_INTR, BCHP_SCL_2_REG_START, 0),
293#endif
294
295        /* 4th widnow */
296#ifdef BCHP_INT_ID_CAP3_INTR
297        BVDC_P_MAKE_DBG(CAP3_INTR     , BCHP_CAP_3_REG_START, 0),
298        BVDC_P_MAKE_DBG(VFD_3_INTR    , BCHP_VFD_3_REG_START, 0),
299        BVDC_P_MAKE_DBG(SCL_3_ERR_INTR, BCHP_SCL_3_REG_START, 0),
300#endif
301
302        /* 5th window */
303#ifdef BCHP_INT_ID_CAP4_INTR
304        BVDC_P_MAKE_DBG(CAP4_INTR     , BCHP_CAP_4_REG_START, 0),
305        BVDC_P_MAKE_DBG(VFD_4_INTR    , BCHP_VFD_4_REG_START, 0),
306        BVDC_P_MAKE_DBG(SCL_4_ERR_INTR, BCHP_SCL_4_REG_START, 0),
307#endif
308
309#if BCHP_INT_ID_MAD_0_BVB_IN_INTR
310        BVDC_P_MAKE_DBG(MAD_0_BVB_IN_INTR, BCHP_MAD_0_REG_START, 0),
311#endif
312
313#if BCHP_INT_ID_MAD_1_BVB_IN_INTR
314        BVDC_P_MAKE_DBG(MAD_1_BVB_IN_INTR, BCHP_MAD_1_REG_START, 0),
315#endif
316
317#ifdef BCHP_INT_ID_DNR_0_ERR_INTR
318        BVDC_P_MAKE_DBG(DNR_0_ERR_INTR, BCHP_DNR_0_REG_START, 0),
319#endif
320
321#ifdef BCHP_INT_ID_DNR_1_ERR_INTR
322        BVDC_P_MAKE_DBG(DNR_1_ERR_INTR, BCHP_DNR_1_REG_START, 0),
323#endif
324
325#ifdef BCHP_INT_ID_ANR_0_ERROR_INTR
326        BVDC_P_MAKE_DBG(ANR_0_ERROR_INTR, BCHP_HD_ANR_MCTF_0_REG_START, 0),
327#endif
328
329#ifdef BCHP_INT_ID_HSCL_INTR
330        BVDC_P_MAKE_DBG(HSCL_INTR, BCHP_HSCL_0_REG_START, 0),
331#endif
332#ifdef BCHP_INT_ID_HSCL_0_INTR
333        BVDC_P_MAKE_DBG(HSCL_0_INTR, BCHP_HSCL_0_REG_START, 0),
334#endif
335#ifdef BCHP_INT_ID_HSCL_1_INTR
336        BVDC_P_MAKE_DBG(HSCL_1_INTR, BCHP_HSCL_1_REG_START, 0),
337#endif
338
339#ifdef BCHP_INT_ID_MCDI_BVB_IN_INTR
340        BVDC_P_MAKE_DBG(MCDI_BVB_IN_INTR, BCHP_MDI_TOP_0_REG_START, 0),
341#endif
342
343#ifdef BCHP_INT_ID_MDI_0_BVB_IN_INTR
344        BVDC_P_MAKE_DBG(MDI_0_BVB_IN_INTR, BCHP_MDI_TOP_0_REG_START, 0),
345#endif
346#ifdef BCHP_INT_ID_MDI_1_BVB_IN_INTR
347        BVDC_P_MAKE_DBG(MDI_1_BVB_IN_INTR, BCHP_MDI_TOP_1_REG_START, 0),
348#endif
349
350#ifdef BCHP_INT_ID_MCTF_0_INTR
351        BVDC_P_MAKE_DBG(MCTF_0_INTR, BCHP_HD_ANR_MCTF_0_REG_START, 0),
352#endif
353
354        /* RDC */
355        BVDC_P_MAKE_DBG(RDC_ERR_INTR  , 0,                    0)
356};
357
358
359/***************************************************************************
360 * Generic error recovery handler for BVN blocks.
361 */
362static void BVDC_P_ErrHandler_isr
363        ( void                            *pvhVdc,
364          int                              iIdx )
365{
366        uint32_t ulLen;
367        uint32_t ulReg;
368        uint32_t ulBase;
369        const char *pchName;
370        BREG_Handle hReg;
371        BVDC_Handle hVdc = (BVDC_Handle)pvhVdc;
372        const BVDC_P_IntCbTbl *pErr;
373
374        /* hush warnings. */
375        BDBG_OBJECT_ASSERT(hVdc, BVDC_VDC);
376
377        hReg    = hVdc->hRegister;
378        pErr    = &s_apfErrorHandlers[iIdx];
379        pchName = pErr->pchInterruptName;
380        ulBase  = pErr->ulRegBase;
381
382        /* Clear string */
383        BKNI_Memset((void*)hVdc->achBuf, '\0', sizeof(hVdc->achBuf));
384
385        /* print out extra information */
386        switch (pErr->InterruptName)
387        {
388        case BCHP_INT_ID_RDC_ERR_INTR:
389        case BCHP_INT_ID_RDC_WATCHDOG_TIMER_INTR:
390                BKNI_Snprintf(hVdc->achBuf, BVDC_P_ERROR_MAX_MSG_LENGTH, "BVN error in %s", pchName);
391                break;
392
393        case BCHP_INT_ID_CMP0_G0_INTR:
394        case BCHP_INT_ID_CMP0_V0_INTR:
395#ifdef BCHP_INT_ID_CMP0_V1_INTR
396        case BCHP_INT_ID_CMP0_V1_INTR:
397#endif
398
399#ifdef BCHP_INT_ID_CMP1_G0_INTR
400        case BCHP_INT_ID_CMP1_G0_INTR:
401        case BCHP_INT_ID_CMP1_V0_INTR:
402#endif
403
404#ifdef BCHP_INT_ID_CMP1_V1_INTR
405        case BCHP_INT_ID_CMP1_V1_INTR:
406#endif
407
408#ifdef BCHP_INT_ID_CMP2_G0_INTR
409        case BCHP_INT_ID_CMP2_G0_INTR:
410        case BCHP_INT_ID_CMP2_V0_INTR:
411#endif
412
413#ifdef BCHP_INT_ID_CMP3_G0_INTR
414        case BCHP_INT_ID_CMP3_G0_INTR:
415        case BCHP_INT_ID_CMP3_V0_INTR:
416#endif
417
418                switch (pErr->ulId)
419                {
420                case 0:
421                        ulReg = BREG_Read32(hReg, ulBase + (BCHP_CMP_0_V0_BVB_IN_STATUS - BCHP_CMP_0_REG_START));
422                        BKNI_Snprintf(hVdc->achBuf, BVDC_P_ERROR_MAX_MSG_LENGTH, "BVN Error: %s_BVB_IN_STATUS %#x", pchName, ulReg);
423                        BREG_Write32(hReg, ulBase + (BCHP_CMP_0_V0_BVB_IN_STATUS_CLEAR - BCHP_CMP_0_REG_START), 0x1F);
424                        break;
425
426#ifdef BCHP_INT_ID_CMP0_V1_INTR
427                case 1:
428                        ulReg = BREG_Read32(hReg, ulBase + (BCHP_CMP_0_V1_BVB_IN_STATUS - BCHP_CMP_0_REG_START));
429                        BKNI_Snprintf(hVdc->achBuf, BVDC_P_ERROR_MAX_MSG_LENGTH, "BVN Error: %s_BVB_IN_STATUS %#x", pchName, ulReg);
430                        BREG_Write32(hReg, ulBase + (BCHP_CMP_0_V1_BVB_IN_STATUS_CLEAR - BCHP_CMP_0_REG_START), 0x1F);
431                        break;
432#endif
433
434                case 2:
435                        ulReg = BREG_Read32(hReg, ulBase + (BCHP_CMP_0_G0_BVB_IN_STATUS - BCHP_CMP_0_REG_START));
436                        BKNI_Snprintf(hVdc->achBuf, BVDC_P_ERROR_MAX_MSG_LENGTH, "BVN Error: %s_BVB_IN_STATUS %#x", pchName, ulReg);
437                        BREG_Write32(hReg, ulBase + (BCHP_CMP_0_G0_BVB_IN_STATUS_CLEAR - BCHP_CMP_0_REG_START), 0x1F);
438                        break;
439                }
440                break;
441
442        case BCHP_INT_ID_GFD0_INTR:
443#ifdef BCHP_INT_ID_GFD1_INTR
444        case BCHP_INT_ID_GFD1_INTR:
445#endif
446#ifdef BCHP_INT_ID_GFD2_INTR
447        case BCHP_INT_ID_GFD2_INTR:
448#endif
449#ifdef BCHP_INT_ID_GFD3_INTR
450        case BCHP_INT_ID_GFD3_INTR:
451#endif
452                ulReg = BREG_Read32(hReg, ulBase + (BCHP_GFD_0_STATUS - BCHP_GFD_0_REG_START));
453                BKNI_Snprintf(hVdc->achBuf, BVDC_P_ERROR_MAX_MSG_LENGTH, "BVN Error: %s_STATUS %#x", pchName, ulReg);
454                BREG_Write32(hReg, ulBase + (BCHP_GFD_0_STATUS_CLEAR - BCHP_GFD_0_REG_START), 0xFF);
455                break;
456
457        case BCHP_INT_ID_MFD_0_INTR:
458#ifdef BCHP_INT_ID_MFD_1_INTR
459        case BCHP_INT_ID_MFD_1_INTR:
460#endif
461#ifdef BCHP_INT_ID_MFD_2_INTR
462        case BCHP_INT_ID_MFD_2_INTR:
463#endif
464                ulReg = BREG_Read32(hReg, ulBase + (BCHP_MFD_0_FEEDER_ERROR_INTERRUPT_STATUS - BCHP_MFD_0_REG_START));
465                BKNI_Snprintf(hVdc->achBuf, BVDC_P_ERROR_MAX_MSG_LENGTH, "BVN Error: %s_FEEDER_ERROR_INTERRUPT_STATUS %#x", pchName, ulReg);
466                break;
467
468        /* Note: VFD and MFD have different registers grouping, so they have to be seperated; */
469        case BCHP_INT_ID_VFD_0_INTR:
470#ifdef BCHP_INT_ID_VFD_1_INTR
471        case BCHP_INT_ID_VFD_1_INTR:
472#endif
473
474#ifdef BCHP_INT_ID_VFD_2_INTR
475        case BCHP_INT_ID_VFD_2_INTR:
476#endif
477
478#ifdef BCHP_INT_ID_VFD_3_INTR
479        case BCHP_INT_ID_VFD_3_INTR:
480#endif
481
482#ifdef BCHP_INT_ID_VFD_4_INTR
483        case BCHP_INT_ID_VFD_4_INTR:
484#endif
485                ulReg = BREG_Read32(hReg, ulBase + (BCHP_VFD_0_FEEDER_ERROR_INTERRUPT_STATUS - BCHP_VFD_0_REG_START));
486                BKNI_Snprintf(hVdc->achBuf, BVDC_P_ERROR_MAX_MSG_LENGTH, "BVN Error: %s_FEEDER_ERROR_INTERRUPT_STATUS %#x", pchName, ulReg);
487                break;
488
489        case BCHP_INT_ID_CAP0_INTR:
490#ifdef BCHP_INT_ID_CAP1_INTR
491        case BCHP_INT_ID_CAP1_INTR:
492#endif
493
494#ifdef BCHP_INT_ID_CAP2_INTR
495        case BCHP_INT_ID_CAP2_INTR:
496#endif
497
498#ifdef BCHP_INT_ID_CAP3_INTR
499        case BCHP_INT_ID_CAP3_INTR:
500#endif
501
502#ifdef BCHP_INT_ID_CAP4_INTR
503        case BCHP_INT_ID_CAP4_INTR:
504#endif
505                ulReg = BREG_Read32(hReg, ulBase + (BCHP_CAP_0_BVB_STATUS - BCHP_CAP_0_REG_START));
506                ulLen = BKNI_Snprintf(hVdc->achBuf, BVDC_P_ERROR_MAX_MSG_LENGTH, "BVN Error: %s_BVB_STATUS %#x\n", pchName, ulReg);
507                ulReg = BREG_Read32(hReg, ulBase + (BCHP_CAP_0_FIFO_STATUS - BCHP_CAP_0_REG_START));
508                ulLen += BKNI_Snprintf(hVdc->achBuf+ulLen, BVDC_P_ERROR_MAX_MSG_LENGTH, "           %s_FIFO_STATUS %#x", pchName, ulReg);
509                ulReg = BREG_Read32(hReg, ulBase + (BCHP_CAP_0_STATUS - BCHP_CAP_0_REG_START));
510                BKNI_Snprintf(hVdc->achBuf+ulLen, BVDC_P_ERROR_MAX_MSG_LENGTH, "           %s_STATUS %#x", pchName, ulReg);
511                BREG_Write32(hReg, ulBase + (BCHP_CAP_0_BVB_STATUS_CLEAR - BCHP_CAP_0_REG_START), 0x1F);
512                BREG_Write32(hReg, ulBase + (BCHP_CAP_0_FIFO_STATUS_CLEAR - BCHP_CAP_0_REG_START), 0x7);
513                break;
514
515        case BCHP_INT_ID_SCL_0_ERR_INTR:
516#ifdef BCHP_INT_ID_SCL_1_ERR_INTR
517        case BCHP_INT_ID_SCL_1_ERR_INTR:
518#endif
519
520#ifdef BCHP_INT_ID_SCL_2_ERR_INTR
521        case BCHP_INT_ID_SCL_2_ERR_INTR:
522#endif
523
524#ifdef BCHP_INT_ID_SCL_3_ERR_INTR
525        case BCHP_INT_ID_SCL_3_ERR_INTR:
526#endif
527
528#ifdef BCHP_INT_ID_SCL_4_ERR_INTR
529        case BCHP_INT_ID_SCL_4_ERR_INTR:
530#endif
531                ulReg = BREG_Read32(hReg, ulBase + (BCHP_SCL_0_BVB_IN_STATUS - BCHP_SCL_0_REG_START));
532                BKNI_Snprintf(hVdc->achBuf, BVDC_P_ERROR_MAX_MSG_LENGTH, "BVN Error: %s_BVB_IN_STATUS %#x", pchName, ulReg);
533                BREG_Write32(hReg, ulBase + (BCHP_SCL_0_BVB_IN_STATUS_CLEAR - BCHP_SCL_0_REG_START), 0x7F);
534                break;
535
536#ifdef BCHP_INT_ID_DNR_0_ERR_INTR
537        case BCHP_INT_ID_DNR_0_ERR_INTR:
538
539#ifdef BCHP_INT_ID_DNR_1_ERR_INTR
540        case BCHP_INT_ID_DNR_1_ERR_INTR:
541#endif
542                ulReg = BREG_Read32(hReg, ulBase + (BCHP_DNR_0_BVB_IN_STATUS - BCHP_DNR_0_REG_START));
543                BKNI_Snprintf(hVdc->achBuf, BVDC_P_ERROR_MAX_MSG_LENGTH, "BVN Error: %s_BVB_IN_STATUS %#x", pchName, ulReg);
544                BREG_Write32(hReg, ulBase + (BCHP_DNR_0_BVB_IN_STATUS_CLEAR - BCHP_DNR_0_REG_START), 0x7F);
545                break;
546#endif
547
548#ifdef BCHP_INT_ID_ANR_0_ERROR_INTR
549        case BCHP_INT_ID_ANR_0_ERROR_INTR:
550                ulReg = BREG_Read32(hReg, ulBase + (BCHP_HD_ANR_MCTF_0_BVB_IN_STATUS - BCHP_HD_ANR_MCTF_0_REG_START));
551                ulLen = BKNI_Snprintf(hVdc->achBuf, BVDC_P_ERROR_MAX_MSG_LENGTH, "BVN Error: %s_BVB_IN_STATUS %#x", pchName, ulReg);
552                ulReg = BREG_Read32(hReg, ulBase + (BCHP_HD_ANR_MCTF_0_DEBUG_STATUS - BCHP_HD_ANR_MCTF_0_REG_START));
553                ulLen += BKNI_Snprintf(hVdc->achBuf, BVDC_P_ERROR_MAX_MSG_LENGTH, "BVN Error: %s_DEBUG_STATUS %#x", pchName, ulReg);
554                BREG_Write32(hReg, BCHP_HD_ANR_MCTF_0_BVB_IN_STATUS_CLEAR, 0x7F);
555                break;
556#endif
557
558#ifdef BCHP_INT_ID_MAD_0_BVB_IN_INTR
559        case BCHP_INT_ID_MAD_0_BVB_IN_INTR:
560
561#ifdef BCHP_INT_ID_MAD_1_BVB_IN_INTR
562        case BCHP_INT_ID_MAD_1_BVB_IN_INTR:
563#endif
564                ulReg = BREG_Read32(hReg, ulBase + (BCHP_MAD_0_BVB_IN_STATUS - BCHP_MAD_0_REG_START));
565                BKNI_Snprintf(hVdc->achBuf, BVDC_P_ERROR_MAX_MSG_LENGTH, "BVN Error: %s_BVB_IN_STATUS %#x", pchName, ulReg);
566                BREG_Write32(hReg, ulBase + (BCHP_MAD_0_BVB_IN_STATUS_CLEAR - BCHP_MAD_0_REG_START), 0x7F);
567                break;
568#endif
569
570
571#ifdef BCHP_INT_ID_HSCL_INTR
572        case BCHP_INT_ID_HSCL_INTR:
573                ulReg = BREG_Read32(hReg, ulBase + (BCHP_HSCL_0_BVB_IN_STATUS - BCHP_HSCL_0_REG_START));
574                BKNI_Snprintf(hVdc->achBuf, BVDC_P_ERROR_MAX_MSG_LENGTH, "BVN Error: %s_BVB_IN_STATUS %#x", pchName, ulReg);
575                BREG_Write32(hReg, ulBase + (BCHP_HSCL_0_BVB_IN_STATUS_CLEAR - BCHP_HSCL_0_REG_START), 0xFF);
576                break;
577#endif
578
579#ifdef BCHP_INT_ID_HSCL_0_INTR
580        case BCHP_INT_ID_HSCL_0_INTR:
581
582#ifdef BCHP_INT_ID_HSCL_1_INTR
583        case BCHP_INT_ID_HSCL_1_INTR:
584#endif
585                ulReg = BREG_Read32(hReg, ulBase + (BCHP_HSCL_0_BVB_IN_STATUS - BCHP_HSCL_0_REG_START));
586                BKNI_Snprintf(hVdc->achBuf, BVDC_P_ERROR_MAX_MSG_LENGTH, "BVN Error: %s_BVB_IN_STATUS %#x", pchName, ulReg);
587                BREG_Write32(hReg, ulBase + (BCHP_HSCL_0_BVB_IN_STATUS_CLEAR - BCHP_HSCL_0_REG_START), 0xFF);
588                break;
589#endif
590
591#ifdef BCHP_INT_ID_MCDI_BVB_IN_INTR
592        case BCHP_INT_ID_MCDI_BVB_IN_INTR:
593                ulReg = BREG_Read32(hReg, ulBase + (BCHP_MDI_TOP_0_BVB_IN_STATUS - BCHP_MDI_TOP_0_REG_START));
594                BKNI_Snprintf(hVdc->achBuf, BVDC_P_ERROR_MAX_MSG_LENGTH, "BVN Error: %s_BVB_IN_STATUS %#x", pchName, ulReg);
595                BREG_Write32(hReg, ulBase + (BCHP_MDI_TOP_0_BVB_IN_STATUS_CLEAR - BCHP_MDI_TOP_0_REG_START), 0xFF);
596                break;
597#endif
598
599#ifdef BCHP_INT_ID_MDI_0_BVB_IN_INTR
600        case BCHP_INT_ID_MDI_0_BVB_IN_INTR:
601
602#ifdef BCHP_INT_ID_MDI_1_BVB_IN_INTR
603        case BCHP_INT_ID_MDI_1_BVB_IN_INTR:
604#endif
605                ulReg = BREG_Read32(hReg, ulBase + (BCHP_MDI_TOP_0_BVB_IN_STATUS - BCHP_MDI_TOP_0_REG_START));
606                BKNI_Snprintf(hVdc->achBuf, BVDC_P_ERROR_MAX_MSG_LENGTH, "BVN Error: %s_BVB_IN_STATUS %#x", pchName, ulReg);
607                BREG_Write32(hReg, ulBase + (BCHP_MDI_TOP_0_BVB_IN_STATUS_CLEAR - BCHP_MDI_TOP_0_REG_START), 0xFF);
608                break;
609#endif
610
611#ifdef BCHP_INT_ID_MCTF_0_INTR
612        case BCHP_INT_ID_MCTF_0_INTR:
613                ulReg = BREG_Read32(hReg, ulBase + (BCHP_HD_ANR_MCTF_0_BVB_IN_STATUS - BCHP_HD_ANR_MCTF_0_REG_START));
614                BKNI_Snprintf(hVdc->achBuf, BVDC_P_ERROR_MAX_MSG_LENGTH, "BVN Error: %s_BVB_IN_STATUS %#x", pchName, ulReg);
615                BREG_Write32(hReg, ulBase + (BCHP_HD_ANR_MCTF_0_BVB_IN_STATUS_CLEAR - BCHP_HD_ANR_MCTF_0_REG_START), 0xFF);
616                break;
617#endif
618
619        default:
620                break;
621        }
622
623        /* Log to RDC's circular buffer so we see what may have caused it */
624        BDBG_WRN(("%s", hVdc->achBuf));
625        BRDC_DBG_LogErrorCode_isr(hVdc->hRdc, BRDC_DBG_BVN_ERROR, hVdc->achBuf);
626
627        return;
628}
629
630
631/***************************************************************************
632 *
633 */
634BERR_Code BVDC_P_CreateErrCb
635        ( BVDC_P_Context                  *pVdc )
636{
637        uint32_t i;
638        BERR_Code eStatus;
639
640        BDBG_MSG(("BVDC_P_DBG_COUNT = %d", BVDC_P_DBG_COUNT));
641        for(i = 0; i < BVDC_P_DBG_COUNT; i++)
642        {
643                BDBG_ASSERT(i < BVDC_P_ERROR_INTR_CB_COUNT);
644                eStatus = BINT_CreateCallback(&pVdc->ahErrHandlerCb[i], pVdc->hInterrupt,
645                        s_apfErrorHandlers[i].InterruptName,
646                        s_apfErrorHandlers[i].pfCallback,
647                        (void*)pVdc, i);
648                if(BERR_SUCCESS != eStatus)
649                {
650                        return BERR_TRACE(eStatus);
651                }
652
653                eStatus = BINT_ClearCallback(pVdc->ahErrHandlerCb[i]);
654                if(BERR_SUCCESS != eStatus)
655                {
656                        return BERR_TRACE(eStatus);
657                }
658
659                eStatus = BINT_EnableCallback(pVdc->ahErrHandlerCb[i]);
660                if(BERR_SUCCESS != eStatus)
661                {
662                        return BERR_TRACE(eStatus);
663                }
664        }
665
666        return eStatus;
667}
668
669
670/***************************************************************************
671 *
672 */
673BERR_Code BVDC_P_DestroyErrCb
674        ( BVDC_P_Context                  *pVdc )
675{
676        uint32_t i;
677        BERR_Code eStatus;
678
679        for(i = 0; i < BVDC_P_DBG_COUNT; i++)
680        {
681                eStatus = BINT_DisableCallback(pVdc->ahErrHandlerCb[i]);
682                if(BERR_SUCCESS != eStatus)
683                {
684                        return BERR_TRACE(eStatus);
685                }
686
687                eStatus = BINT_DestroyCallback(pVdc->ahErrHandlerCb[i]);
688                if(BERR_SUCCESS != eStatus)
689                {
690                        return BERR_TRACE(eStatus);
691                }
692        }
693
694        return eStatus;
695}
696
697
698/***************************************************************************
699 *
700 */
701BVDC_Source_Handle BVDC_Dbg_GetSourceHandle
702        ( const BVDC_Handle                hVdc,
703          BAVC_SourceId                    eSourceId )
704{
705        BVDC_Source_Handle hSrc = NULL;
706
707        /* Sanity checks */
708        BDBG_OBJECT_ASSERT(hVdc, BVDC_VDC);
709
710        if(BVDC_P_STATE_IS_ACTIVE(hVdc->ahSource[eSourceId]))
711        {
712                hSrc = hVdc->ahSource[eSourceId];
713        }
714
715        return hSrc;
716}
717
718
719/***************************************************************************
720 *
721 */
722BVDC_Compositor_Handle BVDC_Dbg_GetCompositorHandle
723        ( const BVDC_Handle                hVdc,
724          BVDC_CompositorId                eCompositorId )
725{
726        BVDC_Compositor_Handle hCmp = NULL;
727
728        /* Sanity checks */
729        BDBG_OBJECT_ASSERT(hVdc, BVDC_VDC);
730
731        if(BVDC_P_STATE_IS_ACTIVE(hVdc->ahCompositor[eCompositorId]))
732        {
733                hCmp = hVdc->ahCompositor[eCompositorId];
734        }
735
736        return hCmp;
737}
738
739
740/***************************************************************************
741 *
742 */
743BVDC_Window_Handle BVDC_Dbg_GetWindowHandle
744        ( const BVDC_Handle                hVdc,
745          BVDC_CompositorId                eCompositorId,
746          BVDC_WindowId                    eWindowId )
747{
748        BVDC_Window_Handle hWin = NULL;
749        BVDC_Compositor_Handle hCmp = NULL;
750
751        /* Sanity checks */
752        BDBG_OBJECT_ASSERT(hVdc, BVDC_VDC);
753
754        /* Get the compositor */
755        hCmp = BVDC_Dbg_GetCompositorHandle(hVdc, eCompositorId);
756
757        /* Do we have valid compositor */
758        if(hCmp)
759        {
760                BVDC_P_WindowId eWinId;
761                BDBG_OBJECT_ASSERT(hCmp, BVDC_CMP);
762                switch(eCompositorId)
763                {
764                case BVDC_CompositorId_eCompositor0:
765                        switch(eWindowId)
766                        {
767                        case BVDC_WindowId_eVideo0:
768                                eWinId = BVDC_P_WindowId_eComp0_V0;
769                                break;
770
771                        case BVDC_WindowId_eVideo1:
772                                eWinId = BVDC_P_WindowId_eComp0_V1;
773                                break;
774
775                        case BVDC_WindowId_eGfx0:
776                                eWinId = BVDC_P_WindowId_eComp0_G0;
777                                break;
778
779                        case BVDC_WindowId_eGfx1:
780                                eWinId = BVDC_P_WindowId_eComp0_G1;
781                                break;
782
783                        case BVDC_WindowId_eGfx2:
784                                eWinId = BVDC_P_WindowId_eComp0_G2;
785                                break;
786
787                        default:
788                                return NULL;
789                        }
790                        break;
791
792                case BVDC_CompositorId_eCompositor1:
793                        switch(eWindowId)
794                        {
795                        case BVDC_WindowId_eVideo0:
796                                eWinId = BVDC_P_WindowId_eComp1_V0;
797                                break;
798
799                        case BVDC_WindowId_eVideo1:
800                                eWinId = BVDC_P_WindowId_eComp1_V1;
801                                break;
802
803                        case BVDC_WindowId_eGfx0:
804                                eWinId = BVDC_P_WindowId_eComp1_G0;
805                                break;
806
807                        default:
808                                return NULL;
809                        }
810                        break;
811
812                case BVDC_CompositorId_eCompositor2:
813                        switch(eWindowId)
814                        {
815                        case BVDC_WindowId_eVideo0:
816                                eWinId = BVDC_P_WindowId_eComp2_V0;
817                                break;
818
819                        case BVDC_WindowId_eGfx0:
820                                eWinId = BVDC_P_WindowId_eComp2_G0;
821                                break;
822
823                        default:
824                                return NULL;
825                        }
826                        break;
827
828                case BVDC_CompositorId_eCompositor3:
829                        switch(eWindowId)
830                        {
831                        case BVDC_WindowId_eVideo0:
832                                eWinId = BVDC_P_WindowId_eComp3_V0;
833                                break;
834
835                        case BVDC_WindowId_eGfx0:
836                                eWinId = BVDC_P_WindowId_eComp3_G0;
837                                break;
838
839                        default:
840                                return NULL;
841                        }
842                        break;
843
844                case BVDC_CompositorId_eCompositor4:
845                        switch(eWindowId)
846                        {
847                        case BVDC_WindowId_eVideo0:
848                                eWinId = BVDC_P_WindowId_eComp4_V0;
849                                break;
850
851                        case BVDC_WindowId_eGfx0:
852                                eWinId = BVDC_P_WindowId_eComp4_G0;
853                                break;
854
855                        default:
856                                return NULL;
857                        }
858                        break;
859
860                case BVDC_CompositorId_eCompositor5:
861                        switch(eWindowId)
862                        {
863                        case BVDC_WindowId_eVideo0:
864                                eWinId = BVDC_P_WindowId_eComp5_V0;
865                                break;
866
867                        case BVDC_WindowId_eGfx0:
868                                eWinId = BVDC_P_WindowId_eComp5_G0;
869                                break;
870
871                        default:
872                                return NULL;
873                        }
874                        break;
875
876                default:
877                        return NULL;
878                }
879
880                if(BVDC_P_STATE_IS_ACTIVE(hCmp->ahWindow[eWinId]))
881                {
882                        hWin = hCmp->ahWindow[eWinId];
883                }
884        }
885
886        return hWin;
887}
888
889
890/***************************************************************************
891 *
892 */
893BVDC_Source_Handle BVDC_Dbg_Window_GetSourceHandle
894        ( const BVDC_Window_Handle         hWindow )
895{
896        BVDC_Source_Handle hSrc = NULL;
897
898        /* Sanity checks */
899        BDBG_OBJECT_ASSERT(hWindow, BVDC_WIN);
900
901        if(BVDC_P_STATE_IS_ACTIVE(hWindow) &&
902           BVDC_P_STATE_IS_ACTIVE(hWindow->stCurInfo.hSource))
903        {
904                hSrc = hWindow->stCurInfo.hSource;
905        }
906
907        return hSrc;
908}
909
910
911/***************************************************************************
912 *
913 */
914uint32_t BVDC_Dbg_Window_GetScalerStatus
915        ( const BVDC_Window_Handle         hWindow )
916{
917        BVDC_P_Scaler_Handle hScaler;
918
919        /* Sanity checks */
920        BDBG_OBJECT_ASSERT(hWindow, BVDC_WIN);
921
922        if(BVDC_P_STATE_IS_ACTIVE(hWindow))
923        {
924                hScaler = hWindow->stCurResource.hScaler;
925                return BREG_Read32(hScaler->hReg, BCHP_SCL_0_BVB_IN_STATUS + hScaler->ulRegOffset);
926        }
927
928        return 0;
929}
930
931
932/***************************************************************************
933 *
934 */
935BVDC_Compositor_Handle BVDC_Dbg_Window_GetCompositorHandle
936        ( const BVDC_Window_Handle         hWindow )
937{
938        BVDC_Compositor_Handle hCmp = NULL;
939
940        /* Sanity checks */
941        BDBG_OBJECT_ASSERT(hWindow, BVDC_WIN);
942
943        if(BVDC_P_STATE_IS_ACTIVE(hWindow) &&
944           BVDC_P_STATE_IS_ACTIVE(hWindow->hCompositor))
945        {
946                hCmp = hWindow->hCompositor;
947        }
948
949        return hCmp;
950}
951
952
953/***************************************************************************
954 *
955 */
956BVDC_Display_Handle BVDC_Dbg_Compositor_GetDisplayHandle
957        ( const BVDC_Compositor_Handle     hCompositor )
958{
959        BVDC_Display_Handle hDis = NULL;
960
961        /* Sanity checks */
962        BDBG_OBJECT_ASSERT(hCompositor, BVDC_CMP);
963
964        if(BVDC_P_STATE_IS_ACTIVE(hCompositor) &&
965           BVDC_P_STATE_IS_ACTIVE(hCompositor->hDisplay))
966        {
967                hDis = hCompositor->hDisplay;
968        }
969
970        return hDis;
971}
972
973
974/***************************************************************************
975 * Main Debug Entry Point!
976 *
977 */
978BERR_Code BVDC_Dbg_Dump
979        ( BVDC_Handle                      hVdc )
980{
981        BSTD_UNUSED(hVdc);
982        BDBG_MSG(("Not supported!"));
983        return BERR_SUCCESS;
984}
985
986#if (BVDC_BUF_LOG == 1)
987/***************************************************************************
988 * BVDC_SetBufLogStateAndDumpTrigger
989 *
990 * Set when to start logging multi-buffering events and how to notify user
991 * the log can be dumped.
992 */
993BERR_Code BVDC_SetBufLogStateAndDumpTrigger
994        ( BVDC_BufLogState                 eLogState,
995          const BVDC_CallbackFunc_isr      pfCallback,
996          void                                                     *pvParm1,
997          int                                                      iParm2 )
998{
999        if (eLogState > BVDC_BufLogState_eAutomaticReduced)
1000        {
1001                BDBG_ERR(("Invalid log state %d ", (int) eLogState));
1002                return BERR_INVALID_PARAMETER;
1003        }
1004
1005        if (((BVDC_BufLogState_eAutomatic == eLogState) || (BVDC_BufLogState_eAutomaticReduced == eLogState))
1006                && (NULL == pfCallback))
1007        {
1008                BDBG_ERR(("Callback function must be registered for eAutomatic or eAutomaticReduced mode"));
1009                return BERR_INVALID_PARAMETER;
1010        }
1011
1012        BVDC_P_Buffer_SetLogStateAndDumpTrigger(eLogState, pfCallback, pvParm1, iParm2);
1013
1014        return BERR_SUCCESS;
1015}
1016
1017/***************************************************************************
1018 * BVDC_DumpBufLog
1019 *
1020 * Print out the captured multi-buffering events log.
1021 *
1022 */
1023void BVDC_DumpBufLog(void)
1024{
1025        BVDC_P_Buffer_DumpLog();
1026}
1027
1028/***************************************************************************
1029 * BVDC_SetupManualTrigger
1030 *
1031 * Prepares the manual trigger of the multi-buffering event log
1032 *
1033 */
1034void BVDC_SetBufLogManualTrigger(void)
1035{
1036    BVDC_P_Buffer_SetManualTrigger();
1037}
1038
1039BERR_Code BVDC_Window_EnableBufLog
1040        ( const BVDC_Window_Handle         hWindow,
1041          bool                             bEnable )
1042{
1043        if(!BVDC_P_WIN_IS_VIDEO_WINDOW(hWindow->eId))
1044                return BERR_TRACE(BERR_INVALID_PARAMETER);
1045
1046        BVDC_P_Buffer_EnableBufLog(hWindow->eId, bEnable);
1047        return BERR_SUCCESS;
1048}
1049#endif
1050
1051
1052/* end of file */
Note: See TracBrowser for help on using the repository browser.