Linux Audio

Check our new training course

Loading...
Note: File does not exist in v4.10.11.
  1// SPDX-License-Identifier: GPL-2.0-or-later
  2/*
  3 * Copyright (C) 2009 Sunplus Core Technology Co., Ltd.
  4 *  Chen Liqin <liqin.chen@sunplusct.com>
  5 *  Lennox Wu <lennox.wu@sunplusct.com>
  6 * Copyright (C) 2012 Regents of the University of California
  7 */
  8
  9#include <linux/init.h>
 10#include <linux/mm.h>
 11#include <linux/memblock.h>
 12#include <linux/sched.h>
 13#include <linux/console.h>
 14#include <linux/screen_info.h>
 15#include <linux/of_fdt.h>
 16#include <linux/of_platform.h>
 17#include <linux/sched/task.h>
 18#include <linux/swiotlb.h>
 19#include <linux/smp.h>
 20
 21#include <asm/cpu_ops.h>
 22#include <asm/setup.h>
 23#include <asm/sections.h>
 24#include <asm/sbi.h>
 25#include <asm/tlbflush.h>
 26#include <asm/thread_info.h>
 27#include <asm/kasan.h>
 28
 29#include "head.h"
 30
 31#ifdef CONFIG_DUMMY_CONSOLE
 32struct screen_info screen_info = {
 33	.orig_video_lines	= 30,
 34	.orig_video_cols	= 80,
 35	.orig_video_mode	= 0,
 36	.orig_video_ega_bx	= 0,
 37	.orig_video_isVGA	= 1,
 38	.orig_video_points	= 8
 39};
 40#endif
 41
 42/*
 43 * The lucky hart to first increment this variable will boot the other cores.
 44 * This is used before the kernel initializes the BSS so it can't be in the
 45 * BSS.
 46 */
 47atomic_t hart_lottery __section(.sdata);
 48unsigned long boot_cpu_hartid;
 49static DEFINE_PER_CPU(struct cpu, cpu_devices);
 50
 51void __init parse_dtb(void)
 52{
 53	if (early_init_dt_scan(dtb_early_va))
 54		return;
 55
 56	pr_err("No DTB passed to the kernel\n");
 57#ifdef CONFIG_CMDLINE_FORCE
 58	strlcpy(boot_command_line, CONFIG_CMDLINE, COMMAND_LINE_SIZE);
 59	pr_info("Forcing kernel command line to: %s\n", boot_command_line);
 60#endif
 61}
 62
 63void __init setup_arch(char **cmdline_p)
 64{
 65	init_mm.start_code = (unsigned long) _stext;
 66	init_mm.end_code   = (unsigned long) _etext;
 67	init_mm.end_data   = (unsigned long) _edata;
 68	init_mm.brk        = (unsigned long) _end;
 69
 70	*cmdline_p = boot_command_line;
 71
 72	parse_early_param();
 73
 74	setup_bootmem();
 75	paging_init();
 76#if IS_ENABLED(CONFIG_BUILTIN_DTB)
 77	unflatten_and_copy_device_tree();
 78#else
 79	unflatten_device_tree();
 80#endif
 81
 82#ifdef CONFIG_SWIOTLB
 83	swiotlb_init(1);
 84#endif
 85
 86#ifdef CONFIG_KASAN
 87	kasan_init();
 88#endif
 89
 90#if IS_ENABLED(CONFIG_RISCV_SBI)
 91	sbi_init();
 92#endif
 93
 94#ifdef CONFIG_SMP
 95	setup_smp();
 96#endif
 97
 98	riscv_fill_hwcap();
 99}
100
101static int __init topology_init(void)
102{
103	int i;
104
105	for_each_possible_cpu(i) {
106		struct cpu *cpu = &per_cpu(cpu_devices, i);
107
108		cpu->hotpluggable = cpu_has_hotplug(i);
109		register_cpu(cpu, i);
110	}
111
112	return 0;
113}
114subsys_initcall(topology_init);