2013-01-22 17:00:52 +05:30
/*
* Copyright ( C ) 2012 Synopsys , Inc . ( www . synopsys . com )
*
* Based on reduced version of METAG
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation .
*/
# include <linux/init.h>
# include <linux/reboot.h>
# include <linux/memblock.h>
# include <linux/of.h>
# include <linux/of_fdt.h>
2013-01-18 15:12:20 +05:30
# include <asm/clk.h>
2013-01-18 15:12:26 +05:30
# include <asm/mach_desc.h>
2013-01-22 17:00:52 +05:30
2013-08-27 21:43:12 -05:00
static const void * __init arch_get_next_mach ( const char * const * * match )
{
static const struct machine_desc * mdesc = __arch_info_begin ;
const struct machine_desc * m = mdesc ;
if ( m > = __arch_info_end )
return NULL ;
mdesc + + ;
* match = m - > dt_compat ;
return m ;
}
2013-01-22 17:00:52 +05:30
/**
* setup_machine_fdt - Machine setup when an dtb was passed to the kernel
* @ dt : virtual address pointer to dt blob
*
* If a dtb was passed to the kernel , then use it to choose the correct
* machine_desc and to setup the system .
*/
2013-08-27 21:43:12 -05:00
const struct machine_desc * __init setup_machine_fdt ( void * dt )
2013-01-22 17:00:52 +05:30
{
2013-08-27 21:43:12 -05:00
const struct machine_desc * mdesc ;
2013-01-22 17:00:52 +05:30
unsigned long dt_root ;
2014-06-23 11:42:44 +05:30
const void * clk ;
2014-04-01 23:49:03 -05:00
int len ;
2013-01-22 17:00:52 +05:30
2013-08-26 10:12:22 -05:00
if ( ! early_init_dt_scan ( dt ) )
2013-01-18 15:12:26 +05:30
return NULL ;
2013-01-22 17:00:52 +05:30
2013-08-27 21:43:12 -05:00
mdesc = of_flat_dt_match_machine ( NULL , arch_get_next_mach ) ;
if ( ! mdesc )
2013-01-18 15:12:26 +05:30
machine_halt ( ) ;
2013-01-22 17:00:52 +05:30
2013-08-27 21:43:12 -05:00
dt_root = of_get_flat_dt_root ( ) ;
2013-01-18 15:12:20 +05:30
clk = of_get_flat_dt_prop ( dt_root , " clock-frequency " , & len ) ;
if ( clk )
arc_set_core_freq ( of_read_ulong ( clk , len / 4 ) ) ;
2013-08-27 21:43:12 -05:00
return mdesc ;
2013-01-22 17:00:52 +05:30
}