diff options
author | wdenk <wdenk> | 2003-12-06 19:49:23 +0000 |
---|---|---|
committer | wdenk <wdenk> | 2003-12-06 19:49:23 +0000 |
commit | a8c7c708a9e0051c6358718c53572a4681eaa22b (patch) | |
tree | b560561c91725eb2f86289da61ee676787419e37 /cpu/74xx_7xx | |
parent | fa1399ed127c8be507bf182dc7d8d61a54938d79 (diff) | |
download | u-boot-imx-a8c7c708a9e0051c6358718c53572a4681eaa22b.zip u-boot-imx-a8c7c708a9e0051c6358718c53572a4681eaa22b.tar.gz u-boot-imx-a8c7c708a9e0051c6358718c53572a4681eaa22b.tar.bz2 |
* Patch by Gleb Natapov, 19 Sep 2003:
Move most of the timer interrupt related PPC code to ppc_lib/interrupts.c
* Patch by Anders Larsen, 17 Sep 2003:
Bring ARM memory layout in sync with the documentation:
stack and malloc-heap are now located _below_ the U-Boot code
Diffstat (limited to 'cpu/74xx_7xx')
-rw-r--r-- | cpu/74xx_7xx/interrupts.c | 109 |
1 files changed, 5 insertions, 104 deletions
diff --git a/cpu/74xx_7xx/interrupts.c b/cpu/74xx_7xx/interrupts.c index 2e2e456..f0ea485 100644 --- a/cpu/74xx_7xx/interrupts.c +++ b/cpu/74xx_7xx/interrupts.c @@ -32,62 +32,7 @@ #include <commproc.h> #include <command.h> -/****************************************************************************/ - -unsigned decrementer_count; /* count value for 1e6/HZ microseconds */ - -/****************************************************************************/ - -static __inline__ unsigned long -get_msr(void) -{ - unsigned long msr; - - asm volatile("mfmsr %0" : "=r" (msr) :); - return msr; -} - -static __inline__ void -set_msr(unsigned long msr) -{ - asm volatile("mtmsr %0" : : "r" (msr)); -} - -static __inline__ unsigned long -get_dec(void) -{ - unsigned long val; - - asm volatile("mfdec %0" : "=r" (val) :); - return val; -} - - -static __inline__ void -set_dec(unsigned long val) -{ - asm volatile("mtdec %0" : : "r" (val)); -} - - -void -enable_interrupts(void) -{ - set_msr (get_msr() | MSR_EE); -} - -/* returns flag if MSR_EE was set before */ -int -disable_interrupts(void) -{ - ulong msr = get_msr(); - set_msr (msr & ~MSR_EE); - return ((msr & MSR_EE) != 0); -} - -/****************************************************************************/ - -int interrupt_init(void) +int interrupt_init_cpu (unsigned *decrementer_count) { #if defined(DEBUG) && !defined(CONFIG_AMIGAONEG3SE) printf("interrupt_init: GT main cause reg: %08x:%08x\n", @@ -103,22 +48,8 @@ int interrupt_init(void) GTREGREAD(ETHERNET2_INTERRUPT_MASK_REGISTER)); puts("interrupt_init: setting decrementer_count\n"); #endif - decrementer_count = get_tbclk() / CFG_HZ; + *decrementer_count = get_tbclk() / CFG_HZ; -#ifdef DEBUG - puts("interrupt_init: setting actual decremter\n"); -#endif - set_dec (get_tbclk() / CFG_HZ); - -#ifdef DEBUG - printf("interrupt_init: enabling interrupts (msr = %08lx)\n", - get_msr()); -#endif - set_msr (get_msr() | MSR_EE); - -#ifdef DEBUG - printf("interrupt_init: done. (msr = %08lx)\n", get_msr()); -#endif return (0); } @@ -141,40 +72,10 @@ volatile ulong timestamp = 0; * Trivial implementation - no need to be really accurate. */ void -timer_interrupt(struct pt_regs *regs) -{ - set_dec(decrementer_count); - timestamp++; - -#if defined(CONFIG_WATCHDOG) - if ((timestamp % (CFG_HZ / 2)) == 0) { -#if defined(CONFIG_PCIPPC2) - extern void pcippc2_wdt_reset (void); - - pcippc2_wdt_reset(); -#endif - } -#endif /* CONFIG_WATCHDOG */ -} - -/****************************************************************************/ - -void -reset_timer(void) -{ - timestamp = 0; -} - -ulong -get_timer(ulong base) -{ - return (timestamp - base); -} - -void -set_timer(ulong t) +timer_interrupt_cpu (struct pt_regs *regs) { - timestamp = t; + /* nothing to do here */ + return; } /****************************************************************************/ |