2019-05-23 11:14:57 +02:00
// SPDX-License-Identifier: GPL-2.0-or-later
2017-07-10 18:00:26 -07:00
/*
* Copyright ( C ) 2009 Sunplus Core Technology Co . , Ltd .
* Chen Liqin < liqin . chen @ sunplusct . com >
* Lennox Wu < lennox . wu @ sunplusct . com >
* Copyright ( C ) 2012 Regents of the University of California
*/
# include <linux/init.h>
# include <linux/mm.h>
# include <linux/memblock.h>
# include <linux/sched.h>
# include <linux/console.h>
# include <linux/screen_info.h>
# include <linux/of_fdt.h>
# include <linux/of_platform.h>
# include <linux/sched/task.h>
2018-04-27 08:43:14 +02:00
# include <linux/swiotlb.h>
2017-07-10 18:00:26 -07:00
2019-10-28 13:10:38 +01:00
# include <asm/clint.h>
2017-07-10 18:00:26 -07:00
# include <asm/setup.h>
# include <asm/sections.h>
# include <asm/pgtable.h>
# include <asm/smp.h>
2020-03-17 18:11:35 -07:00
# include <asm/sbi.h>
2017-07-10 18:00:26 -07:00
# include <asm/tlbflush.h>
# include <asm/thread_info.h>
2020-01-06 10:38:32 -08:00
# include <asm/kasan.h>
2017-07-10 18:00:26 -07:00
2019-10-17 15:00:17 -07:00
# include "head.h"
2017-07-10 18:00:26 -07:00
# ifdef CONFIG_DUMMY_CONSOLE
struct screen_info screen_info = {
. orig_video_lines = 30 ,
. orig_video_cols = 80 ,
. orig_video_mode = 0 ,
. orig_video_ega_bx = 0 ,
. orig_video_isVGA = 1 ,
. orig_video_points = 8
} ;
# endif
2020-02-04 19:19:47 +08:00
/*
* The lucky hart to first increment this variable will boot the other cores .
* This is used before the kernel initializes the BSS so it can ' t be in the
* BSS .
*/
atomic_t hart_lottery __section ( . sdata ) ;
2018-10-02 12:15:05 -07:00
unsigned long boot_cpu_hartid ;
2017-07-10 18:00:26 -07:00
2019-06-28 13:36:21 -07:00
void __init parse_dtb ( void )
2017-07-10 18:00:26 -07:00
{
2019-06-28 13:36:21 -07:00
if ( early_init_dt_scan ( dtb_early_va ) )
2018-12-17 19:15:12 -08:00
return ;
pr_err ( " No DTB passed to the kernel \n " ) ;
# ifdef CONFIG_CMDLINE_FORCE
strlcpy ( boot_command_line , CONFIG_CMDLINE , COMMAND_LINE_SIZE ) ;
pr_info ( " Forcing kernel command line to: %s \n " , boot_command_line ) ;
# endif
2017-07-10 18:00:26 -07:00
}
void __init setup_arch ( char * * cmdline_p )
{
init_mm . start_code = ( unsigned long ) _stext ;
init_mm . end_code = ( unsigned long ) _etext ;
init_mm . end_data = ( unsigned long ) _edata ;
init_mm . brk = ( unsigned long ) _end ;
2019-01-07 19:19:14 +05:30
* cmdline_p = boot_command_line ;
parse_early_param ( ) ;
2017-07-10 18:00:26 -07:00
setup_bootmem ( ) ;
paging_init ( ) ;
unflatten_device_tree ( ) ;
2019-10-28 13:10:38 +01:00
clint_init_boot_cpu ( ) ;
2018-10-02 16:52:28 +08:00
# ifdef CONFIG_SWIOTLB
2018-04-27 08:43:14 +02:00
swiotlb_init ( 1 ) ;
2018-10-02 16:52:28 +08:00
# endif
2017-07-10 18:00:26 -07:00
2020-01-06 10:38:32 -08:00
# ifdef CONFIG_KASAN
kasan_init ( ) ;
# endif
2020-03-17 18:11:35 -07:00
# if IS_ENABLED(CONFIG_RISCV_SBI)
sbi_init ( ) ;
# endif
2017-07-10 18:00:26 -07:00
# ifdef CONFIG_SMP
setup_smp ( ) ;
# endif
riscv_fill_hwcap ( ) ;
}