2019-05-29 17:17:56 +03:00
// SPDX-License-Identifier: GPL-2.0-only
2011-07-20 03:26:54 +04:00
/*
2013-02-13 21:15:50 +04:00
* NVIDIA Tegra SoC device tree board support
2011-07-20 03:26:54 +04:00
*
2013-02-13 21:15:50 +04:00
* Copyright ( C ) 2011 , 2013 , NVIDIA Corporation
2011-07-20 03:26:54 +04:00
* Copyright ( C ) 2010 Secret Lab Technologies , Ltd .
* Copyright ( C ) 2010 Google , Inc .
*/
# include <linux/clk.h>
2014-07-11 11:44:49 +04:00
# include <linux/clk/tegra.h>
2011-07-20 03:26:54 +04:00
# include <linux/dma-mapping.h>
2014-07-11 11:44:49 +04:00
# include <linux/init.h>
# include <linux/io.h>
# include <linux/irqchip.h>
2011-07-20 03:26:54 +04:00
# include <linux/irqdomain.h>
2014-07-11 11:44:49 +04:00
# include <linux/kernel.h>
2011-07-20 03:26:54 +04:00
# include <linux/of_address.h>
# include <linux/of_fdt.h>
2014-07-11 11:44:49 +04:00
# include <linux/of.h>
2011-07-20 03:26:54 +04:00
# include <linux/of_platform.h>
# include <linux/pda_power.h>
2014-07-11 11:44:49 +04:00
# include <linux/platform_device.h>
# include <linux/serial_8250.h>
2013-03-14 04:48:40 +04:00
# include <linux/slab.h>
# include <linux/sys_soc.h>
2012-08-28 01:22:48 +04:00
# include <linux/usb/tegra_usb_phy.h>
2011-07-20 03:26:54 +04:00
2019-04-10 11:47:28 +03:00
# include <linux/firmware/trusted_foundations.h>
2014-07-11 11:52:41 +04:00
# include <soc/tegra/fuse.h>
2014-07-11 15:19:06 +04:00
# include <soc/tegra/pmc.h>
2014-07-11 11:52:41 +04:00
2019-03-18 01:52:07 +03:00
# include <asm/firmware.h>
2013-08-21 01:47:38 +04:00
# include <asm/hardware/cache-l2x0.h>
2011-07-20 03:26:54 +04:00
# include <asm/mach/arch.h>
# include <asm/mach/time.h>
2014-07-11 11:44:49 +04:00
# include <asm/mach-types.h>
2011-07-20 03:26:54 +04:00
# include <asm/setup.h>
# include "board.h"
2011-09-08 16:15:22 +04:00
# include "common.h"
2013-08-21 01:47:38 +04:00
# include "cpuidle.h"
2012-10-05 00:24:09 +04:00
# include "iomap.h"
2013-08-21 01:47:38 +04: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-06 01:10:53 +04:00
u32 tegra_uart_config [ 3 ] = {
2013-08-21 01:47:38 +04: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 10:30:49 +04:00
of_register_trusted_foundations ( ) ;
2013-11-13 00:03:16 +04:00
tegra_cpu_reset_handler_init ( ) ;
2019-03-18 01:52:07 +03:00
call_firmware_op ( l2x0_init ) ;
2013-08-21 01:47:38 +04:00
}
static void __init tegra_dt_init_irq ( void )
{
tegra_init_irq ( ) ;
irqchip_init ( ) ;
}
2012-08-28 01:22:48 +04:00
2011-07-20 03:26:54 +04:00
static void __init tegra_dt_init ( void )
{
2017-08-17 17:42:17 +03:00
struct device * parent = tegra_soc_device_register ( ) ;
2013-03-14 04:48:40 +04:00
2016-06-01 09:53:05 +03:00
of_platform_default_populate ( NULL , NULL , parent ) ;
2011-07-20 03:26:54 +04:00
}
2012-05-02 23:43:26 +04:00
static void __init tegra_dt_init_late ( void )
{
2013-08-21 01:47:38 +04:00
tegra_init_suspend ( ) ;
tegra_cpuidle_init ( ) ;
2012-05-02 23:43:26 +04:00
2016-06-22 15:39:41 +03: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 23:43:26 +04:00
}
2013-02-13 21:15:50 +04:00
static const char * const tegra_dt_board_compat [ ] = {
2013-10-08 08:50:03 +04:00
" nvidia,tegra124 " ,
2013-02-13 21:15:50 +04:00
" nvidia,tegra114 " ,
" nvidia,tegra30 " ,
2012-02-28 05:26:16 +04:00
" nvidia,tegra20 " ,
2011-07-20 03:26:54 +04:00
NULL
} ;
2013-02-13 21:15:50 +04:00
DT_MACHINE_START ( TEGRA_DT , " NVIDIA Tegra SoC (Flattened Device Tree) " )
2014-04-28 18:36:04 +04:00
. l2c_aux_val = 0x3c400001 ,
. l2c_aux_mask = 0xc20fc3fe ,
2011-09-08 16:15:22 +04:00
. smp = smp_ops ( tegra_smp_ops ) ,
2014-04-28 18:36:04 +04:00
. map_io = tegra_map_common_io ,
2013-02-13 21:15:48 +04:00
. init_early = tegra_init_early ,
2011-11-30 05:29:19 +04:00
. init_irq = tegra_dt_init_irq ,
2011-07-20 03:26:54 +04:00
. init_machine = tegra_dt_init ,
2012-05-02 23:43:26 +04:00
. init_late = tegra_dt_init_late ,
2013-02-13 21:15:50 +04:00
. dt_compat = tegra_dt_board_compat ,
2011-07-20 03:26:54 +04:00
MACHINE_END