2012-04-19 22:23:13 +05:30
/*
2013-03-12 17:00:03 +01:00
* spear machine family generic header file
2012-04-19 22:23:13 +05:30
*
2013-03-12 17:00:03 +01:00
* Copyright ( C ) 2009 - 2012 ST Microelectronics
* Rajeev Kumar < rajeev - dlh . kumar @ st . com >
2015-07-17 16:23:50 -07:00
* Viresh Kumar < vireshk @ kernel . org >
2012-04-19 22:23:13 +05:30
*
* This file is licensed under the terms of the GNU General Public
* License version 2. This program is licensed " as is " without any
* warranty of any kind , whether express or implied .
*/
# ifndef __MACH_GENERIC_H
# define __MACH_GENERIC_H
# include <linux/dmaengine.h>
2013-03-12 17:00:03 +01:00
# include <linux/amba/pl08x.h>
# include <linux/init.h>
2013-07-08 16:01:40 -07:00
# include <linux/reboot.h>
2012-04-19 22:23:13 +05:30
# include <asm/mach/time.h>
ARM: smp: remove arch-provided "pen_release"
Consolidating the "pen_release" stuff amongst the various SoC
implementations gives credence to having a CPU holding pen for
secondary CPUs. However, this is far from the truth.
Many SoC implementations cargo-cult copied various bits of the pen
release implementation from the initial Realview/Versatile Express
implementation without understanding what it was or why it existed.
The reason it existed is because these are _development_ platforms,
and some board firmware is unable to individually control the
startup of secondary CPUs. Moreover, they do not have a way to
power down or reset secondary CPUs for hot-unplug. Hence, the
pen_release implementation was designed for ARM Ltd's development
platforms to provide a working implementation, even though it is
very far from what is required.
It was decided a while back to reduce the duplication by consolidating
the "pen_release" variable, but this only made the situation worse -
we have ended up with several implementations that read this variable
but do not write it - again, showing the cargo-cult mentality at work,
lack of proper review of new code, and in some cases a lack of testing.
While it would be preferable to remove pen_release entirely from the
kernel, this is not possible without help from the SoC maintainers,
which seems to be lacking. However, I want to remove pen_release from
arch code to remove the credence that having it gives.
This patch removes pen_release from the arch code entirely, adding
private per-SoC definitions for it instead, and explicitly stating
that write_pen_release() is cargo-cult copied and should not be
copied any further. Rename write_pen_release() in a similar fashion
as well.
Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
2018-12-13 14:02:48 +00:00
extern volatile int spear_pen_release ;
2012-11-08 12:40:59 -07:00
extern void spear13xx_timer_init ( void ) ;
2013-03-12 17:00:03 +01:00
extern void spear3xx_timer_init ( void ) ;
2012-04-19 22:23:13 +05:30
extern struct pl022_ssp_controller pl022_plat_data ;
2013-03-12 17:00:03 +01:00
extern struct pl08x_platform_data pl080_plat_data ;
2012-04-19 22:23:13 +05:30
void __init spear_setup_of_timer ( void ) ;
2012-12-02 17:59:57 +01:00
void __init spear3xx_clk_init ( void __iomem * misc_base ,
void __iomem * soc_config_base ) ;
2013-03-12 17:00:03 +01:00
void __init spear3xx_map_io ( void ) ;
void __init spear3xx_dt_init_irq ( void ) ;
2012-12-02 17:59:57 +01:00
void __init spear6xx_clk_init ( void __iomem * misc_base ) ;
2012-04-19 22:23:13 +05:30
void __init spear13xx_map_io ( void ) ;
void __init spear13xx_l2x0_init ( void ) ;
2013-03-12 17:00:03 +01:00
2013-07-08 16:01:40 -07:00
void spear_restart ( enum reboot_mode , const char * ) ;
2013-03-12 17:00:03 +01:00
2012-04-19 22:23:13 +05:30
void spear13xx_secondary_startup ( void ) ;
2013-06-17 15:43:14 -04:00
void spear13xx_cpu_die ( unsigned int cpu ) ;
2011-09-08 13:15:22 +01:00
2015-11-15 10:39:53 +09:00
extern const struct smp_operations spear13xx_smp_ops ;
2012-04-19 22:23:13 +05:30
# ifdef CONFIG_MACH_SPEAR1310
2012-12-02 17:59:57 +01:00
void __init spear1310_clk_init ( void __iomem * misc_base , void __iomem * ras_base ) ;
2012-04-19 22:23:13 +05:30
# else
2012-12-02 17:59:57 +01:00
static inline void spear1310_clk_init ( void __iomem * misc_base , void __iomem * ras_base ) { }
2012-04-19 22:23:13 +05:30
# endif
# ifdef CONFIG_MACH_SPEAR1340
2012-12-02 17:59:57 +01:00
void __init spear1340_clk_init ( void __iomem * misc_base ) ;
2012-04-19 22:23:13 +05:30
# else
2012-12-02 17:59:57 +01:00
static inline void spear1340_clk_init ( void __iomem * misc_base ) { }
2012-04-19 22:23:13 +05:30
# endif
# endif /* __MACH_GENERIC_H */