Commit 38145517 authored by Russell King's avatar Russell King

[ARM] Manual merge.

parents ca980f75 fed2889b
...@@ -22,7 +22,6 @@ unsigned int __machine_arch_type; ...@@ -22,7 +22,6 @@ unsigned int __machine_arch_type;
#include <asm/uaccess.h> #include <asm/uaccess.h>
#include <asm/arch/uncompress.h> #include <asm/arch/uncompress.h>
#include <asm/proc/uncompress.h>
#ifdef STANDALONE_DEBUG #ifdef STANDALONE_DEBUG
#define puts printf #define puts printf
...@@ -291,7 +290,6 @@ decompress_kernel(ulg output_start, ulg free_mem_ptr_p, ulg free_mem_ptr_end_p, ...@@ -291,7 +290,6 @@ decompress_kernel(ulg output_start, ulg free_mem_ptr_p, ulg free_mem_ptr_end_p,
free_mem_ptr_end = free_mem_ptr_end_p; free_mem_ptr_end = free_mem_ptr_end_p;
__machine_arch_type = arch_id; __machine_arch_type = arch_id;
proc_decomp_setup();
arch_decomp_setup(); arch_decomp_setup();
makecrc(); makecrc();
......
#
# Automatically generated make config: don't edit
#
CONFIG_ARM=y
#
# System and processor type
#
# CONFIG_ARCH_ARC is not set
# CONFIG_ARCH_A5K is not set
# CONFIG_ARCH_RPC is not set
# CONFIG_ARCH_EBSA110 is not set
# CONFIG_FOOTBRIDGE is not set
CONFIG_ARCH_SA1100=y
CONFIG_CPU_SA1100=y
# CONFIG_SA1100_BRUTUS is not set
# CONFIG_SA1100_EMPEG is not set
# CONFIG_SA1100_ITSY is not set
# CONFIG_SA1100_PLEB is not set
CONFIG_SA1100_VICTOR=y
# CONFIG_VICTOR_BOARD1 is not set
# CONFIG_ARCH_ACORN is not set
# CONFIG_ISA_DMA is not set
CONFIG_CPU_32=y
# CONFIG_CPU_26 is not set
# CONFIG_CPU_ARM2 is not set
# CONFIG_CPU_ARM3 is not set
# CONFIG_CPU_ARM6 is not set
# CONFIG_CPU_ARM7 is not set
CONFIG_CPU_SA110=y
#
# Code maturity level options
#
CONFIG_EXPERIMENTAL=y
# CONFIG_ALIGNMENT_TRAP is not set
# CONFIG_TEXT_SECTIONS is not set
#
# Loadable module support
#
CONFIG_MODULES=y
# CONFIG_MODVERSIONS is not set
# CONFIG_KMOD is not set
#
# General setup
#
CONFIG_ZBOOT_ROM=y
CONFIG_ZBOOT_ROM_TEXT=0x00002000
CONFIG_ZBOOT_ROM_BSS=0xc0200000
# CONFIG_NET is not set
# CONFIG_SYSVIPC is not set
# CONFIG_BSD_PROCESS_ACCT is not set
# CONFIG_SYSCTL is not set
CONFIG_NWFPE=y
# CONFIG_BINFMT_AOUT is not set
CONFIG_BINFMT_ELF=y
# CONFIG_BINFMT_MISC is not set
# CONFIG_ARTHUR is not set
# CONFIG_PARPORT is not set
CONFIG_CMDLINE=""
#
# Plug and Play support
#
# CONFIG_PNP is not set
#
# Block devices
#
# CONFIG_BLK_DEV_FD is not set
CONFIG_BLK_DEV_IDE=y
#
# Please see Documentation/ide.txt for help/info on IDE drives
#
# CONFIG_BLK_DEV_HD_IDE is not set
# CONFIG_BLK_DEV_IDEDISK is not set
CONFIG_BLK_DEV_IDECD=y
# CONFIG_BLK_DEV_IDETAPE is not set
# CONFIG_BLK_DEV_IDEFLOPPY is not set
# CONFIG_BLK_DEV_IDESCSI is not set
# CONFIG_BLK_DEV_CMD640 is not set
# CONFIG_IDE_CHIPSETS is not set
# CONFIG_BLK_DEV_LOOP is not set
# CONFIG_BLK_DEV_MD is not set
# CONFIG_BLK_DEV_RAM is not set
# CONFIG_BLK_DEV_XD is not set
CONFIG_PARIDE_PARPORT=y
# CONFIG_PARIDE is not set
# CONFIG_BLK_DEV_HD is not set
#
# Character devices
#
# CONFIG_VT is not set
CONFIG_SERIAL_SA1100=y
CONFIG_SERIAL_SA1100_CONSOLE=y
# CONFIG_SERIAL is not set
# CONFIG_SERIAL_EXTENDED is not set
# CONFIG_SERIAL_NONSTANDARD is not set
# CONFIG_UNIX98_PTYS is not set
# CONFIG_MOUSE is not set
# CONFIG_QIC02_TAPE is not set
# CONFIG_WATCHDOG is not set
# CONFIG_NVRAM is not set
# CONFIG_RTC is not set
#
# Video For Linux
#
# CONFIG_VIDEO_DEV is not set
#
# Joystick support
#
# CONFIG_JOYSTICK is not set
# CONFIG_DTLK is not set
#
# Ftape, the floppy tape device driver
#
# CONFIG_FTAPE is not set
#
# SCSI support
#
# CONFIG_SCSI is not set
#
# Filesystems
#
# CONFIG_QUOTA is not set
# CONFIG_AUTOFS_FS is not set
# CONFIG_ADFS_FS is not set
# CONFIG_AFFS_FS is not set
# CONFIG_HFS_FS is not set
# CONFIG_FAT_FS is not set
# CONFIG_MSDOS_FS is not set
# CONFIG_UMSDOS_FS is not set
# CONFIG_VFAT_FS is not set
CONFIG_ISO9660_FS=y
CONFIG_JOLIET=y
# CONFIG_MINIX_FS is not set
# CONFIG_NTFS_FS is not set
# CONFIG_HPFS_FS is not set
# CONFIG_PROC_FS is not set
# CONFIG_QNX4FS_FS is not set
# CONFIG_ROMFS_FS is not set
CONFIG_EXT2_FS=y
# CONFIG_SYSV_FS is not set
# CONFIG_UFS_FS is not set
#
# Partition Types
#
# CONFIG_OSF_PARTITION is not set
# CONFIG_MAC_PARTITION is not set
# CONFIG_MSDOS_PARTITION is not set
# CONFIG_SGI_PARTITION is not set
# CONFIG_SUN_PARTITION is not set
# CONFIG_AMIGA_PARTITION is not set
# CONFIG_ACORN_PARTITION is not set
CONFIG_NLS=y
#
# Native Language Support
#
CONFIG_NLS_CODEPAGE_437=y
# CONFIG_NLS_CODEPAGE_737 is not set
# CONFIG_NLS_CODEPAGE_775 is not set
CONFIG_NLS_CODEPAGE_850=y
# CONFIG_NLS_CODEPAGE_852 is not set
# CONFIG_NLS_CODEPAGE_855 is not set
# CONFIG_NLS_CODEPAGE_857 is not set
# CONFIG_NLS_CODEPAGE_860 is not set
# CONFIG_NLS_CODEPAGE_861 is not set
# CONFIG_NLS_CODEPAGE_862 is not set
# CONFIG_NLS_CODEPAGE_863 is not set
# CONFIG_NLS_CODEPAGE_864 is not set
# CONFIG_NLS_CODEPAGE_865 is not set
# CONFIG_NLS_CODEPAGE_866 is not set
# CONFIG_NLS_CODEPAGE_869 is not set
# CONFIG_NLS_CODEPAGE_874 is not set
CONFIG_NLS_ISO8859_1=y
# CONFIG_NLS_ISO8859_2 is not set
# CONFIG_NLS_ISO8859_3 is not set
# CONFIG_NLS_ISO8859_4 is not set
# CONFIG_NLS_ISO8859_5 is not set
# CONFIG_NLS_ISO8859_6 is not set
# CONFIG_NLS_ISO8859_7 is not set
# CONFIG_NLS_ISO8859_8 is not set
# CONFIG_NLS_ISO8859_9 is not set
# CONFIG_NLS_ISO8859_15 is not set
# CONFIG_NLS_KOI8_R is not set
#
# Kernel hacking
#
CONFIG_FRAME_POINTER=y
CONFIG_DEBUG_ERRORS=y
CONFIG_DEBUG_USER=y
# CONFIG_DEBUG_INFO is not set
# CONFIG_MAGIC_SYSRQ is not set
# CONFIG_DEBUG_LL is not set
...@@ -958,20 +958,15 @@ ENTRY(fp_enter) ...@@ -958,20 +958,15 @@ ENTRY(fp_enter)
.text .text
/* /*
* Register switch for ARMv3 and ARMv4 processors * Register switch for ARMv3 and ARMv4 processors
* r0 = previous thread_info, r1 = next thread_info, return previous. * r0 = previous thread_info, r1 = next thread_info
* previous and next are guaranteed not to be the same. * previous and next are guaranteed not to be the same.
*/ */
ENTRY(__switch_to) ENTRY(__switch_to)
stmfd sp!, {r4 - sl, fp, lr} @ Store most regs on stack add ip, r0, #TI_CPU_SAVE
mrs ip, cpsr ldr r2, [r1, #TI_CPU_DOMAIN]!
str ip, [sp, #-4]! @ Save cpsr_SVC stmia ip, {r4 - sl, fp, sp, lr} @ Store most regs on stack
str sp, [r0, #TI_CPU_SAVE] @ Save sp_SVC
ldr sp, [r1, #TI_CPU_SAVE] @ Get saved sp_SVC
ldr r2, [r1, #TI_CPU_DOMAIN]
ldr ip, [sp], #4
mcr p15, 0, r2, c3, c0 @ Set domain register mcr p15, 0, r2, c3, c0 @ Set domain register
msr spsr, ip @ Save tasks CPSR into SPSR for this return ldmib r1, {r4 - sl, fp, sp, pc} @ Load all regs saved previously
ldmfd sp!, {r4 - sl, fp, pc}^ @ Load all regs saved previously
.section ".text.init",#alloc,#execinstr .section ".text.init",#alloc,#execinstr
/* /*
......
...@@ -185,7 +185,7 @@ void show_regs(struct pt_regs * regs) ...@@ -185,7 +185,7 @@ void show_regs(struct pt_regs * regs)
get_fs() == get_ds() ? "kernel" : "user"); get_fs() == get_ds() ? "kernel" : "user");
#if defined(CONFIG_CPU_32) #if defined(CONFIG_CPU_32)
{ {
int ctrl, transbase, dac; unsigned int ctrl, transbase, dac;
__asm__ ( __asm__ (
" mrc p15, 0, %0, c1, c0\n" " mrc p15, 0, %0, c1, c0\n"
" mrc p15, 0, %1, c2, c0\n" " mrc p15, 0, %1, c2, c0\n"
...@@ -310,23 +310,21 @@ void release_thread(struct task_struct *dead_task) ...@@ -310,23 +310,21 @@ void release_thread(struct task_struct *dead_task)
asmlinkage void ret_from_fork(void) __asm__("ret_from_fork"); asmlinkage void ret_from_fork(void) __asm__("ret_from_fork");
int copy_thread(int nr, unsigned long clone_flags, unsigned long esp, int
unsigned long unused, copy_thread(int nr, unsigned long clone_flags, unsigned long esp,
struct task_struct * p, struct pt_regs * regs) unsigned long unused, struct task_struct *p, struct pt_regs *regs)
{ {
struct thread_info *thread = p->thread_info;
struct pt_regs *childregs; struct pt_regs *childregs;
struct cpu_context_save *save;
childregs = ((struct pt_regs *)((unsigned long)p->thread_info + THREAD_SIZE)) - 1; childregs = ((struct pt_regs *)((unsigned long)thread + THREAD_SIZE - 8)) - 1;
*childregs = *regs; *childregs = *regs;
childregs->ARM_r0 = 0; childregs->ARM_r0 = 0;
childregs->ARM_sp = esp; childregs->ARM_sp = esp;
save = ((struct cpu_context_save *)(childregs)) - 1; memset(&thread->cpu_context, 0, sizeof(struct cpu_context_save));
*save = INIT_CSS; thread->cpu_context.sp = (unsigned long)childregs;
save->pc |= (unsigned long)ret_from_fork; thread->cpu_context.pc = (unsigned long)ret_from_fork;
p->thread_info->cpu_context = save;
return 0; return 0;
} }
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
* *
* Copyright (C) 2001 Deep Blue Solutions Ltd. * Copyright (C) 2001 Deep Blue Solutions Ltd.
* *
* $Id: cpu.c,v 1.2 2001/09/22 12:11:17 rmk Exp $ * $Id: cpu.c,v 1.4 2002/05/29 11:41:55 rmk Exp $
* *
* This program is free software; you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License version 2 as
...@@ -121,7 +121,7 @@ static int __init cpu_init(void) ...@@ -121,7 +121,7 @@ static int __init cpu_init(void)
cpu_freq_khz = vco_to_freq(vco, 1); cpu_freq_khz = vco_to_freq(vco, 1);
#ifdef CONFIG_CPU_FREQ #ifdef CONFIG_CPU_FREQ
cpufreq_init(cpu_freq_khz); cpufreq_init(cpu_freq_khz, 1000, 0);
cpufreq_setfunctions(integrator_validatespeed, integrator_setspeed); cpufreq_setfunctions(integrator_validatespeed, integrator_setspeed);
#endif #endif
......
...@@ -99,8 +99,6 @@ led-$(CONFIG_SA1100_SIMPAD) += leds-simpad.o ...@@ -99,8 +99,6 @@ led-$(CONFIG_SA1100_SIMPAD) += leds-simpad.o
obj-$(CONFIG_SA1100_STORK) += stork.o obj-$(CONFIG_SA1100_STORK) += stork.o
export-objs += stork.o export-objs += stork.o
obj-$(CONFIG_SA1100_VICTOR) += victor.o
obj-$(CONFIG_SA1100_XP860) += xp860.o obj-$(CONFIG_SA1100_XP860) += xp860.o
obj-$(CONFIG_SA1100_YOPY) += yopy.o obj-$(CONFIG_SA1100_YOPY) += yopy.o
......
...@@ -78,7 +78,7 @@ unsigned int sa11x0_validatespeed(unsigned int khz) ...@@ -78,7 +78,7 @@ unsigned int sa11x0_validatespeed(unsigned int khz)
static int __init sa11x0_init_clock(void) static int __init sa11x0_init_clock(void)
{ {
cpufreq_init(cclk_frequency_100khz[PPCR & 0xf] * 100); cpufreq_init(cclk_frequency_100khz[PPCR & 0xf] * 100, 59000, 287000);
return 0; return 0;
} }
...@@ -203,6 +203,3 @@ void __init sa1110_mb_enable(void) ...@@ -203,6 +203,3 @@ void __init sa1110_mb_enable(void)
local_irq_restore(flags); local_irq_restore(flags);
} }
EXPORT_SYMBOL(sa1111_wake);
EXPORT_SYMBOL(sa1111_doze);
/*
* linux/arch/arm/mach-sa1100/victor.c
*
* Author: Nicolas Pitre
*
* 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
* published by the Free Software Foundation.
*/
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/delay.h>
#include <linux/pm.h>
#include <linux/tty.h>
#include <asm/hardware.h>
#include <asm/setup.h>
#include <asm/mach/arch.h>
#include <asm/mach/map.h>
#include <asm/mach/serial_sa1100.h>
#include "generic.h"
static void victor_power_off(void)
{
/* switch off power supply */
mdelay(2000);
GPCR = GPIO_GPIO23;
while (1);
}
static int __init victor_init(void)
{
pm_power_off = victor_power_off;
return 0;
}
__initcall(victor_init);
static void __init
fixup_victor(struct machine_desc *desc, struct tag *tags,
char **cmdline, struct meminfo *mi)
{
SET_BANK( 0, 0xc0000000, 4*1024*1024 );
mi->nr_banks = 1;
ROOT_DEV = mk_kdev( 60, 2 );
/* Get command line parameters passed from the loader (if any) */
if( *((char*)0xc0000000) )
strcpy( *cmdline, ((char *)0xc0000000) );
/* power off if any problem */
strcat( *cmdline, " panic=1" );
}
static struct map_desc victor_io_desc[] __initdata = {
/* virtual physical length domain r w c b */
{ 0xe8000000, 0x00000000, 0x00200000, DOMAIN_IO, 0, 1, 0, 0 }, /* Flash */
LAST_DESC
};
static void __init victor_map_io(void)
{
sa1100_map_io();
iotable_init(victor_io_desc);
sa1100_register_uart(0, 3);
}
MACHINE_START(VICTOR, "VisuAide Victor")
BOOT_MEM(0xc0000000, 0x80000000, 0xf8000000)
FIXUP(fixup_victor)
MAPIO(victor_map_io)
INITIRQ(sa1100_init_irq)
MACHINE_END
...@@ -30,6 +30,7 @@ ...@@ -30,6 +30,7 @@
#include <asm/dma.h> #include <asm/dma.h>
#include <asm/hardware.h> #include <asm/hardware.h>
#include <asm/setup.h> #include <asm/setup.h>
#include <asm/tlb.h>
#include <asm/mach/arch.h> #include <asm/mach/arch.h>
#include <asm/mach/map.h> #include <asm/mach/map.h>
...@@ -48,6 +49,8 @@ ...@@ -48,6 +49,8 @@
#define TABLE_SIZE ((TABLE_OFFSET + PTRS_PER_PTE) * sizeof(pte_t)) #define TABLE_SIZE ((TABLE_OFFSET + PTRS_PER_PTE) * sizeof(pte_t))
mmu_gather_t mmu_gathers[NR_CPUS];
extern pgd_t swapper_pg_dir[PTRS_PER_PGD]; extern pgd_t swapper_pg_dir[PTRS_PER_PGD];
extern char _stext, _text, _etext, _end, __init_begin, __init_end; extern char _stext, _text, _etext, _end, __init_begin, __init_end;
......
...@@ -158,7 +158,7 @@ static int clps7111fb_blank(int blank, struct fb_info *info) ...@@ -158,7 +158,7 @@ static int clps7111fb_blank(int blank, struct fb_info *info)
clps_writeb(clps_readb(PDDR) & ~EDB_PD1_LCD_DC_DC_EN, PDDR); clps_writeb(clps_readb(PDDR) & ~EDB_PD1_LCD_DC_DC_EN, PDDR);
/* Delay for a little while (half a second). */ /* Delay for a little while (half a second). */
for (i=0; i<65536*4; i++); udelay(100);
/* Power off the LCD panel. */ /* Power off the LCD panel. */
clps_writeb(clps_readb(PDDR) & ~EDB_PD2_LCDEN, PDDR); clps_writeb(clps_readb(PDDR) & ~EDB_PD2_LCDEN, PDDR);
...@@ -169,24 +169,24 @@ static int clps7111fb_blank(int blank, struct fb_info *info) ...@@ -169,24 +169,24 @@ static int clps7111fb_blank(int blank, struct fb_info *info)
} }
} else { } else {
if (machine_is_edb7211()) { if (machine_is_edb7211()) {
int i; int i;
/* Power up the LCD controller. */ /* Power up the LCD controller. */
clps_writel(clps_readl(SYSCON1) | SYSCON1_LCDEN, clps_writel(clps_readl(SYSCON1) | SYSCON1_LCDEN,
SYSCON1); SYSCON1);
/* Power up the LCD panel. */ /* Power up the LCD panel. */
clps_writeb(clps_readb(PDDR) | EDB_PD2_LCDEN, PDDR); clps_writeb(clps_readb(PDDR) | EDB_PD2_LCDEN, PDDR);
/* Delay for a little while. */ /* Delay for a little while. */
for (i=0; i<65536*4; i++); udelay(100);
/* Power up the LCD DC-DC converter. */ /* Power up the LCD DC-DC converter. */
clps_writeb(clps_readb(PDDR) | EDB_PD1_LCD_DC_DC_EN, clps_writeb(clps_readb(PDDR) | EDB_PD1_LCD_DC_DC_EN,
PDDR); PDDR);
/* Turn on the LCD backlight. */ /* Turn on the LCD backlight. */
clps_writeb(clps_readb(PDDR) | EDB_PD3_LCDBL, PDDR); clps_writeb(clps_readb(PDDR) | EDB_PD3_LCDBL, PDDR);
} }
} }
return 0; return 0;
......
...@@ -71,27 +71,27 @@ static __inline__ void atomic_dec(volatile atomic_t *v) ...@@ -71,27 +71,27 @@ static __inline__ void atomic_dec(volatile atomic_t *v)
static __inline__ int atomic_dec_and_test(volatile atomic_t *v) static __inline__ int atomic_dec_and_test(volatile atomic_t *v)
{ {
unsigned long flags; unsigned long flags;
int result; int val;
__save_flags_cli(flags); __save_flags_cli(flags);
v->counter -= 1; val = v->counter;
result = (v->counter == 0); v->counter = val -= 1;
__restore_flags(flags); __restore_flags(flags);
return result; return val == 0;
} }
static inline int atomic_add_negative(int i, volatile atomic_t *v) static inline int atomic_add_negative(int i, volatile atomic_t *v)
{ {
unsigned long flags; unsigned long flags;
int result; int val;
__save_flags_cli(flags); __save_flags_cli(flags);
v->counter += i; val = v->counter;
result = (v->counter < 0); v->counter = val += i;
__restore_flags(flags); __restore_flags(flags);
return result; return val < 0;
} }
static __inline__ void atomic_clear_mask(unsigned long mask, unsigned long *addr) static __inline__ void atomic_clear_mask(unsigned long mask, unsigned long *addr)
......
...@@ -23,20 +23,6 @@ ...@@ -23,20 +23,6 @@
#define KERNEL_STACK_SIZE 4096 #define KERNEL_STACK_SIZE 4096
struct cpu_context_save {
unsigned long r4;
unsigned long r5;
unsigned long r6;
unsigned long r7;
unsigned long r8;
unsigned long r9;
unsigned long sl;
unsigned long fp;
unsigned long pc;
};
#define INIT_CSS (struct cpu_context_save){ 0, 0, 0, 0, 0, 0, 0, 0, SVC26_MODE }
typedef struct { typedef struct {
void (*put_byte)(void); /* Special calling convention */ void (*put_byte)(void); /* Special calling convention */
void (*get_byte)(void); /* Special calling convention */ void (*get_byte)(void); /* Special calling convention */
...@@ -71,7 +57,7 @@ extern uaccess_t uaccess_user, uaccess_kernel; ...@@ -71,7 +57,7 @@ extern uaccess_t uaccess_user, uaccess_kernel;
regs->ARM_r0 = stack[0]; /* r0 (argc) */ \ regs->ARM_r0 = stack[0]; /* r0 (argc) */ \
}) })
#define KSTK_EIP(tsk) (((unsigned long *)(4096+(unsigned long)(tsk)))[1022]) #define KSTK_EIP(tsk) (((unsigned long *)(4096+(unsigned long)(tsk)))[1020])
#define KSTK_ESP(tsk) (((unsigned long *)(4096+(unsigned long)(tsk)))[1020]) #define KSTK_ESP(tsk) (((unsigned long *)(4096+(unsigned long)(tsk)))[1018])
#endif #endif
/*
* linux/include/asm-arm/proc-armo/uncompress.h
*
* Copyright (C) 1997 Russell King
*
* 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
* published by the Free Software Foundation.
*/
#define proc_decomp_setup()
...@@ -22,21 +22,6 @@ ...@@ -22,21 +22,6 @@
#define KERNEL_STACK_SIZE PAGE_SIZE #define KERNEL_STACK_SIZE PAGE_SIZE
struct cpu_context_save {
unsigned long cpsr;
unsigned long r4;
unsigned long r5;
unsigned long r6;
unsigned long r7;
unsigned long r8;
unsigned long r9;
unsigned long sl;
unsigned long fp;
unsigned long pc;
};
#define INIT_CSS (struct cpu_context_save){ SVC_MODE, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
#define INIT_EXTRA_THREAD_INFO \ #define INIT_EXTRA_THREAD_INFO \
cpu_domain: domain_val(DOMAIN_USER, DOMAIN_CLIENT) | \ cpu_domain: domain_val(DOMAIN_USER, DOMAIN_CLIENT) | \
domain_val(DOMAIN_KERNEL, DOMAIN_MANAGER) | \ domain_val(DOMAIN_KERNEL, DOMAIN_MANAGER) | \
...@@ -58,7 +43,7 @@ struct cpu_context_save { ...@@ -58,7 +43,7 @@ struct cpu_context_save {
regs->ARM_r0 = stack[0]; /* r0 (argc) */ \ regs->ARM_r0 = stack[0]; /* r0 (argc) */ \
}) })
#define KSTK_EIP(tsk) (((unsigned long *)(4096+(unsigned long)(tsk)))[1021]) #define KSTK_EIP(tsk) (((unsigned long *)(4096+(unsigned long)(tsk)))[1019])
#define KSTK_ESP(tsk) (((unsigned long *)(4096+(unsigned long)(tsk)))[1019]) #define KSTK_ESP(tsk) (((unsigned long *)(4096+(unsigned long)(tsk)))[1017])
#endif #endif
/*
* linux/include/asm-arm/proc-armv/uncompress.h
*
* Copyright (C) 1997 Russell King
*
* 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
* published by the Free Software Foundation.
*/
static inline void proc_decomp_setup (void)
{
__asm__ __volatile__("
mrc p15, 0, r0, c0, c0
eor r0, r0, #0x44 << 24
eor r0, r0, #0x01 << 16
eor r0, r0, #0xA1 << 8
movs r0, r0, lsr #5
mcreq p15, 0, r0, c7, c5, 0 @ flush I cache
mrceq p15, 0, r0, c1, c0
orreq r0, r0, #1 << 12
mcreq p15, 0, r0, c1, c0 @ enable I cache
mov r0, #0
mcreq p15, 0, r0, c15, c1, 2 @ enable clock switching
" : : : "r0", "cc", "memory");
}
...@@ -22,20 +22,35 @@ struct exec_domain; ...@@ -22,20 +22,35 @@ struct exec_domain;
#include <asm/ptrace.h> #include <asm/ptrace.h>
#include <asm/types.h> #include <asm/types.h>
typedef unsigned long mm_segment_t; /* domain register */ typedef unsigned long mm_segment_t;
struct cpu_context_save {
__u32 r4;
__u32 r5;
__u32 r6;
__u32 r7;
__u32 r8;
__u32 r9;
__u32 sl;
__u32 fp;
__u32 sp;
__u32 pc;
__u32 extra[2]; /* Xscale 'acc' register, etc */
};
/* /*
* low level task data that entry.S needs immediate access to. * low level task data that entry.S needs immediate access to.
* We assume cpu_context follows immedately after cpu_domain.
*/ */
struct thread_info { struct thread_info {
unsigned long flags; /* low level flags */ unsigned long flags; /* low level flags */
__s32 preempt_count; /* 0 => preemptable, <0 => bug */ __s32 preempt_count; /* 0 => preemptable, <0 => bug */
mm_segment_t addr_limit; /* address limit */ mm_segment_t addr_limit; /* address limit */
__u32 cpu; /* cpu */
struct cpu_context_save *cpu_context; /* cpu context */
__u32 cpu_domain; /* cpu domain */
struct task_struct *task; /* main task structure */ struct task_struct *task; /* main task structure */
struct exec_domain *exec_domain; /* execution domain */ struct exec_domain *exec_domain; /* execution domain */
__u32 cpu; /* cpu */
__u32 cpu_domain; /* cpu domain */
struct cpu_context_save cpu_context; /* cpu context */
union fp_state fpstate; union fp_state fpstate;
}; };
...@@ -71,34 +86,20 @@ extern void free_thread_info(struct thread_info *); ...@@ -71,34 +86,20 @@ extern void free_thread_info(struct thread_info *);
#define get_thread_info(ti) get_task_struct((ti)->task) #define get_thread_info(ti) get_task_struct((ti)->task)
#define put_thread_info(ti) put_task_struct((ti)->task) #define put_thread_info(ti) put_task_struct((ti)->task)
static inline unsigned long __thread_saved_pc(struct thread_info *thread) #define thread_saved_pc(tsk) (pc_pointer((tsk)->thread_info->cpu_context.pc))
{ #define thread_saved_fp(tsk) ((tsk)->thread_info->cpu_context.fp)
struct cpu_context_save *context = thread->cpu_context;
return context ? pc_pointer(context->pc) : 0;
}
static inline unsigned long __thread_saved_fp(struct thread_info *thread)
{
struct cpu_context_save *context = thread->cpu_context;
return context ? context->fp : 0;
}
#define thread_saved_pc(tsk) __thread_saved_pc((tsk)->thread_info)
#define thread_saved_fp(tsk) __thread_saved_fp((tsk)->thread_info)
#else /* !__ASSEMBLY__ */ #else /* !__ASSEMBLY__ */
#define TI_FLAGS 0 #define TI_FLAGS 0
#define TI_PREEMPT 4 #define TI_PREEMPT 4
#define TI_ADDR_LIMIT 8 #define TI_ADDR_LIMIT 8
#define TI_CPU 12 #define TI_TASK 12
#define TI_CPU_SAVE 16 #define TI_EXEC_DOMAIN 16
#define TI_CPU_DOMAIN 20 #define TI_CPU 20
#define TI_TASK 24 #define TI_CPU_DOMAIN 24
#define TI_EXEC_DOMAIN 28 #define TI_CPU_SAVE 28
#define TI_FPSTATE 32 #define TI_FPSTATE 76
#endif #endif
......
#ifndef __ASMARM_TLB_H
#define __ASMARM_TLB_H
#include <asm/cacheflush.h>
#include <asm/tlbflush.h>
#define tlb_flush(tlb) \
flush_tlb_mm((tlb)->mm)
#define tlb_start_vma(tlb,vma) \
flush_cache_range(vma, vma->vm_start, vma->vm_end)
#define tlb_end_vma(tlb,vma) \
flush_tlb_range(vma, vma->vm_start, vma->vm_end)
#define tlb_remove_tlb_entry(tlb, pte, address) do { } while (0)
#include <asm-generic/tlb.h> #include <asm-generic/tlb.h>
#define pmd_free_tlb(tlb, pmd) pmd_free(pmd)
#define pte_free_tlb(tlb, pte) pte_free(pte)
#endif
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment