xref: /OK3568_Linux_fs/kernel/arch/arm/mach-s3c/cpu.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * Copyright (c) 2011 Samsung Electronics Co., Ltd.
4*4882a593Smuzhiyun  *		http://www.samsung.com/
5*4882a593Smuzhiyun  *
6*4882a593Smuzhiyun  * Copyright (c) 2004-2005 Simtec Electronics
7*4882a593Smuzhiyun  *	Ben Dooks <ben@simtec.co.uk>
8*4882a593Smuzhiyun  *
9*4882a593Smuzhiyun  * Header file for Samsung CPU support
10*4882a593Smuzhiyun  */
11*4882a593Smuzhiyun 
12*4882a593Smuzhiyun /* todo - fix when rmk changes iodescs to use `void __iomem *` */
13*4882a593Smuzhiyun 
14*4882a593Smuzhiyun #ifndef __SAMSUNG_PLAT_CPU_H
15*4882a593Smuzhiyun #define __SAMSUNG_PLAT_CPU_H
16*4882a593Smuzhiyun 
17*4882a593Smuzhiyun extern unsigned long samsung_cpu_id;
18*4882a593Smuzhiyun 
19*4882a593Smuzhiyun #define S3C2410_CPU_ID		0x32410000
20*4882a593Smuzhiyun #define S3C2410_CPU_MASK	0xFFFFFFFF
21*4882a593Smuzhiyun 
22*4882a593Smuzhiyun #define S3C24XX_CPU_ID		0x32400000
23*4882a593Smuzhiyun #define S3C24XX_CPU_MASK	0xFFF00000
24*4882a593Smuzhiyun 
25*4882a593Smuzhiyun #define S3C2412_CPU_ID		0x32412000
26*4882a593Smuzhiyun #define S3C2412_CPU_MASK	0xFFFFF000
27*4882a593Smuzhiyun 
28*4882a593Smuzhiyun #define S3C6400_CPU_ID		0x36400000
29*4882a593Smuzhiyun #define S3C6410_CPU_ID		0x36410000
30*4882a593Smuzhiyun #define S3C64XX_CPU_MASK	0xFFFFF000
31*4882a593Smuzhiyun 
32*4882a593Smuzhiyun #define S5PV210_CPU_ID		0x43110000
33*4882a593Smuzhiyun #define S5PV210_CPU_MASK	0xFFFFF000
34*4882a593Smuzhiyun 
35*4882a593Smuzhiyun #define IS_SAMSUNG_CPU(name, id, mask)		\
36*4882a593Smuzhiyun static inline int is_samsung_##name(void)	\
37*4882a593Smuzhiyun {						\
38*4882a593Smuzhiyun 	return ((samsung_cpu_id & mask) == (id & mask));	\
39*4882a593Smuzhiyun }
40*4882a593Smuzhiyun 
41*4882a593Smuzhiyun IS_SAMSUNG_CPU(s3c2410, S3C2410_CPU_ID, S3C2410_CPU_MASK)
42*4882a593Smuzhiyun IS_SAMSUNG_CPU(s3c24xx, S3C24XX_CPU_ID, S3C24XX_CPU_MASK)
43*4882a593Smuzhiyun IS_SAMSUNG_CPU(s3c2412, S3C2412_CPU_ID, S3C2412_CPU_MASK)
44*4882a593Smuzhiyun IS_SAMSUNG_CPU(s3c6400, S3C6400_CPU_ID, S3C64XX_CPU_MASK)
45*4882a593Smuzhiyun IS_SAMSUNG_CPU(s3c6410, S3C6410_CPU_ID, S3C64XX_CPU_MASK)
46*4882a593Smuzhiyun 
47*4882a593Smuzhiyun #if defined(CONFIG_CPU_S3C2410) || defined(CONFIG_CPU_S3C2412) || \
48*4882a593Smuzhiyun     defined(CONFIG_CPU_S3C2416) || defined(CONFIG_CPU_S3C2440) || \
49*4882a593Smuzhiyun     defined(CONFIG_CPU_S3C2442) || defined(CONFIG_CPU_S3C244X) || \
50*4882a593Smuzhiyun     defined(CONFIG_CPU_S3C2443)
51*4882a593Smuzhiyun # define soc_is_s3c24xx()	is_samsung_s3c24xx()
52*4882a593Smuzhiyun # define soc_is_s3c2410()	is_samsung_s3c2410()
53*4882a593Smuzhiyun #else
54*4882a593Smuzhiyun # define soc_is_s3c24xx()	0
55*4882a593Smuzhiyun # define soc_is_s3c2410()	0
56*4882a593Smuzhiyun #endif
57*4882a593Smuzhiyun 
58*4882a593Smuzhiyun #if defined(CONFIG_CPU_S3C2412)
59*4882a593Smuzhiyun # define soc_is_s3c2412()	is_samsung_s3c2412()
60*4882a593Smuzhiyun #else
61*4882a593Smuzhiyun # define soc_is_s3c2412()	0
62*4882a593Smuzhiyun #endif
63*4882a593Smuzhiyun 
64*4882a593Smuzhiyun #if defined(CONFIG_CPU_S3C6400) || defined(CONFIG_CPU_S3C6410)
65*4882a593Smuzhiyun # define soc_is_s3c6400()	is_samsung_s3c6400()
66*4882a593Smuzhiyun # define soc_is_s3c6410()	is_samsung_s3c6410()
67*4882a593Smuzhiyun # define soc_is_s3c64xx()	(is_samsung_s3c6400() || is_samsung_s3c6410())
68*4882a593Smuzhiyun #else
69*4882a593Smuzhiyun # define soc_is_s3c6400()	0
70*4882a593Smuzhiyun # define soc_is_s3c6410()	0
71*4882a593Smuzhiyun # define soc_is_s3c64xx()	0
72*4882a593Smuzhiyun #endif
73*4882a593Smuzhiyun 
74*4882a593Smuzhiyun #define IODESC_ENT(x) { (unsigned long)S3C24XX_VA_##x, __phys_to_pfn(S3C24XX_PA_##x), S3C24XX_SZ_##x, MT_DEVICE }
75*4882a593Smuzhiyun 
76*4882a593Smuzhiyun #ifndef KHZ
77*4882a593Smuzhiyun #define KHZ (1000)
78*4882a593Smuzhiyun #endif
79*4882a593Smuzhiyun 
80*4882a593Smuzhiyun #ifndef MHZ
81*4882a593Smuzhiyun #define MHZ (1000*1000)
82*4882a593Smuzhiyun #endif
83*4882a593Smuzhiyun 
84*4882a593Smuzhiyun #define print_mhz(m) ((m) / MHZ), (((m) / 1000) % 1000)
85*4882a593Smuzhiyun 
86*4882a593Smuzhiyun /* forward declaration */
87*4882a593Smuzhiyun struct s3c24xx_uart_resources;
88*4882a593Smuzhiyun struct platform_device;
89*4882a593Smuzhiyun struct s3c2410_uartcfg;
90*4882a593Smuzhiyun struct map_desc;
91*4882a593Smuzhiyun 
92*4882a593Smuzhiyun /* per-cpu initialisation function table. */
93*4882a593Smuzhiyun 
94*4882a593Smuzhiyun struct cpu_table {
95*4882a593Smuzhiyun 	unsigned long	idcode;
96*4882a593Smuzhiyun 	unsigned long	idmask;
97*4882a593Smuzhiyun 	void		(*map_io)(void);
98*4882a593Smuzhiyun 	void		(*init_uarts)(struct s3c2410_uartcfg *cfg, int no);
99*4882a593Smuzhiyun 	void		(*init_clocks)(int xtal);
100*4882a593Smuzhiyun 	int		(*init)(void);
101*4882a593Smuzhiyun 	const char	*name;
102*4882a593Smuzhiyun };
103*4882a593Smuzhiyun 
104*4882a593Smuzhiyun extern void s3c_init_cpu(unsigned long idcode,
105*4882a593Smuzhiyun 			 struct cpu_table *cpus, unsigned int cputab_size);
106*4882a593Smuzhiyun 
107*4882a593Smuzhiyun /* core initialisation functions */
108*4882a593Smuzhiyun 
109*4882a593Smuzhiyun extern void s3c24xx_init_io(struct map_desc *mach_desc, int size);
110*4882a593Smuzhiyun 
111*4882a593Smuzhiyun extern void s3c64xx_init_cpu(void);
112*4882a593Smuzhiyun 
113*4882a593Smuzhiyun extern void s3c24xx_init_uarts(struct s3c2410_uartcfg *cfg, int no);
114*4882a593Smuzhiyun 
115*4882a593Smuzhiyun extern void s3c24xx_init_clocks(int xtal);
116*4882a593Smuzhiyun 
117*4882a593Smuzhiyun extern void s3c24xx_init_uartdevs(char *name,
118*4882a593Smuzhiyun 				  struct s3c24xx_uart_resources *res,
119*4882a593Smuzhiyun 				  struct s3c2410_uartcfg *cfg, int no);
120*4882a593Smuzhiyun 
121*4882a593Smuzhiyun extern struct syscore_ops s3c2410_pm_syscore_ops;
122*4882a593Smuzhiyun extern struct syscore_ops s3c2412_pm_syscore_ops;
123*4882a593Smuzhiyun extern struct syscore_ops s3c2416_pm_syscore_ops;
124*4882a593Smuzhiyun extern struct syscore_ops s3c244x_pm_syscore_ops;
125*4882a593Smuzhiyun 
126*4882a593Smuzhiyun extern struct bus_type s3c6410_subsys;
127*4882a593Smuzhiyun 
128*4882a593Smuzhiyun #endif
129