2019-06-04 11:11:33 +03:00
// SPDX-License-Identifier: GPL-2.0-only
2010-10-13 10:52:46 +04:00
/*
* MIPS support for CONFIG_OF device tree support
*
* Copyright ( C ) 2010 Cisco Systems Inc . < dediao @ cisco . com >
*/
# include <linux/init.h>
2011-07-24 00:30:40 +04:00
# include <linux/export.h>
2010-10-13 10:52:46 +04:00
# include <linux/errno.h>
# include <linux/types.h>
2018-10-31 01:09:49 +03:00
# include <linux/memblock.h>
2010-10-13 10:52:46 +04:00
# include <linux/debugfs.h>
# include <linux/of.h>
# include <linux/of_fdt.h>
2014-10-21 08:28:02 +04:00
# include <linux/of_platform.h>
2010-10-13 10:52:46 +04:00
2015-06-03 01:46:42 +03:00
# include <asm/bootinfo.h>
2010-10-13 10:52:46 +04:00
# include <asm/page.h>
# include <asm/prom.h>
2013-04-11 09:34:59 +04:00
static char mips_machine_name [ 64 ] = " Unknown " ;
__init void mips_set_machine_name ( const char * name )
{
if ( name = = NULL )
return ;
2013-05-26 11:06:06 +04:00
strlcpy ( mips_machine_name , name , sizeof ( mips_machine_name ) ) ;
2013-04-11 09:34:59 +04:00
pr_info ( " MIPS: machine is %s \n " , mips_get_machine_name ( ) ) ;
}
char * mips_get_machine_name ( void )
{
return mips_machine_name ;
}
2015-07-19 15:42:49 +03:00
# ifdef CONFIG_USE_OF
2010-10-13 10:52:46 +04:00
void __init early_init_dt_add_memory_arch ( u64 base , u64 size )
{
2019-05-03 20:50:40 +03:00
if ( base > = PHYS_ADDR_MAX ) {
pr_warn ( " Trying to add an invalid memory region, skipped \n " ) ;
return ;
}
/* Truncate the passed memory region instead of type casting */
if ( base + size - 1 > = PHYS_ADDR_MAX | | base + size < base ) {
pr_warn ( " Truncate memory region %llx @ %llx to size %llx \n " ,
size , base , PHYS_ADDR_MAX - base ) ;
size = PHYS_ADDR_MAX - base ;
}
add_memory_region ( base , size , BOOT_MEM_RAM ) ;
2010-10-13 10:52:46 +04:00
}
2016-11-23 16:43:46 +03:00
int __init early_init_dt_reserve_memory_arch ( phys_addr_t base ,
phys_addr_t size , bool nomap )
{
2019-04-24 01:47:43 +03:00
add_memory_region ( base , size ,
nomap ? BOOT_MEM_NOMAP : BOOT_MEM_RESERVED ) ;
2016-11-23 16:43:46 +03:00
return 0 ;
}
2014-04-01 00:13:07 +04:00
void __init __dt_setup_arch ( void * bph )
2012-01-25 18:03:19 +04:00
{
2013-08-26 19:20:26 +04:00
if ( ! early_init_dt_scan ( bph ) )
2012-01-25 18:03:19 +04:00
return ;
2012-05-02 14:27:35 +04:00
2013-08-28 18:56:40 +04:00
mips_set_machine_name ( of_flat_dt_get_machine_name ( ) ) ;
2012-01-25 18:03:19 +04:00
}
2014-10-21 08:28:02 +04:00
int __init __dt_register_buses ( const char * bus0 , const char * bus1 )
{
static struct of_device_id of_ids [ 3 ] ;
if ( ! of_have_populated_dt ( ) )
panic ( " device tree not present " ) ;
strlcpy ( of_ids [ 0 ] . compatible , bus0 , sizeof ( of_ids [ 0 ] . compatible ) ) ;
2014-12-25 20:49:07 +03:00
if ( bus1 ) {
strlcpy ( of_ids [ 1 ] . compatible , bus1 ,
sizeof ( of_ids [ 1 ] . compatible ) ) ;
}
2014-10-21 08:28:02 +04:00
if ( of_platform_populate ( NULL , of_ids , NULL , NULL ) )
panic ( " failed to populate DT " ) ;
return 0 ;
}
2013-04-11 09:34:59 +04:00
# endif