11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * linux/arch/m32r/kernel/setup.c 31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Setup routines for Renesas M32R 51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Copyright (c) 2001, 2002 Hiroyuki Kondo, Hirokazu Takata, 71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Hitoshi Yamamoto 81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/init.h> 117c1c4e541888947947bc46a18a9a5543a259ed62Hirokazu Takata#include <linux/kernel.h> 121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/stddef.h> 131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/fs.h> 141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/sched.h> 151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/ioport.h> 161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/mm.h> 171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/bootmem.h> 181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/console.h> 191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/initrd.h> 201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/major.h> 211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/root_dev.h> 221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/seq_file.h> 231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/timex.h> 24894673ee6122a3ce1958e1fe096901ba5356a96bJon Smirl#include <linux/screen_info.h> 251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/cpu.h> 261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/nodemask.h> 2722a9835c350782a5c3257343713932af3ac92ee0Dave Hansen#include <linux/pfn.h> 281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <asm/processor.h> 301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <asm/pgtable.h> 311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <asm/io.h> 321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <asm/mmu_context.h> 331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <asm/m32r.h> 341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <asm/setup.h> 351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <asm/sections.h> 361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef CONFIG_MMU 381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern void init_mmu(void); 391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif 401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern char _end[]; 421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Machine setup.. 451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct cpuinfo_m32r boot_cpu_data; 471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef CONFIG_BLK_DEV_RAM 491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern int rd_doload; /* 1 = load ramdisk, 0 = don't load */ 501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern int rd_prompt; /* 1 = prompt for ramdisk, 0 = don't prompt */ 511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern int rd_image_start; /* starting block # of image */ 521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif 531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#if defined(CONFIG_VGA_CONSOLE) 551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct screen_info screen_info = { 561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .orig_video_lines = 25, 571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .orig_video_cols = 80, 581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .orig_video_mode = 0, 591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .orig_video_ega_bx = 0, 601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .orig_video_isVGA = 1, 611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .orig_video_points = 8 621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif 641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern int root_mountflags; 661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 673561794d80843588ed8b47fffb20e2dcd9c40ff3Alon Bar-Levstatic char __initdata command_line[COMMAND_LINE_SIZE]; 681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic struct resource data_resource = { 701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .name = "Kernel data", 711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .start = 0, 721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .end = 0, 731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .flags = IORESOURCE_BUSY | IORESOURCE_MEM 741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic struct resource code_resource = { 771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .name = "Kernel code", 781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .start = 0, 791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .end = 0, 801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .flags = IORESOURCE_BUSY | IORESOURCE_MEM 811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsunsigned long memory_start; 841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsunsigned long memory_end; 851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid __init setup_arch(char **); 871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsint get_cpuinfo(char *); 881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic __inline__ void parse_mem_cmdline(char ** cmdline_p) 901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{ 911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds char c = ' '; 921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds char *to = command_line; 931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds char *from = COMMAND_LINE; 941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int len = 0; 951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int usermem = 0; 961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* Save unparsed command line copy for /proc/cmdline */ 983561794d80843588ed8b47fffb20e2dcd9c40ff3Alon Bar-Lev memcpy(boot_command_line, COMMAND_LINE, COMMAND_LINE_SIZE); 993561794d80843588ed8b47fffb20e2dcd9c40ff3Alon Bar-Lev boot_command_line[COMMAND_LINE_SIZE-1] = '\0'; 1001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds memory_start = (unsigned long)CONFIG_MEMORY_START+PAGE_OFFSET; 1021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds memory_end = memory_start+(unsigned long)CONFIG_MEMORY_SIZE; 1031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds for ( ; ; ) { 1051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds if (c == ' ' && !memcmp(from, "mem=", 4)) { 1061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds if (to != command_line) 1071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds to--; 1081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds { 1101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned long mem_size; 1111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds usermem = 1; 1131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds mem_size = memparse(from+4, &from); 1141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds memory_end = memory_start + mem_size; 1151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds } 1161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds } 1171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds c = *(from++); 1181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds if (!c) 1191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds break; 1201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds if (COMMAND_LINE_SIZE <= ++len) 1221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds break; 1231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *(to++) = c; 1251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds } 1261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *to = '\0'; 1271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *cmdline_p = command_line; 1281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds if (usermem) 1291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds printk(KERN_INFO "user-defined physical RAM map:\n"); 1301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} 1311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef CONFIG_DISCONTIGMEM 1331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic unsigned long __init setup_memory(void) 1341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{ 1351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned long start_pfn, max_low_pfn, bootmap_size; 1361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds start_pfn = PFN_UP( __pa(_end) ); 1381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds max_low_pfn = PFN_DOWN( __pa(memory_end) ); 1391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* 1411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Initialize the boot-time allocator (with low memory only): 1421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 1431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds bootmap_size = init_bootmem_node(NODE_DATA(0), start_pfn, 1441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds CONFIG_MEMORY_START>>PAGE_SHIFT, max_low_pfn); 1451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* 1471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Register fully available low RAM pages with the bootmem allocator. 1481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 1491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds { 1501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned long curr_pfn; 1511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned long last_pfn; 1521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned long pages; 1531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* 1551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * We are rounding up the start address of usable memory: 1561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 1571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds curr_pfn = PFN_UP(__pa(memory_start)); 1581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* 1601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * ... and at the end of the usable range downwards: 1611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 1621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds last_pfn = PFN_DOWN(__pa(memory_end)); 1631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds if (last_pfn > max_low_pfn) 1651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds last_pfn = max_low_pfn; 1661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds pages = last_pfn - curr_pfn; 1681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds free_bootmem(PFN_PHYS(curr_pfn), PFN_PHYS(pages)); 1691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds } 1701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* 1721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Reserve the kernel text and 1731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Reserve the bootmem bitmap. We do this in two steps (first step 1741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * was init_bootmem()), because this catches the (definitely buggy) 1751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * case of us accidentally initializing the bootmem allocator with 1761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * an invalid RAM area. 1771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 1781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds reserve_bootmem(CONFIG_MEMORY_START + PAGE_SIZE, 1791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds (PFN_PHYS(start_pfn) + bootmap_size + PAGE_SIZE - 1) 18072a7fe3967dbf86cb34e24fbf1d957fe24d2f246Bernhard Walle - CONFIG_MEMORY_START, 18172a7fe3967dbf86cb34e24fbf1d957fe24d2f246Bernhard Walle BOOTMEM_DEFAULT); 1821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* 1841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * reserve physical page 0 - it's a special BIOS page on many boxes, 1851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * enabling clean reboots, SMP operation, laptop functions. 1861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 18772a7fe3967dbf86cb34e24fbf1d957fe24d2f246Bernhard Walle reserve_bootmem(CONFIG_MEMORY_START, PAGE_SIZE, BOOTMEM_DEFAULT); 1881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* 1901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * reserve memory hole 1911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 1921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef CONFIG_MEMHOLE 19372a7fe3967dbf86cb34e24fbf1d957fe24d2f246Bernhard Walle reserve_bootmem(CONFIG_MEMHOLE_START, CONFIG_MEMHOLE_SIZE, 19472a7fe3967dbf86cb34e24fbf1d957fe24d2f246Bernhard Walle BOOTMEM_DEFAULT); 1951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif 1961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef CONFIG_BLK_DEV_INITRD 1981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds if (LOADER_TYPE && INITRD_START) { 1991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds if (INITRD_START + INITRD_SIZE <= (max_low_pfn << PAGE_SHIFT)) { 20072a7fe3967dbf86cb34e24fbf1d957fe24d2f246Bernhard Walle reserve_bootmem(INITRD_START, INITRD_SIZE, 20172a7fe3967dbf86cb34e24fbf1d957fe24d2f246Bernhard Walle BOOTMEM_DEFAULT); 20219e5d9c0d2194b4b47189cbec2921cbf72b0bd1cHenry Nestler initrd_start = INITRD_START + PAGE_OFFSET; 2031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds initrd_end = initrd_start + INITRD_SIZE; 2041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds printk("initrd:start[%08lx],size[%08lx]\n", 2051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds initrd_start, INITRD_SIZE); 2061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds } else { 2071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds printk("initrd extends beyond end of memory " 2081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds "(0x%08lx > 0x%08lx)\ndisabling initrd\n", 2091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds INITRD_START + INITRD_SIZE, 2101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds max_low_pfn << PAGE_SHIFT); 2111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds initrd_start = 0; 2131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds } 2141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds } 2151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif 2161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds return max_low_pfn; 2181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} 2191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else /* CONFIG_DISCONTIGMEM */ 2201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern unsigned long setup_memory(void); 2211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif /* CONFIG_DISCONTIGMEM */ 2221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid __init setup_arch(char **cmdline_p) 2241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{ 2251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds ROOT_DEV = old_decode_dev(ORIG_ROOT_DEV); 2261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds boot_cpu_data.cpu_clock = M32R_CPUCLK; 2281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds boot_cpu_data.bus_clock = M32R_BUSCLK; 2291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds boot_cpu_data.timer_divide = M32R_TIMER_DIVIDE; 2301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef CONFIG_BLK_DEV_RAM 2321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds rd_image_start = RAMDISK_FLAGS & RAMDISK_IMAGE_START_MASK; 2331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds rd_prompt = ((RAMDISK_FLAGS & RAMDISK_PROMPT_FLAG) != 0); 2341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds rd_doload = ((RAMDISK_FLAGS & RAMDISK_LOAD_FLAG) != 0); 2351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif 2361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds if (!MOUNT_ROOT_RDONLY) 2381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds root_mountflags &= ~MS_RDONLY; 2391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef CONFIG_VT 2411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#if defined(CONFIG_VGA_CONSOLE) 2421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds conswitchp = &vga_con; 2431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#elif defined(CONFIG_DUMMY_CONSOLE) 2441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds conswitchp = &dummy_con; 2451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif 2461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif 2471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef CONFIG_DISCONTIGMEM 2491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds nodes_clear(node_online_map); 2501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds node_set_online(0); 2511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds node_set_online(1); 2521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif /* CONFIG_DISCONTIGMEM */ 2531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds init_mm.start_code = (unsigned long) _text; 2551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds init_mm.end_code = (unsigned long) _etext; 2561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds init_mm.end_data = (unsigned long) _edata; 2571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds init_mm.brk = (unsigned long) _end; 2581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds code_resource.start = virt_to_phys(_text); 2601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds code_resource.end = virt_to_phys(_etext)-1; 2611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds data_resource.start = virt_to_phys(_etext); 2621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds data_resource.end = virt_to_phys(_edata)-1; 2631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds parse_mem_cmdline(cmdline_p); 2651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds setup_memory(); 2671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds paging_init(); 2691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} 2701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2717c1c4e541888947947bc46a18a9a5543a259ed62Hirokazu Takatastatic struct cpu cpu_devices[NR_CPUS]; 2721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic int __init topology_init(void) 2741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{ 2757c1c4e541888947947bc46a18a9a5543a259ed62Hirokazu Takata int i; 2761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2777c1c4e541888947947bc46a18a9a5543a259ed62Hirokazu Takata for_each_present_cpu(i) 27876b67ed9dce69a6a329cdd66f94af1787f417b62KAMEZAWA Hiroyuki register_cpu(&cpu_devices[i], i); 2791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds return 0; 2811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} 2821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldssubsys_initcall(topology_init); 2841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef CONFIG_PROC_FS 2861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 2871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Get CPU information for use by the procfs. 2881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 2891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic int show_cpuinfo(struct seq_file *m, void *v) 2901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{ 2911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct cpuinfo_m32r *c = v; 2921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned long cpu = c - cpu_data; 2931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef CONFIG_SMP 2951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds if (!cpu_online(cpu)) 2961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds return 0; 2971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif /* CONFIG_SMP */ 2981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds seq_printf(m, "processor\t: %ld\n", cpu); 3001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 301c978b0179b31600394d5ebdb0940b492ec05500fHirokazu Takata#if defined(CONFIG_CHIP_VDEC2) 3021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds seq_printf(m, "cpu family\t: VDEC2\n" 3031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds "cache size\t: Unknown\n"); 304c978b0179b31600394d5ebdb0940b492ec05500fHirokazu Takata#elif defined(CONFIG_CHIP_M32700) 3051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds seq_printf(m,"cpu family\t: M32700\n" 3061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds "cache size\t: I-8KB/D-8KB\n"); 307c978b0179b31600394d5ebdb0940b492ec05500fHirokazu Takata#elif defined(CONFIG_CHIP_M32102) 3081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds seq_printf(m,"cpu family\t: M32102\n" 3091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds "cache size\t: I-8KB\n"); 310c978b0179b31600394d5ebdb0940b492ec05500fHirokazu Takata#elif defined(CONFIG_CHIP_OPSP) 3111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds seq_printf(m,"cpu family\t: OPSP\n" 3121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds "cache size\t: I-8KB/D-8KB\n"); 313c978b0179b31600394d5ebdb0940b492ec05500fHirokazu Takata#elif defined(CONFIG_CHIP_MP) 3141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds seq_printf(m, "cpu family\t: M32R-MP\n" 3151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds "cache size\t: I-xxKB/D-xxKB\n"); 3169287d95ea194abf32fab24c6909f8ea55ab0292fHirokazu Takata#elif defined(CONFIG_CHIP_M32104) 3179287d95ea194abf32fab24c6909f8ea55ab0292fHirokazu Takata seq_printf(m,"cpu family\t: M32104\n" 3189287d95ea194abf32fab24c6909f8ea55ab0292fHirokazu Takata "cache size\t: I-8KB/D-8KB\n"); 3191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else 3201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds seq_printf(m, "cpu family\t: Unknown\n"); 3211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif 3221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds seq_printf(m, "bogomips\t: %lu.%02lu\n", 3231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds c->loops_per_jiffy/(500000/HZ), 3241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds (c->loops_per_jiffy/(5000/HZ)) % 100); 325c978b0179b31600394d5ebdb0940b492ec05500fHirokazu Takata#if defined(CONFIG_PLAT_MAPPI) 3261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds seq_printf(m, "Machine\t\t: Mappi Evaluation board\n"); 327c978b0179b31600394d5ebdb0940b492ec05500fHirokazu Takata#elif defined(CONFIG_PLAT_MAPPI2) 3281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds seq_printf(m, "Machine\t\t: Mappi-II Evaluation board\n"); 329c978b0179b31600394d5ebdb0940b492ec05500fHirokazu Takata#elif defined(CONFIG_PLAT_MAPPI3) 3302368086344c3d67b0f4aecac39d620fb9b8795c3Hirokazu Takata seq_printf(m, "Machine\t\t: Mappi-III Evaluation board\n"); 331c978b0179b31600394d5ebdb0940b492ec05500fHirokazu Takata#elif defined(CONFIG_PLAT_M32700UT) 3321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds seq_printf(m, "Machine\t\t: M32700UT Evaluation board\n"); 333c978b0179b31600394d5ebdb0940b492ec05500fHirokazu Takata#elif defined(CONFIG_PLAT_OPSPUT) 3341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds seq_printf(m, "Machine\t\t: OPSPUT Evaluation board\n"); 335c978b0179b31600394d5ebdb0940b492ec05500fHirokazu Takata#elif defined(CONFIG_PLAT_USRV) 3361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds seq_printf(m, "Machine\t\t: uServer\n"); 337c978b0179b31600394d5ebdb0940b492ec05500fHirokazu Takata#elif defined(CONFIG_PLAT_OAKS32R) 3381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds seq_printf(m, "Machine\t\t: OAKS32R\n"); 3399287d95ea194abf32fab24c6909f8ea55ab0292fHirokazu Takata#elif defined(CONFIG_PLAT_M32104UT) 3409287d95ea194abf32fab24c6909f8ea55ab0292fHirokazu Takata seq_printf(m, "Machine\t\t: M3T-M32104UT uT Engine board\n"); 3411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else 3421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds seq_printf(m, "Machine\t\t: Unknown\n"); 3431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif 3441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 3451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PRINT_CLOCK(name, value) \ 3461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds seq_printf(m, name " clock\t: %d.%02dMHz\n", \ 3471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds ((value) / 1000000), ((value) % 1000000)/10000) 3481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 3491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds PRINT_CLOCK("CPU", (int)c->cpu_clock); 3501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds PRINT_CLOCK("Bus", (int)c->bus_clock); 3511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 3521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds seq_printf(m, "\n"); 3531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 3541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds return 0; 3551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} 3561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 3571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic void *c_start(struct seq_file *m, loff_t *pos) 3581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{ 3591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds return *pos < NR_CPUS ? cpu_data + *pos : NULL; 3601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} 3611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 3621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic void *c_next(struct seq_file *m, void *v, loff_t *pos) 3631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{ 3641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds ++*pos; 3651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds return c_start(m, pos); 3661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} 3671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 3681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic void c_stop(struct seq_file *m, void *v) 3691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{ 3701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} 3711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 37203a44825be987d720df854f63b2f7bd30e46bddeJan Engelhardtconst struct seq_operations cpuinfo_op = { 3737857a7f59d5d0b4e8c15606a79c0bcdbdef18ab6Al Viro .start = c_start, 3747857a7f59d5d0b4e8c15606a79c0bcdbdef18ab6Al Viro .next = c_next, 3757857a7f59d5d0b4e8c15606a79c0bcdbdef18ab6Al Viro .stop = c_stop, 3767857a7f59d5d0b4e8c15606a79c0bcdbdef18ab6Al Viro .show = show_cpuinfo, 3771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 3781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif /* CONFIG_PROC_FS */ 3791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 3801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsunsigned long cpu_initialized __initdata = 0; 3811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 3821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 3831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * cpu_init() initializes state that is per-CPU. Some data is already 3841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * initialized (naturally) in the bootstrap process. 3851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * We reload them nevertheless, this function acts as a 3861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 'CPU state barrier', nothing should get across. 3871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 3881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#if defined(CONFIG_CHIP_VDEC2) || defined(CONFIG_CHIP_XNUX2) \ 3891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds || defined(CONFIG_CHIP_M32700) || defined(CONFIG_CHIP_M32102) \ 3909287d95ea194abf32fab24c6909f8ea55ab0292fHirokazu Takata || defined(CONFIG_CHIP_OPSP) || defined(CONFIG_CHIP_M32104) 3911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid __init cpu_init (void) 3921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{ 3931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int cpu_id = smp_processor_id(); 3941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 3951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds if (test_and_set_bit(cpu_id, &cpu_initialized)) { 3961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds printk(KERN_WARNING "CPU#%d already initialized!\n", cpu_id); 3971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds for ( ; ; ) 3981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds local_irq_enable(); 3991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds } 4001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds printk(KERN_INFO "Initializing CPU#%d\n", cpu_id); 4011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 4021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* Set up and load the per-CPU TSS and LDT */ 4031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds atomic_inc(&init_mm.mm_count); 4041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds current->active_mm = &init_mm; 4051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds if (current->mm) 4061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds BUG(); 4071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 4081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* Force FPU initialization */ 4091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds current_thread_info()->status = 0; 4101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds clear_used_math(); 4111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 4121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef CONFIG_MMU 4131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* Set up MMU */ 4141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds init_mmu(); 4151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif 4161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 4171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* Set up ICUIMASK */ 4181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds outl(0x00070000, M32R_ICU_IMASK_PORTL); /* imask=111 */ 4191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} 4201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif /* defined(CONFIG_CHIP_VDEC2) ... */ 421