2011-12-27 11:18:36 +04: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-03-09 12:03:05 +04:00
# include <linux/of.h>
2014-05-25 23:12:26 +04:00
# define EXYNOS3250_SOC_ID 0xE3472000
# define EXYNOS3_SOC_MASK 0xFFFFF000
2014-05-13 02:11:57 +04: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 01:54:12 +04:00
# define EXYNOS5410_SOC_ID 0xE5410000
2014-05-13 02:11:57 +04:00
# define EXYNOS5420_SOC_ID 0xE5420000
# define EXYNOS5440_SOC_ID 0xE5440000
2014-05-25 23:16:11 +04:00
# define EXYNOS5800_SOC_ID 0xE5422000
2014-05-13 02:11:57 +04: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-25 23:12:26 +04:00
IS_SAMSUNG_CPU ( exynos3250 , EXYNOS3250_SOC_ID , EXYNOS3_SOC_MASK )
2014-05-13 02:11:57 +04: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 01:54:12 +04:00
IS_SAMSUNG_CPU ( exynos5410 , EXYNOS5410_SOC_ID , EXYNOS5_SOC_MASK )
2014-05-13 02:11:57 +04:00
IS_SAMSUNG_CPU ( exynos5420 , EXYNOS5420_SOC_ID , EXYNOS5_SOC_MASK )
IS_SAMSUNG_CPU ( exynos5440 , EXYNOS5440_SOC_ID , EXYNOS5_SOC_MASK )
2014-05-25 23:16:11 +04:00
IS_SAMSUNG_CPU ( exynos5800 , EXYNOS5800_SOC_ID , EXYNOS5_SOC_MASK )
2014-05-13 02:11:57 +04:00
2014-05-25 23:12:26 +04:00
# if defined(CONFIG_SOC_EXYNOS3250)
# define soc_is_exynos3250() is_samsung_exynos3250()
# else
# define soc_is_exynos3250() 0
# endif
2014-05-13 02:11:57 +04: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 01:54:12 +04:00
# if defined(CONFIG_SOC_EXYNOS5410)
# define soc_is_exynos5410() is_samsung_exynos5410()
# else
# define soc_is_exynos5410() 0
# endif
2014-05-13 02:11:57 +04: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-25 23:16:11 +04:00
# if defined(CONFIG_SOC_EXYNOS5800)
# define soc_is_exynos5800() is_samsung_exynos5800()
# else
# define soc_is_exynos5800() 0
# endif
2014-05-13 02:11:57 +04:00
# define soc_is_exynos4() (soc_is_exynos4210() || soc_is_exynos4212() || \
soc_is_exynos4412 ( ) )
2014-05-27 01:54:12 +04:00
# define soc_is_exynos5() (soc_is_exynos5250() || soc_is_exynos5410() || \
soc_is_exynos5420 ( ) | | soc_is_exynos5800 ( ) )
2014-05-13 02:11:57 +04:00
2014-09-23 20:24:39 +04:00
extern u32 cp15_save_diag ;
extern u32 cp15_save_power ;
2014-05-13 02:13:44 +04:00
extern void __iomem * sysram_ns_base_addr ;
2014-05-25 23:50:34 +04:00
extern void __iomem * sysram_base_addr ;
2014-07-11 03:08:29 +04:00
extern void __iomem * pmu_base_addr ;
2014-06-03 08:47:46 +04:00
void exynos_sysram_init ( void ) ;
2012-04-26 06:35:40 +04:00
2014-09-25 12:59:41 +04:00
enum {
FW_DO_IDLE_SLEEP ,
FW_DO_IDLE_AFTR ,
} ;
2012-12-11 08:58:43 +04:00
void exynos_firmware_init ( void ) ;
2014-03-18 02:28:27 +04:00
extern u32 exynos_get_eint_wake_mask ( void ) ;
2014-03-18 02:28:22 +04:00
# ifdef CONFIG_PM_SLEEP
extern void __init exynos_pm_init ( void ) ;
# else
static inline void exynos_pm_init ( void ) { }
# endif
2014-03-18 02:28:27 +04:00
extern void exynos_cpu_resume ( void ) ;
2014-09-23 20:24:39 +04:00
extern void exynos_cpu_resume_ns ( void ) ;
2014-03-18 02:28:27 +04:00
2011-09-08 16:15:22 +04:00
extern struct smp_operations exynos_smp_ops ;
2014-05-15 23:23:24 +04: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-15 23:23:26 +04: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-09-25 13:02:45 +04:00
extern void exynos_cpu_save_register ( void ) ;
extern void exynos_cpu_restore_register ( void ) ;
extern void exynos_pm_central_suspend ( void ) ;
extern int exynos_pm_central_resume ( void ) ;
2014-05-09 01:53:00 +04:00
extern void exynos_enter_aftr ( void ) ;
2012-12-31 22:06:48 +04:00
2014-05-13 02:11:57 +04:00
extern void s5p_init_cpu ( void __iomem * cpuid_addr ) ;
extern unsigned int samsung_rev ( void ) ;
2014-07-18 22:43:22 +04:00
static inline void pmu_raw_writel ( u32 val , u32 offset )
{
__raw_writel ( val , pmu_base_addr + offset ) ;
}
static inline u32 pmu_raw_readl ( u32 offset )
{
return __raw_readl ( pmu_base_addr + offset ) ;
}
2011-12-27 11:18:36 +04:00
# endif /* __ARCH_ARM_MACH_EXYNOS_COMMON_H */