mirror of
https://github.com/hardkernel/kernel_common_drivers.git
synced 2026-06-25 12:03:48 +09:00
0335d01014
PD#SWPL-129901 Problem: IO-R-E can't read the register's data. Solution: when the "read" action is over, the hook function will get the value from the action. Verify: SC2 Change-Id: I12426209bf92e5c242022041e01ed6a7711808dc Signed-off-by: qiankun.wang <qiankun.wang@amlogic.com>
74 lines
2.0 KiB
C
74 lines
2.0 KiB
C
/* SPDX-License-Identifier: (GPL-2.0+ OR MIT) */
|
|
/*
|
|
* Copyright (c) 2019 Amlogic, Inc. All rights reserved.
|
|
*/
|
|
|
|
#ifndef __AML_IOTRACE_H
|
|
#define __AML_IOTRACE_H
|
|
|
|
extern int ramoops_io_skip;
|
|
extern int ramoops_io_en;
|
|
extern int ramoops_trace_mask;
|
|
extern int meson_clk_debug;
|
|
extern int meson_pd_debug;
|
|
|
|
void notrace __nocfi pstore_io_save(unsigned long reg, unsigned long val, unsigned int flag,
|
|
unsigned long *irq_flags);
|
|
|
|
#define PSTORE_FLAG_IO_R 0x0
|
|
#define PSTORE_FLAG_IO_W 0x1
|
|
#define PSTORE_FLAG_IO_R_END 0x2
|
|
#define PSTORE_FLAG_IO_W_END 0x3
|
|
|
|
#if (IS_ENABLED(CONFIG_AMLOGIC_DEBUG_IOTRACE)) && (!defined SKIP_IO_TRACE)
|
|
#define pstore_ftrace_io_wr(reg, val) \
|
|
unsigned long irqflg; \
|
|
pstore_io_save(reg, val, PSTORE_FLAG_IO_W, &irqflg)
|
|
|
|
#define pstore_ftrace_io_wr_end(reg, val) \
|
|
pstore_io_save(reg, val, PSTORE_FLAG_IO_W_END, &irqflg)
|
|
|
|
#define pstore_ftrace_io_rd(reg) \
|
|
unsigned long irqflg; \
|
|
pstore_io_save(reg, 0, PSTORE_FLAG_IO_R, &irqflg)
|
|
|
|
#define pstore_ftrace_io_rd_end(reg, val) \
|
|
pstore_io_save(reg, val, PSTORE_FLAG_IO_R_END, &irqflg)
|
|
|
|
#else
|
|
#define pstore_ftrace_io_wr(reg, val) do { } while (0)
|
|
#define pstore_ftrace_io_rd(reg) do { } while (0)
|
|
#define pstore_ftrace_io_wr_end(reg, val) do { } while (0)
|
|
#define pstore_ftrace_io_rd_end(reg, val) do { } while (0)
|
|
#define pstore_ftrace_io_tag(reg, val) do { } while (0)
|
|
|
|
#endif /*CONFIG_AMLOGIC_DEBUG_IOTRACE && !SKIP_IO_TRACE */
|
|
|
|
enum aml_pstore_type_id {
|
|
AML_PSTORE_TYPE_IO = 0,
|
|
AML_PSTORE_TYPE_SCHED = 1,
|
|
AML_PSTORE_TYPE_IRQ = 2,
|
|
AML_PSTORE_TYPE_SMC = 3,
|
|
AML_PSTORE_TYPE_MISC = 4,
|
|
AML_PSTORE_TYPE_MAX
|
|
};
|
|
|
|
struct io_trace_data {
|
|
unsigned int reg;
|
|
unsigned int val;
|
|
union {
|
|
struct {
|
|
unsigned long flag:2;
|
|
unsigned long :0;
|
|
};
|
|
unsigned long ip;
|
|
};
|
|
unsigned long parent_ip;
|
|
};
|
|
|
|
void aml_pstore_write(enum aml_pstore_type_id type, char *buf, unsigned long size);
|
|
|
|
int ftrace_ramoops_init(void);
|
|
#endif
|
|
|