linux 2.6.16.38 w/ vs2.0.3-rc1
[linux-2.6.git] / arch / mips / kernel / setup.c
index 8c2b596..d9293c5 100644 (file)
@@ -10,6 +10,7 @@
  * Copyright (C) 1999 Silicon Graphics, Inc.
  * Copyright (C) 2000 2001, 2002  Maciej W. Rozycki
  */
+#include <linux/config.h>
 #include <linux/errno.h>
 #include <linux/init.h>
 #include <linux/ioport.h>
@@ -24,7 +25,7 @@
 #include <linux/user.h>
 #include <linux/utsname.h>
 #include <linux/a.out.h>
-#include <linux/screen_info.h>
+#include <linux/tty.h>
 #include <linux/bootmem.h>
 #include <linux/initrd.h>
 #include <linux/major.h>
@@ -33,7 +34,6 @@
 #include <linux/highmem.h>
 #include <linux/console.h>
 #include <linux/mmzone.h>
-#include <linux/pfn.h>
 
 #include <asm/addrspace.h>
 #include <asm/bootinfo.h>
@@ -245,7 +245,7 @@ static inline int parse_rd_cmdline(unsigned long* rd_start, unsigned long* rd_en
 #ifdef CONFIG_64BIT
        /* HACK: Guess if the sign extension was forgotten */
        if (start > 0x0000000080000000 && start < 0x00000000ffffffff)
-               start |= 0xffffffff00000000UL;
+               start |= 0xffffffff00000000;
 #endif
 
        end = start + size;
@@ -257,6 +257,10 @@ static inline int parse_rd_cmdline(unsigned long* rd_start, unsigned long* rd_en
        return 0;
 }
 
+#define PFN_UP(x)      (((x) + PAGE_SIZE - 1) >> PAGE_SHIFT)
+#define PFN_DOWN(x)    ((x) >> PAGE_SHIFT)
+#define PFN_PHYS(x)    ((x) << PAGE_SHIFT)
+
 #define MAXMEM         HIGHMEM_START
 #define MAXMEM_PFN     PFN_DOWN(MAXMEM)
 
@@ -354,6 +358,8 @@ static inline void bootmem_init(void)
        }
 #endif
 
+       memory_present(0, first_usable_pfn, max_low_pfn);
+
        /* Initialize the boot-time allocator with low memory only.  */
        bootmap_size = init_bootmem(first_usable_pfn, max_low_pfn);
 
@@ -407,7 +413,6 @@ static inline void bootmem_init(void)
 
                /* Register lowmem ranges */
                free_bootmem(PFN_PHYS(curr_pfn), PFN_PHYS(size));
-               memory_present(0, curr_pfn, curr_pfn + size - 1);
        }
 
        /* Reserve the bootmap memory.  */
@@ -417,20 +422,17 @@ static inline void bootmem_init(void)
 #ifdef CONFIG_BLK_DEV_INITRD
        initrd_below_start_ok = 1;
        if (initrd_start) {
-               unsigned long initrd_size = ((unsigned char *)initrd_end) -
-                       ((unsigned char *)initrd_start);
-               const int width = sizeof(long) * 2;
-
+               unsigned long initrd_size = ((unsigned char *)initrd_end) - ((unsigned char *)initrd_start);
                printk("Initial ramdisk at: 0x%p (%lu bytes)\n",
                       (void *)initrd_start, initrd_size);
 
                if (CPHYSADDR(initrd_end) > PFN_PHYS(max_low_pfn)) {
                        printk("initrd extends beyond end of memory "
                               "(0x%0*Lx > 0x%0*Lx)\ndisabling initrd\n",
-                              width,
-                              (unsigned long long) CPHYSADDR(initrd_end),
-                              width,
-                              (unsigned long long) PFN_PHYS(max_low_pfn));
+                              sizeof(long) * 2,
+                              (unsigned long long)CPHYSADDR(initrd_end),
+                              sizeof(long) * 2,
+                              (unsigned long long)PFN_PHYS(max_low_pfn));
                        initrd_start = initrd_end = 0;
                        initrd_reserve_bootmem = 0;
                }
