📄 autoboot-1.3.0.patch
字号:
diff -urN u-boot-1.3.0.orig/Makefile u-boot-1.3.0/Makefile--- u-boot-1.3.0.orig/Makefile 2007-11-28 11:52:23.000000000 +0800+++ u-boot-1.3.0/Makefile 2008-03-18 15:11:55.000000000 +0800@@ -126,7 +126,8 @@ CROSS_COMPILE = ppc_8xx- endif ifeq ($(ARCH),arm)-CROSS_COMPILE = arm-linux-+#CROSS_COMPILE = arm-linux-+CROSS_COMPILE = /usr/local/arm/arm-2007q1/bin/arm-none-linux-gnueabi- endif ifeq ($(ARCH),i386) CROSS_COMPILE = i386-linux-@@ -269,6 +270,7 @@ $(obj)u-boot.bin: $(obj)u-boot $(OBJCOPY) ${OBJCFLAGS} -O binary $< $@+ autozip $@ && cp $@ $@.gz /mnt/hgfs/common $(obj)u-boot.img: $(obj)u-boot.bin ./tools/mkimage -A $(ARCH) -T firmware -C none \@@ -2646,7 +2648,7 @@ | xargs -0 rm -f rm -f $(OBJS) $(obj)*.bak $(obj)ctags $(obj)etags $(obj)TAGS $(obj)include/version_autogenerated.h rm -fr $(obj)*.*~- rm -f $(obj)u-boot $(obj)u-boot.map $(obj)u-boot.hex $(ALL)+ rm -f $(obj)u-boot $(obj)u-boot.map $(obj)u-boot.hex $(ALL) $(obj)u-boot.bin.gz rm -f $(obj)tools/crc32.c $(obj)tools/environment.c $(obj)tools/env/crc32.c $(obj)tools/sha1.c rm -f $(obj)tools/inca-swap-bytes $(obj)cpu/mpc824x/bedbug_603e.c rm -f $(obj)include/asm/proc $(obj)include/asm/arch $(obj)include/asm@@ -2666,3 +2668,10 @@ gtar --force-local -zcvf `date "+$$F-%Y-%m-%d-%T.tar.gz"` $$F #########################################################################++#+# make { your board }+#++%: distclean %_config+ $(MAKE) && echo "^_^ Succeed!"diff -urN u-boot-1.3.0.orig/board/at91rm9200dk/flash.c u-boot-1.3.0/board/at91rm9200dk/flash.c--- u-boot-1.3.0.orig/board/at91rm9200dk/flash.c 2007-11-28 11:52:23.000000000 +0800+++ u-boot-1.3.0/board/at91rm9200dk/flash.c 2008-03-18 15:11:55.000000000 +0800@@ -1,11 +1,9 @@ /*- * (C) Copyright 2002- * Lineo, Inc. <www.lineo.com>- * Bernhard Kuhn <bkuhn@lineo.com>+ * (C) Copyright 2001+ * Kyle Harris, Nexus Technologies, Inc. kharris@nexus-tech.net *- * (C) Copyright 2002- * Sysgo Real-Time Solutions, GmbH <www.elinos.com>- * Alex Zuepke <azu@sysgo.de>+ * (C) Copyright 2001-2004+ * Wolfgang Denk, DENX Software Engineering, wd@denx.de. * * See file CREDITS for list of people who contributed to this * project.@@ -27,220 +25,128 @@ */ #include <common.h>+#include <linux/byteorder/swab.h> -ulong myflush(void); +flash_info_t flash_info[CFG_MAX_FLASH_BANKS]; /* info for FLASH chips */ -/* Flash Organization Structure */-typedef struct OrgDef-{- unsigned int sector_number;- unsigned int sector_size;-} OrgDef;-+/* Board support for 1 or 2 flash devices */+#undef FLASH_PORT_WIDTH32+#define 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++/* Intel-compatible flash ID */+#define INTEL_COMPAT 0x00890089+#define INTEL_ALT 0x00B000B0++/* Intel-compatible flash commands */+#define INTEL_PROGRAM 0x00100010+#define INTEL_ERASE 0x00200020+#define INTEL_CLEAR 0x00500050+#define INTEL_LOCKBIT 0x00600060+#define INTEL_PROTECT 0x00010001+#define INTEL_STATUS 0x00700070+#define INTEL_READID 0x00900090+#define INTEL_CONFIRM 0x00D000D0+#define INTEL_RESET 0xFFFFFFFF++/* Intel-compatible flash status bits */+#define INTEL_FINISHED 0x00800080+#define INTEL_OK 0x00800080 -/* Flash Organizations */-OrgDef OrgAT49BV16x4[] =-{- { 8, 8*1024 }, /* 8 * 8 kBytes sectors */- { 2, 32*1024 }, /* 2 * 32 kBytes sectors */- { 30, 64*1024 }, /* 30 * 64 kBytes sectors */-};--OrgDef OrgAT49BV16x4A[] =-{- { 8, 8*1024 }, /* 8 * 8 kBytes sectors */- { 31, 64*1024 }, /* 31 * 64 kBytes sectors */-};+#define FPW FLASH_PORT_WIDTH+#define FPWV FLASH_PORT_WIDTHV -OrgDef OrgAT49BV6416[] =-{- { 8, 8*1024 }, /* 8 * 8 kBytes sectors */- { 127, 64*1024 }, /* 127 * 64 kBytes sectors */-};--flash_info_t flash_info[CFG_MAX_FLASH_BANKS];--/* AT49BV1614A Codes */-#define FLASH_CODE1 0xAA-#define FLASH_CODE2 0x55-#define ID_IN_CODE 0x90-#define ID_OUT_CODE 0xF0---#define CMD_READ_ARRAY 0x00F0-#define CMD_UNLOCK1 0x00AA-#define CMD_UNLOCK2 0x0055-#define CMD_ERASE_SETUP 0x0080-#define CMD_ERASE_CONFIRM 0x0030-#define CMD_PROGRAM 0x00A0-#define CMD_UNLOCK_BYPASS 0x0020-#define CMD_SECTOR_UNLOCK 0x0070--#define MEM_FLASH_ADDR1 (*(volatile u16 *)(CFG_FLASH_BASE + (0x00005555<<1)))-#define MEM_FLASH_ADDR2 (*(volatile u16 *)(CFG_FLASH_BASE + (0x00002AAA<<1)))--#define BIT_ERASE_DONE 0x0080-#define BIT_RDY_MASK 0x0080-#define BIT_PROGRAM_ERROR 0x0020-#define BIT_TIMEOUT 0x80000000 /* our flag */--#define READY 1-#define ERR 2-#define TMO 4+#define mb() __asm__ __volatile__ ("" : : : "memory") /*-----------------------------------------------------------------------+ * Functions */-void flash_identification (flash_info_t * info)-{- volatile u16 manuf_code, device_code, add_device_code;-- MEM_FLASH_ADDR1 = FLASH_CODE1;- MEM_FLASH_ADDR2 = FLASH_CODE2;- MEM_FLASH_ADDR1 = ID_IN_CODE;-- manuf_code = *(volatile u16 *) CFG_FLASH_BASE;- device_code = *(volatile u16 *) (CFG_FLASH_BASE + 2);- add_device_code = *(volatile u16 *) (CFG_FLASH_BASE + (3 << 1));-- MEM_FLASH_ADDR1 = FLASH_CODE1;- MEM_FLASH_ADDR2 = FLASH_CODE2;- MEM_FLASH_ADDR1 = ID_OUT_CODE;-- /* Vendor type */- info->flash_id = ATM_MANUFACT & FLASH_VENDMASK;- printf ("Atmel: ");-- if ((device_code & FLASH_TYPEMASK) == (ATM_ID_BV1614 & FLASH_TYPEMASK)) {-- if ((add_device_code & FLASH_TYPEMASK) ==- (ATM_ID_BV1614A & FLASH_TYPEMASK)) {- info->flash_id |= ATM_ID_BV1614A & FLASH_TYPEMASK;- printf ("AT49BV1614A (16Mbit)\n");- } else { /* AT49BV1614 Flash */- info->flash_id |= ATM_ID_BV1614 & FLASH_TYPEMASK;- printf ("AT49BV1614 (16Mbit)\n");- }-- } else if ((device_code & FLASH_TYPEMASK) == (ATM_ID_BV6416 & FLASH_TYPEMASK)) {- info->flash_id |= ATM_ID_BV6416 & FLASH_TYPEMASK;- printf ("AT49BV6416 (64Mbit)\n");- }-}--ushort flash_number_sector(OrgDef *pOrgDef, unsigned int nb_blocks)-{- int i, nb_sectors = 0;-- for (i=0; i<nb_blocks; i++){- nb_sectors += pOrgDef[i].sector_number;- }-- return nb_sectors;-}--void flash_unlock_sector(flash_info_t * info, unsigned int sector)-{- volatile u16 *addr = (volatile u16 *) (info->start[sector]);-- MEM_FLASH_ADDR1 = CMD_UNLOCK1;- *addr = CMD_SECTOR_UNLOCK;-}+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 (void); +/*-----------------------------------------------------------------------+ */ -ulong flash_init (void)+unsigned long flash_init (void) {- int i, j, k;- unsigned int flash_nb_blocks, sector;- unsigned int start_address;- OrgDef *pOrgDef;-+ int i; ulong size = 0; for (i = 0; i < CFG_MAX_FLASH_BANKS; i++) {- ulong flashbase = 0;-- flash_identification (&flash_info[i]);-- if ((flash_info[i].flash_id & FLASH_TYPEMASK) ==- (ATM_ID_BV1614 & FLASH_TYPEMASK)) {-- pOrgDef = OrgAT49BV16x4;- flash_nb_blocks = sizeof (OrgAT49BV16x4) / sizeof (OrgDef);- } else if ((flash_info[i].flash_id & FLASH_TYPEMASK) ==- (ATM_ID_BV1614A & FLASH_TYPEMASK)){ /* AT49BV1614A Flash */-- pOrgDef = OrgAT49BV16x4A;- flash_nb_blocks = sizeof (OrgAT49BV16x4A) / sizeof (OrgDef);- } else if ((flash_info[i].flash_id & FLASH_TYPEMASK) ==- (ATM_ID_BV6416 & FLASH_TYPEMASK)){ /* AT49BV6416 Flash */-- pOrgDef = OrgAT49BV6416;- flash_nb_blocks = sizeof (OrgAT49BV6416) / sizeof (OrgDef);- } else {- flash_nb_blocks = 0;- pOrgDef = OrgAT49BV16x4;+ switch (i) {+ case 0:+ flash_get_size ((FPW *) PHYS_FLASH_1, &flash_info[i]);+ flash_get_offsets (PHYS_FLASH_1, &flash_info[i]);+ break;+ case 1:+ flash_get_size ((FPW *) PHYS_FLASH_2, &flash_info[i]);+ flash_get_offsets (PHYS_FLASH_2, &flash_info[i]);+ break;+ default:+ panic ("configured to many flash banks!\n");+ break; }+ size += flash_info[i].size;+ } - flash_info[i].sector_count = flash_number_sector(pOrgDef, flash_nb_blocks);- memset (flash_info[i].protect, 0, flash_info[i].sector_count);+ /* Protect monitor and environment sectors+ */+ flash_protect ( FLAG_PROTECT_SET,+ CFG_FLASH_BASE,+ CFG_FLASH_BASE + monitor_flash_len - 1,+ &flash_info[0] );++ flash_protect ( FLAG_PROTECT_SET,+ CFG_ENV_ADDR,+ CFG_ENV_ADDR + CFG_ENV_SIZE - 1, &flash_info[0] ); - if (i == 0)- flashbase = PHYS_FLASH_1;- else- panic ("configured too many flash banks!\n");-- sector = 0;- start_address = flashbase;- flash_info[i].size = 0;-- for (j = 0; j < flash_nb_blocks; j++) {- for (k = 0; k < pOrgDef[j].sector_number; k++) {- flash_info[i].start[sector++] = start_address;- start_address += pOrgDef[j].sector_size;- flash_info[i].size += pOrgDef[j].sector_size;- }- }+ return size;+} - size += flash_info[i].size;+/*-----------------------------------------------------------------------+ */+static void flash_get_offsets (ulong base, flash_info_t *info)+{+ int i; - if ((flash_info[i].flash_id & FLASH_TYPEMASK) ==- (ATM_ID_BV6416 & FLASH_TYPEMASK)){ /* AT49BV6416 Flash */+ if (info->flash_id == FLASH_UNKNOWN) {+ return;+ } - /* Unlock all sectors at reset */- for (j=0; j<flash_info[i].sector_count; j++){- flash_unlock_sector(&flash_info[i], j);- }+ 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; } }-- /* Protect binary boot image */- flash_protect (FLAG_PROTECT_SET,- CFG_FLASH_BASE,- CFG_FLASH_BASE + CFG_BOOT_SIZE - 1, &flash_info[0]);-- /* Protect environment variables */- flash_protect (FLAG_PROTECT_SET,- CFG_ENV_ADDR,- CFG_ENV_ADDR + CFG_ENV_SIZE - 1, &flash_info[0]);-- /* Protect U-Boot gzipped image */- flash_protect (FLAG_PROTECT_SET,- CFG_U_BOOT_BASE,- CFG_U_BOOT_BASE + CFG_U_BOOT_SIZE - 1, &flash_info[0]);-- return size; } /*----------------------------------------------------------------------- */-void flash_print_info (flash_info_t * info)+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 (ATM_MANUFACT & FLASH_VENDMASK):- printf ("Atmel: ");+ case FLASH_MAN_INTEL:+ printf ("INTEL "); break; default: printf ("Unknown Vendor ");@@ -248,56 +154,119 @@ } switch (info->flash_id & FLASH_TYPEMASK) {- case (ATM_ID_BV1614 & FLASH_TYPEMASK):- printf ("AT49BV1614 (16Mbit)\n");- break;- case (ATM_ID_BV1614A & FLASH_TYPEMASK):- printf ("AT49BV1614A (16Mbit)\n");+ case FLASH_28F128J3A:+ printf ("28F128J3A\n"); break;- case (ATM_ID_BV6416 & FLASH_TYPEMASK):- printf ("AT49BV6416 (64Mbit)\n");++ case FLASH_28F640J3A:+ printf ("28F640J3A\n"); break; default: printf ("Unknown Chip Type\n");- return;+ break; } printf (" Size: %ld MB in %d Sectors\n",- info->size >> 20, info->sector_count);+ info->size >> 20, info->sector_count); printf (" Sector Start Addresses:");- for (i = 0; i < info->sector_count; i++) {- if ((i % 5) == 0) {+ for (i = 0; i < info->sector_count; ++i) {+ if ((i % 5) == 0) printf ("\n ");- }- printf (" %08lX%s", info->start[i],+ printf (" %08lX%s",+ info->start[i], info->protect[i] ? " (RO)" : " "); } printf ("\n");+ return; } -/*-----------------------------------------------------------------------+/*+ * The following code cannot be run from FLASH!
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -