2019-06-04 10:11:33 +02:00
// SPDX-License-Identifier: GPL-2.0-only
2010-10-13 00:52:46 -06:00
/*
* MIPS support for CONFIG_OF device tree support
*
* Copyright ( C ) 2010 Cisco Systems Inc . < dediao @ cisco . com >
*/
# include <linux/init.h>
2011-07-23 16:30:40 -04:00
# include <linux/export.h>
2010-10-13 00:52:46 -06:00
# include <linux/errno.h>
# include <linux/types.h>
2018-10-30 15:09:49 -07:00
# include <linux/memblock.h>
2010-10-13 00:52:46 -06:00
# include <linux/debugfs.h>
# include <linux/of.h>
# include <linux/of_fdt.h>
2014-10-20 21:28:02 -07:00
# include <linux/of_platform.h>
2010-10-13 00:52:46 -06:00
2015-06-02 17:46:42 -05:00
# include <asm/bootinfo.h>
2010-10-13 00:52:46 -06:00
# include <asm/page.h>
# include <asm/prom.h>
2013-04-11 05:34:59 +00:00
static char mips_machine_name [ 64 ] = " Unknown " ;
__init void mips_set_machine_name ( const char * name )
{
if ( name = = NULL )
return ;
2013-05-26 07:06:06 +00:00
strlcpy ( mips_machine_name , name , sizeof ( mips_machine_name ) ) ;
2013-04-11 05:34:59 +00: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 14:42:49 +02:00
# ifdef CONFIG_USE_OF
2010-10-13 00:52:46 -06: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 00:52:46 -06:00
}
2016-11-23 14:43:46 +01: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 14:43:46 +01:00
return 0 ;
}
2014-03-31 15:13:07 -05:00
void __init __dt_setup_arch ( void * bph )
2012-01-25 15:03:19 +01:00
{
2013-08-26 10:20:26 -05:00
if ( ! early_init_dt_scan ( bph ) )
2012-01-25 15:03:19 +01:00
return ;
2012-05-02 12:27:35 +02:00
2013-08-28 09:56:40 -05:00
mips_set_machine_name ( of_flat_dt_get_machine_name ( ) ) ;
2012-01-25 15:03:19 +01:00
}
2014-10-20 21:28:02 -07: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 09:49:07 -08:00
if ( bus1 ) {
strlcpy ( of_ids [ 1 ] . compatible , bus1 ,
sizeof ( of_ids [ 1 ] . compatible ) ) ;
}
2014-10-20 21:28:02 -07:00
if ( of_platform_populate ( NULL , of_ids , NULL , NULL ) )
panic ( " failed to populate DT " ) ;
return 0 ;
}
2013-04-11 05:34:59 +00:00
# endif