void __init setup_arch()

in kernel/setup.c [281:373]


void __init setup_arch(char **cmdline_p)
{
	pr_info("config ID: %08x:%08x\n",
		xtensa_get_sr(SREG_EPC), xtensa_get_sr(SREG_EXCSAVE));
	if (xtensa_get_sr(SREG_EPC) != XCHAL_HW_CONFIGID0 ||
	    xtensa_get_sr(SREG_EXCSAVE) != XCHAL_HW_CONFIGID1)
		pr_info("built for config ID: %08x:%08x\n",
			XCHAL_HW_CONFIGID0, XCHAL_HW_CONFIGID1);

	*cmdline_p = command_line;
	platform_setup(cmdline_p);
	strlcpy(boot_command_line, *cmdline_p, COMMAND_LINE_SIZE);

	/* Reserve some memory regions */

#ifdef CONFIG_BLK_DEV_INITRD
	if (initrd_start < initrd_end &&
	    !mem_reserve(__pa(initrd_start), __pa(initrd_end)))
		initrd_below_start_ok = 1;
	else
		initrd_start = 0;
#endif

	mem_reserve(__pa(_stext), __pa(_end));
#ifdef CONFIG_XIP_KERNEL
	mem_reserve(__pa(_xip_start), __pa(_xip_end));
#endif

#ifdef CONFIG_VECTORS_ADDR
#ifdef SUPPORT_WINDOWED
	mem_reserve(__pa(_WindowVectors_text_start),
		    __pa(_WindowVectors_text_end));
#endif

	mem_reserve(__pa(_DebugInterruptVector_text_start),
		    __pa(_DebugInterruptVector_text_end));

	mem_reserve(__pa(_KernelExceptionVector_text_start),
		    __pa(_KernelExceptionVector_text_end));

	mem_reserve(__pa(_UserExceptionVector_text_start),
		    __pa(_UserExceptionVector_text_end));

	mem_reserve(__pa(_DoubleExceptionVector_text_start),
		    __pa(_DoubleExceptionVector_text_end));

	mem_reserve(__pa(_exception_text_start),
		    __pa(_exception_text_end));
#if XCHAL_EXCM_LEVEL >= 2
	mem_reserve(__pa(_Level2InterruptVector_text_start),
		    __pa(_Level2InterruptVector_text_end));
#endif
#if XCHAL_EXCM_LEVEL >= 3
	mem_reserve(__pa(_Level3InterruptVector_text_start),
		    __pa(_Level3InterruptVector_text_end));
#endif
#if XCHAL_EXCM_LEVEL >= 4
	mem_reserve(__pa(_Level4InterruptVector_text_start),
		    __pa(_Level4InterruptVector_text_end));
#endif
#if XCHAL_EXCM_LEVEL >= 5
	mem_reserve(__pa(_Level5InterruptVector_text_start),
		    __pa(_Level5InterruptVector_text_end));
#endif
#if XCHAL_EXCM_LEVEL >= 6
	mem_reserve(__pa(_Level6InterruptVector_text_start),
		    __pa(_Level6InterruptVector_text_end));
#endif

#endif /* CONFIG_VECTORS_ADDR */

#ifdef CONFIG_SMP
	mem_reserve(__pa(_SecondaryResetVector_text_start),
		    __pa(_SecondaryResetVector_text_end));
#endif
	parse_early_param();
	bootmem_init();
	kasan_init();
	unflatten_and_copy_device_tree();

#ifdef CONFIG_SMP
	smp_init_cpus();
#endif

	paging_init();
	zones_init();

#ifdef CONFIG_VT
# if defined(CONFIG_VGA_CONSOLE)
	conswitchp = &vga_con;
# endif
#endif
}