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

📄 nand_write_yaffs.patch

📁 uboot nandflash 启动补丁文件
💻 PATCH
📖 第 1 页 / 共 5 页
字号:
+					ret = nand_read_oob (nand_dev_desc + curr_device,+							     off, size, (size_t *) & total,+							     (u_char *) addr);+				} else {+					ret = nand_write_oob (nand_dev_desc + curr_device,+							      off, size, (size_t *) & total,+							      (u_char *) addr);+				}+				return ret;+			} else if (cmdtail && !strncmp (cmdtail, ".jffs2", 2))+				cmd |= NANDRW_JFFS2;	/* skip bad blocks */+			else if (cmdtail && !strncmp (cmdtail, ".jffs2s", 2)) {+				cmd |= NANDRW_JFFS2;	/* skip bad blocks (on read too) */+				if (cmd & NANDRW_READ)+					cmd |= NANDRW_JFFS2_SKIP;	/* skip bad blocks (on read too) */+			}+#ifdef SXNI855T+			/* need ".e" same as ".j" for compatibility with older units */+			else if (cmdtail && !strcmp (cmdtail, ".e"))+				cmd |= NANDRW_JFFS2;	/* skip bad blocks */+#endif+#ifdef CFG_NAND_SKIP_BAD_DOT_I+			/* need ".i" same as ".jffs2s" for compatibility with older units (esd) */+			/* ".i" for image -> read skips bad block (no 0xff) */+			else if (cmdtail && !strcmp (cmdtail, ".i")) {+				cmd |= NANDRW_JFFS2;	/* skip bad blocks (on read too) */+				if (cmd & NANDRW_READ)+					cmd |= NANDRW_JFFS2_SKIP;	/* skip bad blocks (on read too) */+			}+#endif /* CFG_NAND_SKIP_BAD_DOT_I */+			else if (cmdtail) {+				printf ("Usage:\n%s\n", cmdtp->usage);+				return 1;+			}++			printf ("\nNAND %s: device %d offset %ld, size %ld ...\n",+				(cmd & NANDRW_READ) ? "read" : "write",+				curr_device, off, size);++			ret = nand_legacy_rw (nand_dev_desc + curr_device,+					      cmd, off, size,+					      (size_t *) & total,+					      (u_char *) addr);++			printf (" %d bytes %s: %s\n", total,+				(cmd & NANDRW_READ) ? "read" : "written",+				ret ? "ERROR" : "OK");++			return ret;+		} else if (strcmp (argv[1], "erase") == 0 &&+			   (argc == 4 || strcmp ("clean", argv[2]) == 0)) {+			int clean = argc == 5;+			ulong off =+				simple_strtoul (argv[2 + clean], NULL, 16);+			ulong size =+				simple_strtoul (argv[3 + clean], NULL, 16);+			int ret;++			printf ("\nNAND erase: device %d offset %ld, size %ld ...\n",+				curr_device, off, size);++			ret = nand_legacy_erase (nand_dev_desc + curr_device,+						 off, size, clean);++			printf ("%s\n", ret ? "ERROR" : "OK");++			return ret;+		} else {+			printf ("Usage:\n%s\n", cmdtp->usage);+			rcode = 1;+		}++		return rcode;+	}+}++U_BOOT_CMD(+	nand,	5,	1,	do_nand,+	"nand    - legacy NAND sub-system\n",+	"info  - show available NAND devices\n"+	"nand device [dev] - show or set current device\n"+	"nand read[.jffs2[s]]  addr off size\n"+	"nand write[.jffs2] addr off size - read/write `size' bytes starting\n"+	"    at offset `off' to/from memory address `addr'\n"+	"nand erase [clean] [off size] - erase `size' bytes from\n"+	"    offset `off' (entire device if not specified)\n"+	"nand bad - show bad blocks\n"+	"nand read.oob addr off size - read out-of-band data\n"+	"nand write.oob addr off size - read out-of-band data\n"+);++int do_nandboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])+{+	char *boot_device = NULL;+	char *ep;+	int dev;+	ulong cnt;+	ulong addr;+	ulong offset = 0;+	image_header_t *hdr;+	int rcode = 0;+	switch (argc) {+	case 1:+		addr = CFG_LOAD_ADDR;+		boot_device = getenv ("bootdevice");+		break;+	case 2:+		addr = simple_strtoul(argv[1], NULL, 16);+		boot_device = getenv ("bootdevice");+		break;+	case 3:+		addr = simple_strtoul(argv[1], NULL, 16);+		boot_device = argv[2];+		break;+	case 4:+		addr = simple_strtoul(argv[1], NULL, 16);+		boot_device = argv[2];+		offset = simple_strtoul(argv[3], NULL, 16);+		break;+	default:+		printf ("Usage:\n%s\n", cmdtp->usage);+		SHOW_BOOT_PROGRESS (-1);+		return 1;+	}++	if (!boot_device) {+		puts ("\n** No boot device **\n");+		SHOW_BOOT_PROGRESS (-1);+		return 1;+	}++	dev = simple_strtoul(boot_device, &ep, 16);++	if ((dev >= CFG_MAX_NAND_DEVICE) ||+	    (nand_dev_desc[dev].ChipID == NAND_ChipID_UNKNOWN)) {+		printf ("\n** Device %d not available\n", dev);+		SHOW_BOOT_PROGRESS (-1);+		return 1;+	}++	printf ("\nLoading from device %d: %s at 0x%lx (offset 0x%lx)\n",+		dev, nand_dev_desc[dev].name, nand_dev_desc[dev].IO_ADDR,+		offset);++	if (nand_legacy_rw (nand_dev_desc + dev, NANDRW_READ, offset,+			SECTORSIZE, NULL, (u_char *)addr)) {+		printf ("** Read error on %d\n", dev);+		SHOW_BOOT_PROGRESS (-1);+		return 1;+	}++	hdr = (image_header_t *)addr;++	if (ntohl(hdr->ih_magic) == IH_MAGIC) {++		print_image_hdr (hdr);++		cnt = (ntohl(hdr->ih_size) + sizeof(image_header_t));+		cnt -= SECTORSIZE;+	} else {+		printf ("\n** Bad Magic Number 0x%x **\n", ntohl(hdr->ih_magic));+		SHOW_BOOT_PROGRESS (-1);+		return 1;+	}++	if (nand_legacy_rw (nand_dev_desc + dev, NANDRW_READ,+			offset + SECTORSIZE, cnt, NULL,+			(u_char *)(addr+SECTORSIZE))) {+		printf ("** Read error on %d\n", dev);+		SHOW_BOOT_PROGRESS (-1);+		return 1;+	}++	/* Loading ok, update default load address */++	load_addr = addr;++	/* Check if we should attempt an auto-start */+	if (((ep = getenv("autostart")) != NULL) && (strcmp(ep,"yes") == 0)) {+		char *local_args[2];+		extern int do_bootm (cmd_tbl_t *, int, int, char *[]);++		local_args[0] = argv[0];+		local_args[1] = NULL;++		printf ("Automatic boot of image at addr 0x%08lx ...\n", addr);++		do_bootm (cmdtp, 0, 1, local_args);+		rcode = 1;+	}+	return rcode;+}++U_BOOT_CMD(+	nboot,	4,	1,	do_nandboot,+	"nboot   - boot from NAND device\n",+	"loadAddr dev\n"+);++#endif /* (CONFIG_COMMANDS & CFG_CMD_NAND) */++#endif /* CFG_NAND_LEGACY */diff -uNr u-boot-1.2.0/common/env_nand.c bootloader/u-boot-1.2.0/common/env_nand.c--- u-boot-1.2.0/common/env_nand.c	2007-01-07 07:13:11.000000000 +0800+++ bootloader/u-boot-1.2.0/common/env_nand.c	2007-04-25 09:34:51.000000000 +0800@@ -56,9 +56,13 @@ int nand_legacy_rw (struct nand_chip* nand, int cmd, 	    size_t start, size_t len, 	    size_t * retlen, u_char * buf);+extern struct nand_chip nand_dev_desc[CFG_MAX_NAND_DEVICE];+extern int nand_legacy_erase(struct nand_chip *nand, size_t ofs,+                                size_t len, int clean);  /* info for NAND chips, defined in drivers/nand/nand.c */ extern nand_info_t nand_info[];+//nand_info_t nand_info[CFG_MAX_NAND_DEVICE];  /* references to names in env_common.c */ extern uchar default_environment[];@@ -76,9 +80,9 @@   /* local functions */-#if !defined(ENV_IS_EMBEDDED)+//#if !defined(ENV_IS_EMBEDDED) static void use_default(void);-#endif+//#endif  DECLARE_GLOBAL_DATA_PTR; @@ -193,11 +197,13 @@  	puts ("Erasing Nand..."); 	if (nand_erase(&nand_info[0], CFG_ENV_OFFSET, CFG_ENV_SIZE))+//	if (nand_legacy_erase(nand_dev_desc + 0, CFG_ENV_OFFSET, CFG_ENV_SIZE, 0)) 		return 1;  	puts ("Writing to Nand... "); 	total = CFG_ENV_SIZE; 	ret = nand_write(&nand_info[0], CFG_ENV_OFFSET, &total, (u_char*)env_ptr);+//        ret = nand_legacy_rw(nand_dev_desc + 0,0x00 | 0x02, CFG_ENV_OFFSET, CFG_ENV_SIZE,&total, (u_char*)env_ptr); 	if (ret || total != CFG_ENV_SIZE) 		return 1; @@ -273,6 +279,7 @@  	total = CFG_ENV_SIZE; 	ret = nand_read(&nand_info[0], CFG_ENV_OFFSET, &total, (u_char*)env_ptr);+//	ret = nand_legacy_rw(nand_dev_desc + 0, 0x01 | 0x02, CFG_ENV_OFFSET, CFG_ENV_SIZE, &total, (u_char*)env_ptr);   	if (ret || total != CFG_ENV_SIZE) 		return use_default(); @@ -282,7 +289,7 @@ } #endif /* CFG_ENV_OFFSET_REDUND */ -#if !defined(ENV_IS_EMBEDDED)+//#if !defined(ENV_IS_EMBEDDED) static void use_default() { 	puts ("*** Warning - bad CRC or NAND, using default environment\n\n");@@ -300,6 +307,6 @@ 	gd->env_valid = 1;  }-#endif+//#endif  #endif /* CFG_ENV_IS_IN_NAND */diff -uNr u-boot-1.2.0/cpu/arm920t/config.mk bootloader/u-boot-1.2.0/cpu/arm920t/config.mk--- u-boot-1.2.0/cpu/arm920t/config.mk	2007-01-07 07:13:11.000000000 +0800+++ bootloader/u-boot-1.2.0/cpu/arm920t/config.mk	2007-04-25 09:10:36.000000000 +0800@@ -22,7 +22,7 @@ #  PLATFORM_RELFLAGS += -fno-strict-aliasing  -fno-common -ffixed-r8 \-	-msoft-float+#-msoft-float  PLATFORM_CPPFLAGS += -march=armv4 # =========================================================================@@ -30,5 +30,5 @@ # Supply options according to compiler version # # =========================================================================-PLATFORM_CPPFLAGS +=$(call cc-option,-mapcs-32,-mabi=apcs-gnu)+PLATFORM_CPPFLAGS +=$(call cc-option,-mapcs-32,$(-mabi=apcs-gnu)) PLATFORM_RELFLAGS +=$(call cc-option,-mshort-load-bytes,$(call cc-option,-malignment-traps,))diff -uNr u-boot-1.2.0/cpu/arm920t/start.S bootloader/u-boot-1.2.0/cpu/arm920t/start.S--- u-boot-1.2.0/cpu/arm920t/start.S	2007-01-07 07:13:11.000000000 +0800+++ bootloader/u-boot-1.2.0/cpu/arm920t/start.S	2007-04-25 09:47:17.000000000 +0800@@ -219,11 +219,126 @@ 	str	r1, [r0] 	/* END stuff after relocation */ #endif+/********************************************HHTECH wk****************/+#ifdef CONFIG_S3C2410_NAND_BOOT+        bl      copy_myself+			        @ jump to ram+        ldr     r1,=on_the_ram+        add     pc,r1,#0+        nop+1:	b	1b		@infinite loop++on_the_ram:+#endif+/********************************************HHTECH wk****************/  	ldr	pc, _start_armboot  _start_armboot:	.word start_armboot +/********************************************HHTECH wk****************/+#ifdef CONFIG_S3C2410_NAND_BOOT+copy_myself:+        mov	r10, lr+                			@ reset NAND+        mov	r1, #NAND_CTL_BASE+        ldr	r2, =0xf830          	@ initial value+        str	r2, [r1, #oNFCONF]+        ldr	r2, [r1, #oNFCONF]+        bic	r2, r2, #0x800          @ enable chip+        str	r2, [r1, #oNFCONF]+        mov	r2, #0xff		@ RESET command+        strb	r2, [r1, #oNFCMD]+        mov	r3, #0			@ wait++1:	add	r3, r3, #0x1+        cmp	r3, #0xa+        blt	1b+2:	ldr	r2, [r1, #oNFSTAT]      @ wait ready+        tst	r2, #0x1+        beq	2b+        ldr	r2, [r1, #oNFCONF]+        orr	r2, r2, #0x800		@ disable chip+        str	r2, [r1, #oNFCONF]++                	@ get read to call C functions (for nand_read())+        ldr	sp, DW_STACK_START      @ setup stack pointer+        mov	fp, #0			@ no previous frame, so fp=0++                			@ copy U-BOOT to RAM+        ldr	r0, =UBOOT_RAM_BASE+        mov	r1, #0x0+        mov	r2, #0x40000+        bl	nand_read_ll+        tst	r0, #0x0+        beq	ok_nand_read++#ifdef CONFIG_DEBUG_LL+bad_nand_read:+        ldr	r0, STR_FAIL+        ldr	r1, SerBase+        bl	PrintWord+1:	b	1b			@ infinite loop+#endif++ok_nand_read:+#ifdef CONFIG_DEBUG_LL+        ldr	r0, STR_OK+        ldr	r1, SerBase+        bl	PrintWord+#endif++                			@ verify+        mov	r0, #0+        ldr	r1, =UBOOT_RAM_BASE+        mov	r2, #0x400		@ 4 bytes * 1024 = 4K-bytes+go_next:+        ldr	r3, [r0], #4+        ldr	r4, [r1], #4+        teq	r3, r4+        bne	notmatch+        subs	r2, r2, #4+        beq	done_nand_read+        bne	go_next++notmatch:+#ifdef CONFIG_DEBUG_LL+        sub	r0, r0, #4+        ldr	r1, SerBase+        bl	PrintHexWord+        ldr	r0, STR_FAIL+        ldr	r1, SerBase+        bl	PrintWord+#endif+1:b     1b+done_nand_read:+#ifdef CONFIG_DEBUG_LL+        ldr   r0, STR_OK+        ldr   r1, SerBase+        bl    PrintWord+#endif+        mov	pc, r10+                @ clear memory+                @ r0: start address+                @ r1: length+mem_clear:+        mov	r2, #0+        mov	r3, r2+        mov	r4, r2+        mov	r5, r2+        mov	r6, r2+        mov	r7, r2+        mov	r8, r2+        mov	r9, r2++clear_loop:+        stmia	r0!, {r2-r9}+        subs	r1, r1, #(8 * 4)+        bne	clear_loop+        mov	pc, lr++#endif /*@ CONFIG_S3C2410_NAND_BOOT*/+/********************************************HHTECH wk****************/  /*  *************************************************************************@@ -432,3 +547,10 @@ 	bl 	do_fiq  #endif+/********************************************HHTECH wk****************/+#ifdef CONFIG_S3C2410_NAND_BOOT+	.align     2+DW_STACK_START:+	.word      STACK_BASE+STACK_SIZE-4+#endif+/********************************************HHTECH wk****************/diff -uNr u-boot-1.2.0/drivers/nand/nand.c bootloader/u-boot-1.2.0/drivers/nand/nand.c--- u-boot-1.2.0/drivers/nand/nand.c	2007-01-07 07:13:11.000000000 +0800+++ bootloader/u-boot-1.2.0/drivers/nand/nand.c	2007-04-25 13:35:16.000000000 +0800@@ -23,14 +23,159 @@  #include <common.h> +#if 0+#define DEBUGN printf+#else+#define DEBUGN(x, args ...) {}+#endif+ #if (CONFIG_COMMANDS & CFG_CMD_NAND) && !defined(CFG_NAND_LEGACY)  #include <nand.h>-+#include <s3c2410.h> #ifndef CFG_NAND_BASE_LIST #define CFG_NAND_BASE_LIST { CFG_NAND_BASE } #endif +#define __REGb(x)      (*(volatile unsigned char *)(x))+#define __REGi(x)      (*(volatile unsigned int *)(x))++#define        NF_BASE         0x4e000000+#define        NFCONF          __REGi(NF_BASE + 0x0)+#define        NFCMD           __REGb(NF_BASE + 0x4)+#define        NFADDR          __REGb(NF_BASE + 0x8)+#define        NFDATA          __REGb(NF_BASE + 0xc)+#define        NFSTAT          __REGb(NF_BASE + 0x10)+#define NFECC0         __REGb(NF_BASE + 0x14)+#define NFECC1         __REGb(NF_BASE + 0x15)+#define NFECC2         __REGb(NF_

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -