diff options
| -rw-r--r-- | packages/uboot/u-boot-1.1.2/u-boot-1.1.2-neon.patch | 19204 | ||||
| -rw-r--r-- | packages/uboot/u-boot_1.1.2.bb | 3 |
2 files changed, 19206 insertions, 1 deletions
diff --git a/packages/uboot/u-boot-1.1.2/u-boot-1.1.2-neon.patch b/packages/uboot/u-boot-1.1.2/u-boot-1.1.2-neon.patch new file mode 100644 index 0000000000..ed959d43d8 --- /dev/null +++ b/packages/uboot/u-boot-1.1.2/u-boot-1.1.2-neon.patch @@ -0,0 +1,19204 @@ +diff -u -r --new-file u-boot-1.1.2/board/bd2003/bd2003.c u-boot-1.1.2-neon/board/bd2003/bd2003.c +--- u-boot-1.1.2/board/bd2003/bd2003.c 1970-01-01 01:00:00.000000000 +0100 ++++ u-boot-1.1.2-neon/board/bd2003/bd2003.c 2007-08-11 21:07:19.000000000 +0200 +@@ -0,0 +1,94 @@ ++/* ++ * (C) Copyright 2002 ++ * Kyle Harris, Nexus Technologies, Inc. kharris@nexus-tech.net ++ * ++ * (C) Copyright 2002 ++ * Sysgo Real-Time Solutions, GmbH <www.elinos.com> ++ * Marius Groeger <mgroeger@sysgo.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 <common.h> ++#include <config.h> ++#include <common.h> ++#include <version.h> ++#include <stdarg.h> ++#include <linux/types.h> ++#include <devices.h> ++#include <lcd.h> ++#include <lcd_panels.h> ++ ++/* ------------------------------------------------------------------------- */ ++/* ++ * LCD panel declarations ++ */ ++ ++vidinfo_t panel_info = { ++ vl_col: 1024, //this is corrected in SetPanelInfo ++ vl_row: 768, ++ vl_bpix: LCD_BPP, ++ vl_lcd_line_length: (320 * NBITS(LCD_BPP) ) >> 3 ++}; ++ ++void disable_lcd_panel( void ) ++{ ++} ++ ++ ++/* ------------------------------------------------------------------------- */ ++ ++ ++/* ++ * Miscelaneous platform dependent initialisations ++ */ ++ ++int board_init (void) ++{ ++ DECLARE_GLOBAL_DATA_PTR; ++ ++ /* memory and cpu-speed are setup before relocation */ ++ /* so we do _nothing_ here */ ++ ++ /* arch number of Neon Board */ ++ gd->bd->bi_arch_number = MACH_TYPE_BD2003 ; ++ ++ /* adress of boot parameters */ ++ gd->bd->bi_boot_params = 0xa0000100; ++ ++ return 0; ++} ++ ++int board_late_init(void) ++{ ++ setenv("stdout", "serial"); ++ setenv("stderr", "serial"); ++ return 0; ++} ++ ++ ++int dram_init (void) ++{ ++ DECLARE_GLOBAL_DATA_PTR; ++ ++ gd->bd->bi_dram[0].start = PHYS_SDRAM_1; ++ gd->bd->bi_dram[0].size = PHYS_SDRAM_1_SIZE; ++ ++ return 0; ++} +diff -u -r --new-file u-boot-1.1.2/board/bd2003/config.mk u-boot-1.1.2-neon/board/bd2003/config.mk +--- u-boot-1.1.2/board/bd2003/config.mk 1970-01-01 01:00:00.000000000 +0100 ++++ u-boot-1.1.2-neon/board/bd2003/config.mk 2007-08-11 21:07:19.000000000 +0200 +@@ -0,0 +1,4 @@ ++#TEXT_BASE = 0xa1700000 ++TEXT_BASE = 0xA1F00000 ++#TEXT_BASE = 0 ++PXALCD = 1 +diff -u -r --new-file u-boot-1.1.2/board/bd2003/.cvsignore u-boot-1.1.2-neon/board/bd2003/.cvsignore +--- u-boot-1.1.2/board/bd2003/.cvsignore 1970-01-01 01:00:00.000000000 +0100 ++++ u-boot-1.1.2-neon/board/bd2003/.cvsignore 2007-08-11 21:07:19.000000000 +0200 +@@ -0,0 +1,2 @@ ++.depend ++ +diff -u -r --new-file u-boot-1.1.2/board/bd2003/flash.c u-boot-1.1.2-neon/board/bd2003/flash.c +--- u-boot-1.1.2/board/bd2003/flash.c 1970-01-01 01:00:00.000000000 +0100 ++++ u-boot-1.1.2-neon/board/bd2003/flash.c 2007-08-11 21:07:19.000000000 +0200 +@@ -0,0 +1,477 @@ ++/* ++ * (C) Copyright 2001 ++ * Kyle Harris, Nexus Technologies, Inc. kharris@nexus-tech.net ++ * ++ * (C) Copyright 2001 ++ * 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 <common.h> ++#include <linux/byteorder/swab.h> ++#include <asm/arch/pxa250Base.h> ++#include <asm/arch/pxaHardware.h> ++#include "lcd.h" ++ ++flash_info_t flash_info[CFG_MAX_FLASH_BANKS]; /* info for FLASH chips */ ++ ++/* Board support for 1 or 2 flash devices */ ++#define FLASH_PORT_WIDTH32 ++#undef FLASH_PORT_WIDTH16 ++ ++#ifdef FLASH_PORT_WIDTH16 ++#define FLASH_PORT_WIDTH ushort ++#define FLASH_PORT_WIDTHV vu_short ++#define SWAP(x) __swab16(x) ++#else ++#define FLASH_PORT_WIDTH ulong ++#define FLASH_PORT_WIDTHV vu_long ++#define SWAP(x) __swab32(x) ++#endif ++ ++#define FPW FLASH_PORT_WIDTH ++#define FPWV FLASH_PORT_WIDTHV ++ ++#define mb() __asm__ __volatile__ ("" : : : "memory") ++ ++/*----------------------------------------------------------------------- ++ * Functions ++ */ ++static ulong flash_get_size (FPW *addr, flash_info_t *info); ++static int write_data (flash_info_t *info, ulong dest, FPW data); ++static void flash_get_offsets (ulong base, flash_info_t *info); ++void inline spin_wheel_init(ulong addr, ulong cnt); ++void inline spin_wheel_done( int worked ); ++void inline spin_wheel (ulong numleft); ++ ++/*----------------------------------------------------------------------- ++ */ ++ulong bases[] = {PHYS_FLASH_1,PHYS_FLASH_2,1}; ++unsigned long flash_init (void) ++{ ++ int i=0; ++ int j=0; ++ ulong size = 0; ++ ulong base; ++ ++ while (i < CFG_MAX_FLASH_BANKS) { ++ base = bases[j++]; ++ flash_info[i].start[0] = 0; ++ if (base & 1) break; ++ if (flash_get_size ((FPW *) base, &flash_info[i])) { ++ flash_get_offsets (base, &flash_info[i]); ++ size += flash_info[i].size; ++ i++; ++ } ++ else { ++printf( "error reading flash size\n" ); ++ } ++ } ++ if (size>0) { ++ base = flash_info[0].start[0]; ++ // Protect monitor and environment sectors ++ flash_protect ( FLAG_PROTECT_SET, ++ base, ++ base + monitor_flash_len - 1, ++ &flash_info[0] ); ++ ++ flash_protect ( FLAG_PROTECT_SET, ++ base+CFG_ENV_OFFSET, ++ base+CFG_ENV_OFFSET + CFG_ENV_SIZE - 1, &flash_info[0] ); ++ } ++ ++ return size; ++} ++ ++/*----------------------------------------------------------------------- ++ */ ++static void flash_get_offsets (ulong base, flash_info_t *info) ++{ ++ int i; ++ ++ if (info->flash_id == FLASH_UNKNOWN) { ++ return; ++ } ++ ++ if ((info->flash_id & FLASH_VENDMASK) == FLASH_MAN_INTEL) { ++ for (i = 0; i < info->sector_count; i++) { ++ info->start[i] = base + (i * PHYS_FLASH_SECT_SIZE); ++ info->protect[i] = 0; ++ } ++ } ++} ++ ++/*----------------------------------------------------------------------- ++ */ ++void flash_print_info (flash_info_t *info) ++{ ++ int i; ++ ++ if (info->flash_id == FLASH_UNKNOWN) { ++ printf ("missing or unknown FLASH type\n"); ++ return; ++ } ++ ++ switch (info->flash_id & FLASH_VENDMASK) { ++ case FLASH_MAN_INTEL: ++ printf ("INTEL "); ++ break; ++ default: ++ printf ("Unknown Vendor "); ++ break; ++ } ++ ++ switch (info->flash_id & FLASH_TYPEMASK) { ++ case FLASH_28F128J3A: ++ printf ("28F128J3A\n"); ++ break; ++ default: ++ printf ("Unknown Chip Type\n"); ++ break; ++ } ++ ++ printf (" Size: %ld MB in %d Sectors\n", ++ info->size >> 20, info->sector_count); ++ ++ printf (" Sector Start Addresses:"); ++ for (i = 0; i < info->sector_count; ++i) { ++ if ((i % 5) == 0) ++ printf ("\n "); ++ printf (" %08lX%s", ++ info->start[i], ++ info->protect[i] ? " (RO)" : " "); ++ } ++ printf ("\n"); ++ return; ++} ++ ++/* ++ * The following code cannot be run from FLASH! ++ */ ++static ulong flash_get_size (FPW *addr, flash_info_t *info) ++{ ++ volatile FPW value; ++ volatile unsigned long *mc = (unsigned long *)MEMORY_CONTROL_BASE; ++ unsigned long val = 1<<3; ++ ++ info->flash_id = FLASH_UNKNOWN; ++ info->sector_count = 0; ++ info->size = 0; ++ ++ if (((ulong)addr) > 0x14000000) return 0; ++ val = mc[(MSC0>>2) +(((ulong)addr)>>27)]; ++ if (((ulong)addr) & 0x04000000) val = val>>16; ++ if ( val & (1<<3)) return 0; //if 16 bit bus then return ++ ++ /* Write auto select command: read Manufacturer ID */ ++ addr[0x5555] = (FPW) 0x00AA00AA; ++ addr[0x2AAA] = (FPW) 0x00550055; ++ addr[0x5555] = (FPW) 0x00900090; ++ ++ mb (); ++ value = addr[0]; ++ ++ switch (value) { ++ ++ case (FPW) 0: ++ case (FPW) INTEL_MANUFACT & 0xFF0000 : ++ case (FPW) INTEL_MANUFACT & 0x0000FF : ++ case (FPW) INTEL_MANUFACT: ++ info->flash_id = FLASH_MAN_INTEL; ++ break; ++ ++ default: ++printf( "Invalid flash manufacturer %x\n", value ); ++ addr[0] = (FPW) 0x00FF00FF; /* restore read mode */ ++ return (0); /* no or unknown flash */ ++ } ++ ++ mb (); ++ value = addr[1]; /* device ID */ ++ ++ switch (value) { ++ ++ case (FPW) 0: ++ case (FPW) INTEL_ID_28F128J3A & 0xFF0000 : ++ case (FPW) INTEL_ID_28F128J3A & 0x0000FF : ++ case (FPW) INTEL_ID_28F128J3A: ++ info->flash_id += FLASH_28F128J3A; ++ info->sector_count = 128; ++ info->size = 0x02000000; ++ break; /* => 16 MB */ ++ ++ default: ++printf( "Unknown flash device %x\n", value ); ++ info->flash_id = FLASH_UNKNOWN; ++ break; ++ } ++ ++ if (info->sector_count > CFG_MAX_FLASH_SECT) { ++ printf ("** ERROR: sector count %d > max (%d) **\n", ++ info->sector_count, CFG_MAX_FLASH_SECT); ++ info->sector_count = CFG_MAX_FLASH_SECT; ++ } ++ ++ addr[0] = (FPW) 0x00FF00FF; /* restore read mode */ ++ ++ return (info->size); ++} ++ ++ ++/*----------------------------------------------------------------------- ++ */ ++ ++int flash_erase (flash_info_t *info, int s_first, int s_last) ++{ ++ int flag, prot, sect; ++ ulong type, start, last; ++ int rcode = 0; ++ ++ if ((s_first < 0) || (s_first > s_last)) { ++ if (info->flash_id == FLASH_UNKNOWN) { ++ printf ("- missing\n"); ++ } else { ++ printf ("- no sectors to erase\n"); ++ } ++ return 1; ++ } ++ ++ type = (info->flash_id & FLASH_VENDMASK); ++ if ((type != FLASH_MAN_INTEL)) { ++ printf ("Can't erase unknown flash type %08lx - aborted\n", ++ info->flash_id); ++ return 1; ++ } ++ ++ prot = 0; ++ for (sect = s_first; sect <= s_last; ++sect) { ++ if (info->protect[sect]) { ++ prot++; ++ } ++ } ++ ++ if (prot) { ++ printf ("- Warning: %d protected sectors will not be erased!\n", ++ prot); ++ } else { ++ printf ("\n"); ++ } ++ ++ start = get_timer (0); ++ last = start; ++ ++ /* Disable interrupts which might cause a timeout here */ ++ flag = disable_interrupts (); ++ ++ /* Start erase on unprotected sectors */ ++ for (sect = s_first; sect <= s_last; sect++) { ++ if (info->protect[sect] == 0) { /* not protected */ ++ char temp[80]; ++ FPWV *addr = (FPWV *) (info->start[sect]); ++ FPW status; ++ ++ sprintf (temp, "Erasing sector %2d ... \r", sect); ++ lcd_puts( temp ); ++ ++ /* arm simple, non interrupt dependent timer */ ++ reset_timer_masked (); ++ ++ *addr = (FPW) 0x00500050; /* clear status register */ ++ *addr = (FPW) 0x00200020; /* erase setup */ ++ *addr = (FPW) 0x00D000D0; /* erase confirm */ ++ ++ while (((status = *addr) & (FPW) 0x00800080) != (FPW) 0x00800080) { ++ if (get_timer_masked () > CFG_FLASH_ERASE_TOUT) { ++ printf ("Timeout\n"); ++ *addr = (FPW) 0x00B000B0; /* suspend erase */ ++ *addr = (FPW) 0x00FF00FF; /* reset to read mode */ ++ rcode = 1; ++ break; ++ } ++ } ++ ++ *addr = 0x00500050; /* clear status register cmd. */ ++ *addr = 0x00FF00FF; /* resest to read mode */ ++ } ++ } ++ lcd_puts( "\r\n" ); ++ return rcode; ++} ++ ++/*----------------------------------------------------------------------- ++ * Copy memory to flash, returns: ++ * 0 - OK ++ * 1 - write timeout ++ * 2 - Flash not erased ++ * 4 - Flash not identified ++ */ ++ ++int write_buff (flash_info_t *info, uchar *src, ulong addr, ulong cnt) ++{ ++ ulong cp, wp; ++ FPW data; ++ int count, i, l, rc, port_width; ++ ++ rc = 0 ; ++ if (info->flash_id == FLASH_UNKNOWN) { ++ return 4; ++ } ++/* get lower word aligned address */ ++#ifdef FLASH_PORT_WIDTH16 ++ wp = (addr & ~1); ++ port_width = 2; ++#else ++ wp = (addr & ~3); ++ port_width = 4; ++#endif ++ ++ spin_wheel_init(addr,cnt); ++ ++ /* ++ * handle unaligned start bytes ++ */ ++ if ((l = addr - wp) != 0) { ++ data = 0; ++ for (i = 0, cp = wp; i < l; ++i, ++cp) { ++ data = (data << 8) | (*(uchar *) cp); ++ } ++ for (; i < port_width && cnt > 0; ++i) { ++ data = (data << 8) | *src++; ++ --cnt; ++ ++cp; ++ } ++ for (; cnt == 0 && i < port_width; ++i, ++cp) { ++ data = (data << 8) | (*(uchar *) cp); ++ } ++ ++ if ((rc = write_data (info, wp, SWAP (data))) != 0) { ++ goto out; ++ } ++ wp += port_width; ++ } ++ ++ /* ++ * handle word aligned part ++ */ ++ count = 0; ++ while (cnt >= port_width) { ++ data = 0; ++ for (i = 0; i < port_width; ++i) { ++ data = (data << 8) | *src++; ++ } ++ if ((rc = write_data (info, wp, SWAP (data))) != 0) { ++ goto out; ++ } ++ wp += port_width; ++ cnt -= port_width; ++ if (count++ > 0x800) { ++ spin_wheel (cnt); ++ count = 0; ++ } ++ } ++ ++ if (cnt) { ++ /* ++ * handle unaligned tail bytes ++ */ ++ data = 0; ++ for (i = 0, cp = wp; i < port_width && cnt > 0; ++i, ++cp) { ++ data = (data << 8) | *src++; ++ --cnt; ++ } ++ for (; i < port_width; ++i, ++cp) { ++ data = (data << 8) | (*(uchar *) cp); ++ } ++ ++ rc = write_data (info, wp, SWAP (data)); ++ } ++ ++out: ++ spin_wheel_done(0 == rc); ++ return rc ; ++} ++ ++/*----------------------------------------------------------------------- ++ * Write a word or halfword to Flash, returns: ++ * 0 - OK ++ * 1 - write timeout ++ * 2 - Flash not erased ++ */ ++static int write_data (flash_info_t *info, ulong dest, FPW data) ++{ ++ FPWV *addr = (FPWV *) dest; ++ FPW old = *addr ; ++ ulong status; ++ int flag; ++ ++ /* Check if Flash is (sufficiently) erased */ ++ if ((old & data) != data) { ++ printf ("not erased at %08lx (%lx)\n", (ulong) addr, old); ++ return (2); ++ } ++ ++ if( old != data ) ++ { ++ /* Disable interrupts which might cause a timeout here */ ++ flag = disable_interrupts (); ++ ++ *addr = (FPW) 0x00400040; /* write setup */ ++ *addr = data; ++ ++ /* arm simple, non interrupt dependent timer */ ++ reset_timer_masked (); ++ ++ /* wait while polling the status register */ ++ while (((status = *addr) & (FPW) 0x00800080) != (FPW) 0x00800080) { ++ if (get_timer_masked () > CFG_FLASH_WRITE_TOUT) { ++ *addr = (FPW) 0x00FF00FF; /* restore read mode */ ++ return (1); ++ } ++ } ++ *addr = (FPW) 0x00FF00FF; /* restore read mode */ ++ } /* need to program? */ ++ ++ ++ return (0); ++} ++ ++void inline spin_wheel_init(ulong addr, ulong cnt) ++{ ++ char temp[80]; ++ sprintf( temp, ++ "\nprogramming flash\n" ++ "%08lx->%08lx\n" ++ " ", addr, cnt ); ++ lcd_puts( temp ); ++} ++ ++void inline spin_wheel_done( int worked ) ++{ ++ if( worked ) ++ spin_wheel(0); ++ lcd_puts( worked ? "\ncompleted.\n" : "\nfailed!\n" ); ++} ++ ++void inline spin_wheel( ulong numleft ) ++{ ++ char temp[40]; ++ sprintf( temp, "\r %08lx", numleft ); ++ lcd_puts( temp ); ++} +diff -u -r --new-file u-boot-1.1.2/board/bd2003/init.script u-boot-1.1.2-neon/board/bd2003/init.script +--- u-boot-1.1.2/board/bd2003/init.script 1970-01-01 01:00:00.000000000 +0100 ++++ u-boot-1.1.2-neon/board/bd2003/init.script 2007-08-11 21:07:19.000000000 +0200 +@@ -0,0 +1,42 @@ ++if fatload mmc 0 a0000000 logo.bmp ; then ++ bmp info a0000000 ; ++ bmp display a0000000 ; ++else ++ lecho "No logo present" ; ++fi ++ ++if fatload mmc 0 a2000000 uimage ; then ++ lecho 'load Linux' ++ if fatload mmc 0 a2200000 mmcinitrd.u-boot ; then ++ echo 'using initrd' ; ++ lecho "Booting Linux" ++ set bootargs root=/dev/ram0 console=ttyS0,115200 debug=7 mtdparts=phys_mapped_flash:1024k(armboot),256k(params),-(rootfs1) ++ bootm a2000000 a2200000 ++ else ++ echo 'testing cramfs img' ; ++ if fatload mmc 0 a2200000 cramfs.img ; then ++ if cmp.b 00140000 a2200000 $filesize ; then ++ echo 'cramfs images match' ; ++ else ++ lecho 'filesystems differ...' ; ++ protect off all ; ++ erase 00140000 01ffffff ; ++ cp.b a2200000 00140000 $filesize ; ++ fi ++ ++ set bootargs console=ttyS0,115200 debug=7 mtdparts=phys_mapped_flash:1024k(armboot),256k(params),-(rootfs1) root=/dev/mtdblock3 rootfstype=cramfs ++ lecho "Booting Linux" ++ bootm a2000000 ++ fi ++ fi ++else ++ echo "No Linux kernel" ; ++fi ++ ++lecho 'No Linux, try CE' ++ ++if fatload mmc 0 A0030000 nk.nb0 ; then ++ g A0030000 ; ++else ++ echo "No WinCE image" ; ++fi +diff -u -r --new-file u-boot-1.1.2/board/bd2003/Makefile u-boot-1.1.2-neon/board/bd2003/Makefile +--- u-boot-1.1.2/board/bd2003/Makefile 1970-01-01 01:00:00.000000000 +0100 ++++ u-boot-1.1.2-neon/board/bd2003/Makefile 2007-08-11 21:07:19.000000000 +0200 +@@ -0,0 +1,48 @@ ++ ++# ++# (C) Copyright 2000 ++# 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$(BOARD).a ++ ++OBJS := bd2003.o flash.o ++SOBJS := memsetup.o ++ ++$(LIB): $(OBJS) $(SOBJS) ++ $(AR) crv $@ $(OBJS) $(SOBJS) ++ ++clean: ++ rm -f $(SOBJS) $(OBJS) ++ ++distclean: clean ++ rm -f $(LIB) core *.bak .depend ++ ++######################################################################### ++ ++.depend: Makefile $(SOBJS:.o=.S) $(OBJS:.o=.c) ++ $(CC) -M $(CPPFLAGS) $(SOBJS:.o=.S) $(OBJS:.o=.c) > $@ ++ ++-include .depend ++ ++######################################################################### +diff -u -r --new-file u-boot-1.1.2/board/bd2003/memsetup.S u-boot-1.1.2-neon/board/bd2003/memsetup.S +--- u-boot-1.1.2/board/bd2003/memsetup.S 1970-01-01 01:00:00.000000000 +0100 ++++ u-boot-1.1.2-neon/board/bd2003/memsetup.S 2007-08-11 21:07:19.000000000 +0200 +@@ -0,0 +1,64 @@ ++/* ++ * Most of this taken from Redboot hal_platform_setup.h with cleanup ++ * ++ * NOTE: I haven't clean this up considerably, just enough to get it ++ * running. See hal_platform_setup.h for the source. See ++ * board/cradle/memsetup.S for another PXA250 setup that is ++ * much cleaner. ++ * ++ * 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> ++ ++#define BAUDRATE 115200 ++#include <asm/arch/platformTypes.h> ++#include <configs/select.h> ++#include <asm/arch/pxaGpio.h> ++#include <asm/arch/pxaMacro3.h> ++ ++DRAM_SIZE: .long CFG_DRAM_SIZE ++ ++/* wait for coprocessor write complete */ ++ .macro CPWAIT reg ++ mrc p15,0,\reg,c2,c0,0 ++ mov \reg,\reg ++ sub pc,pc,#4 ++ .endm ++ ++ ++/* ++ * Memory setup ++ */ ++ ++.globl memsetup ++memsetup: ++ ++ mov r10, lr ++ ++ InitCS0_CS1 r0,sp ++ InitGPIO r0,sp ++ InitIC_Clocks r0,sp ++ InitUART r0,sp,UART_BASE,BAUDRATE ++ InitUART r0,sp,UART_BASE+0x600000,9600 ++ InitChangeCPUSpeed r0 ++ InitMemory r0,sp,r1 ++ ++ mov pc, lr +diff -u -r --new-file u-boot-1.1.2/board/bd2003/u-boot.lds u-boot-1.1.2-neon/board/bd2003/u-boot.lds +--- u-boot-1.1.2/board/bd2003/u-boot.lds 1970-01-01 01:00:00.000000000 +0100 ++++ u-boot-1.1.2-neon/board/bd2003/u-boot.lds 2007-08-11 21:07:19.000000000 +0200 +@@ -0,0 +1,56 @@ ++/* ++ * (C) Copyright 2000 ++ * 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 ++ */ ++ ++OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm") ++OUTPUT_ARCH(arm) ++ENTRY(_start) ++SECTIONS ++{ ++ . = 0x00000000; ++ ++ . = ALIGN(4); ++ .text : ++ { ++ cpu/pxa/start.o (.text) ++ cpu/pxa/ministart.o (.text) ++ *(.text) ++ } ++ ++ . = ALIGN(4); ++ .rodata : { *(.rodata) } ++ ++ . = ALIGN(4); ++ .data : { *(.data) } ++ ++ . = ALIGN(4); ++ .got : { *(.got) } ++ ++ __u_boot_cmd_start = .; ++ .u_boot_cmd : { *(.u_boot_cmd) } ++ __u_boot_cmd_end = .; ++ ++ . = ALIGN(4); ++ __bss_start = .; ++ .bss : { *(.bss) } ++ _end = .; ++} +diff -u -r --new-file u-boot-1.1.2/board/bd2003/u-bootmini.lds u-boot-1.1.2-neon/board/bd2003/u-bootmini.lds +--- u-boot-1.1.2/board/bd2003/u-bootmini.lds 1970-01-01 01:00:00.000000000 +0100 ++++ u-boot-1.1.2-neon/board/bd2003/u-bootmini.lds 2007-08-11 21:07:19.000000000 +0200 +@@ -0,0 +1,56 @@ ++/* ++ * (C) Copyright 2000 ++ * 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 ++ */ ++ ++OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm") ++OUTPUT_ARCH(arm) ++ENTRY(StartUp) ++SECTIONS ++{ ++ . = 0x00000000; ++ ++ . = ALIGN(4); ++ .text : ++ { ++ cpu/pxa/minidebug.o (.text) ++ cpu/pxa/ministart.o (.text) ++ *(.text) ++ } ++ ++ . = ALIGN(4); ++ .rodata : { *(.rodata) } ++ ++ . = ALIGN(4); ++ .data : { *(.data) } ++ ++ . = ALIGN(4); ++ .got : { *(.got) } ++ ++ __u_boot_cmd_start = .; ++ .u_boot_cmd : { *(.u_boot_cmd) } ++ __u_boot_cmd_end = .; ++ ++ . = ALIGN(4); ++ __bss_start = .; ++ .bss : { *(.bss) } ++ _end = .; ++} +diff -u -r --new-file u-boot-1.1.2/board/halogen/config.mk u-boot-1.1.2-neon/board/halogen/config.mk +--- u-boot-1.1.2/board/halogen/config.mk 1970-01-01 01:00:00.000000000 +0100 ++++ u-boot-1.1.2-neon/board/halogen/config.mk 2007-08-11 21:07:19.000000000 +0200 +@@ -0,0 +1,4 @@ ++#TEXT_BASE = 0xa1700000 ++TEXT_BASE = 0xA1F00000 ++#TEXT_BASE = 0 ++PXALCD = 1 +diff -u -r --new-file u-boot-1.1.2/board/halogen/.cvsignore u-boot-1.1.2-neon/board/halogen/.cvsignore +--- u-boot-1.1.2/board/halogen/.cvsignore 1970-01-01 01:00:00.000000000 +0100 ++++ u-boot-1.1.2-neon/board/halogen/.cvsignore 2007-08-11 21:07:19.000000000 +0200 +@@ -0,0 +1,2 @@ ++.depend ++ +diff -u -r --new-file u-boot-1.1.2/board/halogen/flash.c u-boot-1.1.2-neon/board/halogen/flash.c +--- u-boot-1.1.2/board/halogen/flash.c 1970-01-01 01:00:00.000000000 +0100 ++++ u-boot-1.1.2-neon/board/halogen/flash.c 2007-08-11 21:07:19.000000000 +0200 +@@ -0,0 +1,482 @@ ++/* ++ * (C) Copyright 2001 ++ * Kyle Harris, Nexus Technologies, Inc. kharris@nexus-tech.net ++ * ++ * (C) Copyright 2001 ++ * 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 <common.h> ++#include <linux/byteorder/swab.h> ++#include <asm/arch/pxa250Base.h> ++#include <asm/arch/pxaHardware.h> ++#include "lcd.h" ++ ++flash_info_t flash_info[CFG_MAX_FLASH_BANKS]; /* info for FLASH chips */ ++ ++/* Board support for 1 or 2 flash devices */ ++#define FLASH_PORT_WIDTH32 ++#undef FLASH_PORT_WIDTH16 ++ ++#ifdef FLASH_PORT_WIDTH16 ++#define FLASH_PORT_WIDTH ushort ++#define FLASH_PORT_WIDTHV vu_short ++#define SWAP(x) __swab16(x) ++#else ++#define FLASH_PORT_WIDTH ulong ++#define FLASH_PORT_WIDTHV vu_long ++#define SWAP(x) __swab32(x) ++#endif ++ ++#define FPW FLASH_PORT_WIDTH ++#define FPWV FLASH_PORT_WIDTHV ++ ++#define mb() __asm__ __volatile__ ("" : : : "memory") ++ ++/*----------------------------------------------------------------------- ++ * Functions ++ */ ++static ulong flash_get_size (FPW *addr, flash_info_t *info); ++static int write_data (flash_info_t *info, ulong dest, FPW data); ++static void flash_get_offsets (ulong base, flash_info_t *info); ++void inline spin_wheel_init(ulong addr, ulong cnt); ++void inline spin_wheel_done( int worked ); ++void inline spin_wheel (ulong numleft); ++ ++/*----------------------------------------------------------------------- ++ */ ++ulong bases[] = {PHYS_FLASH_1,PHYS_FLASH_2,1}; ++unsigned long flash_init (void) ++{ ++ int i=0; ++ int j=0; ++ ulong size = 0; ++ ulong base; ++ ++ while (i < CFG_MAX_FLASH_BANKS) { ++ base = bases[j++]; ++ flash_info[i].start[0] = 0; ++ if (base & 1) break; ++ if (flash_get_size ((FPW *) base, &flash_info[i])) { ++ flash_get_offsets (base, &flash_info[i]); ++ size += flash_info[i].size; ++ i++; ++ } ++ else { ++printf( "error reading flash size\n" ); ++ } ++ } ++ if (size>0) { ++ base = flash_info[0].start[0]; ++ // Protect monitor and environment sectors ++ flash_protect ( FLAG_PROTECT_SET, ++ base, ++ base + monitor_flash_len - 1, ++ &flash_info[0] ); ++ ++ flash_protect ( FLAG_PROTECT_SET, ++ base+CFG_ENV_OFFSET, ++ base+CFG_ENV_OFFSET + CFG_ENV_SIZE - 1, &flash_info[0] ); ++ } ++ ++ return size; ++} ++ ++/*----------------------------------------------------------------------- ++ */ ++static void flash_get_offsets (ulong base, flash_info_t *info) ++{ ++ int i; ++ ++ if (info->flash_id == FLASH_UNKNOWN) { ++ return; ++ } ++ ++ if ((info->flash_id & FLASH_VENDMASK) == FLASH_MAN_INTEL) { ++ for (i = 0; i < info->sector_count; i++) { ++ info->start[i] = base + (i * PHYS_FLASH_SECT_SIZE); ++ info->protect[i] = 0; ++ } ++ } ++} ++ ++/*----------------------------------------------------------------------- ++ */ ++void flash_print_info (flash_info_t *info) ++{ ++ int i; ++ ++ if (info->flash_id == FLASH_UNKNOWN) { ++ printf ("missing or unknown FLASH type\n"); ++ return; ++ } ++ ++ switch (info->flash_id & FLASH_VENDMASK) { ++ case FLASH_MAN_INTEL: ++ printf ("INTEL "); ++ break; ++ default: ++ printf ("Unknown Vendor "); ++ break; ++ } ++ ++ switch (info->flash_id & FLASH_TYPEMASK) { ++ case FLASH_28F128J3A: ++ printf ("28F128J3A\n"); ++ break; ++ default: ++ printf ("Unknown Chip Type\n"); ++ break; ++ } ++ ++ printf (" Size: %ld MB in %d Sectors\n", ++ info->size >> 20, info->sector_count); ++ ++ printf (" Sector Start Addresses:"); ++ for (i = 0; i < info->sector_count; ++i) { ++ if ((i % 5) == 0) ++ printf ("\n "); ++ printf (" %08lX%s", ++ info->start[i], ++ info->protect[i] ? " (RO)" : " "); ++ } ++ printf ("\n"); ++ return; ++} ++ ++/* ++ * The following code cannot be run from FLASH! ++ */ ++static ulong flash_get_size (FPW *addr, flash_info_t *info) ++{ ++ volatile FPW value; ++ volatile unsigned long *mc = (unsigned long *)MEMORY_CONTROL_BASE; ++ unsigned long val = 1<<3; ++ ++ info->flash_id = FLASH_UNKNOWN; ++ info->sector_count = 0; ++ info->size = 0; ++ ++ if (((ulong)addr) > 0x14000000) return 0; ++ val = mc[(MSC0>>2) +(((ulong)addr)>>27)]; ++ if (((ulong)addr) & 0x04000000) val = val>>16; ++ if ( val & (1<<3)) return 0; //if 16 bit bus then return ++ ++ /* Write auto select command: read Manufacturer ID */ ++ addr[0x5555] = (FPW) 0x00AA00AA; ++ addr[0x2AAA] = (FPW) 0x00550055; ++ addr[0x5555] = (FPW) 0x00900090; ++ ++ mb (); ++ value = addr[0]; ++ ++ switch (value) { ++ ++ case (FPW) 0: ++ case (FPW) STM_MANUFACT: ++ case (FPW) INTEL_MANUFACT & 0xFF0000 : ++ case (FPW) INTEL_MANUFACT & 0x0000FF : ++ case (FPW) INTEL_MANUFACT: ++ info->flash_id = FLASH_MAN_INTEL; ++ break; ++ ++ default: ++printf( "Invalid flash manufacturer %x\n", value ); ++ addr[0] = (FPW) 0x00FF00FF; /* restore read mode */ ++ return (0); /* no or unknown flash */ ++ } ++ ++ mb (); ++ value = addr[1]; /* device ID */ ++ ++ switch (value) { ++ ++ case (FPW) 0: ++ case (FPW) INTEL_ID_28F128J3A & 0xFF0000 : ++ case (FPW) INTEL_ID_28F128J3A & 0x0000FF : ++ case (FPW) INTEL_ID_28F128J3A: ++ info->flash_id += FLASH_28F128J3A; ++ info->sector_count = 128; ++ info->size = 0x01000000; ++ break; /* => 16 MB x 1 */ ++ case (FPW) INTEL_ID_28F320J3A: ++ info->flash_id += FLASH_28F320J3A; ++ info->sector_count = 32 ; ++ info->size = 0x400000 ; ++ break; /* => 4 MB x 1 */ ++ default: ++printf( "Unknown flash device %x\n", value ); ++ info->flash_id = FLASH_UNKNOWN; ++ break; ++ } ++ ++ if (info->sector_count > CFG_MAX_FLASH_SECT) { ++ printf ("** ERROR: sector count %d > max (%d) **\n", ++ info->sector_count, CFG_MAX_FLASH_SECT); ++ info->sector_count = CFG_MAX_FLASH_SECT; ++ } ++ ++ addr[0] = (FPW) 0x00FF00FF; /* restore read mode */ ++ ++ return (info->size); ++} ++ ++ ++/*----------------------------------------------------------------------- ++ */ ++ ++int flash_erase (flash_info_t *info, int s_first, int s_last) ++{ ++ int flag, prot, sect; ++ ulong type, start, last; ++ int rcode = 0; ++ ++ if ((s_first < 0) || (s_first > s_last)) { ++ if (info->flash_id == FLASH_UNKNOWN) { ++ printf ("- missing\n"); ++ } else { ++ printf ("- no sectors to erase\n"); ++ } ++ return 1; ++ } ++ ++ type = (info->flash_id & FLASH_VENDMASK); ++ if ((type != FLASH_MAN_INTEL)) { ++ printf ("Can't erase unknown flash type %08lx - aborted\n", ++ info->flash_id); ++ return 1; ++ |
