2010-02-05 11:14:49 +00:00
# ifndef __ARCH_MACH_COMMON_H
# define __ARCH_MACH_COMMON_H
2014-03-06 12:28:24 +09:00
extern void shmobile_init_delay ( void ) ;
2013-06-10 18:19:36 +09:00
extern void shmobile_boot_vector ( void ) ;
extern unsigned long shmobile_boot_fn ;
2013-08-08 07:14:07 +09:00
extern unsigned long shmobile_boot_size ;
2013-08-01 03:38:18 +09:00
extern void shmobile_smp_boot ( void ) ;
extern void shmobile_smp_sleep ( void ) ;
extern void shmobile_smp_hook ( unsigned int cpu , unsigned long fn ,
unsigned long arg ) ;
2015-07-29 00:34:48 +01:00
extern bool shmobile_smp_cpu_can_disable ( unsigned int cpu ) ;
2013-06-10 18:19:46 +09:00
extern void shmobile_boot_scu ( void ) ;
ARM: shmobile: Consolidate SCU mapping code
Currently the SCU registers are mapped in SoC-specific code, using
different methods, all involving the static mapping set up from
machine_desc.map_io():
- On emev2, a static (non-identity) mapping is used, with ioremap().
As the static mapping uses the MT_DEVICE type, ioremap() reuses it,
and the returned virtual address is suitable for passing to
shmobile_smp_hook(),
- On sh73a0 and r8a7779, a static identity mapping is used, with the
legacy IOMEM() macro.
As the static mapping uses the MT_DEVICE_NONSHARED type, replacing
IOMEM() by ioremap() would create a new mapping, whose virtual
address cannot be passed to shmobile_smp_hook().
Move the mapping of the SCU registers from SoC-specific code to common
code, always using ioremap(). To work in the absence of a static
mapping, this requires passing the physical SCU base address to
shmobile_smp_hook().
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Simon Horman <horms+renesas@verge.net.au>
2016-01-28 16:13:32 +01:00
extern void shmobile_smp_scu_prepare_cpus ( phys_addr_t scu_base_phys ,
unsigned int max_cpus ) ;
2013-07-31 16:07:49 +09:00
extern void shmobile_smp_scu_cpu_die ( unsigned int cpu ) ;
extern int shmobile_smp_scu_cpu_kill ( unsigned int cpu ) ;
2011-04-29 02:23:28 +09:00
extern struct platform_suspend_ops shmobile_suspend_ops ;
2010-05-12 14:21:24 +00:00
2012-04-26 21:58:41 +08:00
# ifdef CONFIG_SUSPEND
int shmobile_suspend_init ( void ) ;
2014-05-29 16:24:27 +09:00
void shmobile_smp_apmu_suspend_init ( void ) ;
2012-04-26 21:58:41 +08:00
# else
static inline int shmobile_suspend_init ( void ) { return 0 ; }
2014-06-16 20:21:13 +09:00
static inline void shmobile_smp_apmu_suspend_init ( void ) { }
2012-04-26 21:58:41 +08:00
# endif
2012-09-23 22:36:35 +00:00
static inline void __init shmobile_init_late ( void )
2012-08-15 20:57:27 +02:00
{
shmobile_suspend_init ( ) ;
}
2010-02-05 11:14:49 +00:00
# endif /* __ARCH_MACH_COMMON_H */