2007-07-09 22:06:53 +01:00
/*
2014-01-17 11:39:05 +08:00
* Copyright 2004 - 2014 Freescale Semiconductor , Inc . All Rights Reserved .
2007-07-09 22:06:53 +01:00
*/
/*
* 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 __ASM_ARCH_MXC_COMMON_H__
# define __ASM_ARCH_MXC_COMMON_H__
2013-07-08 16:01:40 -07:00
# include <linux/reboot.h>
2013-10-16 19:52:00 +08:00
struct irq_data ;
2008-09-09 10:19:40 +02:00
struct platform_device ;
2013-05-08 21:05:53 +08:00
struct pt_regs ;
2009-02-16 14:36:49 +01:00
struct clk ;
2014-04-05 17:57:45 +02:00
struct device_node ;
2011-09-06 15:08:40 +08:00
enum mxc_cpu_pwr_mode ;
2008-09-09 10:19:40 +02:00
2013-10-16 21:05:35 +08:00
void mx1_map_io ( void ) ;
void mx21_map_io ( void ) ;
void mx25_map_io ( void ) ;
void mx27_map_io ( void ) ;
void mx31_map_io ( void ) ;
void mx35_map_io ( void ) ;
void imx1_init_early ( void ) ;
void imx21_init_early ( void ) ;
void imx25_init_early ( void ) ;
void imx27_init_early ( void ) ;
void imx31_init_early ( void ) ;
void imx35_init_early ( void ) ;
void mxc_init_irq ( void __iomem * ) ;
2014-05-19 20:19:06 +08:00
void tzic_init_irq ( void ) ;
2013-10-16 21:05:35 +08:00
void mx1_init_irq ( void ) ;
void mx21_init_irq ( void ) ;
void mx25_init_irq ( void ) ;
void mx27_init_irq ( void ) ;
void mx31_init_irq ( void ) ;
void mx35_init_irq ( void ) ;
void imx1_soc_init ( void ) ;
void imx21_soc_init ( void ) ;
void imx25_soc_init ( void ) ;
void imx27_soc_init ( void ) ;
void imx31_soc_init ( void ) ;
void imx35_soc_init ( void ) ;
void epit_timer_init ( void __iomem * base , int irq ) ;
void mxc_timer_init ( void __iomem * , int ) ;
2014-04-05 17:57:45 +02:00
void mxc_timer_init_dt ( struct device_node * ) ;
2013-10-16 21:05:35 +08:00
int mx1_clocks_init ( unsigned long fref ) ;
int mx21_clocks_init ( unsigned long lref , unsigned long fref ) ;
int mx25_clocks_init ( void ) ;
int mx27_clocks_init ( unsigned long fref ) ;
int mx31_clocks_init ( unsigned long fref ) ;
int mx35_clocks_init ( void ) ;
int mx31_clocks_init_dt ( void ) ;
struct platform_device * mxc_register_gpio ( char * name , int id ,
2011-06-06 00:07:55 +08:00
resource_size_t iobase , resource_size_t iosize , int irq , int irq_high ) ;
2013-10-16 21:05:35 +08:00
void mxc_set_cpu_type ( unsigned int type ) ;
void mxc_restart ( enum reboot_mode , const char * ) ;
void mxc_arch_reset_init ( void __iomem * ) ;
void mxc_arch_reset_init_dt ( void ) ;
2014-05-20 15:09:42 +08:00
int mx51_revision ( void ) ;
2013-10-16 21:05:35 +08:00
int mx53_revision ( void ) ;
void imx_set_aips ( void __iomem * ) ;
int mxc_device_init ( void ) ;
2013-08-13 13:54:02 +08:00
void imx_set_soc_revision ( unsigned int rev ) ;
unsigned int imx_get_soc_revision ( void ) ;
2013-08-13 14:59:43 +08:00
void imx_init_revision_from_anatop ( void ) ;
2013-08-13 16:59:28 +08:00
struct device * imx_soc_device_init ( void ) ;
2011-10-17 08:42:16 +08:00
2011-09-28 17:16:06 +08:00
enum mxc_cpu_pwr_mode {
WAIT_CLOCKED , /* wfi only */
WAIT_UNCLOCKED , /* WAIT */
WAIT_UNCLOCKED_POWER_OFF , /* WAIT + SRPG */
STOP_POWER_ON , /* just STOP */
STOP_POWER_OFF , /* STOP + SRPG */
} ;
2012-02-02 20:02:32 -02:00
enum mx3_cpu_pwr_mode {
MX3_RUN ,
MX3_WAIT ,
MX3_DOZE ,
MX3_SLEEP ,
} ;
2013-10-16 21:05:35 +08:00
void mx3_cpu_lp_set ( enum mx3_cpu_pwr_mode mode ) ;
void imx_print_silicon_rev ( const char * cpu , int srev ) ;
2011-09-20 14:28:17 +02:00
2013-10-16 21:05:35 +08:00
void imx_enable_cpu ( int cpu , bool enable ) ;
void imx_set_cpu_jump ( int cpu , void * jump_addr ) ;
u32 imx_get_cpu_arg ( int cpu ) ;
void imx_set_cpu_arg ( int cpu , u32 arg ) ;
2011-09-06 14:59:40 +08:00
# ifdef CONFIG_SMP
2013-10-16 21:05:35 +08:00
void v7_secondary_startup ( void ) ;
void imx_scu_map_io ( void ) ;
void imx_smp_prepare ( void ) ;
void imx_scu_standby_enable ( void ) ;
2011-09-06 15:05:25 +08:00
# else
static inline void imx_scu_map_io ( void ) { }
2011-09-06 15:08:40 +08:00
static inline void imx_smp_prepare ( void ) { }
2012-12-04 22:55:15 +08:00
static inline void imx_scu_standby_enable ( void ) { }
2011-09-06 14:59:40 +08:00
# endif
2013-10-16 21:05:35 +08:00
void imx_src_init ( void ) ;
void imx_gpc_init ( void ) ;
2014-06-23 16:42:44 +08:00
void imx_gpc_pre_suspend ( bool arm_power_off ) ;
2013-10-16 21:05:35 +08:00
void imx_gpc_post_resume ( void ) ;
void imx_gpc_mask_all ( void ) ;
void imx_gpc_restore_all ( void ) ;
2013-10-16 19:52:00 +08:00
void imx_gpc_irq_mask ( struct irq_data * d ) ;
void imx_gpc_irq_unmask ( struct irq_data * d ) ;
2013-10-16 21:05:35 +08:00
void imx_anatop_init ( void ) ;
void imx_anatop_pre_suspend ( void ) ;
void imx_anatop_post_resume ( void ) ;
int imx6q_set_lpm ( enum mxc_cpu_pwr_mode mode ) ;
2014-06-23 16:42:43 +08:00
void imx6q_set_int_mem_clk_lpm ( bool enable ) ;
2014-01-09 16:03:16 +08:00
void imx6sl_set_wait_clk ( bool enter ) ;
2013-10-16 21:05:35 +08:00
void imx_cpu_die ( unsigned int cpu ) ;
int imx_cpu_kill ( unsigned int cpu ) ;
2011-09-08 13:15:22 +01:00
2014-02-26 19:48:33 +08:00
# ifdef CONFIG_SUSPEND
void v7_cpu_resume ( void ) ;
2014-01-17 11:39:05 +08:00
void imx6_suspend ( void __iomem * ocram_vbase ) ;
2014-02-26 19:48:33 +08:00
# else
static inline void v7_cpu_resume ( void ) { }
static inline void imx6_suspend ( void __iomem * ocram_vbase ) { }
# endif
2013-10-16 21:05:35 +08:00
void imx6q_pm_init ( void ) ;
2014-01-17 11:39:05 +08:00
void imx6dl_pm_init ( void ) ;
void imx6sl_pm_init ( void ) ;
2014-06-20 13:20:54 +08:00
void imx6sx_pm_init ( void ) ;
2013-09-25 23:09:36 +08:00
void imx6q_pm_set_ccm_base ( void __iomem * base ) ;
2014-01-17 11:39:05 +08:00
2014-02-18 10:35:05 +08:00
# ifdef CONFIG_PM
2014-05-20 14:55:15 +08:00
void imx51_pm_init ( void ) ;
void imx53_pm_init ( void ) ;
2014-05-20 13:41:36 +08:00
void imx5_pm_set_ccm_base ( void __iomem * base ) ;
2011-12-21 22:38:23 +08:00
# else
2014-05-20 14:55:15 +08:00
static inline void imx51_pm_init ( void ) { }
static inline void imx53_pm_init ( void ) { }
2014-05-20 13:41:36 +08:00
static inline void imx5_pm_set_ccm_base ( void __iomem * base ) { }
2011-12-21 22:38:23 +08:00
# endif
2012-04-26 11:42:34 +08:00
# ifdef CONFIG_NEON
2013-10-16 21:05:35 +08:00
int mx51_neon_fixup ( void ) ;
2012-04-26 11:42:34 +08:00
# else
static inline int mx51_neon_fixup ( void ) { return 0 ; }
# endif
2013-07-08 21:45:20 +08:00
# ifdef CONFIG_CACHE_L2X0
2013-10-16 21:05:35 +08:00
void imx_init_l2cache ( void ) ;
2013-07-08 21:45:20 +08:00
# else
static inline void imx_init_l2cache ( void ) { }
# endif
2011-09-08 13:15:22 +01:00
extern struct smp_operations imx_smp_ops ;
2007-07-09 22:06:53 +01:00
# endif