diff options
Diffstat (limited to 'cpu')
-rw-r--r-- | cpu/74xx_7xx/cpu.c | 19 | ||||
-rw-r--r-- | cpu/74xx_7xx/interrupts.c | 2 | ||||
-rw-r--r-- | cpu/74xx_7xx/speed.c | 4 | ||||
-rw-r--r-- | cpu/74xx_7xx/traps.c | 21 |
4 files changed, 42 insertions, 4 deletions
diff --git a/cpu/74xx_7xx/cpu.c b/cpu/74xx_7xx/cpu.c index 8a6915f..c265ce2 100644 --- a/cpu/74xx_7xx/cpu.c +++ b/cpu/74xx_7xx/cpu.c @@ -44,6 +44,11 @@ #include <74xx_7xx.h> #include <asm/cache.h> +#ifdef CONFIG_AMIGAONEG3SE +#include "../board/MAI/AmigaOneG3SE/via686.h" +#include "../board/MAI/AmigaOneG3SE/memio.h" +#endif + cpu_t get_cpu_type(void) { @@ -218,12 +223,20 @@ do_reset (cmd_tbl_t *cmdtp, bd_t *bd, int flag, int argc, char *argv[]) /* * For the 7400 the TB clock runs at 1/4 the cpu bus speed. */ -unsigned long -get_tbclk (void) +#ifdef CONFIG_AMIGAONEG3SE +unsigned long get_tbclk(void) { - return CFG_BUS_HZ / 4; + DECLARE_GLOBAL_DATA_PTR; + + return (gd->bus_clk / 4); } +#else /* ! CONFIG_AMIGAONEG3SE */ +unsigned long get_tbclk (void) +{ + return CFG_BUS_HZ / 4; +} +#endif /* CONFIG_AMIGAONEG3SE */ /* ------------------------------------------------------------------------- */ #if defined(CONFIG_WATCHDOG) diff --git a/cpu/74xx_7xx/interrupts.c b/cpu/74xx_7xx/interrupts.c index 10450da..2e2e456 100644 --- a/cpu/74xx_7xx/interrupts.c +++ b/cpu/74xx_7xx/interrupts.c @@ -89,7 +89,7 @@ disable_interrupts(void) int interrupt_init(void) { -#ifdef DEBUG +#if defined(DEBUG) && !defined(CONFIG_AMIGAONEG3SE) printf("interrupt_init: GT main cause reg: %08x:%08x\n", GTREGREAD(LOW_INTERRUPT_CAUSE_REGISTER), GTREGREAD(HIGH_INTERRUPT_CAUSE_REGISTER)); diff --git a/cpu/74xx_7xx/speed.c b/cpu/74xx_7xx/speed.c index fe553f1..ac99bcd 100644 --- a/cpu/74xx_7xx/speed.c +++ b/cpu/74xx_7xx/speed.c @@ -25,6 +25,10 @@ #include <74xx_7xx.h> #include <asm/processor.h> +#ifdef CONFIG_AMIGAONEG3SE +#include "../board/MAI/AmigaOneG3SE/via686.h" +#endif + static const int hid1_multipliers_x_10[] = { 25, /* 0000 - 2.5x */ 75, /* 0001 - 7.5x */ diff --git a/cpu/74xx_7xx/traps.c b/cpu/74xx_7xx/traps.c index 26db097..6e94601 100644 --- a/cpu/74xx_7xx/traps.c +++ b/cpu/74xx_7xx/traps.c @@ -45,7 +45,11 @@ extern unsigned long search_exception_table(unsigned long); /* THIS NEEDS CHANGING to use the board info structure. */ +#ifdef CONFIG_AMIGAONEG3SE +#define END_OF_MEM (gd->bd->bi_memstart + gd->bd->bi_memsize) +#else #define END_OF_MEM 0x02000000 +#endif /* * Trap & Exception support @@ -54,6 +58,9 @@ extern unsigned long search_exception_table(unsigned long); void print_backtrace(unsigned long *sp) { +#ifdef CONFIG_AMIGAONEG3SE + DECLARE_GLOBAL_DATA_PTR; +#endif int cnt = 0; unsigned long i; @@ -171,11 +178,25 @@ AlignmentException(struct pt_regs *regs) void ProgramCheckException(struct pt_regs *regs) { + unsigned char *p = regs ? (unsigned char *)(regs->nip) : NULL; + int i, j; + #if (CONFIG_COMMANDS & CFG_CMD_KGDB) if (debugger_exception_handler && (*debugger_exception_handler)(regs)) return; #endif show_regs(regs); + + p = (unsigned char *) ((unsigned long)p & 0xFFFFFFE0); + p -= 32; + for (i = 0; i < 256; i+=16) { + printf("%08x: ", (unsigned int)p+i); + for (j = 0; j < 16; j++) { + printf("%02x ", p[i+j]); + } + printf("\n"); + } + print_backtrace((unsigned long *)regs->gpr[1]); panic("Program Check Exception"); } |