/* Copyright Statement: * * This software/firmware and related documentation ("MediaTek Software") are * protected under relevant copyright laws. The information contained herein * is confidential and proprietary to MediaTek Inc. and/or its licensors. * Without the prior written permission of MediaTek inc. and/or its licensors, * any reproduction, modification, use or disclosure of MediaTek Software, * and information contained herein, in whole or in part, shall be strictly prohibited. */ /* MediaTek Inc. (C) 2016. All rights reserved. * * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE") * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON * AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT. * NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE * SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR * SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES * THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES * CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK * SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND * CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE, * AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE, * OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO * MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. */ #if !defined(__AEE_PLATFORM_DEBUG_H__) #define __AEE_PLATFORM_DEBUG_H__ #include #include typedef unsigned long long u64; typedef unsigned long long (*CALLBACK)(void *data, unsigned long sz); /* extern global variable */ extern BOOT_ARGUMENT *g_boot_arg; enum { AEE_PLAT_DFD20, AEE_PLAT_DRAM, AEE_PLAT_CPU_BUS, AEE_PLAT_SPM_DATA, AEE_PLAT_SPM_SRAM_DATA, AEE_PLAT_ATF_LAST_LOG, AEE_PLAT_ATF_CRASH_REPORT, AEE_PLAT_ATF_RAW_LOG, AEE_PLAT_ATF_RDUMP_LOG, AEE_PLAT_HVFS, #ifdef MTK_TINYSYS_SSPM_SUPPORT AEE_PLAT_SSPM_COREDUMP, AEE_PLAT_SSPM_DATA, AEE_PLAT_SSPM_XFILE, AEE_PLAT_SSPM_LAST_LOG, #endif AEE_PLAT_PLLK_LAST_LOG, AEE_PLAT_MCDI_DATA, AEE_PLAT_SCP_COREDUMP, AEE_PLAT_INFRA_CG, AEE_PLAT_ADSP_COREDUMP, #ifdef MTK_TINYSYS_MCUPM_SUPPORT AEE_PLAT_MCUPM_COREDUMP, AEE_PLAT_MCUPM_DATA, AEE_PLAT_MCUPM_XFILE, AEE_PLAT_MCUPM_LAST_LOG, #endif #ifdef MTK_PICACHU_SUPPORT AEE_PLAT_PICACHU_LOG, #endif #ifdef MICROTRUST_TEE_DUMP_SUPPORT AEE_PLAT_TEEI_LOG, #endif #ifdef MTK_DPM_SUPPORT AEE_PLAT_DPM_DATA, #endif #ifdef MTK_GPU_DFD_SUPPORT AEE_PLAT_GPU_DFD, #endif AEE_PLAT_ATF_FOOTPRINT_LOG, AEE_PLAT_LOG_DUR_LKDUMP, AEE_PLAT_DEBUG_NUM, }; /* function pointers */ extern unsigned int (* plat_dfd20_get)(u64 offset, int *len, CALLBACK dev_write); extern unsigned int (* plat_dram_get)(u64 offset, int *len, CALLBACK dev_write); extern unsigned int (* plat_cpu_bus_get)(u64 offset, int *len, CALLBACK dev_write); extern unsigned int (* plat_spm_data_get)(u64 offset, int *len, CALLBACK dev_write); extern unsigned int (* plat_spm_sram_data_get)(u64 offset, int *len, CALLBACK dev_write); extern unsigned int (* plat_hvfs_get)(u64 offset, int *len, CALLBACK dev_write); #ifdef MTK_TINYSYS_SSPM_SUPPORT extern unsigned int (* plat_sspm_coredump_get)(u64 offset, int *len, CALLBACK dev_write); extern unsigned int (* plat_sspm_data_get)(u64 offset, int *len, CALLBACK dev_write); extern unsigned int (* plat_sspm_xfile_get)(u64 offset, int *len, CALLBACK dev_write); extern unsigned int (* plat_sspm_log_get)(u64 offset, int *len, CALLBACK dev_write); #endif extern unsigned int (* plat_pllk_last_log_get)(u64 offset, int *len, CALLBACK dev_write); extern unsigned int (* plat_dur_lkdump_get)(u64 offset, int *len, CALLBACK dev_write); extern unsigned int (* plat_mcdi_get)(u64 offset, int *len, CALLBACK dev_write); #ifdef MTK_TINYSYS_SCP_SUPPORT extern unsigned int (* plat_scp_coredump_get)(u64 offset, int *len, CALLBACK dev_write); #endif extern unsigned int (* plat_infra_cg_get)(u64 offset, int *len, CALLBACK dev_write); #ifdef MTK_AUDIODSP_SUPPORT extern unsigned int (* plat_adsp_coredump_get)(u64 offset, int *len, CALLBACK dev_write); #endif #ifdef MTK_TINYSYS_MCUPM_SUPPORT extern unsigned int (* plat_mcupm_coredump_get)(u64 offset, int *len, CALLBACK dev_write); extern unsigned int (* plat_mcupm_data_get)(u64 offset, int *len, CALLBACK dev_write); extern unsigned int (* plat_mcupm_xfile_get)(u64 offset, int *len, CALLBACK dev_write); extern unsigned int (* plat_mcupm_log_get)(u64 offset, int *len, CALLBACK dev_write); #endif #ifdef MTK_PICACHU_SUPPORT extern unsigned int (* plat_picachu_log_get)(u64 offset, int *len, CALLBACK dev_write); #endif #ifdef MTK_DPM_SUPPORT extern unsigned int (* plat_dpm_data_get)(u64 offset, int *len, CALLBACK dev_write); #endif #ifdef MTK_GPU_DFD_SUPPORT extern unsigned int (* plat_gpu_dfd_get)(u64 offset, int *len, CALLBACK dev_write); #endif extern unsigned int (* plat_atf_footprint_log_get)(u64 offset, int *len, CALLBACK dev_write); /* SMC ID for ATF control */ #define MTK_SIP_BL_ATF_CONTROL_AARCH32 0x82000400 /* DRAM KLOG at MRDUMP area of expdb, offset from bottom = 3145728 - 16384 = 3129344 */ #define MRDUMP_EXPDB_BOTTOM_OFFSET 2097152 #define MRDUMP_EXPDB_DRAM_KLOG_OFFSET 3129344 /* common api */ unsigned int kedump_plat_savelog(int condition, u64 offset, int *len, CALLBACK dev_write); extern void arch_clean_cache_range(addr_t start, size_t len); extern part_dev_t *mt_part_get_device(void); /* common interface for platform */ void mrdump_write_log(u64 offset_dst, void *data, int len); void mrdump_read_log(void *data, int len, u64 offset); int lkdump_debug_init(void); /* common interface from platform */ int platform_debug_init(void); void platform_lastpc_postinit(void); extern struct aee_db_file_info* get_file_info(void); /* db filename and max size */ struct aee_db_file_info { char filename[32]; unsigned int filesize; unsigned int step; }; #endif /* __AEE_PLATFORM_DEBUG_H__ */