cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

setup.c (29501B)


      1// SPDX-License-Identifier: GPL-2.0
      2/*
      3 *  S390 version
      4 *    Copyright IBM Corp. 1999, 2012
      5 *    Author(s): Hartmut Penner (hp@de.ibm.com),
      6 *               Martin Schwidefsky (schwidefsky@de.ibm.com)
      7 *
      8 *  Derived from "arch/i386/kernel/setup.c"
      9 *    Copyright (C) 1995, Linus Torvalds
     10 */
     11
     12/*
     13 * This file handles the architecture-dependent parts of initialization
     14 */
     15
     16#define KMSG_COMPONENT "setup"
     17#define pr_fmt(fmt) KMSG_COMPONENT ": " fmt
     18
     19#include <linux/errno.h>
     20#include <linux/export.h>
     21#include <linux/sched.h>
     22#include <linux/sched/task.h>
     23#include <linux/cpu.h>
     24#include <linux/kernel.h>
     25#include <linux/memblock.h>
     26#include <linux/mm.h>
     27#include <linux/stddef.h>
     28#include <linux/unistd.h>
     29#include <linux/ptrace.h>
     30#include <linux/random.h>
     31#include <linux/user.h>
     32#include <linux/tty.h>
     33#include <linux/ioport.h>
     34#include <linux/delay.h>
     35#include <linux/init.h>
     36#include <linux/initrd.h>
     37#include <linux/root_dev.h>
     38#include <linux/console.h>
     39#include <linux/kernel_stat.h>
     40#include <linux/dma-map-ops.h>
     41#include <linux/device.h>
     42#include <linux/notifier.h>
     43#include <linux/pfn.h>
     44#include <linux/ctype.h>
     45#include <linux/reboot.h>
     46#include <linux/topology.h>
     47#include <linux/kexec.h>
     48#include <linux/crash_dump.h>
     49#include <linux/memory.h>
     50#include <linux/compat.h>
     51#include <linux/start_kernel.h>
     52#include <linux/hugetlb.h>
     53#include <linux/kmemleak.h>
     54
     55#include <asm/boot_data.h>
     56#include <asm/ipl.h>
     57#include <asm/facility.h>
     58#include <asm/smp.h>
     59#include <asm/mmu_context.h>
     60#include <asm/cpcmd.h>
     61#include <asm/lowcore.h>
     62#include <asm/nmi.h>
     63#include <asm/irq.h>
     64#include <asm/page.h>
     65#include <asm/ptrace.h>
     66#include <asm/sections.h>
     67#include <asm/ebcdic.h>
     68#include <asm/diag.h>
     69#include <asm/os_info.h>
     70#include <asm/sclp.h>
     71#include <asm/stacktrace.h>
     72#include <asm/sysinfo.h>
     73#include <asm/numa.h>
     74#include <asm/alternative.h>
     75#include <asm/nospec-branch.h>
     76#include <asm/mem_detect.h>
     77#include <asm/uv.h>
     78#include <asm/asm-offsets.h>
     79#include "entry.h"
     80
     81/*
     82 * Machine setup..
     83 */
     84unsigned int console_mode = 0;
     85EXPORT_SYMBOL(console_mode);
     86
     87unsigned int console_devno = -1;
     88EXPORT_SYMBOL(console_devno);
     89
     90unsigned int console_irq = -1;
     91EXPORT_SYMBOL(console_irq);
     92
     93/*
     94 * Some code and data needs to stay below 2 GB, even when the kernel would be
     95 * relocated above 2 GB, because it has to use 31 bit addresses.
     96 * Such code and data is part of the .amode31 section.
     97 */
     98unsigned long __amode31_ref __samode31 = (unsigned long)&_samode31;
     99unsigned long __amode31_ref __eamode31 = (unsigned long)&_eamode31;
    100unsigned long __amode31_ref __stext_amode31 = (unsigned long)&_stext_amode31;
    101unsigned long __amode31_ref __etext_amode31 = (unsigned long)&_etext_amode31;
    102struct exception_table_entry __amode31_ref *__start_amode31_ex_table = _start_amode31_ex_table;
    103struct exception_table_entry __amode31_ref *__stop_amode31_ex_table = _stop_amode31_ex_table;
    104
    105/*
    106 * Control registers CR2, CR5 and CR15 are initialized with addresses
    107 * of tables that must be placed below 2G which is handled by the AMODE31
    108 * sections.
    109 * Because the AMODE31 sections are relocated below 2G at startup,
    110 * the content of control registers CR2, CR5 and CR15 must be updated
    111 * with new addresses after the relocation. The initial initialization of
    112 * control registers occurs in head64.S and then gets updated again after AMODE31
    113 * relocation. We must access the relevant AMODE31 tables indirectly via
    114 * pointers placed in the .amode31.refs linker section. Those pointers get
    115 * updated automatically during AMODE31 relocation and always contain a valid
    116 * address within AMODE31 sections.
    117 */
    118
    119static __amode31_data u32 __ctl_duct_amode31[16] __aligned(64);
    120
    121static __amode31_data u64 __ctl_aste_amode31[8] __aligned(64) = {
    122	[1] = 0xffffffffffffffff
    123};
    124
    125static __amode31_data u32 __ctl_duald_amode31[32] __aligned(128) = {
    126	0x80000000, 0, 0, 0,
    127	0x80000000, 0, 0, 0,
    128	0x80000000, 0, 0, 0,
    129	0x80000000, 0, 0, 0,
    130	0x80000000, 0, 0, 0,
    131	0x80000000, 0, 0, 0,
    132	0x80000000, 0, 0, 0,
    133	0x80000000, 0, 0, 0
    134};
    135
    136static __amode31_data u32 __ctl_linkage_stack_amode31[8] __aligned(64) = {
    137	0, 0, 0x89000000, 0,
    138	0, 0, 0x8a000000, 0
    139};
    140
    141static u64 __amode31_ref *__ctl_aste = __ctl_aste_amode31;
    142static u32 __amode31_ref *__ctl_duald = __ctl_duald_amode31;
    143static u32 __amode31_ref *__ctl_linkage_stack = __ctl_linkage_stack_amode31;
    144static u32 __amode31_ref *__ctl_duct = __ctl_duct_amode31;
    145
    146int __bootdata(noexec_disabled);
    147unsigned long __bootdata(ident_map_size);
    148struct mem_detect_info __bootdata(mem_detect);
    149struct initrd_data __bootdata(initrd_data);
    150
    151unsigned long __bootdata_preserved(__kaslr_offset);
    152unsigned long __bootdata(__amode31_base);
    153unsigned int __bootdata_preserved(zlib_dfltcc_support);
    154EXPORT_SYMBOL(zlib_dfltcc_support);
    155u64 __bootdata_preserved(stfle_fac_list[16]);
    156EXPORT_SYMBOL(stfle_fac_list);
    157u64 __bootdata_preserved(alt_stfle_fac_list[16]);
    158struct oldmem_data __bootdata_preserved(oldmem_data);
    159
    160unsigned long VMALLOC_START;
    161EXPORT_SYMBOL(VMALLOC_START);
    162
    163unsigned long VMALLOC_END;
    164EXPORT_SYMBOL(VMALLOC_END);
    165
    166struct page *vmemmap;
    167EXPORT_SYMBOL(vmemmap);
    168unsigned long vmemmap_size;
    169
    170unsigned long MODULES_VADDR;
    171unsigned long MODULES_END;
    172
    173/* An array with a pointer to the lowcore of every CPU. */
    174struct lowcore *lowcore_ptr[NR_CPUS];
    175EXPORT_SYMBOL(lowcore_ptr);
    176
    177DEFINE_STATIC_KEY_FALSE(cpu_has_bear);
    178
    179/*
    180 * The Write Back bit position in the physaddr is given by the SLPC PCI.
    181 * Leaving the mask zero always uses write through which is safe
    182 */
    183unsigned long mio_wb_bit_mask __ro_after_init;
    184
    185/*
    186 * This is set up by the setup-routine at boot-time
    187 * for S390 need to find out, what we have to setup
    188 * using address 0x10400 ...
    189 */
    190
    191#include <asm/setup.h>
    192
    193/*
    194 * condev= and conmode= setup parameter.
    195 */
    196
    197static int __init condev_setup(char *str)
    198{
    199	int vdev;
    200
    201	vdev = simple_strtoul(str, &str, 0);
    202	if (vdev >= 0 && vdev < 65536) {
    203		console_devno = vdev;
    204		console_irq = -1;
    205	}
    206	return 1;
    207}
    208
    209__setup("condev=", condev_setup);
    210
    211static void __init set_preferred_console(void)
    212{
    213	if (CONSOLE_IS_3215 || CONSOLE_IS_SCLP)
    214		add_preferred_console("ttyS", 0, NULL);
    215	else if (CONSOLE_IS_3270)
    216		add_preferred_console("tty3270", 0, NULL);
    217	else if (CONSOLE_IS_VT220)
    218		add_preferred_console("ttysclp", 0, NULL);
    219	else if (CONSOLE_IS_HVC)
    220		add_preferred_console("hvc", 0, NULL);
    221}
    222
    223static int __init conmode_setup(char *str)
    224{
    225#if defined(CONFIG_SCLP_CONSOLE) || defined(CONFIG_SCLP_VT220_CONSOLE)
    226	if (!strcmp(str, "hwc") || !strcmp(str, "sclp"))
    227                SET_CONSOLE_SCLP;
    228#endif
    229#if defined(CONFIG_TN3215_CONSOLE)
    230	if (!strcmp(str, "3215"))
    231		SET_CONSOLE_3215;
    232#endif
    233#if defined(CONFIG_TN3270_CONSOLE)
    234	if (!strcmp(str, "3270"))
    235		SET_CONSOLE_3270;
    236#endif
    237	set_preferred_console();
    238        return 1;
    239}
    240
    241__setup("conmode=", conmode_setup);
    242
    243static void __init conmode_default(void)
    244{
    245	char query_buffer[1024];
    246	char *ptr;
    247
    248        if (MACHINE_IS_VM) {
    249		cpcmd("QUERY CONSOLE", query_buffer, 1024, NULL);
    250		console_devno = simple_strtoul(query_buffer + 5, NULL, 16);
    251		ptr = strstr(query_buffer, "SUBCHANNEL =");
    252		console_irq = simple_strtoul(ptr + 13, NULL, 16);
    253		cpcmd("QUERY TERM", query_buffer, 1024, NULL);
    254		ptr = strstr(query_buffer, "CONMODE");
    255		/*
    256		 * Set the conmode to 3215 so that the device recognition 
    257		 * will set the cu_type of the console to 3215. If the
    258		 * conmode is 3270 and we don't set it back then both
    259		 * 3215 and the 3270 driver will try to access the console
    260		 * device (3215 as console and 3270 as normal tty).
    261		 */
    262		cpcmd("TERM CONMODE 3215", NULL, 0, NULL);
    263		if (ptr == NULL) {
    264#if defined(CONFIG_SCLP_CONSOLE) || defined(CONFIG_SCLP_VT220_CONSOLE)
    265			SET_CONSOLE_SCLP;
    266#endif
    267			return;
    268		}
    269		if (str_has_prefix(ptr + 8, "3270")) {
    270#if defined(CONFIG_TN3270_CONSOLE)
    271			SET_CONSOLE_3270;
    272#elif defined(CONFIG_TN3215_CONSOLE)
    273			SET_CONSOLE_3215;
    274#elif defined(CONFIG_SCLP_CONSOLE) || defined(CONFIG_SCLP_VT220_CONSOLE)
    275			SET_CONSOLE_SCLP;
    276#endif
    277		} else if (str_has_prefix(ptr + 8, "3215")) {
    278#if defined(CONFIG_TN3215_CONSOLE)
    279			SET_CONSOLE_3215;
    280#elif defined(CONFIG_TN3270_CONSOLE)
    281			SET_CONSOLE_3270;
    282#elif defined(CONFIG_SCLP_CONSOLE) || defined(CONFIG_SCLP_VT220_CONSOLE)
    283			SET_CONSOLE_SCLP;
    284#endif
    285		}
    286	} else if (MACHINE_IS_KVM) {
    287		if (sclp.has_vt220 && IS_ENABLED(CONFIG_SCLP_VT220_CONSOLE))
    288			SET_CONSOLE_VT220;
    289		else if (sclp.has_linemode && IS_ENABLED(CONFIG_SCLP_CONSOLE))
    290			SET_CONSOLE_SCLP;
    291		else
    292			SET_CONSOLE_HVC;
    293	} else {
    294#if defined(CONFIG_SCLP_CONSOLE) || defined(CONFIG_SCLP_VT220_CONSOLE)
    295		SET_CONSOLE_SCLP;
    296#endif
    297	}
    298}
    299
    300#ifdef CONFIG_CRASH_DUMP
    301static void __init setup_zfcpdump(void)
    302{
    303	if (!is_ipl_type_dump())
    304		return;
    305	if (oldmem_data.start)
    306		return;
    307	strcat(boot_command_line, " cio_ignore=all,!ipldev,!condev");
    308	console_loglevel = 2;
    309}
    310#else
    311static inline void setup_zfcpdump(void) {}
    312#endif /* CONFIG_CRASH_DUMP */
    313
    314 /*
    315 * Reboot, halt and power_off stubs. They just call _machine_restart,
    316 * _machine_halt or _machine_power_off. 
    317 */
    318
    319void machine_restart(char *command)
    320{
    321	if ((!in_interrupt() && !in_atomic()) || oops_in_progress)
    322		/*
    323		 * Only unblank the console if we are called in enabled
    324		 * context or a bust_spinlocks cleared the way for us.
    325		 */
    326		console_unblank();
    327	_machine_restart(command);
    328}
    329
    330void machine_halt(void)
    331{
    332	if (!in_interrupt() || oops_in_progress)
    333		/*
    334		 * Only unblank the console if we are called in enabled
    335		 * context or a bust_spinlocks cleared the way for us.
    336		 */
    337		console_unblank();
    338	_machine_halt();
    339}
    340
    341void machine_power_off(void)
    342{
    343	if (!in_interrupt() || oops_in_progress)
    344		/*
    345		 * Only unblank the console if we are called in enabled
    346		 * context or a bust_spinlocks cleared the way for us.
    347		 */
    348		console_unblank();
    349	_machine_power_off();
    350}
    351
    352/*
    353 * Dummy power off function.
    354 */
    355void (*pm_power_off)(void) = machine_power_off;
    356EXPORT_SYMBOL_GPL(pm_power_off);
    357
    358void *restart_stack;
    359
    360unsigned long stack_alloc(void)
    361{
    362#ifdef CONFIG_VMAP_STACK
    363	void *ret;
    364
    365	ret = __vmalloc_node(THREAD_SIZE, THREAD_SIZE, THREADINFO_GFP,
    366			     NUMA_NO_NODE, __builtin_return_address(0));
    367	kmemleak_not_leak(ret);
    368	return (unsigned long)ret;
    369#else
    370	return __get_free_pages(GFP_KERNEL, THREAD_SIZE_ORDER);
    371#endif
    372}
    373
    374void stack_free(unsigned long stack)
    375{
    376#ifdef CONFIG_VMAP_STACK
    377	vfree((void *) stack);
    378#else
    379	free_pages(stack, THREAD_SIZE_ORDER);
    380#endif
    381}
    382
    383int __init arch_early_irq_init(void)
    384{
    385	unsigned long stack;
    386
    387	stack = __get_free_pages(GFP_KERNEL, THREAD_SIZE_ORDER);
    388	if (!stack)
    389		panic("Couldn't allocate async stack");
    390	S390_lowcore.async_stack = stack + STACK_INIT_OFFSET;
    391	return 0;
    392}
    393
    394void __init arch_call_rest_init(void)
    395{
    396	unsigned long stack;
    397
    398	stack = stack_alloc();
    399	if (!stack)
    400		panic("Couldn't allocate kernel stack");
    401	current->stack = (void *) stack;
    402#ifdef CONFIG_VMAP_STACK
    403	current->stack_vm_area = (void *) stack;
    404#endif
    405	set_task_stack_end_magic(current);
    406	stack += STACK_INIT_OFFSET;
    407	S390_lowcore.kernel_stack = stack;
    408	call_on_stack_noreturn(rest_init, stack);
    409}
    410
    411static void __init setup_lowcore_dat_off(void)
    412{
    413	unsigned long int_psw_mask = PSW_KERNEL_BITS;
    414	unsigned long mcck_stack;
    415	struct lowcore *lc;
    416
    417	if (IS_ENABLED(CONFIG_KASAN))
    418		int_psw_mask |= PSW_MASK_DAT;
    419
    420	/*
    421	 * Setup lowcore for boot cpu
    422	 */
    423	BUILD_BUG_ON(sizeof(struct lowcore) != LC_PAGES * PAGE_SIZE);
    424	lc = memblock_alloc_low(sizeof(*lc), sizeof(*lc));
    425	if (!lc)
    426		panic("%s: Failed to allocate %zu bytes align=%zx\n",
    427		      __func__, sizeof(*lc), sizeof(*lc));
    428
    429	lc->restart_psw.mask = PSW_KERNEL_BITS;
    430	lc->restart_psw.addr = (unsigned long) restart_int_handler;
    431	lc->external_new_psw.mask = int_psw_mask | PSW_MASK_MCHECK;
    432	lc->external_new_psw.addr = (unsigned long) ext_int_handler;
    433	lc->svc_new_psw.mask = int_psw_mask | PSW_MASK_MCHECK;
    434	lc->svc_new_psw.addr = (unsigned long) system_call;
    435	lc->program_new_psw.mask = int_psw_mask | PSW_MASK_MCHECK;
    436	lc->program_new_psw.addr = (unsigned long) pgm_check_handler;
    437	lc->mcck_new_psw.mask = PSW_KERNEL_BITS;
    438	lc->mcck_new_psw.addr = (unsigned long) mcck_int_handler;
    439	lc->io_new_psw.mask = int_psw_mask | PSW_MASK_MCHECK;
    440	lc->io_new_psw.addr = (unsigned long) io_int_handler;
    441	lc->clock_comparator = clock_comparator_max;
    442	lc->nodat_stack = ((unsigned long) &init_thread_union)
    443		+ THREAD_SIZE - STACK_FRAME_OVERHEAD - sizeof(struct pt_regs);
    444	lc->current_task = (unsigned long)&init_task;
    445	lc->lpp = LPP_MAGIC;
    446	lc->machine_flags = S390_lowcore.machine_flags;
    447	lc->preempt_count = S390_lowcore.preempt_count;
    448	nmi_alloc_mcesa_early(&lc->mcesad);
    449	lc->sys_enter_timer = S390_lowcore.sys_enter_timer;
    450	lc->exit_timer = S390_lowcore.exit_timer;
    451	lc->user_timer = S390_lowcore.user_timer;
    452	lc->system_timer = S390_lowcore.system_timer;
    453	lc->steal_timer = S390_lowcore.steal_timer;
    454	lc->last_update_timer = S390_lowcore.last_update_timer;
    455	lc->last_update_clock = S390_lowcore.last_update_clock;
    456
    457	/*
    458	 * Allocate the global restart stack which is the same for
    459	 * all CPUs in cast *one* of them does a PSW restart.
    460	 */
    461	restart_stack = memblock_alloc(THREAD_SIZE, THREAD_SIZE);
    462	if (!restart_stack)
    463		panic("%s: Failed to allocate %lu bytes align=0x%lx\n",
    464		      __func__, THREAD_SIZE, THREAD_SIZE);
    465	restart_stack += STACK_INIT_OFFSET;
    466
    467	/*
    468	 * Set up PSW restart to call ipl.c:do_restart(). Copy the relevant
    469	 * restart data to the absolute zero lowcore. This is necessary if
    470	 * PSW restart is done on an offline CPU that has lowcore zero.
    471	 */
    472	lc->restart_stack = (unsigned long) restart_stack;
    473	lc->restart_fn = (unsigned long) do_restart;
    474	lc->restart_data = 0;
    475	lc->restart_source = -1U;
    476
    477	mcck_stack = (unsigned long)memblock_alloc(THREAD_SIZE, THREAD_SIZE);
    478	if (!mcck_stack)
    479		panic("%s: Failed to allocate %lu bytes align=0x%lx\n",
    480		      __func__, THREAD_SIZE, THREAD_SIZE);
    481	lc->mcck_stack = mcck_stack + STACK_INIT_OFFSET;
    482
    483	/* Setup absolute zero lowcore */
    484	put_abs_lowcore(restart_stack, lc->restart_stack);
    485	put_abs_lowcore(restart_fn, lc->restart_fn);
    486	put_abs_lowcore(restart_data, lc->restart_data);
    487	put_abs_lowcore(restart_source, lc->restart_source);
    488	put_abs_lowcore(restart_psw, lc->restart_psw);
    489
    490	lc->spinlock_lockval = arch_spin_lockval(0);
    491	lc->spinlock_index = 0;
    492	arch_spin_lock_setup(0);
    493	lc->return_lpswe = gen_lpswe(__LC_RETURN_PSW);
    494	lc->return_mcck_lpswe = gen_lpswe(__LC_RETURN_MCCK_PSW);
    495	lc->preempt_count = PREEMPT_DISABLED;
    496
    497	set_prefix(__pa(lc));
    498	lowcore_ptr[0] = lc;
    499}
    500
    501static void __init setup_lowcore_dat_on(void)
    502{
    503	struct lowcore *lc = lowcore_ptr[0];
    504	int cr;
    505
    506	__ctl_clear_bit(0, 28);
    507	S390_lowcore.external_new_psw.mask |= PSW_MASK_DAT;
    508	S390_lowcore.svc_new_psw.mask |= PSW_MASK_DAT;
    509	S390_lowcore.program_new_psw.mask |= PSW_MASK_DAT;
    510	S390_lowcore.io_new_psw.mask |= PSW_MASK_DAT;
    511	__ctl_store(S390_lowcore.cregs_save_area, 0, 15);
    512	__ctl_set_bit(0, 28);
    513	put_abs_lowcore(restart_flags, RESTART_FLAG_CTLREGS);
    514	put_abs_lowcore(program_new_psw, lc->program_new_psw);
    515	for (cr = 0; cr < ARRAY_SIZE(lc->cregs_save_area); cr++)
    516		put_abs_lowcore(cregs_save_area[cr], lc->cregs_save_area[cr]);
    517}
    518
    519static struct resource code_resource = {
    520	.name  = "Kernel code",
    521	.flags = IORESOURCE_BUSY | IORESOURCE_SYSTEM_RAM,
    522};
    523
    524static struct resource data_resource = {
    525	.name = "Kernel data",
    526	.flags = IORESOURCE_BUSY | IORESOURCE_SYSTEM_RAM,
    527};
    528
    529static struct resource bss_resource = {
    530	.name = "Kernel bss",
    531	.flags = IORESOURCE_BUSY | IORESOURCE_SYSTEM_RAM,
    532};
    533
    534static struct resource __initdata *standard_resources[] = {
    535	&code_resource,
    536	&data_resource,
    537	&bss_resource,
    538};
    539
    540static void __init setup_resources(void)
    541{
    542	struct resource *res, *std_res, *sub_res;
    543	phys_addr_t start, end;
    544	int j;
    545	u64 i;
    546
    547	code_resource.start = (unsigned long) _text;
    548	code_resource.end = (unsigned long) _etext - 1;
    549	data_resource.start = (unsigned long) _etext;
    550	data_resource.end = (unsigned long) _edata - 1;
    551	bss_resource.start = (unsigned long) __bss_start;
    552	bss_resource.end = (unsigned long) __bss_stop - 1;
    553
    554	for_each_mem_range(i, &start, &end) {
    555		res = memblock_alloc(sizeof(*res), 8);
    556		if (!res)
    557			panic("%s: Failed to allocate %zu bytes align=0x%x\n",
    558			      __func__, sizeof(*res), 8);
    559		res->flags = IORESOURCE_BUSY | IORESOURCE_SYSTEM_RAM;
    560
    561		res->name = "System RAM";
    562		res->start = start;
    563		/*
    564		 * In memblock, end points to the first byte after the
    565		 * range while in resourses, end points to the last byte in
    566		 * the range.
    567		 */
    568		res->end = end - 1;
    569		request_resource(&iomem_resource, res);
    570
    571		for (j = 0; j < ARRAY_SIZE(standard_resources); j++) {
    572			std_res = standard_resources[j];
    573			if (std_res->start < res->start ||
    574			    std_res->start > res->end)
    575				continue;
    576			if (std_res->end > res->end) {
    577				sub_res = memblock_alloc(sizeof(*sub_res), 8);
    578				if (!sub_res)
    579					panic("%s: Failed to allocate %zu bytes align=0x%x\n",
    580					      __func__, sizeof(*sub_res), 8);
    581				*sub_res = *std_res;
    582				sub_res->end = res->end;
    583				std_res->start = res->end + 1;
    584				request_resource(res, sub_res);
    585			} else {
    586				request_resource(res, std_res);
    587			}
    588		}
    589	}
    590#ifdef CONFIG_CRASH_DUMP
    591	/*
    592	 * Re-add removed crash kernel memory as reserved memory. This makes
    593	 * sure it will be mapped with the identity mapping and struct pages
    594	 * will be created, so it can be resized later on.
    595	 * However add it later since the crash kernel resource should not be
    596	 * part of the System RAM resource.
    597	 */
    598	if (crashk_res.end) {
    599		memblock_add_node(crashk_res.start, resource_size(&crashk_res),
    600				  0, MEMBLOCK_NONE);
    601		memblock_reserve(crashk_res.start, resource_size(&crashk_res));
    602		insert_resource(&iomem_resource, &crashk_res);
    603	}
    604#endif
    605}
    606
    607static void __init setup_memory_end(void)
    608{
    609	memblock_remove(ident_map_size, PHYS_ADDR_MAX - ident_map_size);
    610	max_pfn = max_low_pfn = PFN_DOWN(ident_map_size);
    611	pr_notice("The maximum memory size is %luMB\n", ident_map_size >> 20);
    612}
    613
    614#ifdef CONFIG_CRASH_DUMP
    615
    616/*
    617 * When kdump is enabled, we have to ensure that no memory from the area
    618 * [0 - crashkernel memory size] is set offline - it will be exchanged with
    619 * the crashkernel memory region when kdump is triggered. The crashkernel
    620 * memory region can never get offlined (pages are unmovable).
    621 */
    622static int kdump_mem_notifier(struct notifier_block *nb,
    623			      unsigned long action, void *data)
    624{
    625	struct memory_notify *arg = data;
    626
    627	if (action != MEM_GOING_OFFLINE)
    628		return NOTIFY_OK;
    629	if (arg->start_pfn < PFN_DOWN(resource_size(&crashk_res)))
    630		return NOTIFY_BAD;
    631	return NOTIFY_OK;
    632}
    633
    634static struct notifier_block kdump_mem_nb = {
    635	.notifier_call = kdump_mem_notifier,
    636};
    637
    638#endif
    639
    640/*
    641 * Reserve memory for kdump kernel to be loaded with kexec
    642 */
    643static void __init reserve_crashkernel(void)
    644{
    645#ifdef CONFIG_CRASH_DUMP
    646	unsigned long long crash_base, crash_size;
    647	phys_addr_t low, high;
    648	int rc;
    649
    650	rc = parse_crashkernel(boot_command_line, ident_map_size, &crash_size,
    651			       &crash_base);
    652
    653	crash_base = ALIGN(crash_base, KEXEC_CRASH_MEM_ALIGN);
    654	crash_size = ALIGN(crash_size, KEXEC_CRASH_MEM_ALIGN);
    655	if (rc || crash_size == 0)
    656		return;
    657
    658	if (memblock.memory.regions[0].size < crash_size) {
    659		pr_info("crashkernel reservation failed: %s\n",
    660			"first memory chunk must be at least crashkernel size");
    661		return;
    662	}
    663
    664	low = crash_base ?: oldmem_data.start;
    665	high = low + crash_size;
    666	if (low >= oldmem_data.start && high <= oldmem_data.start + oldmem_data.size) {
    667		/* The crashkernel fits into OLDMEM, reuse OLDMEM */
    668		crash_base = low;
    669	} else {
    670		/* Find suitable area in free memory */
    671		low = max_t(unsigned long, crash_size, sclp.hsa_size);
    672		high = crash_base ? crash_base + crash_size : ULONG_MAX;
    673
    674		if (crash_base && crash_base < low) {
    675			pr_info("crashkernel reservation failed: %s\n",
    676				"crash_base too low");
    677			return;
    678		}
    679		low = crash_base ?: low;
    680		crash_base = memblock_phys_alloc_range(crash_size,
    681						       KEXEC_CRASH_MEM_ALIGN,
    682						       low, high);
    683	}
    684
    685	if (!crash_base) {
    686		pr_info("crashkernel reservation failed: %s\n",
    687			"no suitable area found");
    688		return;
    689	}
    690
    691	if (register_memory_notifier(&kdump_mem_nb)) {
    692		memblock_phys_free(crash_base, crash_size);
    693		return;
    694	}
    695
    696	if (!oldmem_data.start && MACHINE_IS_VM)
    697		diag10_range(PFN_DOWN(crash_base), PFN_DOWN(crash_size));
    698	crashk_res.start = crash_base;
    699	crashk_res.end = crash_base + crash_size - 1;
    700	memblock_remove(crash_base, crash_size);
    701	pr_info("Reserving %lluMB of memory at %lluMB "
    702		"for crashkernel (System RAM: %luMB)\n",
    703		crash_size >> 20, crash_base >> 20,
    704		(unsigned long)memblock.memory.total_size >> 20);
    705	os_info_crashkernel_add(crash_base, crash_size);
    706#endif
    707}
    708
    709/*
    710 * Reserve the initrd from being used by memblock
    711 */
    712static void __init reserve_initrd(void)
    713{
    714#ifdef CONFIG_BLK_DEV_INITRD
    715	if (!initrd_data.start || !initrd_data.size)
    716		return;
    717	initrd_start = (unsigned long)__va(initrd_data.start);
    718	initrd_end = initrd_start + initrd_data.size;
    719	memblock_reserve(initrd_data.start, initrd_data.size);
    720#endif
    721}
    722
    723/*
    724 * Reserve the memory area used to pass the certificate lists
    725 */
    726static void __init reserve_certificate_list(void)
    727{
    728	if (ipl_cert_list_addr)
    729		memblock_reserve(ipl_cert_list_addr, ipl_cert_list_size);
    730}
    731
    732static void __init reserve_mem_detect_info(void)
    733{
    734	unsigned long start, size;
    735
    736	get_mem_detect_reserved(&start, &size);
    737	if (size)
    738		memblock_reserve(start, size);
    739}
    740
    741static void __init free_mem_detect_info(void)
    742{
    743	unsigned long start, size;
    744
    745	get_mem_detect_reserved(&start, &size);
    746	if (size)
    747		memblock_phys_free(start, size);
    748}
    749
    750static const char * __init get_mem_info_source(void)
    751{
    752	switch (mem_detect.info_source) {
    753	case MEM_DETECT_SCLP_STOR_INFO:
    754		return "sclp storage info";
    755	case MEM_DETECT_DIAG260:
    756		return "diag260";
    757	case MEM_DETECT_SCLP_READ_INFO:
    758		return "sclp read info";
    759	case MEM_DETECT_BIN_SEARCH:
    760		return "binary search";
    761	}
    762	return "none";
    763}
    764
    765static void __init memblock_add_mem_detect_info(void)
    766{
    767	unsigned long start, end;
    768	int i;
    769
    770	pr_debug("physmem info source: %s (%hhd)\n",
    771		 get_mem_info_source(), mem_detect.info_source);
    772	/* keep memblock lists close to the kernel */
    773	memblock_set_bottom_up(true);
    774	for_each_mem_detect_block(i, &start, &end) {
    775		memblock_add(start, end - start);
    776		memblock_physmem_add(start, end - start);
    777	}
    778	memblock_set_bottom_up(false);
    779	memblock_set_node(0, ULONG_MAX, &memblock.memory, 0);
    780}
    781
    782/*
    783 * Check for initrd being in usable memory
    784 */
    785static void __init check_initrd(void)
    786{
    787#ifdef CONFIG_BLK_DEV_INITRD
    788	if (initrd_data.start && initrd_data.size &&
    789	    !memblock_is_region_memory(initrd_data.start, initrd_data.size)) {
    790		pr_err("The initial RAM disk does not fit into the memory\n");
    791		memblock_phys_free(initrd_data.start, initrd_data.size);
    792		initrd_start = initrd_end = 0;
    793	}
    794#endif
    795}
    796
    797/*
    798 * Reserve memory used for lowcore/command line/kernel image.
    799 */
    800static void __init reserve_kernel(void)
    801{
    802	memblock_reserve(0, STARTUP_NORMAL_OFFSET);
    803	memblock_reserve(OLDMEM_BASE, sizeof(unsigned long));
    804	memblock_reserve(OLDMEM_SIZE, sizeof(unsigned long));
    805	memblock_reserve(__amode31_base, __eamode31 - __samode31);
    806	memblock_reserve(__pa(sclp_early_sccb), EXT_SCCB_READ_SCP);
    807	memblock_reserve(__pa(_stext), _end - _stext);
    808}
    809
    810static void __init setup_memory(void)
    811{
    812	phys_addr_t start, end;
    813	u64 i;
    814
    815	/*
    816	 * Init storage key for present memory
    817	 */
    818	for_each_mem_range(i, &start, &end)
    819		storage_key_init_range(start, end);
    820
    821	psw_set_key(PAGE_DEFAULT_KEY);
    822}
    823
    824static void __init relocate_amode31_section(void)
    825{
    826	unsigned long amode31_size = __eamode31 - __samode31;
    827	long amode31_offset = __amode31_base - __samode31;
    828	long *ptr;
    829
    830	pr_info("Relocating AMODE31 section of size 0x%08lx\n", amode31_size);
    831
    832	/* Move original AMODE31 section to the new one */
    833	memmove((void *)__amode31_base, (void *)__samode31, amode31_size);
    834	/* Zero out the old AMODE31 section to catch invalid accesses within it */
    835	memset((void *)__samode31, 0, amode31_size);
    836
    837	/* Update all AMODE31 region references */
    838	for (ptr = _start_amode31_refs; ptr != _end_amode31_refs; ptr++)
    839		*ptr += amode31_offset;
    840}
    841
    842/* This must be called after AMODE31 relocation */
    843static void __init setup_cr(void)
    844{
    845	union ctlreg2 cr2;
    846	union ctlreg5 cr5;
    847	union ctlreg15 cr15;
    848
    849	__ctl_duct[1] = (unsigned long)__ctl_aste;
    850	__ctl_duct[2] = (unsigned long)__ctl_aste;
    851	__ctl_duct[4] = (unsigned long)__ctl_duald;
    852
    853	/* Update control registers CR2, CR5 and CR15 */
    854	__ctl_store(cr2.val, 2, 2);
    855	__ctl_store(cr5.val, 5, 5);
    856	__ctl_store(cr15.val, 15, 15);
    857	cr2.ducto = (unsigned long)__ctl_duct >> 6;
    858	cr5.pasteo = (unsigned long)__ctl_duct >> 6;
    859	cr15.lsea = (unsigned long)__ctl_linkage_stack >> 3;
    860	__ctl_load(cr2.val, 2, 2);
    861	__ctl_load(cr5.val, 5, 5);
    862	__ctl_load(cr15.val, 15, 15);
    863}
    864
    865/*
    866 * Add system information as device randomness
    867 */
    868static void __init setup_randomness(void)
    869{
    870	struct sysinfo_3_2_2 *vmms;
    871
    872	vmms = memblock_alloc(PAGE_SIZE, PAGE_SIZE);
    873	if (!vmms)
    874		panic("Failed to allocate memory for sysinfo structure\n");
    875	if (stsi(vmms, 3, 2, 2) == 0 && vmms->count)
    876		add_device_randomness(&vmms->vm, sizeof(vmms->vm[0]) * vmms->count);
    877	memblock_free(vmms, PAGE_SIZE);
    878
    879#ifdef CONFIG_ARCH_RANDOM
    880	if (cpacf_query_func(CPACF_PRNO, CPACF_PRNO_TRNG))
    881		static_branch_enable(&s390_arch_random_available);
    882#endif
    883}
    884
    885/*
    886 * Find the correct size for the task_struct. This depends on
    887 * the size of the struct fpu at the end of the thread_struct
    888 * which is embedded in the task_struct.
    889 */
    890static void __init setup_task_size(void)
    891{
    892	int task_size = sizeof(struct task_struct);
    893
    894	if (!MACHINE_HAS_VX) {
    895		task_size -= sizeof(__vector128) * __NUM_VXRS;
    896		task_size += sizeof(freg_t) * __NUM_FPRS;
    897	}
    898	arch_task_struct_size = task_size;
    899}
    900
    901/*
    902 * Issue diagnose 318 to set the control program name and
    903 * version codes.
    904 */
    905static void __init setup_control_program_code(void)
    906{
    907	union diag318_info diag318_info = {
    908		.cpnc = CPNC_LINUX,
    909		.cpvc = 0,
    910	};
    911
    912	if (!sclp.has_diag318)
    913		return;
    914
    915	diag_stat_inc(DIAG_STAT_X318);
    916	asm volatile("diag %0,0,0x318\n" : : "d" (diag318_info.val));
    917}
    918
    919/*
    920 * Print the component list from the IPL report
    921 */
    922static void __init log_component_list(void)
    923{
    924	struct ipl_rb_component_entry *ptr, *end;
    925	char *str;
    926
    927	if (!early_ipl_comp_list_addr)
    928		return;
    929	if (ipl_block.hdr.flags & IPL_PL_FLAG_SIPL)
    930		pr_info("Linux is running with Secure-IPL enabled\n");
    931	else
    932		pr_info("Linux is running with Secure-IPL disabled\n");
    933	ptr = (void *) early_ipl_comp_list_addr;
    934	end = (void *) ptr + early_ipl_comp_list_size;
    935	pr_info("The IPL report contains the following components:\n");
    936	while (ptr < end) {
    937		if (ptr->flags & IPL_RB_COMPONENT_FLAG_SIGNED) {
    938			if (ptr->flags & IPL_RB_COMPONENT_FLAG_VERIFIED)
    939				str = "signed, verified";
    940			else
    941				str = "signed, verification failed";
    942		} else {
    943			str = "not signed";
    944		}
    945		pr_info("%016llx - %016llx (%s)\n",
    946			ptr->addr, ptr->addr + ptr->len, str);
    947		ptr++;
    948	}
    949}
    950
    951/*
    952 * Setup function called from init/main.c just after the banner
    953 * was printed.
    954 */
    955
    956void __init setup_arch(char **cmdline_p)
    957{
    958        /*
    959         * print what head.S has found out about the machine
    960         */
    961	if (MACHINE_IS_VM)
    962		pr_info("Linux is running as a z/VM "
    963			"guest operating system in 64-bit mode\n");
    964	else if (MACHINE_IS_KVM)
    965		pr_info("Linux is running under KVM in 64-bit mode\n");
    966	else if (MACHINE_IS_LPAR)
    967		pr_info("Linux is running natively in 64-bit mode\n");
    968	else
    969		pr_info("Linux is running as a guest in 64-bit mode\n");
    970
    971	log_component_list();
    972
    973	/* Have one command line that is parsed and saved in /proc/cmdline */
    974	/* boot_command_line has been already set up in early.c */
    975	*cmdline_p = boot_command_line;
    976
    977        ROOT_DEV = Root_RAM0;
    978
    979	setup_initial_init_mm(_text, _etext, _edata, _end);
    980
    981	if (IS_ENABLED(CONFIG_EXPOLINE_AUTO))
    982		nospec_auto_detect();
    983
    984	jump_label_init();
    985	parse_early_param();
    986#ifdef CONFIG_CRASH_DUMP
    987	/* Deactivate elfcorehdr= kernel parameter */
    988	elfcorehdr_addr = ELFCORE_ADDR_MAX;
    989#endif
    990
    991	os_info_init();
    992	setup_ipl();
    993	setup_task_size();
    994	setup_control_program_code();
    995
    996	/* Do some memory reservations *before* memory is added to memblock */
    997	reserve_kernel();
    998	reserve_initrd();
    999	reserve_certificate_list();
   1000	reserve_mem_detect_info();
   1001	memblock_set_current_limit(ident_map_size);
   1002	memblock_allow_resize();
   1003
   1004	/* Get information about *all* installed memory */
   1005	memblock_add_mem_detect_info();
   1006
   1007	free_mem_detect_info();
   1008	setup_memory_end();
   1009	memblock_dump_all();
   1010	setup_memory();
   1011
   1012	relocate_amode31_section();
   1013	setup_cr();
   1014	setup_uv();
   1015	dma_contiguous_reserve(ident_map_size);
   1016	vmcp_cma_reserve();
   1017	if (MACHINE_HAS_EDAT2)
   1018		hugetlb_cma_reserve(PUD_SHIFT - PAGE_SHIFT);
   1019
   1020	check_initrd();
   1021	reserve_crashkernel();
   1022#ifdef CONFIG_CRASH_DUMP
   1023	/*
   1024	 * Be aware that smp_save_dump_cpus() triggers a system reset.
   1025	 * Therefore CPU and device initialization should be done afterwards.
   1026	 */
   1027	smp_save_dump_cpus();
   1028#endif
   1029
   1030	setup_resources();
   1031	setup_lowcore_dat_off();
   1032	smp_fill_possible_mask();
   1033	cpu_detect_mhz_feature();
   1034        cpu_init();
   1035	numa_setup();
   1036	smp_detect_cpus();
   1037	topology_init_early();
   1038
   1039	if (test_facility(193))
   1040		static_branch_enable(&cpu_has_bear);
   1041
   1042	/*
   1043	 * Create kernel page tables and switch to virtual addressing.
   1044	 */
   1045        paging_init();
   1046
   1047	/*
   1048	 * After paging_init created the kernel page table, the new PSWs
   1049	 * in lowcore can now run with DAT enabled.
   1050	 */
   1051	setup_lowcore_dat_on();
   1052
   1053        /* Setup default console */
   1054	conmode_default();
   1055	set_preferred_console();
   1056
   1057	apply_alternative_instructions();
   1058	if (IS_ENABLED(CONFIG_EXPOLINE))
   1059		nospec_init_branches();
   1060
   1061	/* Setup zfcp/nvme dump support */
   1062	setup_zfcpdump();
   1063
   1064	/* Add system specific data to the random pool */
   1065	setup_randomness();
   1066}