xref: /linux/arch/arm/mach-s3c/cpu.h (revision a23e1966932464e1c5226cb9ac4ce1d5fc10ba22)
14490e3c6SKrzysztof Kozlowski /* SPDX-License-Identifier: GPL-2.0 */
24490e3c6SKrzysztof Kozlowski /*
3c06af3ccSKukjin Kim  * Copyright (c) 2011 Samsung Electronics Co., Ltd.
4c06af3ccSKukjin Kim  *		http://www.samsung.com/
5c06af3ccSKukjin Kim  *
61da177e4SLinus Torvalds  * Copyright (c) 2004-2005 Simtec Electronics
71da177e4SLinus Torvalds  *	Ben Dooks <ben@simtec.co.uk>
81da177e4SLinus Torvalds  *
9c06af3ccSKukjin Kim  * Header file for Samsung CPU support
101da177e4SLinus Torvalds  */
111da177e4SLinus Torvalds 
121da177e4SLinus Torvalds /* todo - fix when rmk changes iodescs to use `void __iomem *` */
131da177e4SLinus Torvalds 
14c3fcf5d1SKyungmin Park #ifndef __SAMSUNG_PLAT_CPU_H
15c3fcf5d1SKyungmin Park #define __SAMSUNG_PLAT_CPU_H
16c3fcf5d1SKyungmin Park 
17c06af3ccSKukjin Kim extern unsigned long samsung_cpu_id;
18c06af3ccSKukjin Kim 
19c06af3ccSKukjin Kim #define S3C6400_CPU_ID		0x36400000
20c06af3ccSKukjin Kim #define S3C6410_CPU_ID		0x36410000
212747f5e5SMark Brown #define S3C64XX_CPU_MASK	0xFFFFF000
22c06af3ccSKukjin Kim 
23c06af3ccSKukjin Kim #define S5PV210_CPU_ID		0x43110000
24c06af3ccSKukjin Kim #define S5PV210_CPU_MASK	0xFFFFF000
25c06af3ccSKukjin Kim 
26c06af3ccSKukjin Kim #define IS_SAMSUNG_CPU(name, id, mask)		\
27c06af3ccSKukjin Kim static inline int is_samsung_##name(void)	\
28c06af3ccSKukjin Kim {						\
29c06af3ccSKukjin Kim 	return ((samsung_cpu_id & mask) == (id & mask));	\
30c06af3ccSKukjin Kim }
31c06af3ccSKukjin Kim 
320f4e54c6SMark Brown IS_SAMSUNG_CPU(s3c6400, S3C6400_CPU_ID, S3C64XX_CPU_MASK)
330f4e54c6SMark Brown IS_SAMSUNG_CPU(s3c6410, S3C6410_CPU_ID, S3C64XX_CPU_MASK)
34c06af3ccSKukjin Kim 
35c06af3ccSKukjin Kim #if defined(CONFIG_CPU_S3C6400) || defined(CONFIG_CPU_S3C6410)
3657a23126STomasz Figa # define soc_is_s3c6400()	is_samsung_s3c6400()
3757a23126STomasz Figa # define soc_is_s3c6410()	is_samsung_s3c6410()
380f4e54c6SMark Brown # define soc_is_s3c64xx()	(is_samsung_s3c6400() || is_samsung_s3c6410())
39c06af3ccSKukjin Kim #else
4057a23126STomasz Figa # define soc_is_s3c6400()	0
4157a23126STomasz Figa # define soc_is_s3c6410()	0
42c06af3ccSKukjin Kim # define soc_is_s3c64xx()	0
43c06af3ccSKukjin Kim #endif
44c06af3ccSKukjin Kim 
451da177e4SLinus Torvalds #ifndef MHZ
461da177e4SLinus Torvalds #define MHZ (1000*1000)
471da177e4SLinus Torvalds #endif
481da177e4SLinus Torvalds 
49a503059cSBen Dooks #define print_mhz(m) ((m) / MHZ), (((m) / 1000) % 1000)
501da177e4SLinus Torvalds 
511da177e4SLinus Torvalds /* forward declaration */
5266a9b49aSBen Dooks struct s3c24xx_uart_resources;
5366a9b49aSBen Dooks struct platform_device;
541da177e4SLinus Torvalds struct s3c2410_uartcfg;
551da177e4SLinus Torvalds struct map_desc;
561da177e4SLinus Torvalds 
5774b265d4SBen Dooks /* per-cpu initialisation function table. */
5874b265d4SBen Dooks 
5974b265d4SBen Dooks struct cpu_table {
6074b265d4SBen Dooks 	unsigned long	idcode;
6174b265d4SBen Dooks 	unsigned long	idmask;
6274b265d4SBen Dooks 	void		(*map_io)(void);
6374b265d4SBen Dooks 	void		(*init_uarts)(struct s3c2410_uartcfg *cfg, int no);
6474b265d4SBen Dooks 	int		(*init)(void);
6574b265d4SBen Dooks 	const char	*name;
6674b265d4SBen Dooks };
6774b265d4SBen Dooks 
6874b265d4SBen Dooks extern void s3c_init_cpu(unsigned long idcode,
6974b265d4SBen Dooks 			 struct cpu_table *cpus, unsigned int cputab_size);
7074b265d4SBen Dooks 
711da177e4SLinus Torvalds /* core initialisation functions */
72e6d1cb9fSKukjin Kim extern void s3c64xx_init_cpu(void);
7356b20922SKukjin Kim 
741da177e4SLinus Torvalds extern void s3c24xx_init_uarts(struct s3c2410_uartcfg *cfg, int no);
7566a9b49aSBen Dooks extern void s3c24xx_init_uartdevs(char *name,
7666a9b49aSBen Dooks 				  struct s3c24xx_uart_resources *res,
7766a9b49aSBen Dooks 				  struct s3c2410_uartcfg *cfg, int no);
7866a9b49aSBen Dooks 
79*a3891621SRicardo B. Marliere extern const struct bus_type s3c6410_subsys;
801deb507dSBen Dooks 
81c3fcf5d1SKyungmin Park #endif
82