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