162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * Copyright (c) 2011 Samsung Electronics Co., Ltd.
462306a36Sopenharmony_ci *		http://www.samsung.com/
562306a36Sopenharmony_ci *
662306a36Sopenharmony_ci * Copyright (c) 2004-2005 Simtec Electronics
762306a36Sopenharmony_ci *	Ben Dooks <ben@simtec.co.uk>
862306a36Sopenharmony_ci *
962306a36Sopenharmony_ci * Header file for Samsung CPU support
1062306a36Sopenharmony_ci */
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ci/* todo - fix when rmk changes iodescs to use `void __iomem *` */
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_ci#ifndef __SAMSUNG_PLAT_CPU_H
1562306a36Sopenharmony_ci#define __SAMSUNG_PLAT_CPU_H
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_ciextern unsigned long samsung_cpu_id;
1862306a36Sopenharmony_ci
1962306a36Sopenharmony_ci#define S3C6400_CPU_ID		0x36400000
2062306a36Sopenharmony_ci#define S3C6410_CPU_ID		0x36410000
2162306a36Sopenharmony_ci#define S3C64XX_CPU_MASK	0xFFFFF000
2262306a36Sopenharmony_ci
2362306a36Sopenharmony_ci#define S5PV210_CPU_ID		0x43110000
2462306a36Sopenharmony_ci#define S5PV210_CPU_MASK	0xFFFFF000
2562306a36Sopenharmony_ci
2662306a36Sopenharmony_ci#define IS_SAMSUNG_CPU(name, id, mask)		\
2762306a36Sopenharmony_cistatic inline int is_samsung_##name(void)	\
2862306a36Sopenharmony_ci{						\
2962306a36Sopenharmony_ci	return ((samsung_cpu_id & mask) == (id & mask));	\
3062306a36Sopenharmony_ci}
3162306a36Sopenharmony_ci
3262306a36Sopenharmony_ciIS_SAMSUNG_CPU(s3c6400, S3C6400_CPU_ID, S3C64XX_CPU_MASK)
3362306a36Sopenharmony_ciIS_SAMSUNG_CPU(s3c6410, S3C6410_CPU_ID, S3C64XX_CPU_MASK)
3462306a36Sopenharmony_ci
3562306a36Sopenharmony_ci#if defined(CONFIG_CPU_S3C6400) || defined(CONFIG_CPU_S3C6410)
3662306a36Sopenharmony_ci# define soc_is_s3c6400()	is_samsung_s3c6400()
3762306a36Sopenharmony_ci# define soc_is_s3c6410()	is_samsung_s3c6410()
3862306a36Sopenharmony_ci# define soc_is_s3c64xx()	(is_samsung_s3c6400() || is_samsung_s3c6410())
3962306a36Sopenharmony_ci#else
4062306a36Sopenharmony_ci# define soc_is_s3c6400()	0
4162306a36Sopenharmony_ci# define soc_is_s3c6410()	0
4262306a36Sopenharmony_ci# define soc_is_s3c64xx()	0
4362306a36Sopenharmony_ci#endif
4462306a36Sopenharmony_ci
4562306a36Sopenharmony_ci#ifndef MHZ
4662306a36Sopenharmony_ci#define MHZ (1000*1000)
4762306a36Sopenharmony_ci#endif
4862306a36Sopenharmony_ci
4962306a36Sopenharmony_ci#define print_mhz(m) ((m) / MHZ), (((m) / 1000) % 1000)
5062306a36Sopenharmony_ci
5162306a36Sopenharmony_ci/* forward declaration */
5262306a36Sopenharmony_cistruct s3c24xx_uart_resources;
5362306a36Sopenharmony_cistruct platform_device;
5462306a36Sopenharmony_cistruct s3c2410_uartcfg;
5562306a36Sopenharmony_cistruct map_desc;
5662306a36Sopenharmony_ci
5762306a36Sopenharmony_ci/* per-cpu initialisation function table. */
5862306a36Sopenharmony_ci
5962306a36Sopenharmony_cistruct cpu_table {
6062306a36Sopenharmony_ci	unsigned long	idcode;
6162306a36Sopenharmony_ci	unsigned long	idmask;
6262306a36Sopenharmony_ci	void		(*map_io)(void);
6362306a36Sopenharmony_ci	void		(*init_uarts)(struct s3c2410_uartcfg *cfg, int no);
6462306a36Sopenharmony_ci	int		(*init)(void);
6562306a36Sopenharmony_ci	const char	*name;
6662306a36Sopenharmony_ci};
6762306a36Sopenharmony_ci
6862306a36Sopenharmony_ciextern void s3c_init_cpu(unsigned long idcode,
6962306a36Sopenharmony_ci			 struct cpu_table *cpus, unsigned int cputab_size);
7062306a36Sopenharmony_ci
7162306a36Sopenharmony_ci/* core initialisation functions */
7262306a36Sopenharmony_ciextern void s3c64xx_init_cpu(void);
7362306a36Sopenharmony_ci
7462306a36Sopenharmony_ciextern void s3c24xx_init_uarts(struct s3c2410_uartcfg *cfg, int no);
7562306a36Sopenharmony_ciextern void s3c24xx_init_uartdevs(char *name,
7662306a36Sopenharmony_ci				  struct s3c24xx_uart_resources *res,
7762306a36Sopenharmony_ci				  struct s3c2410_uartcfg *cfg, int no);
7862306a36Sopenharmony_ci
7962306a36Sopenharmony_ciextern struct bus_type s3c6410_subsys;
8062306a36Sopenharmony_ci
8162306a36Sopenharmony_ci#endif
82