ARM: EXYNOS: Migrate Exynos specific macros from plat to mach
[firefly-linux-kernel-4.4.55.git] / arch / arm / mach-exynos / common.h
1 /*
2  * Copyright (c) 2011 Samsung Electronics Co., Ltd.
3  *              http://www.samsung.com
4  *
5  * Common Header for EXYNOS machines
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License version 2 as
9  * published by the Free Software Foundation.
10  */
11
12 #ifndef __ARCH_ARM_MACH_EXYNOS_COMMON_H
13 #define __ARCH_ARM_MACH_EXYNOS_COMMON_H
14
15 #include <linux/reboot.h>
16 #include <linux/of.h>
17
18 #define EXYNOS4210_CPU_ID       0x43210000
19 #define EXYNOS4212_CPU_ID       0x43220000
20 #define EXYNOS4412_CPU_ID       0xE4412200
21 #define EXYNOS4_CPU_MASK        0xFFFE0000
22
23 #define EXYNOS5250_SOC_ID       0x43520000
24 #define EXYNOS5420_SOC_ID       0xE5420000
25 #define EXYNOS5440_SOC_ID       0xE5440000
26 #define EXYNOS5_SOC_MASK        0xFFFFF000
27
28 extern unsigned long samsung_cpu_id;
29
30 #define IS_SAMSUNG_CPU(name, id, mask)          \
31 static inline int is_samsung_##name(void)       \
32 {                                               \
33         return ((samsung_cpu_id & mask) == (id & mask));        \
34 }
35
36 IS_SAMSUNG_CPU(exynos4210, EXYNOS4210_CPU_ID, EXYNOS4_CPU_MASK)
37 IS_SAMSUNG_CPU(exynos4212, EXYNOS4212_CPU_ID, EXYNOS4_CPU_MASK)
38 IS_SAMSUNG_CPU(exynos4412, EXYNOS4412_CPU_ID, EXYNOS4_CPU_MASK)
39 IS_SAMSUNG_CPU(exynos5250, EXYNOS5250_SOC_ID, EXYNOS5_SOC_MASK)
40 IS_SAMSUNG_CPU(exynos5420, EXYNOS5420_SOC_ID, EXYNOS5_SOC_MASK)
41 IS_SAMSUNG_CPU(exynos5440, EXYNOS5440_SOC_ID, EXYNOS5_SOC_MASK)
42
43 #if defined(CONFIG_CPU_EXYNOS4210)
44 # define soc_is_exynos4210()    is_samsung_exynos4210()
45 #else
46 # define soc_is_exynos4210()    0
47 #endif
48
49 #if defined(CONFIG_SOC_EXYNOS4212)
50 # define soc_is_exynos4212()    is_samsung_exynos4212()
51 #else
52 # define soc_is_exynos4212()    0
53 #endif
54
55 #if defined(CONFIG_SOC_EXYNOS4412)
56 # define soc_is_exynos4412()    is_samsung_exynos4412()
57 #else
58 # define soc_is_exynos4412()    0
59 #endif
60
61 #define EXYNOS4210_REV_0        (0x0)
62 #define EXYNOS4210_REV_1_0      (0x10)
63 #define EXYNOS4210_REV_1_1      (0x11)
64
65 #if defined(CONFIG_SOC_EXYNOS5250)
66 # define soc_is_exynos5250()    is_samsung_exynos5250()
67 #else
68 # define soc_is_exynos5250()    0
69 #endif
70
71 #if defined(CONFIG_SOC_EXYNOS5420)
72 # define soc_is_exynos5420()    is_samsung_exynos5420()
73 #else
74 # define soc_is_exynos5420()    0
75 #endif
76
77 #if defined(CONFIG_SOC_EXYNOS5440)
78 # define soc_is_exynos5440()    is_samsung_exynos5440()
79 #else
80 # define soc_is_exynos5440()    0
81 #endif
82
83 #define soc_is_exynos4() (soc_is_exynos4210() || soc_is_exynos4212() || \
84                           soc_is_exynos4412())
85 #define soc_is_exynos5() (soc_is_exynos5250() || soc_is_exynos5420())
86
87 void mct_init(void __iomem *base, int irq_g0, int irq_l0, int irq_l1);
88
89 struct map_desc;
90 void exynos_init_io(void);
91 void exynos_restart(enum reboot_mode mode, const char *cmd);
92 void exynos_cpuidle_init(void);
93 void exynos_cpufreq_init(void);
94 void exynos_init_late(void);
95
96 void exynos_firmware_init(void);
97
98 #ifdef CONFIG_PINCTRL_EXYNOS
99 extern u32 exynos_get_eint_wake_mask(void);
100 #else
101 static inline u32 exynos_get_eint_wake_mask(void) { return 0xffffffff; }
102 #endif
103
104 #ifdef CONFIG_PM_SLEEP
105 extern void __init exynos_pm_init(void);
106 #else
107 static inline void exynos_pm_init(void) {}
108 #endif
109
110 extern void exynos_cpu_resume(void);
111
112 extern struct smp_operations exynos_smp_ops;
113
114 extern void exynos_cpu_die(unsigned int cpu);
115
116 /* PMU(Power Management Unit) support */
117
118 #define PMU_TABLE_END   NULL
119
120 enum sys_powerdown {
121         SYS_AFTR,
122         SYS_LPA,
123         SYS_SLEEP,
124         NUM_SYS_POWERDOWN,
125 };
126
127 extern unsigned long l2x0_regs_phys;
128 struct exynos_pmu_conf {
129         void __iomem *reg;
130         unsigned int val[NUM_SYS_POWERDOWN];
131 };
132
133 extern void exynos_sys_powerdown_conf(enum sys_powerdown mode);
134
135 extern void s5p_init_cpu(void __iomem *cpuid_addr);
136 extern unsigned int samsung_rev(void);
137
138 #endif /* __ARCH_ARM_MACH_EXYNOS_COMMON_H */