@@ -441,59 +443,25 @@ static inline void bootmem_init(void)
 #endif /* CONFIG_BLK_DEV_INITRD  */
 }
 
-/*
- * arch_mem_init - initialize memory managment subsystem
- *
- *  o plat_mem_setup() detects the memory configuration and will record detected
- *    memory areas using add_memory_region.
- *  o parse_cmdline_early() parses the command line for mem= options which,
- *    iff detected, will override the results of the automatic detection.
- *
- * At this stage the memory configuration of the system is known to the
- * kernel but generic memory managment system is still entirely uninitialized.
- *
- *  o bootmem_init()
- *  o sparse_init()
- *  o paging_init()
- *
- * At this stage the bootmem allocator is ready to use.
- *
- * NOTE: historically plat_mem_setup did the entire platform initialization.
- *       This was rather impractical because it meant plat_mem_setup had to
- * get away without any kind of memory allocator.  To keep old code from
- * breaking plat_setup was just renamed to plat_setup and a second platform
- * initialization hook for anything else was introduced.
- */
-
-extern void plat_mem_setup(void);
-
-static void __init arch_mem_init(char **cmdline_p)
-{
-       /* call board setup routine */
-       plat_mem_setup();
-
-       strlcpy(command_line, arcs_cmdline, sizeof(command_line));
-       strlcpy(saved_command_line, command_line, COMMAND_LINE_SIZE);
-
-       *cmdline_p = command_line;
-
-       parse_cmdline_early();
-       bootmem_init();
-       sparse_init();
-       paging_init();
-}
-
 static inline void resource_init(void)
 {
        int i;
 
-       if (UNCAC_BASE != IO_BASE)
-               return;
-
+#if defined(CONFIG_64BIT) && !defined(CONFIG_BUILD_ELF64)
+       /*
+        * The 64bit code in 32bit object format trick can't represent
+        * 64bit wide relocations for linker script symbols.
+        */
+       code_resource.start = CPHYSADDR(&_text);
+       code_resource.end = CPHYSADDR(&_etext) - 1;
+       data_resource.start = CPHYSADDR(&_etext);
+       data_resource.end = CPHYSADDR(&_edata) - 1;
+#else
        code_resource.start = virt_to_phys(&_text);
        code_resource.end = virt_to_phys(&_etext) - 1;
        data_resource.start = virt_to_phys(&_etext);
        data_resource.end = virt_to_phys(&_edata) - 1;
+#endif
 
        /*
         * Request address space for all standard RAM.
@@ -536,9 +504,15 @@ static inline void resource_init(void)
        }
 }
 
+#undef PFN_UP
+#undef PFN_DOWN
+#undef PFN_PHYS
+
 #undef MAXMEM
 #undef MAXMEM_PFN
 
+extern void plat_setup(void);
+
 void __init setup_arch(char **cmdline_p)
 {
        cpu_probe();
@@ -553,8 +527,18 @@ void __init setup_arch(char **cmdline_p)
 #endif
 #endif
 
-       arch_mem_init(cmdline_p);
+       /* call board setup routine */
+       plat_setup();
+
+       strlcpy(command_line, arcs_cmdline, sizeof(command_line));
+       strlcpy(saved_command_line, command_line, COMMAND_LINE_SIZE);
+
+       *cmdline_p = command_line;
 
+       parse_cmdline_early();
+       bootmem_init();
+       sparse_init();
+       paging_init();
        resource_init();
 #ifdef CONFIG_SMP
        plat_smp_setup();
@@ -563,10 +547,7 @@ void __init setup_arch(char **cmdline_p)
 
 int __init fpu_disable(char *s)
 {
-       int i;
-
-       for (i = 0; i < NR_CPUS; i++)
-               cpu_data[i].options &= ~MIPS_CPU_FPU;
+       cpu_data[0].options &= ~MIPS_CPU_FPU;
 
        return 1;
 }