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;
#include <asm/uaccess.h>
#include <asm/arch/uncompress.h>
#include <asm/proc/uncompress.h>
#ifdef STANDALONE_DEBUG
#define puts printf
......@@ -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;
__machine_arch_type = arch_id;
proc_decomp_setup();
arch_decomp_setup();
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)
.text
/*
* 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.
*/
ENTRY(__switch_to)
stmfd sp!, {r4 - sl, fp, lr} @ Store most regs on stack
mrs ip, cpsr
str ip, [sp, #-4]! @ Save cpsr_SVC
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
add ip, r0, #TI_CPU_SAVE
ldr r2, [r1, #TI_CPU_DOMAIN]!
stmia ip, {r4 - sl, fp, sp, lr} @ Store most regs on stack
mcr p15, 0, r2, c3, c0 @ Set domain register
msr spsr, ip @ Save tasks CPSR into SPSR for this return
ldmfd sp!, {r4 - sl, fp, pc}^ @ Load all regs saved previously
ldmib r1, {r4 - sl, fp, sp, pc} @ Load all regs saved previously
.section ".text.init",#alloc,#execinstr
/*
......
......@@ -185,7 +185,7 @@ void show_regs(struct pt_regs * regs)
get_fs() == get_ds() ? "kernel" : "user");
#if defined(CONFIG_CPU_32)
{
int ctrl, transbase, dac;
unsigned int ctrl, transbase, dac;
__asm__ (
" mrc p15, 0, %0, c1, c0\n"
" mrc p15, 0, %1, c2, c0\n"
......@@ -310,23 +310,21 @@ void release_thread(struct task_struct *dead_task)
asmlinkage void ret_from_fork(void) __asm__("ret_from_fork");
int copy_thread(int nr, unsigned long clone_flags, unsigned long esp,
unsigned long unused,
struct task_struct * p, struct pt_regs * regs)
int
copy_thread(int nr, unsigned long clone_flags, unsigned long esp,
unsigned long unused, struct task_struct *p, struct pt_regs *regs)
{
struct thread_info *thread = p->thread_info;
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->ARM_r0 = 0;
childregs->ARM_sp = esp;
save = ((struct cpu_context_save *)(childregs)) - 1;
*save = INIT_CSS;
save->pc |= (unsigned long)ret_from_fork;
p->thread_info->cpu_context = save;
memset(&thread->cpu_context, 0, sizeof(struct cpu_context_save));
thread->cpu_context.sp = (unsigned long)childregs;
thread->cpu_context.pc = (unsigned long)ret_from_fork;
return 0;
}
......
......@@ -3,7 +3,7 @@
*
* 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
* it under the terms of the GNU General Public License version 2 as
......@@ -121,7 +121,7 @@ static int __init cpu_init(void)
cpu_freq_khz = vco_to_freq(vco, 1);
#ifdef CONFIG_CPU_FREQ
cpufreq_init(cpu_freq_khz);
cpufreq_init(cpu_freq_khz, 1000, 0);
cpufreq_setfunctions(integrator_validatespeed, integrator_setspeed);
#endif
......
......@@ -99,8 +99,6 @@ led-$(CONFIG_SA1100_SIMPAD) += leds-simpad.o
obj-$(CONFIG_SA1100_STORK) += stork.o
export-objs += stork.o
obj-$(CONFIG_SA1100_VICTOR) += victor.o
obj-$(CONFIG_SA1100_XP860) += xp860.o
obj-$(CONFIG_SA1100_YOPY) += yopy.o
......
......@@ -78,7 +78,7 @@ unsigned int sa11x0_validatespeed(unsigned int khz)
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;
}
......@@ -203,6 +203,3 @@ void __init sa1110_mb_enable(void)
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 @@
#include <asm/dma.h>
#include <asm/hardware.h>
#include <asm/setup.h>
#include <asm/tlb.h>
#include <asm/mach/arch.h>
#include <asm/mach/map.h>
......@@ -48,6 +49,8 @@
#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 char _stext, _text, _etext, _end, __init_begin, __init_end;
......
......@@ -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);
/* Delay for a little while (half a second). */
for (i=0; i<65536*4; i++);
udelay(100);
/* Power off the LCD panel. */
clps_writeb(clps_readb(PDDR) & ~EDB_PD2_LCDEN, PDDR);
......@@ -179,7 +179,7 @@ static int clps7111fb_blank(int blank, struct fb_info *info)
clps_writeb(clps_readb(PDDR) | EDB_PD2_LCDEN, PDDR);
/* Delay for a little while. */
for (i=0; i<65536*4; i++);
udelay(100);
/* Power up the LCD DC-DC converter. */
clps_writeb(clps_readb(PDDR) | EDB_PD1_LCD_DC_DC_EN,
......
......@@ -71,27 +71,27 @@ static __inline__ void atomic_dec(volatile atomic_t *v)
static __inline__ int atomic_dec_and_test(volatile atomic_t *v)
{
unsigned long flags;
int result;
int val;
__save_flags_cli(flags);
v->counter -= 1;
result = (v->counter == 0);
val = v->counter;
v->counter = val -= 1;
__restore_flags(flags);
return result;
return val == 0;
}
static inline int atomic_add_negative(int i, volatile atomic_t *v)
{
unsigned long flags;
int result;
int val;
__save_flags_cli(flags);
v->counter += i;
result = (v->counter < 0);
val = v->counter;
v->counter = val += i;
__restore_flags(flags);
return result;
return val < 0;
}
static __inline__ void atomic_clear_mask(unsigned long mask, unsigned long *addr)
......
......@@ -23,20 +23,6 @@
#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 {
void (*put_byte)(void); /* Special calling convention */
void (*get_byte)(void); /* Special calling convention */
......@@ -71,7 +57,7 @@ extern uaccess_t uaccess_user, uaccess_kernel;
regs->ARM_r0 = stack[0]; /* r0 (argc) */ \
})
#define KSTK_EIP(tsk) (((unsigned long *)(4096+(unsigned long)(tsk)))[1022])
#define KSTK_ESP(tsk) (((unsigned long *)(4096+(unsigned long)(tsk)))[1020])
#define KSTK_EIP(tsk) (((unsigned long *)(4096+(unsigned long)(tsk)))[1020])
#define KSTK_ESP(tsk) (((unsigned long *)(4096+(unsigned long)(tsk)))[1018])
#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 @@
#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 \
cpu_domain: domain_val(DOMAIN_USER, DOMAIN_CLIENT) | \
domain_val(DOMAIN_KERNEL, DOMAIN_MANAGER) | \
......@@ -58,7 +43,7 @@ struct cpu_context_save {
regs->ARM_r0 = stack[0]; /* r0 (argc) */ \
})
#define KSTK_EIP(tsk) (((unsigned long *)(4096+(unsigned long)(tsk)))[1021])
#define KSTK_ESP(tsk) (((unsigned long *)(4096+(unsigned long)(tsk)))[1019])
#define KSTK_EIP(tsk) (((unsigned long *)(4096+(unsigned long)(tsk)))[1019])
#define KSTK_ESP(tsk) (((unsigned long *)(4096+(unsigned long)(tsk)))[1017])
#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;
#include <asm/ptrace.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.
* We assume cpu_context follows immedately after cpu_domain.
*/
struct thread_info {
unsigned long flags; /* low level flags */
__s32 preempt_count; /* 0 => preemptable, <0 => bug */
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 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;
};
......@@ -71,34 +86,20 @@ extern void free_thread_info(struct thread_info *);
#define get_thread_info(ti) get_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)
{
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)
#define thread_saved_pc(tsk) (pc_pointer((tsk)->thread_info->cpu_context.pc))
#define thread_saved_fp(tsk) ((tsk)->thread_info->cpu_context.fp)
#else /* !__ASSEMBLY__ */
#define TI_FLAGS 0
#define TI_PREEMPT 4
#define TI_ADDR_LIMIT 8
#define TI_CPU 12
#define TI_CPU_SAVE 16
#define TI_CPU_DOMAIN 20
#define TI_TASK 24
#define TI_EXEC_DOMAIN 28
#define TI_FPSTATE 32
#define TI_TASK 12
#define TI_EXEC_DOMAIN 16
#define TI_CPU 20
#define TI_CPU_DOMAIN 24
#define TI_CPU_SAVE 28
#define TI_FPSTATE 76
#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>
#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