Merge nommu branch
This commit is contained in:
@@ -9,7 +9,6 @@
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* Common kernel startup code (non-paged MM)
|
||||
* for 32-bit CPUs which has a process ID register(CP15).
|
||||
*
|
||||
*/
|
||||
#include <linux/linkage.h>
|
||||
@@ -40,7 +39,11 @@
|
||||
ENTRY(stext)
|
||||
msr cpsr_c, #PSR_F_BIT | PSR_I_BIT | SVC_MODE @ ensure svc mode
|
||||
@ and irqs disabled
|
||||
#ifndef CONFIG_CPU_CP15
|
||||
ldr r9, =CONFIG_PROCESSOR_ID
|
||||
#else
|
||||
mrc p15, 0, r9, c0, c0 @ get processor id
|
||||
#endif
|
||||
bl __lookup_processor_type @ r5=procinfo r9=cpuid
|
||||
movs r10, r5 @ invalid processor (r5=0)?
|
||||
beq __error_p @ yes, error 'p'
|
||||
@@ -58,6 +61,7 @@ ENTRY(stext)
|
||||
*/
|
||||
.type __after_proc_init, %function
|
||||
__after_proc_init:
|
||||
#ifdef CONFIG_CPU_CP15
|
||||
mrc p15, 0, r0, c1, c0, 0 @ read control reg
|
||||
#ifdef CONFIG_ALIGNMENT_TRAP
|
||||
orr r0, r0, #CR_A
|
||||
@@ -72,8 +76,14 @@ __after_proc_init:
|
||||
#endif
|
||||
#ifdef CONFIG_CPU_ICACHE_DISABLE
|
||||
bic r0, r0, #CR_I
|
||||
#endif
|
||||
#ifdef CONFIG_CPU_HIGH_VECTOR
|
||||
orr r0, r0, #CR_V
|
||||
#else
|
||||
bic r0, r0, #CR_V
|
||||
#endif
|
||||
mcr p15, 0, r0, c1, c0, 0 @ write control reg
|
||||
#endif /* CONFIG_CPU_CP15 */
|
||||
|
||||
mov pc, r13 @ clear the BSS and jump
|
||||
@ to start_kernel
|
||||
|
@@ -2,6 +2,7 @@
|
||||
* linux/arch/arm/kernel/module.c
|
||||
*
|
||||
* Copyright (C) 2002 Russell King.
|
||||
* Modified for nommu by Hyok S. Choi
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
@@ -32,6 +33,7 @@ extern void _etext;
|
||||
#define MODULE_START (((unsigned long)&_etext + ~PGDIR_MASK) & PGDIR_MASK)
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_MMU
|
||||
void *module_alloc(unsigned long size)
|
||||
{
|
||||
struct vm_struct *area;
|
||||
@@ -46,6 +48,12 @@ void *module_alloc(unsigned long size)
|
||||
|
||||
return __vmalloc_area(area, GFP_KERNEL, PAGE_KERNEL);
|
||||
}
|
||||
#else /* CONFIG_MMU */
|
||||
void *module_alloc(unsigned long size)
|
||||
{
|
||||
return size == 0 ? NULL : vmalloc(size);
|
||||
}
|
||||
#endif /* !CONFIG_MMU */
|
||||
|
||||
void module_free(struct module *module, void *region)
|
||||
{
|
||||
|
@@ -221,16 +221,26 @@ void __show_regs(struct pt_regs *regs)
|
||||
processor_modes[processor_mode(regs)],
|
||||
thumb_mode(regs) ? " (T)" : "",
|
||||
get_fs() == get_ds() ? "kernel" : "user");
|
||||
#if CONFIG_CPU_CP15
|
||||
{
|
||||
unsigned int ctrl, transbase, dac;
|
||||
unsigned int ctrl;
|
||||
__asm__ (
|
||||
" mrc p15, 0, %0, c1, c0\n"
|
||||
" mrc p15, 0, %1, c2, c0\n"
|
||||
" mrc p15, 0, %2, c3, c0\n"
|
||||
: "=r" (ctrl), "=r" (transbase), "=r" (dac));
|
||||
printk("Control: %04X Table: %08X DAC: %08X\n",
|
||||
ctrl, transbase, dac);
|
||||
: "=r" (ctrl));
|
||||
printk("Control: %04X\n", ctrl);
|
||||
}
|
||||
#ifdef CONFIG_CPU_CP15_MMU
|
||||
{
|
||||
unsigned int transbase, dac;
|
||||
__asm__ (
|
||||
" mrc p15, 0, %0, c2, c0\n"
|
||||
" mrc p15, 0, %1, c3, c0\n"
|
||||
: "=r" (transbase), "=r" (dac));
|
||||
printk("Table: %08X DAC: %08X\n",
|
||||
transbase, dac);
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
void show_regs(struct pt_regs * regs)
|
||||
|
Reference in New Issue
Block a user