04ff6cbc91
More optimization issues when compiling with Clang. Panics happen when the device goes into standby with the following report. <6>[ 1470.900859] [0: Binder:4157_2: 8735] EXYNOS-PM:: MIF down. cur_count: 5, acc_count: 5 <6>[ 1470.900859] [0: Binder:4157_2: 8735] EXYNOS-PM:: MIF_UP history: <6>[ 1470.900859] [0: Binder:4157_2: 8735] EXYNOS-PM: mifuser: 0x540000, time: 5:35:40, latency: 1955[usec] <6>[ 1470.900859] [0: Binder:4157_2: 8735] EXYNOS-PM: mifuser: 0x400000, time: 5:35:40, latency: 1956[usec] <6>[ 1470.900859] [0: Binder:4157_2: 8735] EXYNOS-PM: mifuser: 0x100000, time: 5:35:41, latency: 1954[usec] <6>[ 1470.900859] [0: Binder:4157_2: 8735] EXYNOS-PM: mifuser: 0x400000, time: 5:35:41, latency: 1955[usec] <6>[ 1470.900859] [0: Binder:4157_2: 8735] EXYNOS-PM: mifuser: 0x100000, time: 5:35:41, latency: 1955[usec] <0>[ 1470.900859] [0: Binder:4157_2: 8735] Unable to handle kernel paging request at virtual address ffffff800b346f9c <2>[ 1470.900859] [0: Binder:4157_2: 8735] sec_debug_set_extra_info_fault = KERN / 0xffffff800b346f9c <1>[ 1470.900859] [0: Binder:4157_2: 8735] Mem abort info: <1>[ 1470.900859] [0: Binder:4157_2: 8735] Exception class = DABT (current EL), IL = 32 bits <1>[ 1470.900859] [0: Binder:4157_2: 8735] SET = 0, FnV = 0 <1>[ 1470.900859] [0: Binder:4157_2: 8735] EA = 0, S1PTW = 0 <1>[ 1470.900859] [0: Binder:4157_2: 8735] Data abort info: <1>[ 1470.900859] [0: Binder:4157_2: 8735] ISV = 0, ISS = 0x00000061 <1>[ 1470.900859] [0: Binder:4157_2: 8735] CM = 0, WnR = 1 <1>[ 1470.900859] [0: Binder:4157_2: 8735] swapper pgtable: 4k pages, 39-bit VAs, pgd = ffffff800a66a000 <1>[ 1470.900859] [0: Binder:4157_2: 8735] [ffffff800b346f9c] *pgd=000000097cdfe003, *pud=000000097cdfe003, *pmd=00000009740b7003, *pte=00e800000203f707 <0>[ 1470.900859] [0: Binder:4157_2: 8735] Internal error: Oops: 96000061 [#1] PREEMPT SMP <4>[ 1470.900859] [0: Binder:4157_2: 8735] Modules linked in: <0>[ 1470.900859] [0: Binder:4157_2: 8735] Process Binder:4157_2 (pid: 8735, stack limit = 0xffffff8039708000) <0>[ 1470.900859] [0: Binder:4157_2: 8735] debug-snapshot: core register saved(CPU:0) <0>[ 1470.900859] [0: Binder:4157_2: 8735] L2ECTLR_EL1: 0000000000000007 <0>[ 1470.900859] [0: Binder:4157_2: 8735] L2ECTLR_EL1 valid_bit(30) is NOT set (0x0) <0>[ 1470.900859] [0: Binder:4157_2: 8735] CPUMERRSR: 0000000008000001, L2MERRSR: 0000000010200c00 <0>[ 1470.900859] [0: Binder:4157_2: 8735] CPUMERRSR valid_bit(31) is NOT set (0x0) <0>[ 1470.900859] [0: Binder:4157_2: 8735] L2MERRSR valid_bit(31) is NOT set (0x0) <0>[ 1470.900859] [0: Binder:4157_2: 8735] debug-snapshot: context saved(CPU:0) <6>[ 1470.900859] [0: Binder:4157_2: 8735] debug-snapshot: item - log_kevents is disabled <6>[ 1470.900859] [0: Binder:4157_2: 8735] TIF_FOREIGN_FPSTATE: 1, FP/SIMD depth 0, cpu: 0 <4>[ 1470.900859] [0: Binder:4157_2: 8735] CPU: 0 PID: 8735 Comm: Binder:4157_2 Not tainted 4.14.113 - Fresh Core-user #1 <4>[ 1470.900859] [0: Binder:4157_2: 8735] Hardware name: Samsung A50 LTN OPEN rev04 board based on Exynos9610 (DT) <4>[ 1470.900859] [0: Binder:4157_2: 8735] task: ffffffc0466d6000 task.stack: ffffff8039708000 <4>[ 1470.900859] [0: Binder:4157_2: 8735] PC is at acpm_get_inform+0x90/0x100 <4>[ 1470.900859] [0: Binder:4157_2: 8735] LR is at acpm_get_inform+0x7c/0x100 <4>[ 1470.900859] [0: Binder:4157_2: 8735] pc : [<ffffff8008505cd4>] lr : [<ffffff8008505cc0>] pstate: 604001c5 <4>[ 1470.900859] [0: Binder:4157_2: 8735] sp : ffffff803970bac0 <4>[ 1470.900859] [0: Binder:4157_2: 8735] x29: ffffff803970bac0 x28: ffffffc0466d6000 <4>[ 1470.900859] [0: Binder:4157_2: 8735] x27: ffffff8008e44b64 x26: ffffff8008e44b3e <4>[ 1470.900859] [0: Binder:4157_2: 8735] x25: ffffff8009e5f210 x24: 0000000010624dd3 <4>[ 1470.900859] [0: Binder:4157_2: 8735] x23: 0000000000000029 x22: 0000000000000018 <4>[ 1470.900859] [0: Binder:4157_2: 8735] x21: ffffff8009e2c000 x20: ffffff8008ef6785 <4>[ 1470.900859] [0: Binder:4157_2: 8735] x19: ffffff8008ef674c x18: 00000000000000a0 <4>[ 1470.900859] [0: Binder:4157_2: 8735] x17: ffffff8009b3023c x16: 0000000000000001 <4>[ 1470.900859] [0: Binder:4157_2: 8735] x15: ffffff8008c8a964 x14: 202c303030303031 <4>[ 1470.900859] [0: Binder:4157_2: 8735] x13: 7830203a72657375 x12: 0000000000000000 <4>[ 1470.900859] [0: Binder:4157_2: 8735] x11: 0000000000000000 x10: ffffffffffffffff <4>[ 1470.900859] [0: Binder:4157_2: 8735] x9 : ffffff800b346f00 x8 : ffffff800b346f00 <4>[ 1470.900859] [0: Binder:4157_2: 8735] x7 : 203a79636e657461 x6 : ffffff80f615273c <4>[ 1470.900859] [0: Binder:4157_2: 8735] x5 : 000000000000221f x4 : 000000000000000c <4>[ 1470.900859] [0: Binder:4157_2: 8735] x3 : 000000000000000a x2 : 0000000000000000 <4>[ 1470.900859] [0: Binder:4157_2: 8735] x1 : 00000000000001c0 x0 : 0000000000000041 Similar solution as d855e6f. Make the structs volatile to prevent optimization. Signed-off-by: John Vincent <git@tensevntysevn.cf> Signed-off-by: Samuel Pascua <sgpascua@ngcp.ph>
36 lines
1.3 KiB
C
Executable file
36 lines
1.3 KiB
C
Executable file
#ifndef __ACPM_H__
|
|
#define __ACPM_H__
|
|
|
|
struct acpm_info {
|
|
unsigned int plugin_num;
|
|
struct device *dev;
|
|
void __iomem *timer_base;
|
|
unsigned int timer_cnt;
|
|
unsigned int enter_wfi;
|
|
};
|
|
|
|
extern void *memcpy_align_4(void *dest, const void *src, unsigned int n);
|
|
|
|
#define EXYNOS_PMU_CORTEX_APM_CONFIGURATION (0x0100)
|
|
#define EXYNOS_PMU_CORTEX_APM_STATUS (0x0104)
|
|
#define EXYNOS_PMU_CORTEX_APM_OPTION (0x0108)
|
|
#define EXYNOS_PMU_CORTEX_APM_DURATION0 (0x0110)
|
|
#define EXYNOS_PMU_CORTEX_APM_DURATION1 (0x0114)
|
|
#define EXYNOS_PMU_CORTEX_APM_DURATION2 (0x0118)
|
|
#define EXYNOS_PMU_CORTEX_APM_DURATION3 (0x011C)
|
|
|
|
#define EXYNOS_TIMER_APM_TCVR (0x0008)
|
|
#define EXYNOS_PERI_TIMER_MAX (0xFFFF)
|
|
|
|
|
|
#define APM_LOCAL_PWR_CFG_RESET (~(0x1 << 0))
|
|
|
|
extern volatile struct acpm_framework *acpm_initdata;
|
|
extern void __iomem *acpm_srambase;
|
|
extern void exynos_acpm_timer_clear(void);
|
|
extern u32 exynos_get_peri_timer_icvra(void);
|
|
extern void *get_fvmap_base(void);
|
|
extern void acpm_init_eint_clk_req(u32 eint_num);
|
|
extern void acpm_init_eint_nfc_clk_req(u32 eint_num);
|
|
|
|
#endif
|