[U-Boot] [PATCH] [ARM] Apollon UBI support

Kyungmin Park kmpark at infradead.org
Tue Oct 21 11:19:08 CEST 2008


If you want to UBI on Apollon, uncomment the CONFIG_SYS_USE_UBI macro

Signed-off-by: Kyungmin Park <kyungmin.park at samsung.com>
---
 board/apollon/Makefile    |    4 ++-
 board/apollon/ubi.c       |   55 +++++++++++++++++++++++++++++++++++++++++++++
 include/configs/apollon.h |   27 +++++++++++++++++++--
 3 files changed, 82 insertions(+), 4 deletions(-)
 create mode 100644 board/apollon/ubi.c

diff --git a/board/apollon/Makefile b/board/apollon/Makefile
index 9bac9a6..4c3e57f 100644
--- a/board/apollon/Makefile
+++ b/board/apollon/Makefile
@@ -25,9 +25,11 @@ include $(TOPDIR)/config.mk
 
 LIB	= $(obj)lib$(BOARD).a
 
-COBJS	:= apollon.o mem.o sys_info.o
+COBJS-y	:= apollon.o mem.o sys_info.o
+COBJS-$(CONFIG_CMD_UBI) += ubi.o
 SOBJS	:= lowlevel_init.o
 
+COBJS	:= $(COBJS-y)
 SRCS	:= $(SOBJS:.o=.S) $(COBJS:.o=.c)
 OBJS	:= $(addprefix $(obj),$(COBJS))
 SOBJS	:= $(addprefix $(obj),$(SOBJS))
diff --git a/board/apollon/ubi.c b/board/apollon/ubi.c
new file mode 100644
index 0000000..342569d
--- /dev/null
+++ b/board/apollon/ubi.c
@@ -0,0 +1,55 @@
+/*
+ * board/apollon/ubi.c
+ */
+
+#include <common.h>
+#include <linux/mtd/mtd.h>
+#include <linux/mtd/partitions.h>
+#include <jffs2/load_kernel.h>
+#include <ubi_uboot.h>
+
+/* common/cmd_jffs2.c */
+extern int mtdparts_init(void);
+extern int find_dev_and_part(const char *id, struct mtd_device **dev,
+                u8 *part_num, struct part_info **part);
+
+/* drivers/mtd/ubi/build.c */
+extern int ubi_mtd_param_parse(const char *val, struct kernel_param *kp);
+extern int ubi_init(void);
+
+#ifdef CONFIG_CMD_UBI
+
+int ubi_board_scan(void)
+{
+        struct mtd_device *dev;
+        struct part_info *part;
+        struct mtd_partition mtd_part;
+        char buffer[32];
+        u8 pnum;
+        int err;
+
+        if (mtdparts_init() !=0)
+                return 1;
+
+        if (find_dev_and_part("onenand0,4", &dev, &pnum, &part) != 0)
+                return 1;
+
+        printf("%s[%d] pnum %d\n", __func__, __LINE__, pnum);
+        sprintf(buffer, "mtd=%d", pnum);
+        mtd_part.name = buffer;
+        mtd_part.size = part->size;
+        mtd_part.offset = part->offset;
+        add_mtd_partitions(&onenand_mtd, &mtd_part, 1);
+
+        err = ubi_mtd_param_parse(buffer, NULL);
+        if (err)
+                return err;
+
+        err = ubi_init();
+        if (err)
+                return err;
+
+        return 0;
+}
+
+#endif
diff --git a/include/configs/apollon.h b/include/configs/apollon.h
index d71ed44..3377f60 100644
--- a/include/configs/apollon.h
+++ b/include/configs/apollon.h
@@ -53,6 +53,9 @@
 #define CONFIG_SYS_USE_NOR		1
 #endif
 
+/* uncommnet if you want to use UBI */
+#define CONFIG_SYS_USE_UBI
+
 #include <asm/arch/omap2420.h>	/* get chip and board defs */
 
 #define	V_SCLK	12000000
