2011-07-19 17:26:54 -06:00
/*
2013-02-13 19:15:50 +02:00
* NVIDIA Tegra SoC device tree board support
2011-07-19 17:26:54 -06:00
*
2013-02-13 19:15:50 +02:00
* Copyright ( C ) 2011 , 2013 , NVIDIA Corporation
2011-07-19 17:26:54 -06:00
* Copyright ( C ) 2010 Secret Lab Technologies , Ltd .
* Copyright ( C ) 2010 Google , Inc .
*
* This software is licensed under the terms of the GNU General Public
* License version 2 , as published by the Free Software Foundation , and
* may be copied , distributed , and modified under those terms .
*
* 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 .
*
*/
# include <linux/clk.h>
2014-07-11 09:44:49 +02:00
# include <linux/clk/tegra.h>
2011-07-19 17:26:54 -06:00
# include <linux/dma-mapping.h>
2014-07-11 09:44:49 +02:00
# include <linux/init.h>
# include <linux/io.h>
# include <linux/irqchip.h>
2011-07-19 17:26:54 -06:00
# include <linux/irqdomain.h>
2014-07-11 09:44:49 +02:00
# include <linux/kernel.h>
2011-07-19 17:26:54 -06:00
# include <linux/of_address.h>
# include <linux/of_fdt.h>
2014-07-11 09:44:49 +02:00
# include <linux/of.h>
2011-07-19 17:26:54 -06:00
# include <linux/of_platform.h>
# include <linux/pda_power.h>
2014-07-11 09:44:49 +02:00
# include <linux/platform_device.h>
# include <linux/serial_8250.h>
2013-03-14 08:48:40 +08:00
# include <linux/slab.h>
# include <linux/sys_soc.h>
2012-08-27 14:22:48 -07:00
# include <linux/usb/tegra_usb_phy.h>
2011-07-19 17:26:54 -06:00
2019-04-10 10:47:28 +02:00
# include <linux/firmware/trusted_foundations.h>
2014-07-11 09:52:41 +02:00
# include <soc/tegra/fuse.h>
2014-07-11 13:19:06 +02:00
# include <soc/tegra/pmc.h>
2014-07-11 09:52:41 +02:00
2019-03-18 01:52:07 +03:00
# include <asm/firmware.h>
2013-08-20 15:47:38 -06:00
# include <asm/hardware/cache-l2x0.h>
2011-07-19 17:26:54 -06:00
# include <asm/mach/arch.h>
# include <asm/mach/time.h>
2014-07-11 09:44:49 +02:00
# include <asm/mach-types.h>
2011-07-19 17:26:54 -06:00
# include <asm/setup.h>
# include "board.h"
2011-09-08 13:15:22 +01:00
# include "common.h"
2013-08-20 15:47:38 -06:00
# include "cpuidle.h"
2012-10-04 14:24:09 -06:00
# include "iomap.h"
2013-08-20 15:47:38 -06:00
# include "irq.h"
# include "pm.h"
# include "reset.h"
# include "sleep.h"
/*
* Storage for debug - macro . S ' s state .
*
* This must be in . data not . bss so that it gets initialized each time the
* kernel is loaded . The data is declared here rather than debug - macro . S so
* that multiple inclusions of debug - macro . S point at the same data .
*/
2013-11-05 14:10:53 -07:00
u32 tegra_uart_config [ 3 ] = {
2013-08-20 15:47:38 -06:00
/* Debug UART initialization required */
1 ,
/* Debug UART physical address */
0 ,
/* Debug UART virtual address */
0 ,
} ;
static void __init tegra_init_early ( void )
{
2013-11-24 15:30:49 +09:00
of_register_trusted_foundations ( ) ;
2013-11-12 13:03:16 -07:00
tegra_cpu_reset_handler_init ( ) ;
2019-03-18 01:52:07 +03:00
call_firmware_op ( l2x0_init ) ;
2013-08-20 15:47:38 -06:00
}
static void __init tegra_dt_init_irq ( void )
{
tegra_init_irq ( ) ;
irqchip_init ( ) ;
}
2012-08-27 14:22:48 -07:00
2011-07-19 17:26:54 -06:00
static void __init tegra_dt_init ( void )
{
2017-08-17 16:42:17 +02:00
struct device * parent = tegra_soc_device_register ( ) ;
2013-03-14 08:48:40 +08:00
2016-06-01 14:53:05 +08:00
of_platform_default_populate ( NULL , NULL , parent ) ;
2011-07-19 17:26:54 -06:00
}
2012-05-02 13:43:26 -06:00
static void __init tegra_dt_init_late ( void )
{
2013-08-20 15:47:38 -06:00
tegra_init_suspend ( ) ;
tegra_cpuidle_init ( ) ;
2012-05-02 13:43:26 -06:00
2016-06-22 14:39:41 +02:00
if ( IS_ENABLED ( CONFIG_ARCH_TEGRA_2x_SOC ) & &
of_machine_is_compatible ( " compal,paz00 " ) )
tegra_paz00_wifikill_init ( ) ;
2018-05-17 21:00:56 +03:00
if ( IS_ENABLED ( CONFIG_ARCH_TEGRA_2x_SOC ) & &
of_machine_is_compatible ( " nvidia,tegra20 " ) )
platform_device_register_simple ( " tegra20-cpufreq " , - 1 , NULL , 0 ) ;
2012-05-02 13:43:26 -06:00
}
2013-02-13 19:15:50 +02:00
static const char * const tegra_dt_board_compat [ ] = {
2013-10-08 12:50:03 +08:00
" nvidia,tegra124 " ,
2013-02-13 19:15:50 +02:00
" nvidia,tegra114 " ,
" nvidia,tegra30 " ,
2012-02-27 18:26:16 -07:00
" nvidia,tegra20 " ,
2011-07-19 17:26:54 -06:00
NULL
} ;
2013-02-13 19:15:50 +02:00
DT_MACHINE_START ( TEGRA_DT , " NVIDIA Tegra SoC (Flattened Device Tree) " )
2014-04-28 15:36:04 +01:00
. l2c_aux_val = 0x3c400001 ,
. l2c_aux_mask = 0xc20fc3fe ,
2011-09-08 13:15:22 +01:00
. smp = smp_ops ( tegra_smp_ops ) ,
2014-04-28 15:36:04 +01:00
. map_io = tegra_map_common_io ,
2013-02-13 19:15:48 +02:00
. init_early = tegra_init_early ,
2011-11-29 18:29:19 -07:00
. init_irq = tegra_dt_init_irq ,
2011-07-19 17:26:54 -06:00
. init_machine = tegra_dt_init ,
2012-05-02 13:43:26 -06:00
. init_late = tegra_dt_init_late ,
2013-02-13 19:15:50 +02:00
. dt_compat = tegra_dt_board_compat ,
2011-07-19 17:26:54 -06:00
MACHINE_END