181 lines
5.6 KiB
C
Executable file
181 lines
5.6 KiB
C
Executable file
/* SPDX-License-Identifier: GPL-2.0 */
|
|
/*
|
|
* Copyright (c) 2021 Samsung Electronics Co., Ltd.
|
|
* http://www.samsung.com
|
|
*/
|
|
|
|
#ifndef DEBUG_SNAPSHOT_LOCAL_H
|
|
#define DEBUG_SNAPSHOT_LOCAL_H
|
|
#include <soc/samsung/debug-snapshot-log.h>
|
|
#include <dt-bindings/soc/samsung/debug-snapshot-def.h>
|
|
|
|
struct dbg_snapshot_info {
|
|
size_t size;
|
|
size_t vaddr;
|
|
size_t paddr;
|
|
bool enabled;
|
|
};
|
|
|
|
struct dbg_snapshot_base {
|
|
size_t size;
|
|
size_t vaddr;
|
|
size_t paddr;
|
|
int magic;
|
|
int version;
|
|
bool enabled;
|
|
};
|
|
|
|
struct dbg_snapshot_item {
|
|
char *name;
|
|
struct dbg_snapshot_info entry;
|
|
unsigned int persist;
|
|
unsigned char *head_ptr;
|
|
unsigned char *curr_ptr;
|
|
};
|
|
|
|
struct dbg_snapshot_log_item {
|
|
char *name;
|
|
struct dbg_snapshot_info entry;
|
|
int arr_num;
|
|
int log_num;
|
|
bool policy;
|
|
};
|
|
|
|
struct dbg_snapshot_desc {
|
|
struct device *dev;
|
|
raw_spinlock_t ctrl_lock;
|
|
int sjtag_status;
|
|
bool panic_to_wdt;
|
|
bool last_kmsg;
|
|
unsigned int hold_key;
|
|
unsigned int trigger_key;
|
|
unsigned int scratch_offset;
|
|
unsigned int scratch_bit;
|
|
};
|
|
|
|
struct dbg_snapshot_dpm {
|
|
bool enabled;
|
|
unsigned int version;
|
|
bool enabled_debug;
|
|
unsigned int dump_mode;
|
|
int dump_mode_none;
|
|
bool dump_mode_file;
|
|
|
|
unsigned int pre_log;
|
|
unsigned int p_el1_da;
|
|
unsigned int p_el1_sp_pc;
|
|
unsigned int p_el1_ia;
|
|
unsigned int p_el1_undef;
|
|
unsigned int p_el1_inv;
|
|
unsigned int p_el1_serror;
|
|
};
|
|
|
|
struct dbg_snapshot_backtrace_data {
|
|
u64 paddr;
|
|
char *vaddr;
|
|
size_t size;
|
|
u64 curr_idx;
|
|
bool stop_logging;
|
|
};
|
|
|
|
extern void dbg_snapshot_init_log(void);
|
|
extern void dbg_snapshot_init_dpm(void);
|
|
extern void dbg_snapshot_init_utils(struct device *dev);
|
|
extern void dbg_snapshot_init_pmsg(void);
|
|
extern int dbg_snapshot_dt_scan_dpm(void);
|
|
extern int dbg_snapshot_get_enable(void);
|
|
extern void dbg_snapshot_output(void);
|
|
extern void dbg_snapshot_log_output(void);
|
|
extern void dbg_snapshot_hook_logger(const char *buf, size_t size, unsigned int id);
|
|
extern void __iomem *dbg_snapshot_get_header_vaddr(void);
|
|
extern unsigned long dbg_snapshot_get_header_paddr(void);
|
|
extern void dbg_snapshot_scratch_reg(unsigned int val);
|
|
extern void dbg_snapshot_print_log_report(void);
|
|
extern void dbg_snapshot_set_debug_test_buffer_addr(u64 paddr, unsigned int cpu);
|
|
extern u64 dbg_snapshot_get_debug_test_buffer_addr(unsigned int cpu);
|
|
extern void dbg_snapshot_set_qd_entry(unsigned long address);
|
|
extern int dbg_snapshot_get_num_items(void);
|
|
extern int dbg_snapshot_log_get_num_items(void);
|
|
extern struct dbg_snapshot_item *dbg_snapshot_get_item(const char *name);
|
|
extern void *dbg_snapshot_get_item_by_index(int index);
|
|
extern void *dbg_snapshot_log_get_item_by_index(int index);
|
|
extern void dbg_snapshot_set_policy_log_item(const char *name, bool en);
|
|
extern int dbg_snapshot_get_dpm_none_dump_mode(void);
|
|
extern void dbg_snapshot_set_dpm_none_dump_mode(unsigned int mode);
|
|
extern void cache_flush_all(void);
|
|
|
|
|
|
#if IS_ENABLED(CONFIG_TRACE_MMIO_ACCESS)
|
|
#define register_rwmmio_write(a, b) register_trace_rwmmio_write(a, b)
|
|
#define register_rwmmio_read(a, b) register_trace_rwmmio_read(a, b)
|
|
#define register_rwmmio_post_read(a, b) register_trace_rwmmio_post_read(a, b)
|
|
#else
|
|
#define register_rwmmio_write(a, b) do { } while (0)
|
|
#define register_rwmmio_read(a, b) do { } while (0)
|
|
#define register_rwmmio_post_read(a, b) do { } while (0)
|
|
#endif
|
|
|
|
extern struct dbg_snapshot_kevents dss_kevents;
|
|
extern struct dbg_snapshot_desc dss_desc;
|
|
extern struct dbg_snapshot_dpm dss_dpm;
|
|
|
|
/* Size domain */
|
|
#define DSS_KEEP_HEADER_SZ (SZ_256 * 3)
|
|
#define DSS_HEADER_SZ SZ_4K //0x0 -- 0x1000
|
|
#define DSS_MMU_REG_SZ SZ_4K //0x1000 -- 0x2000
|
|
#define DSS_CORE_REG_SZ SZ_4K //0x2000 -- 0x3000
|
|
#define DSS_DBGC_SRAM_LOG_SZ SZ_8K //0x3000 -- 0x5000
|
|
#define DSS_DPM_DT_SZ SZ_8K //0x5000 -- 0x7000
|
|
#define DSS_DBGC_DRAM_LOG_SZ SZ_16K //0x7000 -- 0xB000
|
|
|
|
#define DSS_MMU_REG_OFFSET SZ_512
|
|
#define DSS_CORE_REG_OFFSET SZ_512
|
|
#define DSS_MAX_BL_SIZE (24)
|
|
|
|
/* Sign domain */
|
|
#define DSS_SIGN_RESET 0x0
|
|
#define DSS_SIGN_RESERVED 0x1
|
|
#define DSS_SIGN_SCRATCH 0xD
|
|
#define DSS_SIGN_ALIVE 0xFACE
|
|
#define DSS_SIGN_DEAD 0xDEAD
|
|
#define DSS_SIGN_PANIC 0xBABA
|
|
#define DSS_SIGN_SAFE_FAULT 0xFAFA
|
|
#define DSS_SIGN_NORMAL_REBOOT 0xCAFE
|
|
#define DSS_SIGN_LOCKUP 0xDEADBEEF
|
|
#define DSS_SIGN_MAGIC (0xDB9 << 16)
|
|
#define DSS_BOOT_CNT_MAGIC 0xFACEDB90
|
|
#define DSS_BACKTRACE_MAGIC 0x0DB90DB9
|
|
#define DSS_KEVENTS_MINI_MAGIC 0x0109512E
|
|
|
|
/* Specific Address Information */
|
|
#define DSS_OFFSET_SCRATCH (0x100)
|
|
#define DSS_OFFSET_NONE_DPM_DUMP_MODE (0x108)
|
|
#define DSS_OFFSET_DEBUG_TEST_BUFFER(n) (0x190 + (0x8 * n))
|
|
#define DSS_OFFSET_LAST_LOGBUF (0x200)
|
|
#define DSS_OFFSET_LAST_PLATFORM_LOGBUF (0x204)
|
|
#define DSS_OFFSET_CHECK_EOB (0x208)
|
|
#define DSS_OFFSET_BL_BOOT_CNT_MAGIC (0x210)
|
|
#define DSS_OFFSET_BL_BOOT_CNT (0x214)
|
|
#define DSS_OFFSET_KERNEL_BOOT_CNT_MAGIC (0x218)
|
|
#define DSS_OFFSET_KERNEL_BOOT_CNT (0x21C)
|
|
#define DSS_OFFSET_MEMLOG_BL_BASE DSS_MEMLOG_BL_BASE /* 0x290 */
|
|
#define DSS_OFFSET_MEMLOG_BL_MAGIC (DSS_MEMLOG_BL_BASE + 0x8) /*0x298 */
|
|
#define DSS_OFFSET_BACKTRACE_MAGIC (0x2A0)
|
|
#define DSS_OFFSET_BACKTRACE_CPU (0x2A4)
|
|
#define DSS_OFFSET_BACKTRACE_PADDR (0x2A8)
|
|
#define DSS_OFFSET_BACKTRACE_SIZE (0x2B0)
|
|
#define DSS_OFFSET_VERSION (0x2B8)
|
|
#define DSS_OFFSET_KEVENTS_MINI_MAGIC (0x2BC)
|
|
#define DSS_OFFSET_EMERGENCY_REASON (0x300)
|
|
#define DSS_OFFSET_WDT_CALLER (0x310)
|
|
#define DSS_OFFSET_CORE_POWER_STAT (0x400)
|
|
#define DSS_OFFSET_PANIC_STAT (0x500)
|
|
#define DSS_OFFSET_QD_ENTRY (0x660)
|
|
|
|
/* DSS_BASE + 0x700 -- 0x8FF is reserved */
|
|
#define DSS_OFFSET_LINUX_BANNER (0x700)
|
|
/* DSS_BASE + 0x900 -- 0xDFF is reserved */
|
|
#define DSS_OFFSET_ITEM_INFO (0x900)
|
|
/* DSS_BASE + 0xE00 -- 0xFFF is reserved */
|
|
#define DSS_OFFSET_PANIC_STRING (0xE00)
|
|
#endif
|