2011-12-27 08:18:36 +01:00
/*
* Copyright ( c ) 2011 Samsung Electronics Co . , Ltd .
* http : //www.samsung.com
*
* Common Header for EXYNOS machines
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation .
*/
# ifndef __ARCH_ARM_MACH_EXYNOS_COMMON_H
# define __ARCH_ARM_MACH_EXYNOS_COMMON_H
2013-07-08 16:01:40 -07:00
# include <linux/reboot.h>
2013-03-09 17:03:05 +09:00
# include <linux/of.h>
2014-05-26 04:12:26 +09:00
# define EXYNOS3250_SOC_ID 0xE3472000
# define EXYNOS3_SOC_MASK 0xFFFFF000
2014-05-13 07:11:57 +09:00
# define EXYNOS4210_CPU_ID 0x43210000
# define EXYNOS4212_CPU_ID 0x43220000
# define EXYNOS4412_CPU_ID 0xE4412200
# define EXYNOS4_CPU_MASK 0xFFFE0000
# define EXYNOS5250_SOC_ID 0x43520000
2014-05-27 06:54:12 +09:00
# define EXYNOS5410_SOC_ID 0xE5410000
2014-05-13 07:11:57 +09:00
# define EXYNOS5420_SOC_ID 0xE5420000
# define EXYNOS5440_SOC_ID 0xE5440000
2014-05-26 04:16:11 +09:00
# define EXYNOS5800_SOC_ID 0xE5422000
2014-05-13 07:11:57 +09:00
# define EXYNOS5_SOC_MASK 0xFFFFF000
extern unsigned long samsung_cpu_id ;
# define IS_SAMSUNG_CPU(name, id, mask) \
static inline int is_samsung_ # # name ( void ) \
{ \
return ( ( samsung_cpu_id & mask ) = = ( id & mask ) ) ; \
}
2014-05-26 04:12:26 +09:00
IS_SAMSUNG_CPU ( exynos3250 , EXYNOS3250_SOC_ID , EXYNOS3_SOC_MASK )
2014-05-13 07:11:57 +09:00
IS_SAMSUNG_CPU ( exynos4210 , EXYNOS4210_CPU_ID , EXYNOS4_CPU_MASK )
IS_SAMSUNG_CPU ( exynos4212 , EXYNOS4212_CPU_ID , EXYNOS4_CPU_MASK )
IS_SAMSUNG_CPU ( exynos4412 , EXYNOS4412_CPU_ID , EXYNOS4_CPU_MASK )
IS_SAMSUNG_CPU ( exynos5250 , EXYNOS5250_SOC_ID , EXYNOS5_SOC_MASK )
2014-05-27 06:54:12 +09:00
IS_SAMSUNG_CPU ( exynos5410 , EXYNOS5410_SOC_ID , EXYNOS5_SOC_MASK )
2014-05-13 07:11:57 +09:00
IS_SAMSUNG_CPU ( exynos5420 , EXYNOS5420_SOC_ID , EXYNOS5_SOC_MASK )
IS_SAMSUNG_CPU ( exynos5440 , EXYNOS5440_SOC_ID , EXYNOS5_SOC_MASK )
2014-05-26 04:16:11 +09:00
IS_SAMSUNG_CPU ( exynos5800 , EXYNOS5800_SOC_ID , EXYNOS5_SOC_MASK )
2014-05-13 07:11:57 +09:00
2014-05-26 04:12:26 +09:00
# if defined(CONFIG_SOC_EXYNOS3250)
# define soc_is_exynos3250() is_samsung_exynos3250()
# else
# define soc_is_exynos3250() 0
# endif
2014-05-13 07:11:57 +09:00
# if defined(CONFIG_CPU_EXYNOS4210)
# define soc_is_exynos4210() is_samsung_exynos4210()
# else
# define soc_is_exynos4210() 0
# endif
# if defined(CONFIG_SOC_EXYNOS4212)
# define soc_is_exynos4212() is_samsung_exynos4212()
# else
# define soc_is_exynos4212() 0
# endif
# if defined(CONFIG_SOC_EXYNOS4412)
# define soc_is_exynos4412() is_samsung_exynos4412()
# else
# define soc_is_exynos4412() 0
# endif
# define EXYNOS4210_REV_0 (0x0)
# define EXYNOS4210_REV_1_0 (0x10)
# define EXYNOS4210_REV_1_1 (0x11)
# if defined(CONFIG_SOC_EXYNOS5250)
# define soc_is_exynos5250() is_samsung_exynos5250()
# else
# define soc_is_exynos5250() 0
# endif
2014-05-27 06:54:12 +09:00
# if defined(CONFIG_SOC_EXYNOS5410)
# define soc_is_exynos5410() is_samsung_exynos5410()
# else
# define soc_is_exynos5410() 0
# endif
2014-05-13 07:11:57 +09:00
# if defined(CONFIG_SOC_EXYNOS5420)
# define soc_is_exynos5420() is_samsung_exynos5420()
# else
# define soc_is_exynos5420() 0
# endif
# if defined(CONFIG_SOC_EXYNOS5440)
# define soc_is_exynos5440() is_samsung_exynos5440()
# else
# define soc_is_exynos5440() 0
# endif
2014-05-26 04:16:11 +09:00
# if defined(CONFIG_SOC_EXYNOS5800)
# define soc_is_exynos5800() is_samsung_exynos5800()
# else
# define soc_is_exynos5800() 0
# endif
2014-05-13 07:11:57 +09:00
# define soc_is_exynos4() (soc_is_exynos4210() || soc_is_exynos4212() || \
soc_is_exynos4412 ( ) )
2014-05-27 06:54:12 +09:00
# define soc_is_exynos5() (soc_is_exynos5250() || soc_is_exynos5410() || \
soc_is_exynos5420 ( ) | | soc_is_exynos5800 ( ) )
2014-05-13 07:11:57 +09:00
2013-04-10 11:35:29 +02:00
void mct_init ( void __iomem * base , int irq_g0 , int irq_l0 , int irq_l1 ) ;
2012-02-11 21:27:08 +09:00
2011-09-08 13:15:22 +01:00
struct map_desc ;
2014-05-13 07:13:44 +09:00
extern void __iomem * sysram_ns_base_addr ;
2014-05-26 04:50:34 +09:00
extern void __iomem * sysram_base_addr ;
2013-06-19 01:36:47 +09:00
void exynos_init_io ( void ) ;
2014-03-21 02:14:30 +09:00
void exynos_restart ( enum reboot_mode mode , const char * cmd ) ;
2013-08-30 12:15:04 +02:00
void exynos_cpuidle_init ( void ) ;
2013-11-28 13:42:42 +01:00
void exynos_cpufreq_init ( void ) ;
2012-04-26 10:35:40 +08:00
void exynos_init_late ( void ) ;
2012-12-11 13:58:43 +09:00
void exynos_firmware_init ( void ) ;
2014-03-18 07:28:27 +09:00
# ifdef CONFIG_PINCTRL_EXYNOS
extern u32 exynos_get_eint_wake_mask ( void ) ;
# else
static inline u32 exynos_get_eint_wake_mask ( void ) { return 0xffffffff ; }
# endif
2014-03-18 07:28:22 +09:00
# ifdef CONFIG_PM_SLEEP
extern void __init exynos_pm_init ( void ) ;
# else
static inline void exynos_pm_init ( void ) { }
# endif
2014-03-18 07:28:27 +09:00
extern void exynos_cpu_resume ( void ) ;
2011-09-08 13:15:22 +01:00
extern struct smp_operations exynos_smp_ops ;
extern void exynos_cpu_die ( unsigned int cpu ) ;
2012-12-31 10:06:48 -08:00
/* PMU(Power Management Unit) support */
# define PMU_TABLE_END NULL
enum sys_powerdown {
SYS_AFTR ,
SYS_LPA ,
SYS_SLEEP ,
NUM_SYS_POWERDOWN ,
} ;
struct exynos_pmu_conf {
void __iomem * reg ;
unsigned int val [ NUM_SYS_POWERDOWN ] ;
} ;
extern void exynos_sys_powerdown_conf ( enum sys_powerdown mode ) ;
2014-05-16 04:23:24 +09:00
extern void exynos_cpu_power_down ( int cpu ) ;
extern void exynos_cpu_power_up ( int cpu ) ;
extern int exynos_cpu_power_state ( int cpu ) ;
2014-05-16 04:23:26 +09:00
extern void exynos_cluster_power_down ( int cluster ) ;
extern void exynos_cluster_power_up ( int cluster ) ;
extern int exynos_cluster_power_state ( int cluster ) ;
2014-05-09 06:53:00 +09:00
extern void exynos_enter_aftr ( void ) ;
2012-12-31 10:06:48 -08:00
2014-05-13 07:11:57 +09:00
extern void s5p_init_cpu ( void __iomem * cpuid_addr ) ;
extern unsigned int samsung_rev ( void ) ;
2011-12-27 08:18:36 +01:00
# endif /* __ARCH_ARM_MACH_EXYNOS_COMMON_H */