2013-11-24 15:30:46 +09:00
/*
* Copyright ( c ) 2013 , NVIDIA Corporation .
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation ; either version 2 of the License , or
* ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful , but WITHOUT
* ANY WARRANTY ; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE . See the GNU General Public License for
* more details .
*/
/*
* Support for the Trusted Foundations secure monitor .
*
* Trusted Foundation comes active on some ARM consumer devices ( most
* Tegra - based devices sold on the market are concerned ) . Such devices can only
* perform some basic operations , like setting the CPU reset vector , through
* SMC calls to the secure monitor . The calls are completely specific to
* Trusted Foundations , and do * not * follow the SMC calling convention or the
* PSCI standard .
*/
# ifndef __ASM_ARM_TRUSTED_FOUNDATIONS_H
# define __ASM_ARM_TRUSTED_FOUNDATIONS_H
# include <linux/kconfig.h>
# include <linux/printk.h>
# include <linux/bug.h>
# include <linux/of.h>
2014-02-07 13:35:02 +09:00
# include <linux/cpu.h>
# include <linux/smp.h>
2013-11-24 15:30:46 +09:00
struct trusted_foundations_platform_data {
unsigned int version_major ;
unsigned int version_minor ;
} ;
# if IS_ENABLED(CONFIG_TRUSTED_FOUNDATIONS)
void register_trusted_foundations ( struct trusted_foundations_platform_data * pd ) ;
void of_register_trusted_foundations ( void ) ;
# else /* CONFIG_TRUSTED_FOUNDATIONS */
static inline void register_trusted_foundations (
struct trusted_foundations_platform_data * pd )
{
/*
2014-02-07 13:35:02 +09:00
* If the system requires TF and we cannot provide it , continue booting
* but disable features that cannot be provided .
2013-11-24 15:30:46 +09:00
*/
2014-02-07 13:35:02 +09:00
pr_err ( " No support for Trusted Foundations, continuing in degraded mode. \n " ) ;
pr_err ( " Secondary processors as well as CPU PM will be disabled. \n " ) ;
2014-05-23 09:23:32 +09:00
# if IS_ENABLED(CONFIG_SMP)
2014-02-07 13:35:02 +09:00
setup_max_cpus = 0 ;
2014-05-23 09:23:32 +09:00
# endif
2014-02-07 13:35:02 +09:00
cpu_idle_poll_ctrl ( true ) ;
2013-11-24 15:30:46 +09:00
}
static inline void of_register_trusted_foundations ( void )
{
/*
* If we find the target should enable TF but does not support it ,
* fail as the system won ' t be able to do much anyway
*/
2014-02-07 13:35:01 +09:00
if ( of_find_compatible_node ( NULL , NULL , " tlm,trusted-foundations " ) )
2013-11-24 15:30:46 +09:00
register_trusted_foundations ( NULL ) ;
}
# endif /* CONFIG_TRUSTED_FOUNDATIONS */
# endif