@@ -73,7 +76,7 @@
  * Size of malloc() pool
  */
 #define	CONFIG_ENV_SIZE SZ_128K	/* Total Size of Environment Sector */
-#define	CONFIG_SYS_MALLOC_LEN	(CONFIG_ENV_SIZE + SZ_128K)
+#define	CONFIG_SYS_MALLOC_LEN	(CONFIG_ENV_SIZE + SZ_1M)
 #define	CONFIG_SYS_GBL_DATA_SIZE	128	/* bytes reserved for initial data */
 
 /*
@@ -116,6 +119,12 @@
 #define	CONFIG_CMD_DIAG
 #define	CONFIG_CMD_ONENAND
 
+#ifdef CONFIG_SYS_USE_UBI
+#define	CONFIG_CMD_JFFS2
+#define	CONFIG_CMD_UBI
+#define	CONFIG_RBTREE
+#endif
+
 #undef	CONFIG_CMD_AUTOSCRIPT
 
 #ifndef	CONFIG_SYS_USE_NOR
@@ -134,9 +143,9 @@
 #define	CONFIG_ETHADDR	00:0E:99:00:24:20
 
 #ifdef	CONFIG_APOLLON_PLUS
-# define	CONFIG_BOOTARGS "root=/dev/nfs rw mem=64M console=ttyS0,115200n8 ip=192.168.116.25:192.168.116.1:192.168.116.1:255.255.255.0:apollon:eth0:off nfsroot=/tftpboot/nfsroot profile=2"
+# define	CONFIG_BOOTARGS "root=/dev/nfs rw mem=64M console=ttyS0,115200n8 ip=192.168.116.25:192.168.116.1:192.168.116.1:255.255.255.0:apollon:eth0:off nfsroot=/tftpboot/nfsroot profile=2 lpj=1646592 ubi.mtd=4"
 #else
-# define	CONFIG_BOOTARGS "root=/dev/nfs rw mem=128M console=ttyS0,115200n8 ip=192.168.116.25:192.168.116.1:192.168.116.1:255.255.255.0:apollon:eth0:off nfsroot=/tftpboot/nfsroot profile=2"
+# define	CONFIG_BOOTARGS "root=/dev/nfs rw mem=128M console=ttyS0,115200n8 ip=192.168.116.25:192.168.116.1:192.168.116.1:255.255.255.0:apollon:eth0:off nfsroot=/tftpboot/nfsroot profile=2 lpj=1646592 ubi.mtd=4"
 #endif
 
 #define	CONFIG_EXTRA_ENV_SETTINGS					\
@@ -151,6 +160,7 @@
 	"oneboot=onenand read 0x80008000 0x40000 0x200000; go 0x80008000\0"\
 	"onesyncboot=run syncmode oneboot\0"				\
 	"updateb=tftp 0x80180000 u-boot-onenand.bin; onenand erase 0x0 0x20000; onenand write 0x80180000 0x0 0x20000\0"					\
+	"ubi=setenv bootargs ${bootargs} ubi.mtd=4 ${mtdparts}; run uImage\0" \
 	"bootcmd=run uboot\0"
 
 /*
@@ -228,4 +238,15 @@
 #define	CONFIG_ENV_IS_IN_ONENAND	1
 #define CONFIG_ENV_ADDR		0x00020000
 
+#ifdef CONFIG_SYS_USE_UBI
+#define CONFIG_JFFS2_CMDLINE
+#define MTDIDS_DEFAULT		"onenand0=onenand"
+#define MTDPARTS_DEFAULT	"mtdparts=onenand:128k(bootloader),"	\
+					"128k(params),"			\
+					"2m(kernel),"			\
+					"16m(rootfs),"			\
+					"32m(fs),"			\
+					"-(ubifs)"
+#endif
+
 #endif /* __CONFIG_H */
-- 
1.5.3.3



More information about the U-Boot mailing list