summaryrefslogtreecommitdiff
path: root/packages/uboot/u-boot-mkimage-openmoko-native/env_nand_oob.patch
diff options
context:
space:
mode:
Diffstat (limited to 'packages/uboot/u-boot-mkimage-openmoko-native/env_nand_oob.patch')
-rw-r--r--packages/uboot/u-boot-mkimage-openmoko-native/env_nand_oob.patch198
1 files changed, 0 insertions, 198 deletions
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/env_nand_oob.patch b/packages/uboot/u-boot-mkimage-openmoko-native/env_nand_oob.patch
deleted file mode 100644
index 5a2dd61461..0000000000
--- a/packages/uboot/u-boot-mkimage-openmoko-native/env_nand_oob.patch
+++ /dev/null
@@ -1,198 +0,0 @@
-This patch adds support for CFG_ENV_OFFSET_PATCHED and
-CFG_ENV_OFFSET_OOB.
-
-Both try to solve the problem of fixing the environment location in NAND flash
-at compile time, which doesn't work well if the NAND flash has a bad block at
-exactly that location.
-
-CFG_ENV_OFFSET_PATCHED puts the environment in a global variable. You can then
-use the linker script to put that variable to a fixed location in the u-boot
-image. Then you can use bianry patching during the production flash process.
-
-The idea of CFG_ENV_OFFSET_OOB is to store the environment offset in the NAND
-OOB data of block 0. We can do this in case the vendor makes a guarantee that
-block 0 never is a factory-default bad block.
-
-Signed-off-by: Harald Welte <laforge@openmoko.org>
-
-Index: u-boot/common/env_nand.c
-===================================================================
---- u-boot.orig/common/env_nand.c
-+++ u-boot/common/env_nand.c
-@@ -271,6 +271,33 @@
- ulong total;
- int ret;
-
-+#if defined(CFG_ENV_OFFSET_OOB)
-+ struct mtd_info *mtd = &nand_info[0];
-+ struct nand_chip *this = mtd->priv;
-+ int buf_len;
-+ uint8_t *buf;
-+
-+ buf_len = (1 << this->bbt_erase_shift);
-+ buf_len += (buf_len >> this->page_shift) * mtd->oobsize;
-+ buf = malloc(buf_len);
-+ if (!buf)
-+ return;
-+
-+ nand_read_raw(mtd, buf, 0, mtd->oobblock, mtd->oobsize);
-+ if (buf[mtd->oobblock + 8 + 0] == 'E' &&
-+ buf[mtd->oobblock + 8 + 1] == 'N' &&
-+ buf[mtd->oobblock + 8 + 2] == 'V' &&
-+ buf[mtd->oobblock + 8 + 3] == '0') {
-+ CFG_ENV_OFFSET = *((unsigned long *) &buf[mtd->oobblock + 8 + 4]);
-+ /* fall through to the normal environment reading code below */
-+ free(buf);
-+ puts("Found Environment offset in OOB..\n");
-+ } else {
-+ free(buf);
-+ return use_default();
-+ }
-+#endif
-+
- total = CFG_ENV_SIZE;
- ret = nand_read(&nand_info[0], CFG_ENV_OFFSET, &total, (u_char*)env_ptr);
- if (ret || total != CFG_ENV_SIZE)
-Index: u-boot/common/environment.c
-===================================================================
---- u-boot.orig/common/environment.c
-+++ u-boot/common/environment.c
-@@ -29,6 +29,12 @@
- #undef __ASSEMBLY__
- #include <environment.h>
-
-+#if defined(CFG_ENV_OFFSET_PATCHED)
-+unsigned long env_offset = CFG_ENV_OFFSET_PATCHED;
-+#elif defined(CFG_ENV_OFFSET_OOB)
-+unsigned long env_offset = CFG_ENV_OFFSET_OOB;
-+#endif
-+
- /*
- * Handle HOSTS that have prepended
- * crap on symbol names, not TARGETS.
-Index: u-boot/include/environment.h
-===================================================================
---- u-boot.orig/include/environment.h
-+++ u-boot/include/environment.h
-@@ -70,6 +70,10 @@
- #endif /* CFG_ENV_IS_IN_FLASH */
-
- #if defined(CFG_ENV_IS_IN_NAND)
-+#if defined(CFG_ENV_OFFSET_PATCHED) || defined(CFG_ENV_OFFSET_OOB)
-+extern unsigned long env_offset;
-+#define CFG_ENV_OFFSET env_offset
-+#else
- # ifndef CFG_ENV_OFFSET
- # error "Need to define CFG_ENV_OFFSET when using CFG_ENV_IS_IN_NAND"
- # endif
-@@ -82,6 +86,7 @@
- # ifdef CFG_ENV_IS_EMBEDDED
- # define ENV_IS_EMBEDDED 1
- # endif
-+#endif /* CFG_ENV_NAND_PATCHED */
- #endif /* CFG_ENV_IS_IN_NAND */
-
-
-Index: u-boot/common/Makefile
-===================================================================
---- u-boot.orig/common/Makefile
-+++ u-boot/common/Makefile
-@@ -31,7 +31,7 @@
- cmd_bdinfo.o cmd_bedbug.o cmd_bmp.o cmd_boot.o cmd_bootm.o \
- cmd_cache.o cmd_console.o \
- cmd_date.o cmd_dcr.o cmd_diag.o cmd_display.o cmd_doc.o cmd_dtt.o \
-- cmd_eeprom.o cmd_elf.o cmd_ext2.o \
-+ cmd_dynenv.o cmd_eeprom.o cmd_elf.o cmd_ext2.o \
- cmd_fat.o cmd_fdc.o cmd_fdt.o cmd_fdos.o cmd_flash.o cmd_fpga.o \
- cmd_i2c.o cmd_ide.o cmd_immap.o cmd_itest.o cmd_jffs2.o \
- cmd_load.o cmd_log.o \
-Index: u-boot/common/cmd_dynenv.c
-===================================================================
---- /dev/null
-+++ u-boot/common/cmd_dynenv.c
-@@ -0,0 +1,85 @@
-+/*
-+ * (C) Copyright 2006-2007 OpenMoko, Inc.
-+ * Author: Harald Welte <laforge@openmoko.org>
-+ *
-+ * 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 <command.h>
-+#include <malloc.h>
-+#include <environment.h>
-+#include <nand.h>
-+#include <asm/errno.h>
-+
-+#if defined(CFG_ENV_OFFSET_OOB)
-+
-+int do_dynenv(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
-+{
-+ struct mtd_info *mtd = &nand_info[0];
-+ int ret, size = 8;
-+ uint8_t *buf;
-+
-+ char *cmd = argv[1];
-+
-+ buf = malloc(mtd->oobsize);
-+ if (!buf)
-+ return -ENOMEM;
-+
-+ if (!strcmp(cmd, "get")) {
-+ ret = mtd->read_oob(mtd, 8, size, (size_t *) &size, (u_char *) buf);
-+
-+ if (buf[0] == 'E' && buf[1] == 'N' &&
-+ buf[2] == 'V' && buf[3] == '0')
-+ printf("0x%08x\n", *((u_int32_t *) &buf[4]));
-+ else
-+ printf("No dynamic environment marker in OOB block 0\n");
-+
-+ } else if (!strcmp(cmd, "set")) {
-+ unsigned long addr;
-+ if (argc < 3)
-+ goto usage;
-+
-+ buf[0] = 'E';
-+ buf[1] = 'N';
-+ buf[2] = 'V';
-+ buf[3] = '0';
-+ addr = simple_strtoul(argv[2], NULL, 16);
-+ memcpy(buf+4, &addr, 4);
-+
-+ printf("%02x %02x %02x %02x - %02x %02x %02x %02x\n",
-+ buf[0], buf[1], buf[2], buf[3],
-+ buf[4], buf[5], buf[6], buf[7]);
-+
-+ ret = mtd->write_oob(mtd, 8, size, (size_t *) &size, (u_char *) buf);
-+ } else
-+ goto usage;
-+
-+ free(buf);
-+ return ret;
-+
-+usage:
-+ free(buf);
-+ printf("Usage:\n%s\n", cmdtp->usage);
-+ return 1;
-+}
-+
-+U_BOOT_CMD(dynenv, 3, 1, do_dynenv,
-+ "dynenv - dynamically placed (NAND) environment\n",
-+ "dynenv set off - set enviromnent offset\n"
-+ "dynenv get - get environment offset\n");
-+
-+#endif /* CFG_ENV_OFFSET_OOB */