?? u-boot-lpc2294.patch
字號:
+#endif+++void bad_mode (void)+{+ panic ("Resetting CPU ...\n");+ reset_cpu (0);+}++void show_regs (struct pt_regs *regs)+{+ unsigned long flags;+ const char *processor_modes[] =+ { "USER_26", "FIQ_26", "IRQ_26", "SVC_26", "UK4_26", "UK5_26",+ "UK6_26", "UK7_26",+ "UK8_26", "UK9_26", "UK10_26", "UK11_26", "UK12_26", "UK13_26",+ "UK14_26", "UK15_26",+ "USER_32", "FIQ_32", "IRQ_32", "SVC_32", "UK4_32", "UK5_32",+ "UK6_32", "ABT_32",+ "UK8_32", "UK9_32", "UK10_32", "UND_32", "UK12_32", "UK13_32",+ "UK14_32", "SYS_32"+ };++ flags = condition_codes (regs);++ printf ("pc : [<%08lx>] lr : [<%08lx>]\n"+ "sp : %08lx ip : %08lx fp : %08lx\n",+ instruction_pointer (regs),+ regs->ARM_lr, regs->ARM_sp, regs->ARM_ip, regs->ARM_fp);+ printf ("r10: %08lx r9 : %08lx r8 : %08lx\n",+ regs->ARM_r10, regs->ARM_r9, regs->ARM_r8);+ printf ("r7 : %08lx r6 : %08lx r5 : %08lx r4 : %08lx\n",+ regs->ARM_r7, regs->ARM_r6, regs->ARM_r5, regs->ARM_r4);+ printf ("r3 : %08lx r2 : %08lx r1 : %08lx r0 : %08lx\n",+ regs->ARM_r3, regs->ARM_r2, regs->ARM_r1, regs->ARM_r0);+ printf ("Flags: %c%c%c%c",+ flags & CC_N_BIT ? 'N' : 'n',+ flags & CC_Z_BIT ? 'Z' : 'z',+ flags & CC_C_BIT ? 'C' : 'c', flags & CC_V_BIT ? 'V' : 'v');+ printf (" IRQs %s FIQs %s Mode %s%s\n",+ interrupts_enabled (regs) ? "on" : "off",+ fast_interrupts_enabled (regs) ? "on" : "off",+ processor_modes[processor_mode (regs)],+ thumb_mode (regs) ? " (T)" : "");+}++void do_undefined_instruction (struct pt_regs *pt_regs)+{+ printf ("undefined instruction\n");+ show_regs (pt_regs);+ bad_mode ();+}++void do_software_interrupt (struct pt_regs *pt_regs)+{+ printf ("software interrupt\n");+ show_regs (pt_regs);+ bad_mode ();+}++void do_prefetch_abort (struct pt_regs *pt_regs)+{+ printf ("prefetch abort\n");+ show_regs (pt_regs);+ bad_mode ();+}++void do_data_abort (struct pt_regs *pt_regs)+{+ printf ("data abort\n");+ show_regs (pt_regs);+ bad_mode ();+}++void do_not_used (struct pt_regs *pt_regs)+{+ printf ("not used\n");+ show_regs (pt_regs);+ bad_mode ();+}++void do_fiq (struct pt_regs *pt_regs)+{+ printf ("fast interrupt request\n");+ show_regs (pt_regs);+ bad_mode ();+}++void do_irq (struct pt_regs *pt_regs)+{+ printf ("interrupt request\n");+ show_regs (pt_regs);+ bad_mode ();+}++static ulong timestamp;+static ulong lastdec;++int interrupt_init (void)+{+ T0PR=0x000003e7;+ T0MR0=0x0000ffff;+ T0MCR=0x00000002;+ T0TCR=0x00000003;+ T0TCR=0x00000001;++ lastdec = TIMER_LOAD_VAL;+ timestamp = 0;+ return 0;+}++/*+ * timer without interrupts+ */++void reset_timer (void)+{+ reset_timer_masked ();+}++ulong get_timer (ulong base)+{+ return get_timer_masked () - base;+}++void set_timer (ulong t)+{+ timestamp = t;+}++void udelay (unsigned long usec)+{+ ulong tmo;++ tmo = usec / 1000;+ tmo *= CFG_HZ;+ tmo /= 1000;++ tmo += get_timer (0);++ while (get_timer_masked () < tmo)+ /*NOP*/;+}++void reset_timer_masked (void)+{+ /* reset time */+ lastdec = READ_TIMER;+ timestamp = 0;+}++ulong get_timer_masked (void)+{+ ulong now = READ_TIMER;++ if (now >= lastdec) {+ /* normal mode */+ timestamp += now - lastdec;+ } else {+ /* we have an overflow ... */+ timestamp += now + TIMER_LOAD_VAL - lastdec;+ }+ lastdec = now;++ return timestamp;+}++void udelay_masked (unsigned long usec)+{+ ulong tmo;++ tmo = usec / 1000;+ tmo *= CFG_HZ;+ tmo /= 1000;++ tmo += get_timer (0);++ reset_timer_masked ();++ while (get_timer_masked () < tmo)+ /*NOP*/;+}diff -Naur u-boot-origin/cpu/arm7tdmi/Makefile u-boot-1.1.3/cpu/arm7tdmi/Makefile--- u-boot-origin/cpu/arm7tdmi/Makefile 1970-01-01 07:00:00.000000000 +0700+++ u-boot-1.1.3/cpu/arm7tdmi/Makefile 2005-09-07 09:43:36.000000000 +0800@@ -0,0 +1,43 @@+#+# (C) Copyright 2000-2004+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.+#+# See file CREDITS for list of people who contributed to this+# project.+#+# This program is free software; you can redistribute it and/or+# modify it under the terms of the GNU General Public License as+# published by the Free Software Foundation; either version 2 of+# the License, or (at your option) any later version.+#+# This program is distributed in the hope that it will be useful,+# but WITHOUT ANY WARRANTY; without even the implied warranty of+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the+# GNU General Public License for more details.+#+# You should have received a copy of the GNU General Public License+# along with this program; if not, write to the Free Software+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,+# MA 02111-1307 USA+#++include $(TOPDIR)/config.mk++LIB = lib$(CPU).a++START = start.o+OBJS = serial.o interrupts.o cpu.o++all: .depend $(START) $(LIB)++$(LIB): $(OBJS)+ $(AR) crv $@ $(OBJS)++#########################################################################++.depend: Makefile $(START:.o=.S) $(OBJS:.o=.c)+ $(CC) -M $(CFLAGS) $(START:.o=.S) $(OBJS:.o=.c) > $@++sinclude .depend++#########################################################################diff -Naur u-boot-origin/cpu/arm7tdmi/serial.c u-boot-1.1.3/cpu/arm7tdmi/serial.c--- u-boot-origin/cpu/arm7tdmi/serial.c 1970-01-01 07:00:00.000000000 +0700+++ u-boot-1.1.3/cpu/arm7tdmi/serial.c 2005-09-07 09:43:36.000000000 +0800@@ -0,0 +1,193 @@+/*+ * (C) Copyright 2004+ * DAVE Srl+ * http://www.dave-tech.it+ * http://www.wawnet.biz+ * mailto:info@wawnet.biz+ *+ * (C) Copyright 2002-2004+ * Wolfgang Denk, DENX Software Engineering, <wd@denx.de>+ *+ * (C) Copyright 2002+ * Sysgo Real-Time Solutions, GmbH <www.elinos.com>+ * Marius Groeger <mgroeger@sysgo.de>+ *+ * (C) Copyright 2002+ * Sysgo Real-Time Solutions, GmbH <www.elinos.com>+ * Alex Zuepke <azu@sysgo.de>+ *+ * Copyright (C) 1999 2000 2001 Erik Mouw (J.A.K.Mouw@its.tudelft.nl)+ *+ * This program is free software; you can redistribute it and/or modify+ * it under the terms of the GNU General Public License as published by+ * the Free Software Foundation; either version 2 of the License, or+ * (at your option) any later version.+ *+ * This program is distributed in the hope that it will be useful,+ * but WITHOUT ANY WARRANTY; without even the implied warranty of+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the+ * GNU General Public License for more details.+ *+ * You should have received a copy of the GNU General Public License+ * along with this program; if not, write to the Free Software+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA+ *+ */++#include <common.h>+#include <asm/hardware.h>++#define USRRxData (1 << 0)+#define USRTxHoldEmpty (1 << 6)+#define GET_CHAR(p) p+#define PUT_CHAR(p,c) (p= (unsigned )(c))+#define TX_READY(s) ((s) & USRTxHoldEmpty)+#define RX_DATA(s) ((s) & USRRxData)++/* flush serial input queue. returns 0 on success or negative error+ * number otherwise+ */+static int serial_flush_input(void)+{+ volatile u32 tmp;++ /* keep on reading as long as the receiver is not empty */+ while(RX_DATA(U0LSR)) {+ tmp = GET_CHAR(U0RBR);+ }++ return 0;+}+++/* flush output queue. returns 0 on success or negative error number+ * otherwise+ */+static int serial_flush_output(void)+{+ /* wait until the transmitter is no longer busy */+ while(TX_READY(U0LSR)==0) {+ }++ return 0;+}+++void serial_setbrg (void)+{+ DECLARE_GLOBAL_DATA_PTR;++ u32 divisor = 0;++ /* get correct divisor */+ switch(gd->baudrate) {++ case 1200:+ divisor = 520; + break;++ case 9600:+ divisor = 65;+ break;++ case 19200:+ divisor = 32;+ break;++ case 38400:+ divisor = 16;+++ case 57600:+ divisor = 10;+++ case 115200:+ divisor = 5;++ }+ U0LCR = 0x83;+ if(divisor==520)+ {+ U0DLL = 0x08;+ U0DLM = 0x02;+ }+ else+ U0DLL = divisor;+ U0LCR = 0x03;+ U0IER = 0x00000007;+ U0FCR = 0x00000081;+ serial_flush_output();+ serial_flush_input();+ + for(divisor=0; divisor<100; divisor++) {+ /* NOP */+ }+}+++/*+ * Initialise the serial port with the given baudrate. The settings+ * are always 8 data bits, no parity, 1 stop bit, no start bits.+ *+ */+int serial_init (void)+{+ serial_setbrg ();++ return (0);+}+++/*+ * Output a single byte to the serial port.+ */+void serial_putc (const char c)+{+ /* wait for room in the transmit FIFO */+ while(TX_READY(U0LSR)==0);++ PUT_CHAR(U0THR,c);++ /*+ to be polite with serial console add a line feed+ to the carriage return character+ */+ if (c=='\n')+ serial_putc('\r');+}++/*+ * Read a single byte from the serial port. Returns 1 on success, 0+ * otherwise. When the function is succesfull, the character read is+ * written into its argument c.+ */+int serial_tstc (void)+{+ return (RX_DATA(U0LSR));+}++/*+ * Read a single byte from the serial port. Returns 1 on success, 0+ * otherwise. When the function is succesfull, the character read is+ * written into its argument c.+ */+int serial_getc (void)+{+ int rv;++ for(;;) {+ rv = serial_tstc();++ if(rv > 0)+ return (GET_CHAR(U0RBR));+ }+}++void+serial_puts (const char *s)+{+ while (*s != 0) {+ serial_putc (*s++);+ }+}diff -Naur u-boot-origin/cpu/arm7tdmi/start.S u-boot-1.1.3/cpu/arm7tdmi/start.S--- u-boot-origin/cpu/arm7tdmi/start.S 1970-01-01 07:00:00.000000000 +0700+++ u-boot-1.1.3/cpu/arm7tdmi/start.S 2005-09-08 14:08:38.000000000 +0800@@ -0,0 +1,331 @@+/*+ * Startup Code for lpc2294 CPU-core+ *+ * (C) Copyright 2005+ * jay+ *+ * See file CREDITS for list of people who contributed to this+ * project.+ *+ * This program is free software; you can redistribute it and/or+ * modify it under the terms of the GNU General Public License as+ * published by the Free Software Foundation; either version 2 of+ * the License, or (at your option) any later version.+ *+ * This program is distributed in the hope that it will be useful,+ * but WITHOUT ANY WARRANTY; without even the implied warranty of+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the+ * GNU General Public License for more details.+ *+ * You should have received a copy of the GNU General Public License+ * along with this program; if not, write to the Free Software+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,+ * MA 02111-1307 USA+ */+++#include <config.h>+#include <version.h>+++/*+ * Jump vector table+ */+++.globl _start
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -