⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 autoboot-1.3.0.patch

📁 针对AT91RM9200的U-BOOT1.30制作的官方AT91RM9200DK的补丁
💻 PATCH
📖 第 1 页 / 共 3 页
字号:
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 + -