#ifndef _DRV_DEBUG_H_ #define _DRV_DEBUG_H_ /* * Macros to help debugging */ #include #include "drv_spi_flashalloc_external.h" // part I: debug message #define DBGCONFIG1ADDR 0xa0000010 #define DBGCONFIG2ADDR 0xa0000014 // pdbgconf1 Flags #define DBGCFG_VIP (1 << MODULEID_VIP) // 0x1 #define DBGCFG_MPEG (1 << MODULEID_MPEG) // 0x2 #define DBGCFG_CVD2 (1 << MODULEID_CVD2) // 0x4 #define DBGCFG_ADC (1 << MODULEID_ADC) // 0x8 #define DBGCFG_HDMI (1 << MODULEID_HDMI) // 0x10 #define DBGCFG_AUDIO (1 << MODULEID_AUDIO) // 0x20 #define DBGCFG_BLT (1 << MODULEID_BLT) // 0x40 // not used. reserved. #define DBGCFG_OSDLIB (1 << MODULEID_OSDLIB) // 0x80 // not used. reserved. #define DBGCFG_TUNER (1 << MODULEID_TUNER) // 0x100 #define DBGCFG_KMF (1 << MODULEID_KMF) // 0x200 #define DBGCFG_UMF (1 << MODULEID_UMF) // 0x400 #define DBGCFG_MENU (1 << MODULEID_MENU) // 0x800 // not used. reserved. #define DBGCFG_DEMUX (1 << MODULEID_DEMUX) // 0x1000 // not used. reserved. #define DBGCFG_PSI (1 << MODULEID_PSI) // 0x2000 #define DBGCFG_EPG (1 << MODULEID_EPG) // 0x4000 // not used. reserved. #define DBGCFG_SUBTITLE (1 << MODULEID_SUBTITLE) // 0x8000 // not used. reserved. #define DBGCFG_ATVCC (1 << MODULEID_ATVCC) // 0x10000 #define DBGCFG_DTVCC (1 << MODULEID_DTVCC) // 0x20000 #define DBGCFG_TTSLICER (1 << MODULEID_TTSLICER) // 0x40000 #define DBGCFG_TTDECODER (1 << MODULEID_TTDECORDER) // 0x80000 #define DBGCFG_JPEG (1 << MODULEID_JPEG) // 0x100000 // not used. reserved. #define DBGCFG_USB (1 << MODULEID_USB) // 0x200000 // used for usb #define DBGCFG_IR (1 << MODULEID_IR) // 0x400000 #define DBGCFG_KEYPAD (1 << MODULEID_KEYPAD) // 0x800000 #define DBGCFG_SPI (1 << MODULEID_SPI) // 0x1000000 #define DBGCFG_I2C (1 << MODULEID_I2C) // 0x2000000 #define DBGCFG_EDID (1 << MODULEID_EDID) // 0x4000000 #define DBGCFG_GPIO (1 << MODULEID_GPIO) // 0x8000000 #define DBGCFG_LE (1 << MODULEID_LE) // 0x10000000 // not used. reserved. #define DBGCFG_CEC (1 << MODULEID_CEC) // 0x20000000 #define DBGCFG_VBV (1 << MODULEID_VBV) // 0x40000000 // used for runav log. #define DBGCFG_CI (1 << MODULEID_CI) // 0x80000000 //~ end of pdbgconf1 Flags // pdbgconf2 Flags #define DBGCFG_MP3 ( 1 << (MODULEID_MP3% 32) ) // 0x1 // not used. reserved. #define DBGCFG_CECSWITCH ( 1 << (MODULEID_CECSWITCH % 32) ) // 0x2 #define DBGCFG_PVR ( 1 << (MODULEID_PVR % 32) ) // 0x4 #define DBGCFG_DVBEUMIDDLEWARE ( 1 << (MODULEID_DVBEUMIDDLEWARE % 32) ) // 0x4 // not used. reserved. #define DBGCFG_HDMIOUT ( 1 << (MODULEID_HDMIOUT % 32) ) // 0x10 // not used. reserved. #define DBGCFG_FRAMEBUFFER ( 1 << (MODULEID_FRAMEBUFFER % 32) ) // 0x20 // not used. reserved. #define DBGCFG_2D ( 1 << (MODULEID_2D % 32) ) // 0x40 // not used. reserved. #define DBGCFG_SMP ( 1 << (MODULEID_SMP % 32) ) // 0x80 // not used. reserved. #define DBGCFG_ALSA (1<<(MODULEID_ALSA%32)) // 0x100 // not used. reserved. #define DBGCFG_RUNAV (1<<(MODULEID_RUNAV%32)) //0x1000 //used for runav debug log. #define DBGCFG_AUTOREBOOT 0x20000000 // not used. reserved. #define DBGCFG_AUTORUN_USB 0x40000000 // not used. reserved. #define DBGCFG_NOAUTORUN 0x80000000 // not used. reserved. //~ end of pdbgconf2 Flags extern unsigned int *pdbgconf1; extern unsigned int *pdbgconf2; extern unsigned char *DrvMsgPrint; //Example how to use new debug macro //DBG_MSG1(DBGCFG_KMF, "example dbg message\n"); //~Example # ifndef CONFIG_SUPPORT_DEBUG_MESSAGE # define DBG_MSG1(id, fmt,args...) # ifdef __KERNEL__ # define RELEASE_MSG1(id, fmt,args...) do{ if(*pdbgconf1 & id) printk(KERN_DEBUG " " fmt, ## args);}while(0) # else # define RELEASE_MSG1(id, fmt,args...) do{ if(*pdbgconf1 & id) fprintf(stdout,fmt, ## args);}while(0) # endif # else # ifdef __KERNEL__ # define DBG_MSG1(id, fmt,args...) do{ if (*pdbgconf1 & id) printk(KERN_DEBUG " " fmt, ## args); } while(0) # define RELEASE_MSG1(id, fmt,args...) do{ if (*pdbgconf1 & id) printk(KERN_CRIT fmt, ## args); } while(0) # else # define DBG_MSG1(id, fmt,args...) do{ if (*pdbgconf1 & id) fprintf(stdout,fmt, ## args); } while(0) # define RELEASE_MSG1(id, fmt,args...) do{ if (*pdbgconf1 & id) fprintf(stdout,fmt, ## args); } while(0) # endif # endif # ifndef CONFIG_SUPPORT_DEBUG_MESSAGE # define DBG_MSG2(id, fmt,args...) # ifdef __KERNEL__ # define RELEASE_MSG2(id, fmt,args...) do{ if (*pdbgconf2 & id) printk(KERN_DEBUG " " fmt, ## args); } while(0) # else # define RELEASE_MSG2(id, fmt,args...) do{ if (*pdbgconf2 & id) fprintf(stdout,fmt, ## args); } while(0) # endif # else # ifdef __KERNEL__ # define DBG_MSG2(id, fmt,args...) do{ if (*pdbgconf2 & id) printk(KERN_DEBUG " " fmt, ## args); } while(0) # define RELEASE_MSG2(id, fmt,args...) do{ if (*pdbgconf2 & id) printk(KERN_CRIT fmt, ## args); } while(0) # else # define DBG_MSG2(id, fmt,args...) do{ if (*pdbgconf2 & id) fprintf(stdout,fmt, ## args); } while(0) # define RELEASE_MSG2(id, fmt,args...) do{ if (*pdbgconf2 & id) fprintf(stdout,fmt, ## args); } while(0) # endif # endif // part II: measure boot time #define BOOT_TIME_BUFFER_ADDRESS 0xba027ef0 enum{ BOOT_TIME_ID_ALL_MODULE_INIT_START, BOOT_TIME_ID_AUDIO_INIT_START, BOOT_TIME_ID_AUDIO_INIT_END, BOOT_TIME_ID_ALL_MODULE_INIT_END, BOOT_TIME_ID_TV_INIT_START, BOOT_TIME_ID_SOURCE_ENABLE_START, BOOT_TIME_ID_TV_INIT_END, BOOT_TIME_ID_NORMAL_SCREEN, BOOT_TIME_ID_POST_SETTING_START, BOOT_TIME_ID_POST_SETTING_END, BOOT_TIME_ID_NORMAL_SCREEN_END, BOOT_TIME_ID_MAX }; #ifdef MEASURE_BOOTTIME #define BOOT_TIME_STORE_RTC(id) \ do { \ writel(readl(0xbe0f0000), BOOT_TIME_BUFFER_ADDRESS - 8*(id) ); \ writel(readl(0xbe0f0004), BOOT_TIME_BUFFER_ADDRESS - 8*(id)+4); \ } while(0) #else #define BOOT_TIME_STORE_RTC(id) #endif //ifdef MEASURE_BOOTTIME #ifdef CONFIG_MEASURE_SOURCECHANGETIME extern struct timeval srcChangeTime[BOOT_TIME_ID_MAX]; extern void printSrcChangeTime(void); extern void saveSourceChangeTime(int id); #undef BOOT_TIME_STORE_RTC #define BOOT_TIME_STORE_RTC(id) \ do {\ saveSourceChangeTime(id); \ } while(0) #endif #endif //_DRV_DEBUG_H_