2019-06-04 10:11:33 +02:00
/* SPDX-License-Identifier: GPL-2.0-only */
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
*/
# 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 ;
2014-07-07 11:41:26 +02:00
struct of_device_id ;
2008-09-09 10:19:40 +02:00
2013-10-16 21:05:35 +08:00
void mx31_map_io ( void ) ;
void mx35_map_io ( void ) ;
void imx21_init_early ( void ) ;
void imx31_init_early ( void ) ;
void imx35_init_early ( void ) ;
void mx31_init_irq ( void ) ;
void mx35_init_irq ( void ) ;
void mxc_set_cpu_type ( unsigned int type ) ;
void mxc_restart ( enum reboot_mode , const char * ) ;
void mxc_arch_reset_init ( void __iomem * ) ;
2016-06-24 12:49:56 +02:00
void imx1_reset_init ( void __iomem * ) ;
2013-10-16 21:05:35 +08:00
void imx_set_aips ( void __iomem * ) ;
2014-07-07 11:41:26 +02:00
void imx_aips_allow_unprivileged_access ( const char * compat ) ;
2013-10-16 21:05:35 +08:00
int mxc_device_init ( void ) ;
2013-08-13 13:54:02 +08:00
void imx_set_soc_revision ( unsigned int rev ) ;
2013-08-13 14:59:43 +08:00
void imx_init_revision_from_anatop ( void ) ;
2014-12-17 12:24:12 +08:00
void imx6_enable_rbc ( bool enable ) ;
2015-03-13 16:05:37 +00:00
void imx_gpc_check_dt ( void ) ;
2014-12-17 12:24:12 +08:00
void imx_gpc_set_arm_power_in_lpm ( bool power_off ) ;
2018-06-03 10:33:44 +08:00
void imx_gpc_set_l2_mem_power_in_lpm ( bool power_off ) ;
2014-12-17 12:24:12 +08:00
void imx_gpc_set_arm_power_up_timing ( u32 sw2iso , u32 sw ) ;
void imx_gpc_set_arm_power_down_timing ( u32 sw2iso , u32 sw ) ;
2016-02-02 19:45:38 -02:00
void imx25_pm_init ( void ) ;
2016-06-28 10:22:16 +08:00
void imx27_pm_init ( void ) ;
2018-07-10 13:31:48 -03:00
void imx5_pmu_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 */
} ;
2019-01-14 08:54:59 +08:00
enum ulp_cpu_pwr_mode {
ULP_PM_HSRUN , /* High speed run mode */
ULP_PM_RUN , /* Run mode */
ULP_PM_WAIT , /* Wait mode */
ULP_PM_STOP , /* Stop mode */
ULP_PM_VLPS , /* Very low power stop mode */
ULP_PM_VLLS , /* very low leakage stop mode */
} ;
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 ) ;
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 ) { }
2011-09-06 14:59:40 +08:00
# endif
2013-10-16 21:05:35 +08:00
void imx_src_init ( void ) ;
2021-05-25 21:14:16 -03:00
void imx7_src_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 ) ;
2014-12-02 16:05:26 +00:00
void imx_gpc_hwirq_mask ( unsigned int hwirq ) ;
void imx_gpc_hwirq_unmask ( unsigned int hwirq ) ;
2021-06-17 11:54:15 -03:00
void imx_gpcv2_set_core1_pdn_pup_by_software ( bool pdn ) ;
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 ) ;
2015-04-25 22:59:19 +08:00
int imx6_set_lpm ( enum mxc_cpu_pwr_mode mode ) ;
2016-08-29 21:49:56 +08:00
void imx6_set_int_mem_clk_lpm ( bool enable ) ;
2014-09-17 11:11:45 +08:00
int imx_mmdc_get_ddr_type ( void ) ;
2019-01-14 08:54:59 +08:00
int imx7ulp_set_lpm ( enum ulp_cpu_pwr_mode mode ) ;
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
2015-05-12 15:31:03 +02:00
void imx53_suspend ( void __iomem * ocram_vbase ) ;
extern const u32 imx53_suspend_sz ;
2014-01-17 11:39:05 +08:00
void imx6_suspend ( void __iomem * ocram_vbase ) ;
2014-02-26 19:48:33 +08:00
# else
2015-05-12 15:31:03 +02:00
static inline void imx53_suspend ( void __iomem * ocram_vbase ) { }
static const u32 imx53_suspend_sz ;
2014-02-26 19:48:33 +08:00
static inline void imx6_suspend ( void __iomem * ocram_vbase ) { }
# endif
2020-01-16 15:18:49 +01:00
void v7_cpu_resume ( void ) ;
2015-04-29 13:07:03 +08:00
void imx6_pm_ccm_init ( const char * ccm_compat ) ;
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 ) ;
2015-08-05 01:48:37 +08:00
void imx6ul_pm_init ( void ) ;
2018-11-10 15:13:04 +00:00
void imx7ulp_pm_init ( void ) ;
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 ) ;
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 ) { }
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
2015-11-15 10:39:53 +09:00
extern const struct smp_operations imx_smp_ops ;
2021-05-25 21:14:16 -03:00
extern const struct smp_operations imx7_smp_ops ;
2015-11-15 10:39:53 +09:00
extern const struct smp_operations ls1021a_smp_ops ;
2011-09-08 13:15:22 +01:00
2007-07-09 22:06:53 +01:00
# endif