1 /* !! 1 // SPDX-License-Identifier: GPL-2.0 2 * Copyright (C) 2007-2009 Michal Simek <monst !! 2 #ifdef CONFIG_MMU 3 * Copyright (C) 2007-2009 PetaLogix !! 3 #include "setup_mm.c" 4 * Copyright (C) 2006 Atmark Techno, Inc. << 5 * << 6 * This file is subject to the terms and condi << 7 * License. See the file "COPYING" in the main << 8 * for more details. << 9 */ << 10 << 11 #include <linux/init.h> << 12 #include <linux/of_clk.h> << 13 #include <linux/clocksource.h> << 14 #include <linux/string.h> << 15 #include <linux/seq_file.h> << 16 #include <linux/cpu.h> << 17 #include <linux/initrd.h> << 18 #include <linux/console.h> << 19 #include <linux/debugfs.h> << 20 #include <linux/of_fdt.h> << 21 #include <linux/pgtable.h> << 22 << 23 #include <asm/setup.h> << 24 #include <asm/sections.h> << 25 #include <asm/page.h> << 26 #include <linux/io.h> << 27 #include <linux/bug.h> << 28 #include <linux/param.h> << 29 #include <linux/pci.h> << 30 #include <linux/cache.h> << 31 #include <linux/of.h> << 32 #include <linux/dma-mapping.h> << 33 #include <asm/cacheflush.h> << 34 #include <asm/entry.h> << 35 #include <asm/cpuinfo.h> << 36 << 37 << 38 DEFINE_PER_CPU(unsigned int, KSP); /* Sav << 39 DEFINE_PER_CPU(unsigned int, KM); /* Ker << 40 DEFINE_PER_CPU(unsigned int, ENTRY_SP); /* Sav << 41 DEFINE_PER_CPU(unsigned int, R11_SAVE); /* Tem << 42 DEFINE_PER_CPU(unsigned int, CURRENT_SAVE); << 43 << 44 /* << 45 * Placed cmd_line to .data section because ca << 46 * ASM code. Default position is BSS section w << 47 * in machine_early_init(). << 48 */ << 49 char cmd_line[COMMAND_LINE_SIZE] __section(".d << 50 << 51 void __init setup_arch(char **cmdline_p) << 52 { << 53 *cmdline_p = boot_command_line; << 54 << 55 setup_memory(); << 56 << 57 console_verbose(); << 58 << 59 unflatten_device_tree(); << 60 << 61 setup_cpuinfo(); << 62 << 63 microblaze_cache_init(); << 64 << 65 xilinx_pci_init(); << 66 } << 67 << 68 #ifdef CONFIG_MTD_UCLINUX << 69 /* Handle both romfs and cramfs types, without << 70 code (ie no point checking for CRAMFS if it's << 71 inline unsigned get_romfs_len(unsigned *addr) << 72 { << 73 #ifdef CONFIG_ROMFS_FS << 74 if (memcmp(&addr[0], "-rom1fs-", 8) == << 75 return be32_to_cpu(addr[2]); << 76 #endif << 77 << 78 #ifdef CONFIG_CRAMFS << 79 if (addr[0] == le32_to_cpu(0x28cd3d45) << 80 return le32_to_cpu(addr[1]); << 81 #endif << 82 return 0; << 83 } << 84 #endif /* CONFIG_MTD_UCLINUX_EBSS */ << 85 << 86 unsigned long kernel_tlb; << 87 << 88 void __init machine_early_init(const char *cmd << 89 unsigned int fdt, unsigned int << 90 unsigned int tlb1) << 91 { << 92 unsigned long *src, *dst; << 93 unsigned int offset = 0; << 94 << 95 /* If CONFIG_MTD_UCLINUX is defined, a << 96 * end of kernel. There are two positi << 97 * The first is __init_end and the sec << 98 */ << 99 #ifdef CONFIG_MTD_UCLINUX << 100 int romfs_size; << 101 unsigned int romfs_base; << 102 char *old_klimit = klimit; << 103 << 104 romfs_base = (ram ? ram : (unsigned in << 105 romfs_size = PAGE_ALIGN(get_romfs_len( << 106 if (!romfs_size) { << 107 romfs_base = (unsigned int)&__ << 108 romfs_size = PAGE_ALIGN(get_ro << 109 } << 110 << 111 /* Move ROMFS out of BSS before cleari << 112 if (romfs_size > 0) { << 113 memmove(&__bss_stop, (int *)ro << 114 klimit += romfs_size; << 115 } << 116 #endif << 117 << 118 /* clearing bss section */ << 119 memset(__bss_start, 0, __bss_stop-__bs << 120 memset(_ssbss, 0, _esbss-_ssbss); << 121 << 122 /* initialize device tree for usage in early_p << 123 early_init_devtree(_fdt_start); << 124 << 125 /* setup kernel_tlb after BSS cleaning << 126 * Maybe worth to move to asm code */ << 127 kernel_tlb = tlb0 + tlb1; << 128 /* printk("TLB1 0x%08x, TLB0 0x%08x, t << 129 << 130 << 131 pr_info("Ramdisk addr 0x%08x, ", ram); << 132 if (fdt) << 133 pr_info("FDT at 0x%08x\n", fdt << 134 else << 135 pr_info("Compiled-in FDT at %p << 136 << 137 #ifdef CONFIG_MTD_UCLINUX << 138 pr_info("Found romfs @ 0x%08x (0x%08x) << 139 romfs_base, romfs_size << 140 pr_info("#### klimit %p ####\n", old_k << 141 BUG_ON(romfs_size < 0); /* What else c << 142 << 143 pr_info("Moved 0x%08x bytes from 0x%08 << 144 romfs_size, romfs_base << 145 << 146 pr_info("New klimit: 0x%08x\n", (unsig << 147 #endif << 148 << 149 #if CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR << 150 if (msr) { << 151 pr_info("!!!Your kernel has se << 152 pr_cont("CPU don't have it %x\ << 153 } << 154 #else 4 #else 155 if (!msr) { !! 5 #include "setup_no.c" 156 pr_info("!!!Your kernel not se << 157 pr_cont("CPU have it %x\n", ms << 158 } << 159 #endif << 160 << 161 /* Do not copy reset vectors. offset = << 162 * two instructions. dst is pointer to << 163 * in block ram. If you want to copy r << 164 #if !CONFIG_MANUAL_RESET_VECTOR << 165 offset = 0x2; << 166 #endif 6 #endif 167 dst = (unsigned long *) (offset * size << 168 for (src = __ivt_start + offset; src < << 169 *dst = *src; << 170 << 171 /* Initialize global data */ << 172 per_cpu(KM, 0) = 0x1; /* We start in << 173 per_cpu(CURRENT_SAVE, 0) = (unsigned l << 174 } << 175 << 176 void __init time_init(void) << 177 { << 178 of_clk_init(NULL); << 179 setup_cpuinfo_clk(); << 180 timer_probe(); << 181 } << 182 << 183 #ifdef CONFIG_DEBUG_FS << 184 struct dentry *of_debugfs_root; << 185 << 186 static int microblaze_debugfs_init(void) << 187 { << 188 of_debugfs_root = debugfs_create_dir(" << 189 return 0; << 190 } << 191 arch_initcall(microblaze_debugfs_init); << 192 7 193 static int __init debugfs_tlb(void) !! 8 #if IS_ENABLED(CONFIG_INPUT_M68K_BEEP) 194 { !! 9 void (*mach_beep)(unsigned int, unsigned int); 195 debugfs_create_u32("tlb_skip", S_IRUGO !! 10 EXPORT_SYMBOL(mach_beep); 196 return 0; << 197 } << 198 device_initcall(debugfs_tlb); << 199 #endif 11 #endif 200 12
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.